@anker-in/campaign-ui 0.4.8 → 0.5.0-beta.10

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 (233) hide show
  1. package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js +1 -1
  2. package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +3 -3
  3. package/dist/cjs/components/credits/context/hooks/useCountries.js +1 -1
  4. package/dist/cjs/components/credits/context/hooks/useCountries.js.map +3 -3
  5. package/dist/cjs/components/index.d.ts +1 -0
  6. package/dist/cjs/components/index.js +1 -1
  7. package/dist/cjs/components/index.js.map +2 -2
  8. package/dist/cjs/components/memberPopup/MemberPopup.d.ts +9 -0
  9. package/dist/cjs/components/memberPopup/MemberPopup.js +2 -0
  10. package/dist/cjs/components/memberPopup/MemberPopup.js.map +7 -0
  11. package/dist/cjs/components/memberPopup/context/provider.d.ts +11 -0
  12. package/dist/cjs/components/memberPopup/context/provider.js +2 -0
  13. package/dist/cjs/components/memberPopup/context/provider.js.map +7 -0
  14. package/dist/cjs/components/memberPopup/context/viewStack.d.ts +12 -0
  15. package/dist/cjs/components/memberPopup/context/viewStack.js +2 -0
  16. package/dist/cjs/components/memberPopup/context/viewStack.js.map +7 -0
  17. package/dist/cjs/components/memberPopup/icons.d.ts +27 -0
  18. package/dist/cjs/components/memberPopup/icons.js +2 -0
  19. package/dist/cjs/components/memberPopup/icons.js.map +7 -0
  20. package/dist/cjs/components/memberPopup/index.d.ts +4 -0
  21. package/dist/cjs/components/memberPopup/index.js +2 -0
  22. package/dist/cjs/components/memberPopup/index.js.map +7 -0
  23. package/dist/cjs/components/memberPopup/panels/ActivitiesSubscribePanel.d.ts +10 -0
  24. package/dist/cjs/components/memberPopup/panels/ActivitiesSubscribePanel.js +2 -0
  25. package/dist/cjs/components/memberPopup/panels/ActivitiesSubscribePanel.js.map +7 -0
  26. package/dist/cjs/components/memberPopup/panels/Activity/SubscribeModal.d.ts +10 -0
  27. package/dist/cjs/components/memberPopup/panels/Activity/SubscribeModal.js +2 -0
  28. package/dist/cjs/components/memberPopup/panels/Activity/SubscribeModal.js.map +7 -0
  29. package/dist/cjs/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.d.ts +7 -0
  30. package/dist/cjs/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js +2 -0
  31. package/dist/cjs/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js.map +7 -0
  32. package/dist/cjs/components/memberPopup/panels/Activity/index.d.ts +7 -0
  33. package/dist/cjs/components/memberPopup/panels/Activity/index.js +2 -0
  34. package/dist/cjs/components/memberPopup/panels/Activity/index.js.map +7 -0
  35. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.d.ts +19 -0
  36. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js +2 -0
  37. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js.map +7 -0
  38. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.d.ts +21 -0
  39. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js +2 -0
  40. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js.map +7 -0
  41. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.d.ts +12 -0
  42. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.js +2 -0
  43. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.js.map +7 -0
  44. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.d.ts +17 -0
  45. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.js +2 -0
  46. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.js.map +7 -0
  47. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.d.ts +8 -0
  48. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.js +2 -0
  49. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.js.map +7 -0
  50. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/index.d.ts +7 -0
  51. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/index.js +2 -0
  52. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/index.js.map +7 -0
  53. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivatePanel.d.ts +8 -0
  54. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivatePanel.js +2 -0
  55. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivatePanel.js.map +7 -0
  56. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivitiesSubscribePanel.d.ts +11 -0
  57. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivitiesSubscribePanel.js +2 -0
  58. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivitiesSubscribePanel.js.map +7 -0
  59. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.d.ts +10 -0
  60. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js +2 -0
  61. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js.map +7 -0
  62. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.d.ts +9 -0
  63. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js +2 -0
  64. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js.map +7 -0
  65. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.d.ts +9 -0
  66. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js +2 -0
  67. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js.map +7 -0
  68. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeModal.d.ts +10 -0
  69. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeModal.js +2 -0
  70. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeModal.js.map +7 -0
  71. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribePanel.d.ts +9 -0
  72. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribePanel.js +2 -0
  73. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribePanel.js.map +7 -0
  74. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useActivities.d.ts +18 -0
  75. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useActivities.js +2 -0
  76. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useActivities.js.map +7 -0
  77. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.d.ts +9 -0
  78. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.js +2 -0
  79. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.js.map +7 -0
  80. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.d.ts +17 -0
  81. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.js +2 -0
  82. package/dist/cjs/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.js.map +7 -0
  83. package/dist/cjs/components/memberPopup/panels/EarnCredits/index.d.ts +13 -0
  84. package/dist/cjs/components/memberPopup/panels/EarnCredits/index.js +2 -0
  85. package/dist/cjs/components/memberPopup/panels/EarnCredits/index.js.map +7 -0
  86. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralDashboard.d.ts +13 -0
  87. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js +2 -0
  88. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js.map +7 -0
  89. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralOverview.d.ts +12 -0
  90. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralOverview.js +2 -0
  91. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralOverview.js.map +7 -0
  92. package/dist/cjs/components/memberPopup/panels/Referral/index.d.ts +7 -0
  93. package/dist/cjs/components/memberPopup/panels/Referral/index.js +2 -0
  94. package/dist/cjs/components/memberPopup/panels/Referral/index.js.map +7 -0
  95. package/dist/cjs/components/memberPopup/type.d.ts +231 -0
  96. package/dist/cjs/components/memberPopup/type.js +2 -0
  97. package/dist/cjs/components/memberPopup/type.js.map +7 -0
  98. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js +1 -1
  99. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +3 -3
  100. package/dist/esm/components/credits/context/hooks/useCountries.js +1 -1
  101. package/dist/esm/components/credits/context/hooks/useCountries.js.map +3 -3
  102. package/dist/esm/components/index.d.ts +1 -0
  103. package/dist/esm/components/index.js +1 -1
  104. package/dist/esm/components/index.js.map +2 -2
  105. package/dist/esm/components/memberPopup/MemberPopup.d.ts +9 -0
  106. package/dist/esm/components/memberPopup/MemberPopup.js +2 -0
  107. package/dist/esm/components/memberPopup/MemberPopup.js.map +7 -0
  108. package/dist/esm/components/memberPopup/context/provider.d.ts +11 -0
  109. package/dist/esm/components/memberPopup/context/provider.js +2 -0
  110. package/dist/esm/components/memberPopup/context/provider.js.map +7 -0
  111. package/dist/esm/components/memberPopup/context/viewStack.d.ts +12 -0
  112. package/dist/esm/components/memberPopup/context/viewStack.js +2 -0
  113. package/dist/esm/components/memberPopup/context/viewStack.js.map +7 -0
  114. package/dist/esm/components/memberPopup/icons.d.ts +27 -0
  115. package/dist/esm/components/memberPopup/icons.js +2 -0
  116. package/dist/esm/components/memberPopup/icons.js.map +7 -0
  117. package/dist/esm/components/memberPopup/index.d.ts +4 -0
  118. package/dist/esm/components/memberPopup/index.js +2 -0
  119. package/dist/esm/components/memberPopup/index.js.map +7 -0
  120. package/dist/esm/components/memberPopup/panels/ActivitiesSubscribePanel.d.ts +10 -0
  121. package/dist/esm/components/memberPopup/panels/ActivitiesSubscribePanel.js +2 -0
  122. package/dist/esm/components/memberPopup/panels/ActivitiesSubscribePanel.js.map +7 -0
  123. package/dist/esm/components/memberPopup/panels/Activity/SubscribeModal.d.ts +10 -0
  124. package/dist/esm/components/memberPopup/panels/Activity/SubscribeModal.js +2 -0
  125. package/dist/esm/components/memberPopup/panels/Activity/SubscribeModal.js.map +7 -0
  126. package/dist/esm/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.d.ts +7 -0
  127. package/dist/esm/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js +2 -0
  128. package/dist/esm/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js.map +7 -0
  129. package/dist/esm/components/memberPopup/panels/Activity/index.d.ts +7 -0
  130. package/dist/esm/components/memberPopup/panels/Activity/index.js +2 -0
  131. package/dist/esm/components/memberPopup/panels/Activity/index.js.map +7 -0
  132. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.d.ts +19 -0
  133. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js +2 -0
  134. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js.map +7 -0
  135. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.d.ts +21 -0
  136. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js +2 -0
  137. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js.map +7 -0
  138. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.d.ts +12 -0
  139. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.js +2 -0
  140. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.js.map +7 -0
  141. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.d.ts +17 -0
  142. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.js +2 -0
  143. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.js.map +7 -0
  144. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.d.ts +8 -0
  145. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.js +2 -0
  146. package/dist/esm/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.js.map +7 -0
  147. package/dist/esm/components/memberPopup/panels/ConsumeCredits/index.d.ts +7 -0
  148. package/dist/esm/components/memberPopup/panels/ConsumeCredits/index.js +2 -0
  149. package/dist/esm/components/memberPopup/panels/ConsumeCredits/index.js.map +7 -0
  150. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivatePanel.d.ts +8 -0
  151. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivatePanel.js +2 -0
  152. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivatePanel.js.map +7 -0
  153. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivitiesSubscribePanel.d.ts +11 -0
  154. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivitiesSubscribePanel.js +2 -0
  155. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivitiesSubscribePanel.js.map +7 -0
  156. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.d.ts +10 -0
  157. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js +2 -0
  158. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js.map +7 -0
  159. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.d.ts +9 -0
  160. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js +2 -0
  161. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js.map +7 -0
  162. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.d.ts +9 -0
  163. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js +2 -0
  164. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js.map +7 -0
  165. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeModal.d.ts +10 -0
  166. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeModal.js +2 -0
  167. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeModal.js.map +7 -0
  168. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribePanel.d.ts +9 -0
  169. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribePanel.js +2 -0
  170. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribePanel.js.map +7 -0
  171. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useActivities.d.ts +18 -0
  172. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useActivities.js +2 -0
  173. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useActivities.js.map +7 -0
  174. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.d.ts +9 -0
  175. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.js +2 -0
  176. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.js.map +7 -0
  177. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.d.ts +17 -0
  178. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.js +2 -0
  179. package/dist/esm/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.js.map +7 -0
  180. package/dist/esm/components/memberPopup/panels/EarnCredits/index.d.ts +13 -0
  181. package/dist/esm/components/memberPopup/panels/EarnCredits/index.js +2 -0
  182. package/dist/esm/components/memberPopup/panels/EarnCredits/index.js.map +7 -0
  183. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralDashboard.d.ts +13 -0
  184. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js +2 -0
  185. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js.map +7 -0
  186. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralOverview.d.ts +12 -0
  187. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralOverview.js +2 -0
  188. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralOverview.js.map +7 -0
  189. package/dist/esm/components/memberPopup/panels/Referral/index.d.ts +7 -0
  190. package/dist/esm/components/memberPopup/panels/Referral/index.js +2 -0
  191. package/dist/esm/components/memberPopup/panels/Referral/index.js.map +7 -0
  192. package/dist/esm/components/memberPopup/type.d.ts +231 -0
  193. package/dist/esm/components/memberPopup/type.js +2 -0
  194. package/dist/esm/components/memberPopup/type.js.map +7 -0
  195. package/dist/index.d.mts +1775 -0
  196. package/dist/index.d.ts +1775 -0
  197. package/dist/index.js +18542 -0
  198. package/dist/index.js.map +1 -0
  199. package/dist/index.mjs +18514 -0
  200. package/dist/index.mjs.map +1 -0
  201. package/package.json +1 -1
  202. package/src/components/LiveChatWidget/components/MessageContent/TextBlock.tsx +5 -7
  203. package/src/components/credits/context/hooks/useCountries.ts +4 -15
  204. package/src/components/index.ts +2 -0
  205. package/src/components/memberPopup/MemberPopup.tsx +330 -0
  206. package/src/components/memberPopup/context/provider.tsx +52 -0
  207. package/src/components/memberPopup/context/viewStack.tsx +23 -0
  208. package/src/components/memberPopup/icons.tsx +147 -0
  209. package/src/components/memberPopup/index.ts +24 -0
  210. package/src/components/memberPopup/panels/ActivitiesSubscribePanel.tsx +194 -0
  211. package/src/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.tsx +175 -0
  212. package/src/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemAndBuy.ts +33 -0
  213. package/src/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemCoupon.ts +38 -0
  214. package/src/components/memberPopup/panels/ConsumeCredits/hooks/useRedeemableList.ts +55 -0
  215. package/src/components/memberPopup/panels/ConsumeCredits/index.tsx +291 -0
  216. package/src/components/memberPopup/panels/EarnCredits/ActivatePanel.tsx +323 -0
  217. package/src/components/memberPopup/panels/EarnCredits/CompleteProfileModal.tsx +191 -0
  218. package/src/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.tsx +184 -0
  219. package/src/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.tsx +130 -0
  220. package/src/components/memberPopup/panels/EarnCredits/hooks/useActivities.ts +64 -0
  221. package/src/components/memberPopup/panels/EarnCredits/hooks/useSubscribed.ts +32 -0
  222. package/src/components/memberPopup/panels/EarnCredits/hooks/useUpdateProfile.ts +50 -0
  223. package/src/components/memberPopup/panels/EarnCredits/index.tsx +245 -0
  224. package/src/components/memberPopup/panels/Referral/hooks/useReferralOverview.ts +41 -0
  225. package/src/components/memberPopup/panels/Referral/index.tsx +108 -0
  226. package/src/components/memberPopup/type.ts +242 -0
  227. package/tailwind.config.ts +4 -0
  228. package/dist/cjs/stories/CartCard.stories.d.ts +0 -33
  229. package/dist/cjs/stories/CartCard.stories.js +0 -21
  230. package/dist/cjs/stories/CartCard.stories.js.map +0 -7
  231. package/dist/esm/stories/CartCard.stories.d.ts +0 -33
  232. package/dist/esm/stories/CartCard.stories.js +0 -21
  233. package/dist/esm/stories/CartCard.stories.js.map +0 -7
