@taskon/widget-react 0.0.1-beta.1 → 0.0.1-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +55 -16
  2. package/dist/CommunityTaskList.css +432 -628
  3. package/dist/EligibilityInfo.css +944 -431
  4. package/dist/PageBuilder.css +0 -2
  5. package/dist/Quest.css +460 -506
  6. package/dist/TaskOnProvider.css +15 -15
  7. package/dist/UserCenterWidget.css +0 -174
  8. package/dist/UserCenterWidget2.css +1119 -341
  9. package/dist/chunks/{CommunityTaskList-DoPGZsw1.js → CommunityTaskList-C9mPl_31.js} +923 -829
  10. package/dist/chunks/{EligibilityInfo-C7GZ2G5u.js → EligibilityInfo-DGBffKN8.js} +1137 -449
  11. package/dist/chunks/{LeaderboardWidget-CmYfDeHV.js → LeaderboardWidget-DPOQVXkT.js} +15 -10
  12. package/dist/chunks/{PageBuilder-Tmhf2GTS.js → PageBuilder-WCZvxL2j.js} +5 -5
  13. package/dist/chunks/{Quest-DKFZ-pPU.js → Quest-DjGH_8bx.js} +464 -314
  14. package/dist/chunks/{TaskOnProvider-BD6Vp2x8.js → TaskOnProvider-iannERG1.js} +2 -207
  15. package/dist/chunks/{ThemeProvider-wnSXrNQb.js → ThemeProvider-DNJqI2lD.js} +246 -54
  16. package/dist/chunks/UserCenterWidget-B0O-f_xl.js +8344 -0
  17. package/dist/chunks/{UserCenterWidget-BVw_IEEd.js → UserCenterWidget-CAhgp46j.js} +214 -1011
  18. package/dist/chunks/{WidgetShell-D_5OjvNZ.js → dynamic-import-helper-B2j_dZ4V.js} +607 -40
  19. package/dist/chunks/useToast-CaRkylKe.js +304 -0
  20. package/dist/chunks/{usercenter-ja-uu-XfVF9.js → usercenter-ja-B2465c1O.js} +4 -10
  21. package/dist/chunks/{usercenter-ko-DYgUOVzd.js → usercenter-ko-xAEYxqLg.js} +4 -10
  22. package/dist/community-task.d.ts +34 -3
  23. package/dist/community-task.js +1 -1
  24. package/dist/core.d.ts +40 -3
  25. package/dist/core.js +9 -10
  26. package/dist/dynamic-import-helper.css +186 -0
  27. package/dist/index.d.ts +207 -10
  28. package/dist/index.js +21 -19
  29. package/dist/leaderboard.d.ts +8 -1
  30. package/dist/leaderboard.js +2 -2
  31. package/dist/page-builder.js +1 -1
  32. package/dist/quest.d.ts +8 -2
  33. package/dist/quest.js +1 -1
  34. package/dist/user-center.d.ts +20 -136
  35. package/dist/user-center.js +19 -236
  36. package/package.json +7 -2
  37. package/dist/TipPopover.css +0 -210
  38. package/dist/WidgetShell.css +0 -182
  39. package/dist/chunks/TipPopover-BrW8jo71.js +0 -2926
  40. package/dist/chunks/UserCenterWidget-BE329iS7.js +0 -3546
  41. package/dist/chunks/dynamic-import-helper-DxEFwm31.js +0 -537
  42. package/dist/chunks/useToast-B-wyO5zL.js +0 -93
  43. package/dist/chunks/useWidgetLocale-JDelxtt8.js +0 -74
@@ -1,11 +1,11 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
- import React__default, { useContext, useState, useRef, useMemo, useCallback, useEffect } from "react";
3
- import { isUnauthorizedError, TaskReviewResult, formatLongNumber, EligibilityType, Operator, MeetConditionStatus, RewardType, formatUtcTime, SnsType, createCommunityTaskApi, ApiError, ErrorCode, ChainType, getSwapDexTitleExpress, UserEligibleStatus, CampaignStatus, MediaType, createQuestApi, formatTokenAmount, TaskTemplateId, EligibilityTemplateId, TaskCardType, RecurrenceType, createCommonApi, normalizeTask, formatSwapTokensForDisplay, formatAddress } from "@taskon/core";
4
- import { d as TaskOnContext, b as useTaskOnContext } from "./ThemeProvider-wnSXrNQb.js";
5
- import { D as Dialog, u as useResolvedWidgetConfig, W as WidgetShell } from "./WidgetShell-D_5OjvNZ.js";
6
- import { b as useToast } from "./useToast-B-wyO5zL.js";
7
- import { u as useIsMobile$1, s as sanitizeHtml, a as useBindWallet, T as TitleExpress, B as BlindBoxRewardDialog, b as BlindBoxDialog, c as TaskItem, E as EligibilityInfo, d as Textarea } from "./EligibilityInfo-C7GZ2G5u.js";
8
- import { a as useBindSocialAccount, u as useChainMap, T as TipPopover, I as Input } from "./TipPopover-BrW8jo71.js";
2
+ import React__default, { useState, useRef, useCallback, useEffect, useContext, useMemo } from "react";
3
+ import { isUnauthorizedError, TaskReviewResult, formatLongNumber, EligibilityType, Operator, MeetConditionStatus, RewardType, formatUtcTime, ErrorCode, SnsType, createCommunityTaskApi, ApiError, TaskCardType, ChainType, getSwapDexTitleExpress, UserEligibleStatus, CampaignStatus, MediaType, createQuestApi, CampaignType, formatTokenAmount, TaskTemplateId, EligibilityTemplateId, RecurrenceType, createCommonApi, normalizeTask, formatSwapTokensForDisplay, formatAddress } from "@taskon/core";
4
+ import { p as TaskOnContext, d as useTaskOnContext, s as useTaskOnPortalContainer } from "./ThemeProvider-DNJqI2lD.js";
5
+ import { D as Dialog, a as useResolvedWidgetConfig, W as WidgetShell } from "./dynamic-import-helper-B2j_dZ4V.js";
6
+ import { d as useToast } from "./useToast-CaRkylKe.js";
7
+ import { u as useBindWallet, T as TitleExpress, a as CardDescExpress, b as useNftClaimFlow, R as RewardModuleDialog, B as BlindBoxDialog, c as TaskItem, E as EligibilityInfo, d as Textarea } from "./EligibilityInfo-DGBffKN8.js";
8
+ import { g as useBindSocialAccount, B as BindWalletDialog, l as useChainMap, s as TipPopover, I as Input } from "./UserCenterWidget-B0O-f_xl.js";
9
9
  import { createPortal } from "react-dom";
10
10
  import '../CommunityTaskList.css';function CardSelector({
11
11
  options,
@@ -39,300 +39,6 @@ import '../CommunityTaskList.css';function CardSelector({
39
39
  );
40
40
  }) });
41
41
  }
