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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +55 -16
  2. package/dist/CommunityTaskList.css +432 -628
  3. package/dist/EligibilityInfo.css +944 -431
  4. package/dist/PageBuilder.css +0 -2
  5. package/dist/Quest.css +460 -505
  6. package/dist/TaskOnProvider.css +15 -15
  7. package/dist/UserCenterWidget.css +0 -174
  8. package/dist/UserCenterWidget2.css +870 -102
  9. package/dist/chunks/{CommunityTaskList-BlH1Wdd5.js → CommunityTaskList-C9mPl_31.js} +913 -826
  10. package/dist/chunks/{EligibilityInfo-C7GZ2G5u.js → EligibilityInfo-DGBffKN8.js} +1137 -449
  11. package/dist/chunks/{LeaderboardWidget-CmYfDeHV.js → LeaderboardWidget-DPOQVXkT.js} +15 -10
  12. package/dist/chunks/{PageBuilder-Bw0zSkFh.js → PageBuilder-WCZvxL2j.js} +5 -5
  13. package/dist/chunks/{Quest-DKFZ-pPU.js → Quest-DjGH_8bx.js} +464 -314
  14. package/dist/chunks/{TaskOnProvider-BD6Vp2x8.js → TaskOnProvider-iannERG1.js} +2 -207
  15. package/dist/chunks/{ThemeProvider-wnSXrNQb.js → ThemeProvider-DNJqI2lD.js} +246 -54
  16. package/dist/chunks/UserCenterWidget-B0O-f_xl.js +8344 -0
  17. package/dist/chunks/{UserCenterWidget-Cw6h_5hT.js → UserCenterWidget-CAhgp46j.js} +204 -1001
  18. package/dist/chunks/{WidgetShell-D_5OjvNZ.js → dynamic-import-helper-B2j_dZ4V.js} +607 -40
  19. package/dist/chunks/useToast-CaRkylKe.js +304 -0
  20. package/dist/chunks/{usercenter-ja-uu-XfVF9.js → usercenter-ja-B2465c1O.js} +4 -10
  21. package/dist/chunks/{usercenter-ko-DYgUOVzd.js → usercenter-ko-xAEYxqLg.js} +4 -10
  22. package/dist/community-task.d.ts +34 -3
  23. package/dist/community-task.js +1 -1
  24. package/dist/core.d.ts +40 -3
  25. package/dist/core.js +9 -10
  26. package/dist/dynamic-import-helper.css +186 -0
  27. package/dist/index.d.ts +207 -10
  28. package/dist/index.js +21 -19
  29. package/dist/leaderboard.d.ts +8 -1
  30. package/dist/leaderboard.js +2 -2
  31. package/dist/page-builder.js +1 -1
  32. package/dist/quest.d.ts +8 -2
  33. package/dist/quest.js +1 -1
  34. package/dist/user-center.d.ts +20 -136
  35. package/dist/user-center.js +19 -236
  36. package/package.json +7 -2
  37. package/dist/TipPopover.css +0 -210
  38. package/dist/WidgetShell.css +0 -182
  39. package/dist/chunks/TipPopover-BrW8jo71.js +0 -2926
  40. package/dist/chunks/UserCenterWidget-BE329iS7.js +0 -3546
  41. package/dist/chunks/dynamic-import-helper-DxEFwm31.js +0 -537
  42. package/dist/chunks/useToast-B-wyO5zL.js +0 -93
  43. package/dist/chunks/useWidgetLocale-JDelxtt8.js +0 -74
@@ -1,11 +1,11 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
- import React__default, { useContext, useState, useRef, useMemo, useCallback, useEffect } from "react";
3
- import { isUnauthorizedError, TaskReviewResult, formatLongNumber, EligibilityType, Operator, MeetConditionStatus, RewardType, formatUtcTime, SnsType, createCommunityTaskApi, ApiError, ErrorCode, ChainType, getSwapDexTitleExpress, UserEligibleStatus, CampaignStatus, MediaType, createQuestApi, formatTokenAmount, TaskTemplateId, EligibilityTemplateId, TaskCardType, RecurrenceType, createCommonApi, normalizeTask, formatSwapTokensForDisplay, formatAddress } from "@taskon/core";
4
- import { d as TaskOnContext, b as useTaskOnContext } from "./ThemeProvider-wnSXrNQb.js";
5
- import { D as Dialog, u as useResolvedWidgetConfig, W as WidgetShell } from "./WidgetShell-D_5OjvNZ.js";
6
- import { b as useToast } from "./useToast-B-wyO5zL.js";
7
- import { u as useIsMobile$1, s as sanitizeHtml, a as useBindWallet, T as TitleExpress, B as BlindBoxRewardDialog, b as BlindBoxDialog, c as TaskItem, E as EligibilityInfo, d as Textarea } from "./EligibilityInfo-C7GZ2G5u.js";
8
- import { a as useBindSocialAccount, u as useChainMap, T as TipPopover, I as Input } from "./TipPopover-BrW8jo71.js";
2
+ import React__default, { useState, useRef, useCallback, useEffect, useContext, useMemo } from "react";
3
+ import { isUnauthorizedError, TaskReviewResult, formatLongNumber, EligibilityType, Operator, MeetConditionStatus, RewardType, formatUtcTime, ErrorCode, SnsType, createCommunityTaskApi, ApiError, TaskCardType, ChainType, getSwapDexTitleExpress, UserEligibleStatus, CampaignStatus, MediaType, createQuestApi, CampaignType, formatTokenAmount, TaskTemplateId, EligibilityTemplateId, RecurrenceType, createCommonApi, normalizeTask, formatSwapTokensForDisplay, formatAddress } from "@taskon/core";
4
+ import { p as TaskOnContext, d as useTaskOnContext, s as useTaskOnPortalContainer } from "./ThemeProvider-DNJqI2lD.js";
5
+ import { D as Dialog, a as useResolvedWidgetConfig, W as WidgetShell } from "./dynamic-import-helper-B2j_dZ4V.js";
6
+ import { d as useToast } from "./useToast-CaRkylKe.js";
7
+ import { u as useBindWallet, T as TitleExpress, a as CardDescExpress, b as useNftClaimFlow, R as RewardModuleDialog, B as BlindBoxDialog, c as TaskItem, E as EligibilityInfo, d as Textarea } from "./EligibilityInfo-DGBffKN8.js";
8
+ import { g as useBindSocialAccount, B as BindWalletDialog, l as useChainMap, s as TipPopover, I as Input } from "./UserCenterWidget-B0O-f_xl.js";
9
9
  import { createPortal } from "react-dom";
10
10
  import '../CommunityTaskList.css';function CardSelector({
11
11
  options,
@@ -39,300 +39,6 @@ import '../CommunityTaskList.css';function CardSelector({
39
39
  );
40
40
  }) });
41
41
  }
42
- const MetaMaskIcon = new URL("data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3crect%20width='24'%20height='24'%20rx='8'%20fill='white'/%3e%3crect%20width='24'%20height='24'%20fill='url(%23pattern0)'/%3e%3cdefs%3e%3cpattern%20id='pattern0'%20patternContentUnits='objectBoundingBox'%20width='1'%20height='1'%3e%3cuse%20xlink:href='%23image0_1936_8376'%20transform='scale(0.00227273)'/%3e%3c/pattern%3e%3cimage%20id='image0_1936_8376'%20width='440'%20height='440'%20xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAbgAAAG4CAYAAAA3yvKzAAAMbGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdYU8kWnluSkJDQAghICb0JIjWAlBBaAOndRkgCCSXGhKBiL4sKrl1EsaKrIgqWFRALiF1ZFHtfLKgo66IuNlTehAR03Ve+d/LNvX/OnPlPuXPLAUDzA1ciyUO1AMgXF0jjw4IYqWnpDNIzgMCfPvx5c3kyCSs2NgpAGTz/Xd7dgLZQrjopuP45/19Fhy+Q8QBAxkGcyZfx8iFuBgDfwJNICwAgKvSWUwokCjwHYl0pDBDi1QqcrcS7FDhTiY8O2CTGsyG+DIAalcuVZgOgcQ/qGYW8bMij8RliFzFfJAZAcwTE/jwhlw+xIvYR+fmTFLgcYjtoL4EYxgOYmd9xZv+NP3OIn8vNHsLKvAZELVgkk+Rxp/2fpfnfkp8nH/RhAwdVKA2PV+QPa3grd1KkAlMh7hZnRscoag3xBxFfWXcAUIpQHp6ktEeNeTI2rB+84gB14XODIyE2hjhUnBcdpdJnZolCORDD3YJOFRVwEiE2gHiRQBaSoLLZIp0Ur/KF1mVJ2SyV/hxXOuBX4euBPDeJpeJ/IxRwVPyYRpEwMQViCsRWhaLkaIg1IHaW5SZEqmxGFwnZ0YM2Unm8In4riOMF4rAgJT9WmCUNjVfZl+TLBvPFtghFnGgVPlAgTAxX1gc7xeMOxA9zwS4LxKykQR6BLDVqMBe+IDhEmTv2XCBOSlDxfJAUBMUr1+IUSV6syh63EOSFKfQWELvLChNUa/HkArg5lfx4lqQgNlEZJ16Uw42IVcaDLwdRgA2CAQPI4cgEk0AOELV113fDf8qZUMAFUpANBMBJpRlckTIwI4bHBFAE/oBIAGRD64IGZgWgEOq/DGmVRyeQNTBbOLAiFzyFOB9Egjz4Xz6wSjzkLRk8gRrRP7xz4eDBePPgUMz/e/2g9puGBTVRKo180CNDc9CSGEIMJoYTQ4n2uBHuj/viUfAYCIcrzsS9B/P4Zk94SmgnPCJcJ3QQbk8UzZP+EOUY0AH5Q1W1yPy+FrgN5PTAg3A/yA6ZcX3cCDjh7tAPCw+Anj2glq2KW1EVxg/cf8vgu6uhsiO7kFHyMHIg2e7HlRoOGh5DLIpaf18fZayZQ/VmD8386J/9XfX58Bz5oyW2CDuIncVOYOexo1g9YGBNWAPWih1T4KHd9WRgdw16ix+IJxfyiP7hj6vyqaikzKXapcvls3KuQDC1QHHjsSdJpklF2cICBgu+HQQMjpjnPILh6uLqBoDiXaN8fL2NG3iHIPqt33TzfwfAr6m/v//IN11EEwD7veDtf/ibzo4JgLY6AOcO8+TSQqUOVxwI8CmhCe80Q2AKLIEdzMcVeAJfEAhCQASIAYkgDUyAVRbCfS4FU8AMMBcUg1KwHKwB68FmsA3sAnvBAVAPjoIT4Ay4CC6D6+Au3D2d4CXoAe9AH4IgJISG0BFDxAyxRhwRV4SJ+CMhSBQSj6QhGUg2IkbkyAxkPlKKrETWI1uRKmQ/chg5gZxH2pHbyEOkC3mDfEIxlIrqoiaoDToSZaIsNBJNRMej2ehktAhdgC5Fy9FKdA9ah55AL6LX0Q70JdqLAUwd08fMMSeMibGxGCwdy8Kk2CysBCvDKrEarBFe56tYB9aNfcSJOB1n4E5wB4fjSTgPn4zPwpfg6/FdeB1+Cr+KP8R78K8EGsGY4EjwIXAIqYRswhRCMaGMsINwiHAa3kudhHdEIlGfaEv0gvdiGjGHOJ24hLiRWEtsJrYTHxN7SSSSIcmR5EeKIXFJBaRi0jrSHlIT6Qqpk/RBTV3NTM1VLVQtXU2sNk+tTG232nG1K2rP1PrIWmRrsg85hswnTyMvI28nN5IvkTvJfRRtii3Fj5JIyaHMpZRTaiinKfcob9XV1S3UvdXj1EXqc9TL1fepn1N/qP6RqkN1oLKp46hy6lLqTmoz9Tb1LY1Gs6EF0tJpBbSltCraSdoD2gcNuoazBkeDrzFbo0KjTuOKxitNsqa1JktzgmaRZpnmQc1Lmt1aZC0bLbYWV2uWVoXWYa2bWr3adO1R2jHa+dpLtHdrn9d+rkPSsdEJ0eHrLNDZpnNS5zEdo1vS2XQefT59O/00vVOXqGury9HN0S3V3avbptujp6PnrpesN1WvQu+YXoc+pm+jz9HP01+mf0D/hv6nYSbDWMMEwxYPqxl2Zdh7g+EGgQYCgxKDWoPrBp8MGYYhhrmGKwzrDe8b4UYORnFGU4w2GZ026h6uO9x3OG94yfADw+8Yo8YOxvHG0423Gbca95qYmoSZSEzWmZw06TbVNw00zTFdbXrctMuMbuZvJjJbbdZk9oKhx2Ax8hjljFOMHnNj83BzuflW8zbzPgtbiySLeRa1FvctKZZMyyzL1ZYtlj1WZlZjrGZYVVvdsSZbM62F1mutz1q/t7G1SbFZaFNv89zWwJZjW2RbbXvPjmYXYDfZrtLumj3Rnmmfa7/R/rID6uDhIHSocLjkiDp6OoocNzq2jyCM8B4hHlE54qYT1YnlVOhU7fTQWd85ynmec73zq5FWI9NHrhh5duRXFw+XPJftLndH6YyKGDVvVOOoN64OrjzXCtdrbjS3ULfZbg1ur90d3QXum9xvedA9xngs9Gjx+OLp5Sn1rPHs8rLyyvDa4HWTqcuMZS5hnvMmeAd5z/Y+6v3Rx9OnwOeAz5++Tr65vrt9n4+2HS0YvX30Yz8LP67fVr8Of4Z/hv8W/44A8wBuQGXAo0DLQH7gjsBnLHtWDmsP61WQS5A06FDQe7YPeya7ORgLDgsuCW4L0QlJClkf8iDUIjQ7tDq0J8wjbHpYczghPDJ8RfhNjgmHx6ni9ER4RcyMOBVJjUyIXB/5KMohShrVOAYdEzFm1Zh70dbR4uj6GBDDiVkVcz/WNnZy7JE4YlxsXEXc0/hR8TPizybQEyYm7E54lxiUuCzxbpJdkjypJVkzeVxyVfL7lOCUlSkdqSNTZ6ZeTDNKE6U1pJPSk9N3pPeODRm7ZmznOI9xxeNujLcdP3X8+QlGE/ImHJuoOZE78WAGISMlY3fGZ24Mt5Lbm8nJ3JDZw2Pz1vJe8gP5q/ldAj/BSsGzLL+slVnPs/2yV2V3CQOEZcJuEVu0XvQ6Jzxnc8773Jjcnbn9eSl5tflq+Rn5h8U64lzxqUmmk6ZOapc4SoolHZN9Jq+Z3CONlO6QIbLxsoYCXfhR3yq3k/8kf1joX1hR+GFK8pSDU7Wniqe2TnOYtnjas6LQol+m49N501tmmM+YO+PhTNbMrbOQWZmzWmZbzl4wu3NO2Jxdcylzc+f+Ns9l3sp5f81Pmd+4wGTBnAWPfwr7qbpYo1hafHOh78LNi/BFokVti90Wr1v8tYRfcqHUpbSs9PMS3pILP4/6ufzn/qVZS9uWeS7btJy4XLz8xoqAFbtWaq8sWvl41ZhVdasZq0tW/7Vm4przZe5lm9dS1srXdpRHlTess1q3fN3n9cL11yuCKmo3GG9YvOH9Rv7GK5sCN9VsNtlcuvnTFtGWW1vDttZV2lSWbSNuK9z2dHvy9rO/MH+p2mG0o3THl53inR274nedqvKqqtptvHtZNVotr+7aM27P5b3BextqnGq21urXlu4D++T7XuzP2H/jQOSBloPMgzW/Wv+64RD9UEkdUjetrqdeWN/RkNbQfjjicEujb+OhI85Hdh41P1pxTO/YsuOU4wuO9zcVNfU2S5q7T2SfeNwyseXuydST107FnWo7HXn63JnQMyfPss42nfM7d/S8z/nDF5gX6i96Xqxr9Wg99JvHb4faPNvqLnldarjsfbmxfXT78SsBV05cDb565hrn2sXr0dfbbyTduHVz3M2OW/xbz2/n3X59p/BO39059wj3Su5r3S97YPyg8nf732s7PDuOPQx+2Poo4dHdx7zHL5/InnzuXPCU9rTsmdmzqueuz492hXZdfjH2RedLycu+7uI/tP/Y8Mru1a9/Bv7Z2pPa0/la+rr/zZK3hm93/uX+V0tvbO+Dd/nv+t6XfDD8sOsj8+PZTymfnvVN+Uz6XP7F/kvj18iv9/rz+/slXCl34FMAgwPNygLgzU4AaGkA0GHfRhmr7AUHBFH2rwMI/Ces7BcHxBOAGvj9HtcNv25uArBvO2y/IL8m7FVjaQAkegPUzW1oqESW5eaq5KLCPoXwoL//LezZSKsA+LK8v7+vsr//yzYYLOwdm8XKHlQhRNgzbIn+kpmfCf6NKPvT73L88QwUEbiDH8//AlB8kNc164p8AAAAOGVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAACoAIABAAAAAEAAAG4oAMABAAAAAEAAAG4AAAAAAH7VFcAAEAASURBVHgB7L0HnBzHdSZe3TOzEbsLgNgFsABIgAQBZgWKpEQCTGKQqESKQZKDJNuyrL/P9sm2CMr++fzH+SSKAChZ54vSna1gi0qWxCCREqlAIVDMIikxIRCBCJuAxeYwM133vZ7p3dnZnpmeme6erppX5GJmOlS9+qrqvXqvXr0SghMjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAhEHQEj6gT6Td89t3ZdOzJl3P2WlYn//Oauw/cam4XldxmcHyPACDACUUDgxc3nNgy8fvIPXhpI/8WipsR7P/jt1/dFga6waIiHVVBUytl7wvjw6LS8oGds+ntp2X388B3Glwwpv75i69FXo0Ij08EIMAKMQDUIHPz08guFND6y79CJP/z5a1brdFqK/obJDyDPO6vJV7V360qD2yyEOb6x6xgaqcswhMSncekqU7x5RUwAiOelNL4Ss6xvdH/+6IBqDcn0MgKMQH0jsP/21ctMkfoAeNnH0kKet+uAJX7TkwYoEsmQwhRPbt3e97Z6QqmuBNztV3RuNCxje24DEwDd7YZ45/qY1RIz0AtECh3hXsi+r6x87fDDxncF9RBOjAAjwAhEDoE9f762saFp4r2mIf4AvOs6InBkSpgP7U4Z/aPSnsXnEA0xF1+9ZefRQznXtP5aVwLujo1L/wlN/gm0aCK3VdE5RENMiOvXxcVpHQSJkcSsJ4GJzwA0vXtIs1u57chzue/wd0aAEWAEaoXAwTtOPdeUqd+Xwvg4aFgErpWCgIvvO2GJn+61RMoirY0MUznJwGRdGp/auqP3izlXtf46FwCNq7o5xzzpWk2YLKG+GWSufNupJpS4mZTCt7g0xG488S/xWOpfln+up3/mLn9hBBgB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Rqgqv49VlnCuOBiixLFo0IPFiNWIIbNba86Gv0jh5tiiZsYyEOAILgMUfuV8AhdjzSnEmnPqAhRDbNs+0jq+rn7NA+86v1SZQxIYSoAjuKE8eOQSAovXPvB6RTR+HUZzLzk0y7KQ5McVserrKdwcWsLMVk4CHMHlRMQTnE7gSEvzdVGf6XdSPiG4e269u/H/nJQn5oUESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEiiDw/21fUQrhhQi0AAAAAElFTkSuQmCC'/%3e%3c/defs%3e%3c/svg%3e", import.meta.url).href;
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
  }
