@anker-in/campaign-ui 0.4.6 → 0.5.0-beta.1

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 (249) hide show
  1. package/dist/cjs/components/LiveChatWidget/LiveChatWidget.js +1 -1
  2. package/dist/cjs/components/LiveChatWidget/LiveChatWidget.js.map +3 -3
  3. package/dist/cjs/components/LiveChatWidget/api/chat.d.ts +1 -1
  4. package/dist/cjs/components/LiveChatWidget/api/chat.js +2 -2
  5. package/dist/cjs/components/LiveChatWidget/api/chat.js.map +3 -3
  6. package/dist/cjs/components/LiveChatWidget/components/MessageList.js +2 -2
  7. package/dist/cjs/components/LiveChatWidget/components/MessageList.js.map +3 -3
  8. package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.js +1 -1
  9. package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.js.map +3 -3
  10. package/dist/cjs/components/LiveChatWidget/hooks/useChatState.d.ts +5 -0
  11. package/dist/cjs/components/LiveChatWidget/hooks/useChatState.js +1 -1
  12. package/dist/cjs/components/LiveChatWidget/hooks/useChatState.js.map +3 -3
  13. package/dist/cjs/components/LiveChatWidget/utils/fetcher.d.ts +3 -1
  14. package/dist/cjs/components/LiveChatWidget/utils/fetcher.js +1 -1
  15. package/dist/cjs/components/LiveChatWidget/utils/fetcher.js.map +3 -3
  16. package/dist/cjs/components/index.d.ts +1 -0
  17. package/dist/cjs/components/index.js +1 -1
  18. package/dist/cjs/components/index.js.map +2 -2
  19. package/dist/cjs/components/memberPopup/MemberPopup.d.ts +9 -0
  20. package/dist/cjs/components/memberPopup/MemberPopup.js +2 -0
  21. package/dist/cjs/components/memberPopup/MemberPopup.js.map +7 -0
  22. package/dist/cjs/components/memberPopup/context/provider.d.ts +11 -0
  23. package/dist/cjs/components/memberPopup/context/provider.js +2 -0
  24. package/dist/cjs/components/memberPopup/context/provider.js.map +7 -0
  25. package/dist/cjs/components/memberPopup/context/viewStack.d.ts +12 -0
  26. package/dist/cjs/components/memberPopup/context/viewStack.js +2 -0
  27. package/dist/cjs/components/memberPopup/context/viewStack.js.map +7 -0
  28. package/dist/cjs/components/memberPopup/icons.d.ts +27 -0
  29. package/dist/cjs/components/memberPopup/icons.js +2 -0
  30. package/dist/cjs/components/memberPopup/icons.js.map +7 -0
  31. package/dist/cjs/components/memberPopup/index.d.ts +4 -0
  32. package/dist/cjs/components/memberPopup/index.js +2 -0
  33. package/dist/cjs/components/memberPopup/index.js.map +7 -0
  34. package/dist/cjs/components/memberPopup/panels/Activity/SubscribeModal.d.ts +10 -0
  35. package/dist/cjs/components/memberPopup/panels/Activity/SubscribeModal.js +2 -0
  36. package/dist/cjs/components/memberPopup/panels/Activity/SubscribeModal.js.map +7 -0
  37. package/dist/cjs/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.d.ts +7 -0
  38. package/dist/cjs/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js +2 -0
  39. package/dist/cjs/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js.map +7 -0
  40. package/dist/cjs/components/memberPopup/panels/Activity/index.d.ts +7 -0
  41. package/dist/cjs/components/memberPopup/panels/Activity/index.js +2 -0
  42. package/dist/cjs/components/memberPopup/panels/Activity/index.js.map +7 -0
  43. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.d.ts +19 -0
  44. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js +2 -0
  45. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js.map +7 -0
  46. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.d.ts +20 -0
  47. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js +2 -0
  48. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js.map +7 -0
  49. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.d.ts +12 -0
  50. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.js +2 -0
  51. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.js.map +7 -0
  52. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.d.ts +17 -0
  53. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.js +2 -0
  54. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.js.map +7 -0
  55. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.d.ts +8 -0
  56. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.js +2 -0
  57. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.js.map +7 -0
  58. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/index.d.ts +7 -0
  59. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/index.js +2 -0
  60. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/index.js.map +7 -0
  61. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivatePanel.d.ts +8 -0
  62. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivatePanel.js +2 -0
  63. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivatePanel.js.map +7 -0
  64. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.d.ts +10 -0
  65. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js +2 -0
  66. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js.map +7 -0
  67. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.d.ts +9 -0
  68. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js +2 -0
  69. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js.map +7 -0
  70. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.d.ts +9 -0
  71. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js +2 -0
  72. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js.map +7 -0
  73. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeModal.d.ts +10 -0
  74. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeModal.js +2 -0
  75. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeModal.js.map +7 -0
  76. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribePanel.d.ts +9 -0
  77. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribePanel.js +2 -0
  78. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribePanel.js.map +7 -0
  79. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useActivities.d.ts +18 -0
  80. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useActivities.js +2 -0
  81. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useActivities.js.map +7 -0
  82. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.d.ts +9 -0
  83. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.js +2 -0
  84. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.js.map +7 -0
  85. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.d.ts +17 -0
  86. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.js +2 -0
  87. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.js.map +7 -0
  88. package/dist/cjs/components/memberPopup/panels/EarnCredits/index.d.ts +13 -0
  89. package/dist/cjs/components/memberPopup/panels/EarnCredits/index.js +2 -0
  90. package/dist/cjs/components/memberPopup/panels/EarnCredits/index.js.map +7 -0
  91. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralDashboard.d.ts +13 -0
  92. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js +2 -0
  93. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js.map +7 -0
  94. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralOverview.d.ts +12 -0
  95. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralOverview.js +2 -0
  96. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralOverview.js.map +7 -0
  97. package/dist/cjs/components/memberPopup/panels/Referral/index.d.ts +7 -0
  98. package/dist/cjs/components/memberPopup/panels/Referral/index.js +2 -0
  99. package/dist/cjs/components/memberPopup/panels/Referral/index.js.map +7 -0
  100. package/dist/cjs/components/memberPopup/type.d.ts +201 -0
  101. package/dist/cjs/components/memberPopup/type.js +2 -0
  102. package/dist/cjs/components/memberPopup/type.js.map +7 -0
  103. package/dist/esm/components/LiveChatWidget/LiveChatWidget.js +1 -1
  104. package/dist/esm/components/LiveChatWidget/LiveChatWidget.js.map +3 -3
  105. package/dist/esm/components/LiveChatWidget/api/chat.d.ts +1 -1
  106. package/dist/esm/components/LiveChatWidget/api/chat.js +2 -2
  107. package/dist/esm/components/LiveChatWidget/api/chat.js.map +3 -3
  108. package/dist/esm/components/LiveChatWidget/components/MessageList.js +2 -2
  109. package/dist/esm/components/LiveChatWidget/components/MessageList.js.map +3 -3
  110. package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js +1 -1
  111. package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js.map +3 -3
  112. package/dist/esm/components/LiveChatWidget/hooks/useChatState.d.ts +5 -0
  113. package/dist/esm/components/LiveChatWidget/hooks/useChatState.js +1 -1
  114. package/dist/esm/components/LiveChatWidget/hooks/useChatState.js.map +3 -3
  115. package/dist/esm/components/LiveChatWidget/utils/fetcher.d.ts +3 -1
  116. package/dist/esm/components/LiveChatWidget/utils/fetcher.js +1 -1
  117. package/dist/esm/components/LiveChatWidget/utils/fetcher.js.map +3 -3
  118. package/dist/esm/components/index.d.ts +1 -0
  119. package/dist/esm/components/index.js +1 -1
  120. package/dist/esm/components/index.js.map +2 -2
  121. package/dist/esm/components/memberPopup/MemberPopup.d.ts +9 -0
  122. package/dist/esm/components/memberPopup/MemberPopup.js +2 -0
  123. package/dist/esm/components/memberPopup/MemberPopup.js.map +7 -0
  124. package/dist/esm/components/memberPopup/context/provider.d.ts +11 -0
  125. package/dist/esm/components/memberPopup/context/provider.js +2 -0
  126. package/dist/esm/components/memberPopup/context/provider.js.map +7 -0
  127. package/dist/esm/components/memberPopup/context/viewStack.d.ts +12 -0
  128. package/dist/esm/components/memberPopup/context/viewStack.js +2 -0
  129. package/dist/esm/components/memberPopup/context/viewStack.js.map +7 -0
  130. package/dist/esm/components/memberPopup/icons.d.ts +27 -0
  131. package/dist/esm/components/memberPopup/icons.js +2 -0
  132. package/dist/esm/components/memberPopup/icons.js.map +7 -0
  133. package/dist/esm/components/memberPopup/index.d.ts +4 -0
  134. package/dist/esm/components/memberPopup/index.js +2 -0
  135. package/dist/esm/components/memberPopup/index.js.map +7 -0
  136. package/dist/esm/components/memberPopup/panels/Activity/SubscribeModal.d.ts +10 -0
  137. package/dist/esm/components/memberPopup/panels/Activity/SubscribeModal.js +2 -0
  138. package/dist/esm/components/memberPopup/panels/Activity/SubscribeModal.js.map +7 -0
  139. package/dist/esm/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.d.ts +7 -0
  140. package/dist/esm/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js +2 -0
  141. package/dist/esm/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js.map +7 -0
  142. package/dist/esm/components/memberPopup/panels/Activity/index.d.ts +7 -0
  143. package/dist/esm/components/memberPopup/panels/Activity/index.js +2 -0
  144. package/dist/esm/components/memberPopup/panels/Activity/index.js.map +7 -0
  145. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.d.ts +19 -0
  146. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js +2 -0
  147. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js.map +7 -0
  148. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.d.ts +20 -0
  149. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js +2 -0
  150. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js.map +7 -0
  151. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.d.ts +12 -0
  152. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.js +2 -0
  153. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.js.map +7 -0
  154. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.d.ts +17 -0
  155. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.js +2 -0
  156. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.js.map +7 -0
  157. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.d.ts +8 -0
  158. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.js +2 -0
  159. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.js.map +7 -0
  160. package/dist/esm/components/memberPopup/panels/ConsumeCredits/index.d.ts +7 -0
  161. package/dist/esm/components/memberPopup/panels/ConsumeCredits/index.js +2 -0
  162. package/dist/esm/components/memberPopup/panels/ConsumeCredits/index.js.map +7 -0
  163. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivatePanel.d.ts +8 -0
  164. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivatePanel.js +2 -0
  165. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivatePanel.js.map +7 -0
  166. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.d.ts +10 -0
  167. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js +2 -0
  168. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js.map +7 -0
  169. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.d.ts +9 -0
  170. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js +2 -0
  171. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js.map +7 -0
  172. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.d.ts +9 -0
  173. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js +2 -0
  174. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js.map +7 -0
  175. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeModal.d.ts +10 -0
  176. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeModal.js +2 -0
  177. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeModal.js.map +7 -0
  178. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribePanel.d.ts +9 -0
  179. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribePanel.js +2 -0
  180. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribePanel.js.map +7 -0
  181. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useActivities.d.ts +18 -0
  182. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useActivities.js +2 -0
  183. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useActivities.js.map +7 -0
  184. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.d.ts +9 -0
  185. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.js +2 -0
  186. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.js.map +7 -0
  187. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.d.ts +17 -0
  188. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.js +2 -0
  189. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.js.map +7 -0
  190. package/dist/esm/components/memberPopup/panels/EarnCredits/index.d.ts +13 -0
  191. package/dist/esm/components/memberPopup/panels/EarnCredits/index.js +2 -0
  192. package/dist/esm/components/memberPopup/panels/EarnCredits/index.js.map +7 -0
  193. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralDashboard.d.ts +13 -0
  194. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js +2 -0
  195. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js.map +7 -0
  196. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralOverview.d.ts +12 -0
  197. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralOverview.js +2 -0
  198. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralOverview.js.map +7 -0
  199. package/dist/esm/components/memberPopup/panels/Referral/index.d.ts +7 -0
  200. package/dist/esm/components/memberPopup/panels/Referral/index.js +2 -0
  201. package/dist/esm/components/memberPopup/panels/Referral/index.js.map +7 -0
  202. package/dist/esm/components/memberPopup/type.d.ts +201 -0
  203. package/dist/esm/components/memberPopup/type.js +2 -0
  204. package/dist/esm/components/memberPopup/type.js.map +7 -0
  205. package/dist/index.d.mts +1775 -0
  206. package/dist/index.d.ts +1775 -0
  207. package/dist/index.js +18542 -0
  208. package/dist/index.js.map +1 -0
  209. package/dist/index.mjs +18514 -0
  210. package/dist/index.mjs.map +1 -0
  211. package/package.json +1 -1
  212. package/src/components/LiveChatWidget/LiveChatWidget.tsx +6 -4
  213. package/src/components/LiveChatWidget/api/chat.ts +3 -2
  214. package/src/components/LiveChatWidget/components/MessageList.tsx +20 -4
  215. package/src/components/LiveChatWidget/hooks/useChatAPI.ts +2 -3
  216. package/src/components/LiveChatWidget/hooks/useChatState.ts +27 -7
  217. package/src/components/LiveChatWidget/utils/fetcher.ts +15 -2
  218. package/src/components/index.ts +2 -0
  219. package/src/components/memberPopup/MemberPopup.tsx +283 -0
  220. package/src/components/memberPopup/context/provider.tsx +52 -0
  221. package/src/components/memberPopup/context/viewStack.tsx +23 -0
  222. package/src/components/memberPopup/icons.tsx +147 -0
  223. package/src/components/memberPopup/index.ts +24 -0
  224. package/src/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.tsx +150 -0
  225. package/src/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.tsx +142 -0
  226. package/src/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.ts +33 -0
  227. package/src/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.ts +38 -0
  228. package/src/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.ts +55 -0
  229. package/src/components/memberPopup/panels/ConsumeCredits/index.tsx +220 -0
  230. package/src/components/memberPopup/panels/EarnCredits/ActivatePanel.tsx +323 -0
  231. package/src/components/memberPopup/panels/EarnCredits/CompleteProfileModal.tsx +186 -0
  232. package/src/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.tsx +179 -0
  233. package/src/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.tsx +130 -0
  234. package/src/components/memberPopup/panels/EarnCredits/SubscribeModal.tsx +144 -0
  235. package/src/components/memberPopup/panels/EarnCredits/SubscribePanel.tsx +147 -0
  236. package/src/components/memberPopup/panels/EarnCredits/hooks/useActivities.ts +64 -0
  237. package/src/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.ts +32 -0
  238. package/src/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.ts +50 -0
  239. package/src/components/memberPopup/panels/EarnCredits/index.tsx +215 -0
  240. package/src/components/memberPopup/panels/Referral/hooks/useReferralOverview.ts +41 -0
  241. package/src/components/memberPopup/panels/Referral/index.tsx +108 -0
  242. package/src/components/memberPopup/type.ts +213 -0
  243. package/tailwind.config.ts +4 -0
  244. package/dist/cjs/stories/CartCard.stories.d.ts +0 -33
  245. package/dist/cjs/stories/CartCard.stories.js +0 -21
  246. package/dist/cjs/stories/CartCard.stories.js.map +0 -7
  247. package/dist/esm/stories/CartCard.stories.d.ts +0 -33
  248. package/dist/esm/stories/CartCard.stories.js +0 -21
  249. package/dist/esm/stories/CartCard.stories.js.map +0 -7