42
- 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;
43
- 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;
44
- 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;
45
- 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;
46
- 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;
47
- const EVM_WALLETS = [
48
- {
49
- id: "metamask",
50
- name: "MetaMask",
51
- icon: MetaMaskIcon,
52
- downloadUrl: "https://metamask.io/download/",
53
- checkInstalled: () => typeof window !== "undefined" && Boolean(window.ethereum)
54
- },
55
- {
56
- id: "walletconnect",
57
- name: "WalletConnect",
58
- icon: WalletConnectIcon,
59
- downloadUrl: "https://walletconnect.com/",
60
- checkInstalled: () => false
61
- // WalletConnect 不需要安装
62
- },
63
- {
64
- id: "onto",
65
- name: "ONTO",
66
- icon: OntoIcon,
67
- downloadUrl: "https://onto.app/",
68
- checkInstalled: () => typeof window !== "undefined" && Boolean(window.onto)
69
- },
70
- {
71
- id: "bitget",
72
- name: "Bitget Wallet",
73
- icon: BitgetIcon,
74
- downloadUrl: "https://web3.bitget.com/",
75
- checkInstalled: () => {
76
- var _a;
77
- return typeof window !== "undefined" && Boolean((_a = window.bitkeep) == null ? void 0 : _a.ethereum);
78
- }
79
- },
80
- {
81
- id: "okx",
82
- name: "OKX Wallet",
83
- icon: OkxIcon,
84
- downloadUrl: "https://www.okx.com/web3",
85
- checkInstalled: () => typeof window !== "undefined" && Boolean(window.okxwallet)
86
- }
87
- ];
88
- function getWalletProvider(walletId) {
89
- var _a;
90
- if (typeof window === "undefined") return null;
91
- switch (walletId) {
92
- case "metamask":
93
- return window.ethereum;
94
- case "onto":
95
- return window.onto;
96
- case "bitget":
97
- return (_a = window.bitkeep) == null ? void 0 : _a.ethereum;
98
- case "okx":
99
- return window.okxwallet;
100
- default:
101
- return null;
102
- }
103
- }
104
- async function checkWalletConnectAvailable() {
105
- try {
106
- await import("@walletconnect/ethereum-provider");
107
- return true;
108
- } catch {
109
- return false;
110
- }
111
- }
112
- function ConnectLoading({ walletName }) {
113
- return /* @__PURE__ */ jsxs("div", { className: "taskon-bind-wallet-loading-overlay", children: [
114
- /* @__PURE__ */ jsx("svg", { className: "taskon-bind-wallet-loading-spinner", viewBox: "0 0 50 50", children: /* @__PURE__ */ jsx(
115
- "circle",
116
- {
117
- cx: "25",
118
- cy: "25",
119
- r: "20",
120
- fill: "none",
121
- stroke: "currentColor",
122
- strokeWidth: "4",
123
- strokeLinecap: "round",
124
- strokeDasharray: "80 60"
125
- }
126
- ) }),
127
- /* @__PURE__ */ jsxs("p", { className: "taskon-bind-wallet-loading-text", children: [
128
- "Please log in to ",
129
- walletName,
130
- " and sign message to proceed"
131
- ] })
132
- ] });
133
- }
134
- function WalletItem({
135
- wallet,
136
- isInstalled,
137
- isConnecting,
138
- isDisabled,
139
- disabledReason,
140
- onClick
141
- }) {
142
- return /* @__PURE__ */ jsxs(
143
- "button",
144
- {
145
- type: "button",
146
- className: `taskon-bind-wallet-item ${isConnecting ? "taskon-bind-wallet-item--connecting" : ""} ${isDisabled ? "taskon-bind-wallet-item--disabled" : ""}`,
147
- onClick,
148
- disabled: isConnecting || isDisabled,
149
- title: disabledReason,
150
- children: [
151
- /* @__PURE__ */ jsx(
152
- "img",
153
- {
154
- className: "taskon-bind-wallet-item-icon",
155
- src: wallet.icon,
156
- alt: wallet.name
157
- }
158
- ),
159
- /* @__PURE__ */ jsx("span", { className: "taskon-bind-wallet-item-name", children: wallet.name }),
160
- 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
161
- ]
162
- }
163
- );
164
- }
165
- function BindWalletDialog({
166
- open,
167
- onOpenChange,
168
- onConnect,
169
- onError
170
- }) {
171
- var _a;
172
- const isMobile = useIsMobile$1();
173
- const context = useContext(TaskOnContext);
174
- const walletConnectProjectId = (_a = context == null ? void 0 : context.config) == null ? void 0 : _a.walletConnectProjectId;
175
- const [connectingWalletId, setConnectingWalletId] = useState(null);
176
- const [connectingWalletName, setConnectingWalletName] = useState("");
177
- const [wcAvailable, setWcAvailable] = useState(null);
178
- const wcProviderRef = useRef(null);
179
- React__default.useEffect(() => {
180
- checkWalletConnectAvailable().then(setWcAvailable);
181
- }, []);
182
- const isWalletConnectEnabled = useMemo(() => {
183
- return Boolean(walletConnectProjectId) && wcAvailable === true;
184
- }, [walletConnectProjectId, wcAvailable]);
185
- const wcDisabledReason = useMemo(() => {
186
- if (!walletConnectProjectId) {
187
- return "WalletConnect requires walletConnectProjectId configuration";
188
- }
189
- if (wcAvailable === false) {
190
- return "WalletConnect SDK not installed. Please install @walletconnect/ethereum-provider";
191
- }
192
- return void 0;
193
- }, [walletConnectProjectId, wcAvailable]);
194
- const walletsWithStatus = useMemo(() => {
195
- const walletList = isMobile ? EVM_WALLETS.filter((w) => w.id === "walletconnect") : EVM_WALLETS;
196
- return walletList.map((wallet) => ({
197
- wallet,
198
- isInstalled: wallet.id === "walletconnect" ? isWalletConnectEnabled : wallet.checkInstalled(),
199
- isDisabled: wallet.id === "walletconnect" && !isWalletConnectEnabled,
200
- disabledReason: wallet.id === "walletconnect" ? wcDisabledReason : void 0
201
- }));
202
- }, [isMobile, isWalletConnectEnabled, wcDisabledReason]);
203
- const connectWalletConnect = useCallback(async () => {
204
- var _a2, _b, _c;
205
- if (!walletConnectProjectId) {
206
- onError == null ? void 0 : onError("WalletConnect projectId not configured");
207
- return;
208
- }
209
- setConnectingWalletId("walletconnect");
210
- setConnectingWalletName("WalletConnect");
211
- try {
212
- const { EthereumProvider } = await import("@walletconnect/ethereum-provider");
213
- const provider = await EthereumProvider.init({
214
- projectId: walletConnectProjectId,
215
- chains: [1],
216
- // Ethereum mainnet
217
- optionalChains: [56, 137, 42161, 10, 8453],
218
- // BSC, Polygon, Arbitrum, Optimism, Base
219
- showQrModal: true,
220
- qrModalOptions: {
221
- themeMode: "dark"
222
- }
223
- });
224
- wcProviderRef.current = provider;
225
- await provider.connect();
226
- const accounts = provider.accounts;
227
- const address = accounts[0];
228
- if (!address) {
229
- onError == null ? void 0 : onError("No account found");
230
- setConnectingWalletId(null);
231
- return;
232
- }
233
- await (onConnect == null ? void 0 : onConnect(address, provider));
234
- } catch (e) {
235
- const error = e;
236
- if (((_a2 = error.message) == null ? void 0 : _a2.includes("rejected")) || ((_b = error.message) == null ? void 0 : _b.includes("denied")) || ((_c = error.message) == null ? void 0 : _c.includes("User closed"))) {
237
- onError == null ? void 0 : onError("User rejected the connection");
238
- } else {
239
- onError == null ? void 0 : onError(error.message || "Failed to connect WalletConnect");
240
- }
241
- } finally {
242
- setConnectingWalletId(null);
243
- }
244
- }, [walletConnectProjectId, onConnect, onError]);
245
- const connectWallet = useCallback(async (wallet) => {
246
- var _a2, _b;
247
- const provider = getWalletProvider(wallet.id);
248
- if (!provider) {
249
- onError == null ? void 0 : onError(`${wallet.name} provider not found`);
250
- return;
251
- }
252
- setConnectingWalletId(wallet.id);
253
- setConnectingWalletName(wallet.name);
254
- try {
255
- const accounts = await provider.request({
256
- method: "eth_requestAccounts"
257
- });
258
- const address = accounts[0];
259
- if (!address) {
260
- onError == null ? void 0 : onError("No account found");
261
- setConnectingWalletId(null);
262
- return;
263
- }
264
- await (onConnect == null ? void 0 : onConnect(address, provider));
265
- } catch (e) {
266
- const error = e;
267
- if (((_a2 = error.message) == null ? void 0 : _a2.includes("rejected")) || ((_b = error.message) == null ? void 0 : _b.includes("denied"))) {
268
- onError == null ? void 0 : onError("User rejected the connection");
269
- } else {
270
- onError == null ? void 0 : onError(error.message || "Failed to connect wallet");
271
- }
272
- } finally {
273
- setConnectingWalletId(null);
274
- }
275
- }, [onConnect, onError]);
276
- const handleWalletClick = useCallback((wallet, isInstalled, isDisabled) => {
277
- if (isDisabled) {
278
- return;
279
- }
280
- if (wallet.id === "walletconnect") {
281
- connectWalletConnect();
282
- return;
283
- }
284
- if (isInstalled) {
285
- connectWallet(wallet);
286
- } else {
287
- window.open(wallet.downloadUrl, "_blank", "noopener,noreferrer");
288
- }
289
- }, [connectWallet, connectWalletConnect]);
290
- return /* @__PURE__ */ jsx(
291
- Dialog,
292
- {
293
- open,
294
- onOpenChange,
295
- title: "Connect Wallet",
296
- showCloseButton: true,
297
- maxWidth: 510,
298
- children: /* @__PURE__ */ jsxs("div", { className: "taskon-bind-wallet-dialog", children: [
299
- /* @__PURE__ */ jsx("h2", { className: "taskon-bind-wallet-dialog-title", children: "Please connect wallet" }),
300
- /* @__PURE__ */ jsx("div", { className: "taskon-bind-wallet-dialog-chain-label", children: "EVM Chain" }),
301
- /* @__PURE__ */ jsx("div", { className: "taskon-bind-wallet-dialog-grid", children: walletsWithStatus.map(({ wallet, isInstalled, isDisabled, disabledReason }) => /* @__PURE__ */ jsx(
302
- WalletItem,
303
- {
304
- wallet,
305
- isInstalled,
306
- isConnecting: connectingWalletId === wallet.id,
307
- isDisabled,
308
- disabledReason,
309
- onClick: () => handleWalletClick(wallet, isInstalled, isDisabled)
310
- },
311
- wallet.id
312
- )) }),
313
- connectingWalletId && /* @__PURE__ */ jsx(ConnectLoading, { walletName: connectingWalletName })
314
- ] })
315
- }
316
- );
317
- }
318
- function CardDescExpress({
319
- label
320
- }) {
321
- const sanitizedHtml = useMemo(() => {
322
- if (!label) return "";
323
- return sanitizeHtml(label);
324
- }, [label]);
325
- if (!label) {
326
- return null;
327
- }
328
- return /* @__PURE__ */ jsx(
329
- "div",
330
- {
331
- className: "taskon-card-desc-rich",
332
- dangerouslySetInnerHTML: { __html: sanitizedHtml }
333
- }
334
- );
335
- }
336
42
  function ClaimButton({
337
43
  verifyClaim = false,
338
44
  recurrence,
@@ -618,14 +324,14 @@ function WarningIcon() {
618
324
  "path",
619
325
  {
620
326
  d: "M6.134 1.5a1 1 0 0 1 1.732 0l5.196 9a1 1 0 0 1-.866 1.5H1.804a1 1 0 0 1-.866-1.5l5.196-9Z",
621
- fill: "#FFD465"
327
+ fill: "var(--taskon-color-warning)"
622
328
  }
623
329
  ),
624
330
  /* @__PURE__ */ jsx(
625
331
  "path",
626
332
  {
627
333
  d: "M7 4.5v3M7 9.5v.5",
628
- stroke: "#000",
334
+ stroke: "var(--taskon-color-text-on-primary)",
629
335
  strokeWidth: "1.5",
630
336
  strokeLinecap: "round"
631
337
  }
@@ -745,7 +451,7 @@ function BlingSvg({ className }) {
745
451
  fillRule: "evenodd",
746
452
  clipRule: "evenodd",
747
453
  d: "M26.8262 15C22.857 15 19.9169 13.8078 17.9676 11.8586C16.0183 9.90931 14.8262 6.96917 14.8262 3C14.8262 6.96917 13.634 9.90932 11.6848 11.8586C9.73549 13.8078 6.79534 15 2.82617 15C6.79534 15 9.73549 16.1922 11.6848 18.1414C13.634 20.0907 14.8262 23.0308 14.8262 27C14.8262 23.0308 16.0183 20.0907 17.9676 18.1414C19.9169 16.1922 22.857 15 26.8262 15Z",
748
- fill: "#2771FF",
454
+ fill: "var(--taskon-color-link)",
749
455
  fillOpacity: "0.4"
750
456
  }
751
457
  ),
@@ -755,7 +461,7 @@ function BlingSvg({ className }) {
755
461
  fillRule: "evenodd",
756
462
  clipRule: "evenodd",
757
463
  d: "M11 5.5C9.1808 5.5 7.83323 4.9536 6.93982 4.06018C6.04641 3.16677 5.5 1.8192 5.5 9.08106e-10C5.5 1.8192 4.9536 3.16677 4.06018 4.06018C3.16677 4.9536 1.8192 5.5 7.1235e-07 5.5C1.8192 5.5 3.16677 6.04641 4.06018 6.93982C4.95359 7.83323 5.5 9.1808 5.5 11C5.5 9.1808 6.0464 7.83323 6.93982 6.93982C7.83323 6.04641 9.1808 5.5 11 5.5Z",
758
- fill: "#2771FF",
464
+ fill: "var(--taskon-color-link)",
759
465
  fillOpacity: "0.4"
760
466
  }
761
467
  )
@@ -786,6 +492,7 @@ function BaseTask(props) {
786
492
  recurrence,
787
493
  noRecurrence = false,
788
494
  showUnlimitedClaim = true,
495
+ taskId,
789
496
  // taskId - Widget 版本不显示 Task ID
790
497
  validTime,
791
498
  validationTimeFrame,
@@ -803,6 +510,7 @@ function BaseTask(props) {
803
510
  isSubmitting = false,
804
511
  coolDown = 0,
805
512
  onCoolDownComplete,
513
+ onDoneCountdownComplete,
806
514
  disabled = false,
807
515
  reviewResult,
808
516
  communityInfo,
@@ -1056,7 +764,15 @@ function BaseTask(props) {
1056
764
  ) : /* @__PURE__ */ jsx("h3", { className: "taskon-community-task-title", children: title }),
1057
765
  renderValidTime(),
1058
766
  validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
1059
- isPeriodic && currentCompleted && nextTime ? /* @__PURE__ */ jsx(DoneCountdown, { nextTime }) : (
767
+ isPeriodic && currentCompleted && nextTime ? /* @__PURE__ */ jsx(
768
+ DoneCountdown,
769
+ {
770
+ nextTime,
771
+ onComplete: () => {
772
+ onDoneCountdownComplete == null ? void 0 : onDoneCountdownComplete(taskId);
773
+ }
774
+ }
775
+ ) : (
1060
776
  /* 任务额外内容(由具体任务组件提供) */
1061
777
  children
1062
778
  )
@@ -1202,7 +918,7 @@ function SuccessIcon({
1202
918
  fillRule: "evenodd",
1203
919
  clipRule: "evenodd",
1204
920
  d: "M12.7173 2.49792C13.3812 3.16181 13.3812 4.23819 12.7173 4.90208L6.70694 10.9125C6.38813 11.2313 5.95572 11.4104 5.50486 11.4104C5.05399 11.4104 4.62159 11.2313 4.30277 10.9125L1.49792 8.10763C0.834027 7.44374 0.834027 6.36736 1.49792 5.70347C2.16181 5.03958 3.23819 5.03958 3.90208 5.70347L5.50486 7.30624L10.3132 2.49792C10.9771 1.83403 12.0535 1.83403 12.7173 2.49792Z",
1205
- fill: "#27AE60"
921
+ fill: "var(--taskon-color-success)"
1206
922
  }
1207
923
  )
1208
924
  }
@@ -1226,7 +942,7 @@ function FailedIcon({
1226
942
  fillRule: "evenodd",
1227
943
  clipRule: "evenodd",
1228
944
  d: "M3.90208 1.49792C3.23819 0.834027 2.16181 0.834027 1.49792 1.49792C0.834027 2.16181 0.834027 3.23819 1.49792 3.90208L4.2625 6.66667L1.49792 9.43125C0.834027 10.0951 0.834027 11.1715 1.49792 11.8354C2.16181 12.4993 3.23819 12.4993 3.90208 11.8354L6.66667 9.07083L9.43125 11.8354C10.0951 12.4993 11.1715 12.4993 11.8354 11.8354C12.4993 11.1715 12.4993 10.0951 11.8354 9.43125L9.07083 6.66667L11.8354 3.90208C12.4993 3.23819 12.4993 2.16181 11.8354 1.49792C11.1715 0.834027 10.0951 0.834027 9.43125 1.49792L6.66667 4.2625L3.90208 1.49792Z",
1229
- fill: "#EB5757"
945
+ fill: "var(--taskon-color-error)"
1230
946
  }
1231
947
  )
1232
948
  }
@@ -1245,15 +961,24 @@ function UnknownIcon({
1245
961
  viewBox: "0 0 14 14",
1246
962
  fill: "none",
1247
963
  children: [
1248
- /* @__PURE__ */ jsx("circle", { cx: "7", cy: "7.00002", r: "6.125", stroke: "#F2C94C", strokeWidth: "1.75" }),
1249
- /* @__PURE__ */ jsx("circle", { cx: "7.01736", cy: "10.2012", r: "0.99881", fill: "#F2C94C" }),
964
+ /* @__PURE__ */ jsx(
965
+ "circle",
966
+ {
967
+ cx: "7",
968
+ cy: "7.00002",
969
+ r: "6.125",
970
+ stroke: "var(--taskon-color-warning)",
971
+ strokeWidth: "1.75"
972
+ }
973
+ ),
974
+ /* @__PURE__ */ jsx("circle", { cx: "7.01736", cy: "10.2012", r: "0.99881", fill: "var(--taskon-color-warning)" }),
1250
975
  /* @__PURE__ */ jsx(
1251
976
  "path",
1252
977
  {
1253
978
  fillRule: "evenodd",
1254
979
  clipRule: "evenodd",
1255
980
  d: "M7.01877 2.79999C7.5704 2.79999 8.01758 3.27655 8.01758 3.86442V7.49432C8.01758 8.08219 7.5704 8.55875 7.01877 8.55875C6.46714 8.55875 6.01996 8.08219 6.01996 7.49432V3.86442C6.01996 3.27655 6.46714 2.79999 7.01877 2.79999Z",
1256
- fill: "#F2C94C"
981
+ fill: "var(--taskon-color-warning)"
1257
982
  }
1258
983
  )
1259
984
  ]
@@ -1273,160 +998,29 @@ function LockedIcon({
1273
998
  viewBox: "0 0 22 22",
1274
999
  fill: "none",
1275
1000
  children: [
1276
- /* @__PURE__ */ jsxs("g", { clipPath: "url(#clip0_locked)", children: [
1277
- /* @__PURE__ */ jsx("g", { filter: "url(#filter0_i_locked)", children: /* @__PURE__ */ jsx(
1278
- "path",
1279
- {
1280
- d: "M18.9306 8.69767H17.1399V6.13953C17.1399 4.51123 16.4931 2.94961 15.3417 1.79823C14.1903 0.646842 12.6287 0 11.0004 0C9.37206 0 7.81044 0.646842 6.65906 1.79823C5.50767 2.94961 4.86083 4.51123 4.86083 6.13953V8.69767H3.07013C2.79875 8.69767 2.53848 8.80548 2.34658 8.99738C2.15468 9.18928 2.04688 9.44955 2.04688 9.72093V20.9767C2.04688 21.2481 2.15468 21.5084 2.34658 21.7003C2.53848 21.8922 2.79875 22 3.07013 22H18.9306C19.202 22 19.4623 21.8922 19.6542 21.7003C19.846 21.5084 19.9539 21.2481 19.9539 20.9767V9.72093C19.9539 9.44955 19.846 9.18928 19.6542 8.99738C19.4623 8.80548 19.202 8.69767 18.9306 8.69767ZM6.90734 6.13953C6.90734 5.054 7.33857 4.01292 8.10616 3.24533C8.87375 2.47774 9.91483 2.04651 11.0004 2.04651C12.0859 2.04651 13.127 2.47774 13.8946 3.24533C14.6622 4.01292 15.0934 5.054 15.0934 6.13953V8.69767H6.90734V6.13953ZM11.7678 16.2698V17.3953H10.7446V16.2698C10.4032 16.1491 10.1155 15.9116 9.93227 15.5993C9.74907 15.287 9.68217 14.92 9.7434 14.5631C9.80463 14.2063 9.99004 13.8825 10.2669 13.6492C10.5437 13.4158 10.8941 13.2878 11.2562 13.2878C11.6183 13.2878 11.9687 13.4158 12.2455 13.6492C12.5223 13.8825 12.7077 14.2063 12.769 14.5631C12.8302 14.92 12.7633 15.287 12.5801 15.5993C12.3969 15.9116 12.1092 16.1491 11.7678 16.2698Z",
1281
- fill: "url(#paint0_linear_locked)",
1282
- fillOpacity: "0.8"
1283
- }
1284
- ) }),
1285
- /* @__PURE__ */ jsx("g", { filter: "url(#filter1_d_locked)", children: /* @__PURE__ */ jsx(
1286
- "path",
1287
- {
1288
- d: "M2.34658 8.99737C2.53848 8.80547 2.79875 8.69766 3.07013 8.69766H18.9306C19.202 8.69766 19.4623 8.80547 19.6542 8.99737C19.846 9.18926 19.9539 9.44953 19.9539 9.72092V20.9767C19.9539 21.2481 19.846 21.5084 19.6542 21.7003C19.4623 21.8922 19.202 22 18.9306 22H3.07013C2.79875 22 2.53848 21.8922 2.34658 21.7003C2.15468 21.5084 2.04688 21.2481 2.04688 20.9767V9.72092C2.04688 9.44953 2.15468 9.18926 2.34658 8.99737Z",
1289
- fill: "url(#paint1_linear_locked)"
1290
- }
1291
- ) }),
1292
- /* @__PURE__ */ jsx("g", { filter: "url(#filter2_i_locked)", children: /* @__PURE__ */ jsx(
1293
- "path",
1294
- {
1295
- d: "M11.2555 13.3023C10.9003 13.3112 10.5592 13.4429 10.2903 13.6752C10.0214 13.9075 9.84148 14.2258 9.78111 14.5759C9.72074 14.9261 9.78371 15.2863 9.95928 15.5952C10.1349 15.9041 10.4121 16.1425 10.7439 16.2698V17.3953H11.7671V16.2698C12.0988 16.1425 12.3761 15.9041 12.5517 15.5952C12.7273 15.2863 12.7903 14.9261 12.7299 14.5759C12.6695 14.2258 12.4896 13.9075 12.2207 13.6752C11.9518 13.4429 11.6107 13.3112 11.2555 13.3023Z",
1296
- fill: "#85825A"
1297
- }
1298
- ) })
1299
- ] }),
1300
- /* @__PURE__ */ jsxs("defs", { children: [
1301
- /* @__PURE__ */ jsxs(
1302
- "filter",
1303
- {
1304
- id: "filter0_i_locked",
1305
- x: "1.64687",
1306
- y: "0",
1307
- width: "18.3072",
1308
- height: "22.4",
1309
- filterUnits: "userSpaceOnUse",
1310
- colorInterpolationFilters: "sRGB",
1311
- children: [
1312
- /* @__PURE__ */ jsx("feFlood", { floodOpacity: "0", result: "BackgroundImageFix" }),
1313
- /* @__PURE__ */ jsx("feBlend", { mode: "normal", in: "SourceGraphic", in2: "BackgroundImageFix", result: "shape" }),
1314
- /* @__PURE__ */ jsx(
1315
- "feColorMatrix",
1316
- {
1317
- in: "SourceAlpha",
1318
- type: "matrix",
1319
- values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
1320
- result: "hardAlpha"
1321
- }
1322
- ),
1323
- /* @__PURE__ */ jsx("feOffset", { dx: "-0.4", dy: "0.4" }),
1324
- /* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "0.2" }),
1325
- /* @__PURE__ */ jsx("feComposite", { in2: "hardAlpha", operator: "arithmetic", k2: "-1", k3: "1" }),
1326
- /* @__PURE__ */ jsx("feColorMatrix", { type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0" }),
1327
- /* @__PURE__ */ jsx("feBlend", { mode: "normal", in2: "shape", result: "effect1_innerShadow_locked" })
1328
- ]
1329
- }
1330
- ),
1331
- /* @__PURE__ */ jsxs(
1332
- "filter",
1333
- {
1334
- id: "filter1_d_locked",
1335
- x: "1.34688",
1336
- y: "7.79766",
1337
- width: "19.3072",
1338
- height: "14.7023",
1339
- filterUnits: "userSpaceOnUse",
1340
- colorInterpolationFilters: "sRGB",
1341
- children: [
1342
- /* @__PURE__ */ jsx("feFlood", { floodOpacity: "0", result: "BackgroundImageFix" }),
1343
- /* @__PURE__ */ jsx(
1344
- "feColorMatrix",
1345
- {
1346
- in: "SourceAlpha",
1347
- type: "matrix",
1348
- values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
1349
- result: "hardAlpha"
1350
- }
1351
- ),
1352
- /* @__PURE__ */ jsx("feOffset", { dy: "-0.2" }),
1353
- /* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "0.35" }),
1354
- /* @__PURE__ */ jsx("feComposite", { in2: "hardAlpha", operator: "out" }),
1355
- /* @__PURE__ */ jsx("feColorMatrix", { type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0" }),
1356
- /* @__PURE__ */ jsx("feBlend", { mode: "normal", in2: "BackgroundImageFix", result: "effect1_dropShadow_locked" }),
1357
- /* @__PURE__ */ jsx(
1358
- "feBlend",
1359
- {
1360
- mode: "normal",
1361
- in: "SourceGraphic",
1362
- in2: "effect1_dropShadow_locked",
1363
- result: "shape"
1364
- }
1365
- )
1366
- ]
1367
- }
1368
- ),
1369
- /* @__PURE__ */ jsxs(
1370
- "filter",
1371
- {
1372
- id: "filter2_i_locked",
1373
- x: "9.75879",
1374
- y: "13.3023",
1375
- width: "2.99316",
1376
- height: "4.09302",
1377
- filterUnits: "userSpaceOnUse",
1378
- colorInterpolationFilters: "sRGB",
1379
- children: [
1380
- /* @__PURE__ */ jsx("feFlood", { floodOpacity: "0", result: "BackgroundImageFix" }),
1381
- /* @__PURE__ */ jsx("feBlend", { mode: "normal", in: "SourceGraphic", in2: "BackgroundImageFix", result: "shape" }),
1382
- /* @__PURE__ */ jsx(
1383
- "feColorMatrix",
1384
- {
1385
- in: "SourceAlpha",
1386
- type: "matrix",
1387
- values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
1388
- result: "hardAlpha"
1389
- }
1390
- ),
1391
- /* @__PURE__ */ jsx("feOffset", { dy: "0.4" }),
1392
- /* @__PURE__ */ jsx("feComposite", { in2: "hardAlpha", operator: "arithmetic", k2: "-1", k3: "1" }),
1393
- /* @__PURE__ */ jsx("feColorMatrix", { type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0" }),
1394
- /* @__PURE__ */ jsx("feBlend", { mode: "normal", in2: "shape", result: "effect1_innerShadow_locked" })
1395
- ]
1396
- }
1397
- ),
1398
- /* @__PURE__ */ jsxs(
1399
- "linearGradient",
1400
- {
1401
- id: "paint0_linear_locked",
1402
- x1: "9.50049",
1403
- y1: "-2",
1404
- x2: "9.50049",
1405
- y2: "8",
1406
- gradientUnits: "userSpaceOnUse",
1407
- children: [
1408
- /* @__PURE__ */ jsx("stop", { stopColor: "#EBEBEB" }),
1409
- /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#ABACAA" })
1410
- ]
1411
- }
1412
- ),
1413
- /* @__PURE__ */ jsxs(
1414
- "linearGradient",
1415
- {
1416
- id: "paint1_linear_locked",
1417
- x1: "3.00049",
1418
- y1: "10.9999",
1419
- x2: "19.0005",
1420
- y2: "21.4999",
1421
- gradientUnits: "userSpaceOnUse",
1422
- children: [
1423
- /* @__PURE__ */ jsx("stop", { stopColor: "#E6E19E" }),
1424
- /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#C3BC79" })
1425
- ]
1426
- }
1427
- ),
1428
- /* @__PURE__ */ jsx("clipPath", { id: "clip0_locked", children: /* @__PURE__ */ jsx("rect", { width: "22", height: "22", fill: "white" }) })
1429
- ] })
1001
+ /* @__PURE__ */ jsx(
1002
+ "rect",
1003
+ {
1004
+ x: "3",
1005
+ y: "9",
1006
+ width: "16",
1007
+ height: "11",
1008
+ rx: "2.5",
1009
+ fill: "var(--taskon-color-bg-surface)",
1010
+ stroke: "var(--taskon-color-border)"
1011
+ }
1012
+ ),
1013
+ /* @__PURE__ */ jsx(
1014
+ "path",
1015
+ {
1016
+ d: "M7 9V6.5C7 4.29086 8.79086 2.5 11 2.5C13.2091 2.5 15 4.29086 15 6.5V9",
1017
+ stroke: "var(--taskon-color-text-secondary)",
1018
+ strokeWidth: "1.5",
1019
+ strokeLinecap: "round"
1020
+ }
1021
+ ),
1022
+ /* @__PURE__ */ jsx("circle", { cx: "11", cy: "14", r: "1.5", fill: "var(--taskon-color-text-secondary)" }),
1023
+ /* @__PURE__ */ jsx("rect", { x: "10.25", y: "14", width: "1.5", height: "3", rx: "0.75", fill: "var(--taskon-color-text-secondary)" })
1430
1024
  ]
1431
1025
  }
1432
1026
  );
@@ -1768,6 +1362,25 @@ function useTaskTime(task) {
1768
1362
  };
1769
1363
  }, [task.time_frame, task.status]);
1770
1364
  }
1365
+ const DISCORD_USER_NOT_IN_CHANNEL_CODE = "DISCORD_USER_NOT_IN_CHANNEL";
1366
+ const DISCORD_JOIN_REQUIRED_FALLBACK_MESSAGE = "Please join the required Discord channel and try again.";
1367
+ const DEFAULT_SUBMIT_TASK_ERROR_MESSAGE = "Submission failed";
1368
+ const isBlankMessage = (message) => {
1369
+ return message.trim().length === 0;
1370
+ };
1371
+ const isDiscordNotJoinedError = (errorCode) => {
1372
+ return errorCode === ErrorCode.DISCORD_USRE_NOT_IN_GROUP || errorCode === DISCORD_USER_NOT_IN_CHANNEL_CODE;
1373
+ };
1374
+ const resolveCommunityTaskSubmitErrorMessage = (error, errorCode) => {
1375
+ const errorMessage = error instanceof Error ? error.message : typeof error === "string" ? error : "";
1376
+ if (!isBlankMessage(errorMessage)) {
1377
+ return errorMessage;
1378
+ }
1379
+ if (isDiscordNotJoinedError(errorCode)) {
1380
+ return DISCORD_JOIN_REQUIRED_FALLBACK_MESSAGE;
1381
+ }
1382
+ return DEFAULT_SUBMIT_TASK_ERROR_MESSAGE;
1383
+ };
1771
1384
  function useSubmitTask(taskId, onSuccess, platform, options) {
1772
1385
  const { refreshOnFail = false } = options ?? {};
1773
1386
  const { client, userToken, userInfo } = useTaskOnContext();
@@ -1788,6 +1401,11 @@ function useSubmitTask(taskId, onSuccess, platform, options) {
1788
1401
  }, [userInfo]);
1789
1402
  const submitTask = useCallback(
1790
1403
  async (taskValue) => {
1404
+ const refreshOnFailure = () => {
1405
+ if (refreshOnFail) {
1406
+ onSuccess == null ? void 0 : onSuccess();
1407
+ }
1408
+ };
1791
1409
  if (!userToken) {
1792
1410
  const errorMsg = "Please login first";
1793
1411
  setError(errorMsg);
@@ -1812,6 +1430,7 @@ function useSubmitTask(taskId, onSuccess, platform, options) {
1812
1430
  onSuccess == null ? void 0 : onSuccess();
1813
1431
  return { successful: true };
1814
1432
  } else if (result.cool_down) {
1433
+ refreshOnFailure();
1815
1434
  return {
1816
1435
  successful: false,
1817
1436
  cool_down: result.cool_down
@@ -1829,18 +1448,17 @@ function useSubmitTask(taskId, onSuccess, platform, options) {
1829
1448
  } else {
1830
1449
  toast.error("Oops! You did not pass this task.");
1831
1450
  }
1832
- if (refreshOnFail) {
1833
- onSuccess == null ? void 0 : onSuccess();
1834
- }
1451
+ refreshOnFailure();
1835
1452
  return { successful: false };
1836
1453
  }
1837
1454
  } catch (err) {
1838
- const errorMsg = err instanceof Error ? err.message : "Submission failed";
1839
1455
  const errorCode = err instanceof ApiError ? err.code : void 0;
1840
1456
  const errorData = err instanceof ApiError ? err.data : void 0;
1457
+ const errorMsg = resolveCommunityTaskSubmitErrorMessage(err, errorCode);
1841
1458
  setError(errorMsg);
1842
1459
  console.error("Submit task failed:", err);
1843
1460
  if (errorCode === ErrorCode.TASK_PARTIAL_PASS) {
1461
+ refreshOnFailure();
1844
1462
  return {
1845
1463
  successful: false,
1846
1464
  error: errorMsg,
@@ -1850,6 +1468,7 @@ function useSubmitTask(taskId, onSuccess, platform, options) {
1850
1468
  if (errorCode === ErrorCode.INVITE_JOIN_IS_NOT_REACH && errorData) {
1851
1469
  const { invited = 0, min_required = 0 } = errorData;
1852
1470
  toast.error(`You have invited ${invited} users, but need ${min_required - invited} more to complete this task.`);
1471
+ refreshOnFailure();
1853
1472
  return {
1854
1473
  successful: false,
1855
1474
  error: errorMsg,
@@ -1857,6 +1476,7 @@ function useSubmitTask(taskId, onSuccess, platform, options) {
1857
1476
  };
1858
1477
  }
1859
1478
  toast.error(errorMsg);
1479
+ refreshOnFailure();
1860
1480
  return {
1861
1481
  successful: false,
1862
1482
  error: errorMsg,
@@ -1892,22 +1512,11 @@ function useTaskDetail(options) {
1892
1512
  setIsLoading(true);
1893
1513
  setError(null);
1894
1514
  const api = createCommunityTaskApi(client);
1895
- const list = await api.getCommunityTaskCards({});
1896
- let found = null;
1897
- for (const sector of list) {
1898
- for (const card of sector.cards) {
1899
- if (card.card_info.id === taskId) {
1900
- found = card;
1901
- break;
1902
- }
1903
- }
1904
- if (found) break;
1905
- }
1906
- if (found) {
1907
- setData(found);
1908
- } else {
1909
- setError("Task not found");
1910
- }
1515
+ const detail = await api.getCommunityTaskCardInfo({
1516
+ card_id: taskId,
1517
+ card_type: TaskCardType.GTCTask
1518
+ });
1519
+ setData(detail);
1911
1520
  } catch (err) {
1912
1521
  setError(err instanceof Error ? err.message : "Failed to load task");
1913
1522
  setData(null);
@@ -1954,7 +1563,8 @@ function TemplateTask({
1954
1563
  onUpdate,
1955
1564
  onEligTaskClick,
1956
1565
  coolDown: sharedCoolDown,
1957
- onCoolDownComplete: sharedOnCoolDownComplete
1566
+ onCoolDownComplete: sharedOnCoolDownComplete,
1567
+ onDoneCountdownComplete
1958
1568
  }) {
1959
1569
  var _a, _b;
1960
1570
  const [localCoolDown, setLocalCoolDown] = useState(
@@ -2098,11 +1708,17 @@ function TemplateTask({
2098
1708
  nextTime: userStatus == null ? void 0 : userStatus.next_time,
2099
1709
  coolDown,
2100
1710
  onCoolDownComplete: handleCoolDownComplete,
1711
+ onDoneCountdownComplete,
2101
1712
  onClick,
2102
1713
  onClaim: handleClaim,
2103
1714
  children: [
2104
- params.desc && task.template.is_rich_text && /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }),
2105
- params.desc && !task.template.is_rich_text && /* @__PURE__ */ jsx(CardField, { label: params.desc }),
1715
+ params.desc && /* @__PURE__ */ jsx(
1716
+ CardDescExpress,
1717
+ {
1718
+ label: params.desc,
1719
+ className: "taskon-template-task-rich-desc"
1720
+ }
1721
+ ),
2106
1722
  (_a2 = params.desc_fields) == null ? void 0 : _a2.filter((field) => !field.display || field.display !== "dialog").map((field, index) => {
2107
1723
  const label = field.key === "open_post_link" ? void 0 : field.key;
2108
1724
  return /* @__PURE__ */ jsx(
@@ -2127,7 +1743,7 @@ function TemplateTask({
2127
1743
  {
2128
1744
  task,
2129
1745
  conditions: meetConditions,
2130
- onCheck: onUpdate,
1746
+ onCheck: onUpdate ? () => onUpdate(task.id) : void 0,
2131
1747
  onTaskClick: onEligTaskClick
2132
1748
  }
2133
1749
  ),
@@ -2143,7 +1759,8 @@ function PowTask({
2143
1759
  disabled = false,
2144
1760
  onClick,
2145
1761
  onUpdate,
2146
- onEligTaskClick
1762
+ onEligTaskClick,
1763
+ onDoneCountdownComplete
2147
1764
  }) {
2148
1765
  var _a;
2149
1766
  const params = useMemo(() => {
@@ -2224,10 +1841,17 @@ function PowTask({
2224
1841
  actionAutoDialog: true,
2225
1842
  noClaim: true,
2226
1843
  // PowTask 不需要 Claim 按钮
2227
- targetLink: params.task_url
1844
+ targetLink: params.task_url,
2228
1845
  // 标题跳转链接
1846
+ onDoneCountdownComplete
2229
1847
  };
2230
- const renderTaskCard = () => /* @__PURE__ */ jsx(BaseTask, { ...baseTaskProps, children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) });
1848
+ const renderTaskCard = () => /* @__PURE__ */ jsx(BaseTask, { ...baseTaskProps, children: /* @__PURE__ */ jsx(
1849
+ CardDescExpress,
1850
+ {
1851
+ label: params.desc,
1852
+ className: "taskon-community-pow-desc"
1853
+ }
1854
+ ) });
2231
1855
  if (showEligibilityMask && meetConditions) {
2232
1856
  return /* @__PURE__ */ jsxs("div", { className: "taskon-pow-task-wrap", children: [
2233
1857
  /* @__PURE__ */ jsx(
@@ -2235,7 +1859,7 @@ function PowTask({
2235
1859
  {
2236
1860
  task,
2237
1861
  conditions: meetConditions,
2238
- onCheck: onUpdate,
1862
+ onCheck: onUpdate ? () => onUpdate(task.id) : void 0,
2239
1863
  onTaskClick: onEligTaskClick
2240
1864
  }
2241
1865
  ),
@@ -2254,7 +1878,8 @@ function ContractInteractiveTask({
2254
1878
  onUpdate,
2255
1879
  onEligTaskClick,
2256
1880
  coolDown: sharedCoolDown,
2257
- onCoolDownComplete: sharedOnCoolDownComplete
1881
+ onCoolDownComplete: sharedOnCoolDownComplete,
1882
+ onDoneCountdownComplete
2258
1883
  }) {
2259
1884
  var _a, _b;
2260
1885
  const [localCoolDown, setLocalCoolDown] = useState(
@@ -2392,6 +2017,7 @@ function ContractInteractiveTask({
2392
2017
  nextTime: userStatus == null ? void 0 : userStatus.next_time,
2393
2018
  coolDown,
2394
2019
  onCoolDownComplete: handleCoolDownComplete,
2020
+ onDoneCountdownComplete,
2395
2021
  onClick,
2396
2022
  onClaim: handleClaim,
2397
2023
  disabled: disabled || showEligibilityMask
@@ -2403,7 +2029,7 @@ function ContractInteractiveTask({
2403
2029
  {
2404
2030
  task,
2405
2031
  conditions: meetConditions,
2406
- onCheck: onUpdate,
2032
+ onCheck: onUpdate ? () => onUpdate(task.id) : void 0,
2407
2033
  onTaskClick: onEligTaskClick
2408
2034
  }
2409
2035
  ),
@@ -2429,7 +2055,8 @@ function SwapDexTask({
2429
2055
  onUpdate,
2430
2056
  onEligTaskClick,
2431
2057
  coolDown: sharedCoolDown,
2432
- onCoolDownComplete: sharedOnCoolDownComplete
2058
+ onCoolDownComplete: sharedOnCoolDownComplete,
2059
+ onDoneCountdownComplete
2433
2060
  }) {
2434
2061
  var _a, _b;
2435
2062
  const [localCoolDown, setLocalCoolDown] = useState(
@@ -2451,7 +2078,7 @@ function SwapDexTask({
2451
2078
  setLocalCoolDown(0);
2452
2079
  sharedOnCoolDownComplete == null ? void 0 : sharedOnCoolDownComplete();
2453
2080
  }, [sharedOnCoolDownComplete]);
2454
- const { getChainType } = useChainMap();
2081
+ const { getChainType, chainMap } = useChainMap();
2455
2082
  const { communityInfo: contextCommunityInfo } = useTaskOnContext();
2456
2083
  const params = useMemo(() => {
2457
2084
  return parseParams$2(task.template.params);
@@ -2460,8 +2087,10 @@ function SwapDexTask({
2460
2087
  const reward = useTaskReward(task);
2461
2088
  const time = useTaskTime(task);
2462
2089
  const chainLabel = useMemo(() => {
2463
- return params.chain || "";
2464
- }, [params.chain]);
2090
+ var _a2;
2091
+ if (!params.chain) return "";
2092
+ return ((_a2 = chainMap[params.chain.toLowerCase()]) == null ? void 0 : _a2.label) || params.chain;
2093
+ }, [chainMap, params.chain]);
2465
2094
  const titleExpress = useMemo(() => {
2466
2095
  return getSwapDexTitleExpress({
2467
2096
  tokenOutList: params.token_out_list,
@@ -2556,6 +2185,7 @@ function SwapDexTask({
2556
2185
  nextTime: userStatus == null ? void 0 : userStatus.next_time,
2557
2186
  coolDown,
2558
2187
  onCoolDownComplete: handleCoolDownComplete,
2188
+ onDoneCountdownComplete,
2559
2189
  disabled: disabled || showEligibilityMask,
2560
2190
  onClick,
2561
2191
  onClaim: handleClaim
@@ -2568,7 +2198,7 @@ function SwapDexTask({
2568
2198
  {
2569
2199
  task,
2570
2200
  conditions: meetConditions,
2571
- onCheck: onUpdate,
2201
+ onCheck: onUpdate ? () => onUpdate(task.id) : void 0,
2572
2202
  onTaskClick: onEligTaskClick
2573
2203
  }
2574
2204
  ),
@@ -2598,7 +2228,7 @@ function getTaskComponent(templateId) {
2598
2228
  }
2599
2229
  return TemplateTask;
2600
2230
  }
2601
- function CommunityTask({
2231
+ function CommunityTaskComponent({
2602
2232
  task,
2603
2233
  userStatus,
2604
2234
  meetConditions,
@@ -2610,7 +2240,8 @@ function CommunityTask({
2610
2240
  onUpdate,
2611
2241
  onEligTaskClick,
2612
2242
  coolDown,
2613
- onCoolDownComplete
2243
+ onCoolDownComplete,
2244
+ onDoneCountdownComplete
2614
2245
  }) {
2615
2246
  var _a;
2616
2247
  const TaskComponent = useMemo(() => {
@@ -2650,7 +2281,8 @@ function CommunityTask({
2650
2281
  onUpdate,
2651
2282
  onEligTaskClick,
2652
2283
  coolDown,
2653
- onCoolDownComplete
2284
+ onCoolDownComplete,
2285
+ onDoneCountdownComplete
2654
2286
  }
2655
2287
  ),
2656
2288
  disabled && /* @__PURE__ */ jsx("div", { className: "taskon-community-task-item-mask" })
@@ -2658,6 +2290,7 @@ function CommunityTask({
2658
2290
  }
2659
2291
  );
2660
2292
  }
2293
+ const CommunityTask = React__default.memo(CommunityTaskComponent);
2661
2294
  function isLockedByPreDayChallenge(meetConditions) {
2662
2295
  if (!meetConditions) return false;
2663
2296
  return meetConditions.some(
@@ -2788,7 +2421,7 @@ function parseNftParams(rewardParam) {
2788
2421
  return null;
2789
2422
  }
2790
2423
  }
2791
- function getMiniNftCdnUrl(url) {
2424
+ function getMiniNftCdnUrl$1(url) {
2792
2425
  if (!url) return "";
2793
2426
  const separator = url.includes("?") ? "&" : "?";
2794
2427
  return `${url}${separator}x-oss-process=image/resize,m_fill,h_160,w_160`;
@@ -2850,7 +2483,7 @@ function TaskChainCard({
2850
2483
  if (!reward) return null;
2851
2484
  const params = parseNftParams(reward.reward_param);
2852
2485
  if (!params) return null;
2853
- const icon = params.media_type === MediaType.Video || !params.nft_cdn_image ? NFT_ICON$1 : getMiniNftCdnUrl(params.nft_cdn_image);
2486
+ const icon = params.media_type === MediaType.Video || !params.nft_cdn_image ? NFT_ICON$1 : getMiniNftCdnUrl$1(params.nft_cdn_image);
2854
2487
  return {
2855
2488
  icon,
2856
2489
  name: params.nft_collection_name || "NFT"
@@ -3251,7 +2884,7 @@ function TaskChainDetailTime({
3251
2884
  ] })
3252
2885
  ] }) });
3253
2886
  }
3254
- const DEFAULT_TOKEN_ICON$1 = new URL("data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3ccircle%20cx='10'%20cy='10'%20r='10'%20fill='%23DDAF39'/%3e%3cpath%20d='M6%2013.125L6%206.875M13.5%206.875L13.5%2013.125'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M13.5%2013.125C13.5%2014.1605%2011.8211%2015%209.75%2015C7.67893%2015%206%2014.1605%206%2013.125'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M13.5%2010C13.5%2011.0355%2011.8211%2011.875%209.75%2011.875C7.67893%2011.875%206%2011.0355%206%2010'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M9.75%208.75C11.8211%208.75%2013.5%207.91053%2013.5%206.875C13.5%205.83947%2011.8211%205%209.75%205C7.67893%205%206%205.83947%206%206.875C6%207.91053%207.67893%208.75%209.75%208.75Z'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e", import.meta.url).href;
2887
+ const DEFAULT_TOKEN_ICON$2 = new URL("data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3ccircle%20cx='10'%20cy='10'%20r='10'%20fill='%23DDAF39'/%3e%3cpath%20d='M6%2013.125L6%206.875M13.5%206.875L13.5%2013.125'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M13.5%2013.125C13.5%2014.1605%2011.8211%2015%209.75%2015C7.67893%2015%206%2014.1605%206%2013.125'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M13.5%2010C13.5%2011.0355%2011.8211%2011.875%209.75%2011.875C7.67893%2011.875%206%2011.0355%206%2010'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M9.75%208.75C11.8211%208.75%2013.5%207.91053%2013.5%206.875C13.5%205.83947%2011.8211%205%209.75%205C7.67893%205%206%205.83947%206%206.875C6%207.91053%207.67893%208.75%209.75%208.75Z'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e", import.meta.url).href;
3255
2888
  function safeDiv(a, b) {
3256
2889
  const numA = typeof a === "string" ? parseFloat(a) : a;
3257
2890
  if (!b || isNaN(numA)) return 0;
@@ -3344,7 +2977,7 @@ function RewardDisplay({
3344
2977
  /* @__PURE__ */ jsx(
3345
2978
  "img",
3346
2979
  {
3347
- src: tokenParam.token_icon || DEFAULT_TOKEN_ICON$1,
2980
+ src: tokenParam.token_icon || DEFAULT_TOKEN_ICON$2,
3348
2981
  alt: tokenParam.token_name || "Token",
3349
2982
  className: "taskon-taskchain-reward-display-icon"
3350
2983
  }
@@ -3408,25 +3041,362 @@ function RewardDisplay({
3408
3041
  /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
3409
3042
  "linearGradient",
3410
3043
  {
3411
- id: "taskon-reward-display-gradient",
3412
- x1: "8",
3413
- y1: "0.703125",
3414
- x2: "8",
3415
- y2: "8.70312",
3416
- gradientUnits: "userSpaceOnUse",
3417
- children: [
3418
- /* @__PURE__ */ jsx("stop", { stopColor: "white", stopOpacity: "0" }),
3419
- /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "white" })
3420
- ]
3044
+ id: "taskon-reward-display-gradient",
3045
+ x1: "8",
3046
+ y1: "0.703125",
3047
+ x2: "8",
3048
+ y2: "8.70312",
3049
+ gradientUnits: "userSpaceOnUse",
3050
+ children: [
3051
+ /* @__PURE__ */ jsx("stop", { stopColor: "var(--taskon-color-border-secondary)", stopOpacity: "0" }),
3052
+ /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "var(--taskon-color-border-secondary)" })
3053
+ ]
3054
+ }
3055
+ ) })
3056
+ ]
3057
+ }
3058
+ ) })
3059
+ ] }) });
3060
+ }
3061
+ const DEFAULT_TOKEN_ICON$1 = new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAABsCAYAAACPZlfNAAAACXBIWXMAABCcAAAQnAEmzTo0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAADodSURBVHgB1X1pkF3Hdd7p+7Z582afwWCwD1YCXMHFlESC1pCWJVGRQidxuRwnKVGpVMoVx0UoyR9XpYpk/CP+J7LiKiu/BFZiyZWKHUpyItlaCEncwA3DBQJBEJgHgBhsg9mXN++9ezvnnN7Ove8BBHe6yYt73719+3b312ft0z0K/oGlib8YG2004rFC77rRePHcFg3QB1qN0llp3QcKf8ukYVYrNasAZvEHnataq1MJ6HEVxdVdf/TsOPwDSgo+xWniW2N9TWjuhZx6AJTei52/F5QygGRr3q4l2t7XV3iGKSpVIKktHsSM46WhXb+IL5w4uPWbB2fhU5o+dYAxSEnjQYjgAVXqHtP1RexVsDVV7Wv8Xlqh2/zW2p7NpQJ9UCf6iUJUJPCq8ClKnwrACKTC5tseXD516AHstDEGiJKyAClzrWRt211nWyMpTLe5525J0Cgl7iang3j9xK7/+OwB+BSkTxSwiUeQmrrrD+HlfpZFXCPVApSrpXIdLWqtQfvf/AgzMZUoe0cLdDhrmyZrW44DNhHgBeCqeO9goZE8uvVPnq/CJ5Q+EcAm/utnRxs5eBg//yDXIHKI2AxRZK91AEz2oUoTTDhr0+dEjRZZ30DseGU/wp90xcvvtlCYNtfuYeLy6AOFGD4R4D5WwIiikqHKt+LFyw96ILx8AkcW3OGewsD0UWw7k/qsUOmEytoByOULUOrvgVwhD7liEYqVsvha4Hn1pRU+12bmIW40+NxYXuFzZD/rq2FxMteOMtuwS5PvQAE+XuA+FsA0qttv/9lnHsIG7tcq6vOszvWSpxgDFPeJPUeFAnT09UD3hrV8LiNAEYKD6h0hh+ciH4p+U8qVICWkdBMLikEnNTzjdXMJ78V4XoTmhfOwfGICaitNWFqqwcpKnV/hauHrkXadFFiqpzIPGpoKSj+2809eeBQ+hvSRA3b8Tz87pqPkOwjQqNfyJGAQRIcDSSFI3RvX8tG1ZhCxQcop9oAq9gLkEaR8J2bKgy+PO3LV/OazS9rki/BQxdBi7uwm6KnXQV86DcniAsDiIsT1Oiwv12FhYRXmZpfRmgjguSqHyoKQdcQudbW85bZvbPpX3z4IH2H6yAAj9teIlh5G9rZfRSqtlluWRxLHgURtLw8PMEj9WzdCrgNBKg+BKq1BSuoxhRK1xMt4WuazpxYP0tWaY8EjsCHPZeqZEzg4Is/69MICJJcvg0YA41oNFuZrMDOzDPVaQ4CnAuv0Ms4Ah6YAFLvXPrZ1/w+/CR9R+kgAO/rIZ0cjlTyFpY8qamUk1bwwQJFRQYK3ymsGYO2NO6AyguCUkGN2rsdzj8mFdphuzAM05vBYCFqkb4FQHenaqYhaqpM65PFan4Lmay8bHCtd5uhGKi6XOQ+DNz3DAC4vEcWtwMLiCoOWI9A8uwTJHnn8YKomOrp3zyMfvmz70AF7+9E7vx5r/Ri7iEhbE0qFttKAqArzQMcwAbUdKuuGscNGAC9IaOHDVdCrlwFWpnAE1yBFmb7mwvhK2WTuYw4wOhJXAXAXemUF4uNHwYNoO10VkHX2oJwcXINctIj1wLogaPHlaWggYFNTi7AwZ4HDb0WO0pyYc+yCXGJJ9OjuPz30GHyI6UMF7Nh/vuNhpKZHpGfCUBgrHkhRiruuvKYfhm/ahhSFQHWts0DlDDUtn8UzUhL3XnRloLhgnX4mnwf7KZ0c+5tBEN45ndYAdZrFqUoFVN8ARP3orlytI3DTDNzyzCKcOzcHcTNG5oqg0VBUyrJFMIDZYiKtHtn5Xz48heRDAYzkVb2x8C0dRQ8qN6gjWzy1QxFYeM7nYRgpaui6zch+kKJ6NtKQRoDmUW4gUI3FVlnHP6OgXEQZynL5ryXp0JHJ+XeQ3V1igLS0txg0qcZrprRozVqIBhA4VEySc+chnpqGmellmLq0hOwxAaMCqaBB2u8QgCqBA8VC45tbHxn/wD7KDwwYgbVaX3oKh9Je7z7yqjpRFIKFgJWH+2HjnTdAcWAQVO8WlFG9TEkMVN3KppRSIuReyk7L/oZWKnP3slTmjGFM8cQJ0EsL4PyHUg61nK3tRewyt34dKGSZRHHN4yew6stw7vw8rC6jYgKt9pwoe7xUaN77QUH7QIAZsBafwsu9rqbKa4A0ODU08Hr4hq2w9qat2NBN6IBCqmqiXJg7g5bsdABHSU1SGW+HY4v+nARqc9V3z/0tN1p0WufwvWdS8+jrWFziKcpksdRFL8aJKStOwBeUmOfRQD9Ea4fZ/IiJ2iYvsGybnlr2lMbNoXIFpSKrGS+VPhho7xuwiUf29q2u5hAsQ1mOMiwrhyZlyudg82/eBF3r1oIa2gbQ0Yva1wWAhUnLKyBDSRnqyQLpTi2giWv+7RQOpxkmaYWjhgrHibfsT6uSt6GoNKWB7XT7G8HKIWjMJona3joJS9OLcP48co1mAlZ0Z6iXykjGS2X9vkF7X4AxWMsK1Xa118sqeyYNkMDKlUuw7b69UBzCkTi80/TNdBWpas5+WQk5lwFGyimZx73XAqDy2AScrsQS8TSPLqozE+GeU8mlF0PKtUTItQzABFhueA1fx2cmYfXSDJw+MwtJQyO1OWWkBfTxUuf7Ay2C95HqK9G3gCYTucHKtzvByjTZeKzAji/eDsW1qFwMX4fKRA30uSOops9wQ223CWcqtB/R3FkQWJp7zz337E9UTguW2DIerSa3vCi0SacoZPz4ifKfM+WLQSTOydQMNN+u8nV+62bo2DQCmzf0Qb6Qw74wfZJuJ/+7t76Effg+Uu495odj/2Evei9gv680TWfQf3gTnT3oQeqCbffeAvk1CNbARhTsU6gO42hOGj6/akctkj0CtLJK973Ue5B+P22QhXO6s9AgRu2wUU+1y42Dtklf7T6xlBg1zhn0ypQgN9gPOXSLdGFvLKGPstGIOU+aMnhA7f3ju0bgz589/wt4D+k9AfbWN/c+hK6mP0up7LahTfyn2FtBsG6G/PAmtF/WI+u5gGCdtvJKyeraC5XuY8nWsqlFE4zCS1JZaSlMpoQpKbl4zsq1QF2mBBVYapbKs9WR941sgmRmjjskt3YNc/WeKEYXZQPqCBr7I+3h38HJ2j/+7Ej1z58//ypcY7pmGXZ0/95R7KLDOkIPhgCMxg/JLAJr+2/dhGBtNmDNncfjXFo+CbVcRcLwjWznewCtUhFZzbCtnBPaISshyuYVc2mSLVpvhsbplfjEMXNPKhHW2NVJljXrVoXDyzypqITrHLrYorVDaK9dgvqZC3Dq9CwSdAwFWxslykAbbRZrfeuex8arcA3pmmWY0vop7SKSrLFJaju5mHIdRRi9ezfkhzYiWOtAz06iJ2HSd1KQO2aIKWqsFu4i7xpyfCmxH0ky8smVB+GZBycRss69JMByiVmhqJd7bstRvlKQrrcrzrcnw2dFihGoePIiRCNDUNywBjZvwjGOJNfgdgvyNf/3oVB5amL/3j64hnRNgJ14+EvfwoJHZZ9S/5BQzXWUYPvnb4TShlFQ/SOoCZ7F4xxIa79ldFLL2QTSRv4l2mtd4Ww6J6UWh14LYEl8IKsoQLoedFpeAinfuGgbViDHlyzDVyGR+KVlpCAavojPTyFol5jSijjZunlTL7Neo4hkxqeG0VWdPAzXkN4VsIn/9m/G6tPn98tB5yiLNMKNd+xA1R2nQfoQrMUZA1a2pT5pY6SmqE4+NTdaQLPPTON0Ggzb4nCW1CHBMtd6tZaqTuoslRr5O5VU6nMtBCaexecQtMtzkKPJ1/5u2LC+h/ss1rqlmjpR+4/++71j8C7pXQGrvfnid9KVMVMI9OHhPZvQKB6CaGgzshr0Xlw87fNJucDJqbfyuQM0kdQo8+h0XlleCjhZY6lIiA53ZTjtMEWFVzp0+/vqKu9kyo7PXoRkuQb5LRug0tcJg/2dTGWx9Fe6d5T+Ds3Ow1XSVQE7+u9ufhgrNxo6whiXNEKKPRUY2bMBovXbgXo5mTyOD5oWACt/3PBJvEVq78vf9mOJywfiXVGGlB2OP7m8nl/ZPFLpkO9h/XRtFYIyIqgQLEBSTrl7vkczl+oK9+Uz/GZ88h0e6IXR9bBmsBM6SnkGLG61OUff/KNb9sNV0hUBO/qHe0exvP1S+2FWSL/R6771rp0os4ZRiOXRrkEFg1hNIjooScKhBXCuc/mZ6+g4DZKGDCAuT6acJLYAic6Vz5UE17ikUuX6AZNkABIgKcgAnwiZLI4kO6ACGOS6ik9NgupAd9bIAKwf6WJEEy8e3CdJIYOHrqaA5K/0IIH44QhsWLQos4kfWLd7PXozuhgwPY8TjXPTkHa0Zu0rW/lItY5O7X8AtAgEJUa8gvNnL8OFyRmYw/koSqVKCdatH4Qtu9ZZI8eW72ahZUCotoDJ+kjiSTL3pVtKt6laO5asM8/8GcGZXYL44gzkUQEpzizA4GAdp2YWeQI0ghB2gJ/ta5QGyAvyDWiT2tphRF2JjiciYT/RNAn5KqJyAa7/yq0QbduN9UACnTyBcqFh7amMzeWEd5S1oTLXLk+LvQVwqnoRXn35JLz1xml0iTWCyWb7g/q1p78Lbr5zJ3z+H91uRYwz6rXNxyMXlQBkTQvzIMHUiSgIREf7iUgdiK6N3eYA1bIMCbLMh20s7NrCFNc4/g7aZ3PYpiZTTeRYdKJt1tzWPd9utc3aUlgSxw/zLDE4rqKtZYT65+3bcPKxz0QiXTrLH1e20x15K2n/RMo2UgnnhPhtG+JHdE5DbaUOLzxzDF5/5SROxy+ZqXjMUi5GMtjKc84a5nn27w4joS/C1/7lb4ZgX2EW8H84+XhFRQEyHSypxoOVuYY25WT9o769wF78JiohhU3rIDfUB0OLdThzZt5QmDKDyg4x/ARi0IbKWiiMqStuTrDDwFII1Y+8GT1bBmHz53ZDtGkrfrwBerKapianmMnpD5r6p8rwPW2euS+nplA0530VQXrmqTcQKJxbQpToyEWEqWLqipynBJzo0DxlRVprHf1je+7YDl/9F/eEzqSy7RxXfPzXoQOtHZgGwFGHErJJ5Evl1ymwtFOYPMXqNGCJMs4C/L+wfQP6HQtQP3oKqidnYBWprKCcn5Bkm5HjnY18/9YDaY9+C4UljfhhcF4eG5Dnvj+yex1HFqF3E/Q7JyF4G+hrCrxvDv0tnsXp2KJjXUw6EdMn4OXT7Owy/O2TL8LZ6iUo5BV05CMo5AJYuSiwOiVeJadzgoIgFxvKe/OlE1yHr/7BPpEp4aCblF2W6lDIXCcCDN1CKVf8nUiyE5euTHsjPn8Z8tvWo6O4F9bMruB0zALEkQlcVU7RwezLUZM0xkdApFYtkVaP2O85JYvCpPs2D7IqT+xQz88aeyYRlYoh7SQVIzSMOssv3PySzf/Cc8fhO3/xEzh/ego6ChGDVcYhV0LgiohUkYBj0OyZqA3M2VEh5SlhXnrnzZdPwE//5gUI2ihe1moWKMjYc/4faGVzOnS9sERSeW3T2rJI3f6dZGEFvfvzDFiluwTlct5V02SJfd6HJh5Ma4wpwI786xsexJyjrnBmhdbu6t80YGQXqvF6Cr3wsbYdIsDJqrSyNVaeaMti6LpWq8MPn3wJDv7kVbZXOjxIKJyR/+UtQIplmArebi04KlgKJPCQpzBo+P74r47C6bcuBAqoN8ApB0LTD2BYIHWSJqpsZ6c09my+0NTU81QeO0jj6QXmNLlBlGX9Zes9yoBPK3puuvNBuBJgKlFflwVzAI2mCckydA1RoCVO8S/OG+HtK6lbR5MbxUJDSs3m4v9zqOZ+93/8Co6h9lfKR3wQNRWwEcNr+6C7txP8tEe6EZlvG2cyg4bwId5QJG0Mj2f+/lXP+ojCtFQcHPXHgbp0ph2+zvIMmXuZuuksm3T3M6ZesljjIzfQA11IZcaYNjJZlrnyxjMPQDvAjj64e1QrPSY/5GzbNduGGSwymPX0lDB6Ic3qpLB1z+KkhfIIrO/9z6dh5tIcsj/FFEGdTJ09uKYXvvR7+/C4GzpxoOhEt3RkGPVGTrrwMkeJeaJQLGz63Aw4Q1cvL7cAnS5P9jqke1f2vc5epNvmXWMBwTR44v34AtqvOEhVZwd0dRWN98MpOfZd/H9s4sHRvhbAkjg3lvVqGBGgoW9dt6Eu9GYYb7esaGKFpB12WQA9kOYZg/Xdp2FlcQU6LFDEAqmj+4d64X4EqljMYQM64Mu/dxeUu8rgwwpEH2VZkGOTJvjFUFuz1oB5lBWohsEPfnIyuL98O51MTSxl6OBW0wBpt7rLk4SB2RLroTNyOmkZJFoM7AT7gLhVbrAb+ruLxgJK3HgJ5a7E5QdbAFNR8nWA9MggdjiAsivX0YFulQ6c55oG6ZrRiWuYbYiTa6BBhpC5ETaH9tL3vvcMrCzUWNYU80ZOUfZ+rPT9v/s5KBZyvqFdSGH9SHHajoVU4wEyI1t7FmzkmgmlJiqcnVqEI8cuwd/+7CS0CJ+kXVmQoQpJTdCeyrL5Uu9m39f+Z4KyLMLBSTEgXZVikCSpEQoPpAA7jJoI9vOYK0y6+npHehCsshlh5CXQ6U5zc1liINqzDqOW2CDaVd/7q+cNWPmg+dF//YM9cP8/+xyUCCwnW/D80x++AifenPTYhw6xbEcLU0LIFGaU2iglJZQNcxfnWKYdfesy/L+nJkIb3Cyz/y061WmxWbnlwQVRTvr7LfKt3X1bTozGPsc69nZBT1fByjAZz4ggVbo9W2TAujduH/OV0gqcZ4Ne6sbpALK99AqqxauNQDGykk7J8CwwVIxOq+i5MGCtsMpuwDI2x/C6frj/n3wGSsWc76hV9Kj/1RNPw9FXTwsQtGi0K1yeIeWSpMsONE5LxTxH59I36RNvHr8MZ84uZDpbX7mTbVtbFBDIdD5AK9tuk8cnJzXqTVY+op4yVDryLBpMV+qgUS4twGKzi6PU2HCuVX89Zlx7gVSJ11YGuiBXKvISnGRmxo4s65XIicpEoqcS5Q1uZys/jXbW8lKNFYy8Bwtg+64NcM8Xbg5OW/5HwXcPPAMzU/Os4rM6Hx6F1ieZjgGQtilXdc1IL19MHL+AngTjUaElTs8dPgediN7lqRVYWK4Hd4/2jUfWHDGLIrY90FvGswqUp6AV2Mz7KZCyAyADoCZtEeV3DjkMDdzVWlNwXXOFNf8dPB1kwCKtb5HRDKTOExvqGuhk2cU3F+fNy85pS/KK3UnK8E8XmEN5ouDte+nwGRhHSiGwjG1lXtt+3Xq4594bzLupcDcNu65bBy9fXkCtMYAbOiTTEQoCgel0f2wlLz6q8+cn55klclvxmLm8zBmfPnRGc/mcQnlgR7gO/aXzKGz7eztgyzpSEHCWYLATghwQrizxUuoaRLiDq7QFMcHBHA12QdRZgu5KAX2pDcTAtN2VE4G+hS4ZMNXZM6aX5/1DJ5O6B2kVJB5JM6jF0ivvO81SVuQqY0hrfr4Gh148YTRB9khYsHaug3vGrg8szaxHAhdVdfc9O9hXefTwKdb4UgsMsphpSM1X8qW1+0Z3jcCl8/OwgE5WAkxZa7uG3gAEAAZ7iuzHQ1mqre4TgrxRmPC6PeMbUCRbZqdX4PLlFZYznThrMTJQhh0be/DcGeS1BCp7ToEY7rO2iH5QVSZ7LDLzZJGJ9XTrq/HasMQjf7Bzb7I0HzoAtGfp5e4Os6htadkYnY49JWapq0q5G8CzQMM2NPzoZ0fIN8msjdxKzAZ3jCBYN9jywHj6fdyibRR6mvd9fg8kyBpOHDvLFXdyKZtUhsM4xad/TTd093TAC08dNaArG8yJL5DKT+7O3q6SmqsnQKtmCTTZpyqnnTuVnDrKaG/EebSOcXA2V5vqNMrCk2fmoA+/swd1gh0busE5i90sRzvWKc0QX2ea9agQYDlDMIkJ0A3dovuO/v7u0SjW+VHJXp1Z0YFg5dDJi0YRdlzNZ/ADKZERTTpjjwC88eY5ODc5y51Bqjs1YNv2EQTietBCpSbyP/TChKUKe4Bp7D1fugm2XbcBbUTx3UyjHVkoC5S280k33bGNO2+yejksLOfDDByy9QikgvGMaKRA5RQTnMUhx7PqUOY+2Yt0dEaRLmNjKtioSp4PTcfy4qo+9NoF/cOnT6NMbHjQW+SW1P7E4OJrVMwi7G8a2ET9QlkO+lEEY3kcVyZGXvBLylTE6Wyg5aP0gNih5162hCgoCky6kawJwPMvVpkN5VFuOYl2/fUbA8BYbg2p7y//6gW4cHEeVlebcM89Ow3wLkYUP/Gbv30Td/TJo2e5Ma58OTqV6CD6XcHBtuumjfDm4dOwiLMAVA/DVo3sKKHTscSdopX3Smo3y6NMkfb7OcN0aL6KrfE8PscqKpKvCf6OY6UbSaIaOKiWF+v6yV+eUjdv69c3bxtQ7agrrZgEkk5Q+cn1onMdvUnEbhfnRSi5bWx+YP1oHvOOpqcrzCjo6C6CN72bcVAOtC3Bsj23CYp27BCPI8fPW60wYncT3SaXy/d/8Ap87Wu3wZqhbphHFf9vfjAO01MLrHI/98xxBmbfvp3WcA6s9p4v3sj1m0DQlF3SJGcGtKg/hXncdrcB/sVfvhVkoAWAMg8OdPD7u3cOMYWnNFGtlSABle5ooOVEihaoR7asBCkxr6idGgqoKeSwoUdOzvB7CBxAO7bYcuA/K3ZyFU0Rnqli0yqteDSmJrcgQestEkpt+yJHPq5iAVJzSVoOb7eCz7LDXORHzPMvV72GFwkVmKjor//Py/CF+/bAwV8eh0VUZ8t5U6MEKfHQc29zxn137wgz1dbsv+cL1zO1XJqc8bJUAaQcFtTICsqTXTeuhxd+cQwWaRLUGufK2ZeYcf1whV8cGiKHQBnSCgGkydVqgI6N0zJZGpw5M3ugybqhg9h+g4ImdIST5hp+fXKWndm7N3VDZlilqcve04kJRFI4yEnxSGnkAfR+Wk/dJ96zdUUtCFVXswJRGwrzaqvNJP1ylGJjXZ45O8PbJOSjsMpegZnipwXcSaMJP/rxG1BbrrHT10yHRN4BfOjZE/DM0whcbKnaTRThR3/ra7dAL7qwWKYlkNIQWdvCe1/5vd+ABezUY6+9Y5WNsK+U7RPYsr47GKZO9qZmE3R69Is2x7H21bJjXEVIotQ2qn8HykOWeXiNlAaLK81gJF+Juuj/emzykQiJVBhDaZa6BT+l+tKjSmQgpaPRCA0CnfZqeODsb3x29PhFBibvtbKwGRcpIMUoEkCZRpZoOkQF8J5/9iQ8/cyJQGHWf0l+xvv/6e3QhyzVVdf5aum893PboBvl14u/ehsWZ1Z4sJg9NZRvWl9vCQb7OmBhoY4UjsdSw68wyTpy6T4/X6KtjRp4NGEVtUodg9WCsHUxuNBkHiDYblVUpk0R1umt0/NpqkoTVgo4GswK25+zIRZSybL5+/IoQftApd+nVETBx/EXjroAgtrurUsIKj0DrODkqWm7a4yQHRBiMQoiuMeIPwNoXtnVivQcj0PPmKn+fXdvDy/QKEbQNm0dgpmLCyLmBDkCOlBvRcBefaEKb7561s5Oh45hlRyp44adgwzMj35+ClaWSH4Zo+KuO9bBztHelOvpx784Ayso40wEhKWgnNLo/VCKvAvC2nCf4ukdZcxSGkvnL60o2NGfoa42AAqCKVot0YwzLVa7EGC8eiJU0i7PY1bIOgYF21iDxMsVJ0BcVa0+cgm94k0cJaj62gYoX0nlQBODQomRFll5yAsT2O2l4HkCDTt3377t4AzrQ0h9489PoNqNrEOZwU1g3f+7t8ECUtWLvzrBQyCnjQof6aAUdXYWYBeC8vbJOWggq+owbhRFe4dFZssDkLwozwNMsXdBhCaQieY0ExNmEhtFmUB0fUnmAqrhsFQjHqpViho0pGWYC5VDGU8yzGSxiLmOYs+L6sv7F+0UPJclHayOJXHBKvgN3Ud93JlizS9n5UZq8RoE0ADSslSJLGZ0ajc3wp99/pmTnOfuu0bh2eeq8NKzE6xV8vCNDCv8ra/ehBZIDv7XgUPQWG36znWrFT3L3DPEF0eOTLGMyVuNs4HdrVzDRWcWCA9UIwpOHlNTI2UZlh2oRj+wvmk3OqzcBpLbtjANaR4nKColXuxgUc5qd2uk7Ut52aEyNoUNYzF9HtiSvSGDQdmVAjA1tRzAUtDKr6E9gCCAZDngeG3OjIVDCNrZ0zNw9syM8fTbN0kv2ffF62BgqBN+9OTrsDBbM3EgACDNQtIMyzjNsnNLD5yszlvqiqAQlDGdM3LaMCH7bp6ML0woj7SzJjiGUAczwe4t5UAylAapAcuGW6oPUmDJW9r3Z6rfXEclYPqG7/kayIK1cDWBQcHJMZ8nsQ5gM8wMp7SCPgNQS2pXL83b/Rj7zfoeqZMunp1Dqoj85iX02Vs/sxl27RmBF5+egOrxKXAqdg7c5l3KuZPg/ns3cdlH3rgMOP+gS8bsYKYSs8vOGKBatD3SDiTUBSxRMdtTYNawE4Vp7fhMGIKJbU52/gtsl1qmpSyrS+VJkkCMQlb5QYRVnMWv97lu8xRKIFGkUWc5jbzDgUaWZI8R2AlISOkjVwLIZfAcWVQKIMg7Ai0Hgfsa1qVg752b4dY7t8ALv5qAl56rGrMhUgEsHv3WTbV7kOeaXkewkLp0OWeB17wgQVkvv0ppZY5CiCtp5ajG9Lc02pVyU3XeGymZR6SD3uBVeC1AcP3FJaOyETfSlOjMMFPALFKYmoXM5vz0NYpj77Qqu4lRV7ZQHYa+8G4QRQ3iJJySG/JmwEmdAXw4iPyuy68tpTHFReAXqhC17PvtXbBzzzC8+CzKtOdOMftzYDmby1gCGjrQxbb3+kFWy48euazLqEXkbVxj5MzI1Ixx4FGsCVo55W4pF5ZhAWKeqa1n33STaQt70UH1kLYtwEofOv1NVvISqDcTzza1SvXnLMr4ZFYLgrZDAZpoyGmksKi703rnYwibdIkhYFkPDf+hvrJRSWOdnjEBCK6kJODmte4s5QlcqWMNsKS6F+G+r1wPAzgX9fRTb8PrhyeNYLchbpH2coMjkMrYWV/8/EZURGL4+c/PQhHrT4pEXlut0A5fBoaXmFg+xQ5oFaguSY015QWd8l1g2KMhFJ5cS+wUT0+loFrUeO/BUekBgpTPBrTNQ4tNIvEcSX2WBnHVqIyis/AcN5rGBovJQZZzfNJ4PlIBNmAaiPdKKMVvu2GdibiydKylN0Ga7zpQgusZv1UrWJacaO/f7MM5py//4xugghN8P/jr1+H1VyYNZdno3yjxLMx7IsY+OwJdnTl4efySJlaIdpQqGFeVUqJe3Mm+PrbuidFAmA1qh4qBR7tdWLSru3Mr2+GpOXE5oxsqIGNb0raXY43aDxTq75Va0+KgA02A2XEADWc1pyLxwGZanl/leAPzplM2dEpjSW21YAG/cccamEF7qIpaHY8hays5Rm/GrvKM3e8zaNUrLTQkE5SVwO4bR+DOfVthAev0v/9yHCdGVw1lRcbeirwAd+NIw+03DuHUfglePzID71QXaU5OeUqENEUbytDK8ToxuJRjDMZbpJUUztoRm22po0Mqi8b1xvVd0N1VaGV9qe+bZxFqsRz6ttpA7TexCrijQlcnVc0XhzdUG5feMbjYMliGUVwBbepIPsJCAa8bAXU3aal06szFY8vuuWMz356oThtPuMpyUePV0JZK3X5M2g4CFzw6PNINN9+xAUbW9zD7e/HQGagjeyMzjDtfgw/hdooAhebduHsArt/ZB2++NQu/PjJNhrwiHx/Z8zkVeldn9aI4DSR3EUgby/aOaEyQMNoPeBow/QMldd22bmjVAm3hifiO1Lyxv2u12FCtYLu2DqfyjYtnqxYJcDKTjuWFVQMSA5YPGqJV4X0Mh2xgpL26uu+OTVyRiVMzwWQDCMa51l4cahFuRrWgCbybb98A1980wj6/Hz75a5h8Z57zs9qulXAsg2fn1FG3/MZGuGlLGc68swjjr11me6vEYCn2cWpwtq4lfrtp6gr6CS9O1Xy96Gg0E1VQzho27XVuWQe2Fs8sG9RDa8pqz04TT/nGyXm4cUuPQAxAhss57KOS2fWbvB2NhgYZEOXexS+M52NoHMyR/azdZ82QIgprogzL1VZ5Us2p9iSr2NaXwTPs7YhsRayhgh109x0bkTgjOPbWlI1BBL/Yzs2facGKh9d2w8bNONW+a4jzvXToHXjt1fNQR9bsPCiRdxEJhUYbyrr7vm2wA/12VfQlvvDKJe9gptnjnK2rkp2tvPmp3jo+B6vxNCppiqmQZ5rzyrg27PSmCtLGBy0klk2y/wkdmKMbu9TGdRXs9AQOY5lvn11EwLrTLNFeSxGkinmexIxRQ1xB0Ip2LZwZUyZfrKJq/tYnq9XXHtjOqr1yckUb0IjKirW60RQlTwOrMfpet8NGie6IzfnOW9bDAGqPJ3Gq4cKlxWBQ4+NiKQf9+GxkpAvZXxeMrOuGVWzoa6+dg9dfu8jzZ9RNvK+um1+TMsiCTeFhX3ngOhhEj8cp/M6vDl2Acs5McxTNChji1FYg+IHpWKN17JIUjVRs1qMp9iOyO0rboeJaphx7NMo8SV8EasO6CgLVyWF8l2dX4ZU3Z2AeFZ3I/TEYLSoMgcK84oJtSOZXGCypQbsZ1FwFxcN3x8fzlkTHsRfGANJyjJypvThzDN0VXjGoETxHVWxkUF2UCJCzsX9eK7TO4h1ENVv6+T2arnAfoQUAYGXc5LlFeObZ0/DWsWmcwmgy83GUlLNT/H5mGIJy0TdQhvu+vAO6eko8/jf2F+Gztw7BuclltTS7qnNKqtuhbY7KnP9SRayUeAcEx+cbo11r8ddcPGXgvwUccGuR/W1cX+GlTisrMRx5ewFOnzeL3/PMaWxfCLav5Ggjj0pHkSuXoO27gvKLN32Wf+QHOJj0IJfJryr9Kv4zBqJBDBj65pKVVcjRxyh6annV+oUUyIXG2oW5efLMTOPb6ZfVpltQgEoNziudPTcNU9MrcOrUHP81BjN+rbdCCYer7VgIn2Swdt8wDHfevYkVkV/8bAIunV3Qe/f0q41rO2Hrhi4U3k01O1NHH+cKzM+sEruxVJXWNajoPDkwAircDuvXZVmXYAOjHAWXFnRPT1H19RZUb4+RO9NIURNnl5CD1Fgm2lhHfpkM56xymN2miYmBNERkiXM4Bydrp0ODX/WAJUn0ZKSSh0CplKtoZXGVwrlQjtWwUPunMFyImzPGHbqRUD99rIflQqz5a54y/+Xz78Cxt432KJWRSCg8DFQEPnAmRbgs67pQKVnHLPTc2QV4+mAVaosNTWzs5cOX9Dj21paNFVg33IlssgPWjpg/olNbidUSTlqSFobXBCh6UBKmPhzZDFY+b6KW6FxATYVi80uotXRV8mwDguVSBNLxUwvwDlLTcq3pRDnLv5wyYyKm3dS68kGcCM3QA0H6W7mIhFFnnYFmqEtRUL7dCx07bj4IcNJ66/PN8VxHH8TL80adtGyO3CTEFov9OHs72MNb5tG9lD3m/Imx8IS4yjgEdPj9hbs28/VxlDVMRRaoyFKXUSwCiE7Y0AjsrBThpltHYAdOQpJ8O/TsGXjr15dQQYhUOW8UCze7fnZyCSYnzdKowf4S9HQXYQDPnehTRAphZcjZWr6+/DE/S+s+jIDEyAGacGl6Fabn6nAZqbXZ9EtlSN5pW3eWfZFlrTTodq2vhPan1Hlt6DdHoVg5iGeXYHG56YNmvflkX1uujh/0FIaKx+xrX91+EHOOgVM8gFkCzF5egv6hCkQDXbzwTM8v2hFiVSxnQDse6CPHRMUUCOQQtLs3QCfy/6PHLttAnaD1SXZlWDxRVAW27xiA7dsHzGBBDbWOgJ3F6XekWrKxOLbQ2HwabHijcu7BaexgOiZOL3hlgyios5zXtPCPaogTohrvqUZTExh4aE1q/TLFZFiV3cVzs5aolHJ1JqD8PKALwMKPb9vQidM6EaQ8PO5kr6NOE+iU1BrIDletkqO8Zsg9p9VBwsgDxgSi9PcjWpDuRrdVZGenlw1bXKpzKDHMLoK3uZxaz57aMFQZI8siNURhggjAs867bhuBrRt7GLRLl5bI5nFv8+gf6C8zUJs29eJ1R9BArfbZjQ390pe3wTM/nYAYKQBfsZpgpFxcvN3LCaeslNfq7PDRCIiaX2go80WHg7c07Obq7CS2gsbAFVlDIGdVfccRvLzDE313y7pOtXm4HKjLyy07FO39XKUDZVcDmshWZxYarNWmvMiMDTzhrsMEZi45AE3efNmHaJC20sQBNnVxAdZRJPDaPhyKeTbufCUcaIkF0LXaRxWZ4AdPZP6+QhlTxmMz/yQPdR0dn6TqU1Suz2/bZ8ACeQMq5Tzsu28UXvzFaZw2aYQYfDactKZSNCsUhuK0pRQQYRJuxCWhh1TkXDHgxmGov7JgKmNwG9Ak7SBf3rmhG0YGi4IVglT4guxC9kyqaDy7jNRVD+wQID0BnCscdK8qUQwgW3wK6zoGpv9502Xay7ejqwTXodchv3GN2YL14mymZID0duWO/yoQazz9Ldl6n5T47Y1cUWs/GFJV9unE0SmovjnFkQWRAUo552BiX9Jivsp5VQzzdyzLV9XrS0xV3no1HM/KSSH7NMffd3cX4LrN3dBRVGm5Za9T1AUUyVvh2M/G2Rk4dmaeWTGpNT7izPTawZv/9sS9rp2pjVUqd9zz/cWXfjnm+t8hvrhQQ7V4Gfq6l0BRODFqTsRzpaxiu8HZHIJNQkaGK+/oEdQpR5PJZC5FrymvvsqhCv759l0DgBwUqmeW1DQqB9SDhjMrsXOi37bEI+KoTMp4i4wrXWvBnxzLJPQTW62e7oLaPNKJGqF09KbblGWFNLIiFDHx3DIqGw20PWM21KVyTUmyQ4AMhR3+ndG+qKkmgINLzYZgFOFN4oVCt3ffOAz5DWtIAEB8YQbCNkSWgzjqiqL0Fzz1qEBY7stys2XI5AV9Rcry3NJdNGJkLYv8pIYsexa1ObSLAOWUHROqBQBBdi1kqwS9BSeP9kvBiug7Gh4sQS+q+n3dhQxAFiFr/OrUfXOZ76+wO6p5cR5OTS7CPOoI5NEpKBeex3mrt/zfia2yXikKI03k8Fe3PY6y62EGQZuAGCKSpblVmEcjt6+yCFFfN5Oy8eA7iWu5BlOV8DO6hgjFg2Wao7TYTjt77TLTfaodZYWQd0ehSb3pWVAHysCRNWU+amhUUyDo3FwDllDOzc2HKfjUZ8BTD/9MPJ6GdZYQoD4UDRWcX+tFD02lHKaUsopFuK8DUPIeqvLk3Yjnl/mP7Mygg7sgnASOEokdQia17uaWTx6DhnrYcyxt/j4WFUYe857eDvQtliGqdKJ2Nhs6G5xBLTve0wH4sCPb+Yyh/23z+72qMkjbjH5NmrTuXQchYDppZZc0qVrqK8JgX9G9oGqrCdpxMfrtkCpRW2zGSShOG5Wfl/Yi9XehYkNup3wu8HUrttLgSHYn5JRcI+ZIOd9bRi4VQ7K0Cudmal78RMLuooTzYo/CuwHGVHb/1ifw3a8737RziS2h+2ge3VW9lSXI9XaR95b/gl2q0x0INETtRLWdmURtIHLqpxH12r7oZZ0OINghzz/EYkKPlQI/dc+d0UhSnDXVcvGb3u9AaiEge7oKoYDQCkGBbg0c+LNFIf2aoCB+x8lt4T90F1GlxK6oeHoJJ2LrrMq71aF22Ft5qg7c+uOJaqYB6cnX0C79iGTgbgUjyanT6PdLUFCyj5G2F3KMxDVMrMjn2A4few8iEF7bbYQ0hP09AOSeT2YRRijLv2PL9LvOuhjXZpzq3Csd3DwblhAOSH/ffw9aWZwEK/u+1sGccX0gyqOYjQjtLk3yFqnr1EXzl2yd+FeCanUb6roiYLf+uFot9K99wr3sWCJNHtIWDufPL0GCAp4AzLmplzgO2xTJmA+5ysV3iOn49P5TOrzbdp9gC5YWQNuDQxmkYerfgfD9VHmifpD5vqPo1PsWKO3iPWR9bRlukxn7fZ8XwkiJaAkydmTz0gJcRF8ksWIbHcyz535gAFFXtdoOmyvu+dtYOr8fEXmANEYi1ZwyfxGWPnBuch76e4vodlni/SXUStHsVg06RBgpybtsp0gezSxD2e2iFAQ+oiHMCUNgWVIt9LxRBYUjcb0FoeVa/JaCv12eFCW552GWNUVVIPMKcFPlyXvGwZvrKLCiQYsIL6DscuvnhD5GP2YR8LbURSm60gPju1KPgy9H+ahaGkET+DiZW+K1uTkUoioX+dHl6usb1EJJ8pmlnFR0VWCdYSmTu85SoKVuXyYE9iY7X1KQP8MVDu3rnd6cTKdBdb+T9O9s23kJUVcHKxox2rSnL60w9UWuT2WUdKIfvxJ1GRyukmjT+/H7tx3Gy1FXT/J+0N8QIduMZoo3oq8vR/tB0WK36fl07EfmMyonZbryhCTNUu8Nca8Zcr1qrWknGd2M09QjlRedeU+3eeYeCExCXnFTvpMILtBOEWGmghrnUDc/aE4twiTOzV2kNQDKhKObv1LrUxUVja1wlRRd7SF+DKlMf0PeIwpz81XnzqPBh6RN+yXRMhmWZ67ScYaywCyukMqGjluph3m/zReeJxm5AalDN2JIbSkEsuPEPalUAECrlgIpAmwBy5WRkl0Aaa6R/s0iAwdvPIuTqDg5eZ7UeAWeHUoAum78TKqv26V3/fth//3t2eofbh/oR5w+K10mzsVA8QsDaOlzrHpnieVPYnf/9DaaliZZljzchcqM9iDvhKfW3tOCHSXWGZ0hI86j0h3oyEFSisRDkpX8psufXVUiXtISXHs7h4Z2DvuE2ODKfA0mLiyzJujWfxdEPFZhaOTxPd/+8bfhXZKCa0iHx0b7oATIGtUo1YT6mGaJWPPGRuTQrrn+uiEo9pWxkmVUWWm3zVVhlyn/tWAsR6EnstzT80Wdvm/vKfEOUVeyvJopACCDfuZ5hvWl+bJ8kC5Kt/5uZZ1GScmhvRUhYNQPy+iHffvcEmqFmj0aeatxR6E+1Vv/rnpVVuhSdC2Zbj1Ypaiqe4FWutiXzKpEczTrCRw7Pg11nDuLF1bY1iADkZHlzZu1VyiCXZKk2UuLKp1hg5aNGlvHsk5im404pU+ktTbbl4nkfhrCvsNaUE3mW9nfSYYUpcxy7bAgEmVF6L5KkLJW51bgJFIWzr/ZNQDBsW5fsH17bema/6QissbZP9zZdwGr9TspNdSOdprPmplfhX505ZB8I62IGpOsNtMF+f5RqWunqbuz6XwFLbLInpXrS78loK1L9luCKrRkc5nckpulYtp1m0w6W9dwn9kgDtYYKStGz9CxySWooxcmKBlBH7OnP0Hq+jFcY3pPfwMTQRv/t9v7qHfHPJdTRuWnKtP0+gxWcqBcMOFpRGkUb1dvClkFHiDXyNCbEEas8g8DGJLt2Ae0HxW04Whtk77Cb5250TafDtWUlXd52YmAIgHbTmDVUWYRWKsCLLfgUIjZR2/7++qfwXtI1yTDsumVL44ewNPXXVuI69G0OEUY8y7cOF+2C8VeeaCTZRqxMNIk3TIkqa4r2Xgnuzy5KZE3gwqHUZGLp5GpncgnDezUY3tP69bGaZFHxgYyNpn33ABC73sB5TexFmKDdTQzjp0jytLmLz6wkqF9wJH9wBMI1oPwHlMe3kdSddivi7x/316qgF30b/4oJ9aFAmSOnpiGPdiYDmRZ5HPM9XWyMqLdxCcY74a212FKXEQQawmgayh4IDiCK8vnZPK3hRfF3c+CpTM/Mnl0lhPYnxE6cqNuE8QazyBFLdcZLNqAJW/Byittw/g8OY6rTrjq3wm7UnpfFEaJNEdd0E/h5V5bd09pJLWoL/PoEd+6oRt6aUqmr8K2Gq2ISZbsqpisdiiBk5QoM1kMCQN2+Nab7VvlKcXe05ln2bJ1e9DbqeumHKSaShHntQo8cMjOmkNqP3nBhNYVrIKRUxmqUIBgqXtdFNR7Te8bMErtQKODnOwcD5KY6/XDnbARD6c90uQ6zQXpmlt/Jmuj/KUwU9LXnAHH60oD/M7espwrJd0OQWghUC1lWgpUc6K1XKSykxeDvO40ACdnVuE8ejBydjsJ3n9KtSgJ46ry/sEC+ICAUcqCRo2KlbHR+G88k8sKaHfrHOza3Auljjyyx4qJvqyjDFpcCSqz4IQONiPq7AOV7myKRU+9K1NGdLWlquwrKfnVWp6iPRbRicucgqZIULmg/Xkn0De4VIsNQHYjFje7IarwgcEC+BAAo2RAw5lqCH8KxBnXHH2lDWi0l8eGNZ285Sp5r6OK2eKPPBVMcXKXgja1UyllAji8Wf5OvXe139CqGHpqamGVwAAR66OwNBcDT7GE5+fqTFWUDOtT3jZNG7j6CVWJ9n9QsFxTPrT08hc2P4LU8LBXgYFAM9tVEGgOvDzOuW9D2Ubh09wRtNKeNKxancFj36Bnk0EH9l4Qa8gmq2FXE5Uhp6zIak9eOpgM8g3LEymEmuQUnXnrPgSJlKY5PJ9DFrhkd93xngsFYUmur7Z+9Pafnn4EPqT0oQJG6eUvjO5XFMQD5s/bUtOdz7Vp1f7YngdRGdkwVIYS2W0kF2gX1JxZLEhhdMlqmJhssYlRaWFgW5qj4ZqSbn+PHLVESfQHRt0SPmK9GkGaW2mirKohULF33uaFcuEDWU1dZnWivnn7z6sH4ENMHzpglA5/eXQUba6nsLWj7p4DzYBlAHMgDvaWYA0ePZ0F01G04X7BiGv23NNm/OSCwsNVmH/HScucqExaPPAmmUieiAtmQQLJVQo9Y5OhYQYNydl5BGtyNlCUpyTL/pys8t9XqopTSfdebV7r/aaPBDCXXv/nn3mscencQ/xDp6nNuRhJmyRFj37TjtIj/R38h2MKBRzlFDCPlOc6kYsxf7WaBb7bbkLHur2CIa8pS85uCIPgRAQQr2KIvN2XNI3nn9cZ4zcuLzRgFsFaJIoCsAv8lFco2Juj0t9DhenxqBI98mHIq3bpIwWM0vH/9PtjC4ef+w42ZdTdczabDPNwrNJNPA/2FqEfHahEdQXakg6pgKmOtgIgmSIjj2kwiD1DfMvo0k6ausUZAUgCSDP4CW1mghRLIC2gtkcgzS03edGgk01hya4FCrKdh1Sl1Ddu/Wn1IHyE6SMHzCVWSLR6yMk2Sql5SA+WUU5id43nns4idJdzvGKF9oxiZsk7GdjljpEyi7GoNVHKqDOBQQDWXjPRVrRhDAFMJscKzjTMo2q+gAddUz63/ClSaWqKAFKLEO13ZrXSj9/2k1OPmQnfjzZ9bIBRQvV/VOeSR8D6ISk5OWP+hKb2ROLOdrun1MQuRfbSDgGdOA9Hdk+FNptXZifPdqo5zSSwaYEkvISyibznK0hVdRu1pITC4NZRR4Ka3N7B2c7KD609EF+49E2efvqY0scKmEvtgJMyzpy1jwZw9qwBTIdZfp2ZBMicKansWXi3UgBBsBrMb5Va/pPxHx+I4uhRBKoKH3P6RABzyQOn1eeljKPkQDLgBPDkMweif0dBKgTfmVhKKh72WSSBU+k11lmQ7a9ZHenHo2b02MdJUdn0iQIm0+H7Rh9EWfB1RGBM3pczHFlqSpzm2KY81ea+A0f4TMQ6rPQ5vKQOdt957/cXnzt44JMEylcHPmWJqI72DGHwkmSs3QK+4E2i4NbUHBMEL4cwYSG9LZNKGWfpsnOVHjQZ5g5qpb4fJdGnAiSZPnWAyUQ+ys5de8YW3z4yhtP2t+S6esbixfl3f1HaYO53G2XEPqRQvnHaqyRK4ElUJcY/bSDJ9KkGrF1CEHFWIB5NIv57WlsUe1NoC1wyF9xZJgZk1qrfVToXhzeeal48U4Ukd/CTUBw+SPr/iPebuuWXHf4AAAAASUVORK5CYII=", import.meta.url).href;
3062
+ const DEFAULT_NFT_ICON = new URL("data:image/png;base64,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", import.meta.url).href;
3063
+ function getMiniNftCdnUrl(url) {
3064
+ if (!url) return "";
3065
+ const separator = url.includes("?") ? "&" : "?";
3066
+ return `${url}${separator}x-oss-process=image/resize,m_fill,h_160,w_160`;
3067
+ }
3068
+ const TASKCHAIN_NFT_CLAIM_MESSAGES = {
3069
+ claimDialog: {
3070
+ claimNft: "Claim NFT",
3071
+ claimingNft: "Claiming NFT...",
3072
+ claimConnectingWallet: "Connecting wallet...",
3073
+ claimSwitchingNetwork: "Switching network...",
3074
+ claimGettingSignature: "Getting signature...",
3075
+ claimConfirmInWallet: "Please confirm in your wallet",
3076
+ claimTransactionPending: "Transaction pending...",
3077
+ claimSuccess: "Claim successful!",
3078
+ claimFailed: "Claim failed",
3079
+ claimCanceled: "Transaction was rejected by user.",
3080
+ viewOnExplorer: "View on Explorer",
3081
+ retry: "Retry",
3082
+ close: "Close"
3083
+ },
3084
+ pendingDialog: {
3085
+ pendingTransaction: "Pending Transaction",
3086
+ claimPendingTitle: "You have already claimed this NFT, please wait for this transaction to be confirmed.",
3087
+ claimPendingCheckExplorer: "You can check this transaction on explorer:",
3088
+ claimPendingHashLabel: "Transaction hash:",
3089
+ claimPendingClaimAgainWarn: '"Claim Again" will send a new transaction it is only recommended when you are sure there is something wrong with the current transaction.',
3090
+ claimPendingReceiveAddressNoChange: "This receive address can’t be changed:",
3091
+ claimAgain: "Claim Again",
3092
+ continueWaiting: "Continue Waiting"
3093
+ }
3094
+ };
3095
+ function RightChevronIcon({ className }) {
3096
+ return /* @__PURE__ */ jsx(
3097
+ "svg",
3098
+ {
3099
+ className,
3100
+ width: "8",
3101
+ height: "8",
3102
+ viewBox: "0 0 16 16",
3103
+ fill: "none",
3104
+ xmlns: "http://www.w3.org/2000/svg",
3105
+ children: /* @__PURE__ */ jsx(
3106
+ "path",
3107
+ {
3108
+ d: "M6 12L10 8L6 4",
3109
+ stroke: "currentColor",
3110
+ strokeWidth: "1.5",
3111
+ strokeLinecap: "round",
3112
+ strokeLinejoin: "round"
3113
+ }
3114
+ )
3115
+ }
3116
+ );
3117
+ }
3118
+ function getClaimedRewardDisplay(reward) {
3119
+ if (reward.reward_type === RewardType.Token) {
3120
+ const rewardValue = reward.reward_value;
3121
+ const icon = DEFAULT_TOKEN_ICON$1;
3122
+ const name = (rewardValue == null ? void 0 : rewardValue.token_name) || "Token";
3123
+ const rawAmount = (rewardValue == null ? void 0 : rewardValue.amount) || "0";
3124
+ const amount = formatLongNumber(Number(rawAmount) || 0) || rawAmount;
3125
+ return {
3126
+ icon,
3127
+ text: `+ ${amount} ${name}`.trim(),
3128
+ colorClass: "taskon-taskchain-claimed-text--token",
3129
+ glowClass: "taskon-taskchain-claimed-icon--glow-token"
3130
+ };
3131
+ }
3132
+ if (reward.reward_type === RewardType.GTCPoints || reward.reward_type === RewardType.Points) {
3133
+ const rewardValue = reward.reward_value;
3134
+ const icon = (rewardValue == null ? void 0 : rewardValue.points_icon) || "";
3135
+ const name = (rewardValue == null ? void 0 : rewardValue.points_name) || "Points";
3136
+ const amount = (rewardValue == null ? void 0 : rewardValue.amount) != null ? String(rewardValue.amount) : "0";
3137
+ return {
3138
+ icon,
3139
+ text: `+ ${amount} ${name}`.trim(),
3140
+ colorClass: "taskon-taskchain-claimed-text--points",
3141
+ glowClass: "taskon-taskchain-claimed-icon--glow-points"
3142
+ };
3143
+ }
3144
+ return { icon: "", text: "", colorClass: "", glowClass: "" };
3145
+ }
3146
+ function TaskChainClaimedRewards({
3147
+ rewards,
3148
+ campaignId,
3149
+ campaignType,
3150
+ tokenPrice = 0,
3151
+ rewardDisplayMode = "popup",
3152
+ rewardRedirectUrl = "",
3153
+ onClaimedNft,
3154
+ className
3155
+ }) {
3156
+ const { toast } = useToast();
3157
+ const [isTokenRewardPopupOpen, setIsTokenRewardPopupOpen] = useState(false);
3158
+ const [isViewMyNftPopupOpen, setIsViewMyNftPopupOpen] = useState(false);
3159
+ const {
3160
+ claimNftReward,
3161
+ isSupportedNftRewardType,
3162
+ dialogs: nftClaimDialogs
3163
+ } = useNftClaimFlow({
3164
+ campaignId,
3165
+ targetType: campaignType === CampaignType.Event ? "event" : "campaign",
3166
+ messages: TASKCHAIN_NFT_CLAIM_MESSAGES,
3167
+ onClaimSuccess: async () => {
3168
+ await (onClaimedNft == null ? void 0 : onClaimedNft());
3169
+ },
3170
+ onClaimError: (error) => {
3171
+ toast.error(error.message || "Failed to claim NFT");
3172
+ },
3173
+ onWalletError: (errorMessage) => {
3174
+ toast.error(errorMessage);
3175
+ }
3176
+ });
3177
+ const nftClaimedRewards = useMemo(() => {
3178
+ return rewards.filter(
3179
+ (reward) => reward.reward_type === RewardType.BMintedNft || reward.reward_type === RewardType.Nft || reward.reward_type === RewardType.Cap
3180
+ );
3181
+ }, [rewards]);
3182
+ const otherClaimedRewards = useMemo(() => {
3183
+ return rewards.filter(
3184
+ (reward) => reward.reward_type !== RewardType.BMintedNft && reward.reward_type !== RewardType.Nft && reward.reward_type !== RewardType.Cap
3185
+ );
3186
+ }, [rewards]);
3187
+ const wrapperClassName = useMemo(() => {
3188
+ return ["taskon-taskchain-claimed-rewards-wrap", className].filter(Boolean).join(" ");
3189
+ }, [className]);
3190
+ const isMultiClaimed = otherClaimedRewards.length > 1;
3191
+ const handleViewTokenReward = useCallback(() => {
3192
+ if (rewardDisplayMode === "redirect" && rewardRedirectUrl) {
3193
+ window.open(rewardRedirectUrl, "_blank", "noopener,noreferrer");
3194
+ return;
3195
+ }
3196
+ setIsTokenRewardPopupOpen(true);
3197
+ }, [rewardDisplayMode, rewardRedirectUrl]);
3198
+ const handleViewMyNft = useCallback(() => {
3199
+ if (rewardDisplayMode === "redirect" && rewardRedirectUrl) {
3200
+ window.open(rewardRedirectUrl, "_blank", "noopener,noreferrer");
3201
+ return;
3202
+ }
3203
+ setIsViewMyNftPopupOpen(true);
3204
+ }, [rewardDisplayMode, rewardRedirectUrl]);
3205
+ const handleTaskChainNftClaim = useCallback(
3206
+ async (reward) => {
3207
+ if (!isSupportedNftRewardType(reward.reward_type)) {
3208
+ return;
3209
+ }
3210
+ try {
3211
+ await claimNftReward(reward);
3212
+ } catch (error) {
3213
+ console.error("TaskChain NFT claim failed:", error);
3214
+ }
3215
+ },
3216
+ [isSupportedNftRewardType, claimNftReward]
3217
+ );
3218
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
3219
+ /* @__PURE__ */ jsxs("div", { className: wrapperClassName, children: [
3220
+ otherClaimedRewards.length > 0 && /* @__PURE__ */ jsx(
3221
+ "div",
3222
+ {
3223
+ className: `taskon-taskchain-claimed-card ${isMultiClaimed ? "taskon-taskchain-claimed-card--multi" : ""}`,
3224
+ children: otherClaimedRewards.map((reward, index) => {
3225
+ const display = getClaimedRewardDisplay(reward);
3226
+ const isToken = reward.reward_type === RewardType.Token;
3227
+ if (isToken) {
3228
+ const tokenRewardValue = reward.reward_value;
3229
+ const rawAmount = (tokenRewardValue == null ? void 0 : tokenRewardValue.amount) || "0";
3230
+ const tokenName = (tokenRewardValue == null ? void 0 : tokenRewardValue.token_name) || "Token";
3231
+ const formattedAmount = formatLongNumber(Number(rawAmount) || 0) || rawAmount;
3232
+ const usdValue = formatTokenAmount(
3233
+ Number(rawAmount) * tokenPrice,
3234
+ {
3235
+ decimals: 2
3236
+ }
3237
+ );
3238
+ const tooltipContent = /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip", children: [
3239
+ /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip-row", children: [
3240
+ /* @__PURE__ */ jsx("span", { className: "taskon-taskchain-token-tooltip-label", children: "Reward Token" }),
3241
+ /* @__PURE__ */ jsxs("span", { className: "taskon-taskchain-token-tooltip-value", children: [
3242
+ formattedAmount,
3243
+ " ",
3244
+ tokenName
3245
+ ] })
3246
+ ] }),
3247
+ /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip-row", children: [
3248
+ /* @__PURE__ */ jsx("span", { className: "taskon-taskchain-token-tooltip-label", children: "Value" }),
3249
+ /* @__PURE__ */ jsxs("span", { className: "taskon-taskchain-token-tooltip-usd", children: [
3250
+ "≈$",
3251
+ usdValue
3252
+ ] })
3253
+ ] })
3254
+ ] });
3255
+ return /* @__PURE__ */ jsx(TipPopover, { content: tooltipContent, side: "top", children: /* @__PURE__ */ jsxs(
3256
+ "button",
3257
+ {
3258
+ type: "button",
3259
+ className: `taskon-taskchain-claimed-item taskon-taskchain-claimed-item--token-trigger ${isMultiClaimed ? "taskon-taskchain-claimed-item--multi" : ""}`,
3260
+ onClick: handleViewTokenReward,
3261
+ children: [
3262
+ display.icon && /* @__PURE__ */ jsx(
3263
+ "img",
3264
+ {
3265
+ src: display.icon,
3266
+ alt: "",
3267
+ className: `taskon-taskchain-claimed-icon ${isMultiClaimed ? "taskon-taskchain-claimed-icon--multi" : ""} ${isMultiClaimed ? display.glowClass : ""}`
3268
+ }
3269
+ ),
3270
+ /* @__PURE__ */ jsxs(
3271
+ "span",
3272
+ {
3273
+ className: `taskon-taskchain-claimed-text taskon-taskchain-claimed-text--token-link ${isMultiClaimed ? "taskon-taskchain-claimed-text--multi" : ""} ${display.colorClass}`,
3274
+ children: [
3275
+ display.text,
3276
+ /* @__PURE__ */ jsx(
3277
+ RightChevronIcon,
3278
+ {
3279
+ className: `taskon-taskchain-claimed-arrow ${isMultiClaimed ? "taskon-taskchain-claimed-arrow--multi" : ""}`
3280
+ }
3281
+ )
3282
+ ]
3283
+ }
3284
+ )
3285
+ ]
3286
+ }
3287
+ ) }, index);
3288
+ }
3289
+ return /* @__PURE__ */ jsxs(
3290
+ "div",
3291
+ {
3292
+ className: `taskon-taskchain-claimed-item ${isMultiClaimed ? "taskon-taskchain-claimed-item--multi" : ""}`,
3293
+ children: [
3294
+ display.icon && /* @__PURE__ */ jsx(
3295
+ "img",
3296
+ {
3297
+ src: display.icon,
3298
+ alt: "",
3299
+ className: `taskon-taskchain-claimed-icon ${isMultiClaimed ? "taskon-taskchain-claimed-icon--multi" : ""} ${isMultiClaimed ? display.glowClass : ""}`
3300
+ }
3301
+ ),
3302
+ /* @__PURE__ */ jsx(
3303
+ "span",
3304
+ {
3305
+ className: `taskon-taskchain-claimed-text ${isMultiClaimed ? "taskon-taskchain-claimed-text--multi" : ""} ${display.colorClass}`,
3306
+ children: display.text
3307
+ }
3308
+ )
3309
+ ]
3310
+ },
3311
+ index
3312
+ );
3313
+ })
3314
+ }
3315
+ ),
3316
+ nftClaimedRewards.length > 0 && /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-list", children: nftClaimedRewards.map((reward, index) => {
3317
+ var _a;
3318
+ const nftValue = reward.reward_value;
3319
+ const rewardTypeLabel = reward.reward_type === RewardType.Cap ? "Cap" : "NFT";
3320
+ const nftName = (nftValue == null ? void 0 : nftValue.collection_name) || (nftValue == null ? void 0 : nftValue.title) || rewardTypeLabel;
3321
+ const nftImage = (nftValue == null ? void 0 : nftValue.media_type) === "video" ? "" : (nftValue == null ? void 0 : nftValue.collection_image) ? getMiniNftCdnUrl(nftValue.collection_image) : "";
3322
+ const chainIcon = (nftValue == null ? void 0 : nftValue.chain_icon) || "";
3323
+ const claimable = ((_a = reward.reward_value) == null ? void 0 : _a.claimable) ?? false;
3324
+ const isNftClaimSupported = isSupportedNftRewardType(reward.reward_type);
3325
+ const ctaLabel = claimable ? "Mint" : "View my NFT";
3326
+ return /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-card", children: [
3327
+ /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-info", children: [
3328
+ /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-image-wrap", children: [
3329
+ nftImage ? /* @__PURE__ */ jsx(
3330
+ "img",
3331
+ {
3332
+ src: nftImage,
3333
+ alt: "nft",
3334
+ className: "taskon-taskchain-claimed-nft-image"
3335
+ }
3336
+ ) : /* @__PURE__ */ jsx(
3337
+ "img",
3338
+ {
3339
+ src: DEFAULT_NFT_ICON,
3340
+ alt: "nft",
3341
+ className: "taskon-taskchain-claimed-nft-image taskon-taskchain-claimed-nft-image--fallback"
3342
+ }
3343
+ ),
3344
+ chainIcon && /* @__PURE__ */ jsx(
3345
+ "img",
3346
+ {
3347
+ src: chainIcon,
3348
+ alt: "chain",
3349
+ className: "taskon-taskchain-claimed-nft-chain"
3350
+ }
3351
+ )
3352
+ ] }),
3353
+ /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-text", children: [
3354
+ /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-label", children: rewardTypeLabel }),
3355
+ /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-name", children: nftName })
3356
+ ] })
3357
+ ] }),
3358
+ /* @__PURE__ */ jsx(
3359
+ "button",
3360
+ {
3361
+ type: "button",
3362
+ className: "taskon-taskchain-claimed-nft-btn",
3363
+ onClick: () => {
3364
+ if (!isNftClaimSupported) {
3365
+ toast.info("NFT claim is not supported for this reward type yet.");
3366
+ return;
3367
+ }
3368
+ if (!claimable) {
3369
+ handleViewMyNft();
3370
+ return;
3371
+ }
3372
+ void handleTaskChainNftClaim(reward);
3373
+ },
3374
+ children: ctaLabel
3421
3375
  }
3422
- ) })
3423
- ]
3376
+ )
3377
+ ] }, `nft-${index}`);
3378
+ }) })
3379
+ ] }),
3380
+ nftClaimDialogs,
3381
+ /* @__PURE__ */ jsx(
3382
+ RewardModuleDialog,
3383
+ {
3384
+ open: isTokenRewardPopupOpen,
3385
+ onOpenChange: setIsTokenRewardPopupOpen,
3386
+ type: "token"
3424
3387
  }
3425
- ) })
3426
- ] }) });
3388
+ ),
3389
+ /* @__PURE__ */ jsx(
3390
+ RewardModuleDialog,
3391
+ {
3392
+ open: isViewMyNftPopupOpen,
3393
+ onOpenChange: setIsViewMyNftPopupOpen,
3394
+ type: "nft"
3395
+ }
3396
+ )
3397
+ ] });
3427
3398
  }
3428
3399
  const DEFAULT_TOKEN_ICON = new URL("data:image/png;base64,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", import.meta.url).href;
3429
- const DEFAULT_NFT_ICON = new URL("data:image/png;base64,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", import.meta.url).href;
3430
3400
  const PC_CONFIGS_4 = [
3431
3401
  { x: -40, y: -45 },
3432
3402
  // top-left
@@ -3483,12 +3453,19 @@ function getPositionConfig(index, total) {
3483
3453
  };
3484
3454
  }
3485
3455
  function triggerConfetti(container) {
3486
- const colors = ["#cbff01", "#eeb803", "#ff6b6b", "#4ecdc4", "#45b7d1", "#f7dc6f"];
3456
+ const colors = [
3457
+ "var(--taskon-color-primary)",
3458
+ "var(--taskon-color-secondary)",
3459
+ "var(--taskon-color-warning)",
3460
+ "var(--taskon-color-success)",
3461
+ "var(--taskon-color-link)",
3462
+ "var(--taskon-color-error)"
3463
+ ];
3487
3464
  const particleCount = 50;
3488
3465
  for (let i = 0; i < particleCount; i++) {
3489
3466
  const particle = document.createElement("div");
3490
3467
  particle.className = "taskon-taskchain-confetti-particle";
3491
- particle.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)] || "#cbff01";
3468
+ particle.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)] || "var(--taskon-color-primary)";
3492
3469
  particle.style.left = `${50 + (Math.random() - 0.5) * 60}%`;