@@ -3415,25 +3041,362 @@ function RewardDisplay({
3415
3041
  /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
3416
3042
  "linearGradient",
3417
3043
  {
3418
- id: "taskon-reward-display-gradient",
3419
- x1: "8",
3420
- y1: "0.703125",
3421
- x2: "8",
3422
- y2: "8.70312",
3423
- gradientUnits: "userSpaceOnUse",
3424
- children: [
3425
- /* @__PURE__ */ jsx("stop", { stopColor: "white", stopOpacity: "0" }),
3426
- /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "white" })
3427
- ]
3044
+ id: "taskon-reward-display-gradient",
3045
+ x1: "8",
3046
+ y1: "0.703125",
3047
+ x2: "8",
3048
+ y2: "8.70312",
3049
+ gradientUnits: "userSpaceOnUse",
3050
+ children: [
3051
+ /* @__PURE__ */ jsx("stop", { stopColor: "var(--taskon-color-border-secondary)", stopOpacity: "0" }),
3052
+ /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "var(--taskon-color-border-secondary)" })
3053
+ ]
3054
+ }
3055
+ ) })
3056
+ ]
3057
+ }
3058
+ ) })
3059
+ ] }) });
3060
+ }
3061
+ const DEFAULT_TOKEN_ICON$1 = new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAABsCAYAAACPZlfNAAAACXBIWXMAABCcAAAQnAEmzTo0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAADodSURBVHgB1X1pkF3Hdd7p+7Z582afwWCwD1YCXMHFlESC1pCWJVGRQidxuRwnKVGpVMoVx0UoyR9XpYpk/CP+J7LiKiu/BFZiyZWKHUpyItlaCEncwA3DBQJBEJgHgBhsg9mXN++9ezvnnN7Ove8BBHe6yYt73719+3b312ft0z0K/oGlib8YG2004rFC77rRePHcFg3QB1qN0llp3QcKf8ukYVYrNasAZvEHnataq1MJ6HEVxdVdf/TsOPwDSgo+xWniW2N9TWjuhZx6AJTei52/F5QygGRr3q4l2t7XV3iGKSpVIKktHsSM46WhXb+IL5w4uPWbB2fhU5o+dYAxSEnjQYjgAVXqHtP1RexVsDVV7Wv8Xlqh2/zW2p7NpQJ9UCf6iUJUJPCq8ClKnwrACKTC5tseXD516AHstDEGiJKyAClzrWRt211nWyMpTLe5525J0Cgl7iang3j9xK7/+OwB+BSkTxSwiUeQmrrrD+HlfpZFXCPVApSrpXIdLWqtQfvf/AgzMZUoe0cLdDhrmyZrW44DNhHgBeCqeO9goZE8uvVPnq/CJ5Q+EcAm/utnRxs5eBg//yDXIHKI2AxRZK91AEz2oUoTTDhr0+dEjRZZ30DseGU/wp90xcvvtlCYNtfuYeLy6AOFGD4R4D5WwIiikqHKt+LFyw96ILx8AkcW3OGewsD0UWw7k/qsUOmEytoByOULUOrvgVwhD7liEYqVsvha4Hn1pRU+12bmIW40+NxYXuFzZD/rq2FxMteOMtuwS5PvQAE+XuA+FsA0qttv/9lnHsIG7tcq6vOszvWSpxgDFPeJPUeFAnT09UD3hrV8LiNAEYKD6h0hh+ciH4p+U8qVICWkdBMLikEnNTzjdXMJ78V4XoTmhfOwfGICaitNWFqqwcpKnV/hauHrkXadFFiqpzIPGpoKSj+2809eeBQ+hvSRA3b8Tz87pqPkOwjQqNfyJGAQRIcDSSFI3RvX8tG1ZhCxQcop9oAq9gLkEaR8J2bKgy+PO3LV/OazS9rki/BQxdBi7uwm6KnXQV86DcniAsDiIsT1Oiwv12FhYRXmZpfRmgjguSqHyoKQdcQudbW85bZvbPpX3z4IH2H6yAAj9teIlh5G9rZfRSqtlluWRxLHgURtLw8PMEj9WzdCrgNBKg+BKq1BSuoxhRK1xMt4WuazpxYP0tWaY8EjsCHPZeqZEzg4Is/69MICJJcvg0YA41oNFuZrMDOzDPVaQ4CnAuv0Ms4Ah6YAFLvXPrZ1/w+/CR9R+kgAO/rIZ0cjlTyFpY8qamUk1bwwQJFRQYK3ymsGYO2NO6AyguCUkGN2rsdzj8mFdphuzAM05vBYCFqkb4FQHenaqYhaqpM65PFan4Lmay8bHCtd5uhGKi6XOQ+DNz3DAC4vEcWtwMLiCoOWI9A8uwTJHnn8YKomOrp3zyMfvmz70AF7+9E7vx5r/Ri7iEhbE0qFttKAqArzQMcwAbUdKuuGscNGAC9IaOHDVdCrlwFWpnAE1yBFmb7mwvhK2WTuYw4wOhJXAXAXemUF4uNHwYNoO10VkHX2oJwcXINctIj1wLogaPHlaWggYFNTi7AwZ4HDb0WO0pyYc+yCXGJJ9OjuPz30GHyI6UMF7Nh/vuNhpKZHpGfCUBgrHkhRiruuvKYfhm/ahhSFQHWts0DlDDUtn8UzUhL3XnRloLhgnX4mnwf7KZ0c+5tBEN45ndYAdZrFqUoFVN8ARP3orlytI3DTDNzyzCKcOzcHcTNG5oqg0VBUyrJFMIDZYiKtHtn5Xz48heRDAYzkVb2x8C0dRQ8qN6gjWzy1QxFYeM7nYRgpaui6zch+kKJ6NtKQRoDmUW4gUI3FVlnHP6OgXEQZynL5ryXp0JHJ+XeQ3V1igLS0txg0qcZrprRozVqIBhA4VEySc+chnpqGmellmLq0hOwxAaMCqaBB2u8QgCqBA8VC45tbHxn/wD7KDwwYgbVaX3oKh9Je7z7yqjpRFIKFgJWH+2HjnTdAcWAQVO8WlFG9TEkMVN3KppRSIuReyk7L/oZWKnP3slTmjGFM8cQJ0EsL4PyHUg61nK3tRewyt34dKGSZRHHN4yew6stw7vw8rC6jYgKt9pwoe7xUaN77QUH7QIAZsBafwsu9rqbKa4A0ODU08Hr4hq2w9qat2NBN6IBCqmqiXJg7g5bsdABHSU1SGW+HY4v+nARqc9V3z/0tN1p0WufwvWdS8+jrWFziKcpksdRFL8aJKStOwBeUmOfRQD9Ea4fZ/IiJ2iYvsGybnlr2lMbNoXIFpSKrGS+VPhho7xuwiUf29q2u5hAsQ1mOMiwrhyZlyudg82/eBF3r1oIa2gbQ0Yva1wWAhUnLKyBDSRnqyQLpTi2giWv+7RQOpxkmaYWjhgrHibfsT6uSt6GoNKWB7XT7G8HKIWjMJona3joJS9OLcP48co1mAlZ0Z6iXykjGS2X9vkF7X4AxWMsK1Xa118sqeyYNkMDKlUuw7b69UBzCkTi80/TNdBWpas5+WQk5lwFGyimZx73XAqDy2AScrsQS8TSPLqozE+GeU8mlF0PKtUTItQzABFhueA1fx2cmYfXSDJw+MwtJQyO1OWWkBfTxUuf7Ay2C95HqK9G3gCYTucHKtzvByjTZeKzAji/eDsW1qFwMX4fKRA30uSOops9wQ223CWcqtB/R3FkQWJp7zz337E9UTguW2DIerSa3vCi0SacoZPz4ifKfM+WLQSTOydQMNN+u8nV+62bo2DQCmzf0Qb6Qw74wfZJuJ/+7t76Effg+Uu495odj/2Evei9gv680TWfQf3gTnT3oQeqCbffeAvk1CNbARhTsU6gO42hOGj6/akctkj0CtLJK973Ue5B+P22QhXO6s9AgRu2wUU+1y42Dtklf7T6xlBg1zhn0ypQgN9gPOXSLdGFvLKGPstGIOU+aMnhA7f3ju0bgz589/wt4D+k9AfbWN/c+hK6mP0up7LahTfyn2FtBsG6G/PAmtF/WI+u5gGCdtvJKyeraC5XuY8nWsqlFE4zCS1JZaSlMpoQpKbl4zsq1QF2mBBVYapbKs9WR941sgmRmjjskt3YNc/WeKEYXZQPqCBr7I+3h38HJ2j/+7Ej1z58//ypcY7pmGXZ0/95R7KLDOkIPhgCMxg/JLAJr+2/dhGBtNmDNncfjXFo+CbVcRcLwjWznewCtUhFZzbCtnBPaISshyuYVc2mSLVpvhsbplfjEMXNPKhHW2NVJljXrVoXDyzypqITrHLrYorVDaK9dgvqZC3Dq9CwSdAwFWxslykAbbRZrfeuex8arcA3pmmWY0vop7SKSrLFJaju5mHIdRRi9ezfkhzYiWOtAz06iJ2HSd1KQO2aIKWqsFu4i7xpyfCmxH0ky8smVB+GZBycRss69JMByiVmhqJd7bstRvlKQrrcrzrcnw2dFihGoePIiRCNDUNywBjZvwjGOJNfgdgvyNf/3oVB5amL/3j64hnRNgJ14+EvfwoJHZZ9S/5BQzXWUYPvnb4TShlFQ/SOoCZ7F4xxIa79ldFLL2QTSRv4l2mtd4Ww6J6UWh14LYEl8IKsoQLoedFpeAinfuGgbViDHlyzDVyGR+KVlpCAavojPTyFol5jSijjZunlTL7Neo4hkxqeG0VWdPAzXkN4VsIn/9m/G6tPn98tB5yiLNMKNd+xA1R2nQfoQrMUZA1a2pT5pY6SmqE4+NTdaQLPPTON0Ggzb4nCW1CHBMtd6tZaqTuoslRr5O5VU6nMtBCaexecQtMtzkKPJ1/5u2LC+h/ss1rqlmjpR+4/++71j8C7pXQGrvfnid9KVMVMI9OHhPZvQKB6CaGgzshr0Xlw87fNJucDJqbfyuQM0kdQo8+h0XlleCjhZY6lIiA53ZTjtMEWFVzp0+/vqKu9kyo7PXoRkuQb5LRug0tcJg/2dTGWx9Fe6d5T+Ds3Ow1XSVQE7+u9ufhgrNxo6whiXNEKKPRUY2bMBovXbgXo5mTyOD5oWACt/3PBJvEVq78vf9mOJywfiXVGGlB2OP7m8nl/ZPFLpkO9h/XRtFYIyIqgQLEBSTrl7vkczl+oK9+Uz/GZ88h0e6IXR9bBmsBM6SnkGLG61OUff/KNb9sNV0hUBO/qHe0exvP1S+2FWSL/R6771rp0os4ZRiOXRrkEFg1hNIjooScKhBXCuc/mZ6+g4DZKGDCAuT6acJLYAic6Vz5UE17ikUuX6AZNkABIgKcgAnwiZLI4kO6ACGOS6ik9NgupAd9bIAKwf6WJEEy8e3CdJIYOHrqaA5K/0IIH44QhsWLQos4kfWLd7PXozuhgwPY8TjXPTkHa0Zu0rW/lItY5O7X8AtAgEJUa8gvNnL8OFyRmYw/koSqVKCdatH4Qtu9ZZI8eW72ahZUCotoDJ+kjiSTL3pVtKt6laO5asM8/8GcGZXYL44gzkUQEpzizA4GAdp2YWeQI0ghB2gJ/ta5QGyAvyDWiT2tphRF2JjiciYT/RNAn5KqJyAa7/yq0QbduN9UACnTyBcqFh7amMzeWEd5S1oTLXLk+LvQVwqnoRXn35JLz1xml0iTWCyWb7g/q1p78Lbr5zJ3z+H91uRYwz6rXNxyMXlQBkTQvzIMHUiSgIREf7iUgdiK6N3eYA1bIMCbLMh20s7NrCFNc4/g7aZ3PYpiZTTeRYdKJt1tzWPd9utc3aUlgSxw/zLDE4rqKtZYT65+3bcPKxz0QiXTrLH1e20x15K2n/RMo2UgnnhPhtG+JHdE5DbaUOLzxzDF5/5SROxy+ZqXjMUi5GMtjKc84a5nn27w4joS/C1/7lb4ZgX2EW8H84+XhFRQEyHSypxoOVuYY25WT9o769wF78JiohhU3rIDfUB0OLdThzZt5QmDKDyg4x/ARi0IbKWiiMqStuTrDDwFII1Y+8GT1bBmHz53ZDtGkrfrwBerKapianmMnpD5r6p8rwPW2euS+nplA0530VQXrmqTcQKJxbQpToyEWEqWLqipynBJzo0DxlRVprHf1je+7YDl/9F/eEzqSy7RxXfPzXoQOtHZgGwFGHErJJ5Evl1ymwtFOYPMXqNGCJMs4C/L+wfQP6HQtQP3oKqidnYBWprKCcn5Bkm5HjnY18/9YDaY9+C4UljfhhcF4eG5Dnvj+yex1HFqF3E/Q7JyF4G+hrCrxvDv0tnsXp2KJjXUw6EdMn4OXT7Owy/O2TL8LZ6iUo5BV05CMo5AJYuSiwOiVeJadzgoIgFxvKe/OlE1yHr/7BPpEp4aCblF2W6lDIXCcCDN1CKVf8nUiyE5euTHsjPn8Z8tvWo6O4F9bMruB0zALEkQlcVU7RwezLUZM0xkdApFYtkVaP2O85JYvCpPs2D7IqT+xQz88aeyYRlYoh7SQVIzSMOssv3PySzf/Cc8fhO3/xEzh/ego6ChGDVcYhV0LgiohUkYBj0OyZqA3M2VEh5SlhXnrnzZdPwE//5gUI2ihe1moWKMjYc/4faGVzOnS9sERSeW3T2rJI3f6dZGEFvfvzDFiluwTlct5V02SJfd6HJh5Ma4wpwI786xsexJyjrnBmhdbu6t80YGQXqvF6Cr3wsbYdIsDJqrSyNVaeaMti6LpWq8MPn3wJDv7kVbZXOjxIKJyR/+UtQIplmArebi04KlgKJPCQpzBo+P74r47C6bcuBAqoN8ApB0LTD2BYIHWSJqpsZ6c09my+0NTU81QeO0jj6QXmNLlBlGX9Zes9yoBPK3puuvNBuBJgKlFflwVzAI2mCckydA1RoCVO8S/OG+HtK6lbR5MbxUJDSs3m4v9zqOZ+93/8Co6h9lfKR3wQNRWwEcNr+6C7txP8tEe6EZlvG2cyg4bwId5QJG0Mj2f+/lXP+ojCtFQcHPXHgbp0ph2+zvIMmXuZuuksm3T3M6ZesljjIzfQA11IZcaYNjJZlrnyxjMPQDvAjj64e1QrPSY/5GzbNduGGSwymPX0lDB6Ic3qpLB1z+KkhfIIrO/9z6dh5tIcsj/FFEGdTJ09uKYXvvR7+/C4GzpxoOhEt3RkGPVGTrrwMkeJeaJQLGz63Aw4Q1cvL7cAnS5P9jqke1f2vc5epNvmXWMBwTR44v34AtqvOEhVZwd0dRWN98MpOfZd/H9s4sHRvhbAkjg3lvVqGBGgoW9dt6Eu9GYYb7esaGKFpB12WQA9kOYZg/Xdp2FlcQU6LFDEAqmj+4d64X4EqljMYQM64Mu/dxeUu8rgwwpEH2VZkGOTJvjFUFuz1oB5lBWohsEPfnIyuL98O51MTSxl6OBW0wBpt7rLk4SB2RLroTNyOmkZJFoM7AT7gLhVbrAb+ruLxgJK3HgJ5a7E5QdbAFNR8nWA9MggdjiAsivX0YFulQ6c55oG6ZrRiWuYbYiTa6BBhpC5ETaH9tL3vvcMrCzUWNYU80ZOUfZ+rPT9v/s5KBZyvqFdSGH9SHHajoVU4wEyI1t7FmzkmgmlJiqcnVqEI8cuwd/+7CS0CJ+kXVmQoQpJTdCeyrL5Uu9m39f+Z4KyLMLBSTEgXZVikCSpEQoPpAA7jJoI9vOYK0y6+npHehCsshlh5CXQ6U5zc1liINqzDqOW2CDaVd/7q+cNWPmg+dF//YM9cP8/+xyUCCwnW/D80x++AifenPTYhw6xbEcLU0LIFGaU2iglJZQNcxfnWKYdfesy/L+nJkIb3Cyz/y061WmxWbnlwQVRTvr7LfKt3X1bTozGPsc69nZBT1fByjAZz4ggVbo9W2TAujduH/OV0gqcZ4Ne6sbpALK99AqqxauNQDGykk7J8CwwVIxOq+i5MGCtsMpuwDI2x/C6frj/n3wGSsWc76hV9Kj/1RNPw9FXTwsQtGi0K1yeIeWSpMsONE5LxTxH59I36RNvHr8MZ84uZDpbX7mTbVtbFBDIdD5AK9tuk8cnJzXqTVY+op4yVDryLBpMV+qgUS4twGKzi6PU2HCuVX89Zlx7gVSJ11YGuiBXKvISnGRmxo4s65XIicpEoqcS5Q1uZys/jXbW8lKNFYy8Bwtg+64NcM8Xbg5OW/5HwXcPPAMzU/Os4rM6Hx6F1ieZjgGQtilXdc1IL19MHL+AngTjUaElTs8dPgediN7lqRVYWK4Hd4/2jUfWHDGLIrY90FvGswqUp6AV2Mz7KZCyAyADoCZtEeV3DjkMDdzVWlNwXXOFNf8dPB1kwCKtb5HRDKTOExvqGuhk2cU3F+fNy85pS/KK3UnK8E8XmEN5ouDte+nwGRhHSiGwjG1lXtt+3Xq4594bzLupcDcNu65bBy9fXkCtMYAbOiTTEQoCgel0f2wlLz6q8+cn55klclvxmLm8zBmfPnRGc/mcQnlgR7gO/aXzKGz7eztgyzpSEHCWYLATghwQrizxUuoaRLiDq7QFMcHBHA12QdRZgu5KAX2pDcTAtN2VE4G+hS4ZMNXZM6aX5/1DJ5O6B2kVJB5JM6jF0ivvO81SVuQqY0hrfr4Gh148YTRB9khYsHaug3vGrg8szaxHAhdVdfc9O9hXefTwKdb4UgsMsphpSM1X8qW1+0Z3jcCl8/OwgE5WAkxZa7uG3gAEAAZ7iuzHQ1mqre4TgrxRmPC6PeMbUCRbZqdX4PLlFZYznThrMTJQhh0be/DcGeS1BCp7ToEY7rO2iH5QVSZ7LDLzZJGJ9XTrq/HasMQjf7Bzb7I0HzoAtGfp5e4Os6htadkYnY49JWapq0q5G8CzQMM2NPzoZ0fIN8msjdxKzAZ3jCBYN9jywHj6fdyibRR6mvd9fg8kyBpOHDvLFXdyKZtUhsM4xad/TTd093TAC08dNaArG8yJL5DKT+7O3q6SmqsnQKtmCTTZpyqnnTuVnDrKaG/EebSOcXA2V5vqNMrCk2fmoA+/swd1gh0busE5i90sRzvWKc0QX2ea9agQYDlDMIkJ0A3dovuO/v7u0SjW+VHJXp1Z0YFg5dDJi0YRdlzNZ/ADKZERTTpjjwC88eY5ODc5y51Bqjs1YNv2EQTietBCpSbyP/TChKUKe4Bp7D1fugm2XbcBbUTx3UyjHVkoC5S280k33bGNO2+yejksLOfDDByy9QikgvGMaKRA5RQTnMUhx7PqUOY+2Yt0dEaRLmNjKtioSp4PTcfy4qo+9NoF/cOnT6NMbHjQW+SW1P7E4OJrVMwi7G8a2ET9QlkO+lEEY3kcVyZGXvBLylTE6Wyg5aP0gNih5162hCgoCky6kawJwPMvVpkN5VFuOYl2/fUbA8BYbg2p7y//6gW4cHEeVlebcM89Ow3wLkYUP/Gbv30Td/TJo2e5Ma58OTqV6CD6XcHBtuumjfDm4dOwiLMAVA/DVo3sKKHTscSdopX3Smo3y6NMkfb7OcN0aL6KrfE8PscqKpKvCf6OY6UbSaIaOKiWF+v6yV+eUjdv69c3bxtQ7agrrZgEkk5Q+cn1onMdvUnEbhfnRSi5bWx+YP1oHvOOpqcrzCjo6C6CN72bcVAOtC3Bsj23CYp27BCPI8fPW60wYncT3SaXy/d/8Ap87Wu3wZqhbphHFf9vfjAO01MLrHI/98xxBmbfvp3WcA6s9p4v3sj1m0DQlF3SJGcGtKg/hXncdrcB/sVfvhVkoAWAMg8OdPD7u3cOMYWnNFGtlSABle5ooOVEihaoR7asBCkxr6idGgqoKeSwoUdOzvB7CBxAO7bYcuA/K3ZyFU0Rnqli0yqteDSmJrcgQestEkpt+yJHPq5iAVJzSVoOb7eCz7LDXORHzPMvV72GFwkVmKjor//Py/CF+/bAwV8eh0VUZ8t5U6MEKfHQc29zxn137wgz1dbsv+cL1zO1XJqc8bJUAaQcFtTICsqTXTeuhxd+cQwWaRLUGufK2ZeYcf1whV8cGiKHQBnSCgGkydVqgI6N0zJZGpw5M3ugybqhg9h+g4ImdIST5hp+fXKWndm7N3VDZlilqcve04kJRFI4yEnxSGnkAfR+Wk/dJ96zdUUtCFVXswJRGwrzaqvNJP1ylGJjXZ45O8PbJOSjsMpegZnipwXcSaMJP/rxG1BbrrHT10yHRN4BfOjZE/DM0whcbKnaTRThR3/ra7dAL7qwWKYlkNIQWdvCe1/5vd+ABezUY6+9Y5WNsK+U7RPYsr47GKZO9qZmE3R69Is2x7H21bJjXEVIotQ2qn8HykOWeXiNlAaLK81gJF+Juuj/emzykQiJVBhDaZa6BT+l+tKjSmQgpaPRCA0CnfZqeODsb3x29PhFBibvtbKwGRcpIMUoEkCZRpZoOkQF8J5/9iQ8/cyJQGHWf0l+xvv/6e3QhyzVVdf5aum893PboBvl14u/ehsWZ1Z4sJg9NZRvWl9vCQb7OmBhoY4UjsdSw68wyTpy6T4/X6KtjRp4NGEVtUodg9WCsHUxuNBkHiDYblVUpk0R1umt0/NpqkoTVgo4GswK25+zIRZSybL5+/IoQftApd+nVETBx/EXjroAgtrurUsIKj0DrODkqWm7a4yQHRBiMQoiuMeIPwNoXtnVivQcj0PPmKn+fXdvDy/QKEbQNm0dgpmLCyLmBDkCOlBvRcBefaEKb7561s5Oh45hlRyp44adgwzMj35+ClaWSH4Zo+KuO9bBztHelOvpx784Ayso40wEhKWgnNLo/VCKvAvC2nCf4ukdZcxSGkvnL60o2NGfoa42AAqCKVot0YwzLVa7EGC8eiJU0i7PY1bIOgYF21iDxMsVJ0BcVa0+cgm94k0cJaj62gYoX0nlQBODQomRFll5yAsT2O2l4HkCDTt3377t4AzrQ0h9489PoNqNrEOZwU1g3f+7t8ECUtWLvzrBQyCnjQof6aAUdXYWYBeC8vbJOWggq+owbhRFe4dFZssDkLwozwNMsXdBhCaQieY0ExNmEhtFmUB0fUnmAqrhsFQjHqpViho0pGWYC5VDGU8yzGSxiLmOYs+L6sv7F+0UPJclHayOJXHBKvgN3Ud93JlizS9n5UZq8RoE0ADSslSJLGZ0ajc3wp99/pmTnOfuu0bh2eeq8NKzE6xV8vCNDCv8ra/ehBZIDv7XgUPQWG36znWrFT3L3DPEF0eOTLGMyVuNs4HdrVzDRWcWCA9UIwpOHlNTI2UZlh2oRj+wvmk3OqzcBpLbtjANaR4nKColXuxgUc5qd2uk7Ut52aEyNoUNYzF9HtiSvSGDQdmVAjA1tRzAUtDKr6E9gCCAZDngeG3OjIVDCNrZ0zNw9syM8fTbN0kv2ffF62BgqBN+9OTrsDBbM3EgACDNQtIMyzjNsnNLD5yszlvqiqAQlDGdM3LaMCH7bp6ML0woj7SzJjiGUAczwe4t5UAylAapAcuGW6oPUmDJW9r3Z6rfXEclYPqG7/kayIK1cDWBQcHJMZ8nsQ5gM8wMp7SCPgNQS2pXL83b/Rj7zfoeqZMunp1Dqoj85iX02Vs/sxl27RmBF5+egOrxKXAqdg7c5l3KuZPg/ns3cdlH3rgMOP+gS8bsYKYSs8vOGKBatD3SDiTUBSxRMdtTYNawE4Vp7fhMGIKJbU52/gtsl1qmpSyrS+VJkkCMQlb5QYRVnMWv97lu8xRKIFGkUWc5jbzDgUaWZI8R2AlISOkjVwLIZfAcWVQKIMg7Ai0Hgfsa1qVg752b4dY7t8ALv5qAl56rGrMhUgEsHv3WTbV7kOeaXkewkLp0OWeB17wgQVkvv0ppZY5CiCtp5ajG9Lc02pVyU3XeGymZR6SD3uBVeC1AcP3FJaOyETfSlOjMMFPALFKYmoXM5vz0NYpj77Qqu4lRV7ZQHYa+8G4QRQ3iJJySG/JmwEmdAXw4iPyuy68tpTHFReAXqhC17PvtXbBzzzC8+CzKtOdOMftzYDmby1gCGjrQxbb3+kFWy48euazLqEXkbVxj5MzI1Ixx4FGsCVo55W4pF5ZhAWKeqa1n33STaQt70UH1kLYtwEofOv1NVvISqDcTzza1SvXnLMr4ZFYLgrZDAZpoyGmksKi703rnYwibdIkhYFkPDf+hvrJRSWOdnjEBCK6kJODmte4s5QlcqWMNsKS6F+G+r1wPAzgX9fRTb8PrhyeNYLchbpH2coMjkMrYWV/8/EZURGL4+c/PQhHrT4pEXlut0A5fBoaXmFg+xQ5oFaguSY015QWd8l1g2KMhFJ5cS+wUT0+loFrUeO/BUekBgpTPBrTNQ4tNIvEcSX2WBnHVqIyis/AcN5rGBovJQZZzfNJ4PlIBNmAaiPdKKMVvu2GdibiydKylN0Ga7zpQgusZv1UrWJacaO/f7MM5py//4xugghN8P/jr1+H1VyYNZdno3yjxLMx7IsY+OwJdnTl4efySJlaIdpQqGFeVUqJe3Mm+PrbuidFAmA1qh4qBR7tdWLSru3Mr2+GpOXE5oxsqIGNb0raXY43aDxTq75Va0+KgA02A2XEADWc1pyLxwGZanl/leAPzplM2dEpjSW21YAG/cccamEF7qIpaHY8hays5Rm/GrvKM3e8zaNUrLTQkE5SVwO4bR+DOfVthAev0v/9yHCdGVw1lRcbeirwAd+NIw+03DuHUfglePzID71QXaU5OeUqENEUbytDK8ToxuJRjDMZbpJUUztoRm22po0Mqi8b1xvVd0N1VaGV9qe+bZxFqsRz6ttpA7TexCrijQlcnVc0XhzdUG5feMbjYMliGUVwBbepIPsJCAa8bAXU3aal06szFY8vuuWMz356oThtPuMpyUePV0JZK3X5M2g4CFzw6PNINN9+xAUbW9zD7e/HQGagjeyMzjDtfgw/hdooAhebduHsArt/ZB2++NQu/PjJNhrwiHx/Z8zkVeldn9aI4DSR3EUgby/aOaEyQMNoPeBow/QMldd22bmjVAm3hifiO1Lyxv2u12FCtYLu2DqfyjYtnqxYJcDKTjuWFVQMSA5YPGqJV4X0Mh2xgpL26uu+OTVyRiVMzwWQDCMa51l4cahFuRrWgCbybb98A1980wj6/Hz75a5h8Z57zs9qulXAsg2fn1FG3/MZGuGlLGc68swjjr11me6vEYCn2cWpwtq4lfrtp6gr6CS9O1Xy96Gg0E1VQzho27XVuWQe2Fs8sG9RDa8pqz04TT/nGyXm4cUuPQAxAhss57KOS2fWbvB2NhgYZEOXexS+M52NoHMyR/azdZ82QIgprogzL1VZ5Us2p9iSr2NaXwTPs7YhsRayhgh109x0bkTgjOPbWlI1BBL/Yzs2facGKh9d2w8bNONW+a4jzvXToHXjt1fNQR9bsPCiRdxEJhUYbyrr7vm2wA/12VfQlvvDKJe9gptnjnK2rkp2tvPmp3jo+B6vxNCppiqmQZ5rzyrg27PSmCtLGBy0klk2y/wkdmKMbu9TGdRXs9AQOY5lvn11EwLrTLNFeSxGkinmexIxRQ1xB0Ip2LZwZUyZfrKJq/tYnq9XXHtjOqr1yckUb0IjKirW60RQlTwOrMfpet8NGie6IzfnOW9bDAGqPJ3Gq4cKlxWBQ4+NiKQf9+GxkpAvZXxeMrOuGVWzoa6+dg9dfu8jzZ9RNvK+um1+TMsiCTeFhX3ngOhhEj8cp/M6vDl2Acs5McxTNChji1FYg+IHpWKN17JIUjVRs1qMp9iOyO0rboeJaphx7NMo8SV8EasO6CgLVyWF8l2dX4ZU3Z2AeFZ3I/TEYLSoMgcK84oJtSOZXGCypQbsZ1FwFxcN3x8fzlkTHsRfGANJyjJypvThzDN0VXjGoETxHVWxkUF2UCJCzsX9eK7TO4h1ENVv6+T2arnAfoQUAYGXc5LlFeObZ0/DWsWmcwmgy83GUlLNT/H5mGIJy0TdQhvu+vAO6eko8/jf2F+Gztw7BuclltTS7qnNKqtuhbY7KnP9SRayUeAcEx+cbo11r8ddcPGXgvwUccGuR/W1cX+GlTisrMRx5ewFOnzeL3/PMaWxfCLav5Ggjj0pHkSuXoO27gvKLN32Wf+QHOJj0IJfJryr9Kv4zBqJBDBj65pKVVcjRxyh6annV+oUUyIXG2oW5efLMTOPb6ZfVpltQgEoNziudPTcNU9MrcOrUHP81BjN+rbdCCYer7VgIn2Swdt8wDHfevYkVkV/8bAIunV3Qe/f0q41rO2Hrhi4U3k01O1NHH+cKzM+sEruxVJXWNajoPDkwAircDuvXZVmXYAOjHAWXFnRPT1H19RZUb4+RO9NIURNnl5CD1Fgm2lhHfpkM56xymN2miYmBNERkiXM4Bydrp0ODX/WAJUn0ZKSSh0CplKtoZXGVwrlQjtWwUPunMFyImzPGHbqRUD99rIflQqz5a54y/+Xz78Cxt432KJWRSCg8DFQEPnAmRbgs67pQKVnHLPTc2QV4+mAVaosNTWzs5cOX9Dj21paNFVg33IlssgPWjpg/olNbidUSTlqSFobXBCh6UBKmPhzZDFY+b6KW6FxATYVi80uotXRV8mwDguVSBNLxUwvwDlLTcq3pRDnLv5wyYyKm3dS68kGcCM3QA0H6W7mIhFFnnYFmqEtRUL7dCx07bj4IcNJ66/PN8VxHH8TL80adtGyO3CTEFov9OHs72MNb5tG9lD3m/Imx8IS4yjgEdPj9hbs28/VxlDVMRRaoyFKXUSwCiE7Y0AjsrBThpltHYAdOQpJ8O/TsGXjr15dQQYhUOW8UCze7fnZyCSYnzdKowf4S9HQXYQDPnehTRAphZcjZWr6+/DE/S+s+jIDEyAGacGl6Fabn6nAZqbXZ9EtlSN5pW3eWfZFlrTTodq2vhPan1Hlt6DdHoVg5iGeXYHG56YNmvflkX1uujh/0FIaKx+xrX91+EHOOgVM8gFkCzF5egv6hCkQDXbzwTM8v2hFiVSxnQDse6CPHRMUUCOQQtLs3QCfy/6PHLttAnaD1SXZlWDxRVAW27xiA7dsHzGBBDbWOgJ3F6XekWrKxOLbQ2HwabHijcu7BaexgOiZOL3hlgyios5zXtPCPaogTohrvqUZTExh4aE1q/TLFZFiV3cVzs5aolHJ1JqD8PKALwMKPb9vQidM6EaQ8PO5kr6NOE+iU1BrIDletkqO8Zsg9p9VBwsgDxgSi9PcjWpDuRrdVZGenlw1bXKpzKDHMLoK3uZxaz57aMFQZI8siNURhggjAs867bhuBrRt7GLRLl5bI5nFv8+gf6C8zUJs29eJ1R9BArfbZjQ390pe3wTM/nYAYKQBfsZpgpFxcvN3LCaeslNfq7PDRCIiaX2go80WHg7c07Obq7CS2gsbAFVlDIGdVfccRvLzDE313y7pOtXm4HKjLyy07FO39XKUDZVcDmshWZxYarNWmvMiMDTzhrsMEZi45AE3efNmHaJC20sQBNnVxAdZRJPDaPhyKeTbufCUcaIkF0LXaRxWZ4AdPZP6+QhlTxmMz/yQPdR0dn6TqU1Suz2/bZ8ACeQMq5Tzsu28UXvzFaZw2aYQYfDactKZSNCsUhuK0pRQQYRJuxCWhh1TkXDHgxmGov7JgKmNwG9Ak7SBf3rmhG0YGi4IVglT4guxC9kyqaDy7jNRVD+wQID0BnCscdK8qUQwgW3wK6zoGpv9502Xay7ejqwTXodchv3GN2YL14mymZID0duWO/yoQazz9Ldl6n5T47Y1cUWs/GFJV9unE0SmovjnFkQWRAUo552BiX9Jivsp5VQzzdyzLV9XrS0xV3no1HM/KSSH7NMffd3cX4LrN3dBRVGm5Za9T1AUUyVvh2M/G2Rk4dmaeWTGpNT7izPTawZv/9sS9rp2pjVUqd9zz/cWXfjnm+t8hvrhQQ7V4Gfq6l0BRODFqTsRzpaxiu8HZHIJNQkaGK+/oEdQpR5PJZC5FrymvvsqhCv759l0DgBwUqmeW1DQqB9SDhjMrsXOi37bEI+KoTMp4i4wrXWvBnxzLJPQTW62e7oLaPNKJGqF09KbblGWFNLIiFDHx3DIqGw20PWM21KVyTUmyQ4AMhR3+ndG+qKkmgINLzYZgFOFN4oVCt3ffOAz5DWtIAEB8YQbCNkSWgzjqiqL0Fzz1qEBY7stys2XI5AV9Rcry3NJdNGJkLYv8pIYsexa1ObSLAOWUHROqBQBBdi1kqwS9BSeP9kvBiug7Gh4sQS+q+n3dhQxAFiFr/OrUfXOZ76+wO6p5cR5OTS7CPOoI5NEpKBeex3mrt/zfia2yXikKI03k8Fe3PY6y62EGQZuAGCKSpblVmEcjt6+yCFFfN5Oy8eA7iWu5BlOV8DO6hgjFg2Wao7TYTjt77TLTfaodZYWQd0ehSb3pWVAHysCRNWU+amhUUyDo3FwDllDOzc2HKfjUZ8BTD/9MPJ6GdZYQoD4UDRWcX+tFD02lHKaUsopFuK8DUPIeqvLk3Yjnl/mP7Mygg7sgnASOEokdQia17uaWTx6DhnrYcyxt/j4WFUYe857eDvQtliGqdKJ2Nhs6G5xBLTve0wH4sCPb+Yyh/23z+72qMkjbjH5NmrTuXQchYDppZZc0qVrqK8JgX9G9oGqrCdpxMfrtkCpRW2zGSShOG5Wfl/Yi9XehYkNup3wu8HUrttLgSHYn5JRcI+ZIOd9bRi4VQ7K0Cudmal78RMLuooTzYo/CuwHGVHb/1ifw3a8737RziS2h+2ge3VW9lSXI9XaR95b/gl2q0x0INETtRLWdmURtIHLqpxH12r7oZZ0OINghzz/EYkKPlQI/dc+d0UhSnDXVcvGb3u9AaiEge7oKoYDQCkGBbg0c+LNFIf2aoCB+x8lt4T90F1GlxK6oeHoJJ2LrrMq71aF22Ft5qg7c+uOJaqYB6cnX0C79iGTgbgUjyanT6PdLUFCyj5G2F3KMxDVMrMjn2A4few8iEF7bbYQ0hP09AOSeT2YRRijLv2PL9LvOuhjXZpzq3Csd3DwblhAOSH/ffw9aWZwEK/u+1sGccX0gyqOYjQjtLk3yFqnr1EXzl2yd+FeCanUb6roiYLf+uFot9K99wr3sWCJNHtIWDufPL0GCAp4AzLmplzgO2xTJmA+5ysV3iOn49P5TOrzbdp9gC5YWQNuDQxmkYerfgfD9VHmifpD5vqPo1PsWKO3iPWR9bRlukxn7fZ8XwkiJaAkydmTz0gJcRF8ksWIbHcyz535gAFFXtdoOmyvu+dtYOr8fEXmANEYi1ZwyfxGWPnBuch76e4vodlni/SXUStHsVg06RBgpybtsp0gezSxD2e2iFAQ+oiHMCUNgWVIt9LxRBYUjcb0FoeVa/JaCv12eFCW552GWNUVVIPMKcFPlyXvGwZvrKLCiQYsIL6DscuvnhD5GP2YR8LbURSm60gPju1KPgy9H+ahaGkET+DiZW+K1uTkUoioX+dHl6usb1EJJ8pmlnFR0VWCdYSmTu85SoKVuXyYE9iY7X1KQP8MVDu3rnd6cTKdBdb+T9O9s23kJUVcHKxox2rSnL60w9UWuT2WUdKIfvxJ1GRyukmjT+/H7tx3Gy1FXT/J+0N8QIduMZoo3oq8vR/tB0WK36fl07EfmMyonZbryhCTNUu8Nca8Zcr1qrWknGd2M09QjlRedeU+3eeYeCExCXnFTvpMILtBOEWGmghrnUDc/aE4twiTOzV2kNQDKhKObv1LrUxUVja1wlRRd7SF+DKlMf0PeIwpz81XnzqPBh6RN+yXRMhmWZ67ScYaywCyukMqGjluph3m/zReeJxm5AalDN2JIbSkEsuPEPalUAECrlgIpAmwBy5WRkl0Aaa6R/s0iAwdvPIuTqDg5eZ7UeAWeHUoAum78TKqv26V3/fth//3t2eofbh/oR5w+K10mzsVA8QsDaOlzrHpnieVPYnf/9DaaliZZljzchcqM9iDvhKfW3tOCHSXWGZ0hI86j0h3oyEFSisRDkpX8psufXVUiXtISXHs7h4Z2DvuE2ODKfA0mLiyzJujWfxdEPFZhaOTxPd/+8bfhXZKCa0iHx0b7oATIGtUo1YT6mGaJWPPGRuTQrrn+uiEo9pWxkmVUWWm3zVVhlyn/tWAsR6EnstzT80Wdvm/vKfEOUVeyvJopACCDfuZ5hvWl+bJ8kC5Kt/5uZZ1GScmhvRUhYNQPy+iHffvcEmqFmj0aeatxR6E+1Vv/rnpVVuhSdC2Zbj1Ypaiqe4FWutiXzKpEczTrCRw7Pg11nDuLF1bY1iADkZHlzZu1VyiCXZKk2UuLKp1hg5aNGlvHsk5im404pU+ktTbbl4nkfhrCvsNaUE3mW9nfSYYUpcxy7bAgEmVF6L5KkLJW51bgJFIWzr/ZNQDBsW5fsH17bema/6QissbZP9zZdwGr9TspNdSOdprPmplfhX505ZB8I62IGpOsNtMF+f5RqWunqbuz6XwFLbLInpXrS78loK1L9luCKrRkc5nckpulYtp1m0w6W9dwn9kgDtYYKStGz9CxySWooxcmKBlBH7OnP0Hq+jFcY3pPfwMTQRv/t9v7qHfHPJdTRuWnKtP0+gxWcqBcMOFpRGkUb1dvClkFHiDXyNCbEEas8g8DGJLt2Ae0HxW04Whtk77Cb5250TafDtWUlXd52YmAIgHbTmDVUWYRWKsCLLfgUIjZR2/7++qfwXtI1yTDsumVL44ewNPXXVuI69G0OEUY8y7cOF+2C8VeeaCTZRqxMNIk3TIkqa4r2Xgnuzy5KZE3gwqHUZGLp5GpncgnDezUY3tP69bGaZFHxgYyNpn33ABC73sB5TexFmKDdTQzjp0jytLmLz6wkqF9wJH9wBMI1oPwHlMe3kdSddivi7x/316qgF30b/4oJ9aFAmSOnpiGPdiYDmRZ5HPM9XWyMqLdxCcY74a212FKXEQQawmgayh4IDiCK8vnZPK3hRfF3c+CpTM/Mnl0lhPYnxE6cqNuE8QazyBFLdcZLNqAJW/Byittw/g8OY6rTrjq3wm7UnpfFEaJNEdd0E/h5V5bd09pJLWoL/PoEd+6oRt6aUqmr8K2Gq2ISZbsqpisdiiBk5QoM1kMCQN2+Nab7VvlKcXe05ln2bJ1e9DbqeumHKSaShHntQo8cMjOmkNqP3nBhNYVrIKRUxmqUIBgqXtdFNR7Te8bMErtQKODnOwcD5KY6/XDnbARD6c90uQ6zQXpmlt/Jmuj/KUwU9LXnAHH60oD/M7espwrJd0OQWghUC1lWgpUc6K1XKSykxeDvO40ACdnVuE8ejBydjsJ3n9KtSgJ46ry/sEC+ICAUcqCRo2KlbHR+G88k8sKaHfrHOza3Auljjyyx4qJvqyjDFpcCSqz4IQONiPq7AOV7myKRU+9K1NGdLWlquwrKfnVWp6iPRbRicucgqZIULmg/Xkn0De4VIsNQHYjFje7IarwgcEC+BAAo2RAw5lqCH8KxBnXHH2lDWi0l8eGNZ285Sp5r6OK2eKPPBVMcXKXgja1UyllAji8Wf5OvXe139CqGHpqamGVwAAR66OwNBcDT7GE5+fqTFWUDOtT3jZNG7j6CVWJ9n9QsFxTPrT08hc2P4LU8LBXgYFAM9tVEGgOvDzOuW9D2Ubh09wRtNKeNKxancFj36Bnk0EH9l4Qa8gmq2FXE5Uhp6zIak9eOpgM8g3LEymEmuQUnXnrPgSJlKY5PJ9DFrhkd93xngsFYUmur7Z+9Pafnn4EPqT0oQJG6eUvjO5XFMQD5s/bUtOdz7Vp1f7YngdRGdkwVIYS2W0kF2gX1JxZLEhhdMlqmJhssYlRaWFgW5qj4ZqSbn+PHLVESfQHRt0SPmK9GkGaW2mirKohULF33uaFcuEDWU1dZnWivnn7z6sH4ENMHzpglA5/eXQUba6nsLWj7p4DzYBlAHMgDvaWYA0ePZ0F01G04X7BiGv23NNm/OSCwsNVmH/HScucqExaPPAmmUieiAtmQQLJVQo9Y5OhYQYNydl5BGtyNlCUpyTL/pys8t9XqopTSfdebV7r/aaPBDCXXv/nn3mscencQ/xDp6nNuRhJmyRFj37TjtIj/R38h2MKBRzlFDCPlOc6kYsxf7WaBb7bbkLHur2CIa8pS85uCIPgRAQQr2KIvN2XNI3nn9cZ4zcuLzRgFsFaJIoCsAv8lFco2Juj0t9DhenxqBI98mHIq3bpIwWM0vH/9PtjC4ef+w42ZdTdczabDPNwrNJNPA/2FqEfHahEdQXakg6pgKmOtgIgmSIjj2kwiD1DfMvo0k6ausUZAUgCSDP4CW1mghRLIC2gtkcgzS03edGgk01hya4FCrKdh1Sl1Ddu/Wn1IHyE6SMHzCVWSLR6yMk2Sql5SA+WUU5id43nns4idJdzvGKF9oxiZsk7GdjljpEyi7GoNVHKqDOBQQDWXjPRVrRhDAFMJscKzjTMo2q+gAddUz63/ClSaWqKAFKLEO13ZrXSj9/2k1OPmQnfjzZ9bIBRQvV/VOeSR8D6ISk5OWP+hKb2ROLOdrun1MQuRfbSDgGdOA9Hdk+FNptXZifPdqo5zSSwaYEkvISyibznK0hVdRu1pITC4NZRR4Ka3N7B2c7KD609EF+49E2efvqY0scKmEvtgJMyzpy1jwZw9qwBTIdZfp2ZBMicKansWXi3UgBBsBrMb5Va/pPxHx+I4uhRBKoKH3P6RABzyQOn1eeljKPkQDLgBPDkMweif0dBKgTfmVhKKh72WSSBU+k11lmQ7a9ZHenHo2b02MdJUdn0iQIm0+H7Rh9EWfB1RGBM3pczHFlqSpzm2KY81ea+A0f4TMQ6rPQ5vKQOdt957/cXnzt44JMEylcHPmWJqI72DGHwkmSs3QK+4E2i4NbUHBMEL4cwYSG9LZNKGWfpsnOVHjQZ5g5qpb4fJdGnAiSZPnWAyUQ+ys5de8YW3z4yhtP2t+S6esbixfl3f1HaYO53G2XEPqRQvnHaqyRK4ElUJcY/bSDJ9KkGrF1CEHFWIB5NIv57WlsUe1NoC1wyF9xZJgZk1qrfVToXhzeeal48U4Ukd/CTUBw+SPr/iPebuuWXHf4AAAAASUVORK5CYII=", import.meta.url).href;
3062
+ const DEFAULT_NFT_ICON = new URL("data:image/png;base64,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", import.meta.url).href;
3063
+ function getMiniNftCdnUrl(url) {
3064
+ if (!url) return "";
3065
+ const separator = url.includes("?") ? "&" : "?";
3066
+ return `${url}${separator}x-oss-process=image/resize,m_fill,h_160,w_160`;
3067
+ }
3068
+ const TASKCHAIN_NFT_CLAIM_MESSAGES = {
3069
+ claimDialog: {
3070
+ claimNft: "Claim NFT",
3071
+ claimingNft: "Claiming NFT...",
3072
+ claimConnectingWallet: "Connecting wallet...",
3073
+ claimSwitchingNetwork: "Switching network...",
3074
+ claimGettingSignature: "Getting signature...",
3075
+ claimConfirmInWallet: "Please confirm in your wallet",
3076
+ claimTransactionPending: "Transaction pending...",
3077
+ claimSuccess: "Claim successful!",
3078
+ claimFailed: "Claim failed",
3079
+ claimCanceled: "Transaction was rejected by user.",
3080
+ viewOnExplorer: "View on Explorer",
3081
+ retry: "Retry",
3082
+ close: "Close"
3083
+ },
3084
+ pendingDialog: {
3085
+ pendingTransaction: "Pending Transaction",
3086
+ claimPendingTitle: "You have already claimed this NFT, please wait for this transaction to be confirmed.",
3087
+ claimPendingCheckExplorer: "You can check this transaction on explorer:",
3088
+ claimPendingHashLabel: "Transaction hash:",
3089
+ claimPendingClaimAgainWarn: '"Claim Again" will send a new transaction it is only recommended when you are sure there is something wrong with the current transaction.',
3090
+ claimPendingReceiveAddressNoChange: "This receive address can’t be changed:",
3091
+ claimAgain: "Claim Again",
3092
+ continueWaiting: "Continue Waiting"
3093
+ }
3094
+ };
3095
+ function RightChevronIcon({ className }) {
3096
+ return /* @__PURE__ */ jsx(
3097
+ "svg",
3098
+ {
3099
+ className,
3100
+ width: "8",
3101
+ height: "8",
3102
+ viewBox: "0 0 16 16",
3103
+ fill: "none",
3104
+ xmlns: "http://www.w3.org/2000/svg",
3105
+ children: /* @__PURE__ */ jsx(
3106
+ "path",
3107
+ {
3108
+ d: "M6 12L10 8L6 4",
3109
+ stroke: "currentColor",
3110
+ strokeWidth: "1.5",
3111
+ strokeLinecap: "round",
3112
+ strokeLinejoin: "round"
3113
+ }
3114
+ )
3115
+ }
3116
+ );
3117
+ }
3118
+ function getClaimedRewardDisplay(reward) {
3119
+ if (reward.reward_type === RewardType.Token) {
3120
+ const rewardValue = reward.reward_value;
3121
+ const icon = DEFAULT_TOKEN_ICON$1;
3122
+ const name = (rewardValue == null ? void 0 : rewardValue.token_name) || "Token";
3123
+ const rawAmount = (rewardValue == null ? void 0 : rewardValue.amount) || "0";
3124
+ const amount = formatLongNumber(Number(rawAmount) || 0) || rawAmount;
3125
+ return {
3126
+ icon,
3127
+ text: `+ ${amount} ${name}`.trim(),
3128
+ colorClass: "taskon-taskchain-claimed-text--token",
3129
+ glowClass: "taskon-taskchain-claimed-icon--glow-token"
3130
+ };
3131
+ }
3132
+ if (reward.reward_type === RewardType.GTCPoints || reward.reward_type === RewardType.Points) {
3133
+ const rewardValue = reward.reward_value;
3134
+ const icon = (rewardValue == null ? void 0 : rewardValue.points_icon) || "";
3135
+ const name = (rewardValue == null ? void 0 : rewardValue.points_name) || "Points";
3136
+ const amount = (rewardValue == null ? void 0 : rewardValue.amount) != null ? String(rewardValue.amount) : "0";
3137
+ return {
3138
+ icon,
3139
+ text: `+ ${amount} ${name}`.trim(),
3140
+ colorClass: "taskon-taskchain-claimed-text--points",
3141
+ glowClass: "taskon-taskchain-claimed-icon--glow-points"
3142
+ };
3143
+ }
3144
+ return { icon: "", text: "", colorClass: "", glowClass: "" };
3145
+ }
3146
+ function TaskChainClaimedRewards({
3147
+ rewards,
3148
+ campaignId,
3149
+ campaignType,
3150
+ tokenPrice = 0,
3151
+ rewardDisplayMode = "popup",
3152
+ rewardRedirectUrl = "",
3153
+ onClaimedNft,
3154
+ className
3155
+ }) {
3156
+ const { toast } = useToast();
3157
+ const [isTokenRewardPopupOpen, setIsTokenRewardPopupOpen] = useState(false);
3158
+ const [isViewMyNftPopupOpen, setIsViewMyNftPopupOpen] = useState(false);
3159
+ const {
3160
+ claimNftReward,
3161
+ isSupportedNftRewardType,
3162
+ dialogs: nftClaimDialogs
3163
+ } = useNftClaimFlow({
3164
+ campaignId,
3165
+ targetType: campaignType === CampaignType.Event ? "event" : "campaign",
3166
+ messages: TASKCHAIN_NFT_CLAIM_MESSAGES,
3167
+ onClaimSuccess: async () => {
3168
+ await (onClaimedNft == null ? void 0 : onClaimedNft());
3169
+ },
3170
+ onClaimError: (error) => {
3171
+ toast.error(error.message || "Failed to claim NFT");
3172
+ },
3173
+ onWalletError: (errorMessage) => {
3174
+ toast.error(errorMessage);
3175
+ }
3176
+ });
3177
+ const nftClaimedRewards = useMemo(() => {
3178
+ return rewards.filter(
3179
+ (reward) => reward.reward_type === RewardType.BMintedNft || reward.reward_type === RewardType.Nft || reward.reward_type === RewardType.Cap
3180
+ );
3181
+ }, [rewards]);
3182
+ const otherClaimedRewards = useMemo(() => {
3183
+ return rewards.filter(
3184
+ (reward) => reward.reward_type !== RewardType.BMintedNft && reward.reward_type !== RewardType.Nft && reward.reward_type !== RewardType.Cap
3185
+ );
3186
+ }, [rewards]);
3187
+ const wrapperClassName = useMemo(() => {
3188
+ return ["taskon-taskchain-claimed-rewards-wrap", className].filter(Boolean).join(" ");
3189
+ }, [className]);
3190
+ const isMultiClaimed = otherClaimedRewards.length > 1;
3191
+ const handleViewTokenReward = useCallback(() => {
3192
+ if (rewardDisplayMode === "redirect" && rewardRedirectUrl) {
3193
+ window.open(rewardRedirectUrl, "_blank", "noopener,noreferrer");
3194
+ return;
3195
+ }
3196
+ setIsTokenRewardPopupOpen(true);
3197
+ }, [rewardDisplayMode, rewardRedirectUrl]);
3198
+ const handleViewMyNft = useCallback(() => {
3199
+ if (rewardDisplayMode === "redirect" && rewardRedirectUrl) {
3200
+ window.open(rewardRedirectUrl, "_blank", "noopener,noreferrer");
3201
+ return;
3202
+ }
3203
+ setIsViewMyNftPopupOpen(true);
3204
+ }, [rewardDisplayMode, rewardRedirectUrl]);
3205
+ const handleTaskChainNftClaim = useCallback(
3206
+ async (reward) => {
3207
+ if (!isSupportedNftRewardType(reward.reward_type)) {
3208
+ return;
3209
+ }
3210
+ try {
3211
+ await claimNftReward(reward);
3212
+ } catch (error) {
3213
+ console.error("TaskChain NFT claim failed:", error);
3214
+ }
3215
+ },
3216
+ [isSupportedNftRewardType, claimNftReward]
3217
+ );
3218
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
3219
+ /* @__PURE__ */ jsxs("div", { className: wrapperClassName, children: [
3220
+ otherClaimedRewards.length > 0 && /* @__PURE__ */ jsx(
3221
+ "div",
3222
+ {
3223
+ className: `taskon-taskchain-claimed-card ${isMultiClaimed ? "taskon-taskchain-claimed-card--multi" : ""}`,
3224
+ children: otherClaimedRewards.map((reward, index) => {
3225
+ const display = getClaimedRewardDisplay(reward);
3226
+ const isToken = reward.reward_type === RewardType.Token;
3227
+ if (isToken) {
3228
+ const tokenRewardValue = reward.reward_value;
3229
+ const rawAmount = (tokenRewardValue == null ? void 0 : tokenRewardValue.amount) || "0";
3230
+ const tokenName = (tokenRewardValue == null ? void 0 : tokenRewardValue.token_name) || "Token";
3231
+ const formattedAmount = formatLongNumber(Number(rawAmount) || 0) || rawAmount;
3232
+ const usdValue = formatTokenAmount(
3233
+ Number(rawAmount) * tokenPrice,
3234
+ {
3235
+ decimals: 2
3236
+ }
3237
+ );
3238
+ const tooltipContent = /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip", children: [
3239
+ /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip-row", children: [
3240
+ /* @__PURE__ */ jsx("span", { className: "taskon-taskchain-token-tooltip-label", children: "Reward Token" }),
3241
+ /* @__PURE__ */ jsxs("span", { className: "taskon-taskchain-token-tooltip-value", children: [
3242
+ formattedAmount,
3243
+ " ",
3244
+ tokenName
3245
+ ] })
3246
+ ] }),
3247
+ /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip-row", children: [
3248
+ /* @__PURE__ */ jsx("span", { className: "taskon-taskchain-token-tooltip-label", children: "Value" }),
3249
+ /* @__PURE__ */ jsxs("span", { className: "taskon-taskchain-token-tooltip-usd", children: [
3250
+ "≈$",
3251
+ usdValue
3252
+ ] })
3253
+ ] })
3254
+ ] });
3255
+ return /* @__PURE__ */ jsx(TipPopover, { content: tooltipContent, side: "top", children: /* @__PURE__ */ jsxs(
3256
+ "button",
3257
+ {
3258
+ type: "button",
3259
+ className: `taskon-taskchain-claimed-item taskon-taskchain-claimed-item--token-trigger ${isMultiClaimed ? "taskon-taskchain-claimed-item--multi" : ""}`,
3260
+ onClick: handleViewTokenReward,
3261
+ children: [
3262
+ display.icon && /* @__PURE__ */ jsx(
3263
+ "img",
3264
+ {
3265
+ src: display.icon,
3266
+ alt: "",
3267
+ className: `taskon-taskchain-claimed-icon ${isMultiClaimed ? "taskon-taskchain-claimed-icon--multi" : ""} ${isMultiClaimed ? display.glowClass : ""}`
3268
+ }
3269
+ ),
3270
+ /* @__PURE__ */ jsxs(
3271
+ "span",
3272
+ {
3273
+ className: `taskon-taskchain-claimed-text taskon-taskchain-claimed-text--token-link ${isMultiClaimed ? "taskon-taskchain-claimed-text--multi" : ""} ${display.colorClass}`,
3274
+ children: [
3275
+ display.text,
3276
+ /* @__PURE__ */ jsx(
3277
+ RightChevronIcon,
3278
+ {
3279
+ className: `taskon-taskchain-claimed-arrow ${isMultiClaimed ? "taskon-taskchain-claimed-arrow--multi" : ""}`
3280
+ }
3281
+ )
3282
+ ]
3283
+ }
3284
+ )
3285
+ ]
3286
+ }
3287
+ ) }, index);
3288
+ }
3289
+ return /* @__PURE__ */ jsxs(
3290
+ "div",
3291
+ {
3292
+ className: `taskon-taskchain-claimed-item ${isMultiClaimed ? "taskon-taskchain-claimed-item--multi" : ""}`,
3293
+ children: [
3294
+ display.icon && /* @__PURE__ */ jsx(
3295
+ "img",
3296
+ {
3297
+ src: display.icon,
3298
+ alt: "",
3299
+ className: `taskon-taskchain-claimed-icon ${isMultiClaimed ? "taskon-taskchain-claimed-icon--multi" : ""} ${isMultiClaimed ? display.glowClass : ""}`
3300
+ }
3301
+ ),
3302
+ /* @__PURE__ */ jsx(
3303
+ "span",
3304
+ {
3305
+ className: `taskon-taskchain-claimed-text ${isMultiClaimed ? "taskon-taskchain-claimed-text--multi" : ""} ${display.colorClass}`,
3306
+ children: display.text
3307
+ }
3308
+ )
3309
+ ]
3310
+ },
3311
+ index
3312
+ );
3313
+ })
3314
+ }
3315
+ ),
3316
+ nftClaimedRewards.length > 0 && /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-list", children: nftClaimedRewards.map((reward, index) => {
3317
+ var _a;
3318
+ const nftValue = reward.reward_value;
3319
+ const rewardTypeLabel = reward.reward_type === RewardType.Cap ? "Cap" : "NFT";
3320
+ const nftName = (nftValue == null ? void 0 : nftValue.collection_name) || (nftValue == null ? void 0 : nftValue.title) || rewardTypeLabel;
3321
+ const nftImage = (nftValue == null ? void 0 : nftValue.media_type) === "video" ? "" : (nftValue == null ? void 0 : nftValue.collection_image) ? getMiniNftCdnUrl(nftValue.collection_image) : "";
3322
+ const chainIcon = (nftValue == null ? void 0 : nftValue.chain_icon) || "";
3323
+ const claimable = ((_a = reward.reward_value) == null ? void 0 : _a.claimable) ?? false;
3324
+ const isNftClaimSupported = isSupportedNftRewardType(reward.reward_type);
3325
+ const ctaLabel = claimable ? "Mint" : "View my NFT";
3326
+ return /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-card", children: [
3327
+ /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-info", children: [
3328
+ /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-image-wrap", children: [
3329
+ nftImage ? /* @__PURE__ */ jsx(
3330
+ "img",
3331
+ {
3332
+ src: nftImage,
3333
+ alt: "nft",
3334
+ className: "taskon-taskchain-claimed-nft-image"
3335
+ }
3336
+ ) : /* @__PURE__ */ jsx(
3337
+ "img",
3338
+ {
3339
+ src: DEFAULT_NFT_ICON,
3340
+ alt: "nft",
3341
+ className: "taskon-taskchain-claimed-nft-image taskon-taskchain-claimed-nft-image--fallback"
3342
+ }
3343
+ ),
3344
+ chainIcon && /* @__PURE__ */ jsx(
3345
+ "img",
3346
+ {
3347
+ src: chainIcon,
3348
+ alt: "chain",
3349
+ className: "taskon-taskchain-claimed-nft-chain"
3350
+ }
3351
+ )
3352
+ ] }),
3353
+ /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-text", children: [
3354
+ /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-label", children: rewardTypeLabel }),
3355
+ /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-name", children: nftName })
3356
+ ] })
3357
+ ] }),
3358
+ /* @__PURE__ */ jsx(
3359
+ "button",
3360
+ {
3361
+ type: "button",
3362
+ className: "taskon-taskchain-claimed-nft-btn",
3363
+ onClick: () => {
3364
+ if (!isNftClaimSupported) {
3365
+ toast.info("NFT claim is not supported for this reward type yet.");
3366
+ return;
3367
+ }
3368
+ if (!claimable) {
3369
+ handleViewMyNft();
3370
+ return;
3371
+ }
3372
+ void handleTaskChainNftClaim(reward);
3373
+ },
3374
+ children: ctaLabel
3428
3375
  }
3429
- ) })
3430
- ]
3376
+ )
3377
+ ] }, `nft-${index}`);
3378
+ }) })
3379
+ ] }),
3380
+ nftClaimDialogs,
3381
+ /* @__PURE__ */ jsx(
3382
+ RewardModuleDialog,
3383
+ {
3384
+ open: isTokenRewardPopupOpen,
3385
+ onOpenChange: setIsTokenRewardPopupOpen,
3386
+ type: "token"
3431
3387
  }
3432
- ) })
3433
- ] }) });
3388
+ ),
3389
+ /* @__PURE__ */ jsx(
3390
+ RewardModuleDialog,
3391
+ {
3392
+ open: isViewMyNftPopupOpen,
3393
+ onOpenChange: setIsViewMyNftPopupOpen,
3394
+ type: "nft"
3395
+ }
3396
+ )
3397
+ ] });
3434
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,34 +3510,6 @@ 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
3513
  function useIsMobile() {
3572
3514
  const [isMobile, setIsMobile] = useState(false);
3573
3515
  useEffect(() => {
@@ -3579,35 +3521,14 @@ function useIsMobile() {
3579
3521
  }, []);
3580
3522
  return isMobile;
3581
3523
  }
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
3524
  function TaskChainRewardStep({
3606
3525
  campaignId,
3607
3526
  campaign,
3608
3527
  userStatus,
3609
3528
  refetchUserStatus,
3610
- onClose
3529
+ onClose,
3530
+ rewardDisplayMode = "popup",
3531
+ rewardRedirectUrl = ""
3611
3532
  }) {
3612
3533
  const { client } = useTaskOnContext();
3613
3534
  const { toast } = useToast();
@@ -3642,12 +3563,6 @@ function TaskChainRewardStep({
3642
3563
  if (!(userStatus == null ? void 0 : userStatus.winner_rewards)) return [];
3643
3564
  return userStatus.winner_rewards.flatMap((r) => r.reward);
3644
3565
  }, [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
3566
  const expectedRewards = useMemo(() => {
3652
3567
  var _a;
3653
3568
  const rewards = ((_a = campaign == null ? void 0 : campaign.winner_rewards) == null ? void 0 : _a.flatMap(
@@ -3706,7 +3621,6 @@ function TaskChainRewardStep({
3706
3621
  };
3707
3622
  });
3708
3623
  }, [expectedRewards, isSpread, isMobile]);
3709
- const isMultiClaimed = otherClaimedRewards.length > 1;
3710
3624
  return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-step", ref: containerRef, children: /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-reward-content", children: [
3711
3625
  /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-title", children: "Congratulations!" }),
3712
3626
  /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-subtitle", children: "You have won" }),
@@ -3715,145 +3629,18 @@ function TaskChainRewardStep({
3715
3629
  {
3716
3630
  className: `taskon-taskchain-reward-claimed ${shouldAnimate ? "taskon-taskchain-reward-claimed--animate" : ""}`,
3717
3631
  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
- ] }),
3632
+ /* @__PURE__ */ jsx(
3633
+ TaskChainClaimedRewards,
3634
+ {
3635
+ rewards: userRewards,
3636
+ campaignId,
3637
+ campaignType: campaign == null ? void 0 : campaign.campaign_type,
3638
+ tokenPrice,
3639
+ rewardDisplayMode,
3640
+ rewardRedirectUrl,
3641
+ onClaimedNft: refetchUserStatus
3642
+ }
3643
+ ),
3857
3644
  /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-actions", children: /* @__PURE__ */ jsx(
3858
3645
  "button",
3859
3646
  {
@@ -3964,7 +3751,9 @@ function TaskChainBlindBoxStep({
3964
3751
  campaign,
3965
3752
  userStatus,
3966
3753
  refetchUserStatus,
3967
- onClose
3754
+ onClose,
3755
+ rewardDisplayMode = "popup",
3756
+ rewardRedirectUrl = ""
3968
3757
  }) {
3969
3758
  const { client } = useTaskOnContext();
3970
3759
  const { toast } = useToast();
@@ -4064,16 +3853,35 @@ function TaskChainBlindBoxStep({
4064
3853
  }
4065
3854
  }, [campaign, api]);
4066
3855
  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
- ) });
3856
+ const title = isOpenedButNotWon ? "Oops! Better Luck Next Time!" : "Congratulations!";
3857
+ const subtitle = isOpenedButNotWon ? "Rewards Missed" : "You Have Won";
3858
+ const displayRewards = emptyReward ? [emptyReward, ...userRewards] : userRewards;
3859
+ return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-step", children: /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-blindbox-result", children: [
3860
+ /* @__PURE__ */ jsx("h2", { className: "taskon-taskchain-blindbox-result-title", children: title }),
3861
+ /* @__PURE__ */ jsx("p", { className: "taskon-taskchain-blindbox-result-subtitle", children: subtitle }),
3862
+ displayRewards.length > 0 && /* @__PURE__ */ jsx(
3863
+ TaskChainClaimedRewards,
3864
+ {
3865
+ className: "taskon-taskchain-blindbox-result-rewards",
3866
+ rewards: displayRewards,
3867
+ campaignId,
3868
+ campaignType: (campaign == null ? void 0 : campaign.campaign_type) ?? CampaignType.Campaign,
3869
+ tokenPrice,
3870
+ rewardDisplayMode,
3871
+ rewardRedirectUrl,
3872
+ onClaimedNft: refetchUserStatus
3873
+ }
3874
+ ),
3875
+ /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-result-actions", children: /* @__PURE__ */ jsx(
3876
+ "button",
3877
+ {
3878
+ type: "button",
3879
+ className: "taskon-taskchain-btn taskon-taskchain-btn--secondary",
3880
+ onClick: onClose,
3881
+ children: "Back"
3882
+ }
3883
+ ) })
3884
+ ] }) });
4077
3885
  }