@@ -0,0 +1,147 @@
1
+ import { useCallback, useEffect, useState } from 'react'
2
+ import { Checkbox, Text } from '@anker-in/headless-ui'
3
+ import { classNames as cn, useHeadlessContext } from '@anker-in/lib'
4
+ import Cookies from 'js-cookie'
5
+ import { parse } from 'query-string'
6
+ import { emailValidate } from '../../../credits/context/utils'
7
+ import { useMemberPopupContext } from '../../context/provider'
8
+ import type { SubscribeModalCopy } from '../../type'
9
+ import { ROUNDED_BRANDS } from '../../../../constants'
10
+
11
+ type Props = {
12
+ copy: SubscribeModalCopy
13
+ email?: string
14
+ onClose: () => void
15
+ onSuccess?: () => void
16
+ }
17
+
18
+ function getAdCookie() {
19
+ if (typeof window === 'undefined') return { register_source: '' }
20
+ const { search, href } = window.location
21
+ const query = parse(search)
22
+ return {
23
+ fbuy_ref_code: Cookies.get('fbuy_ref_code'),
24
+ ref: Cookies.get('ref_ads'),
25
+ inviter_code: query.ic ?? query.inviter_code ?? Cookies.get('inviter_code'),
26
+ register_source: query.redirect ?? Cookies.get('reg_source') ?? href,
27
+ }
28
+ }
29
+
30
+ async function getRecaptchaToken(sitekey: string): Promise<string> {
31
+ if (typeof window === 'undefined' || !window?.grecaptcha?.execute) return ''
32
+ if (!sitekey) return ''
33
+ try {
34
+ return await window.grecaptcha.execute(sitekey, { action: 'activity' })
35
+ } catch {
36
+ return ''
37
+ }
38
+ }
39
+
40
+ export default function SubscribePanel({ copy, email: initialEmail, onClose, onSuccess }: Props) {
41
+ const { alpcConfig } = useMemberPopupContext()
42
+ const { locale } = alpcConfig
43
+ const { brand: headlessBrand, storeDomain, recaptchaSitekey } = useHeadlessContext()
44
+ const rounded = ROUNDED_BRANDS.includes(headlessBrand)
45
+ const [policy, setPolicy] = useState(false)
46
+ const [email, setEmail] = useState(initialEmail ?? '')
47
+ const [errorMessage, setErrorMessage] = useState('')
48
+ const [successMessage, setSuccessMessage] = useState('')
49
+ const [loading, setLoading] = useState(false)
50
+
51
+ useEffect(() => {
52
+ if (initialEmail) setEmail(initialEmail)
53
+ }, [initialEmail])
54
+
55
+ const handleSubmit = useCallback(async () => {
56
+ setErrorMessage('')
57
+ if (!email) return setErrorMessage('Please fill in your email')
58
+ if (!emailValidate(email)) return setErrorMessage('Invalid email address')
59
+ if (!policy) return setErrorMessage('Please agree to the policy')
60
+
61
+ setLoading(true)
62
+ const { register_source } = getAdCookie()
63
+ const recaptchaToken = await getRecaptchaToken(recaptchaSitekey || '')
64
+ try {
65
+ const response = await fetch('/api/multipass/rainbowbridge/activities', {
66
+ method: 'POST',
67
+ headers: {
68
+ 'Content-Type': 'application/json',
69
+ 'current-language': locale,
70
+ 'X-Recaptcha-Token': recaptchaToken,
71
+ },
72
+ body: JSON.stringify({
73
+ email,
74
+ register_source,
75
+ shopify_domain: storeDomain,
76
+ single_brand_subscribe: copy.single_brand_subscribe ?? true,
77
+ genre: copy.genre ?? copy.dealsType ?? '',
78
+ sub_brand_type: copy.sub_brand_type ?? '',
79
+ }),
80
+ })
81
+ const result = await response.json()
82
+ if (!result.errors) {
83
+ setSuccessMessage(copy.successTips ?? 'Subscribed successfully!')
84
+ onSuccess?.()
85
+ setTimeout(() => {
86
+ setSuccessMessage('')
87
+ onClose()
88
+ }, 3000)
89
+ } else {
90
+ setErrorMessage(result.errors ?? 'Error occurred')
91
+ }
92
+ } catch {
93
+ setErrorMessage('Network error')
94
+ } finally {
95
+ setLoading(false)
96
+ }
97
+ }, [email, policy, locale, storeDomain, copy, onClose, onSuccess])
98
+
99
+ return (
100
+ <div className="flex flex-col gap-[12px]">
101
+ <div className="flex flex-col gap-[8px]">
102
+ {copy.title && (
103
+ <h2 className="text-[24px] font-[700] leading-[1.2] text-[#080a0f]">{copy.title}</h2>
104
+ )}
105
+ {copy.desc && (
106
+ <Text className="text-[16px] text-[#1e2024]" html={copy.desc} />
107
+ )}
108
+ </div>
109
+
110
+ <div className="flex flex-col gap-[16px]">
111
+ <input
112
+ className={cn(
113
+ 'h-[46px] w-full border px-[14px] text-[16px] outline-none placeholder:text-[#999]',
114
+ errorMessage ? 'border-[#f84d4f]' : 'border-[#d8d8d8]',
115
+ rounded ? 'rounded-[4px]' : 'rounded-none'
116
+ )}
117
+ placeholder={copy.placeholder}
118
+ value={email}
119
+ onChange={e => { setErrorMessage(''); setEmail(e.target.value.trim()) }}
120
+ />
121
+
122
+ <div className="flex w-full items-start gap-[8px]">
123
+ <Checkbox checked={policy} onCheckedChange={() => setPolicy(v => !v)} className="mt-[2px] border-[#1d1d1f]" />
124
+ <label
125
+ className="cursor-pointer text-left text-[14px] text-[#1e2024] [&_a]:underline"
126
+ onClick={() => setPolicy(v => !v)}
127
+ dangerouslySetInnerHTML={{ __html: copy.policy ?? '' }}
128
+ />
129
+ </div>
130
+
131
+ {(errorMessage || successMessage) && (
132
+ <div className={cn('text-[14px] font-[700]', errorMessage && 'text-[#f84d4f]', successMessage && 'text-[#52c41a]')}>
133
+ <Text html={successMessage || errorMessage} />
134
+ </div>
135
+ )}
136
+
137
+ <button
138
+ className={cn('w-full cursor-pointer bg-[#080a0f] py-[14px] text-[14px] font-[700] text-white disabled:opacity-60', rounded ? 'rounded-[4px]' : 'rounded-none')}
139
+ disabled={loading}
140
+ onClick={handleSubmit}
141
+ >
142
+ {copy.buttonLabel ?? 'Subscribe'}
143
+ </button>
144
+ </div>
145
+ </div>
146
+ )
147
+ }
@@ -0,0 +1,64 @@
1
+ import { useCallback, useEffect, useState } from 'react'
2
+ import useSWRMutation from 'swr/mutation'
3
+ import { getAlpcPath } from '../../../../credits/context/utils'
4
+ import type { CreditLogResponse } from '../../../../credits/context/response'
5
+
6
+ type UseActivitiesConfig = {
7
+ userId: string | undefined
8
+ brand: string
9
+ apiBaseUrl?: string
10
+ locale?: string
11
+ }
12
+
13
+ type Params = {
14
+ page: number
15
+ pageSize: number
16
+ }
17
+
18
+ function useActivities(
19
+ { userId, brand, apiBaseUrl, locale = '' }: UseActivitiesConfig,
20
+ { page, pageSize }: Params
21
+ ) {
22
+ const [activities, setActivities] = useState<CreditLogResponse[]>([])
23
+ const [total, setTotal] = useState(0)
24
+ const [currentPage, setCurrentPage] = useState(0)
25
+
26
+ const { isMutating: isLoading, trigger } = useSWRMutation(
27
+ `/v1/credit/log`,
28
+ async (url: string, { arg }: { arg: Record<string, any> }) => {
29
+ const response = await fetch(getAlpcPath(locale, apiBaseUrl) + url, {
30
+ method: 'POST',
31
+ headers: { 'Content-Type': 'application/json', 'current-language': locale },
32
+ body: JSON.stringify(arg),
33
+ })
34
+ return response.json()
35
+ }
36
+ )
37
+
38
+ const fetchActivities = useCallback(async () => {
39
+ await trigger(
40
+ { page, page_size: pageSize, user_id: userId, brand },
41
+ {
42
+ onSuccess(data) {
43
+ setCurrentPage(page)
44
+ setTotal(data?.data?.total ?? 0)
45
+ setActivities(prev => prev.concat(data?.data?.creditLogs ?? []))
46
+ },
47
+ }
48
+ )
49
+ }, [page, pageSize, userId, brand, trigger])
50
+
51
+ useEffect(() => {
52
+ if (!userId || !brand || isLoading || page === currentPage) return
53
+ fetchActivities()
54
+ }, [fetchActivities, userId, brand, page, currentPage, isLoading])
55
+
56
+ return {
57
+ activities,
58
+ isLoading,
59
+ total,
60
+ canNext: total > activities.length && !isLoading,
61
+ }
62
+ }
63
+
64
+ export default useActivities
@@ -0,0 +1,32 @@
1
+ import { useMemo } from 'react'
2
+ import { useSubscriptions } from '@anker-in/lib'
3
+ import { TaskSubType } from '../../../../credits/context/const'
4
+ import useActivities from './useActivities'
5
+
6
+ type UseSubscribedConfig = {
7
+ userId: string | undefined
8
+ brand: string
9
+ email: string | undefined
10
+ locale?: string
11
+ apiBaseUrl?: string
12
+ }
13
+
14
+ export function useSubscribed({ userId, brand, email, locale = '', apiBaseUrl }: UseSubscribedConfig) {
15
+ const { activities } = useActivities(
16
+ { userId, brand, apiBaseUrl, locale },
17
+ { page: 1, pageSize: 50 }
18
+ )
19
+ const { data: subscription } = useSubscriptions({ email })
20
+ const subscriptionData = subscription?.data || subscription
21
+
22
+ return useMemo(() => {
23
+ if (!subscriptionData?.preference) {
24
+ return false
25
+ }
26
+ const subscribedByPreference = subscriptionData.preference.some(
27
+ (item: any) => item.brand === brand && item.subscribe
28
+ )
29
+ if (subscribedByPreference) return true
30
+ return activities?.some(item => item.task_sub_type === TaskSubType.Subscription)
31
+ }, [subscriptionData?.preference, activities, brand])
32
+ }
@@ -0,0 +1,50 @@
1
+ import { useCallback, useState } from 'react'
2
+
3
+ type UseUpdateProfileConfig = {
4
+ locale?: string
5
+ appName?: string
6
+ }
7
+
8
+ type ProfileData = {
9
+ first_name?: string
10
+ last_name?: string
11
+ phone_number?: string
12
+ country?: string
13
+ dob?: string
14
+ }
15
+
16
+ export function useUpdateProfile({ locale = '', appName = '' }: UseUpdateProfileConfig = {}) {
17
+ const [isLoading, setIsLoading] = useState(false)
18
+ const [error, setError] = useState<string | null>(null)
19
+
20
+ const updateProfile = useCallback(
21
+ async (data: ProfileData): Promise<boolean> => {
22
+ setIsLoading(true)
23
+ setError(null)
24
+ try {
25
+ const response = await fetch('/api/multipass/account/users/update_profile', {
26
+ method: 'PUT',
27
+ headers: {
28
+ 'Content-Type': 'application/json',
29
+ 'current-language': locale,
30
+ },
31
+ body: JSON.stringify({ app: appName, ...data }),
32
+ })
33
+ const result = await response.json()
34
+ if (response.ok && !result.error) {
35
+ return true
36
+ }
37
+ setError(result?.error?.message || result?.error || 'Update failed')
38
+ return false
39
+ } catch (e: any) {
40
+ setError(e?.message ?? 'Unknown error')
41
+ return false
42
+ } finally {
43
+ setIsLoading(false)
44
+ }
45
+ },
46
+ [locale, appName]
47
+ )
48
+
49
+ return { updateProfile, isLoading, error }
50
+ }
@@ -0,0 +1,215 @@
1
+ import { useMemo } from 'react'
2
+ import { classNames as cn, useHeadlessContext } from '@anker-in/lib'
3
+ import { useMemberPopupContext } from '../../context/provider'
4
+ import { useViewStack } from '../../context/viewStack'
5
+ import { useSubscribed } from './hooks/useSubscribed'
6
+ import { EarnCreditsTaskType, MemberPopupPanelType, type EarnCreditsCopy } from '../../type'
7
+ import { IconBag, IconLock, IconSubscription, IconOrders } from '../../icons'
8
+ import { numberFormat } from '../../../credits/context/utils'
9
+ import { ROUNDED_BRANDS } from '../../../../constants'
10
+
11
+ function TaskIcon({ id, className }: { id: EarnCreditsTaskType; className?: string }) {
12
+ switch (id) {
13
+ case EarnCreditsTaskType.Activate:
14
+ return <IconLock className={className} />
15
+ case EarnCreditsTaskType.Subscribe:
16
+ return <IconSubscription className={className} />
17
+ case EarnCreditsTaskType.Shop:
18
+ return <IconBag className={className} />
19
+ case EarnCreditsTaskType.CompleteProfile:
20
+ return <IconOrders className={className} />
21
+ }
22
+ }
23
+
24
+ type Props = {
25
+ copy: EarnCreditsCopy
26
+ onClose: () => void
27
+ isSubscribeSuccess?: boolean
28
+ isActivateSuccess?: boolean
29
+ isProfileCompleteSuccess?: boolean
30
+ onSubscribeSuccess?: () => void
31
+ onActivateSuccess?: () => void
32
+ onProfileCompleteSuccess?: () => void
33
+ }
34
+
35
+ function EarnCredits({
36
+ copy,
37
+ onClose,
38
+ isSubscribeSuccess = false,
39
+ isActivateSuccess = false,
40
+ isProfileCompleteSuccess = false,
41
+ onSubscribeSuccess,
42
+ onActivateSuccess,
43
+ onProfileCompleteSuccess,
44
+ }: Props) {
45
+ const { profile, openSignUpPopup, alpcConfig, creditInfo } = useMemberPopupContext()
46
+ const { pushView } = useViewStack()
47
+ const { locale } = alpcConfig
48
+ const { brand } = useHeadlessContext()
49
+ const rounded = ROUNDED_BRANDS.includes(brand)
50
+
51
+ const isLogin = !!profile
52
+
53
+ const isSubscribed = useSubscribed({
54
+ userId: profile?.user_id,
55
+ brand: alpcConfig.brand,
56
+ email: profile?.email,
57
+ locale,
58
+ apiBaseUrl: alpcConfig.apiBaseUrl,
59
+ })
60
+
61
+ const profileCompleted = useMemo(() => {
62
+ return isProfileCompleteSuccess || (!!(profile?.first_name || profile?.last_name) && !!profile?.phone_number && !!profile?.dob)
63
+ }, [profile, isProfileCompleteSuccess])
64
+
65
+ const taskStates: Record<EarnCreditsTaskType, { finished: boolean; onClick?: () => void; link?: string }> = useMemo(() => ({
66
+ [EarnCreditsTaskType.Activate]: {
67
+ finished: !!profile?.activated || isActivateSuccess,
68
+ onClick: isLogin
69
+ ? () => pushView({
70
+ type: MemberPopupPanelType.Activate,
71
+ props: { onSuccess: onActivateSuccess },
72
+ })
73
+ : openSignUpPopup,
74
+ },
75
+ [EarnCreditsTaskType.CompleteProfile]: {
76
+ finished: profileCompleted,
77
+ onClick: isLogin
78
+ ? () => pushView({
79
+ type: MemberPopupPanelType.CompleteProfile,
80
+ props: { onSuccess: onProfileCompleteSuccess },
81
+ })
82
+ : openSignUpPopup,
83
+ },
84
+ [EarnCreditsTaskType.Subscribe]: {
85
+ finished: isSubscribed || isSubscribeSuccess,
86
+ onClick: isLogin
87
+ ? () => pushView({
88
+ type: MemberPopupPanelType.SubscribeEmail,
89
+ props: { onSuccess: onSubscribeSuccess },
90
+ })
91
+ : openSignUpPopup,
92
+ },
93
+ [EarnCreditsTaskType.Shop]: {
94
+ finished: false,
95
+ link: copy.goShopLink,
96
+ onClick: isLogin ? undefined : openSignUpPopup,
97
+ },
98
+ }), [profile, isLogin, isActivateSuccess, isProfileCompleteSuccess, profileCompleted, isSubscribed, isSubscribeSuccess, openSignUpPopup, pushView, copy.goShopLink])
99
+
100
+ const list = useMemo(() => {
101
+ return copy.list.map(item => {
102
+ const state = taskStates[item.id]
103
+ if (!state) return null
104
+ const buttonLabel = state.finished
105
+ ? copy.completed
106
+ : isLogin
107
+ ? getNotFinishedLabel(item.id, copy)
108
+ : copy.joinNow
109
+ return { ...item, ...state, buttonLabel }
110
+ }).filter(Boolean) as (typeof copy.list[number] & {
111
+ finished: boolean
112
+ onClick?: () => void
113
+ link?: string
114
+ buttonLabel: string
115
+ })[]
116
+ }, [copy, taskStates, isLogin])
117
+
118
+ return (
119
+ <div className="flex flex-col gap-[16px]">
120
+ <div className="flex flex-col gap-[16px]">
121
+ <div className="flex flex-col gap-[8px]">
122
+ {copy.title && <h2 className="text-[24px] font-[700] leading-[1.2] text-[#080a0f]">{copy.title}</h2>}
123
+ </div>
124
+
125
+ {isLogin && creditInfo && (
126
+ <div className={cn('flex items-center gap-[12px] bg-[#f5f6f7] p-[16px]', rounded ? 'rounded-[8px]' : 'rounded-none')}>
127
+ <div className="flex flex-1 flex-col gap-[4px]">
128
+ <div className="text-[14px] font-[700] text-[#1e2024]">
129
+ {copy.balanceLabel ?? 'AnkerCredits Balance'}
130
+ </div>
131
+ <div className="flex items-end gap-[4px]">
132
+ <span className="text-[24px] font-[700] leading-[1.2] text-[#1e2024]">
133
+ {numberFormat(creditInfo.available_credit)}
134
+ </span>
135
+ <span className="text-[14px] font-[700] leading-[1.4] text-[#1e2024]">
136
+ {copy.creditUnit ?? 'ankercredits'}
137
+ </span>
138
+ </div>
139
+ </div>
140
+ <div className="h-full w-px bg-[#dadce0]" />
141
+ <div className="flex flex-1 flex-col gap-[4px]">
142
+ <div className="text-[14px] font-[700] text-[#1e2024]">
143
+ {copy.comingSoonLabel ?? 'Coming Soon'}
144
+ </div>
145
+ <div className="flex items-end gap-[4px]">
146
+ <span className="text-[24px] font-[700] leading-[1.2] text-[#1e2024]">
147
+ {numberFormat(creditInfo.pending_credit ?? 0)}
148
+ </span>
149
+ <span className="text-[14px] font-[700] leading-[1.4] text-[#1e2024]">
150
+ {copy.creditUnit ?? 'ankercredits'}
151
+ </span>
152
+ </div>
153
+ </div>
154
+ </div>
155
+ )}
156
+ </div>
157
+
158
+ <div className="flex flex-col gap-[16px]">
159
+ {copy.subtitle && (
160
+ <p className="text-[16px] font-[700] text-[#1e2024]">{copy.subtitle}</p>
161
+ )}
162
+
163
+ <div className="flex flex-col">
164
+ {list.map((item, idx) => (
165
+ <div key={idx} className="relative py-[16px]">
166
+ {idx > 0 && <div className="absolute left-0 right-0 top-0 h-px bg-[#dadce0]" />}
167
+ <div className={cn('flex items-center gap-[12px]', item.finished && 'opacity-60')}>
168
+ <TaskIcon id={item.id} className="size-[24px] shrink-0" />
169
+ <div className="flex-1">
170
+ <div className="text-[16px] font-[700] text-[#1e2024]">{item.title}</div>
171
+ {item.description && (
172
+ <div className="mt-[4px] text-[14px] font-[700] text-[#4a4c56]">{item.description}</div>
173
+ )}
174
+ </div>
175
+ {!item.finished && item.link ? (
176
+ <a
177
+ href={item.link}
178
+ target="_blank"
179
+ rel="noopener noreferrer"
180
+ className={cn('cursor-pointer bg-[#080a0f] min-w-[118px] px-[20px] pb-[10px] pt-[11px] text-[14px] font-[700] leading-[1.2] text-white', rounded ? 'rounded-[4px]' : 'rounded-none')}
181
+ >
182
+ {item.buttonLabel}
183
+ </a>
184
+ ) : (
185
+ <button
186
+ className={cn(
187
+ 'cursor-pointer min-w-[118px] px-[20px] pb-[10px] pt-[11px] text-[14px] font-[700] leading-[1.2] text-white',
188
+ item.finished ? 'bg-[#767880]' : 'bg-[#080a0f]',
189
+ rounded ? 'rounded-[4px]' : 'rounded-none'
190
+ )}
191
+ disabled={item.finished}
192
+ onClick={!item.finished ? item.onClick : undefined}
193
+ >
194
+ {item.buttonLabel}
195
+ </button>
196
+ )}
197
+ </div>
198
+ </div>
199
+ ))}
200
+ </div>
201
+ </div>
202
+ </div>
203
+ )
204
+ }
205
+
206
+ function getNotFinishedLabel(id: EarnCreditsTaskType, copy: EarnCreditsCopy): string {
207
+ switch (id) {
208
+ case EarnCreditsTaskType.Activate: return copy.activate
209
+ case EarnCreditsTaskType.CompleteProfile: return copy.completeProfileLabel
210
+ case EarnCreditsTaskType.Subscribe: return copy.subscribeLabel
211
+ case EarnCreditsTaskType.Shop: return copy.shopNow
212
+ }
213
+ }
214
+
215
+ export default EarnCredits
@@ -0,0 +1,41 @@
1
+ import useSWR from 'swr'
2
+ import { useMemberPopupContext } from '../../../context/provider'
3
+
4
+ export type ReferralRewardOverviewResponse = {
5
+ data: {
6
+ data: {
7
+ available: number
8
+ pending: number
9
+ }
10
+ }
11
+ }
12
+
13
+ export function useReferralOverview(): {
14
+ isLoading: boolean
15
+ data?: ReferralRewardOverviewResponse
16
+ } {
17
+ const { profile, alpcConfig } = useMemberPopupContext()
18
+ const isLogin = !!profile
19
+
20
+ const swrKey = isLogin ? `/api/multipass/mktsrv/v1/referral/reward/overview/cash` : null
21
+
22
+ const swrFetcher = async (url: string) => {
23
+ const response = await fetch(url, {
24
+ method: 'GET',
25
+ headers: {
26
+ 'Content-Type': 'application/json',
27
+ 'current-language': alpcConfig.locale,
28
+ },
29
+ })
30
+ if (!response.ok) {
31
+ throw new Error(`HTTP error! status: ${response.status}`)
32
+ }
33
+ return response.json()
34
+ }
35
+
36
+ const { data, isLoading } = useSWR<ReferralRewardOverviewResponse>(swrKey, swrFetcher, {
37
+ revalidateOnFocus: false,
38
+ })
39
+
40
+ return { isLoading, data }
41
+ }
@@ -0,0 +1,108 @@
1
+ import { Picture } from '@anker-in/headless-ui'
2
+ import { classNames as cn, useHeadlessContext } from '@anker-in/lib'
3
+ import { useMemberPopupContext } from '../../context/provider'
4
+ import { useReferralOverview } from './hooks/useReferralOverview'
5
+ import { formatPrice } from '../../../credits/context/utils'
6
+
7
+ import type { ReferralCopy } from '../../type'
8
+ import { ROUNDED_BRANDS } from '../../../../constants'
9
+
10
+ type Props = {
11
+ copy: ReferralCopy
12
+ onClose: () => void
13
+ }
14
+
15
+ function Referral({ copy, onClose }: Props) {
16
+ const { profile, alpcConfig } = useMemberPopupContext()
17
+ const isLogin = !!profile
18
+ const { brand, currencyCode = 'USD' as string } = useHeadlessContext()
19
+ const rounded = ROUNDED_BRANDS.includes(brand)
20
+
21
+ const { data } = useReferralOverview()
22
+
23
+ const cashAvailable = data?.data?.data?.available ?? 0
24
+ const cashPending = data?.data?.data?.pending ?? 0
25
+
26
+ console.log('cashAvailable', cashAvailable)
27
+ console.log('cashPending', cashPending)
28
+ console.log('data', data)
29
+ console.log('data.data', data?.data)
30
+
31
+ return (
32
+ <div className="flex flex-col gap-[12px]">
33
+ {copy.title && <h2 className="text-[24px] font-[700] leading-[1.2] text-[#080a0f]">{copy.title}</h2>}
34
+
35
+ {isLogin && (
36
+ <div
37
+ className={cn(
38
+ 'flex items-center gap-[12px] bg-[#f5f6f7] p-[16px]',
39
+ rounded ? 'rounded-[8px]' : 'rounded-none'
40
+ )}
41
+ >
42
+ <div className="flex flex-1 flex-col gap-[4px]">
43
+ <div className="text-[14px] font-[700] text-[#1e2024]">{copy.cashAvailableLabel}</div>
44
+ <span className="text-[24px] font-[700] leading-[1.2] text-[#1e2024]">
45
+ {formatPrice({ amount: cashAvailable, currencyCode, locale: alpcConfig.locale })}
46
+ </span>
47
+ </div>
48
+ <div className="h-full w-px self-stretch bg-[#dadce0]" />
49
+ <div className="flex flex-1 flex-col gap-[4px]">
50
+ <div className="text-[14px] font-[700] text-[#1e2024]">{copy.cashPendingLabel}</div>
51
+ <span className="text-[24px] font-[700] leading-[1.2] text-[#1e2024]">
52
+ {formatPrice({ amount: cashPending, currencyCode, locale: alpcConfig.locale })}
53
+ </span>
54
+ </div>
55
+ </div>
56
+ )}
57
+
58
+ {(copy.howToTitle || copy.howToDescription) && (
59
+ <div className="flex flex-col gap-[8px]">
60
+ {copy.howToTitle && (
61
+ <h3 className="text-[20px] font-[700] leading-[1.2] text-[#080a0f]">{copy.howToTitle}</h3>
62
+ )}
63
+ {copy.howToDescription && <p className="text-[14px] leading-[1.5] text-[#1e2024]">{copy.howToDescription}</p>}
64
+ {copy.learnMoreLabel && copy.learnMoreUrl && (
65
+ <a
66
+ href={copy.learnMoreUrl}
67
+ target="_blank"
68
+ rel="noopener noreferrer"
69
+ className="flex items-center gap-[4px] text-[14px] font-[700] text-[#080a0f] underline"
70
+ >
71
+ {copy.learnMoreLabel}
72
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
73
+ <path
74
+ d="M5.52827 3.52876C5.78862 3.26841 6.21063 3.26841 6.47098 3.52876L10.471 7.52876C10.7313 7.78911 10.7313 8.21112 10.471 8.47147L6.47098 12.4715C6.21063 12.7318 5.78862 12.7318 5.52827 12.4715C5.26792 12.2111 5.26792 11.7891 5.52827 11.5288L9.05692 8.00011L5.52827 4.47147C5.26792 4.21112 5.26792 3.78911 5.52827 3.52876Z"
75
+ fill="#080A0F"
76
+ />
77
+ </svg>
78
+ </a>
79
+ )}
80
+ </div>
81
+ )}
82
+
83
+ {copy.image?.url && (
84
+ <Picture
85
+ source={copy.image.url}
86
+ alt={copy.image.alt ?? ''}
87
+ className={cn('h-[100px] w-full object-cover', rounded ? 'rounded-[8px]' : 'rounded-none')}
88
+ />
89
+ )}
90
+
91
+ {copy.ctaButton && (
92
+ <a
93
+ href={copy.ctaUrl ?? '#'}
94
+ target="_blank"
95
+ rel="noopener noreferrer"
96
+ className={cn(
97
+ 'block w-full cursor-pointer bg-[#080a0f] py-[14px] text-center text-[14px] font-[700] text-white',
98
+ rounded ? 'rounded-[4px]' : 'rounded-none'
99
+ )}
100
+ >
101
+ {copy.ctaButton}
102
+ </a>
103
+ )}
104
+ </div>
105
+ )
106
+ }
107
+
108
+ export default Referral