3493
3470
  particle.style.animationDelay = `${Math.random() * 0.3}s`;
3494
3471
  particle.style.animationDuration = `${1 + Math.random() * 1}s`;
@@ -3533,34 +3510,6 @@ function getExpectedRewardDisplay(reward) {
3533
3510
  }
3534
3511
  return { icon: "", text: "", colorClass: "" };
3535
3512
  }
3536
- function getClaimedRewardDisplay(reward) {
3537
- if (reward.reward_type === RewardType.Token) {
3538
- const rewardValue = reward.reward_value;
3539
- const icon = DEFAULT_TOKEN_ICON;
3540
- const name = (rewardValue == null ? void 0 : rewardValue.token_name) || "Token";
3541
- const rawAmount = (rewardValue == null ? void 0 : rewardValue.amount) || "0";
3542
- const amount = formatLongNumber(Number(rawAmount) || 0) || rawAmount;
3543
- return {
3544
- icon,
3545
- text: `+ ${amount} ${name}`.trim(),
3546
- colorClass: "taskon-taskchain-claimed-text--token",
3547
- glowClass: "taskon-taskchain-claimed-icon--glow-token"
3548
- };
3549
- }
3550
- if (reward.reward_type === RewardType.GTCPoints || reward.reward_type === RewardType.Points) {
3551
- const rewardValue = reward.reward_value;
3552
- const icon = (rewardValue == null ? void 0 : rewardValue.points_icon) || "";
3553
- const name = (rewardValue == null ? void 0 : rewardValue.points_name) || "Points";
3554
- const amount = (rewardValue == null ? void 0 : rewardValue.amount) != null ? String(rewardValue.amount) : "0";
3555
- return {
3556
- icon,
3557
- text: `+ ${amount} ${name}`.trim(),
3558
- colorClass: "taskon-taskchain-claimed-text--points",
3559
- glowClass: "taskon-taskchain-claimed-icon--glow-points"
3560
- };
3561
- }
3562
- return { icon: "", text: "", colorClass: "", glowClass: "" };
3563
- }
3564
3513
  function useIsMobile() {
3565
3514
  const [isMobile, setIsMobile] = useState(false);
3566
3515
  useEffect(() => {
@@ -3572,35 +3521,14 @@ function useIsMobile() {
3572
3521
  }, []);
3573
3522
  return isMobile;
3574
3523
  }
3575
- function RightChevronIcon({ className }) {
3576
- return /* @__PURE__ */ jsx(
3577
- "svg",
3578
- {
3579
- className,
3580
- width: "8",
3581
- height: "8",
3582
- viewBox: "0 0 16 16",
3583
- fill: "none",
3584
- xmlns: "http://www.w3.org/2000/svg",
3585
- children: /* @__PURE__ */ jsx(
3586
- "path",
3587
- {
3588
- d: "M6 12L10 8L6 4",
3589
- stroke: "currentColor",
3590
- strokeWidth: "1.5",
3591
- strokeLinecap: "round",
3592
- strokeLinejoin: "round"
3593
- }
3594
- )
3595
- }
3596
- );
3597
- }
3598
3524
  function TaskChainRewardStep({
3599
3525
  campaignId,
3600
3526
  campaign,
3601
3527
  userStatus,
3602
3528
  refetchUserStatus,
3603
- onClose
3529
+ onClose,
3530
+ rewardDisplayMode = "popup",
3531
+ rewardRedirectUrl = ""
3604
3532
  }) {
3605
3533
  const { client } = useTaskOnContext();
3606
3534
  const { toast } = useToast();
@@ -3635,12 +3563,6 @@ function TaskChainRewardStep({
3635
3563
  if (!(userStatus == null ? void 0 : userStatus.winner_rewards)) return [];
3636
3564
  return userStatus.winner_rewards.flatMap((r) => r.reward);
3637
3565
  }, [userStatus == null ? void 0 : userStatus.winner_rewards]);
3638
- const nftClaimedRewards = useMemo(() => {
3639
- return userRewards.filter((r) => r.reward_type === RewardType.BMintedNft);
3640
- }, [userRewards]);
3641
- const otherClaimedRewards = useMemo(() => {
3642
- return userRewards.filter((r) => r.reward_type !== RewardType.BMintedNft);
3643
- }, [userRewards]);
3644
3566
  const expectedRewards = useMemo(() => {
3645
3567
  var _a;
3646
3568
  const rewards = ((_a = campaign == null ? void 0 : campaign.winner_rewards) == null ? void 0 : _a.flatMap(
@@ -3699,7 +3621,6 @@ function TaskChainRewardStep({
3699
3621
  };
3700
3622
  });
3701
3623
  }, [expectedRewards, isSpread, isMobile]);
3702
- const isMultiClaimed = otherClaimedRewards.length > 1;
3703
3624
  return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-step", ref: containerRef, children: /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-reward-content", children: [
3704
3625
  /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-title", children: "Congratulations!" }),
3705
3626
  /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-subtitle", children: "You have won" }),
@@ -3708,145 +3629,18 @@ function TaskChainRewardStep({
3708
3629
  {
3709
3630
  className: `taskon-taskchain-reward-claimed ${shouldAnimate ? "taskon-taskchain-reward-claimed--animate" : ""}`,
3710
3631
  children: [
3711
- /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-rewards-wrap", children: [
3712
- otherClaimedRewards.length > 0 && /* @__PURE__ */ jsx(
3713
- "div",
3714
- {
3715
- className: `taskon-taskchain-claimed-card ${isMultiClaimed ? "taskon-taskchain-claimed-card--multi" : ""}`,
3716
- children: otherClaimedRewards.map((reward, index) => {
3717
- const display = getClaimedRewardDisplay(reward);
3718
- const isToken = reward.reward_type === RewardType.Token;
3719
- if (isToken) {
3720
- const tokenRewardValue = reward.reward_value;
3721
- const rawAmount = (tokenRewardValue == null ? void 0 : tokenRewardValue.amount) || "0";
3722
- const tokenName = (tokenRewardValue == null ? void 0 : tokenRewardValue.token_name) || "Token";
3723
- const formattedAmount = formatLongNumber(Number(rawAmount) || 0) || rawAmount;
3724
- const usdValue = formatTokenAmount(Number(rawAmount) * (tokenPrice || 0), { decimals: 2 });
3725
- const tooltipContent = /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip", children: [
3726
- /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip-row", children: [
3727
- /* @__PURE__ */ jsx("span", { className: "taskon-taskchain-token-tooltip-label", children: "Reward Token" }),
3728
- /* @__PURE__ */ jsxs("span", { className: "taskon-taskchain-token-tooltip-value", children: [
3729
- formattedAmount,
3730
- " ",
3731
- tokenName
3732
- ] })
3733
- ] }),
3734
- /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip-row", children: [
3735
- /* @__PURE__ */ jsx("span", { className: "taskon-taskchain-token-tooltip-label", children: "Value" }),
3736
- /* @__PURE__ */ jsxs("span", { className: "taskon-taskchain-token-tooltip-usd", children: [
3737
- "≈$",
3738
- usdValue
3739
- ] })
3740
- ] })
3741
- ] });
3742
- return /* @__PURE__ */ jsx(TipPopover, { content: tooltipContent, side: "top", children: /* @__PURE__ */ jsxs(
3743
- "div",
3744
- {
3745
- className: `taskon-taskchain-claimed-item ${isMultiClaimed ? "taskon-taskchain-claimed-item--multi" : ""}`,
3746
- children: [
3747
- display.icon && /* @__PURE__ */ jsx(
3748
- "img",
3749
- {
3750
- src: display.icon,
3751
- alt: "",
3752
- className: `taskon-taskchain-claimed-icon ${isMultiClaimed ? "taskon-taskchain-claimed-icon--multi" : ""} ${isMultiClaimed ? display.glowClass : ""}`
3753
- }
3754
- ),
3755
- /* @__PURE__ */ jsxs(
3756
- "span",
3757
- {
3758
- className: `taskon-taskchain-claimed-text taskon-taskchain-claimed-text--token-link ${isMultiClaimed ? "taskon-taskchain-claimed-text--multi" : ""} ${display.colorClass}`,
3759
- children: [
3760
- display.text,
3761
- /* @__PURE__ */ jsx(
3762
- RightChevronIcon,
3763
- {
3764
- className: `taskon-taskchain-claimed-arrow ${isMultiClaimed ? "taskon-taskchain-claimed-arrow--multi" : ""}`
3765
- }
3766
- )
3767
- ]
3768
- }
3769
- )
3770
- ]
3771
- }
3772
- ) }, index);
3773
- }
3774
- return /* @__PURE__ */ jsxs(
3775
- "div",
3776
- {
3777
- className: `taskon-taskchain-claimed-item ${isMultiClaimed ? "taskon-taskchain-claimed-item--multi" : ""}`,
3778
- children: [
3779
- display.icon && /* @__PURE__ */ jsx(
3780
- "img",
3781
- {
3782
- src: display.icon,
3783
- alt: "",
3784
- className: `taskon-taskchain-claimed-icon ${isMultiClaimed ? "taskon-taskchain-claimed-icon--multi" : ""} ${isMultiClaimed ? display.glowClass : ""}`
3785
- }
3786
- ),
3787
- /* @__PURE__ */ jsx(
3788
- "span",
3789
- {
3790
- className: `taskon-taskchain-claimed-text ${isMultiClaimed ? "taskon-taskchain-claimed-text--multi" : ""} ${display.colorClass}`,
3791
- children: display.text
3792
- }
3793
- )
3794
- ]
3795
- },
3796
- index
3797
- );
3798
- })
3799
- }
3800
- ),
3801
- nftClaimedRewards.length > 0 && /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-list", children: nftClaimedRewards.map((reward, index) => {
3802
- const nftValue = reward.reward_value;
3803
- const nftName = (nftValue == null ? void 0 : nftValue.collection_name) || "NFT";
3804
- const nftImage = (nftValue == null ? void 0 : nftValue.media_type) === "video" ? "" : (nftValue == null ? void 0 : nftValue.collection_image) || "";
3805
- const chainIcon = (nftValue == null ? void 0 : nftValue.chain_icon) || "";
3806
- return /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-card", children: [
3807
- /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-info", children: [
3808
- /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-image-wrap", children: [
3809
- nftImage ? /* @__PURE__ */ jsx(
3810
- "img",
3811
- {
3812
- src: nftImage,
3813
- alt: "nft",
3814
- className: "taskon-taskchain-claimed-nft-image"
3815
- }
3816
- ) : /* @__PURE__ */ jsx(
3817
- "img",
3818
- {
3819
- src: DEFAULT_NFT_ICON,
3820
- alt: "nft",
3821
- className: "taskon-taskchain-claimed-nft-image taskon-taskchain-claimed-nft-image--fallback"
3822
- }
3823
- ),
3824
- chainIcon && /* @__PURE__ */ jsx(
3825
- "img",
3826
- {
3827
- src: chainIcon,
3828
- alt: "chain",
3829
- className: "taskon-taskchain-claimed-nft-chain"
3830
- }
3831
- )
3832
- ] }),
3833
- /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-text", children: [
3834
- /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-label", children: "NFT" }),
3835
- /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-name", children: nftName })
3836
- ] })
3837
- ] }),
3838
- /* @__PURE__ */ jsx(
3839
- "button",
3840
- {
3841
- type: "button",
3842
- className: "taskon-taskchain-claimed-nft-btn",
3843
- onClick: () => toast.info("Coming soon"),
3844
- children: "Claim"
3845
- }
3846
- )
3847
- ] }, `nft-${index}`);
3848
- }) })
3849
- ] }),
3632
+ /* @__PURE__ */ jsx(
3633
+ TaskChainClaimedRewards,
3634
+ {
3635
+ rewards: userRewards,
3636
+ campaignId,
3637
+ campaignType: campaign == null ? void 0 : campaign.campaign_type,
3638
+ tokenPrice,
3639
+ rewardDisplayMode,
3640
+ rewardRedirectUrl,
3641
+ onClaimedNft: refetchUserStatus
3642
+ }
3643
+ ),
3850
3644
  /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-actions", children: /* @__PURE__ */ jsx(
