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

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 (44) hide show
  1. package/README.md +56 -17
  2. package/dist/CommunityTaskList.css +1593 -1741
  3. package/dist/EligibilityInfo.css +1275 -582
  4. package/dist/LeaderboardWidget.css +355 -152
  5. package/dist/PageBuilder.css +0 -2
  6. package/dist/Quest.css +1140 -903
  7. package/dist/TaskOnProvider.css +50 -31
  8. package/dist/UserCenterWidget.css +108 -237
  9. package/dist/UserCenterWidget2.css +2016 -711
  10. package/dist/chunks/{CommunityTaskList-BlH1Wdd5.js → CommunityTaskList-C9Gv8KOF.js} +962 -827
  11. package/dist/chunks/{EligibilityInfo-C7GZ2G5u.js → EligibilityInfo-D-Fuy9GE.js} +1137 -449
  12. package/dist/chunks/{LeaderboardWidget-CmYfDeHV.js → LeaderboardWidget-BV2D2q1N.js} +15 -10
  13. package/dist/chunks/{PageBuilder-Bw0zSkFh.js → PageBuilder-DQoU4Mwf.js} +5 -5
  14. package/dist/chunks/{Quest-DKFZ-pPU.js → Quest-B5NyVr3o.js} +516 -325
  15. package/dist/chunks/{TaskOnProvider-BD6Vp2x8.js → TaskOnProvider-93UxARFo.js} +2 -207
  16. package/dist/chunks/{ThemeProvider-wnSXrNQb.js → ThemeProvider-CPI_roeh.js} +249 -57
  17. package/dist/chunks/{UserCenterWidget-Cw6h_5hT.js → UserCenterWidget-BRtigY_S.js} +206 -1002
  18. package/dist/chunks/UserCenterWidget-cADBSVg7.js +8358 -0
  19. package/dist/chunks/{WidgetShell-D_5OjvNZ.js → dynamic-import-helper-DwXlQC0S.js} +607 -40
  20. package/dist/chunks/useToast-CaRkylKe.js +304 -0
  21. package/dist/chunks/{usercenter-ja-uu-XfVF9.js → usercenter-ja-B2465c1O.js} +4 -10
  22. package/dist/chunks/{usercenter-ko-DYgUOVzd.js → usercenter-ko-xAEYxqLg.js} +4 -10
  23. package/dist/community-task.d.ts +34 -3
  24. package/dist/community-task.js +1 -1
  25. package/dist/core.d.ts +40 -3
  26. package/dist/core.js +9 -10
  27. package/dist/dynamic-import-helper.css +596 -289
  28. package/dist/index.d.ts +207 -10
  29. package/dist/index.js +21 -19
  30. package/dist/leaderboard.d.ts +8 -1
  31. package/dist/leaderboard.js +2 -2
  32. package/dist/page-builder.js +1 -1
  33. package/dist/quest.d.ts +8 -2
  34. package/dist/quest.js +1 -1
  35. package/dist/user-center.d.ts +20 -136
  36. package/dist/user-center.js +19 -236
  37. package/package.json +10 -2
  38. package/dist/TipPopover.css +0 -210
  39. package/dist/WidgetShell.css +0 -182
  40. package/dist/chunks/TipPopover-BrW8jo71.js +0 -2926
  41. package/dist/chunks/UserCenterWidget-BE329iS7.js +0 -3546
  42. package/dist/chunks/dynamic-import-helper-DxEFwm31.js +0 -537
  43. package/dist/chunks/useToast-B-wyO5zL.js +0 -93
  44. 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-CPI_roeh.js";
5
+ import { D as Dialog, a as useResolvedWidgetConfig, W as WidgetShell } from "./dynamic-import-helper-DwXlQC0S.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-D-Fuy9GE.js";
8
+ import { g as useBindSocialAccount, B as BindWalletDialog, l as useChainMap, s as TipPopover, k as useIsMobile, I as Input } from "./UserCenterWidget-cADBSVg7.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();
@@ -1839,9 +1452,9 @@ function useSubmitTask(taskId, onSuccess, platform, options) {
1839
1452
  return { successful: false };
1840
1453
  }
