@anker-in/campaign-ui 0.5.1-beta.1 → 0.5.1-beta.2

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 (98) hide show
  1. package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.js +1 -1
  2. package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.js.map +3 -3
  3. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +2 -2
  4. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +2 -2
  5. package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js +1 -1
  6. package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +2 -2
  7. package/dist/cjs/components/credits/context/hooks/useMyRewards.js +1 -1
  8. package/dist/cjs/components/credits/context/hooks/useMyRewards.js.map +3 -3
  9. package/dist/cjs/components/credits/context/hooks/useRedeemCoupon.js +1 -1
  10. package/dist/cjs/components/credits/context/hooks/useRedeemCoupon.js.map +3 -3
  11. package/dist/cjs/components/credits/context/hooks/useRedeemGoGift.js +1 -1
  12. package/dist/cjs/components/credits/context/hooks/useRedeemGoGift.js.map +3 -3
  13. package/dist/cjs/components/credits/context/hooks/useRedeemProduct.js +1 -1
  14. package/dist/cjs/components/credits/context/hooks/useRedeemProduct.js.map +3 -3
  15. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js +1 -1
  16. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js.map +3 -3
  17. package/dist/cjs/components/credits/context/hooks/useSubscribed.js.map +2 -2
  18. package/dist/cjs/components/credits/context/provider.d.ts +1 -2
  19. package/dist/cjs/components/credits/context/provider.js +1 -1
  20. package/dist/cjs/components/credits/context/provider.js.map +3 -3
  21. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
  22. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js.map +3 -3
  23. package/dist/cjs/components/index.d.ts +2 -2
  24. package/dist/cjs/components/index.js +1 -1
  25. package/dist/cjs/components/index.js.map +2 -2
  26. package/dist/cjs/components/memberPopup/MemberPopup.js +1 -1
  27. package/dist/cjs/components/memberPopup/MemberPopup.js.map +3 -3
  28. package/dist/cjs/components/memberPopup/type.d.ts +0 -6
  29. package/dist/cjs/components/memberPopup/type.js +1 -1
  30. package/dist/cjs/components/memberPopup/type.js.map +1 -1
  31. package/dist/cjs/stories/CartCard.stories.d.ts +33 -0
  32. package/dist/cjs/stories/CartCard.stories.js +21 -0
  33. package/dist/cjs/stories/CartCard.stories.js.map +7 -0
  34. package/dist/cjs/templates/Credits.js +1 -1
  35. package/dist/cjs/templates/Credits.js.map +2 -2
  36. package/dist/cjs/templates/Credits.types.d.ts +0 -1
  37. package/dist/cjs/templates/Credits.types.js.map +1 -1
  38. package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js +1 -1
  39. package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js.map +3 -3
  40. package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +2 -2
  41. package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +2 -2
  42. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js +1 -1
  43. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +2 -2
  44. package/dist/esm/components/credits/context/hooks/useMyRewards.js +1 -1
  45. package/dist/esm/components/credits/context/hooks/useMyRewards.js.map +3 -3
  46. package/dist/esm/components/credits/context/hooks/useRedeemCoupon.js +1 -1
  47. package/dist/esm/components/credits/context/hooks/useRedeemCoupon.js.map +3 -3
  48. package/dist/esm/components/credits/context/hooks/useRedeemGoGift.js +1 -1
  49. package/dist/esm/components/credits/context/hooks/useRedeemGoGift.js.map +3 -3
  50. package/dist/esm/components/credits/context/hooks/useRedeemProduct.js +1 -1
  51. package/dist/esm/components/credits/context/hooks/useRedeemProduct.js.map +3 -3
  52. package/dist/esm/components/credits/context/hooks/useRedeemableList.js +1 -1
  53. package/dist/esm/components/credits/context/hooks/useRedeemableList.js.map +3 -3
  54. package/dist/esm/components/credits/context/hooks/useSubscribed.js.map +2 -2
  55. package/dist/esm/components/credits/context/provider.d.ts +1 -2
  56. package/dist/esm/components/credits/context/provider.js +1 -1
  57. package/dist/esm/components/credits/context/provider.js.map +3 -3
  58. package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
  59. package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js.map +3 -3
  60. package/dist/esm/components/index.d.ts +2 -2
  61. package/dist/esm/components/index.js +1 -1
  62. package/dist/esm/components/index.js.map +2 -2
  63. package/dist/esm/components/memberPopup/MemberPopup.js +1 -1
  64. package/dist/esm/components/memberPopup/MemberPopup.js.map +3 -3
  65. package/dist/esm/components/memberPopup/type.d.ts +0 -6
  66. package/dist/esm/components/memberPopup/type.js.map +1 -1
  67. package/dist/esm/stories/CartCard.stories.d.ts +33 -0
  68. package/dist/esm/stories/CartCard.stories.js +21 -0
  69. package/dist/esm/stories/CartCard.stories.js.map +7 -0
  70. package/dist/esm/templates/Credits.js +1 -1
  71. package/dist/esm/templates/Credits.js.map +2 -2
  72. package/dist/esm/templates/Credits.types.d.ts +0 -1
  73. package/dist/esm/templates/Credits.types.js.map +1 -1
  74. package/package.json +20 -19
  75. package/src/components/LiveChatWidget/components/MessageContent/FAQList.tsx +15 -1
  76. package/src/components/LiveChatWidget/components/MessageContent/PolicyBlock.tsx +8 -0
  77. package/src/components/LiveChatWidget/components/MessageContent/TextBlock.tsx +3 -1
  78. package/src/components/credits/context/hooks/useMyRewards.ts +2 -2
  79. package/src/components/credits/context/hooks/useRedeemCoupon.ts +2 -2
  80. package/src/components/credits/context/hooks/useRedeemGoGift.ts +2 -2
  81. package/src/components/credits/context/hooks/useRedeemProduct.ts +2 -2
  82. package/src/components/credits/context/hooks/useRedeemableList.ts +2 -2
  83. package/src/components/credits/context/hooks/useSubscribed.ts +1 -0
  84. package/src/components/credits/context/provider.tsx +0 -4
  85. package/src/components/credits/creditsRedeemList/AddressForm/index.tsx +3 -3
  86. package/src/components/index.ts +2 -2
  87. package/src/components/memberPopup/MemberPopup.tsx +3 -14
  88. package/src/components/memberPopup/type.ts +0 -6
  89. package/src/stories/CartCard.stories.tsx +459 -0
  90. package/src/styles/livechat.css +15 -3
  91. package/src/templates/Credits.tsx +0 -1
  92. package/src/templates/Credits.types.ts +0 -1
  93. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.d.ts +0 -10
  94. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js +0 -2
  95. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js.map +0 -7
  96. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.d.ts +0 -10
  97. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js +0 -2
  98. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js.map +0 -7