3851
3645
  "button",
3852
3646
  {
@@ -3957,7 +3751,9 @@ function TaskChainBlindBoxStep({
3957
3751
  campaign,
3958
3752
  userStatus,
3959
3753
  refetchUserStatus,
3960
- onClose
3754
+ onClose,
3755
+ rewardDisplayMode = "popup",
3756
+ rewardRedirectUrl = ""
3961
3757
  }) {
3962
3758
  const { client } = useTaskOnContext();
3963
3759
  const { toast } = useToast();
@@ -4057,16 +3853,35 @@ function TaskChainBlindBoxStep({
4057
3853
  }
4058
3854
  }, [campaign, api]);
4059
3855
  if (userBlindBoxStatus === "claimed") {
4060
- return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-step", children: /* @__PURE__ */ jsx(
4061
- BlindBoxRewardDialog,
4062
- {
4063
- rewards: userRewards,
4064
- emptyReward,
4065
- tokenPrice,
4066
- loading: false,
4067
- onClose
4068
- }
4069
- ) });
3856
+ const title = isOpenedButNotWon ? "Oops! Better Luck Next Time!" : "Congratulations!";
3857
+ const subtitle = isOpenedButNotWon ? "Rewards Missed" : "You Have Won";
3858
+ const displayRewards = emptyReward ? [emptyReward, ...userRewards] : userRewards;
3859
+ return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-step", children: /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-blindbox-result", children: [
3860
+ /* @__PURE__ */ jsx("h2", { className: "taskon-taskchain-blindbox-result-title", children: title }),
3861
+ /* @__PURE__ */ jsx("p", { className: "taskon-taskchain-blindbox-result-subtitle", children: subtitle }),
3862
+ displayRewards.length > 0 && /* @__PURE__ */ jsx(
3863
+ TaskChainClaimedRewards,
3864
+ {
3865
+ className: "taskon-taskchain-blindbox-result-rewards",
3866
+ rewards: displayRewards,
3867
+ campaignId,
3868
+ campaignType: (campaign == null ? void 0 : campaign.campaign_type) ?? CampaignType.Campaign,
3869
+ tokenPrice,
3870
+ rewardDisplayMode,
3871
+ rewardRedirectUrl,
3872
+ onClaimedNft: refetchUserStatus
3873
+ }
3874
+ ),
3875
+ /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-result-actions", children: /* @__PURE__ */ jsx(
3876
+ "button",
3877
+ {
3878
+ type: "button",
3879
+ className: "taskon-taskchain-btn taskon-taskchain-btn--secondary",
3880
+ onClick: onClose,
3881
+ children: "Back"
3882
+ }
3883
+ ) })
3884
+ ] }) });
4070
3885
  }