1841
1454
  } catch (err) {
1842
- const errorMsg = err instanceof Error ? err.message : "Submission failed";
1843
1455
  const errorCode = err instanceof ApiError ? err.code : void 0;
1844
1456
  const errorData = err instanceof ApiError ? err.data : void 0;
1457
+ const errorMsg = resolveCommunityTaskSubmitErrorMessage(err, errorCode);
1845
1458
  setError(errorMsg);
1846
1459
  console.error("Submit task failed:", err);
1847
1460
  if (errorCode === ErrorCode.TASK_PARTIAL_PASS) {
@@ -1899,22 +1512,11 @@ function useTaskDetail(options) {
1899
1512
  setIsLoading(true);
1900
1513
  setError(null);
1901
1514
  const api = createCommunityTaskApi(client);
1902
- const list = await api.getCommunityTaskCards({});
1903
- let found = null;
1904
- for (const sector of list) {
1905
- for (const card of sector.cards) {
1906
- if (card.card_info.id === taskId) {
1907
- found = card;
1908
- break;
1909
- }
1910
- }
1911
- if (found) break;
1912
- }
1913
- if (found) {
1914
- setData(found);
1915
- } else {
1916
- setError("Task not found");
1917
- }
1515
+ const detail = await api.getCommunityTaskCardInfo({
1516
+ card_id: taskId,
1517
+ card_type: TaskCardType.GTCTask
1518
+ });
1519
+ setData(detail);
1918
1520
  } catch (err) {
1919
1521
  setError(err instanceof Error ? err.message : "Failed to load task");
1920
1522
  setData(null);
@@ -1961,7 +1563,8 @@ function TemplateTask({
1961
1563
  onUpdate,
1962
1564
  onEligTaskClick,
1963
1565
  coolDown: sharedCoolDown,
1964
- onCoolDownComplete: sharedOnCoolDownComplete
1566
+ onCoolDownComplete: sharedOnCoolDownComplete,
1567
+ onDoneCountdownComplete
1965
1568
  }) {
1966
1569
  var _a, _b;
1967
1570
  const [localCoolDown, setLocalCoolDown] = useState(
@@ -2105,11 +1708,17 @@ function TemplateTask({
2105
1708
  nextTime: userStatus == null ? void 0 : userStatus.next_time,
2106
1709
  coolDown,
2107
1710
  onCoolDownComplete: handleCoolDownComplete,
1711
+ onDoneCountdownComplete,
2108
1712
  onClick,
2109
1713
  onClaim: handleClaim,
2110
1714
  children: [
2111
- params.desc && task.template.is_rich_text && /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }),
2112
- 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
+ ),
2113
1722
  (_a2 = params.desc_fields) == null ? void 0 : _a2.filter((field) => !field.display || field.display !== "dialog").map((field, index) => {
2114
1723
  const label = field.key === "open_post_link" ? void 0 : field.key;
2115
1724
  return /* @__PURE__ */ jsx(
@@ -2134,7 +1743,7 @@ function TemplateTask({
2134
1743
  {
2135
1744
  task,
2136
1745
  conditions: meetConditions,
2137
- onCheck: onUpdate,
1746
+ onCheck: onUpdate ? () => onUpdate(task.id) : void 0,
2138
1747
  onTaskClick: onEligTaskClick
2139
1748
  }
2140
1749
  ),
@@ -2150,7 +1759,8 @@ function PowTask({
2150
1759
  disabled = false,
2151
1760
  onClick,
2152
1761
  onUpdate,
2153
- onEligTaskClick
1762
+ onEligTaskClick,
1763
+ onDoneCountdownComplete
2154
1764
  }) {
2155
1765
  var _a;
2156
1766
  const params = useMemo(() => {
@@ -2231,10 +1841,17 @@ function PowTask({
2231
1841
  actionAutoDialog: true,
2232
1842
  noClaim: true,
2233
1843
  // PowTask 不需要 Claim 按钮
2234
- targetLink: params.task_url
1844
+ targetLink: params.task_url,
2235
1845
  // 标题跳转链接
1846
+ onDoneCountdownComplete
2236
1847
  };
2237
- 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
+ ) });
2238
1855
  if (showEligibilityMask && meetConditions) {
2239
1856
  return /* @__PURE__ */ jsxs("div", { className: "taskon-pow-task-wrap", children: [
2240
1857
  /* @__PURE__ */ jsx(
@@ -2242,7 +1859,7 @@ function PowTask({
2242
1859
  {
2243
1860
  task,
2244
1861
  conditions: meetConditions,
2245
- onCheck: onUpdate,
1862
+ onCheck: onUpdate ? () => onUpdate(task.id) : void 0,
2246
1863
  onTaskClick: onEligTaskClick
2247
1864
  }
2248
1865
  ),
@@ -2261,7 +1878,8 @@ function ContractInteractiveTask({
2261
1878
  onUpdate,
2262
1879
  onEligTaskClick,
2263
1880
  coolDown: sharedCoolDown,
2264
- onCoolDownComplete: sharedOnCoolDownComplete
1881
+ onCoolDownComplete: sharedOnCoolDownComplete,
1882
+ onDoneCountdownComplete
2265
1883
  }) {
2266
1884
  var _a, _b;
2267
1885
  const [localCoolDown, setLocalCoolDown] = useState(
@@ -2399,6 +2017,7 @@ function ContractInteractiveTask({
2399
2017
  nextTime: userStatus == null ? void 0 : userStatus.next_time,
2400
2018
  coolDown,
2401
2019
  onCoolDownComplete: handleCoolDownComplete,
2020
+ onDoneCountdownComplete,
2402
2021
  onClick,
2403
2022
  onClaim: handleClaim,
2404
2023
  disabled: disabled || showEligibilityMask
@@ -2410,7 +2029,7 @@ function ContractInteractiveTask({
2410
2029
  {
2411
2030
  task,
2412
2031
  conditions: meetConditions,
2413
- onCheck: onUpdate,
2032
+ onCheck: onUpdate ? () => onUpdate(task.id) : void 0,
2414
2033
  onTaskClick: onEligTaskClick
2415
2034
  }
2416
2035
  ),
@@ -2436,7 +2055,8 @@ function SwapDexTask({
2436
2055
  onUpdate,
2437
2056
  onEligTaskClick,
2438
2057
  coolDown: sharedCoolDown,
2439
- onCoolDownComplete: sharedOnCoolDownComplete
2058
+ onCoolDownComplete: sharedOnCoolDownComplete,
2059
+ onDoneCountdownComplete
2440
2060
  }) {
2441
2061
  var _a, _b;
2442
2062
  const [localCoolDown, setLocalCoolDown] = useState(
@@ -2458,7 +2078,7 @@ function SwapDexTask({
2458
2078
  setLocalCoolDown(0);
2459
2079
  sharedOnCoolDownComplete == null ? void 0 : sharedOnCoolDownComplete();
2460
2080
  }, [sharedOnCoolDownComplete]);
2461
- const { getChainType } = useChainMap();
2081
+ const { getChainType, chainMap } = useChainMap();
2462
2082
  const { communityInfo: contextCommunityInfo } = useTaskOnContext();
2463
2083
  const params = useMemo(() => {
2464
2084
  return parseParams$2(task.template.params);
@@ -2467,8 +2087,10 @@ function SwapDexTask({
2467
2087
  const reward = useTaskReward(task);
2468
2088
  const time = useTaskTime(task);
2469
2089
  const chainLabel = useMemo(() => {
2470
- return params.chain || "";
2471
- }, [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]);
2472
2094
  const titleExpress = useMemo(() => {
2473
2095
  return getSwapDexTitleExpress({
2474
2096
  tokenOutList: params.token_out_list,
@@ -2563,6 +2185,7 @@ function SwapDexTask({
2563
2185
  nextTime: userStatus == null ? void 0 : userStatus.next_time,
2564
2186
  coolDown,
2565
2187
  onCoolDownComplete: handleCoolDownComplete,
2188
+ onDoneCountdownComplete,
2566
2189
  disabled: disabled || showEligibilityMask,
2567
2190
  onClick,
2568
2191
  onClaim: handleClaim
@@ -2575,7 +2198,7 @@ function SwapDexTask({
2575
2198
  {
2576
2199
  task,
2577
2200
  conditions: meetConditions,
2578
- onCheck: onUpdate,
2201
+ onCheck: onUpdate ? () => onUpdate(task.id) : void 0,
2579
2202
  onTaskClick: onEligTaskClick
2580
2203
  }
2581
2204
  ),
@@ -2605,7 +2228,7 @@ function getTaskComponent(templateId) {
2605
2228
  }
2606
2229
  return TemplateTask;
2607
2230
  }
2608
- function CommunityTask({
2231
+ function CommunityTaskComponent({
2609
2232
  task,
2610
2233
  userStatus,
2611
2234
  meetConditions,
@@ -2617,7 +2240,8 @@ function CommunityTask({
2617
2240
  onUpdate,
2618
2241
  onEligTaskClick,
2619
2242
  coolDown,
2620
- onCoolDownComplete
2243
+ onCoolDownComplete,
2244
+ onDoneCountdownComplete
2621
2245
  }) {
2622
2246
  var _a;
2623
2247
  const TaskComponent = useMemo(() => {
@@ -2657,7 +2281,8 @@ function CommunityTask({
2657
2281
  onUpdate,
2658
2282
  onEligTaskClick,
2659
2283
  coolDown,
2660
- onCoolDownComplete
2284
+ onCoolDownComplete,
2285
+ onDoneCountdownComplete
2661
2286
  }
2662
2287
  ),
2663
2288
  disabled && /* @__PURE__ */ jsx("div", { className: "taskon-community-task-item-mask" })
@@ -2665,6 +2290,7 @@ function CommunityTask({
2665
2290
  }
2666
2291
  );
2667
2292
  }
2293
+ const CommunityTask = React__default.memo(CommunityTaskComponent);
2668
2294
  function isLockedByPreDayChallenge(meetConditions) {
2669
2295
  if (!meetConditions) return false;
2670
2296
  return meetConditions.some(
@@ -2795,7 +2421,7 @@ function parseNftParams(rewardParam) {
2795
2421
  return null;
2796
2422
  }
2797
2423
  }
2798
- function getMiniNftCdnUrl(url) {
2424
+ function getMiniNftCdnUrl$1(url) {
2799
2425
  if (!url) return "";
2800
2426
  const separator = url.includes("?") ? "&" : "?";
2801
2427
  return `${url}${separator}x-oss-process=image/resize,m_fill,h_160,w_160`;
@@ -2857,7 +2483,7 @@ function TaskChainCard({
2857
2483
  if (!reward) return null;
2858
2484
  const params = parseNftParams(reward.reward_param);
2859
2485
  if (!params) return null;
2860
- 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);
2861
2487
  return {
2862
2488
  icon,
2863
2489
  name: params.nft_collection_name || "NFT"
@@ -3258,7 +2884,7 @@ function TaskChainDetailTime({
3258
2884
  ] })
3259
2885
  ] }) });
3260
2886
  }
3261
- 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;
3262
2888
  function safeDiv(a, b) {
3263
2889
  const numA = typeof a === "string" ? parseFloat(a) : a;
3264
2890
  if (!b || isNaN(numA)) return 0;
@@ -3351,7 +2977,7 @@ function RewardDisplay({
3351
2977
  /* @__PURE__ */ jsx(
3352
2978
  "img",
3353
2979
  {
3354
- src: tokenParam.token_icon || DEFAULT_TOKEN_ICON$1,
2980
+ src: tokenParam.token_icon || DEFAULT_TOKEN_ICON$2,
3355
2981
  alt: tokenParam.token_name || "Token",
3356
2982
  className: "taskon-taskchain-reward-display-icon"
3357
2983
  }
@@ -3422,8 +3048,8 @@ function RewardDisplay({
3422
3048
  y2: "8.70312",
3423
3049
  gradientUnits: "userSpaceOnUse",
3424
3050
  children: [
3425
- /* @__PURE__ */ jsx("stop", { stopColor: "white", stopOpacity: "0" }),
3426
- /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "white" })
3051
+ /* @__PURE__ */ jsx("stop", { stopColor: "var(--taskon-color-border-secondary)", stopOpacity: "0" }),
3052
+ /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "var(--taskon-color-border-secondary)" })
3427
3053
  ]
3428
3054
  }
3429
3055
  ) })
@@ -3432,8 +3058,345 @@ function RewardDisplay({
3432
3058
  ) })
3433
3059
  ] }) });
3434
3060
  }
3061
+ const DEFAULT_TOKEN_ICON$1 = new URL("data:image/png;base64,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", 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
3375
+ }
3376
+ )
3377
+ ] }, `nft-${index}`);
3378
+ }) })
3379
+ ] }),
3380
+ nftClaimDialogs,
3381
+ /* @__PURE__ */ jsx(
3382
+ RewardModuleDialog,
3383
+ {
3384
+ open: isTokenRewardPopupOpen,
3385
+ onOpenChange: setIsTokenRewardPopupOpen,
3386
+ type: "token"
3387
+ }
3388
+ ),
3389
+ /* @__PURE__ */ jsx(
3390
+ RewardModuleDialog,
3391
+ {
3392
+ open: isViewMyNftPopupOpen,
3393
+ onOpenChange: setIsViewMyNftPopupOpen,
3394
+ type: "nft"
3395
+ }
3396
+ )
3397
+ ] });
3398
+ }
3435
3399
  const DEFAULT_TOKEN_ICON = new URL("data:image/png;base64,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", import.meta.url).href;
3436
- const DEFAULT_NFT_ICON = new URL("data:image/png;base64,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", import.meta.url).href;
3437
3400
  const PC_CONFIGS_4 = [
3438
3401
  { x: -40, y: -45 },
3439
3402
  // top-left
@@ -3490,12 +3453,19 @@ function getPositionConfig(index, total) {
3490
3453
  };
3491
3454
  }
3492
3455
  function triggerConfetti(container) {
3493
- 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
+ ];
3494
3464
  const particleCount = 50;
3495
3465
  for (let i = 0; i < particleCount; i++) {
3496
3466
  const particle = document.createElement("div");
3497
3467
  particle.className = "taskon-taskchain-confetti-particle";
3498
- 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)";
3499
3469
  particle.style.left = `${50 + (Math.random() - 0.5) * 60}%`;
3500
3470
  particle.style.animationDelay = `${Math.random() * 0.3}s`;
3501
3471
  particle.style.animationDuration = `${1 + Math.random() * 1}s`;
@@ -3540,74 +3510,14 @@ function getExpectedRewardDisplay(reward) {
3540
3510
  }
3541
3511
  return { icon: "", text: "", colorClass: "" };
3542
3512
  }
3543
- function getClaimedRewardDisplay(reward) {
3544
- if (reward.reward_type === RewardType.Token) {
3545
- const rewardValue = reward.reward_value;
3546
- const icon = DEFAULT_TOKEN_ICON;
3547
- const name = (rewardValue == null ? void 0 : rewardValue.token_name) || "Token";
3548
- const rawAmount = (rewardValue == null ? void 0 : rewardValue.amount) || "0";
3549
- const amount = formatLongNumber(Number(rawAmount) || 0) || rawAmount;
3550
- return {
3551
- icon,
3552
- text: `+ ${amount} ${name}`.trim(),
3553
- colorClass: "taskon-taskchain-claimed-text--token",
3554
- glowClass: "taskon-taskchain-claimed-icon--glow-token"
3555
- };
3556
- }
3557
- if (reward.reward_type === RewardType.GTCPoints || reward.reward_type === RewardType.Points) {
3558
- const rewardValue = reward.reward_value;
3559
- const icon = (rewardValue == null ? void 0 : rewardValue.points_icon) || "";
3560
- const name = (rewardValue == null ? void 0 : rewardValue.points_name) || "Points";
3561
- const amount = (rewardValue == null ? void 0 : rewardValue.amount) != null ? String(rewardValue.amount) : "0";
3562
- return {
3563
- icon,
3564
- text: `+ ${amount} ${name}`.trim(),
3565
- colorClass: "taskon-taskchain-claimed-text--points",
3566
- glowClass: "taskon-taskchain-claimed-icon--glow-points"
3567
- };
3568
- }
3569
- return { icon: "", text: "", colorClass: "", glowClass: "" };
3570
- }
3571
- function useIsMobile() {
3572
- const [isMobile, setIsMobile] = useState(false);
3573
- useEffect(() => {
3574
- const mql = window.matchMedia("(max-width: 750px)");
3575
- setIsMobile(mql.matches);
3576
- const handler = (e) => setIsMobile(e.matches);
3577
- mql.addEventListener("change", handler);
3578
- return () => mql.removeEventListener("change", handler);
3579
- }, []);
3580
- return isMobile;
3581
- }
3582
- function RightChevronIcon({ className }) {
3583
- return /* @__PURE__ */ jsx(
3584
- "svg",
3585
- {
3586
- className,
3587
- width: "8",
3588
- height: "8",
3589
- viewBox: "0 0 16 16",
3590
- fill: "none",
3591
- xmlns: "http://www.w3.org/2000/svg",
3592
- children: /* @__PURE__ */ jsx(
3593
- "path",
3594
- {
3595
- d: "M6 12L10 8L6 4",
3596
- stroke: "currentColor",
3597
- strokeWidth: "1.5",
3598
- strokeLinecap: "round",
3599
- strokeLinejoin: "round"
3600
- }
3601
- )
3602
- }
3603
- );
3604
- }
3605
3513
  function TaskChainRewardStep({
3606
3514
  campaignId,
3607
3515
  campaign,
3608
3516
  userStatus,
3609
3517
  refetchUserStatus,
3610
- onClose
3518
+ onClose,
3519
+ rewardDisplayMode = "popup",
3520
+ rewardRedirectUrl = ""
3611
3521
  }) {
3612
3522
  const { client } = useTaskOnContext();
3613
3523
  const { toast } = useToast();
@@ -3642,12 +3552,6 @@ function TaskChainRewardStep({
3642
3552
  if (!(userStatus == null ? void 0 : userStatus.winner_rewards)) return [];
3643
3553
  return userStatus.winner_rewards.flatMap((r) => r.reward);
3644
3554
  }, [userStatus == null ? void 0 : userStatus.winner_rewards]);
3645
- const nftClaimedRewards = useMemo(() => {
3646
- return userRewards.filter((r) => r.reward_type === RewardType.BMintedNft);
3647
- }, [userRewards]);
3648
- const otherClaimedRewards = useMemo(() => {
3649
- return userRewards.filter((r) => r.reward_type !== RewardType.BMintedNft);
3650
- }, [userRewards]);
3651
3555
  const expectedRewards = useMemo(() => {
3652
3556
  var _a;
3653
3557
  const rewards = ((_a = campaign == null ? void 0 : campaign.winner_rewards) == null ? void 0 : _a.flatMap(
@@ -3706,7 +3610,6 @@ function TaskChainRewardStep({
3706
3610
  };
3707
3611
  });
3708
3612
  }, [expectedRewards, isSpread, isMobile]);
3709
- const isMultiClaimed = otherClaimedRewards.length > 1;
3710
3613
  return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-step", ref: containerRef, children: /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-reward-content", children: [
3711
3614
  /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-title", children: "Congratulations!" }),
3712
3615
  /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-subtitle", children: "You have won" }),
@@ -3715,145 +3618,18 @@ function TaskChainRewardStep({
3715
3618
  {
3716
3619
  className: `taskon-taskchain-reward-claimed ${shouldAnimate ? "taskon-taskchain-reward-claimed--animate" : ""}`,
3717
3620
  children: [
3718
- /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-rewards-wrap", children: [
3719
- otherClaimedRewards.length > 0 && /* @__PURE__ */ jsx(
3720
- "div",
3721
- {
3722
- className: `taskon-taskchain-claimed-card ${isMultiClaimed ? "taskon-taskchain-claimed-card--multi" : ""}`,
3723
- children: otherClaimedRewards.map((reward, index) => {
3724
- const display = getClaimedRewardDisplay(reward);
3725
- const isToken = reward.reward_type === RewardType.Token;
3726
- if (isToken) {
3727
- const tokenRewardValue = reward.reward_value;
3728
- const rawAmount = (tokenRewardValue == null ? void 0 : tokenRewardValue.amount) || "0";
3729
- const tokenName = (tokenRewardValue == null ? void 0 : tokenRewardValue.token_name) || "Token";
3730
- const formattedAmount = formatLongNumber(Number(rawAmount) || 0) || rawAmount;
3731
- const usdValue = formatTokenAmount(Number(rawAmount) * (tokenPrice || 0), { decimals: 2 });
3732
- const tooltipContent = /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip", children: [
3733
- /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip-row", children: [
3734
- /* @__PURE__ */ jsx("span", { className: "taskon-taskchain-token-tooltip-label", children: "Reward Token" }),
3735
- /* @__PURE__ */ jsxs("span", { className: "taskon-taskchain-token-tooltip-value", children: [
3736
- formattedAmount,
3737
- " ",
3738
- tokenName
3739
- ] })
3740
- ] }),
3741
- /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip-row", children: [
3742
- /* @__PURE__ */ jsx("span", { className: "taskon-taskchain-token-tooltip-label", children: "Value" }),
3743
- /* @__PURE__ */ jsxs("span", { className: "taskon-taskchain-token-tooltip-usd", children: [
3744
- "≈$",
3745
- usdValue
3746
- ] })
3747
- ] })
3748
- ] });
3749
- return /* @__PURE__ */ jsx(TipPopover, { content: tooltipContent, side: "top", children: /* @__PURE__ */ jsxs(
3750
- "div",
3751
- {
3752
- className: `taskon-taskchain-claimed-item ${isMultiClaimed ? "taskon-taskchain-claimed-item--multi" : ""}`,
3753
- children: [
3754
- display.icon && /* @__PURE__ */ jsx(
3755
- "img",
3756
- {
3757
- src: display.icon,
3758
- alt: "",
3759
- className: `taskon-taskchain-claimed-icon ${isMultiClaimed ? "taskon-taskchain-claimed-icon--multi" : ""} ${isMultiClaimed ? display.glowClass : ""}`
3760
- }
3761
- ),
3762
- /* @__PURE__ */ jsxs(
3763
- "span",
3764
- {
3765
- className: `taskon-taskchain-claimed-text taskon-taskchain-claimed-text--token-link ${isMultiClaimed ? "taskon-taskchain-claimed-text--multi" : ""} ${display.colorClass}`,
3766
- children: [
3767
- display.text,
3768
- /* @__PURE__ */ jsx(
3769
- RightChevronIcon,
3770
- {
3771
- className: `taskon-taskchain-claimed-arrow ${isMultiClaimed ? "taskon-taskchain-claimed-arrow--multi" : ""}`
3772
- }
3773
- )
3774
- ]
3775
- }
3776
- )
3777
- ]
3778
- }
3779
- ) }, index);
3780
- }
3781
- return /* @__PURE__ */ jsxs(
3782
- "div",
3783
- {
3784
- className: `taskon-taskchain-claimed-item ${isMultiClaimed ? "taskon-taskchain-claimed-item--multi" : ""}`,
3785
- children: [
3786
- display.icon && /* @__PURE__ */ jsx(
3787
- "img",
3788
- {
3789
- src: display.icon,
3790
- alt: "",
3791
- className: `taskon-taskchain-claimed-icon ${isMultiClaimed ? "taskon-taskchain-claimed-icon--multi" : ""} ${isMultiClaimed ? display.glowClass : ""}`
3792
- }
3793
- ),
3794
- /* @__PURE__ */ jsx(
3795
- "span",
3796
- {
3797
- className: `taskon-taskchain-claimed-text ${isMultiClaimed ? "taskon-taskchain-claimed-text--multi" : ""} ${display.colorClass}`,
3798
- children: display.text
3799
- }
3800
- )
3801
- ]
3802
- },
3803
- index
3804
- );
3805
- })
3806
- }
3807
- ),
3808
- nftClaimedRewards.length > 0 && /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-list", children: nftClaimedRewards.map((reward, index) => {
3809
- const nftValue = reward.reward_value;
3810
- const nftName = (nftValue == null ? void 0 : nftValue.collection_name) || "NFT";
3811
- const nftImage = (nftValue == null ? void 0 : nftValue.media_type) === "video" ? "" : (nftValue == null ? void 0 : nftValue.collection_image) || "";
3812
- const chainIcon = (nftValue == null ? void 0 : nftValue.chain_icon) || "";
3813
- return /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-card", children: [
3814
- /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-info", children: [
3815
- /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-image-wrap", children: [
3816
- nftImage ? /* @__PURE__ */ jsx(
3817
- "img",
3818
- {
3819
- src: nftImage,
3820
- alt: "nft",
3821
- className: "taskon-taskchain-claimed-nft-image"
3822
- }
3823
- ) : /* @__PURE__ */ jsx(
3824
- "img",
3825
- {
3826
- src: DEFAULT_NFT_ICON,
3827
- alt: "nft",
3828
- className: "taskon-taskchain-claimed-nft-image taskon-taskchain-claimed-nft-image--fallback"
3829
- }
3830
- ),
3831
- chainIcon && /* @__PURE__ */ jsx(
3832
- "img",
3833
- {
3834
- src: chainIcon,
3835
- alt: "chain",
3836
- className: "taskon-taskchain-claimed-nft-chain"
3837
- }
3838
- )
3839
- ] }),
3840
- /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-text", children: [
3841
- /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-label", children: "NFT" }),
3842
- /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-name", children: nftName })
3843
- ] })
3844
- ] }),
3845
- /* @__PURE__ */ jsx(
3846
- "button",
3847
- {
3848
- type: "button",
3849
- className: "taskon-taskchain-claimed-nft-btn",
3850
- onClick: () => toast.info("Coming soon"),
3851
- children: "Claim"
3852
- }
3853
- )
3854
- ] }, `nft-${index}`);
3855
- }) })
3856
- ] }),
3621
+ /* @__PURE__ */ jsx(
3622
+ TaskChainClaimedRewards,
3623
+ {
3624
+ rewards: userRewards,
3625
+ campaignId,
3626
+ campaignType: campaign == null ? void 0 : campaign.campaign_type,
3627
+ tokenPrice,
3628
+ rewardDisplayMode,
3629
+ rewardRedirectUrl,
3630
+ onClaimedNft: refetchUserStatus
3631
+ }
3632
+ ),
3857
3633
  /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-actions", children: /* @__PURE__ */ jsx(