@@ -0,0 +1,245 @@
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
+ console.log('creditInfo', creditInfo)
52
+
53
+ const isLogin = !!profile
54
+
55
+ const isSubscribed = useSubscribed({
56
+ userId: profile?.user_id,
57
+ brand: brand,
58
+ email: profile?.email,
59
+ locale,
60
+ apiBaseUrl: alpcConfig.apiBaseUrl,
61
+ })
62
+
63
+ const profileCompleted = useMemo(() => {
64
+ return (
65
+ isProfileCompleteSuccess ||
66
+ (!!(profile?.first_name || profile?.last_name) && !!profile?.phone_number && !!profile?.dob)
67
+ )
68
+ }, [profile, isProfileCompleteSuccess])
69
+
70
+ const taskStates: Record<EarnCreditsTaskType, { finished: boolean; onClick?: () => void; link?: string }> = useMemo(
71
+ () => ({
72
+ [EarnCreditsTaskType.Activate]: {
73
+ finished: !!profile?.activated || isActivateSuccess,
74
+ onClick: isLogin
75
+ ? () =>
76
+ pushView({
77
+ type: MemberPopupPanelType.Activate,
78
+ props: { onSuccess: onActivateSuccess },
79
+ })
80
+ : openSignUpPopup,
81
+ },
82
+ [EarnCreditsTaskType.CompleteProfile]: {
83
+ finished: profileCompleted,
84
+ onClick: isLogin
85
+ ? () =>
86
+ pushView({
87
+ type: MemberPopupPanelType.CompleteProfile,
88
+ props: { onSuccess: onProfileCompleteSuccess },
89
+ })
90
+ : openSignUpPopup,
91
+ },
92
+ [EarnCreditsTaskType.Subscribe]: {
93
+ finished: isSubscribed || isSubscribeSuccess,
94
+ onClick: isLogin
95
+ ? () =>
96
+ pushView({
97
+ type: MemberPopupPanelType.SubscribeEmail,
98
+ props: { onSuccess: onSubscribeSuccess },
99
+ })
100
+ : openSignUpPopup,
101
+ },
102
+ [EarnCreditsTaskType.Shop]: {
103
+ finished: false,
104
+ link: copy.goShopLink,
105
+ onClick: isLogin ? undefined : openSignUpPopup,
106
+ },
107
+ }),
108
+ [
109
+ profile,
110
+ isLogin,
111
+ isActivateSuccess,
112
+ isProfileCompleteSuccess,
113
+ profileCompleted,
114
+ isSubscribed,
115
+ isSubscribeSuccess,
116
+ openSignUpPopup,
117
+ pushView,
118
+ copy.goShopLink,
119
+ ]
120
+ )
121
+
122
+ const list = useMemo(() => {
123
+ return copy.list
124
+ .map(item => {
125
+ const state = taskStates[item.id]
126
+ if (!state) return null
127
+ const buttonLabel = state.finished
128
+ ? copy.completed
129
+ : isLogin
130
+ ? getNotFinishedLabel(item.id, copy)
131
+ : copy.joinNow
132
+ return { ...item, ...state, buttonLabel }
133
+ })
134
+ .filter(Boolean) as ((typeof copy.list)[number] & {
135
+ finished: boolean
136
+ onClick?: () => void
137
+ link?: string
138
+ buttonLabel: string
139
+ })[]
140
+ }, [copy, taskStates, isLogin])
141
+
142
+ return (
143
+ <div className="flex flex-col gap-[16px]">
144
+ <div className="flex flex-col gap-[16px]">
145
+ <div className="flex flex-col gap-[8px]">
146
+ {copy.title && <h2 className="text-[24px] font-[700] leading-[1.2] text-[#080a0f]">{copy.title}</h2>}
147
+ </div>
148
+
149
+ {isLogin && (
150
+ <div
151
+ className={cn(
152
+ 'flex items-center gap-[12px] bg-[#f5f6f7] p-[16px]',
153
+ rounded ? 'rounded-[8px]' : 'rounded-none'
154
+ )}
155
+ >
156
+ <div className="flex flex-1 flex-col gap-[4px]">
157
+ <div className="text-[14px] font-[700] text-[#1e2024]">{copy.balanceLabel ?? 'AnkerCredits Balance'}</div>
158
+ <div className="flex items-end gap-[4px]">
159
+ <span className="text-[24px] font-[700] leading-[1.2] text-[#1e2024]">
160
+ {numberFormat(creditInfo?.available_credit ?? 0)}
161
+ </span>
162
+ <span className="text-[14px] font-[700] leading-[1.4] text-[#1e2024]">
163
+ {copy.creditUnit ?? 'ankercredits'}
164
+ </span>
165
+ </div>
166
+ </div>
167
+ <div className="h-full w-px bg-[#dadce0]" />
168
+ <div className="flex flex-1 flex-col gap-[4px]">
169
+ <div className="text-[14px] font-[700] text-[#1e2024]">{copy.comingSoonLabel ?? 'Coming Soon'}</div>
170
+ <div className="flex items-end gap-[4px]">
171
+ <span className="text-[24px] font-[700] leading-[1.2] text-[#1e2024]">
172
+ {numberFormat(creditInfo?.pending_credit ?? 0)}
173
+ </span>
174
+ <span className="text-[14px] font-[700] leading-[1.4] text-[#1e2024]">
175
+ {copy.creditUnit ?? 'ankercredits'}
176
+ </span>
177
+ </div>
178
+ </div>
179
+ </div>
180
+ )}
181
+ </div>
182
+
183
+ <div className="flex flex-col gap-[16px]">
184
+ {copy.subtitle && <p className="text-[16px] font-[700] text-[#1e2024]">{copy.subtitle}</p>}
185
+
186
+ <div className="flex flex-col">
187
+ {list.map((item, idx) => (
188
+ <div key={idx} className="relative py-[16px]">
189
+ {idx > 0 && <div className="absolute left-0 right-0 top-0 h-px bg-[#dadce0]" />}
190
+ <div className={cn('flex items-center gap-[12px]', item.finished && 'opacity-60')}>
191
+ <TaskIcon id={item.id} className="size-[24px] shrink-0" />
192
+ <div className="flex-1">
193
+ <div className="text-[16px] font-[700] text-[#1e2024]">{item.title}</div>
194
+ {item.description && (
195
+ <div className="mt-[4px] text-[14px] font-[700] text-[#4a4c56]">{item.description}</div>
196
+ )}
197
+ </div>
198
+ {!item.finished && item.link && isLogin ? (
199
+ <a
200
+ href={item.link}
201
+ target="_blank"
202
+ rel="noopener noreferrer"
203
+ className={cn(
204
+ 'cursor-pointer bg-[#080a0f] min-w-[118px] px-[20px] pb-[10px] pt-[11px] text-[14px] font-[700] leading-[1.2] text-white',
205
+ rounded ? 'rounded-[4px]' : 'rounded-none'
206
+ )}
207
+ >
208
+ {item.buttonLabel}
209
+ </a>
210
+ ) : (
211
+ <button
212
+ className={cn(
213
+ 'cursor-pointer min-w-[118px] px-[20px] pb-[10px] pt-[11px] text-[14px] font-[700] leading-[1.2] text-white',
214
+ item.finished ? 'bg-[#767880]' : 'bg-[#080a0f]',
215
+ rounded ? 'rounded-[4px]' : 'rounded-none'
216
+ )}
217
+ disabled={item.finished}
218
+ onClick={!item.finished ? item.onClick : undefined}
219
+ >
220
+ {item.buttonLabel}
221
+ </button>
222
+ )}
223
+ </div>
224
+ </div>
225
+ ))}
226
+ </div>
227
+ </div>
228
+ </div>
229
+ )
230
+ }
231
+
232
+ function getNotFinishedLabel(id: EarnCreditsTaskType, copy: EarnCreditsCopy): string {
233
+ switch (id) {
234
+ case EarnCreditsTaskType.Activate:
235
+ return copy.activate
236
+ case EarnCreditsTaskType.CompleteProfile:
237
+ return copy.completeProfileLabel
238
+ case EarnCreditsTaskType.Subscribe:
239
+ return copy.subscribeLabel
240
+ case EarnCreditsTaskType.Shop:
241
+ return copy.shopNow
242
+ }
243
+ }
244
+
245
+ 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('mt-[8px] 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
@@ -0,0 +1,242 @@
1
+ import type { AuthCodeActivateCopy } from '../registration/authCodeActivate/type'
2
+ import type { CreditInfoResponse } from '../credits/context/response'
3
+ import type { DTC_TASK_TYPE } from '../credits/context/const'
4
+
5
+ export type { AuthCodeActivateCopy }
6
+
7
+ // ─── 面板类型枚举 ─────────────────────────────────────
8
+ export enum MemberPopupPanelType {
9
+ EarnCredits = 'EARN_CREDITS',
10
+ ConsumeCredits = 'CONSUME_CREDITS',
11
+ Referral = 'REFERRAL',
12
+ CompleteProfile = 'COMPLETE_PROFILE',
13
+ Subscribe = 'SUBSCRIBE',
14
+ SubscribeEmail = 'SUBSCRIBE_EMAIL',
15
+ RedeemCoupon = 'REDEEM_COUPON',
16
+ Activate = 'ACTIVATE',
17
+ }
18
+
19
+ // ─── item action 类型枚举 ─────────────────────────────
20
+ export enum MemberPopupActionType {
21
+ ExternalLink = 'EXTERNAL_LINK',
22
+ OpenEarnCredits = 'OPEN_EARN_CREDITS',
23
+ OpenConsumeCredits = 'OPEN_CONSUME_CREDITS',
24
+ OpenReferral = 'OPEN_REFERRAL',
25
+ OpenSubscribe = 'OPEN_SUBSCRIBE',
26
+ }
27
+
28
+ // ─── EarnCredits 任务类型枚举 ─────────────────────────
29
+ export enum EarnCreditsTaskType {
30
+ Activate = 'activate',
31
+ CompleteProfile = 'completeProfile',
32
+ Subscribe = 'subscribe',
33
+ Shop = 'shop',
34
+ }
35
+
36
+ // ─── ConsumeCredits item 类型枚举 ─────────────────────
37
+ export enum ConsumeCreditsItemType {
38
+ Coupon = 'COUPON',
39
+ RedeemAndBuy = 'REDEEM_AND_BUY',
40
+ GiftCard = 'GIFT_CARD',
41
+ Product = 'PRODUCT',
42
+ }
43
+
44
+ // ─── 通用 link(统一一种类型) ─────────────────────────
45
+ export type MemberPopupLink = {
46
+ type: MemberPopupActionType
47
+ label: string
48
+ url?: string // 仅 ExternalLink 时使用
49
+ }
50
+
51
+ // ─── list item ────────────────────────────────────────
52
+ export type MemberPopupItem = {
53
+ title: string
54
+ description?: string
55
+ links: MemberPopupLink[]
56
+ }
57
+
58
+ // ── 主组件 Copy ──────────────────────────────────────
59
+ export enum MemberPopupPageScope {
60
+ /** 全局展示 */
61
+ Global = 'GLOBAL',
62
+ /** 仅在特定页面展示 */
63
+ Include = 'INCLUDE',
64
+ /** 在特定页面不展示 */
65
+ Exclude = 'EXCLUDE',
66
+ }
67
+
68
+ export type MemberPopupPageConfig = {
69
+ scope: MemberPopupPageScope
70
+ /** 页面路径列表,支持精确匹配和前缀匹配(如 "/products" 会匹配 "/products/xxx") */
71
+ pages: string[]
72
+ }
73
+
74
+ export type MemberPopupCopy = {
75
+ triggerImg: { url: string; alt?: string }
76
+ title?: string
77
+ subtitle?: string
78
+ list: MemberPopupItem[]
79
+ footer?: {
80
+ loginHint: string
81
+ loginLabel: string
82
+ joinLabel: string
83
+ shopLabel: string
84
+ shopUrl?: string
85
+ }
86
+ activitiesSubscribe?: SubscribeModalCopy
87
+ earnCredits?: EarnCreditsCopy
88
+ consumeCredits?: ConsumeCreditsopy
89
+ referral?: ReferralCopy
90
+ /** 页面覆盖范围配置,默认全局展示 */
91
+ pageConfig?: MemberPopupPageConfig
92
+ }
93
+
94
+ // ─── EarnCredits Copy ────────────────────────────────
95
+ export type EarnCreditsCopy = {
96
+ title?: string
97
+ subtitle?: string
98
+ balanceLabel?: string
99
+ comingSoonLabel?: string
100
+ creditUnit?: string
101
+ joinNow: string
102
+ completed: string
103
+ activate: string
104
+ completeProfileLabel: string
105
+ subscribeLabel: string
106
+ shopNow: string
107
+ goShopLink?: string
108
+ list: {
109
+ id: EarnCreditsTaskType
110
+ title: string
111
+ description: string
112
+ credits?: string
113
+ }[]
114
+ // 子弹窗文案
115
+ authCodeActivate: AuthCodeActivateCopy
116
+ completeProfile: CompleteProfileCopy
117
+ subscribe: SubscribeModalCopy
118
+ }
119
+
120
+ export type CompleteProfileCopy = {
121
+ title: string
122
+ subtitle?: string
123
+ firstName: string
124
+ lastName: string
125
+ email: string
126
+ phone: string
127
+ birthday: string
128
+ country: string
129
+ save: string
130
+ cancel: string
131
+ edit: string
132
+ required: string
133
+ }
134
+
135
+ export type SubscribeModalCopy = {
136
+ title: string
137
+ desc?: string
138
+ placeholder: string
139
+ policy?: string
140
+ successTips?: string
141
+ dealsType?: string
142
+ buttonLabel?: string
143
+ single_brand_subscribe?: boolean
144
+ genre?: string
145
+ sub_brand_type?: string
146
+ promo?: {
147
+ title?: string
148
+ description?: string
149
+ learnMoreLabel?: string
150
+ learnMoreUrl?: string
151
+ image?: { url: string; alt?: string }
152
+ }
153
+ }
154
+
155
+ // ─── ConsumeCredits Copy ────────────────────────────
156
+ export type ConsumeCreditsopy = {
157
+ title?: string
158
+ subtitle?: string
159
+ soldOut: string
160
+ unlockRewards: string
161
+ btnRedeem: string
162
+ insufficientCredits?: string
163
+ balanceLabel?: string
164
+ comingSoonLabel?: string
165
+ creditUnit?: string
166
+ pointUnit?: string
167
+ off?: string
168
+ imageMapping?: {
169
+ [key in ConsumeCreditsItemType]?: { url: string }
170
+ }
171
+ list: ConsumeCreditsItem[]
172
+ redeemModal: RedeemCouponModalCopy
173
+ creditsPage?: { label: string; url: string }
174
+ }
175
+
176
+ export type ConsumeCreditsItem = {
177
+ redeemId: string | number
178
+ title: string
179
+ description?: string
180
+ image: { url: string; alt?: string }
181
+ type: ConsumeCreditsItemType
182
+ product?: { handle: string; sku: string }
183
+ price?: number
184
+ value?: string
185
+ rules?: string[]
186
+ }
187
+
188
+ export type RedeemCouponModalCopy = {
189
+ confirmTitle: string
190
+ confirmButton: string
191
+ commonError: string
192
+ redeemLimitError: string
193
+ inventoryNotEnough: string
194
+ creditsNotEnough: string
195
+ crossSiteError: string
196
+ successTitle: string
197
+ successDesc: string
198
+ successButton: string
199
+ successButtonUrl?: string
200
+ }
201
+
202
+ // ─── Referral Copy ───────────────────────────────────
203
+ export type ReferralCopy = {
204
+ title?: string
205
+ description?: string
206
+ cashAvailableLabel: string
207
+ cashPendingLabel: string
208
+ creditUnit?: string
209
+ referralLinksLabel?: string
210
+ referralLinkBaseUrl?: string
211
+ copyLabel?: string
212
+ copiedLabel?: string
213
+ howToTitle?: string
214
+ howToDescription?: string
215
+ learnMoreLabel?: string
216
+ learnMoreUrl?: string
217
+ image?: { url: string; alt?: string }
218
+ ctaButton: string
219
+ ctaUrl?: string
220
+ loginTitle?: string
221
+ loginDescription?: string
222
+ loginCtaLabel?: string
223
+ }
224
+
225
+ // ─── Provider Context 类型 ───────────────────────────
226
+ export type AlpcConfig = {
227
+ brand: string
228
+ locale: string
229
+ appName: string
230
+ apiBaseUrl?: string
231
+ }
232
+
233
+ export type MemberPopupContextValue = {
234
+ profile: any
235
+ isLoadingProfile: boolean
236
+ creditInfo?: CreditInfoResponse
237
+ fetchCreditInfo: (userId: string) => void
238
+ openSignUpPopup: () => void
239
+ openSignInPopup: () => void
240
+ taskIdToTypeMapping?: Record<string, DTC_TASK_TYPE>
241
+ alpcConfig: AlpcConfig
242
+ }
@@ -14,6 +14,10 @@ export default {
14
14
  },
15
15
  theme: {
16
16
  extend: {
17
+ screens: {
18
+ 'cmp-md': { max: '767px' },
19
+ 'cmp-sm': { max: '374px' },
20
+ },
17
21
  colors: {
18
22
  primary: {
19
23
  DEFAULT: 'var(--brand-color-1)',
@@ -1,33 +0,0 @@
1
- /**
2
- * CartCard Storybook Stories
3
- * 展示购物车卡片组件的各种状态
4
- */
5
- import type { Meta, StoryObj } from '@storybook/react';
6
- import React from 'react';
7
- import type { CartContent } from '../components/LiveChatWidget/types';
8
- declare const CartCardWrapper: React.FC<{
9
- content: CartContent;
10
- }>;
11
- declare const meta: Meta<typeof CartCardWrapper>;
12
- export default meta;
13
- type Story = StoryObj<typeof CartCardWrapper>;
14
- /**
15
- * 空购物车状态
16
- */
17
- export declare const Empty: Story;
18
- /**
19
- * 单件商品
20
- */
21
- export declare const SingleItem: Story;
22
- /**
23
- * 多件商品
24
- */
25
- export declare const MultipleItems: Story;
26
- /**
27
- * 有折扣码的购物车
28
- */
29
- export declare const WithDiscount: Story;
30
- /**
31
- * 多个折扣码(部分失效)
32
- */
33
- export declare const WithMultipleDiscounts: Story;