4078
3886
  if (userBlindBoxStatus === "wait-claim") {
4079
3887
  return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-step", children: /* @__PURE__ */ jsx(
@@ -4119,7 +3927,9 @@ function TaskChainMain({
4119
3927
  hasBlindBox,
4120
3928
  onTaskComplete,
4121
3929
  onClose,
4122
- refetchUserStatus
3930
+ refetchUserStatus,
3931
+ rewardDisplayMode,
3932
+ rewardRedirectUrl
4123
3933
  }) {
4124
3934
  const handleVerifyAttempted = useCallback(
4125
3935
  async (_taskId, success) => {
@@ -4139,7 +3949,9 @@ function TaskChainMain({
4139
3949
  campaign,
4140
3950
  userStatus,
4141
3951
  refetchUserStatus,
4142
- onClose
3952
+ onClose,
3953
+ rewardDisplayMode,
3954
+ rewardRedirectUrl
4143
3955
  }
4144
3956
  );
4145
3957
  }
@@ -4150,7 +3962,9 @@ function TaskChainMain({
4150
3962
  campaign,
4151
3963
  userStatus,
4152
3964
  refetchUserStatus,
4153
- onClose
3965
+ onClose,
3966
+ rewardDisplayMode,
3967
+ rewardRedirectUrl
4154
3968
  }
4155
3969
  );
4156
3970
  }
@@ -4280,7 +4094,7 @@ function NeedLoginMask({
4280
4094
  style: {
4281
4095
  fontSize: "18px",
4282
4096
  fontWeight: 600,
4283
- color: "var(--taskon-text-primary, #fff)",
4097
+ color: "var(--taskon-color-text)",
4284
4098
  marginBottom: "8px"
4285
4099
  },
4286
4100
  children: "Login Required"
@@ -4291,7 +4105,7 @@ function NeedLoginMask({
4291
4105
  {
4292
4106
  style: {
4293
4107
  fontSize: "14px",
4294
- color: "var(--taskon-text-secondary, #999)",
4108
+ color: "var(--taskon-color-text-secondary)",
4295
4109
  marginBottom: "24px",
4296
4110
  maxWidth: "300px",
4297
4111
  lineHeight: 1.5
@@ -4308,8 +4122,8 @@ function NeedLoginMask({
4308
4122
  padding: "12px 32px",
4309
4123
  fontSize: "14px",
4310
4124
  fontWeight: 600,
4311
- color: "#000",
4312
- backgroundColor: "#cbff01",
4125
+ color: "var(--taskon-color-text-on-primary)",
4126
+ backgroundColor: "var(--taskon-color-primary)",
4313
4127
  border: "none",
4314
4128
  borderRadius: "8px",
4315
4129
  cursor: "pointer",
@@ -4340,7 +4154,9 @@ function TaskChainDetail({
4340
4154
  onStepChange,
4341
4155
  onTaskComplete,
4342
4156
  onClose,
4343
- refetchUserStatus
4157
+ refetchUserStatus,
4158
+ rewardDisplayMode,
4159
+ rewardRedirectUrl
4344
4160
  }) {
4345
4161
  var _a, _b;
4346
4162
  const { isLoggedIn, requestLogin, client } = useTaskOnContext();
@@ -4459,7 +4275,9 @@ function TaskChainDetail({
4459
4275
  hasBlindBox,
4460
4276
  onTaskComplete,
4461
4277
  onClose,
4462
- refetchUserStatus
4278
+ refetchUserStatus,
4279
+ rewardDisplayMode,
4280
+ rewardRedirectUrl
4463
4281
  }
4464
4282
  );
4465
4283
  };
@@ -4560,6 +4378,7 @@ function BottomDialog({
4560
4378
  top = "16vh",
4561
4379
  showCloseButton = true
4562
4380
  }) {
4381
+ const portalContainer = useTaskOnPortalContainer();
4563
4382
  const [mounted, setMounted] = useState(false);
4564
4383
  const [isExiting, setIsExiting] = useState(false);
4565
4384
  const exitTimerRef = useRef(null);
@@ -4629,14 +4448,19 @@ function BottomDialog({
4629
4448
  }
4630
4449
  )
4631
4450
  ] });
4632
- return createPortal(dialog, document.body);
4451
+ if (!portalContainer) {
4452
+ return null;
4453
+ }
4454
+ return createPortal(dialog, portalContainer);
4633
4455
  }
4634
4456
  function TaskChainDialog({
4635
4457
  campaignId,
4636
4458
  open,
4637
4459
  onClose,
4638
4460
  onUpdate,
4639
- defaultStepIndex
4461
+ defaultStepIndex,
4462
+ rewardDisplayMode,
4463
+ rewardRedirectUrl
4640
4464
  }) {
4641
4465
  var _a, _b;
4642
4466
  const {
@@ -4718,12 +4542,14 @@ function TaskChainDialog({
4718
4542
  onStepChange: handleStepChange,
4719
4543
  onTaskComplete: handleTaskComplete,
4720
4544
  onClose,
4721
- refetchUserStatus
4545
+ refetchUserStatus,
4546
+ rewardDisplayMode,
4547
+ rewardRedirectUrl
4722
4548
  }
4723
4549
  )
4724
4550
  ] }) });
4725
4551
  }
4726
- function SectorItem({
4552
+ function SectorItemComponent({
4727
4553
  sector,
4728
4554
  showSectorName = true,
4729
4555
  showSectorDescription = true,
@@ -4735,7 +4561,8 @@ function SectorItem({
4735
4561
  onTaskChainOpen,
4736
4562
  onEligTaskClick,
4737
4563
  coolDownMap,
4738
- onCoolDownComplete
4564
+ onCoolDownComplete,
4565
+ onDoneCountdownComplete
4739
4566
  }) {
4740
4567
  const hasPeriodicTask = useMemo(() => {
4741
4568
  return sector.cards.some((card) => {
@@ -4808,10 +4635,11 @@ function SectorItem({
4808
4635
  var _a;
4809
4636
  return onClaimTask(taskInfo.id, token, (_a = taskInfo.template) == null ? void 0 : _a.platform);
4810
4637
  } : void 0,
4811
- onUpdate,
4638
+ onUpdate: onUpdate ? () => onUpdate(taskInfo.id) : void 0,
4812
4639
  onEligTaskClick,
4813
4640
  coolDown: coolDownMap == null ? void 0 : coolDownMap[taskInfo.id],
4814
- onCoolDownComplete: onCoolDownComplete ? () => onCoolDownComplete(taskInfo.id) : void 0
4641
+ onCoolDownComplete: onCoolDownComplete ? () => onCoolDownComplete(taskInfo.id) : void 0,
4642
+ onDoneCountdownComplete
4815
4643
  }
4816
4644
  ) }, key);
4817
4645
  }
@@ -4844,7 +4672,8 @@ function SectorItem({
4844
4672
  task: taskInfo,
4845
4673
  userStatus: card.user_status,
4846
4674
  onClick: () => onTaskClick == null ? void 0 : onTaskClick(card),
4847
- onEligTaskClick
4675
+ onEligTaskClick,
4676
+ onDoneCountdownComplete
4848
4677
  }
4849
4678
  ) }, key);
4850
4679
  }
@@ -4853,6 +4682,7 @@ function SectorItem({
4853
4682
  ] })
4854
4683
  ] });
4855
4684
  }