3858
3634
  "button",
3859
3635
  {
@@ -3964,7 +3740,9 @@ function TaskChainBlindBoxStep({
3964
3740
  campaign,
3965
3741
  userStatus,
3966
3742
  refetchUserStatus,
3967
- onClose
3743
+ onClose,
3744
+ rewardDisplayMode = "popup",
3745
+ rewardRedirectUrl = ""
3968
3746
  }) {
3969
3747
  const { client } = useTaskOnContext();
3970
3748
  const { toast } = useToast();
@@ -4064,16 +3842,35 @@ function TaskChainBlindBoxStep({
4064
3842
  }
4065
3843
  }, [campaign, api]);
4066
3844
  if (userBlindBoxStatus === "claimed") {
4067
- return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-step", children: /* @__PURE__ */ jsx(
4068
- BlindBoxRewardDialog,
4069
- {
4070
- rewards: userRewards,
4071
- emptyReward,
4072
- tokenPrice,
4073
- loading: false,
4074
- onClose
4075
- }
4076
- ) });
3845
+ const title = isOpenedButNotWon ? "Oops! Better Luck Next Time!" : "Congratulations!";
3846
+ const subtitle = isOpenedButNotWon ? "Rewards Missed" : "You Have Won";
3847
+ const displayRewards = emptyReward ? [emptyReward, ...userRewards] : userRewards;
3848
+ return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-step", children: /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-blindbox-result", children: [
3849
+ /* @__PURE__ */ jsx("h2", { className: "taskon-taskchain-blindbox-result-title", children: title }),
3850
+ /* @__PURE__ */ jsx("p", { className: "taskon-taskchain-blindbox-result-subtitle", children: subtitle }),
3851
+ displayRewards.length > 0 && /* @__PURE__ */ jsx(
3852
+ TaskChainClaimedRewards,
3853
+ {
3854
+ className: "taskon-taskchain-blindbox-result-rewards",
3855
+ rewards: displayRewards,
3856
+ campaignId,
3857
+ campaignType: (campaign == null ? void 0 : campaign.campaign_type) ?? CampaignType.Campaign,
3858
+ tokenPrice,
3859
+ rewardDisplayMode,
3860
+ rewardRedirectUrl,
3861
+ onClaimedNft: refetchUserStatus
3862
+ }
3863
+ ),
3864
+ /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-result-actions", children: /* @__PURE__ */ jsx(
3865
+ "button",
3866
+ {
3867
+ type: "button",
3868
+ className: "taskon-taskchain-btn taskon-taskchain-btn--secondary",
3869
+ onClick: onClose,
3870
+ children: "Back"
3871
+ }
3872
+ ) })
3873
+ ] }) });
4077
3874
  }