4071
3886
  if (userBlindBoxStatus === "wait-claim") {
4072
3887
  return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-step", children: /* @__PURE__ */ jsx(
@@ -4112,7 +3927,9 @@ function TaskChainMain({
4112
3927
  hasBlindBox,
4113
3928
  onTaskComplete,
4114
3929
  onClose,
4115
- refetchUserStatus
3930
+ refetchUserStatus,
3931
+ rewardDisplayMode,
3932
+ rewardRedirectUrl
4116
3933
  }) {
4117
3934
  const handleVerifyAttempted = useCallback(
4118
3935
  async (_taskId, success) => {
@@ -4132,7 +3949,9 @@ function TaskChainMain({
4132
3949
  campaign,
4133
3950
  userStatus,
4134
3951
  refetchUserStatus,
4135
- onClose
3952
+ onClose,
3953
+ rewardDisplayMode,
3954
+ rewardRedirectUrl
4136
3955
  }
4137
3956
  );
4138
3957
  }
@@ -4143,7 +3962,9 @@ function TaskChainMain({
4143
3962
  campaign,
4144
3963
  userStatus,
4145
3964
  refetchUserStatus,
4146
- onClose
3965
+ onClose,
3966
+ rewardDisplayMode,
3967
+ rewardRedirectUrl
4147
3968
  }
4148
3969
  );
4149
3970
  }
@@ -4273,7 +4094,7 @@ function NeedLoginMask({
4273
4094
  style: {
4274
4095
  fontSize: "18px",
4275
4096
  fontWeight: 600,
4276
- color: "var(--taskon-text-primary, #fff)",
4097
+ color: "var(--taskon-color-text)",
4277
4098
  marginBottom: "8px"
4278
4099
  },
4279
4100
  children: "Login Required"
@@ -4284,7 +4105,7 @@ function NeedLoginMask({
4284
4105
  {
4285
4106
  style: {
4286
4107
  fontSize: "14px",
4287
- color: "var(--taskon-text-secondary, #999)",
4108
+ color: "var(--taskon-color-text-secondary)",
4288
4109
  marginBottom: "24px",
4289
4110
  maxWidth: "300px",
4290
4111
  lineHeight: 1.5
@@ -4301,8 +4122,8 @@ function NeedLoginMask({
4301
4122
  padding: "12px 32px",
4302
4123
  fontSize: "14px",
4303
4124
  fontWeight: 600,
4304
- color: "#000",
4305
- backgroundColor: "#cbff01",
4125
+ color: "var(--taskon-color-text-on-primary)",
4126
+ backgroundColor: "var(--taskon-color-primary)",
4306
4127
  border: "none",
4307
4128
  borderRadius: "8px",
4308
4129
  cursor: "pointer",
@@ -4333,7 +4154,9 @@ function TaskChainDetail({
4333
4154
  onStepChange,
4334
4155
  onTaskComplete,
4335
4156
  onClose,
4336
- refetchUserStatus
4157
+ refetchUserStatus,
4158
+ rewardDisplayMode,
4159
+ rewardRedirectUrl
4337
4160
  }) {
4338
4161
  var _a, _b;
4339
4162
  const { isLoggedIn, requestLogin, client } = useTaskOnContext();
@@ -4452,7 +4275,9 @@ function TaskChainDetail({
4452
4275
  hasBlindBox,
4453
4276
  onTaskComplete,
4454
4277
  onClose,
4455
- refetchUserStatus
4278
+ refetchUserStatus,
4279
+ rewardDisplayMode,
4280
+ rewardRedirectUrl
4456
4281
  }
4457
4282
  );
4458
4283
  };
@@ -4553,6 +4378,7 @@ function BottomDialog({
4553
4378
  top = "16vh",
4554
4379
  showCloseButton = true
4555
4380
  }) {
4381
+ const portalContainer = useTaskOnPortalContainer();
4556
4382
  const [mounted, setMounted] = useState(false);
4557
4383
  const [isExiting, setIsExiting] = useState(false);
4558
4384
  const exitTimerRef = useRef(null);
@@ -4622,14 +4448,19 @@ function BottomDialog({
4622
4448
  }
4623
4449
  )
4624
4450
  ] });
4625
- return createPortal(dialog, document.body);
4451
+ if (!portalContainer) {
4452
+ return null;
4453
+ }
4454
+ return createPortal(dialog, portalContainer);
4626
4455
  }
4627
4456
  function TaskChainDialog({
4628
4457
  campaignId,
4629
4458
  open,
4630
4459
  onClose,
4631
4460
  onUpdate,
4632
- defaultStepIndex
4461
+ defaultStepIndex,
4462
+ rewardDisplayMode,
4463
+ rewardRedirectUrl
4633
4464
  }) {
4634
4465
  var _a, _b;
4635
4466
  const {
@@ -4711,12 +4542,14 @@ function TaskChainDialog({
4711
4542
  onStepChange: handleStepChange,
4712
4543
  onTaskComplete: handleTaskComplete,
4713
4544
  onClose,
4714
- refetchUserStatus
4545
+ refetchUserStatus,
4546
+ rewardDisplayMode,
4547
+ rewardRedirectUrl
4715
4548
  }
4716
4549
  )
4717
4550
  ] }) });
4718
4551
  }
4719
- function SectorItem({
4552
+ function SectorItemComponent({
4720
4553
  sector,
4721
4554
  showSectorName = true,
4722
4555
  showSectorDescription = true,
@@ -4728,7 +4561,8 @@ function SectorItem({
4728
4561
  onTaskChainOpen,
4729
4562
  onEligTaskClick,
4730
4563
  coolDownMap,
4731
- onCoolDownComplete
4564
+ onCoolDownComplete,
4565
+ onDoneCountdownComplete
4732
4566
  }) {
4733
4567
  const hasPeriodicTask = useMemo(() => {
4734
4568
  return sector.cards.some((card) => {
@@ -4801,10 +4635,11 @@ function SectorItem({
4801
4635
  var _a;
4802
4636
  return onClaimTask(taskInfo.id, token, (_a = taskInfo.template) == null ? void 0 : _a.platform);
4803
4637
  } : void 0,
4804
- onUpdate,
4638
+ onUpdate: onUpdate ? () => onUpdate(taskInfo.id) : void 0,
4805
4639
  onEligTaskClick,
4806
4640
  coolDown: coolDownMap == null ? void 0 : coolDownMap[taskInfo.id],
4807
- onCoolDownComplete: onCoolDownComplete ? () => onCoolDownComplete(taskInfo.id) : void 0
4641
+ onCoolDownComplete: onCoolDownComplete ? () => onCoolDownComplete(taskInfo.id) : void 0,
4642
+ onDoneCountdownComplete
4808
4643
  }
4809
4644
  ) }, key);
4810
4645
  }
@@ -4837,7 +4672,8 @@ function SectorItem({
4837
4672
  task: taskInfo,
4838
4673
  userStatus: card.user_status,
4839
4674
  onClick: () => onTaskClick == null ? void 0 : onTaskClick(card),
4840
- onEligTaskClick
4675
+ onEligTaskClick,
4676
+ onDoneCountdownComplete
4841
4677
  }
4842
4678
  ) }, key);
4843
4679
  }
@@ -4846,6 +4682,7 @@ function SectorItem({
4846
4682
  ] })
4847
4683
  ] });
4848
4684
  }