4685
+ const SectorItem = React__default.memo(SectorItemComponent);
4856
4686
  const RECURRENCE_LABEL_MAP = {
4857
4687
  Once: "Once",
4858
4688
  Daily: "Daily",
@@ -5069,9 +4899,19 @@ function formatDateTime(timestamp) {
5069
4899
  }
5070
4900
  function formatCountdown(diff) {
5071
4901
  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);
4902
+ if (diff / (1e3 * 60 * 60) > 24) {
4903
+ const day2 = 24 * 60 * 60 * 1e3;
4904
+ const days = Math.ceil(diff / day2);
4905
+ return `${days} day${days > 1 ? "s" : ""}`;
4906
+ }
4907
+ const day = 24 * 60 * 60 * 1e3;
4908
+ const hour = 60 * 60 * 1e3;
4909
+ const minute = 60 * 1e3;
4910
+ const second = 1e3;
4911
+ const normalizedDiff = Math.abs(diff);
4912
+ const hours = Math.floor(normalizedDiff % day / hour);
4913
+ const minutes = Math.floor(normalizedDiff % hour / minute);
4914
+ const seconds = Math.floor(normalizedDiff % minute / second);
5075
4915
  const prefix2 = (n) => String(n).padStart(2, "0");
5076
4916
  return `${prefix2(hours)}:${prefix2(minutes)}:${prefix2(seconds)}`;
5077
4917
  }