@@ -117,6 +117,14 @@ const PolicyCard: React.FC<{
117
117
  ol: ({ node, ...props }) => <ol {...props} className="mb-2 ml-4 list-decimal" />,
118
118
  li: ({ node, ...props }) => <li {...props} className="mb-1" />,
119
119
  strong: ({ node, ...props }) => <strong {...props} className="font-bold" />,
120
+ a: ({ node, ...props }) => (
121
+ <a
122
+ {...props}
123
+ className="livechat-link livechat-link-bot"
124
+ target="_blank"
125
+ rel="noopener noreferrer"
126
+ />
127
+ ),
120
128
  }}
121
129
  >
122
130
  {content}
@@ -47,10 +47,12 @@ export const TextBlock: MessageRenderer = {
47
47
  remarkPlugins={[remarkGfm]}
48
48
  components={{
49
49
  // 自定义链接样式
50
+ // livechat-link-user / livechat-link-bot 用于区分用户输入链接与机器人回复链接的颜色,
51
+ // 调用方可直接覆盖这两个类名自定义颜色(见 styles/livechat.css)
50
52
  a: ({ node, ...props }) => (
51
53
  <a
52
54
  {...props}
53
- className={`underline ${isUser ? 'text-blue-200 hover:text-blue-100' : 'text-blue-600 hover:text-blue-700'}`}
55
+ className={`livechat-link underline ${isUser ? 'livechat-link-user' : 'livechat-link-bot'}`}
54
56
  target="_blank"
55
57
  rel="noopener noreferrer"
56
58
  />
@@ -15,7 +15,7 @@ function useMyRewards({
15
15
  pageSize: number
16
16
  consumeType?: AlpcConsumeType
17
17
  }) {
18
- const { profile, alpcBrand, alpcCountry } = useCreditsContext()
18
+ const { profile, alpcBrand } = useCreditsContext()
19
19
  const { brand: headlessBrand, locale, appName } = useHeadlessContext()
20
20
  const brand = alpcBrand || headlessBrand
21
21
 
@@ -34,7 +34,7 @@ function useMyRewards({
34
34
  url: `/v1/credit/log/coupon`,
35
35
  initData: {
36
36
  brand: brand,
37
- country: alpcCountry || ALPC_COUNTRY_MAP.get(locale) || locale,
37
+ country: ALPC_COUNTRY_MAP.get(locale) || locale,
38
38
  app_name: appName,
39
39
  },
40
40
  })
@@ -13,7 +13,7 @@ type RedeemCouponResponse = {
13
13
  }
14
14
 
15
15
  export const useRedeemCoupon = (mutationOptions: UseMutationConfig<RedeemCouponResponse> = {}) => {
16
- const { alpcBrand, alpcCountry } = useCreditsContext()
16
+ const { alpcBrand } = useCreditsContext()
17
17
  const { locale, appName, brand: headlessBrand } = useHeadlessContext()
18
18
  const brand = alpcBrand || headlessBrand
19
19
 
@@ -28,7 +28,7 @@ export const useRedeemCoupon = (mutationOptions: UseMutationConfig<RedeemCouponR
28
28
  url: `/v1/credit/redeem/coupon`,
29
29
  initData: {
30
30
  brand,
31
- country: alpcCountry || ALPC_COUNTRY_MAP.get(locale) || locale,
31
+ country: ALPC_COUNTRY_MAP.get(locale) || locale,
32
32
  app_name: appName,
33
33
  },
34
34
  },
@@ -12,7 +12,7 @@ type RedeemGoGiftResponse = {
12
12
  }
13
13
 
14
14
  export const useRedeemGoGift = (mutationOptions: UseMutationConfig<RedeemGoGiftResponse> = {}) => {
15
- const { alpcBrand, alpcCountry } = useCreditsContext()
15
+ const { alpcBrand } = useCreditsContext()
16
16
  const { locale, appName, brand: headlessBrand } = useHeadlessContext()
17
17
  const brand = alpcBrand || headlessBrand
18
18
 
@@ -27,7 +27,7 @@ export const useRedeemGoGift = (mutationOptions: UseMutationConfig<RedeemGoGiftR
27
27
  url: `/v1/credit/redeem/gogift`,
28
28
  initData: {
29
29
  brand,
30
- country: alpcCountry || ALPC_COUNTRY_MAP.get(locale) || locale,
30
+ country: ALPC_COUNTRY_MAP.get(locale) || locale,
31
31
  app_name: appName,
32
32
  },
33
33
  },
@@ -11,7 +11,7 @@ type RedeemProductResponse = {
11
11
  }
12
12
 
13
13
  export const useRedeemProduct = (mutationOptions: UseMutationConfig<RedeemProductResponse> = {}) => {
14
- const { alpcBrand, alpcCountry } = useCreditsContext()
14
+ const { alpcBrand } = useCreditsContext()
15
15
  const { storeDomain, locale, appName, brand: headlessBrand } = useHeadlessContext()
16
16
  const brand = alpcBrand || headlessBrand
17
17
 
@@ -27,7 +27,7 @@ export const useRedeemProduct = (mutationOptions: UseMutationConfig<RedeemProduc
27
27
  initData: {
28
28
  quantity: 1,
29
29
  brand,
30
- country: (alpcCountry || ALPC_COUNTRY_MAP.get(locale || '') || locale)?.toUpperCase(),
30
+ country: (ALPC_COUNTRY_MAP.get(locale || '') || locale)?.toUpperCase(),
31
31
  domain: storeDomain,
32
32
  app_name: appName,
33
33
  },
@@ -8,7 +8,7 @@ import { useHeadlessContext } from '@anker-in/lib'
8
8
 
9
9
  function useRedeemableList(props?: { consumeType: AlpcConsumeType }) {
10
10
  let locale = '' as string
11
- const { profile, isLoadingProfile, alpcBrand, alpcCountry } = useCreditsContext()
11
+ const { profile, isLoadingProfile, alpcBrand } = useCreditsContext()
12
12
  const { locale: contextLocale, brand: headlessBrand } = useHeadlessContext()
13
13
  const brand = alpcBrand || headlessBrand
14
14
 
@@ -30,7 +30,7 @@ function useRedeemableList(props?: { consumeType: AlpcConsumeType }) {
30
30
  brand,
31
31
  page: 1,
32
32
  page_size: 999,
33
- country: (alpcCountry || ALPC_COUNTRY_MAP.get(locale) || locale)?.toUpperCase(),
33
+ country: (ALPC_COUNTRY_MAP.get(locale) || locale)?.toUpperCase(),
34
34
  },
35
35
  })
36
36
 
@@ -13,6 +13,7 @@ export const useSubscribed = () => {
13
13
 
14
14
  const { activities } = useActivities(activitiesOptions)
15
15
  const { data: subscription } = useSubscriptions({ email: profile?.email })
16
+ //@ts-ignore
16
17
  const subscriptionData = subscription?.data || subscription
17
18
 
18
19
  const isSubscribed = useMemo(() => {
@@ -22,7 +22,6 @@ type Context = {
22
22
  pageCommon: CreditsPageCommon
23
23
  memberPriceDiscount?: FunctionMemberPriceConfig[]
24
24
  alpcBrand?: string
25
- alpcCountry?: string
26
25
  cartConfig?: {
27
26
  addToCart: (params: {
28
27
  variantList: Array<{
@@ -58,7 +57,6 @@ export const CreditsContext = createContext<Context>({
58
57
  pageCommon: {},
59
58
  memberPriceDiscount: undefined,
60
59
  alpcBrand: undefined,
61
- alpcCountry: undefined,
62
60
  cartConfig: undefined,
63
61
  openMyRewardsModal: false,
64
62
  setOpenMyRewardsModal: () => {},
@@ -83,7 +81,6 @@ export function CreditsProvider({
83
81
  pageCommon,
84
82
  memberPriceDiscount,
85
83
  alpcBrand,
86
- alpcCountry,
87
84
  cartConfig,
88
85
  apiBaseUrl,
89
86
  }: PropsWithChildren<Omit<Context, 'openMyRewardsModal' | 'setOpenMyRewardsModal' | 'openActivitiesModal' | 'setOpenActivitiesModal'>>) {
@@ -107,7 +104,6 @@ export function CreditsProvider({
107
104
  pageCommon,
108
105
  memberPriceDiscount,
109
106
  alpcBrand,
110
- alpcCountry,
111
107
  cartConfig,
112
108
  apiBaseUrl,
113
109
  openMyRewardsModal,
@@ -12,7 +12,7 @@ import { AddressFormProps } from './type'
12
12
  import { ROUNDED_BRANDS } from '../../../../constants'
13
13
 
14
14
  export const AddressForm = ({ countries, countriesLoading, form, validate, errors, onChange }: AddressFormProps) => {
15
- const { profile, customer, alpcCountry } = useCreditsContext()
15
+ const { profile, customer } = useCreditsContext()
16
16
  const { locale, brand } = useHeadlessContext()
17
17
  const rounded = ROUNDED_BRANDS.includes(brand)
18
18
  const [address, setAddress] = useState<Record<string, any>>()
@@ -45,7 +45,7 @@ export const AddressForm = ({ countries, countriesLoading, form, validate, error
45
45
  zip: customer?.defaultAddress.zip,
46
46
  }
47
47
  } else {
48
- let defaultCountry = alpcCountry || ALPC_COUNTRY_MAP.get(locale) || locale
48
+ let defaultCountry = ALPC_COUNTRY_MAP.get(locale) || locale
49
49
  if (defaultCountry === 'UK') {
50
50
  defaultCountry = 'GB'
51
51
  }
@@ -57,7 +57,7 @@ export const AddressForm = ({ countries, countriesLoading, form, validate, error
57
57
  country: defaultCountry,
58
58
  }
59
59
  }
60
- }, [customer, profile?.email, locale, alpcCountry])
60
+ }, [customer, profile?.email, locale])
61
61
 
62
62
  useEffect(() => {
63
63
  const defaultAddress = getDefaultAddress()
@@ -1,4 +1,4 @@
1
- export { default as Chat } from './chat/index'
1
+ export { default as Chat } from './chat/index.js'
2
2
 
3
3
  export {
4
4
  Role,
@@ -7,7 +7,7 @@ export {
7
7
  useCopilotChat,
8
8
  useCopilotAction,
9
9
  useCopilotReadable,
10
- } from './chat/utils'
10
+ } from './chat/utils.js'
11
11
 
12
12
  export * from './credits/index.js'
13
13
 
@@ -1,6 +1,6 @@
1
1
  'use client'
2
2
 
3
- import { lazy, Suspense, useState, useCallback, useEffect, type CSSProperties } from 'react'
3
+ import { lazy, Suspense, useState, useCallback, useEffect } from 'react'
4
4
  import { Picture } from '@anker-in/headless-ui'
5
5
  import { gaTrack, type HeadlessConfig, useHeadlessContext, classNames as cn } from '@anker-in/lib'
6
6
  import {
@@ -34,7 +34,6 @@ type MemberPopupProps = MemberPopupContextValue & {
34
34
 
35
35
  export function MemberPopup({ copy, bottomOffset = '24px', ...providerProps }: MemberPopupProps) {
36
36
  const [isVisible, setIsVisible] = useState(false)
37
- const effectiveBottomOffset = copy.bottomOffset ?? bottomOffset
38
37
 
39
38
  useEffect(() => {
40
39
  const config = copy.pageConfig
@@ -58,7 +57,7 @@ export function MemberPopup({ copy, bottomOffset = '24px', ...providerProps }: M
58
57
 
59
58
  return isVisible ? (
60
59
  <MemberPopupProvider {...providerProps} earnCreditsCopy={copy.earnCredits}>
61
- <MemberPopupContent copy={copy} bottomOffset={effectiveBottomOffset} />
60
+ <MemberPopupContent copy={copy} bottomOffset={bottomOffset} />
62
61
  </MemberPopupProvider>
63
62
  ) : null
64
63
  }
@@ -268,17 +267,7 @@ function MemberPopupContent({ copy, bottomOffset }: MemberPopupContentProps) {
268
267
  }}
269
268
  aria-label={copy.triggerImg.alt ?? 'Open member popup'}
270
269
  >
271
- <div
272
- className="size-[var(--member-popup-pc-icon-size)] md:size-[var(--member-popup-mobile-icon-size)]"
273
- style={
274
- {
275
- '--member-popup-pc-icon-size': copy.pcIconSize ?? '58px',
276
- '--member-popup-mobile-icon-size': copy.mobileIconSize ?? copy.pcIconSize ?? '58px',
277
- } as CSSProperties
278
- }
279
- >
280
- <Picture source={copy.triggerImg.url} alt={copy.triggerImg.alt ?? ''} className="size-full" />
281
- </div>
270
+ <Picture source={copy.triggerImg.url} alt={copy.triggerImg.alt ?? ''} className="size-[58px]" />
282
271
  </button>
283
272
  </div>
284
273
  </ViewStackContext.Provider>
@@ -89,12 +89,6 @@ export type MemberPopupCopy = {
89
89
  referral?: ReferralCopy
90
90
  /** 页面覆盖范围配置,默认全局展示 */
91
91
  pageConfig?: MemberPopupPageConfig
92
- /** 悬浮窗距离底部的距离,设置后优先于组件 bottomOffset prop(默认 '24px') */
93
- bottomOffset?: string
94
- /** 触发按钮图标尺寸(PC 端,默认 '58px') */
95
- pcIconSize?: string
96
- /** 触发按钮图标尺寸(移动端,默认 '58px') */
97
- mobileIconSize?: string
98
92
  }
99
93
 
100
94
  // ─── EarnCredits Copy ────────────────────────────────