4078
3875
  if (userBlindBoxStatus === "wait-claim") {
4079
3876
  return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-step", children: /* @__PURE__ */ jsx(
@@ -4119,7 +3916,9 @@ function TaskChainMain({
4119
3916
  hasBlindBox,
4120
3917
  onTaskComplete,
4121
3918
  onClose,
4122
- refetchUserStatus
3919
+ refetchUserStatus,
3920
+ rewardDisplayMode,
3921
+ rewardRedirectUrl
4123
3922
  }) {
4124
3923
  const handleVerifyAttempted = useCallback(
4125
3924
  async (_taskId, success) => {
@@ -4139,7 +3938,9 @@ function TaskChainMain({
4139
3938
  campaign,
4140
3939
  userStatus,
4141
3940
  refetchUserStatus,
4142
- onClose
3941
+ onClose,
3942
+ rewardDisplayMode,
3943
+ rewardRedirectUrl
4143
3944
  }
4144
3945
  );
4145
3946
  }
@@ -4150,7 +3951,9 @@ function TaskChainMain({
4150
3951
  campaign,
4151
3952
  userStatus,
4152
3953
  refetchUserStatus,
4153
- onClose
3954
+ onClose,
3955
+ rewardDisplayMode,
3956
+ rewardRedirectUrl
4154
3957
  }
4155
3958
  );
4156
3959
  }
@@ -4280,7 +4083,7 @@ function NeedLoginMask({
4280
4083
  style: {
4281
4084
  fontSize: "18px",
4282
4085
  fontWeight: 600,
4283
- color: "var(--taskon-text-primary, #fff)",
4086
+ color: "var(--taskon-color-text)",
4284
4087
  marginBottom: "8px"
4285
4088
  },
4286
4089
  children: "Login Required"
@@ -4291,7 +4094,7 @@ function NeedLoginMask({
4291
4094
  {
4292
4095
  style: {
4293
4096
  fontSize: "14px",
4294
- color: "var(--taskon-text-secondary, #999)",
4097
+ color: "var(--taskon-color-text-secondary)",
4295
4098
  marginBottom: "24px",
4296
4099
  maxWidth: "300px",
4297
4100
  lineHeight: 1.5
@@ -4308,8 +4111,8 @@ function NeedLoginMask({
4308
4111
  padding: "12px 32px",
4309
4112
  fontSize: "14px",
4310
4113
  fontWeight: 600,
4311
- color: "#000",
4312
- backgroundColor: "#cbff01",
4114
+ color: "var(--taskon-color-text-on-primary)",
4115
+ backgroundColor: "var(--taskon-color-primary)",
4313
4116
  border: "none",
4314
4117
  borderRadius: "8px",
4315
4118
  cursor: "pointer",
@@ -4340,7 +4143,9 @@ function TaskChainDetail({
4340
4143
  onStepChange,
4341
4144
  onTaskComplete,
4342
4145
  onClose,
4343
- refetchUserStatus
4146
+ refetchUserStatus,
4147
+ rewardDisplayMode,
4148
+ rewardRedirectUrl
4344
4149
  }) {
4345
4150
  var _a, _b;
4346
4151
  const { isLoggedIn, requestLogin, client } = useTaskOnContext();
@@ -4459,7 +4264,9 @@ function TaskChainDetail({
4459
4264
  hasBlindBox,
4460
4265
  onTaskComplete,
4461
4266
  onClose,
4462
- refetchUserStatus
4267
+ refetchUserStatus,
4268
+ rewardDisplayMode,
4269
+ rewardRedirectUrl
4463
4270
  }
4464
4271
  );
4465
4272
  };
@@ -4560,6 +4367,7 @@ function BottomDialog({
4560
4367
  top = "16vh",
4561
4368
  showCloseButton = true
4562
4369
  }) {
4370
+ const portalContainer = useTaskOnPortalContainer();
4563
4371
  const [mounted, setMounted] = useState(false);
4564
4372
  const [isExiting, setIsExiting] = useState(false);
4565
4373
  const exitTimerRef = useRef(null);
@@ -4629,14 +4437,19 @@ function BottomDialog({
4629
4437
  }
4630
4438
  )
4631
4439
  ] });
4632
- return createPortal(dialog, document.body);
4440
+ if (!portalContainer) {
4441
+ return null;
4442
+ }
4443
+ return createPortal(dialog, portalContainer);
4633
4444
  }
4634
4445
  function TaskChainDialog({
4635
4446
  campaignId,
4636
4447
  open,
4637
4448
  onClose,
4638
4449
  onUpdate,
4639
- defaultStepIndex
4450
+ defaultStepIndex,
4451
+ rewardDisplayMode,
4452
+ rewardRedirectUrl
4640
4453
  }) {
4641
4454
  var _a, _b;
4642
4455
  const {
@@ -4718,12 +4531,14 @@ function TaskChainDialog({
4718
4531
  onStepChange: handleStepChange,
4719
4532
  onTaskComplete: handleTaskComplete,
4720
4533
  onClose,
4721
- refetchUserStatus
4534
+ refetchUserStatus,
4535
+ rewardDisplayMode,
4536
+ rewardRedirectUrl
4722
4537
  }
4723
4538
  )
4724
4539
  ] }) });
4725
4540
  }
4726
- function SectorItem({
4541
+ function SectorItemComponent({
4727
4542
  sector,
4728
4543
  showSectorName = true,
4729
4544
  showSectorDescription = true,
@@ -4735,7 +4550,8 @@ function SectorItem({
4735
4550
  onTaskChainOpen,
4736
4551
  onEligTaskClick,
4737
4552
  coolDownMap,
4738
- onCoolDownComplete
4553
+ onCoolDownComplete,
4554
+ onDoneCountdownComplete
4739
4555
  }) {
4740
4556
  const hasPeriodicTask = useMemo(() => {
4741
4557
  return sector.cards.some((card) => {
@@ -4808,10 +4624,11 @@ function SectorItem({
4808
4624
  var _a;
4809
4625
  return onClaimTask(taskInfo.id, token, (_a = taskInfo.template) == null ? void 0 : _a.platform);
4810
4626
  } : void 0,
4811
- onUpdate,
4627
+ onUpdate: onUpdate ? () => onUpdate(taskInfo.id) : void 0,
4812
4628
  onEligTaskClick,
4813
4629
  coolDown: coolDownMap == null ? void 0 : coolDownMap[taskInfo.id],
4814
- onCoolDownComplete: onCoolDownComplete ? () => onCoolDownComplete(taskInfo.id) : void 0
4630
+ onCoolDownComplete: onCoolDownComplete ? () => onCoolDownComplete(taskInfo.id) : void 0,
4631
+ onDoneCountdownComplete
4815
4632
  }
4816
4633
  ) }, key);
4817
4634
  }
@@ -4844,7 +4661,8 @@ function SectorItem({
4844
4661
  task: taskInfo,
4845
4662
  userStatus: card.user_status,
4846
4663
  onClick: () => onTaskClick == null ? void 0 : onTaskClick(card),
4847
- onEligTaskClick
4664
+ onEligTaskClick,
4665
+ onDoneCountdownComplete
4848
4666
  }
4849
4667
  ) }, key);
4850
4668
  }
@@ -4853,6 +4671,58 @@ function SectorItem({
4853
4671
  ] })
4854
4672
  ] });
4855
4673
  }
4674
+ const SectorItem = React__default.memo(SectorItemComponent);
4675
+ function renderTaskCards(count) {
4676
+ return Array.from({ length: count }, (_, index) => /* @__PURE__ */ jsx(
4677
+ "div",
4678
+ {
4679
+ className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-task"
4680
+ },
4681
+ `task-${index}`
4682
+ ));
4683
+ }
4684
+ function CommunityTaskListSkeleton({
4685
+ showSectorTab = true,
4686
+ showSectorName = true,
4687
+ showSectorDescription = true,
4688
+ showSectorReward = true
4689
+ }) {
4690
+ return /* @__PURE__ */ jsxs(
4691
+ "div",
4692
+ {
4693
+ className: "taskon-community-list-skeleton",
4694
+ "aria-busy": "true",
4695
+ "aria-label": "Loading tasks",
4696
+ children: [
4697
+ showSectorTab && /* @__PURE__ */ jsxs("div", { className: "taskon-community-list-skeleton-selector", children: [
4698
+ /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-chip taskon-community-list-skeleton-chip--wide" }),
4699
+ /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-chip" }),
4700
+ /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-chip" })
4701
+ ] }),
4702
+ /* @__PURE__ */ jsxs("div", { className: "taskon-community-list-skeleton-content", children: [
4703
+ /* @__PURE__ */ jsxs("div", { className: "taskon-community-list-skeleton-sector", children: [
4704
+ showSectorName && /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-title" }),
4705
+ showSectorDescription && /* @__PURE__ */ jsxs("div", { className: "taskon-community-list-skeleton-lines", children: [
4706
+ /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-line" }),
4707
+ /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-line taskon-community-list-skeleton-line--short" })
4708
+ ] }),
4709
+ showSectorReward && /* @__PURE__ */ jsxs("div", { className: "taskon-community-list-skeleton-points", children: [
4710
+ /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-pill" }),
4711
+ /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-pill taskon-community-list-skeleton-pill--short" })
4712
+ ] }),
4713
+ /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-tasks", children: renderTaskCards(4) })
4714
+ ] }),
4715
+ /* @__PURE__ */ jsxs("div", { className: "taskon-community-list-skeleton-sector", children: [
4716
+ showSectorName && /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-title taskon-community-list-skeleton-title--second" }),
4717
+ showSectorDescription && /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-lines", children: /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-line" }) }),
4718
+ showSectorReward && /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-points", children: /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-pill taskon-community-list-skeleton-pill--short" }) }),
4719
+ /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-tasks", children: renderTaskCards(3) })
4720
+ ] })
4721
+ ] })
4722
+ ]
4723
+ }
4724
+ );
4725
+ }
4856
4726
  const RECURRENCE_LABEL_MAP = {
4857
4727
  Once: "Once",
4858
4728
  Daily: "Daily",
@@ -5069,9 +4939,19 @@ function formatDateTime(timestamp) {
5069
4939
  }
5070
4940
  function formatCountdown(diff) {
5071
4941
  if (diff <= 0) return "00:00:00";
5072
- const hours = Math.floor(diff / (1e3 * 60 * 60));
5073
- const minutes = Math.floor(diff % (1e3 * 60 * 60) / (1e3 * 60));
5074
- const seconds = Math.floor(diff % (1e3 * 60) / 1e3);
4942
+ if (diff / (1e3 * 60 * 60) > 24) {
4943
+ const day2 = 24 * 60 * 60 * 1e3;
4944
+ const days = Math.ceil(diff / day2);
4945
+ return `${days} day${days > 1 ? "s" : ""}`;
4946
+ }
4947
+ const day = 24 * 60 * 60 * 1e3;
4948
+ const hour = 60 * 60 * 1e3;
4949
+ const minute = 60 * 1e3;
4950
+ const second = 1e3;
4951
+ const normalizedDiff = Math.abs(diff);
4952
+ const hours = Math.floor(normalizedDiff % day / hour);
4953
+ const minutes = Math.floor(normalizedDiff % hour / minute);
4954
+ const seconds = Math.floor(normalizedDiff % minute / second);
5075
4955
  const prefix2 = (n) => String(n).padStart(2, "0");
5076
4956
  return `${prefix2(hours)}:${prefix2(minutes)}:${prefix2(seconds)}`;
5077
4957
  }
@@ -5088,6 +4968,7 @@ function DialogRewardCard({
5088
4968
  chainType,
5089
4969
  onBindFailed,
5090
4970
  renderStatus,
4971
+ renderStatusPrefix,
5091
4972
  hideClaimButton = false,
5092
4973
  verifyClaim,
5093
4974
  isPeriodic = false,
@@ -5122,7 +5003,7 @@ function DialogRewardCard({
5122
5003
  const renderPeriodicCountdown = useCallback(() => {
5123
5004
  if (!showPeriodicCountdown) return null;
5124
5005
  return /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-periodic-done", children: [
5125
- /* @__PURE__ */ jsx("span", { children: "Done Today" }),
5006
+ /* @__PURE__ */ jsx("span", { children: "Done for today" }),
5126
5007
  /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-periodic-done__line" }),
5127
5008
  /* @__PURE__ */ jsx("span", { children: "Continue in" }),
5128
5009
  /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-periodic-done__time", children: countdownLabel })
@@ -5203,6 +5084,8 @@ function DialogRewardCard({
5203
5084
  }
5204
5085
  ) });
5205
5086
  };
5087
+ const statusPrefixNode = renderStatusPrefix == null ? void 0 : renderStatusPrefix();
5088
+ const statusNode = showPeriodicCountdown ? renderPeriodicCountdown() : renderStatus ? renderStatus() : renderDefaultStatus();
5206
5089
  return /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-reward-card", children: [
5207
5090
  claimLimit > 0 && /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-max-claim", children: [
5208
5091
  "Max. Claims",
@@ -5211,7 +5094,10 @@ function DialogRewardCard({
5211
5094
  ] }),
5212
5095
  /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-label-row", children: [
5213
5096
  /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-rewards-label", children: "🎁 Rewards" }),
5214
- showPeriodicCountdown ? renderPeriodicCountdown() : renderStatus ? renderStatus() : renderDefaultStatus()
5097
+ (statusPrefixNode || statusNode) && /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-label-right", children: [
5098
+ statusPrefixNode,
5099
+ statusNode
5100
+ ] })
5215
5101
  ] }),