@@ -5088,6 +4928,7 @@ function DialogRewardCard({
5088
4928
  chainType,
5089
4929
  onBindFailed,
5090
4930
  renderStatus,
4931
+ renderStatusPrefix,
5091
4932
  hideClaimButton = false,
5092
4933
  verifyClaim,
5093
4934
  isPeriodic = false,
@@ -5122,7 +4963,7 @@ function DialogRewardCard({
5122
4963
  const renderPeriodicCountdown = useCallback(() => {
5123
4964
  if (!showPeriodicCountdown) return null;
5124
4965
  return /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-periodic-done", children: [
5125
- /* @__PURE__ */ jsx("span", { children: "Done Today" }),
4966
+ /* @__PURE__ */ jsx("span", { children: "Done for today" }),
5126
4967
  /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-periodic-done__line" }),
5127
4968
  /* @__PURE__ */ jsx("span", { children: "Continue in" }),
5128
4969
  /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-periodic-done__time", children: countdownLabel })
@@ -5203,6 +5044,8 @@ function DialogRewardCard({
5203
5044
  }
5204
5045
  ) });
5205
5046
  };
5047
+ const statusPrefixNode = renderStatusPrefix == null ? void 0 : renderStatusPrefix();
5048
+ const statusNode = showPeriodicCountdown ? renderPeriodicCountdown() : renderStatus ? renderStatus() : renderDefaultStatus();
5206
5049
  return /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-reward-card", children: [
5207
5050
  claimLimit > 0 && /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-max-claim", children: [
5208
5051
  "Max. Claims",
@@ -5211,7 +5054,10 @@ function DialogRewardCard({
5211
5054
  ] }),
5212
5055
  /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-label-row", children: [
5213
5056
  /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-rewards-label", children: "🎁 Rewards" }),
5214
- showPeriodicCountdown ? renderPeriodicCountdown() : renderStatus ? renderStatus() : renderDefaultStatus()
5057
+ (statusPrefixNode || statusNode) && /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-label-right", children: [
5058
+ statusPrefixNode,
5059
+ statusNode
5060
+ ] })
5215
5061
  ] }),