4685
+ const SectorItem = React__default.memo(SectorItemComponent);
4849
4686
  const RECURRENCE_LABEL_MAP = {
4850
4687
  Once: "Once",
4851
4688
  Daily: "Daily",
@@ -5062,9 +4899,19 @@ function formatDateTime(timestamp) {
5062
4899
  }
5063
4900
  function formatCountdown(diff) {
5064
4901
  if (diff <= 0) return "00:00:00";
5065
- const hours = Math.floor(diff / (1e3 * 60 * 60));
5066
- const minutes = Math.floor(diff % (1e3 * 60 * 60) / (1e3 * 60));
5067
- const seconds = Math.floor(diff % (1e3 * 60) / 1e3);
4902
+ if (diff / (1e3 * 60 * 60) > 24) {
4903
+ const day2 = 24 * 60 * 60 * 1e3;
4904
+ const days = Math.ceil(diff / day2);
4905
+ return `${days} day${days > 1 ? "s" : ""}`;
4906
+ }
4907
+ const day = 24 * 60 * 60 * 1e3;
4908
+ const hour = 60 * 60 * 1e3;
4909
+ const minute = 60 * 1e3;
4910
+ const second = 1e3;
4911
+ const normalizedDiff = Math.abs(diff);
4912
+ const hours = Math.floor(normalizedDiff % day / hour);
4913
+ const minutes = Math.floor(normalizedDiff % hour / minute);
4914
+ const seconds = Math.floor(normalizedDiff % minute / second);
5068
4915
  const prefix2 = (n) => String(n).padStart(2, "0");
5069
4916
  return `${prefix2(hours)}:${prefix2(minutes)}:${prefix2(seconds)}`;
5070
4917
  }
@@ -5081,6 +4928,7 @@ function DialogRewardCard({
5081
4928
  chainType,
5082
4929
  onBindFailed,
5083
4930
  renderStatus,
4931
+ renderStatusPrefix,
5084
4932
  hideClaimButton = false,
5085
4933
  verifyClaim,
5086
4934
  isPeriodic = false,
@@ -5115,7 +4963,7 @@ function DialogRewardCard({
5115
4963
  const renderPeriodicCountdown = useCallback(() => {
5116
4964
  if (!showPeriodicCountdown) return null;
5117
4965
  return /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-periodic-done", children: [
5118
- /* @__PURE__ */ jsx("span", { children: "Done Today" }),
4966
+ /* @__PURE__ */ jsx("span", { children: "Done for today" }),
5119
4967
  /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-periodic-done__line" }),
5120
4968
  /* @__PURE__ */ jsx("span", { children: "Continue in" }),
5121
4969
  /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-periodic-done__time", children: countdownLabel })
@@ -5196,6 +5044,8 @@ function DialogRewardCard({
5196
5044
  }
5197
5045
  ) });
5198
5046
  };
5047
+ const statusPrefixNode = renderStatusPrefix == null ? void 0 : renderStatusPrefix();
5048
+ const statusNode = showPeriodicCountdown ? renderPeriodicCountdown() : renderStatus ? renderStatus() : renderDefaultStatus();
5199
5049
  return /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-reward-card", children: [
5200
5050
  claimLimit > 0 && /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-max-claim", children: [
5201
5051
  "Max. Claims",
@@ -5204,7 +5054,10 @@ function DialogRewardCard({
5204
5054
  ] }),
5205
5055
  /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-label-row", children: [
5206
5056
  /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-rewards-label", children: "🎁 Rewards" }),
5207
- showPeriodicCountdown ? renderPeriodicCountdown() : renderStatus ? renderStatus() : renderDefaultStatus()
5057
+ (statusPrefixNode || statusNode) && /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-label-right", children: [
5058
+ statusPrefixNode,
5059
+ statusNode
5060
+ ] })
5208
5061
  ] }),