5216
5102
  renderRewardContent(),
5217
5103
  renderClaimArea(),
@@ -5264,6 +5150,10 @@ function BaseDialogLayout({
5264
5150
  claimLimit,
5265
5151
  reward,
5266
5152
  isWon,
5153
+ eligibilityTask,
5154
+ eligibilityConditions,
5155
+ onEligibilityCheck,
5156
+ onEligTaskClick,
5267
5157
  coolDown,
5268
5158
  onCoolDownComplete,
5269
5159
  isSubmitting,
@@ -5272,6 +5162,7 @@ function BaseDialogLayout({
5272
5162
  chainType,
5273
5163
  onBindFailed,
5274
5164
  renderStatus,
5165
+ renderStatusPrefix,
5275
5166
  hideClaimButton,
5276
5167
  verifyClaim,
5277
5168
  hideRewardCard = false,
@@ -5283,7 +5174,12 @@ function BaseDialogLayout({
5283
5174
  showCloseIn = false,
5284
5175
  onCloseInClose
5285
5176
  }) {
5177
+ var _a;
5286
5178
  const recurrenceLabel = getRecurrenceLabel(recurrence);
5179
+ const shouldShowEligibilityMask = Boolean(
5180
+ ((_a = eligibilityTask == null ? void 0 : eligibilityTask.eligiblity) == null ? void 0 : _a.length) && (eligibilityConditions == null ? void 0 : eligibilityConditions.length)
5181
+ );
5182
+ const leftPanelClassName = shouldShowEligibilityMask ? "taskon-task-dialog-left taskon-task-dialog-left--mask-active" : "taskon-task-dialog-left";
5287
5183
  const renderValidTime = () => {
5288
5184
  if (!(validTime == null ? void 0 : validTime.endTime)) return null;
5289
5185
  if (validTime.isExpired) {
@@ -5297,7 +5193,16 @@ function BaseDialogLayout({
5297
5193
  /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-valid-time-value", children: validTime.endTime })
5298
5194
  ] });
5299
5195
  };
5300
- return /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-left", children: [
5196
+ return /* @__PURE__ */ jsxs("div", { className: leftPanelClassName, children: [
5197
+ shouldShowEligibilityMask && eligibilityTask && eligibilityConditions && /* @__PURE__ */ jsx(
5198
+ UserEligibilityMask,
5199
+ {
5200
+ task: eligibilityTask,
5201
+ conditions: eligibilityConditions,
5202
+ onCheck: onEligibilityCheck,
5203
+ onTaskClick: onEligTaskClick
5204
+ }
5205
+ ),
5301
5206
  /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-main", children: [
5302
5207
  !noRecurrence && /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-recurrence", children: recurrenceLabel }),
5303
5208
  titleLink ? /* @__PURE__ */ jsx(
@@ -5328,6 +5233,7 @@ function BaseDialogLayout({
5328
5233
  chainType,
5329
5234
  onBindFailed,
5330
5235
  renderStatus,
5236
+ renderStatusPrefix,
5331
5237
  hideClaimButton,
5332
5238
  verifyClaim,
5333
5239
  isPeriodic,
@@ -5350,6 +5256,9 @@ function parseTemplateParams(params) {
5350
5256
  function TemplateDialogContent({
5351
5257
  task,
5352
5258
  taskInfo,
5259
+ eligibilityConditions,
5260
+ onEligibilityCheck,
5261
+ onEligTaskClick,
5353
5262
  onClaimSuccess,
5354
5263
  showCloseIn,
5355
5264
  onCloseInClose,
@@ -5481,6 +5390,10 @@ function TemplateDialogContent({
5481
5390
  claimLimit: info.claim_limit,
5482
5391
  reward,
5483
5392
  isWon: state.isWon,
5393
+ eligibilityTask: info,
5394
+ eligibilityConditions,
5395
+ onEligibilityCheck,
5396
+ onEligTaskClick,
5484
5397
  coolDown,
5485
5398
  onCoolDownComplete: handleCoolDownComplete,
5486
5399
  isSubmitting,
@@ -5498,9 +5411,9 @@ function TemplateDialogContent({
5498
5411
  showCloseIn,
5499
5412
  onCloseInClose,
5500
5413
  children: [
5414
+ validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
5501
5415
  /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-desc", children: [
5502
- params.desc && info.template.is_rich_text && /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }),
5503
- params.desc && !info.template.is_rich_text && /* @__PURE__ */ jsx(CardField, { label: params.desc }),
5416
+ params.desc && /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }),
5504
5417
  (_d = params.desc_fields) == null ? void 0 : _d.filter((field) => !field.display || field.display !== "card").map((field, index) => {
5505
5418
  const label = field.key === "open_post_link" ? void 0 : field.key;
5506
5419
  return /* @__PURE__ */ jsx(
@@ -5515,7 +5428,6 @@ function TemplateDialogContent({
5515
5428
  );
5516
5429
  })
5517
5430
  ] }),
5518
- validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
5519
5431
  params.action_label && !state.isWon && /* @__PURE__ */ jsxs(
5520
5432
  "button",
5521
5433
  {
@@ -5747,6 +5659,9 @@ function parsePowParams(params) {
5747
5659
  function PowTaskDialogContent({
5748
5660
  task,
5749
5661
  taskInfo,
5662
+ eligibilityConditions,
5663
+ onEligibilityCheck,
5664
+ onEligTaskClick,
5750
5665
  onClaimSuccess,
5751
5666
  showCloseIn,
5752
5667
  onCloseInClose
@@ -5768,6 +5683,7 @@ function PowTaskDialogContent({
5768
5683
  }, [(_b = info == null ? void 0 : info.template) == null ? void 0 : _b.params]);
5769
5684
  const state = useTaskState(info, userStatus);
5770
5685
  const reward = useTaskReward(info);
5686
+ const validTime = useTaskTime(info);
5771
5687
  const { submitTask, isSubmitting } = useSubmitTask(
5772
5688
  (info == null ? void 0 : info.id) ?? 0,
5773
5689
  onClaimSuccess,
@@ -5923,9 +5839,14 @@ function PowTaskDialogContent({
5923
5839
  recurrence: info.recurrence,
5924
5840
  title: info.name,
5925
5841
  titleLink: params.task_url,
5842
+ validTime,
5926
5843
  claimLimit: info.claim_limit,
5927
5844
  reward,
5928
5845
  isWon: state.isWon,
5846
+ eligibilityTask: info,
5847
+ eligibilityConditions,
5848
+ onEligibilityCheck,
5849
+ onEligTaskClick,
5929
5850
  coolDown: 0,
5930
5851
  renderStatus: renderReviewStatus,
5931
5852
  hideClaimButton: true,
@@ -5937,7 +5858,7 @@ function PowTaskDialogContent({
5937
5858
  showCloseIn,
5938
5859
  onCloseInClose,
5939
5860
  children: [
5940
- params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) }),
5861
+ params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) }),
5941
5862
  renderInputArea(),
5942
5863
  renderActionButton()
5943
5864
  ]
@@ -5954,6 +5875,9 @@ function parseParams$1(params) {
5954
5875
  function ContractInteractiveDialogContent({
5955
5876
  task,
5956
5877
  taskInfo,
5878
+ eligibilityConditions,
5879
+ onEligibilityCheck,
5880
+ onEligTaskClick,
5957
5881
  onClaimSuccess,
5958
5882
  showCloseIn,
5959
5883
  onCloseInClose,
@@ -5979,6 +5903,7 @@ function ContractInteractiveDialogContent({
5979
5903
  }, [(_b = info == null ? void 0 : info.template) == null ? void 0 : _b.params]);
5980
5904
  const state = useTaskState(info, userStatus);
5981
5905
  const reward = useTaskReward(info);
5906
+ const validTime = useTaskTime(info);
5982
5907
  const { submitTask, isSubmitting } = useSubmitTask(
5983
5908
  (info == null ? void 0 : info.id) ?? 0,
5984
5909
  onClaimSuccess,
@@ -6044,9 +5969,14 @@ function ContractInteractiveDialogContent({
6044
5969
  {
6045
5970
  recurrence: info.recurrence,
6046
5971
  title: info.name,
5972
+ validTime,
6047
5973
  claimLimit: info.claim_limit,
6048
5974
  reward,
6049
5975
  isWon: state.isWon,
5976
+ eligibilityTask: info,
5977
+ eligibilityConditions,
5978
+ onEligibilityCheck,
5979
+ onEligTaskClick,
6050
5980
  coolDown,
6051
5981
  onCoolDownComplete: handleCoolDownComplete,
6052
5982
  isSubmitting,
@@ -6062,8 +5992,8 @@ function ContractInteractiveDialogContent({
6062
5992
  showCloseIn,
6063
5993
  onCloseInClose,
6064
5994
  children: [
6065
- params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) }),
6066
5995
  validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
5996
+ params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) }),
6067
5997
  params.task_url && !state.isWon && /* @__PURE__ */ jsx(
6068
5998
  "button",
6069
5999
  {
@@ -6085,18 +6015,12 @@ function parseParams(params) {
6085
6015
  return {};
6086
6016
  }
6087
6017
  }
6088
- function generateRulesText(params, pointName) {
6089
- const { each_trading_volume, each_receive_points, swap_receive_max_points } = params;
6090
- if (!each_trading_volume || !each_receive_points) return "";
6091
- let text = `Swap $${each_trading_volume} USD to earn ${each_receive_points} ${pointName}`;
6092
- if (typeof swap_receive_max_points === "number" && swap_receive_max_points >= 0) {
6093
- text += `. Maximum ${swap_receive_max_points} ${pointName} per task.`;
6094
- }
6095
- return text;
6096
- }
6097
6018
  function SwapDexDialogContent({
6098
6019
  task,
6099
6020
  taskInfo,
6021
+ eligibilityConditions,
6022
+ onEligibilityCheck,
6023
+ onEligTaskClick,
6100
6024
  onClaimSuccess,
6101
6025
  showCloseIn,
6102
6026
  onCloseInClose,
@@ -6107,7 +6031,7 @@ function SwapDexDialogContent({
6107
6031
  var _a, _b, _c;
6108
6032
  const userStatus = task.user_status;
6109
6033
  const { showToast } = useToast();
6110
- const { getChainType } = useChainMap();
6034
+ const { getChainType, chainMap } = useChainMap();
6111
6035
  const { communityInfo } = useTaskOnContext();
6112
6036
  const totalEarned = ((_a = userStatus == null ? void 0 : userStatus.total_point) == null ? void 0 : _a.amount) ?? 0;
6113
6037
  const rawInfo = taskInfo ?? task.card_info;
@@ -6122,6 +6046,7 @@ function SwapDexDialogContent({
6122
6046
  }, [(_b = info == null ? void 0 : info.template) == null ? void 0 : _b.params]);
6123
6047
  const state = useTaskState(info, userStatus);
6124
6048
  const reward = useTaskReward(info);
6049
+ const validTime = useTaskTime(info);
6125
6050
  const { submitTask, isSubmitting } = useSubmitTask(
6126
6051
  (info == null ? void 0 : info.id) ?? 0,
6127
6052
  onClaimSuccess,
@@ -6133,18 +6058,33 @@ function SwapDexDialogContent({
6133
6058
  );
6134
6059
  const coolDown = sharedCoolDown ?? localCoolDown;
6135
6060
  const isFixedRule = params.is_fixed_reward_type;
6061
+ const rulePointName = reward.name || "Points";
6062
+ const ruleMaxText = useMemo(() => {
6063
+ if (typeof params.swap_receive_max_points === "number" && params.swap_receive_max_points >= 0) {
6064
+ return `(Max ${params.swap_receive_max_points} ${rulePointName})`;
6065
+ }
6066
+ return "";
6067
+ }, [params.swap_receive_max_points, rulePointName]);
6068
+ const hasRulesText = useMemo(() => {
6069
+ return Boolean(params.each_trading_volume && params.each_receive_points);
6070
+ }, [params.each_trading_volume, params.each_receive_points]);
6071
+ const chainLabel = useMemo(() => {
6072
+ var _a2;
6073
+ if (!params.chain) return "";
6074
+ return ((_a2 = chainMap[params.chain.toLowerCase()]) == null ? void 0 : _a2.label) || params.chain;
6075
+ }, [chainMap, params.chain]);
6136
6076
  const titleExpress = useMemo(() => {
6137
6077
  return getSwapDexTitleExpress({
6138
6078
  tokenOutList: params.token_out_list,
6139
6079
  tokenInList: params.token_in_list,
6140
- chainLabel: params.chain || "",
6080
+ chainLabel,
6141
6081
  dexName: (info == null ? void 0 : info.project_name) || (communityInfo == null ? void 0 : communityInfo.name) || "DEX",
6142
6082
  dexLink: params.task_url,
6143
6083
  isFixedReward: params.is_fixed_reward_type || false,
6144
6084
  minTradingVolume: params.min_trading_volume,
6145
6085
  minTradesTimes: params.min_trades_times
6146
6086
  });
6147
- }, [params, info == null ? void 0 : info.project_name, communityInfo == null ? void 0 : communityInfo.name]);
6087
+ }, [params, chainLabel, info == null ? void 0 : info.project_name, communityInfo == null ? void 0 : communityInfo.name]);
6148
6088
  const fromTokenDisplay = useMemo(
6149
6089
  () => formatSwapTokensForDisplay(params.token_out_list),
6150
6090
  [params.token_out_list]
@@ -6153,10 +6093,6 @@ function SwapDexDialogContent({
6153
6093
  () => formatSwapTokensForDisplay(params.token_in_list),
6154
6094
  [params.token_in_list]
6155
6095
  );
6156
- const rulesText = useMemo(() => {
6157
- if (isFixedRule) return "";
6158
- return generateRulesText(params, reward.name || "points");
6159
- }, [isFixedRule, params, reward.name]);
6160
6096
  const validationTimeFrame = useMemo(() => {
6161
6097
  if (!(info == null ? void 0 : info.template)) return void 0;
6162
6098
  const { class_type, is_hold } = info.template;
@@ -6210,12 +6146,9 @@ function SwapDexDialogContent({
6210
6146
  window.open(params.task_url, "_blank");
6211
6147
  }
6212
6148
  }, [params.task_url]);
6213
- const renderRewardStatus = useCallback(() => {
6214
- if (state.isWon) {
6215
- return /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-won", children: "Won" });
6216
- }
6149
+ const renderRewardStatusPrefix = useCallback(() => {
6217
6150
  if (isDynamicTimes) {
6218
- const currentTimes = (userStatus == null ? void 0 : userStatus.current_trades_times) ?? "--";
6151
+ const currentTimes = (userStatus == null ? void 0 : userStatus.current_trades_times) && userStatus.current_trades_times > 0 ? userStatus.current_trades_times : "--";
6219
6152
  const minTimes = params.min_trades_times ?? 0;
6220
6153
  return /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-progress", children: [
6221
6154
  /* @__PURE__ */ jsx("span", { className: "taskon-swap-dialog-progress-current", children: currentTimes }),
@@ -6227,14 +6160,9 @@ function SwapDexDialogContent({
6227
6160
  ] });
6228
6161
  }
6229
6162
  return null;
6230
- }, [
6231
- state.isWon,
6232
- isDynamicTimes,
6233
- userStatus == null ? void 0 : userStatus.current_trades_times,
6234
- params.min_trades_times
6235
- ]);
6163
+ }, [isDynamicTimes, userStatus == null ? void 0 : userStatus.current_trades_times, params.min_trades_times]);
6236
6164
  const renderFixedModeContent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
6237
- params.chain && /* @__PURE__ */ jsx(CardField, { label: "Chain: ", value: params.chain }),
6165
+ params.chain && /* @__PURE__ */ jsx(CardField, { label: "Chain: ", value: chainLabel }),
6238
6166
  params.token_out_list && params.token_out_list.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
6239
6167
  /* @__PURE__ */ jsx(CardField, { label: "Swap From: ", value: fromTokenDisplay }),
6240
6168
  params.token_out_list.filter(
@@ -6265,17 +6193,30 @@ function SwapDexDialogContent({
6265
6193
  ] }),
6266
6194
  params.desc && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
6267
6195
  /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-title", children: "Instructions" }),
6268
- /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) })
6196
+ /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) })
6269
6197
  ] })
6270
6198
  ] });
6271
6199
  const renderDynamicModeContent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
6272
- rulesText && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
6200
+ hasRulesText && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
6273
6201
  /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-title", children: "Rules" }),
6274
- /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: rulesText })
6202
+ /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section-content taskon-swap-dialog-section-content--rules", children: [
6203
+ /* @__PURE__ */ jsx("span", { children: "Every" }),
6204
+ /* @__PURE__ */ jsxs("span", { className: "taskon-swap-dialog-rules-highlight", children: [
6205
+ "$",
6206
+ params.each_trading_volume || "0",
6207
+ " USD"
6208
+ ] }),
6209
+ /* @__PURE__ */ jsx("span", { children: "will give you" }),
6210
+ /* @__PURE__ */ jsx("span", { className: "taskon-swap-dialog-rules-highlight", children: params.each_receive_points }),
6211
+ /* @__PURE__ */ jsxs("span", { className: "taskon-swap-dialog-rules-point-name", children: [
6212
+ rulePointName,
6213
+ ruleMaxText && /* @__PURE__ */ jsx("span", { className: "taskon-swap-dialog-rules-max", children: ruleMaxText })
6214
+ ] })
6215
+ ] })
6275
6216
  ] }),
6276
6217
  params.desc && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
6277
6218
  /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-title", children: "Instructions" }),
6278
- /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) })
6219
+ /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) })
6279
6220
  ] })