5216
5062
  renderRewardContent(),
5217
5063
  renderClaimArea(),
@@ -5264,6 +5110,10 @@ function BaseDialogLayout({
5264
5110
  claimLimit,
5265
5111
  reward,
5266
5112
  isWon,
5113
+ eligibilityTask,
5114
+ eligibilityConditions,
5115
+ onEligibilityCheck,
5116
+ onEligTaskClick,
5267
5117
  coolDown,
5268
5118
  onCoolDownComplete,
5269
5119
  isSubmitting,
@@ -5272,6 +5122,7 @@ function BaseDialogLayout({
5272
5122
  chainType,
5273
5123
  onBindFailed,
5274
5124
  renderStatus,
5125
+ renderStatusPrefix,
5275
5126
  hideClaimButton,
5276
5127
  verifyClaim,
5277
5128
  hideRewardCard = false,
@@ -5283,7 +5134,12 @@ function BaseDialogLayout({
5283
5134
  showCloseIn = false,
5284
5135
  onCloseInClose
5285
5136
  }) {
5137
+ var _a;
5286
5138
  const recurrenceLabel = getRecurrenceLabel(recurrence);
5139
+ const shouldShowEligibilityMask = Boolean(
5140
+ ((_a = eligibilityTask == null ? void 0 : eligibilityTask.eligiblity) == null ? void 0 : _a.length) && (eligibilityConditions == null ? void 0 : eligibilityConditions.length)
5141
+ );
5142
+ const leftPanelClassName = shouldShowEligibilityMask ? "taskon-task-dialog-left taskon-task-dialog-left--mask-active" : "taskon-task-dialog-left";
5287
5143
  const renderValidTime = () => {
5288
5144
  if (!(validTime == null ? void 0 : validTime.endTime)) return null;
5289
5145
  if (validTime.isExpired) {
@@ -5297,7 +5153,16 @@ function BaseDialogLayout({
5297
5153
  /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-valid-time-value", children: validTime.endTime })
5298
5154
  ] });
5299
5155
  };
5300
- return /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-left", children: [
5156
+ return /* @__PURE__ */ jsxs("div", { className: leftPanelClassName, children: [
5157
+ shouldShowEligibilityMask && eligibilityTask && eligibilityConditions && /* @__PURE__ */ jsx(
5158
+ UserEligibilityMask,
5159
+ {
5160
+ task: eligibilityTask,
5161
+ conditions: eligibilityConditions,
5162
+ onCheck: onEligibilityCheck,
5163
+ onTaskClick: onEligTaskClick
5164
+ }
5165
+ ),
5301
5166
  /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-main", children: [
5302
5167
  !noRecurrence && /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-recurrence", children: recurrenceLabel }),
5303
5168
  titleLink ? /* @__PURE__ */ jsx(
@@ -5328,6 +5193,7 @@ function BaseDialogLayout({
5328
5193
  chainType,
5329
5194
  onBindFailed,
5330
5195
  renderStatus,
5196
+ renderStatusPrefix,
5331
5197
  hideClaimButton,
5332
5198
  verifyClaim,
5333
5199
  isPeriodic,
@@ -5350,6 +5216,9 @@ function parseTemplateParams(params) {
5350
5216
  function TemplateDialogContent({
5351
5217
  task,
5352
5218
  taskInfo,
5219
+ eligibilityConditions,
5220
+ onEligibilityCheck,
5221
+ onEligTaskClick,
5353
5222
  onClaimSuccess,
5354
5223
  showCloseIn,
5355
5224
  onCloseInClose,
@@ -5481,6 +5350,10 @@ function TemplateDialogContent({
5481
5350
  claimLimit: info.claim_limit,
5482
5351
  reward,
5483
5352
  isWon: state.isWon,
5353
+ eligibilityTask: info,
5354
+ eligibilityConditions,
5355
+ onEligibilityCheck,
5356
+ onEligTaskClick,
5484
5357
  coolDown,
5485
5358
  onCoolDownComplete: handleCoolDownComplete,
5486
5359
  isSubmitting,
@@ -5498,9 +5371,9 @@ function TemplateDialogContent({
5498
5371
  showCloseIn,
5499
5372
  onCloseInClose,
5500
5373
  children: [
5374
+ validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
5501
5375
  /* @__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 }),
5376
+ params.desc && /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }),
5504
5377
  (_d = params.desc_fields) == null ? void 0 : _d.filter((field) => !field.display || field.display !== "card").map((field, index) => {
5505
5378
  const label = field.key === "open_post_link" ? void 0 : field.key;
5506
5379
  return /* @__PURE__ */ jsx(
@@ -5515,7 +5388,6 @@ function TemplateDialogContent({
5515
5388
  );
5516
5389
  })
5517
5390
  ] }),
5518
- validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
5519
5391
  params.action_label && !state.isWon && /* @__PURE__ */ jsxs(
5520
5392
  "button",
5521
5393
  {
@@ -5747,6 +5619,9 @@ function parsePowParams(params) {
5747
5619
  function PowTaskDialogContent({
5748
5620
  task,
5749
5621
  taskInfo,
5622
+ eligibilityConditions,
5623
+ onEligibilityCheck,
5624
+ onEligTaskClick,
5750
5625
  onClaimSuccess,
5751
5626
  showCloseIn,
5752
5627
  onCloseInClose
@@ -5768,6 +5643,7 @@ function PowTaskDialogContent({
5768
5643
  }, [(_b = info == null ? void 0 : info.template) == null ? void 0 : _b.params]);
5769
5644
  const state = useTaskState(info, userStatus);
5770
5645
  const reward = useTaskReward(info);
5646
+ const validTime = useTaskTime(info);
5771
5647
  const { submitTask, isSubmitting } = useSubmitTask(
5772
5648
  (info == null ? void 0 : info.id) ?? 0,
5773
5649
  onClaimSuccess,
@@ -5923,9 +5799,14 @@ function PowTaskDialogContent({
5923
5799
  recurrence: info.recurrence,
5924
5800
  title: info.name,
5925
5801
  titleLink: params.task_url,
5802
+ validTime,
5926
5803
  claimLimit: info.claim_limit,
5927
5804
  reward,
5928
5805
  isWon: state.isWon,
5806
+ eligibilityTask: info,
5807
+ eligibilityConditions,
5808
+ onEligibilityCheck,
5809
+ onEligTaskClick,
5929
5810
  coolDown: 0,
5930
5811
  renderStatus: renderReviewStatus,
5931
5812
  hideClaimButton: true,
@@ -5937,7 +5818,7 @@ function PowTaskDialogContent({
5937
5818
  showCloseIn,
5938
5819
  onCloseInClose,
5939
5820
  children: [
5940
- params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) }),
5821
+ params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) }),
5941
5822
  renderInputArea(),
5942
5823
  renderActionButton()
5943
5824
  ]
@@ -5954,6 +5835,9 @@ function parseParams$1(params) {
5954
5835
  function ContractInteractiveDialogContent({
5955
5836
  task,
5956
5837
  taskInfo,
5838
+ eligibilityConditions,
5839
+ onEligibilityCheck,
5840
+ onEligTaskClick,
5957
5841
  onClaimSuccess,
5958
5842
  showCloseIn,
5959
5843
  onCloseInClose,
@@ -5979,6 +5863,7 @@ function ContractInteractiveDialogContent({
5979
5863
  }, [(_b = info == null ? void 0 : info.template) == null ? void 0 : _b.params]);
5980
5864
  const state = useTaskState(info, userStatus);
5981
5865
  const reward = useTaskReward(info);
5866
+ const validTime = useTaskTime(info);
5982
5867
  const { submitTask, isSubmitting } = useSubmitTask(
5983
5868
  (info == null ? void 0 : info.id) ?? 0,
5984
5869
  onClaimSuccess,
@@ -6044,9 +5929,14 @@ function ContractInteractiveDialogContent({
6044
5929
  {
6045
5930
  recurrence: info.recurrence,
6046
5931
  title: info.name,
5932
+ validTime,
6047
5933
  claimLimit: info.claim_limit,
6048
5934
  reward,
6049
5935
  isWon: state.isWon,
5936
+ eligibilityTask: info,
5937
+ eligibilityConditions,
5938
+ onEligibilityCheck,
5939
+ onEligTaskClick,
6050
5940
  coolDown,
6051
5941
  onCoolDownComplete: handleCoolDownComplete,
6052
5942
  isSubmitting,
@@ -6062,8 +5952,8 @@ function ContractInteractiveDialogContent({
6062
5952
  showCloseIn,
6063
5953
  onCloseInClose,
6064
5954
  children: [
6065
- params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) }),
6066
5955
  validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
5956
+ params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) }),
6067
5957
  params.task_url && !state.isWon && /* @__PURE__ */ jsx(
6068
5958
  "button",
6069
5959
  {
@@ -6085,18 +5975,12 @@ function parseParams(params) {
6085
5975
  return {};
6086
5976
  }
6087
5977
  }
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
5978
  function SwapDexDialogContent({
6098
5979
  task,
6099
5980
  taskInfo,
5981
+ eligibilityConditions,
5982
+ onEligibilityCheck,
5983
+ onEligTaskClick,
6100
5984
  onClaimSuccess,
6101
5985
  showCloseIn,
6102
5986
  onCloseInClose,
@@ -6107,7 +5991,7 @@ function SwapDexDialogContent({
6107
5991
  var _a, _b, _c;
6108
5992
  const userStatus = task.user_status;
6109
5993
  const { showToast } = useToast();
6110
- const { getChainType } = useChainMap();
5994
+ const { getChainType, chainMap } = useChainMap();
6111
5995
  const { communityInfo } = useTaskOnContext();
6112
5996
  const totalEarned = ((_a = userStatus == null ? void 0 : userStatus.total_point) == null ? void 0 : _a.amount) ?? 0;
6113
5997
  const rawInfo = taskInfo ?? task.card_info;
@@ -6122,6 +6006,7 @@ function SwapDexDialogContent({
6122
6006
  }, [(_b = info == null ? void 0 : info.template) == null ? void 0 : _b.params]);
6123
6007
  const state = useTaskState(info, userStatus);
6124
6008
  const reward = useTaskReward(info);
6009
+ const validTime = useTaskTime(info);
6125
6010
  const { submitTask, isSubmitting } = useSubmitTask(
6126
6011
  (info == null ? void 0 : info.id) ?? 0,
6127
6012
  onClaimSuccess,
@@ -6133,18 +6018,33 @@ function SwapDexDialogContent({
6133
6018
  );
6134
6019
  const coolDown = sharedCoolDown ?? localCoolDown;
6135
6020
  const isFixedRule = params.is_fixed_reward_type;
6021
+ const rulePointName = reward.name || "Points";
6022
+ const ruleMaxText = useMemo(() => {
6023
+ if (typeof params.swap_receive_max_points === "number" && params.swap_receive_max_points >= 0) {
6024
+ return `(Max ${params.swap_receive_max_points} ${rulePointName})`;
6025
+ }
6026
+ return "";
6027
+ }, [params.swap_receive_max_points, rulePointName]);
6028
+ const hasRulesText = useMemo(() => {
6029
+ return Boolean(params.each_trading_volume && params.each_receive_points);
6030
+ }, [params.each_trading_volume, params.each_receive_points]);
6031
+ const chainLabel = useMemo(() => {
6032
+ var _a2;
6033
+ if (!params.chain) return "";
6034
+ return ((_a2 = chainMap[params.chain.toLowerCase()]) == null ? void 0 : _a2.label) || params.chain;
6035
+ }, [chainMap, params.chain]);
6136
6036
  const titleExpress = useMemo(() => {
6137
6037
  return getSwapDexTitleExpress({
6138
6038
  tokenOutList: params.token_out_list,
6139
6039
  tokenInList: params.token_in_list,
6140
- chainLabel: params.chain || "",
6040
+ chainLabel,
6141
6041
  dexName: (info == null ? void 0 : info.project_name) || (communityInfo == null ? void 0 : communityInfo.name) || "DEX",
6142
6042
  dexLink: params.task_url,
6143
6043
  isFixedReward: params.is_fixed_reward_type || false,
6144
6044
  minTradingVolume: params.min_trading_volume,
6145
6045
  minTradesTimes: params.min_trades_times
6146
6046
  });
6147
- }, [params, info == null ? void 0 : info.project_name, communityInfo == null ? void 0 : communityInfo.name]);
6047
+ }, [params, chainLabel, info == null ? void 0 : info.project_name, communityInfo == null ? void 0 : communityInfo.name]);
6148
6048
  const fromTokenDisplay = useMemo(
6149
6049
  () => formatSwapTokensForDisplay(params.token_out_list),
6150
6050
  [params.token_out_list]
@@ -6153,10 +6053,6 @@ function SwapDexDialogContent({
6153
6053
  () => formatSwapTokensForDisplay(params.token_in_list),
6154
6054
  [params.token_in_list]
6155
6055
  );
6156
- const rulesText = useMemo(() => {
6157
- if (isFixedRule) return "";
6158
- return generateRulesText(params, reward.name || "points");
6159
- }, [isFixedRule, params, reward.name]);
6160
6056
  const validationTimeFrame = useMemo(() => {
6161
6057
  if (!(info == null ? void 0 : info.template)) return void 0;
6162
6058
  const { class_type, is_hold } = info.template;
@@ -6210,12 +6106,9 @@ function SwapDexDialogContent({
6210
6106
  window.open(params.task_url, "_blank");
6211
6107
  }
6212
6108
  }, [params.task_url]);
6213
- const renderRewardStatus = useCallback(() => {
6214
- if (state.isWon) {
6215
- return /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-won", children: "Won" });
6216
- }
6109
+ const renderRewardStatusPrefix = useCallback(() => {
6217
6110
  if (isDynamicTimes) {
6218
- const currentTimes = (userStatus == null ? void 0 : userStatus.current_trades_times) ?? "--";
6111
+ const currentTimes = (userStatus == null ? void 0 : userStatus.current_trades_times) && userStatus.current_trades_times > 0 ? userStatus.current_trades_times : "--";
6219
6112
  const minTimes = params.min_trades_times ?? 0;
6220
6113
  return /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-progress", children: [
6221
6114
  /* @__PURE__ */ jsx("span", { className: "taskon-swap-dialog-progress-current", children: currentTimes }),
@@ -6227,14 +6120,9 @@ function SwapDexDialogContent({
6227
6120
  ] });
6228
6121
  }
6229
6122
  return null;
6230
- }, [
6231
- state.isWon,
6232
- isDynamicTimes,
6233
- userStatus == null ? void 0 : userStatus.current_trades_times,
6234
- params.min_trades_times
6235
- ]);
6123
+ }, [isDynamicTimes, userStatus == null ? void 0 : userStatus.current_trades_times, params.min_trades_times]);
6236
6124
  const renderFixedModeContent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
6237
- params.chain && /* @__PURE__ */ jsx(CardField, { label: "Chain: ", value: params.chain }),
6125
+ params.chain && /* @__PURE__ */ jsx(CardField, { label: "Chain: ", value: chainLabel }),
6238
6126
  params.token_out_list && params.token_out_list.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
6239
6127
  /* @__PURE__ */ jsx(CardField, { label: "Swap From: ", value: fromTokenDisplay }),
6240
6128
  params.token_out_list.filter(
@@ -6265,17 +6153,30 @@ function SwapDexDialogContent({
6265
6153
  ] }),
6266
6154
  params.desc && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
6267
6155
  /* @__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 }) })
6156
+ /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) })
6269
6157
  ] })
6270
6158
  ] });
6271
6159
  const renderDynamicModeContent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
6272
- rulesText && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
6160
+ hasRulesText && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
6273
6161
  /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-title", children: "Rules" }),
6274
- /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: rulesText })
6162
+ /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section-content taskon-swap-dialog-section-content--rules", children: [
6163
+ /* @__PURE__ */ jsx("span", { children: "Every" }),
6164
+ /* @__PURE__ */ jsxs("span", { className: "taskon-swap-dialog-rules-highlight", children: [
6165
+ "$",
6166
+ params.each_trading_volume || "0",
6167
+ " USD"
6168
+ ] }),
6169
+ /* @__PURE__ */ jsx("span", { children: "will give you" }),
6170
+ /* @__PURE__ */ jsx("span", { className: "taskon-swap-dialog-rules-highlight", children: params.each_receive_points }),
6171
+ /* @__PURE__ */ jsxs("span", { className: "taskon-swap-dialog-rules-point-name", children: [
6172
+ rulePointName,
6173
+ ruleMaxText && /* @__PURE__ */ jsx("span", { className: "taskon-swap-dialog-rules-max", children: ruleMaxText })
6174
+ ] })
6175
+ ] })
6275
6176
  ] }),
6276
6177
  params.desc && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
6277
6178
  /* @__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 }) })
6179
+ /* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) })
6279
6180
  ] })
6280
6181
  ] });
6281
6182
  if (!info) {
@@ -6286,16 +6187,21 @@ function SwapDexDialogContent({
6286
6187
  {
6287
6188
  recurrence: info.recurrence,
6288
6189
  title: /* @__PURE__ */ jsx(TitleExpress, { express: titleExpress }),
6190
+ validTime,
6289
6191
  claimLimit: info.claim_limit,
6290
6192
  reward,
6291
6193
  isWon: state.isWon,
6194
+ eligibilityTask: info,
6195
+ eligibilityConditions,
6196
+ onEligibilityCheck,
6197
+ onEligTaskClick,
6292
6198
  coolDown,
6293
6199
  onCoolDownComplete: handleCoolDownComplete,
6294
6200
  isSubmitting,
6295
6201
  onClaim: handleClaim,
6296
6202
  chainType: requiredChainType,
6297
6203
  onBindFailed: handleBindFailed,
6298
- renderStatus: renderRewardStatus,
6204
+ renderStatusPrefix: renderRewardStatusPrefix,
6299
6205
  verifyClaim: true,
6300
6206
  isPeriodic: state.isPeriodic,
6301
6207
  nextTime: userStatus == null ? void 0 : userStatus.next_time,
@@ -6305,8 +6211,8 @@ function SwapDexDialogContent({
6305
6211
  showCloseIn,
6306
6212
  onCloseInClose,
6307
6213
  children: [
6308
- /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: isFixedRule ? renderFixedModeContent() : renderDynamicModeContent() }),
6309
6214
  validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
6215
+ /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: isFixedRule ? renderFixedModeContent() : renderDynamicModeContent() }),
6310
6216
  params.task_url && !state.isWon && /* @__PURE__ */ jsx(
6311
6217
  "button",
6312
6218
  {
@@ -6344,6 +6250,9 @@ function getDialogContentComponent$1(templateId) {
6344
6250
  function TaskDialogContent({
6345
6251
  task,
6346
6252
  taskInfo,
6253
+ eligibilityConditions,
6254
+ onEligibilityCheck,
6255
+ onEligTaskClick,
6347
6256
  onClaimSuccess,
6348
6257
  showCloseIn,
6349
6258
  onCloseInClose,
@@ -6362,6 +6271,9 @@ function TaskDialogContent({
6362
6271
  {
6363
6272
  task,
6364
6273
  taskInfo: info,
6274
+ eligibilityConditions,
6275
+ onEligibilityCheck,
6276
+ onEligTaskClick,
6365
6277
  onClaimSuccess,
6366
6278
  showCloseIn,
6367
6279
  onCloseInClose,
@@ -6413,7 +6325,7 @@ function DialogError({
6413
6325
  )
6414
6326
  ] });
6415
6327
  }
6416
- function TaskDialog(props) {
6328
+ function TaskDialogComponent(props) {
6417
6329
  var _a;
6418
6330
  const {
6419
6331
  task,
@@ -6423,6 +6335,8 @@ function TaskDialog(props) {
6423
6335
  renderContent,
6424
6336
  rightSlot,
6425
6337
  coolDownMap,
6338
+ onTaskRefresh,
6339
+ onEligTaskClick,
6426
6340
  onCoolDownUpdate,
6427
6341
  onCoolDownComplete
6428
6342
  } = props;
@@ -6453,10 +6367,29 @@ function TaskDialog(props) {
6453
6367
  },
6454
6368
  [onClose]
6455
6369
  );
6456
- const handleClaimSuccess = useCallback(() => {
6370
+ const handleClaimSuccess = useCallback(async () => {
6371
+ const targetTaskId = taskInfo == null ? void 0 : taskInfo.id;
6457
6372
  setJustVerified(true);
6458
- onClaimSuccess == null ? void 0 : onClaimSuccess();
6459
- }, [onClaimSuccess]);
6373
+ if (targetTaskId) {
6374
+ await (onClaimSuccess == null ? void 0 : onClaimSuccess(targetTaskId));
6375
+ return;
6376
+ }
6377
+ if (taskId) {
6378
+ await (onClaimSuccess == null ? void 0 : onClaimSuccess(taskId));
6379
+ }
6380
+ }, [onClaimSuccess, taskInfo == null ? void 0 : taskInfo.id, taskId]);
6381
+ const handleEligibilityCheck = useCallback(async () => {
6382
+ const targetTaskId = (taskInfo == null ? void 0 : taskInfo.id) ?? taskId;
6383
+ if (!targetTaskId) {
6384
+ return;
6385
+ }
6386
+ if (onTaskRefresh) {
6387
+ await onTaskRefresh(targetTaskId);
6388
+ }
6389
+ if (!task) {
6390
+ await refetch();
6391
+ }
6392
+ }, [taskInfo == null ? void 0 : taskInfo.id, taskId, onTaskRefresh, task, refetch]);
6460
6393
  const DialogContentComponent = useMemo(() => {
6461
6394
  var _a2;
6462
6395
  const templateId = (_a2 = taskInfo == null ? void 0 : taskInfo.template) == null ? void 0 : _a2.template_id;
@@ -6475,6 +6408,7 @@ function TaskDialog(props) {
6475
6408
  title: dialogTitle,
6476
6409
  description: "查看任务详情和奖励信息",
6477
6410
  showCloseButton: true,
6411
+ bodyPadding: false,
6478
6412
  contentClassName: "taskon-task-dialog",
6479
6413
  maxWidth: rightSlot ? 800 : 480,
6480
6414
  children: [
@@ -6489,6 +6423,9 @@ function TaskDialog(props) {
6489
6423
  onClaimSuccess: handleClaimSuccess,
6490
6424
  showCloseIn: justVerified,
6491
6425
  onCloseInClose: onClose,
6426
+ eligibilityConditions: taskData.meet_conditions,
6427
+ onEligibilityCheck: handleEligibilityCheck,
6428
+ onEligTaskClick,
6492
6429
  coolDown: (taskInfo == null ? void 0 : taskInfo.id) ? coolDownMap == null ? void 0 : coolDownMap[taskInfo.id] : void 0,
6493
6430
  onCoolDownUpdate: (taskInfo == null ? void 0 : taskInfo.id) && onCoolDownUpdate ? (coolDown) => onCoolDownUpdate(taskInfo.id, coolDown) : void 0,
6494
6431
  onCoolDownComplete: (taskInfo == null ? void 0 : taskInfo.id) && onCoolDownComplete ? () => onCoolDownComplete(taskInfo.id) : void 0
@@ -6500,6 +6437,7 @@ function TaskDialog(props) {
6500
6437
  }
6501
6438
  );
6502
6439
  }
6440
+ const TaskDialog = React__default.memo(TaskDialogComponent);
6503
6441
  function mergeCommunityTaskConfig(props, cloud) {
6504
6442
  var _a, _b, _c, _d, _e;
6505
6443
  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 +6446,56 @@ function mergeCommunityTaskConfig(props, cloud) {
6508
6446
  showSectorTab: props.showSectorTab ?? ((_b = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _b.showSectorTab) ?? true,
6509
6447
  showSectorName: props.showSectorName ?? ((_c = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _c.showSectorName) ?? true,
6510
6448
  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
6449
+ showSectorReward: props.showSectorReward ?? ((_e = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _e.showSectorReward) ?? true,
6450
+ rewardDisplayMode: props.rewardDisplayMode ?? (cloud == null ? void 0 : cloud.rewardDisplayMode) ?? "popup",
6451
+ rewardRedirectUrl: props.rewardRedirectUrl ?? (cloud == null ? void 0 : cloud.rewardRedirectUrl) ?? ""
6512
6452
  };
6513
6453
  }
6454
+ function findTaskByIdFromCards(data, taskId) {
6455
+ for (const sectorItem of data) {
6456
+ const found = sectorItem.cards.find((card) => card.card_info.id === taskId);
6457
+ if (found) {
6458
+ return found;
6459
+ }
6460
+ }
6461
+ return null;
6462
+ }
6463
+ function parsePreTaskIdFromEligibilityParams(params) {
6464
+ try {
6465
+ const parsed = JSON.parse(params);
6466
+ const taskId = Number(parsed.task_id);
6467
+ if (Number.isInteger(taskId) && taskId > 0) {
6468
+ return taskId;
6469
+ }
6470
+ } catch {
6471
+ }
6472
+ return null;
6473
+ }
6514
6474
  function CommunityTaskList(props) {
6515
- const { widgetId } = props;
6475
+ const { widgetId, themeMode } = props;
6516
6476
  const { functionConfig, cloudTheme, isConfigLoading, configError } = useResolvedWidgetConfig(widgetId);
6517
6477
  const mergedConfig = useMemo(() => {
6518
6478
  return mergeCommunityTaskConfig(
6519
6479
  props,
6520
6480
  functionConfig ?? null
6521
6481
  );
6522
- }, [props.sectorIds, props.showSectorTab, props.showSectorName, props.showSectorDescription, props.showSectorReward, functionConfig]);
6482
+ }, [
6483
+ props.sectorIds,
6484
+ props.showSectorTab,
6485
+ props.showSectorName,
6486
+ props.showSectorDescription,
6487
+ props.showSectorReward,
6488
+ props.rewardDisplayMode,
6489
+ props.rewardRedirectUrl,
6490
+ functionConfig
6491
+ ]);
6523
6492
  return /* @__PURE__ */ jsx(
6524
6493
  WidgetShell,
6525
6494
  {
6526
6495
  widgetId,
6527
6496
  isConfigLoading,
6528
6497
  cloudTheme,
6498
+ themeMode,
6529
6499
  className: "taskon-community-list",
6530
6500
  errorMessage: configError ?? void 0,
6531
6501
  children: /* @__PURE__ */ jsx(
@@ -6536,7 +6506,9 @@ function CommunityTaskList(props) {
6536
6506
  showSectorTab: mergedConfig.showSectorTab,
6537
6507
  showSectorName: mergedConfig.showSectorName,
6538
6508
  showSectorDescription: mergedConfig.showSectorDescription,
6539
- showSectorReward: mergedConfig.showSectorReward
6509
+ showSectorReward: mergedConfig.showSectorReward,
6510
+ rewardDisplayMode: mergedConfig.rewardDisplayMode,
6511
+ rewardRedirectUrl: mergedConfig.rewardRedirectUrl
6540
6512
  }
6541
6513
  )
6542
6514
  }
@@ -6549,11 +6521,16 @@ function CommunityTaskListInner(props) {
6549
6521
  initialTaskId,
6550
6522
  onTaskOpen,
6551
6523
  onTaskClose,
6524
+ initialTaskChainId,
6525
+ onTaskChainOpen,
6526
+ onTaskChainClose,
6552
6527
  sectorIds,
6553
6528
  showSectorTab = true,
6554
6529
  showSectorName = true,
6555
6530
  showSectorDescription = true,
6556
- showSectorReward = true
6531
+ showSectorReward = true,
6532
+ rewardDisplayMode = "popup",
6533
+ rewardRedirectUrl = ""
6557
6534
  } = props;
6558
6535
  const { client, userToken } = useTaskOnContext();
6559
6536
  const [taskCards, setTaskCards] = useState(
@@ -6566,7 +6543,9 @@ function CommunityTaskListInner(props) {
6566
6543
  const [openTaskId, setOpenTaskId] = useState(
6567
6544
  initialTaskId ?? null
6568
6545
  );
6569
- const [openTaskChainId, setOpenTaskChainId] = useState(null);
6546
+ const [openTaskChainId, setOpenTaskChainId] = useState(
6547
+ initialTaskChainId ?? null
6548
+ );
6570
6549
  const [coolDownMap, setCoolDownMap] = useState({});
6571
6550
  const updateCoolDown = useCallback((taskId, coolDown) => {
6572
6551
  setCoolDownMap((prev) => ({ ...prev, [taskId]: coolDown }));
@@ -6580,15 +6559,22 @@ function CommunityTaskListInner(props) {
6580
6559
  }, []);
6581
6560
  const handleTaskChainOpen = useCallback((taskChainId) => {
6582
6561
  setOpenTaskChainId(taskChainId);
6583
- }, []);
6562
+ onTaskChainOpen == null ? void 0 : onTaskChainOpen(taskChainId);
6563
+ }, [onTaskChainOpen]);
6584
6564
  const handleTaskChainClose = useCallback(() => {
6585
6565
  setOpenTaskChainId(null);
6586
- }, []);
6566
+ onTaskChainClose == null ? void 0 : onTaskChainClose();
6567
+ }, [onTaskChainClose]);
6587
6568
  useEffect(() => {
6588
6569
  if (initialTaskId && !openTask && openTaskId !== initialTaskId) {
6589
6570
  setOpenTaskId(initialTaskId);
6590
6571
  }
6591
6572
  }, [initialTaskId]);
6573
+ useEffect(() => {
6574
+ if (initialTaskChainId && openTaskChainId !== initialTaskChainId) {
6575
+ setOpenTaskChainId(initialTaskChainId);
6576
+ }
6577
+ }, [initialTaskChainId]);
6592
6578
  useEffect(() => {
6593
6579
  const loadTasks = async () => {
6594
6580
  if (!client) {
@@ -6601,7 +6587,8 @@ function CommunityTaskListInner(props) {
6601
6587
  setError(null);
6602
6588
  const api = createCommunityTaskApi(client);
6603
6589
  const data = await api.getCommunityTaskCards({
6604
- is_preview: isPreview
6590
+ is_preview: isPreview,
6591
+ ...sectorIds && sectorIds.length > 0 ? { sector_id: sectorIds } : {}
6605
6592
  });
6606
6593
  setTaskCards(data);
6607
6594
  } catch (err) {
@@ -6612,7 +6599,7 @@ function CommunityTaskListInner(props) {
6612
6599
  }
6613
6600
  };
6614
6601
  loadTasks();
6615
- }, [client, isPreview, userToken]);
6602
+ }, [client, isPreview, userToken, sectorIds]);
6616
6603
  const selectorOptions = React__default.useMemo(
6617
6604
  () => {
6618
6605
  const sectors = taskCards.map((item) => item.sector);
@@ -6659,6 +6646,35 @@ function CommunityTaskListInner(props) {
6659
6646
  },
6660
6647
  [taskCards, selectedSectorId, sectorIds]
6661
6648
  );
6649
+ const taskDependencyIndex = useMemo(() => {
6650
+ const index = /* @__PURE__ */ new Map();
6651
+ for (const sectorItem of taskCards) {
6652
+ for (const card of sectorItem.cards) {
6653
+ if (card.card_type !== "GTCTask") {
6654
+ continue;
6655
+ }
6656
+ const taskInfo = card.card_info;
6657
+ const currentTaskId = taskInfo.id;
6658
+ const eligibilityList = taskInfo.eligiblity;
6659
+ if (!(eligibilityList == null ? void 0 : eligibilityList.length)) {
6660
+ continue;
6661
+ }
6662
+ for (const eligibility of eligibilityList) {
6663
+ if (eligibility.type !== EligibilityType.CommunityPreTask) {
6664
+ continue;
6665
+ }
6666
+ const preTaskId = parsePreTaskIdFromEligibilityParams(eligibility.params);
6667
+ if (!preTaskId || preTaskId === currentTaskId) {
6668
+ continue;
6669
+ }
6670
+ const dependentSet = index.get(preTaskId) ?? /* @__PURE__ */ new Set();
6671
+ dependentSet.add(currentTaskId);
6672
+ index.set(preTaskId, dependentSet);
6673
+ }
6674
+ }
6675
+ }
6676
+ return index;
6677
+ }, [taskCards]);
6662
6678
  const handleSelectorChange = (value) => {
6663
6679
  setSelectedSectorId(value ?? null);
6664
6680
  };
@@ -6677,34 +6693,100 @@ function CommunityTaskListInner(props) {
6677
6693
  setOpenTaskId(null);
6678
6694
  onTaskClose == null ? void 0 : onTaskClose();
6679
6695
  }, [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 () => {
6696
+ const refreshTaskList = useCallback(async () => {
6692
6697
  if (!client) return;
6693
6698
  try {
6694
6699
  const api = createCommunityTaskApi(client);
6695
6700
  const data = await api.getCommunityTaskCards({
6696
- is_preview: isPreview
6701
+ is_preview: isPreview,
6702
+ ...sectorIds && sectorIds.length > 0 ? { sector_id: sectorIds } : {}
6697
6703
  });
6698
6704
  setTaskCards(data);
6699
6705
  setOpenTask((currentOpenTask) => {
6700
- if (!currentOpenTask) return null;
6701
- const updatedTask = findTaskById(data, currentOpenTask.card_info.id);
6706
+ if (!currentOpenTask) {
6707
+ return null;
6708
+ }
6709
+ const updatedTask = findTaskByIdFromCards(data, currentOpenTask.card_info.id);
6702
6710
  return updatedTask ?? currentOpenTask;
6703
6711
  });
6704
6712
  } catch (err) {
6705
6713
  console.error("Failed to refresh tasks:", err);
6706
6714
  }
6715
+ }, [client, isPreview, sectorIds]);
6716
+ const refreshSingleCard = useCallback(async (cardId, cardType) => {
6717
+ if (!client) return;
6718
+ try {
6719
+ const api = createCommunityTaskApi(client);
6720
+ const latestCard = await api.getCommunityTaskCardInfo({
6721
+ card_id: cardId,
6722
+ card_type: cardType,
6723
+ is_preview: isPreview
6724
+ });
6725
+ setTaskCards((currentCards) => {
6726
+ let targetSectorIndex = -1;
6727
+ let targetCardIndex = -1;
6728
+ for (let sectorIndex = 0; sectorIndex < currentCards.length; sectorIndex += 1) {
6729
+ const sectorItem = currentCards[sectorIndex];
6730
+ if (!sectorItem) {
6731
+ continue;
6732
+ }
6733
+ const cardIndex = sectorItem.cards.findIndex(
6734
+ (card) => card.card_type === cardType && card.card_info.id === cardId
6735
+ );
6736
+ if (cardIndex !== -1) {
6737
+ targetSectorIndex = sectorIndex;
6738
+ targetCardIndex = cardIndex;
6739
+ break;
6740
+ }
6741
+ }
6742
+ if (targetSectorIndex === -1 || targetCardIndex === -1) {
6743
+ return currentCards;
6744
+ }
6745
+ const nextCards = [...currentCards];
6746
+ const targetSector = currentCards[targetSectorIndex];
6747
+ if (!targetSector) {
6748
+ return currentCards;
6749
+ }
6750
+ const nextSectorCards = [...targetSector.cards];
6751
+ nextSectorCards[targetCardIndex] = latestCard;
6752
+ nextCards[targetSectorIndex] = {
6753
+ ...targetSector,
6754
+ cards: nextSectorCards
6755
+ };
6756
+ return nextCards;
6757
+ });
6758
+ if (cardType === TaskCardType.GTCTask) {
6759
+ setOpenTask((currentOpenTask) => {
6760
+ if (!currentOpenTask || currentOpenTask.card_info.id !== cardId) {
6761
+ return currentOpenTask;
6762
+ }
6763
+ return latestCard;
6764
+ });
6765
+ }
6766
+ } catch (err) {
6767
+ console.error(`Failed to refresh card ${cardType}:${cardId}:`, err);
6768
+ }
6707
6769
  }, [client, isPreview]);
6770
+ const refreshSingleTask = useCallback(async (taskId) => {
6771
+ await refreshSingleCard(taskId, TaskCardType.GTCTask);
6772
+ }, [refreshSingleCard]);
6773
+ const refreshSingleTaskChain = useCallback(async (taskChainId) => {
6774
+ await refreshSingleCard(taskChainId, TaskCardType.TaskChain);
6775
+ }, [refreshSingleCard]);
6776
+ const handleClaimSuccess = useCallback(async (taskId) => {
6777
+ if (!client) {
6778
+ return;
6779
+ }
6780
+ if (typeof taskId !== "number") {
6781
+ await refreshTaskList();
6782
+ return;
6783
+ }
6784
+ await refreshSingleTask(taskId);
6785
+ const dependentTasks = taskDependencyIndex.get(taskId);
6786
+ if (dependentTasks && dependentTasks.size > 0) {
6787
+ await refreshTaskList();
6788
+ }
6789
+ }, [client, refreshSingleTask, refreshTaskList, taskDependencyIndex]);
6708
6790
  const { toast } = useToast();
6709
6791
  const handleClaimTask = useCallback(async (taskId, token, platform) => {
6710
6792
  if (!client) return { successful: false };
@@ -6715,7 +6797,7 @@ function CommunityTaskListInner(props) {
6715
6797
  task_value: token || ""
6716
6798
  });
6717
6799
  if (result.successful) {
6718
- handleClaimSuccess();
6800
+ await handleClaimSuccess(taskId);
6719
6801
  return { successful: true };
6720
6802
  } else if (result.cool_down) {
6721
6803
  updateCoolDown(taskId, result.cool_down);
@@ -6735,7 +6817,7 @@ function CommunityTaskListInner(props) {
6735
6817
  } catch (err) {
6736
6818
  console.error("Failed to submit task:", err);
6737
6819
  const errorCode = err instanceof ApiError ? err.code : void 0;
6738
- const errorMessage = err instanceof Error ? err.message : "Submission failed";
6820
+ const errorMessage = resolveCommunityTaskSubmitErrorMessage(err, errorCode);
6739
6821
  const errorData = err instanceof ApiError ? err.data : void 0;
6740
6822
  if (errorCode === ErrorCode.TASK_PARTIAL_PASS) {
6741
6823
  return { successful: false, errorCode };
@@ -6748,7 +6830,7 @@ function CommunityTaskListInner(props) {
6748
6830
  toast.error(errorMessage);
6749
6831
  return { successful: false, errorCode };
6750
6832
  }
6751
- }, [client, handleClaimSuccess, toast]);
6833
+ }, [client, handleClaimSuccess, toast, updateCoolDown]);
6752
6834
  const isDialogOpen = openTask !== null || openTaskId !== null;
6753
6835
  const currentSelectorValue = selectedSectorId ?? void 0;
6754
6836
  if (error) {
@@ -6782,7 +6864,8 @@ function CommunityTaskListInner(props) {
6782
6864
  onTaskChainOpen: handleTaskChainOpen,
6783
6865
  onEligTaskClick: handleEligTaskClick,
6784
6866
  coolDownMap,
6785
- onCoolDownComplete: clearCoolDown
6867
+ onCoolDownComplete: clearCoolDown,
6868
+ onDoneCountdownComplete: refreshSingleTask
6786
6869
  },
6787
6870
  sectorItem.sector.id
6788
6871
  )) }),
@@ -6793,6 +6876,8 @@ function CommunityTaskListInner(props) {
6793
6876
  taskId: openTaskId,
6794
6877
  onClose: handleDialogClose,
6795
6878
  onClaimSuccess: handleClaimSuccess,
6879
+ onTaskRefresh: refreshSingleTask,
6880
+ onEligTaskClick: handleEligTaskClick,
6796
6881
  coolDownMap,
6797
6882
  onCoolDownUpdate: updateCoolDown,
6798
6883
  onCoolDownComplete: clearCoolDown
@@ -6804,7 +6889,9 @@ function CommunityTaskListInner(props) {
6804
6889
  campaignId: openTaskChainId,
6805
6890
  open: true,
6806
6891
  onClose: handleTaskChainClose,
6807
- onUpdate: handleClaimSuccess
6892
+ onUpdate: () => refreshSingleTaskChain(openTaskChainId),
6893
+ rewardDisplayMode,
6894
+ rewardRedirectUrl
6808
6895
  }
6809
6896
  )
6810
6897
  ] });