5209
5062
  renderRewardContent(),
5210
5063
  renderClaimArea(),
@@ -5257,6 +5110,10 @@ function BaseDialogLayout({
5257
5110
  claimLimit,
5258
5111
  reward,
5259
5112
  isWon,
5113
+ eligibilityTask,
5114
+ eligibilityConditions,
5115
+ onEligibilityCheck,
5116
+ onEligTaskClick,
5260
5117
  coolDown,
5261
5118
  onCoolDownComplete,
5262
5119
  isSubmitting,
@@ -5265,6 +5122,7 @@ function BaseDialogLayout({
5265
5122
  chainType,
5266
5123
  onBindFailed,
5267
5124
  renderStatus,
5125
+ renderStatusPrefix,
5268
5126
  hideClaimButton,
5269
5127
  verifyClaim,
5270
5128
  hideRewardCard = false,
@@ -5276,7 +5134,12 @@ function BaseDialogLayout({
5276
5134
  showCloseIn = false,
5277
5135
  onCloseInClose
5278
5136
  }) {
5137
+ var _a;
5279
5138
  const recurrenceLabel = getRecurrenceLabel(recurrence);
5139
+ const shouldShowEligibilityMask = Boolean(
5140
+ ((_a = eligibilityTask == null ? void 0 : eligibilityTask.eligiblity) == null ? void 0 : _a.length) && (eligibilityConditions == null ? void 0 : eligibilityConditions.length)
5141
+ );
5142
+ const leftPanelClassName = shouldShowEligibilityMask ? "taskon-task-dialog-left taskon-task-dialog-left--mask-active" : "taskon-task-dialog-left";
5280
5143
  const renderValidTime = () => {
5281
5144
  if (!(validTime == null ? void 0 : validTime.endTime)) return null;
5282
5145
  if (validTime.isExpired) {
@@ -5290,7 +5153,16 @@ function BaseDialogLayout({
5290
5153
  /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-valid-time-value", children: validTime.endTime })
5291
5154
  ] });
5292
5155
  };
5293
- return /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-left", children: [
5156
+ return /* @__PURE__ */ jsxs("div", { className: leftPanelClassName, children: [
5157
+ shouldShowEligibilityMask && eligibilityTask && eligibilityConditions && /* @__PURE__ */ jsx(
5158
+ UserEligibilityMask,
5159
+ {
5160
+ task: eligibilityTask,
5161
+ conditions: eligibilityConditions,
5162
+ onCheck: onEligibilityCheck,
5163
+ onTaskClick: onEligTaskClick
5164
+ }
5165
+ ),
5294
5166
  /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-main", children: [
5295
5167
  !noRecurrence && /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-recurrence", children: recurrenceLabel }),
5296
5168
  titleLink ? /* @__PURE__ */ jsx(
@@ -5321,6 +5193,7 @@ function BaseDialogLayout({
5321
5193
  chainType,
5322
5194
  onBindFailed,
5323
5195
  renderStatus,
5196
+ renderStatusPrefix,
5324
5197
  hideClaimButton,
5325
5198
  verifyClaim,
5326
5199
  isPeriodic,
@@ -5343,6 +5216,9 @@ function parseTemplateParams(params) {
5343
5216
  function TemplateDialogContent({
5344
5217
  task,
5345
5218
  taskInfo,
5219
+ eligibilityConditions,
5220
+ onEligibilityCheck,
5221
+ onEligTaskClick,
5346
5222
  onClaimSuccess,
5347
5223
  showCloseIn,
5348
5224
  onCloseInClose,
@@ -5474,6 +5350,10 @@ function TemplateDialogContent({
5474
5350
  claimLimit: info.claim_limit,
5475
5351
  reward,
5476
5352
  isWon: state.isWon,
5353
+ eligibilityTask: info,
5354
+ eligibilityConditions,
5355
+ onEligibilityCheck,
5356
+ onEligTaskClick,
5477
5357
  coolDown,
5478
5358
  onCoolDownComplete: handleCoolDownComplete,
5479
5359
  isSubmitting,
@@ -5491,9 +5371,9 @@ function TemplateDialogContent({
5491
5371
  showCloseIn,
5492
5372
  onCloseInClose,
5493
5373
  children: [
5374
+ validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
5494
5375
  /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-desc", children: [
5495
- params.desc && info.template.is_rich_text && /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }),
5496
- params.desc && !info.template.is_rich_text && /* @__PURE__ */ jsx(CardField, { label: params.desc }),
5376
+ params.desc && /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }),
5497
5377
  (_d = params.desc_fields) == null ? void 0 : _d.filter((field) => !field.display || field.display !== "card").map((field, index) => {
5498
5378
  const label = field.key === "open_post_link" ? void 0 : field.key;
5499
5379
  return /* @__PURE__ */ jsx(
@@ -5508,7 +5388,6 @@ function TemplateDialogContent({
5508
5388
  );
5509
5389
  })
5510
5390
  ] }),
5511
- validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
5512
5391
  params.action_label && !state.isWon && /* @__PURE__ */ jsxs(
5513
5392
  "button",
5514
5393
  {
@@ -5740,6 +5619,9 @@ function parsePowParams(params) {
5740
5619
  function PowTaskDialogContent({
5741
5620
  task,
5742
5621
  taskInfo,
5622
+ eligibilityConditions,
5623
+ onEligibilityCheck,
5624
+ onEligTaskClick,
5743
5625
  onClaimSuccess,
5744
5626
  showCloseIn,
5745
5627
  onCloseInClose
@@ -5761,6 +5643,7 @@ function PowTaskDialogContent({
5761
5643
  }, [(_b = info == null ? void 0 : info.template) == null ? void 0 : _b.params]);
5762
5644
  const state = useTaskState(info, userStatus);
5763
5645
  const reward = useTaskReward(info);
5646
+ const validTime = useTaskTime(info);
5764
5647
  const { submitTask, isSubmitting } = useSubmitTask(
5765
5648
  (info == null ? void 0 : info.id) ?? 0,
5766
5649
  onClaimSuccess,
@@ -5916,9 +5799,14 @@ function PowTaskDialogContent({
5916
5799
  recurrence: info.recurrence,
5917
5800
  title: info.name,
5918
5801
  titleLink: params.task_url,
5802
+ validTime,
5919
5803
  claimLimit: info.claim_limit,
5920
5804
  reward,
5921
5805
  isWon: state.isWon,
5806
+ eligibilityTask: info,
5807
+ eligibilityConditions,
5808
+ onEligibilityCheck,
5809
+ onEligTaskClick,
5922
5810
  coolDown: 0,
5923
5811
  renderStatus: renderReviewStatus,
5924
5812
  hideClaimButton: true,
@@ -5930,7 +5818,7 @@ function PowTaskDialogContent({
5930
5818
  showCloseIn,
5931
5819
  onCloseInClose,
5932
5820
  children: [
5933
- params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) }),
5821
+ params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) }),
5934
5822
  renderInputArea(),
5935
5823
  renderActionButton()
5936
5824
  ]
@@ -5947,6 +5835,9 @@ function parseParams$1(params) {
5947
5835
  function ContractInteractiveDialogContent({
5948
5836
  task,
5949
5837
  taskInfo,
5838
+ eligibilityConditions,
5839
+ onEligibilityCheck,
5840
+ onEligTaskClick,
5950
5841
  onClaimSuccess,
5951
5842
  showCloseIn,
5952
5843
  onCloseInClose,
@@ -5972,6 +5863,7 @@ function ContractInteractiveDialogContent({
5972
5863
  }, [(_b = info == null ? void 0 : info.template) == null ? void 0 : _b.params]);
5973
5864
  const state = useTaskState(info, userStatus);
5974
5865
  const reward = useTaskReward(info);
5866
+ const validTime = useTaskTime(info);
5975
5867
  const { submitTask, isSubmitting } = useSubmitTask(
5976
5868
  (info == null ? void 0 : info.id) ?? 0,
5977
5869
  onClaimSuccess,
@@ -6037,9 +5929,14 @@ function ContractInteractiveDialogContent({
6037
5929
  {
6038
5930
  recurrence: info.recurrence,
6039
5931
  title: info.name,
5932
+ validTime,
6040
5933
  claimLimit: info.claim_limit,
6041
5934
  reward,
6042
5935
  isWon: state.isWon,
5936
+ eligibilityTask: info,
5937
+ eligibilityConditions,
5938
+ onEligibilityCheck,
5939
+ onEligTaskClick,
6043
5940
  coolDown,
6044
5941
  onCoolDownComplete: handleCoolDownComplete,
6045
5942
  isSubmitting,
@@ -6055,8 +5952,8 @@ function ContractInteractiveDialogContent({
6055
5952
  showCloseIn,
6056
5953
  onCloseInClose,
6057
5954
  children: [
6058
- params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) }),
6059
5955
  validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
5956
+ params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) }),
6060
5957
  params.task_url && !state.isWon && /* @__PURE__ */ jsx(
6061
5958
  "button",
6062
5959
  {
@@ -6078,18 +5975,12 @@ function parseParams(params) {
6078
5975
  return {};
6079
5976
  }
6080
5977
  }
6081
- function generateRulesText(params, pointName) {
6082
- const { each_trading_volume, each_receive_points, swap_receive_max_points } = params;
6083
- if (!each_trading_volume || !each_receive_points) return "";
6084
- let text = `Swap $${each_trading_volume} USD to earn ${each_receive_points} ${pointName}`;
6085
- if (typeof swap_receive_max_points === "number" && swap_receive_max_points >= 0) {
6086
- text += `. Maximum ${swap_receive_max_points} ${pointName} per task.`;
6087
- }
6088
- return text;
6089
- }
6090
5978
  function SwapDexDialogContent({
6091
5979
  task,
6092
5980
  taskInfo,
5981
+ eligibilityConditions,
5982
+ onEligibilityCheck,
5983
+ onEligTaskClick,
6093
5984
  onClaimSuccess,
6094
5985
  showCloseIn,
6095
5986
  onCloseInClose,
@@ -6100,7 +5991,7 @@ function SwapDexDialogContent({
6100
5991
  var _a, _b, _c;
6101
5992
  const userStatus = task.user_status;
6102
5993
  const { showToast } = useToast();
6103
- const { getChainType } = useChainMap();
5994
+ const { getChainType, chainMap } = useChainMap();
6104
5995
  const { communityInfo } = useTaskOnContext();
6105
5996
  const totalEarned = ((_a = userStatus == null ? void 0 : userStatus.total_point) == null ? void 0 : _a.amount) ?? 0;
6106
5997
  const rawInfo = taskInfo ?? task.card_info;
@@ -6115,6 +6006,7 @@ function SwapDexDialogContent({
6115
6006
  }, [(_b = info == null ? void 0 : info.template) == null ? void 0 : _b.params]);
6116
6007
  const state = useTaskState(info, userStatus);
6117
6008
  const reward = useTaskReward(info);
6009
+ const validTime = useTaskTime(info);
6118
6010
  const { submitTask, isSubmitting } = useSubmitTask(
6119
6011
  (info == null ? void 0 : info.id) ?? 0,
6120
6012
  onClaimSuccess,
@@ -6126,18 +6018,33 @@ function SwapDexDialogContent({
6126
6018
  );
6127
6019
  const coolDown = sharedCoolDown ?? localCoolDown;
6128
6020
  const isFixedRule = params.is_fixed_reward_type;
6021
+ const rulePointName = reward.name || "Points";
6022
+ const ruleMaxText = useMemo(() => {
6023
+ if (typeof params.swap_receive_max_points === "number" && params.swap_receive_max_points >= 0) {
6024
+ return `(Max ${params.swap_receive_max_points} ${rulePointName})`;
6025
+ }
6026
+ return "";
6027
+ }, [params.swap_receive_max_points, rulePointName]);
6028
+ const hasRulesText = useMemo(() => {
6029
+ return Boolean(params.each_trading_volume && params.each_receive_points);
6030
+ }, [params.each_trading_volume, params.each_receive_points]);
6031
+ const chainLabel = useMemo(() => {
6032
+ var _a2;
6033
+ if (!params.chain) return "";
6034
+ return ((_a2 = chainMap[params.chain.toLowerCase()]) == null ? void 0 : _a2.label) || params.chain;
6035
+ }, [chainMap, params.chain]);
6129
6036
  const titleExpress = useMemo(() => {
6130
6037
  return getSwapDexTitleExpress({
6131
6038
  tokenOutList: params.token_out_list,
6132
6039
  tokenInList: params.token_in_list,
6133
- chainLabel: params.chain || "",
6040
+ chainLabel,
6134
6041
  dexName: (info == null ? void 0 : info.project_name) || (communityInfo == null ? void 0 : communityInfo.name) || "DEX",
6135
6042
  dexLink: params.task_url,
6136
6043
  isFixedReward: params.is_fixed_reward_type || false,
6137
6044
  minTradingVolume: params.min_trading_volume,
6138
6045
  minTradesTimes: params.min_trades_times
6139
6046
  });
6140
- }, [params, info == null ? void 0 : info.project_name, communityInfo == null ? void 0 : communityInfo.name]);
6047
+ }, [params, chainLabel, info == null ? void 0 : info.project_name, communityInfo == null ? void 0 : communityInfo.name]);
6141
6048
  const fromTokenDisplay = useMemo(
6142
6049
  () => formatSwapTokensForDisplay(params.token_out_list),
6143
6050
  [params.token_out_list]
@@ -6146,10 +6053,6 @@ function SwapDexDialogContent({
6146
6053
  () => formatSwapTokensForDisplay(params.token_in_list),
6147
6054
  [params.token_in_list]
6148
6055
  );
6149
- const rulesText = useMemo(() => {
6150
- if (isFixedRule) return "";
6151
- return generateRulesText(params, reward.name || "points");
6152
- }, [isFixedRule, params, reward.name]);
6153
6056
  const validationTimeFrame = useMemo(() => {
6154
6057
  if (!(info == null ? void 0 : info.template)) return void 0;
6155
6058
  const { class_type, is_hold } = info.template;
@@ -6203,12 +6106,9 @@ function SwapDexDialogContent({
6203
6106
  window.open(params.task_url, "_blank");
6204
6107
  }
6205
6108
  }, [params.task_url]);
6206
- const renderRewardStatus = useCallback(() => {
6207
- if (state.isWon) {
6208
- return /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-won", children: "Won" });
6209
- }
6109
+ const renderRewardStatusPrefix = useCallback(() => {
6210
6110
  if (isDynamicTimes) {
6211
- const currentTimes = (userStatus == null ? void 0 : userStatus.current_trades_times) ?? "--";
6111
+ const currentTimes = (userStatus == null ? void 0 : userStatus.current_trades_times) && userStatus.current_trades_times > 0 ? userStatus.current_trades_times : "--";
6212
6112
  const minTimes = params.min_trades_times ?? 0;
6213
6113
  return /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-progress", children: [
6214
6114
  /* @__PURE__ */ jsx("span", { className: "taskon-swap-dialog-progress-current", children: currentTimes }),
@@ -6220,14 +6120,9 @@ function SwapDexDialogContent({
6220
6120
  ] });
6221
6121
  }
6222
6122
  return null;
6223
- }, [
6224
- state.isWon,
6225
- isDynamicTimes,
6226
- userStatus == null ? void 0 : userStatus.current_trades_times,
6227
- params.min_trades_times
6228
- ]);
6123
+ }, [isDynamicTimes, userStatus == null ? void 0 : userStatus.current_trades_times, params.min_trades_times]);
6229
6124
  const renderFixedModeContent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
6230
- params.chain && /* @__PURE__ */ jsx(CardField, { label: "Chain: ", value: params.chain }),
6125
+ params.chain && /* @__PURE__ */ jsx(CardField, { label: "Chain: ", value: chainLabel }),
6231
6126
  params.token_out_list && params.token_out_list.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
6232
6127
  /* @__PURE__ */ jsx(CardField, { label: "Swap From: ", value: fromTokenDisplay }),
6233
6128
  params.token_out_list.filter(
@@ -6258,17 +6153,30 @@ function SwapDexDialogContent({
6258
6153
  ] }),
6259
6154
  params.desc && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
6260
6155
  /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-title", children: "Instructions" }),
6261
- /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) })
6156
+ /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) })
6262
6157
  ] })
6263
6158
  ] });
6264
6159
  const renderDynamicModeContent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
6265
- rulesText && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
6160
+ hasRulesText && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
6266
6161
  /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-title", children: "Rules" }),
6267
- /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: rulesText })
6162
+ /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section-content taskon-swap-dialog-section-content--rules", children: [
6163
+ /* @__PURE__ */ jsx("span", { children: "Every" }),
6164
+ /* @__PURE__ */ jsxs("span", { className: "taskon-swap-dialog-rules-highlight", children: [
6165
+ "$",
6166
+ params.each_trading_volume || "0",
6167
+ " USD"
6168
+ ] }),
6169
+ /* @__PURE__ */ jsx("span", { children: "will give you" }),
6170
+ /* @__PURE__ */ jsx("span", { className: "taskon-swap-dialog-rules-highlight", children: params.each_receive_points }),
6171
+ /* @__PURE__ */ jsxs("span", { className: "taskon-swap-dialog-rules-point-name", children: [
6172
+ rulePointName,
6173
+ ruleMaxText && /* @__PURE__ */ jsx("span", { className: "taskon-swap-dialog-rules-max", children: ruleMaxText })
6174
+ ] })
6175
+ ] })
6268
6176
  ] }),
6269
6177
  params.desc && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
6270
6178
  /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-title", children: "Instructions" }),
6271
- /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) })
6179
+ /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) })
6272
6180
  ] })
6273
6181
  ] });