6280
6221
  ] });
6281
6222
  if (!info) {
@@ -6286,16 +6227,21 @@ function SwapDexDialogContent({
6286
6227
  {
6287
6228
  recurrence: info.recurrence,
6288
6229
  title: /* @__PURE__ */ jsx(TitleExpress, { express: titleExpress }),
6230
+ validTime,
6289
6231
  claimLimit: info.claim_limit,
6290
6232
  reward,
6291
6233
  isWon: state.isWon,
6234
+ eligibilityTask: info,
6235
+ eligibilityConditions,
6236
+ onEligibilityCheck,
6237
+ onEligTaskClick,
6292
6238
  coolDown,
6293
6239
  onCoolDownComplete: handleCoolDownComplete,
6294
6240
  isSubmitting,
6295
6241
  onClaim: handleClaim,
6296
6242
  chainType: requiredChainType,
6297
6243
  onBindFailed: handleBindFailed,
6298
- renderStatus: renderRewardStatus,
6244
+ renderStatusPrefix: renderRewardStatusPrefix,
6299
6245
  verifyClaim: true,
6300
6246
  isPeriodic: state.isPeriodic,
6301
6247
  nextTime: userStatus == null ? void 0 : userStatus.next_time,
@@ -6305,8 +6251,8 @@ function SwapDexDialogContent({
6305
6251
  showCloseIn,
6306
6252
  onCloseInClose,
6307
6253
  children: [
6308
- /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: isFixedRule ? renderFixedModeContent() : renderDynamicModeContent() }),
6309
6254
  validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
6255
+ /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: isFixedRule ? renderFixedModeContent() : renderDynamicModeContent() }),
6310
6256
  params.task_url && !state.isWon && /* @__PURE__ */ jsx(
6311
6257
  "button",
6312
6258
  {
@@ -6344,6 +6290,9 @@ function getDialogContentComponent$1(templateId) {
6344
6290
  function TaskDialogContent({
6345
6291
  task,
6346
6292
  taskInfo,
6293
+ eligibilityConditions,
6294
+ onEligibilityCheck,
6295
+ onEligTaskClick,
6347
6296
  onClaimSuccess,
6348
6297
  showCloseIn,
6349
6298
  onCloseInClose,
@@ -6362,6 +6311,9 @@ function TaskDialogContent({
6362
6311
  {
6363
6312
  task,
6364
6313
  taskInfo: info,
6314
+ eligibilityConditions,
6315
+ onEligibilityCheck,
6316
+ onEligTaskClick,
6365
6317
  onClaimSuccess,
6366
6318
  showCloseIn,
6367
6319
  onCloseInClose,
@@ -6413,7 +6365,7 @@ function DialogError({
6413
6365
  )
6414
6366
  ] });
6415
6367
  }
6416
- function TaskDialog(props) {
6368
+ function TaskDialogComponent(props) {
6417
6369
  var _a;
6418
6370
  const {
6419
6371
  task,
@@ -6423,6 +6375,8 @@ function TaskDialog(props) {
6423
6375
  renderContent,
6424
6376
  rightSlot,
6425
6377
  coolDownMap,
6378
+ onTaskRefresh,
6379
+ onEligTaskClick,
6426
6380
  onCoolDownUpdate,
6427
6381
  onCoolDownComplete
6428
6382
  } = props;
@@ -6453,10 +6407,29 @@ function TaskDialog(props) {
6453
6407
  },
6454
6408
  [onClose]
6455
6409
  );
6456
- const handleClaimSuccess = useCallback(() => {
6410
+ const handleClaimSuccess = useCallback(async () => {
6411
+ const targetTaskId = taskInfo == null ? void 0 : taskInfo.id;
6457
6412
  setJustVerified(true);
6458
- onClaimSuccess == null ? void 0 : onClaimSuccess();
6459
- }, [onClaimSuccess]);
6413
+ if (targetTaskId) {
6414
+ await (onClaimSuccess == null ? void 0 : onClaimSuccess(targetTaskId));
6415
+ return;
6416
+ }
6417
+ if (taskId) {
6418
+ await (onClaimSuccess == null ? void 0 : onClaimSuccess(taskId));
6419
+ }
6420
+ }, [onClaimSuccess, taskInfo == null ? void 0 : taskInfo.id, taskId]);
6421
+ const handleEligibilityCheck = useCallback(async () => {
6422
+ const targetTaskId = (taskInfo == null ? void 0 : taskInfo.id) ?? taskId;
6423
+ if (!targetTaskId) {
6424
+ return;
6425
+ }
6426
+ if (onTaskRefresh) {
6427
+ await onTaskRefresh(targetTaskId);
6428
+ }
6429
+ if (!task) {
6430
+ await refetch();
6431
+ }
6432
+ }, [taskInfo == null ? void 0 : taskInfo.id, taskId, onTaskRefresh, task, refetch]);
6460
6433
  const DialogContentComponent = useMemo(() => {
6461
6434
  var _a2;
6462
6435
  const templateId = (_a2 = taskInfo == null ? void 0 : taskInfo.template) == null ? void 0 : _a2.template_id;
@@ -6475,6 +6448,7 @@ function TaskDialog(props) {
6475
6448
  title: dialogTitle,
6476
6449
  description: "查看任务详情和奖励信息",
6477
6450
  showCloseButton: true,
6451
+ bodyPadding: false,
6478
6452
  contentClassName: "taskon-task-dialog",
6479
6453
  maxWidth: rightSlot ? 800 : 480,
6480
6454
  children: [
@@ -6489,6 +6463,9 @@ function TaskDialog(props) {
6489
6463
  onClaimSuccess: handleClaimSuccess,
6490
6464
  showCloseIn: justVerified,
6491
6465
  onCloseInClose: onClose,
6466
+ eligibilityConditions: taskData.meet_conditions,
6467
+ onEligibilityCheck: handleEligibilityCheck,
6468
+ onEligTaskClick,
6492
6469
  coolDown: (taskInfo == null ? void 0 : taskInfo.id) ? coolDownMap == null ? void 0 : coolDownMap[taskInfo.id] : void 0,
6493
6470
  onCoolDownUpdate: (taskInfo == null ? void 0 : taskInfo.id) && onCoolDownUpdate ? (coolDown) => onCoolDownUpdate(taskInfo.id, coolDown) : void 0,
6494
6471
  onCoolDownComplete: (taskInfo == null ? void 0 : taskInfo.id) && onCoolDownComplete ? () => onCoolDownComplete(taskInfo.id) : void 0
@@ -6500,6 +6477,7 @@ function TaskDialog(props) {
6500
6477
  }
6501
6478
  );
6502
6479
  }
6480
+ const TaskDialog = React__default.memo(TaskDialogComponent);
6503
6481
  function mergeCommunityTaskConfig(props, cloud) {
6504
6482
  var _a, _b, _c, _d, _e;
6505
6483
  const cloudSectorIds = ((_a = cloud == null ? void 0 : cloud.sectors) == null ? void 0 : _a.length) ? cloud.sectors.map((s) => s.sector_id) : void 0;
@@ -6508,24 +6486,56 @@ function mergeCommunityTaskConfig(props, cloud) {
6508
6486
  showSectorTab: props.showSectorTab ?? ((_b = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _b.showSectorTab) ?? true,
6509
6487
  showSectorName: props.showSectorName ?? ((_c = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _c.showSectorName) ?? true,
6510
6488
  showSectorDescription: props.showSectorDescription ?? ((_d = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _d.showSectorDescription) ?? true,
6511
- showSectorReward: props.showSectorReward ?? ((_e = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _e.showSectorReward) ?? true
6489
+ showSectorReward: props.showSectorReward ?? ((_e = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _e.showSectorReward) ?? true,
6490
+ rewardDisplayMode: props.rewardDisplayMode ?? (cloud == null ? void 0 : cloud.rewardDisplayMode) ?? "popup",
6491
+ rewardRedirectUrl: props.rewardRedirectUrl ?? (cloud == null ? void 0 : cloud.rewardRedirectUrl) ?? ""
6512
6492
  };
6513
6493
  }
6494
+ function findTaskByIdFromCards(data, taskId) {
6495
+ for (const sectorItem of data) {
6496
+ const found = sectorItem.cards.find((card) => card.card_info.id === taskId);
6497
+ if (found) {
6498
+ return found;
6499
+ }
6500
+ }
6501
+ return null;
6502
+ }
6503
+ function parsePreTaskIdFromEligibilityParams(params) {
6504
+ try {
6505
+ const parsed = JSON.parse(params);
6506
+ const taskId = Number(parsed.task_id);
6507
+ if (Number.isInteger(taskId) && taskId > 0) {
6508
+ return taskId;
6509
+ }
6510
+ } catch {
6511
+ }
6512
+ return null;
6513
+ }
6514
6514
  function CommunityTaskList(props) {
6515
- const { widgetId } = props;
6515
+ const { widgetId, themeMode } = props;
6516
6516
  const { functionConfig, cloudTheme, isConfigLoading, configError } = useResolvedWidgetConfig(widgetId);
6517
6517
  const mergedConfig = useMemo(() => {
6518
6518
  return mergeCommunityTaskConfig(
6519
6519
  props,
6520
6520
  functionConfig ?? null
6521
6521
  );
6522
- }, [props.sectorIds, props.showSectorTab, props.showSectorName, props.showSectorDescription, props.showSectorReward, functionConfig]);
6522
+ }, [
6523
+ props.sectorIds,
6524
+ props.showSectorTab,
6525
+ props.showSectorName,
6526
+ props.showSectorDescription,
6527
+ props.showSectorReward,
6528
+ props.rewardDisplayMode,
6529
+ props.rewardRedirectUrl,
6530
+ functionConfig
6531
+ ]);
6523
6532
  return /* @__PURE__ */ jsx(
6524
6533
  WidgetShell,
6525
6534
  {
6526
6535
  widgetId,
6527
6536
  isConfigLoading,
6528
6537
  cloudTheme,
6538
+ themeMode,
6529
6539
  className: "taskon-community-list",
6530
6540
  errorMessage: configError ?? void 0,
6531
6541
  children: /* @__PURE__ */ jsx(
@@ -6536,7 +6546,9 @@ function CommunityTaskList(props) {
6536
6546
  showSectorTab: mergedConfig.showSectorTab,
6537
6547
  showSectorName: mergedConfig.showSectorName,
6538
6548
  showSectorDescription: mergedConfig.showSectorDescription,
6539
- showSectorReward: mergedConfig.showSectorReward
6549
+ showSectorReward: mergedConfig.showSectorReward,
6550
+ rewardDisplayMode: mergedConfig.rewardDisplayMode,
6551
+ rewardRedirectUrl: mergedConfig.rewardRedirectUrl
6540
6552
  }
6541
6553
  )
6542
6554
  }
@@ -6549,11 +6561,16 @@ function CommunityTaskListInner(props) {
6549
6561
  initialTaskId,
6550
6562
  onTaskOpen,
6551
6563
  onTaskClose,
6564
+ initialTaskChainId,
6565
+ onTaskChainOpen,
6566
+ onTaskChainClose,
6552
6567
  sectorIds,
6553
6568
  showSectorTab = true,
6554
6569
  showSectorName = true,
6555
6570
  showSectorDescription = true,
6556
- showSectorReward = true
6571
+ showSectorReward = true,
6572
+ rewardDisplayMode = "popup",
6573
+ rewardRedirectUrl = ""
6557
6574
  } = props;
6558
6575
  const { client, userToken } = useTaskOnContext();
6559
6576
  const [taskCards, setTaskCards] = useState(
@@ -6566,7 +6583,9 @@ function CommunityTaskListInner(props) {
6566
6583
  const [openTaskId, setOpenTaskId] = useState(
6567
6584
  initialTaskId ?? null
6568
6585
  );
6569
- const [openTaskChainId, setOpenTaskChainId] = useState(null);
6586
+ const [openTaskChainId, setOpenTaskChainId] = useState(
6587
+ initialTaskChainId ?? null
6588
+ );
6570
6589
  const [coolDownMap, setCoolDownMap] = useState({});
6571
6590
  const updateCoolDown = useCallback((taskId, coolDown) => {
6572
6591
  setCoolDownMap((prev) => ({ ...prev, [taskId]: coolDown }));
@@ -6580,15 +6599,22 @@ function CommunityTaskListInner(props) {
6580
6599
  }, []);
6581
6600
  const handleTaskChainOpen = useCallback((taskChainId) => {
6582
6601
  setOpenTaskChainId(taskChainId);
6583
- }, []);
6602
+ onTaskChainOpen == null ? void 0 : onTaskChainOpen(taskChainId);
6603
+ }, [onTaskChainOpen]);
6584
6604
  const handleTaskChainClose = useCallback(() => {
6585
6605
  setOpenTaskChainId(null);
6586
- }, []);
6606
+ onTaskChainClose == null ? void 0 : onTaskChainClose();
6607
+ }, [onTaskChainClose]);
6587
6608
  useEffect(() => {
6588
6609
  if (initialTaskId && !openTask && openTaskId !== initialTaskId) {
6589
6610
  setOpenTaskId(initialTaskId);
6590
6611
  }
6591
6612
  }, [initialTaskId]);
6613
+ useEffect(() => {
6614
+ if (initialTaskChainId && openTaskChainId !== initialTaskChainId) {
6615
+ setOpenTaskChainId(initialTaskChainId);
6616
+ }
6617
+ }, [initialTaskChainId]);
6592
6618
  useEffect(() => {
6593
6619
  const loadTasks = async () => {
6594
6620
  if (!client) {
@@ -6601,7 +6627,8 @@ function CommunityTaskListInner(props) {
6601
6627
  setError(null);
6602
6628
  const api = createCommunityTaskApi(client);
6603
6629
  const data = await api.getCommunityTaskCards({
6604
- is_preview: isPreview
6630
+ is_preview: isPreview,
6631
+ ...sectorIds && sectorIds.length > 0 ? { sector_id: sectorIds } : {}
6605
6632
  });
6606
6633
  setTaskCards(data);
6607
6634
  } catch (err) {
@@ -6612,7 +6639,7 @@ function CommunityTaskListInner(props) {
6612
6639
  }
6613
6640
  };
6614
6641
  loadTasks();
6615
- }, [client, isPreview, userToken]);
6642
+ }, [client, isPreview, userToken, sectorIds]);
6616
6643
  const selectorOptions = React__default.useMemo(
6617
6644
  () => {
6618
6645
  const sectors = taskCards.map((item) => item.sector);
@@ -6659,6 +6686,35 @@ function CommunityTaskListInner(props) {
6659
6686
  },
6660
6687
  [taskCards, selectedSectorId, sectorIds]
6661
6688
  );
6689
+ const taskDependencyIndex = useMemo(() => {
6690
+ const index = /* @__PURE__ */ new Map();
6691
+ for (const sectorItem of taskCards) {
6692
+ for (const card of sectorItem.cards) {
6693
+ if (card.card_type !== "GTCTask") {
6694
+ continue;
6695
+ }
6696
+ const taskInfo = card.card_info;
6697
+ const currentTaskId = taskInfo.id;
6698
+ const eligibilityList = taskInfo.eligiblity;
6699
+ if (!(eligibilityList == null ? void 0 : eligibilityList.length)) {
6700
+ continue;
6701
+ }
6702
+ for (const eligibility of eligibilityList) {
6703
+ if (eligibility.type !== EligibilityType.CommunityPreTask) {
6704
+ continue;
6705
+ }
6706
+ const preTaskId = parsePreTaskIdFromEligibilityParams(eligibility.params);
6707
+ if (!preTaskId || preTaskId === currentTaskId) {
6708
+ continue;
6709
+ }
6710
+ const dependentSet = index.get(preTaskId) ?? /* @__PURE__ */ new Set();
6711
+ dependentSet.add(currentTaskId);
6712
+ index.set(preTaskId, dependentSet);
6713
+ }
6714
+ }
6715
+ }
6716
+ return index;
6717
+ }, [taskCards]);
6662
6718
  const handleSelectorChange = (value) => {
6663
6719
  setSelectedSectorId(value ?? null);
6664
6720
  };
@@ -6677,34 +6733,100 @@ function CommunityTaskListInner(props) {
6677
6733
  setOpenTaskId(null);
6678
6734
  onTaskClose == null ? void 0 : onTaskClose();
6679
6735
  }, [onTaskClose]);
6680
- const findTaskById = (data, taskId) => {
6681
- for (const sectorItem of data) {
6682
- const found = sectorItem.cards.find(
6683
- (card) => card.card_info.id === taskId
6684
- );
6685
- if (found) {
6686
- return found;
6687
- }
6688
- }
6689
- return null;
6690
- };
6691
- const handleClaimSuccess = useCallback(async () => {
6736
+ const refreshTaskList = useCallback(async () => {
6692
6737
  if (!client) return;
6693
6738
  try {
6694
6739
  const api = createCommunityTaskApi(client);
6695
6740
  const data = await api.getCommunityTaskCards({
6696
- is_preview: isPreview
6741
+ is_preview: isPreview,
6742
+ ...sectorIds && sectorIds.length > 0 ? { sector_id: sectorIds } : {}
6697
6743
  });
6698
6744
  setTaskCards(data);
6699
6745
  setOpenTask((currentOpenTask) => {
6700
- if (!currentOpenTask) return null;
6701
- const updatedTask = findTaskById(data, currentOpenTask.card_info.id);
6746
+ if (!currentOpenTask) {
6747
+ return null;
6748
+ }
6749
+ const updatedTask = findTaskByIdFromCards(data, currentOpenTask.card_info.id);
6702
6750
  return updatedTask ?? currentOpenTask;
6703
6751
  });
6704
6752
  } catch (err) {
6705
6753
  console.error("Failed to refresh tasks:", err);
6706
6754
  }
6755
+ }, [client, isPreview, sectorIds]);
6756
+ const refreshSingleCard = useCallback(async (cardId, cardType) => {
6757
+ if (!client) return;
6758
+ try {
6759
+ const api = createCommunityTaskApi(client);
6760
+ const latestCard = await api.getCommunityTaskCardInfo({
6761
+ card_id: cardId,
6762
+ card_type: cardType,
6763
+ is_preview: isPreview
6764
+ });
6765
+ setTaskCards((currentCards) => {
6766
+ let targetSectorIndex = -1;
6767
+ let targetCardIndex = -1;
6768
+ for (let sectorIndex = 0; sectorIndex < currentCards.length; sectorIndex += 1) {
6769
+ const sectorItem = currentCards[sectorIndex];
6770
+ if (!sectorItem) {
6771
+ continue;
6772
+ }
6773
+ const cardIndex = sectorItem.cards.findIndex(
6774
+ (card) => card.card_type === cardType && card.card_info.id === cardId
6775
+ );
6776
+ if (cardIndex !== -1) {
6777
+ targetSectorIndex = sectorIndex;
6778
+ targetCardIndex = cardIndex;
6779
+ break;
6780
+ }
6781
+ }
6782
+ if (targetSectorIndex === -1 || targetCardIndex === -1) {
6783
+ return currentCards;
6784
+ }
6785
+ const nextCards = [...currentCards];
6786
+ const targetSector = currentCards[targetSectorIndex];
6787
+ if (!targetSector) {
6788
+ return currentCards;
6789
+ }
6790
+ const nextSectorCards = [...targetSector.cards];
6791
+ nextSectorCards[targetCardIndex] = latestCard;
6792
+ nextCards[targetSectorIndex] = {
6793
+ ...targetSector,
6794
+ cards: nextSectorCards
6795
+ };
6796
+ return nextCards;
6797
+ });
6798
+ if (cardType === TaskCardType.GTCTask) {
6799
+ setOpenTask((currentOpenTask) => {
6800
+ if (!currentOpenTask || currentOpenTask.card_info.id !== cardId) {
6801
+ return currentOpenTask;
6802
+ }
6803
+ return latestCard;
6804
+ });
6805
+ }
6806
+ } catch (err) {
6807
+ console.error(`Failed to refresh card ${cardType}:${cardId}:`, err);
6808
+ }
6707
6809
  }, [client, isPreview]);
6810
+ const refreshSingleTask = useCallback(async (taskId) => {
6811
+ await refreshSingleCard(taskId, TaskCardType.GTCTask);
6812
+ }, [refreshSingleCard]);
6813
+ const refreshSingleTaskChain = useCallback(async (taskChainId) => {
6814
+ await refreshSingleCard(taskChainId, TaskCardType.TaskChain);
6815
+ }, [refreshSingleCard]);
6816
+ const handleClaimSuccess = useCallback(async (taskId) => {
6817
+ if (!client) {
6818
+ return;
6819
+ }
6820
+ if (typeof taskId !== "number") {
6821
+ await refreshTaskList();
6822
+ return;
6823
+ }
6824
+ await refreshSingleTask(taskId);
6825
+ const dependentTasks = taskDependencyIndex.get(taskId);
6826
+ if (dependentTasks && dependentTasks.size > 0) {
6827
+ await refreshTaskList();
6828
+ }
6829
+ }, [client, refreshSingleTask, refreshTaskList, taskDependencyIndex]);
6708
6830
  const { toast } = useToast();
6709
6831
  const handleClaimTask = useCallback(async (taskId, token, platform) => {
6710
6832
  if (!client) return { successful: false };
@@ -6715,7 +6837,7 @@ function CommunityTaskListInner(props) {
6715
6837
  task_value: token || ""
6716
6838
  });
6717
6839
  if (result.successful) {
6718
- handleClaimSuccess();
6840
+ await handleClaimSuccess(taskId);
6719
6841
  return { successful: true };
6720
6842
  } else if (result.cool_down) {
6721
6843
  updateCoolDown(taskId, result.cool_down);
@@ -6735,7 +6857,7 @@ function CommunityTaskListInner(props) {
6735
6857
  } catch (err) {
6736
6858
  console.error("Failed to submit task:", err);
6737
6859
  const errorCode = err instanceof ApiError ? err.code : void 0;
6738
- const errorMessage = err instanceof Error ? err.message : "Submission failed";
6860
+ const errorMessage = resolveCommunityTaskSubmitErrorMessage(err, errorCode);
6739
6861
  const errorData = err instanceof ApiError ? err.data : void 0;
6740
6862
  if (errorCode === ErrorCode.TASK_PARTIAL_PASS) {
6741
6863
  return { successful: false, errorCode };
@@ -6748,7 +6870,7 @@ function CommunityTaskListInner(props) {
6748
6870
  toast.error(errorMessage);
6749
6871
  return { successful: false, errorCode };
6750
6872
  }
6751
- }, [client, handleClaimSuccess, toast]);
6873
+ }, [client, handleClaimSuccess, toast, updateCoolDown]);
6752
6874
  const isDialogOpen = openTask !== null || openTaskId !== null;
6753
6875
  const currentSelectorValue = selectedSectorId ?? void 0;
6754
6876
  if (error) {
@@ -6758,7 +6880,7 @@ function CommunityTaskListInner(props) {
6758
6880
  ] }) });
6759
6881
  }
6760
6882
  return /* @__PURE__ */ jsxs("div", { className: "taskon-community-list", children: [
6761
- showSectorTab && /* @__PURE__ */ jsx(
6883
+ showSectorTab && !isLoading && /* @__PURE__ */ jsx(
6762
6884
  CardSelector,
6763
6885
  {
6764
6886
  options: selectorOptions,
@@ -6768,7 +6890,15 @@ function CommunityTaskListInner(props) {
6768
6890
  className: "taskon-community-list-selector"
6769
6891
  }
6770
6892
  ),
6771
- /* @__PURE__ */ jsx("div", { className: "taskon-community-list-content", children: isLoading ? /* @__PURE__ */ jsx("div", { className: "taskon-community-list-loading", children: "Loading tasks..." }) : filteredTaskCards.length === 0 ? /* @__PURE__ */ jsx("div", { className: "taskon-community-list-empty", children: "No tasks available" }) : filteredTaskCards.map((sectorItem) => /* @__PURE__ */ jsx(
6893
+ /* @__PURE__ */ jsx("div", { className: "taskon-community-list-content", children: isLoading ? /* @__PURE__ */ jsx(
6894
+ CommunityTaskListSkeleton,
6895
+ {
6896
+ showSectorTab,
6897
+ showSectorName,
6898
+ showSectorDescription,
6899
+ showSectorReward
6900
+ }
6901
+ ) : filteredTaskCards.length === 0 ? /* @__PURE__ */ jsx("div", { className: "taskon-community-list-empty", children: "No tasks available" }) : filteredTaskCards.map((sectorItem) => /* @__PURE__ */ jsx(
6772
6902
  SectorItem,
6773
6903
  {
6774
6904
  sector: sectorItem,
@@ -6782,7 +6912,8 @@ function CommunityTaskListInner(props) {
6782
6912
  onTaskChainOpen: handleTaskChainOpen,
6783
6913
  onEligTaskClick: handleEligTaskClick,
6784
6914
  coolDownMap,
6785
- onCoolDownComplete: clearCoolDown
6915
+ onCoolDownComplete: clearCoolDown,
6916
+ onDoneCountdownComplete: refreshSingleTask
6786
6917
  },
6787
6918
  sectorItem.sector.id
6788
6919
  )) }),
@@ -6793,6 +6924,8 @@ function CommunityTaskListInner(props) {
6793
6924
  taskId: openTaskId,
6794
6925
  onClose: handleDialogClose,
6795
6926
  onClaimSuccess: handleClaimSuccess,
6927
+ onTaskRefresh: refreshSingleTask,
6928
+ onEligTaskClick: handleEligTaskClick,
6796
6929
  coolDownMap,
6797
6930
  onCoolDownUpdate: updateCoolDown,
6798
6931
  onCoolDownComplete: clearCoolDown
@@ -6804,7 +6937,9 @@ function CommunityTaskListInner(props) {
6804
6937
  campaignId: openTaskChainId,
6805
6938
  open: true,
6806
6939
  onClose: handleTaskChainClose,
6807
- onUpdate: handleClaimSuccess
6940
+ onUpdate: () => refreshSingleTaskChain(openTaskChainId),
6941
+ rewardDisplayMode,
6942
+ rewardRedirectUrl
6808
6943
  }
6809
6944
  )
6810
6945
  ] });