6274
6182
  if (!info) {
@@ -6279,16 +6187,21 @@ function SwapDexDialogContent({
6279
6187
  {
6280
6188
  recurrence: info.recurrence,
6281
6189
  title: /* @__PURE__ */ jsx(TitleExpress, { express: titleExpress }),
6190
+ validTime,
6282
6191
  claimLimit: info.claim_limit,
6283
6192
  reward,
6284
6193
  isWon: state.isWon,
6194
+ eligibilityTask: info,
6195
+ eligibilityConditions,
6196
+ onEligibilityCheck,
6197
+ onEligTaskClick,
6285
6198
  coolDown,
6286
6199
  onCoolDownComplete: handleCoolDownComplete,
6287
6200
  isSubmitting,
6288
6201
  onClaim: handleClaim,
6289
6202
  chainType: requiredChainType,
6290
6203
  onBindFailed: handleBindFailed,
6291
- renderStatus: renderRewardStatus,
6204
+ renderStatusPrefix: renderRewardStatusPrefix,
6292
6205
  verifyClaim: true,
6293
6206
  isPeriodic: state.isPeriodic,
6294
6207
  nextTime: userStatus == null ? void 0 : userStatus.next_time,
@@ -6298,8 +6211,8 @@ function SwapDexDialogContent({
6298
6211
  showCloseIn,
6299
6212
  onCloseInClose,
6300
6213
  children: [
6301
- /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: isFixedRule ? renderFixedModeContent() : renderDynamicModeContent() }),
6302
6214
  validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
6215
+ /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: isFixedRule ? renderFixedModeContent() : renderDynamicModeContent() }),
6303
6216
  params.task_url && !state.isWon && /* @__PURE__ */ jsx(
6304
6217
  "button",
6305
6218
  {
@@ -6337,6 +6250,9 @@ function getDialogContentComponent$1(templateId) {
6337
6250
  function TaskDialogContent({
6338
6251
  task,
6339
6252
  taskInfo,
6253
+ eligibilityConditions,
6254
+ onEligibilityCheck,
6255
+ onEligTaskClick,
6340
6256
  onClaimSuccess,
6341
6257
  showCloseIn,
6342
6258
  onCloseInClose,
@@ -6355,6 +6271,9 @@ function TaskDialogContent({
6355
6271
  {
6356
6272
  task,
6357
6273
  taskInfo: info,
6274
+ eligibilityConditions,
6275
+ onEligibilityCheck,
6276
+ onEligTaskClick,
6358
6277
  onClaimSuccess,
6359
6278
  showCloseIn,
6360
6279
  onCloseInClose,
@@ -6406,7 +6325,7 @@ function DialogError({
6406
6325
  )
6407
6326
  ] });
6408
6327
  }
6409
- function TaskDialog(props) {
6328
+ function TaskDialogComponent(props) {
6410
6329
  var _a;
6411
6330
  const {
6412
6331
  task,
@@ -6416,6 +6335,8 @@ function TaskDialog(props) {
6416
6335
  renderContent,
6417
6336
  rightSlot,
6418
6337
  coolDownMap,
6338
+ onTaskRefresh,
6339
+ onEligTaskClick,
6419
6340
  onCoolDownUpdate,
6420
6341
  onCoolDownComplete
6421
6342
  } = props;
@@ -6446,10 +6367,29 @@ function TaskDialog(props) {
6446
6367
  },
6447
6368
  [onClose]
6448
6369
  );
6449
- const handleClaimSuccess = useCallback(() => {
6370
+ const handleClaimSuccess = useCallback(async () => {
6371
+ const targetTaskId = taskInfo == null ? void 0 : taskInfo.id;
6450
6372
  setJustVerified(true);
6451
- onClaimSuccess == null ? void 0 : onClaimSuccess();
6452
- }, [onClaimSuccess]);
6373
+ if (targetTaskId) {
6374
+ await (onClaimSuccess == null ? void 0 : onClaimSuccess(targetTaskId));
6375
+ return;
6376
+ }
6377
+ if (taskId) {
6378
+ await (onClaimSuccess == null ? void 0 : onClaimSuccess(taskId));
6379
+ }
6380
+ }, [onClaimSuccess, taskInfo == null ? void 0 : taskInfo.id, taskId]);
6381
+ const handleEligibilityCheck = useCallback(async () => {
6382
+ const targetTaskId = (taskInfo == null ? void 0 : taskInfo.id) ?? taskId;
6383
+ if (!targetTaskId) {
6384
+ return;
6385
+ }
6386
+ if (onTaskRefresh) {
6387
+ await onTaskRefresh(targetTaskId);
6388
+ }
6389
+ if (!task) {
6390
+ await refetch();
6391
+ }
6392
+ }, [taskInfo == null ? void 0 : taskInfo.id, taskId, onTaskRefresh, task, refetch]);
6453
6393
  const DialogContentComponent = useMemo(() => {
6454
6394
  var _a2;
6455
6395
  const templateId = (_a2 = taskInfo == null ? void 0 : taskInfo.template) == null ? void 0 : _a2.template_id;
@@ -6468,6 +6408,7 @@ function TaskDialog(props) {
6468
6408
  title: dialogTitle,
6469
6409
  description: "查看任务详情和奖励信息",
6470
6410
  showCloseButton: true,
6411
+ bodyPadding: false,
6471
6412
  contentClassName: "taskon-task-dialog",
6472
6413
  maxWidth: rightSlot ? 800 : 480,
6473
6414
  children: [
@@ -6482,6 +6423,9 @@ function TaskDialog(props) {
6482
6423
  onClaimSuccess: handleClaimSuccess,
6483
6424
  showCloseIn: justVerified,
6484
6425
  onCloseInClose: onClose,
6426
+ eligibilityConditions: taskData.meet_conditions,
6427
+ onEligibilityCheck: handleEligibilityCheck,
6428
+ onEligTaskClick,
6485
6429
  coolDown: (taskInfo == null ? void 0 : taskInfo.id) ? coolDownMap == null ? void 0 : coolDownMap[taskInfo.id] : void 0,
6486
6430
  onCoolDownUpdate: (taskInfo == null ? void 0 : taskInfo.id) && onCoolDownUpdate ? (coolDown) => onCoolDownUpdate(taskInfo.id, coolDown) : void 0,
6487
6431
  onCoolDownComplete: (taskInfo == null ? void 0 : taskInfo.id) && onCoolDownComplete ? () => onCoolDownComplete(taskInfo.id) : void 0
@@ -6493,6 +6437,7 @@ function TaskDialog(props) {
6493
6437
  }
6494
6438
  );
6495
6439
  }
6440
+ const TaskDialog = React__default.memo(TaskDialogComponent);
6496
6441
  function mergeCommunityTaskConfig(props, cloud) {
6497
6442
  var _a, _b, _c, _d, _e;
6498
6443
  const cloudSectorIds = ((_a = cloud == null ? void 0 : cloud.sectors) == null ? void 0 : _a.length) ? cloud.sectors.map((s) => s.sector_id) : void 0;
@@ -6501,24 +6446,56 @@ function mergeCommunityTaskConfig(props, cloud) {
6501
6446
  showSectorTab: props.showSectorTab ?? ((_b = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _b.showSectorTab) ?? true,
6502
6447
  showSectorName: props.showSectorName ?? ((_c = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _c.showSectorName) ?? true,
6503
6448
  showSectorDescription: props.showSectorDescription ?? ((_d = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _d.showSectorDescription) ?? true,
6504
- showSectorReward: props.showSectorReward ?? ((_e = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _e.showSectorReward) ?? true
6449
+ showSectorReward: props.showSectorReward ?? ((_e = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _e.showSectorReward) ?? true,
6450
+ rewardDisplayMode: props.rewardDisplayMode ?? (cloud == null ? void 0 : cloud.rewardDisplayMode) ?? "popup",
6451
+ rewardRedirectUrl: props.rewardRedirectUrl ?? (cloud == null ? void 0 : cloud.rewardRedirectUrl) ?? ""
6505
6452
  };
6506
6453
  }
6454
+ function findTaskByIdFromCards(data, taskId) {
6455
+ for (const sectorItem of data) {
6456
+ const found = sectorItem.cards.find((card) => card.card_info.id === taskId);
6457
+ if (found) {
6458
+ return found;
6459
+ }
6460
+ }
6461
+ return null;
6462
+ }
6463
+ function parsePreTaskIdFromEligibilityParams(params) {
6464
+ try {
6465
+ const parsed = JSON.parse(params);
6466
+ const taskId = Number(parsed.task_id);
6467
+ if (Number.isInteger(taskId) && taskId > 0) {
6468
+ return taskId;
6469
+ }
6470
+ } catch {
6471
+ }
6472
+ return null;
6473
+ }
6507
6474
  function CommunityTaskList(props) {
6508
- const { widgetId } = props;
6475
+ const { widgetId, themeMode } = props;
6509
6476
  const { functionConfig, cloudTheme, isConfigLoading, configError } = useResolvedWidgetConfig(widgetId);
6510
6477
  const mergedConfig = useMemo(() => {
6511
6478
  return mergeCommunityTaskConfig(
6512
6479
  props,
6513
6480
  functionConfig ?? null
6514
6481
  );
6515
- }, [props.sectorIds, props.showSectorTab, props.showSectorName, props.showSectorDescription, props.showSectorReward, functionConfig]);
6482
+ }, [
6483
+ props.sectorIds,
6484
+ props.showSectorTab,
6485
+ props.showSectorName,
6486
+ props.showSectorDescription,
6487
+ props.showSectorReward,
6488
+ props.rewardDisplayMode,
6489
+ props.rewardRedirectUrl,
6490
+ functionConfig
6491
+ ]);
6516
6492
  return /* @__PURE__ */ jsx(
6517
6493
  WidgetShell,
6518
6494
  {
6519
6495
  widgetId,
6520
6496
  isConfigLoading,
6521
6497
  cloudTheme,
6498
+ themeMode,
6522
6499
  className: "taskon-community-list",
6523
6500
  errorMessage: configError ?? void 0,
6524
6501
  children: /* @__PURE__ */ jsx(
@@ -6529,7 +6506,9 @@ function CommunityTaskList(props) {
6529
6506
  showSectorTab: mergedConfig.showSectorTab,
6530
6507
  showSectorName: mergedConfig.showSectorName,
6531
6508
  showSectorDescription: mergedConfig.showSectorDescription,
6532
- showSectorReward: mergedConfig.showSectorReward
6509
+ showSectorReward: mergedConfig.showSectorReward,
6510
+ rewardDisplayMode: mergedConfig.rewardDisplayMode,
6511
+ rewardRedirectUrl: mergedConfig.rewardRedirectUrl
6533
6512
  }
6534
6513
  )
6535
6514
  }
@@ -6542,11 +6521,16 @@ function CommunityTaskListInner(props) {
6542
6521
  initialTaskId,
6543
6522
  onTaskOpen,
6544
6523
  onTaskClose,
6524
+ initialTaskChainId,
6525
+ onTaskChainOpen,
6526
+ onTaskChainClose,
6545
6527
  sectorIds,
6546
6528
  showSectorTab = true,
6547
6529
  showSectorName = true,
6548
6530
  showSectorDescription = true,
6549
- showSectorReward = true
6531
+ showSectorReward = true,
6532
+ rewardDisplayMode = "popup",
6533
+ rewardRedirectUrl = ""
6550
6534
  } = props;
6551
6535
  const { client, userToken } = useTaskOnContext();
6552
6536
  const [taskCards, setTaskCards] = useState(
@@ -6559,7 +6543,9 @@ function CommunityTaskListInner(props) {
6559
6543
  const [openTaskId, setOpenTaskId] = useState(
6560
6544
  initialTaskId ?? null
6561
6545
  );
6562
- const [openTaskChainId, setOpenTaskChainId] = useState(null);
6546
+ const [openTaskChainId, setOpenTaskChainId] = useState(
6547
+ initialTaskChainId ?? null
6548
+ );
6563
6549
  const [coolDownMap, setCoolDownMap] = useState({});
6564
6550
  const updateCoolDown = useCallback((taskId, coolDown) => {
6565
6551
  setCoolDownMap((prev) => ({ ...prev, [taskId]: coolDown }));
@@ -6573,15 +6559,22 @@ function CommunityTaskListInner(props) {
6573
6559
  }, []);
6574
6560
  const handleTaskChainOpen = useCallback((taskChainId) => {
6575
6561
  setOpenTaskChainId(taskChainId);
6576
- }, []);
6562
+ onTaskChainOpen == null ? void 0 : onTaskChainOpen(taskChainId);
6563
+ }, [onTaskChainOpen]);
6577
6564
  const handleTaskChainClose = useCallback(() => {
6578
6565
  setOpenTaskChainId(null);
6579
- }, []);
6566
+ onTaskChainClose == null ? void 0 : onTaskChainClose();
6567
+ }, [onTaskChainClose]);
6580
6568
  useEffect(() => {
6581
6569
  if (initialTaskId && !openTask && openTaskId !== initialTaskId) {
6582
6570
  setOpenTaskId(initialTaskId);
6583
6571
  }
6584
6572
  }, [initialTaskId]);
6573
+ useEffect(() => {
6574
+ if (initialTaskChainId && openTaskChainId !== initialTaskChainId) {
6575
+ setOpenTaskChainId(initialTaskChainId);
6576
+ }
6577
+ }, [initialTaskChainId]);
6585
6578
  useEffect(() => {
6586
6579
  const loadTasks = async () => {
6587
6580
  if (!client) {
@@ -6594,7 +6587,8 @@ function CommunityTaskListInner(props) {
6594
6587
  setError(null);
6595
6588
  const api = createCommunityTaskApi(client);
6596
6589
  const data = await api.getCommunityTaskCards({
6597
- is_preview: isPreview
6590
+ is_preview: isPreview,
6591
+ ...sectorIds && sectorIds.length > 0 ? { sector_id: sectorIds } : {}
6598
6592
  });
6599
6593
  setTaskCards(data);
6600
6594
  } catch (err) {
@@ -6605,7 +6599,7 @@ function CommunityTaskListInner(props) {
6605
6599
  }
6606
6600
  };
6607
6601
  loadTasks();
6608
- }, [client, isPreview, userToken]);
6602
+ }, [client, isPreview, userToken, sectorIds]);
6609
6603
  const selectorOptions = React__default.useMemo(
6610
6604
  () => {
6611
6605
  const sectors = taskCards.map((item) => item.sector);
@@ -6652,6 +6646,35 @@ function CommunityTaskListInner(props) {
6652
6646
  },
6653
6647
  [taskCards, selectedSectorId, sectorIds]
6654
6648
  );
6649
+ const taskDependencyIndex = useMemo(() => {
6650
+ const index = /* @__PURE__ */ new Map();
6651
+ for (const sectorItem of taskCards) {
6652
+ for (const card of sectorItem.cards) {
6653
+ if (card.card_type !== "GTCTask") {
6654
+ continue;
6655
+ }
6656
+ const taskInfo = card.card_info;
6657
+ const currentTaskId = taskInfo.id;
6658
+ const eligibilityList = taskInfo.eligiblity;
6659
+ if (!(eligibilityList == null ? void 0 : eligibilityList.length)) {
6660
+ continue;
6661
+ }
6662
+ for (const eligibility of eligibilityList) {
6663
+ if (eligibility.type !== EligibilityType.CommunityPreTask) {
6664
+ continue;
6665
+ }
6666
+ const preTaskId = parsePreTaskIdFromEligibilityParams(eligibility.params);
6667
+ if (!preTaskId || preTaskId === currentTaskId) {
6668
+ continue;
6669
+ }
6670
+ const dependentSet = index.get(preTaskId) ?? /* @__PURE__ */ new Set();
6671
+ dependentSet.add(currentTaskId);
6672
+ index.set(preTaskId, dependentSet);
6673
+ }
6674
+ }
6675
+ }
6676
+ return index;
6677
+ }, [taskCards]);
6655
6678
  const handleSelectorChange = (value) => {
6656
6679
  setSelectedSectorId(value ?? null);
6657
6680
  };
@@ -6670,34 +6693,100 @@ function CommunityTaskListInner(props) {
6670
6693
  setOpenTaskId(null);
6671
6694
  onTaskClose == null ? void 0 : onTaskClose();
6672
6695
  }, [onTaskClose]);
6673
- const findTaskById = (data, taskId) => {
6674
- for (const sectorItem of data) {
6675
- const found = sectorItem.cards.find(
6676
- (card) => card.card_info.id === taskId
6677
- );
6678
- if (found) {
6679
- return found;
6680
- }
6681
- }
6682
- return null;
6683
- };
6684
- const handleClaimSuccess = useCallback(async () => {
6696
+ const refreshTaskList = useCallback(async () => {
6685
6697
  if (!client) return;
6686
6698
  try {
6687
6699
  const api = createCommunityTaskApi(client);
6688
6700
  const data = await api.getCommunityTaskCards({
6689
- is_preview: isPreview
6701
+ is_preview: isPreview,
6702
+ ...sectorIds && sectorIds.length > 0 ? { sector_id: sectorIds } : {}
6690
6703
  });
6691
6704
  setTaskCards(data);
6692
6705
  setOpenTask((currentOpenTask) => {
6693
- if (!currentOpenTask) return null;
6694
- const updatedTask = findTaskById(data, currentOpenTask.card_info.id);
6706
+ if (!currentOpenTask) {
6707
+ return null;
6708
+ }
6709
+ const updatedTask = findTaskByIdFromCards(data, currentOpenTask.card_info.id);
6695
6710
  return updatedTask ?? currentOpenTask;
6696
6711
  });
6697
6712
  } catch (err) {
6698
6713
  console.error("Failed to refresh tasks:", err);
6699
6714
  }
6715
+ }, [client, isPreview, sectorIds]);
6716
+ const refreshSingleCard = useCallback(async (cardId, cardType) => {
6717
+ if (!client) return;
6718
+ try {
6719
+ const api = createCommunityTaskApi(client);
6720
+ const latestCard = await api.getCommunityTaskCardInfo({
6721
+ card_id: cardId,
6722
+ card_type: cardType,
6723
+ is_preview: isPreview
6724
+ });
6725
+ setTaskCards((currentCards) => {
6726
+ let targetSectorIndex = -1;
6727
+ let targetCardIndex = -1;
6728
+ for (let sectorIndex = 0; sectorIndex < currentCards.length; sectorIndex += 1) {
6729
+ const sectorItem = currentCards[sectorIndex];
6730
+ if (!sectorItem) {
6731
+ continue;
6732
+ }
6733
+ const cardIndex = sectorItem.cards.findIndex(
6734
+ (card) => card.card_type === cardType && card.card_info.id === cardId
6735
+ );
6736
+ if (cardIndex !== -1) {
6737
+ targetSectorIndex = sectorIndex;
6738
+ targetCardIndex = cardIndex;
6739
+ break;
6740
+ }
6741
+ }
6742
+ if (targetSectorIndex === -1 || targetCardIndex === -1) {
6743
+ return currentCards;
6744
+ }
6745
+ const nextCards = [...currentCards];
6746
+ const targetSector = currentCards[targetSectorIndex];
6747
+ if (!targetSector) {
6748
+ return currentCards;
6749
+ }
6750
+ const nextSectorCards = [...targetSector.cards];
6751
+ nextSectorCards[targetCardIndex] = latestCard;
6752
+ nextCards[targetSectorIndex] = {
6753
+ ...targetSector,
6754
+ cards: nextSectorCards
6755
+ };
6756
+ return nextCards;
6757
+ });
6758
+ if (cardType === TaskCardType.GTCTask) {
6759
+ setOpenTask((currentOpenTask) => {
6760
+ if (!currentOpenTask || currentOpenTask.card_info.id !== cardId) {
6761
+ return currentOpenTask;
6762
+ }
6763
+ return latestCard;
6764
+ });
6765
+ }
6766
+ } catch (err) {
6767
+ console.error(`Failed to refresh card ${cardType}:${cardId}:`, err);
6768
+ }
6700
6769
  }, [client, isPreview]);
6770
+ const refreshSingleTask = useCallback(async (taskId) => {
6771
+ await refreshSingleCard(taskId, TaskCardType.GTCTask);
6772
+ }, [refreshSingleCard]);
6773
+ const refreshSingleTaskChain = useCallback(async (taskChainId) => {
6774
+ await refreshSingleCard(taskChainId, TaskCardType.TaskChain);
6775
+ }, [refreshSingleCard]);
6776
+ const handleClaimSuccess = useCallback(async (taskId) => {
6777
+ if (!client) {
6778
+ return;
6779
+ }
6780
+ if (typeof taskId !== "number") {
6781
+ await refreshTaskList();
6782
+ return;
6783
+ }
6784
+ await refreshSingleTask(taskId);
6785
+ const dependentTasks = taskDependencyIndex.get(taskId);
6786
+ if (dependentTasks && dependentTasks.size > 0) {
6787
+ await refreshTaskList();
6788
+ }
6789
+ }, [client, refreshSingleTask, refreshTaskList, taskDependencyIndex]);
6701
6790
  const { toast } = useToast();
6702
6791
  const handleClaimTask = useCallback(async (taskId, token, platform) => {
6703
6792
  if (!client) return { successful: false };
@@ -6708,7 +6797,7 @@ function CommunityTaskListInner(props) {
6708
6797
  task_value: token || ""
6709
6798
  });
6710
6799
  if (result.successful) {
6711
- handleClaimSuccess();
6800
+ await handleClaimSuccess(taskId);
6712
6801
  return { successful: true };
6713
6802
  } else if (result.cool_down) {
6714
6803
  updateCoolDown(taskId, result.cool_down);
@@ -6728,7 +6817,7 @@ function CommunityTaskListInner(props) {
6728
6817
  } catch (err) {
6729
6818
  console.error("Failed to submit task:", err);
6730
6819
  const errorCode = err instanceof ApiError ? err.code : void 0;
6731
- const errorMessage = err instanceof Error ? err.message : "Submission failed";
6820
+ const errorMessage = resolveCommunityTaskSubmitErrorMessage(err, errorCode);
6732
6821
  const errorData = err instanceof ApiError ? err.data : void 0;
6733
6822
  if (errorCode === ErrorCode.TASK_PARTIAL_PASS) {
6734
6823
  return { successful: false, errorCode };
@@ -6741,7 +6830,7 @@ function CommunityTaskListInner(props) {
6741
6830
  toast.error(errorMessage);
6742
6831
  return { successful: false, errorCode };
6743
6832
  }
6744
- }, [client, handleClaimSuccess, toast]);
6833
+ }, [client, handleClaimSuccess, toast, updateCoolDown]);
6745
6834
  const isDialogOpen = openTask !== null || openTaskId !== null;
6746
6835
  const currentSelectorValue = selectedSectorId ?? void 0;
6747
6836
  if (error) {
@@ -6775,7 +6864,8 @@ function CommunityTaskListInner(props) {
6775
6864
  onTaskChainOpen: handleTaskChainOpen,
6776
6865
  onEligTaskClick: handleEligTaskClick,
6777
6866
  coolDownMap,
6778
- onCoolDownComplete: clearCoolDown
6867
+ onCoolDownComplete: clearCoolDown,
6868
+ onDoneCountdownComplete: refreshSingleTask
6779
6869
  },
6780
6870
  sectorItem.sector.id
6781
6871
  )) }),
@@ -6786,6 +6876,8 @@ function CommunityTaskListInner(props) {
6786
6876
  taskId: openTaskId,
6787
6877
  onClose: handleDialogClose,
6788
6878
  onClaimSuccess: handleClaimSuccess,
6879
+ onTaskRefresh: refreshSingleTask,
6880
+ onEligTaskClick: handleEligTaskClick,
6789
6881
  coolDownMap,
6790
6882
  onCoolDownUpdate: updateCoolDown,
6791
6883
  onCoolDownComplete: clearCoolDown
@@ -6797,7 +6889,9 @@ function CommunityTaskListInner(props) {
6797
6889
  campaignId: openTaskChainId,
6798
6890
  open: true,
6799
6891
  onClose: handleTaskChainClose,
6800
- onUpdate: handleClaimSuccess
6892
+ onUpdate: () => refreshSingleTaskChain(openTaskChainId),
6893
+ rewardDisplayMode,
6894
+ rewardRedirectUrl
6801
6895
  }
6802
6896
  )
6803
6897
  ] });