@anker-in/campaign-ui 0.2.11-beta.2 → 0.2.11-beta.21

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 (510) hide show
  1. package/dist/cjs/components/LiveChatWidget/LiveChatWidget.d.ts +43 -0
  2. package/dist/cjs/components/LiveChatWidget/LiveChatWidget.js +2 -0
  3. package/dist/cjs/components/LiveChatWidget/LiveChatWidget.js.map +7 -0
  4. package/dist/cjs/components/LiveChatWidget/api/chat.d.ts +25 -0
  5. package/dist/cjs/components/LiveChatWidget/api/chat.js +3 -0
  6. package/dist/cjs/components/LiveChatWidget/api/chat.js.map +7 -0
  7. package/dist/cjs/components/LiveChatWidget/components/ChatBubble.d.ts +68 -0
  8. package/dist/cjs/components/LiveChatWidget/components/ChatBubble.js +2 -0
  9. package/dist/cjs/components/LiveChatWidget/components/ChatBubble.js.map +7 -0
  10. package/dist/cjs/components/LiveChatWidget/components/ChatHeader.d.ts +57 -0
  11. package/dist/cjs/components/LiveChatWidget/components/ChatHeader.js +2 -0
  12. package/dist/cjs/components/LiveChatWidget/components/ChatHeader.js.map +7 -0
  13. package/dist/cjs/components/LiveChatWidget/components/ChatInput.d.ts +70 -0
  14. package/dist/cjs/components/LiveChatWidget/components/ChatInput.js +2 -0
  15. package/dist/cjs/components/LiveChatWidget/components/ChatInput.js.map +7 -0
  16. package/dist/cjs/components/LiveChatWidget/components/ChatMessage.d.ts +59 -0
  17. package/dist/cjs/components/LiveChatWidget/components/ChatMessage.js +5 -0
  18. package/dist/cjs/components/LiveChatWidget/components/ChatMessage.js.map +7 -0
  19. package/dist/cjs/components/LiveChatWidget/components/ChatWindow.d.ts +127 -0
  20. package/dist/cjs/components/LiveChatWidget/components/ChatWindow.js +2 -0
  21. package/dist/cjs/components/LiveChatWidget/components/ChatWindow.js.map +7 -0
  22. package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.d.ts +54 -0
  23. package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.js +2 -0
  24. package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.js.map +7 -0
  25. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.d.ts +33 -0
  26. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.js +2 -0
  27. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.js.map +7 -0
  28. package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.d.ts +16 -0
  29. package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.js +2 -0
  30. package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.js.map +7 -0
  31. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.d.ts +45 -0
  32. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +5 -0
  33. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +7 -0
  34. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.d.ts +48 -0
  35. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js +5 -0
  36. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +7 -0
  37. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +70 -0
  38. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.js +2 -0
  39. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +7 -0
  40. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.d.ts +47 -0
  41. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.js +2 -0
  42. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.js.map +7 -0
  43. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.d.ts +78 -0
  44. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.js +2 -0
  45. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.js.map +7 -0
  46. package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.d.ts +54 -0
  47. package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.js +2 -0
  48. package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.js.map +7 -0
  49. package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.d.ts +31 -0
  50. package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js +2 -0
  51. package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +7 -0
  52. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ThinkingBlock.d.ts +31 -0
  53. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js +2 -0
  54. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js.map +7 -0
  55. package/dist/cjs/components/LiveChatWidget/components/MessageContent/index.d.ts +15 -0
  56. package/dist/cjs/components/LiveChatWidget/components/MessageContent/index.js +2 -0
  57. package/dist/cjs/components/LiveChatWidget/components/MessageContent/index.js.map +7 -0
  58. package/dist/cjs/components/LiveChatWidget/components/MessageContent.d.ts +63 -0
  59. package/dist/cjs/components/LiveChatWidget/components/MessageContent.js +2 -0
  60. package/dist/cjs/components/LiveChatWidget/components/MessageContent.js.map +7 -0
  61. package/dist/cjs/components/LiveChatWidget/components/MessageList.d.ts +74 -0
  62. package/dist/cjs/components/LiveChatWidget/components/MessageList.js +5 -0
  63. package/dist/cjs/components/LiveChatWidget/components/MessageList.js.map +7 -0
  64. package/dist/cjs/components/LiveChatWidget/components/ScrollAnchor.d.ts +44 -0
  65. package/dist/cjs/components/LiveChatWidget/components/ScrollAnchor.js +2 -0
  66. package/dist/cjs/components/LiveChatWidget/components/ScrollAnchor.js.map +7 -0
  67. package/dist/cjs/components/LiveChatWidget/constants.d.ts +8 -0
  68. package/dist/cjs/components/LiveChatWidget/constants.js +2 -0
  69. package/dist/cjs/components/LiveChatWidget/constants.js.map +7 -0
  70. package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.d.ts +51 -0
  71. package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.js +2 -0
  72. package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.js.map +7 -0
  73. package/dist/cjs/components/LiveChatWidget/hooks/useChatState.d.ts +120 -0
  74. package/dist/cjs/components/LiveChatWidget/hooks/useChatState.js +2 -0
  75. package/dist/cjs/components/LiveChatWidget/hooks/useChatState.js.map +7 -0
  76. package/dist/cjs/components/LiveChatWidget/hooks/useSession.d.ts +37 -0
  77. package/dist/cjs/components/LiveChatWidget/hooks/useSession.js +2 -0
  78. package/dist/cjs/components/LiveChatWidget/hooks/useSession.js.map +7 -0
  79. package/dist/cjs/components/LiveChatWidget/index.d.ts +12 -0
  80. package/dist/cjs/components/LiveChatWidget/index.js +2 -0
  81. package/dist/cjs/components/LiveChatWidget/index.js.map +7 -0
  82. package/dist/cjs/components/LiveChatWidget/types.d.ts +609 -0
  83. package/dist/cjs/components/LiveChatWidget/types.js +2 -0
  84. package/dist/cjs/components/LiveChatWidget/types.js.map +7 -0
  85. package/dist/cjs/components/LiveChatWidget/utils/cartTransformers.d.ts +25 -0
  86. package/dist/cjs/components/LiveChatWidget/utils/cartTransformers.js +2 -0
  87. package/dist/cjs/components/LiveChatWidget/utils/cartTransformers.js.map +7 -0
  88. package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.d.ts +64 -0
  89. package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.js +2 -0
  90. package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.js.map +7 -0
  91. package/dist/cjs/components/LiveChatWidget/utils/productTransformers.d.ts +43 -0
  92. package/dist/cjs/components/LiveChatWidget/utils/productTransformers.js +2 -0
  93. package/dist/cjs/components/LiveChatWidget/utils/productTransformers.js.map +7 -0
  94. package/dist/cjs/components/LiveChatWidget/utils/userId.d.ts +18 -0
  95. package/dist/cjs/components/LiveChatWidget/utils/userId.js +2 -0
  96. package/dist/cjs/components/LiveChatWidget/utils/userId.js.map +7 -0
  97. package/dist/cjs/components/LiveChatWidget/utils/validation.d.ts +37 -0
  98. package/dist/cjs/components/LiveChatWidget/utils/validation.js +2 -0
  99. package/dist/cjs/components/LiveChatWidget/utils/validation.js.map +7 -0
  100. package/dist/cjs/components/chat/markdown.js +1 -1
  101. package/dist/cjs/components/chat/markdown.js.map +2 -2
  102. package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.d.ts +2 -2
  103. package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js +1 -1
  104. package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js.map +2 -2
  105. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js +1 -1
  106. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js.map +2 -2
  107. package/dist/cjs/components/credits/context/memberPriceConst.d.ts +0 -5
  108. package/dist/cjs/components/credits/context/memberPriceConst.js +1 -1
  109. package/dist/cjs/components/credits/context/memberPriceConst.js.map +3 -3
  110. package/dist/cjs/components/credits/context/memberPriceTypes.d.ts +1 -22
  111. package/dist/cjs/components/credits/context/memberPriceTypes.js +1 -1
  112. package/dist/cjs/components/credits/context/memberPriceTypes.js.map +1 -1
  113. package/dist/cjs/components/credits/context/provider.d.ts +16 -1
  114. package/dist/cjs/components/credits/context/provider.js +1 -1
  115. package/dist/cjs/components/credits/context/provider.js.map +3 -3
  116. package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.d.ts +2 -2
  117. package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js +1 -1
  118. package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js.map +1 -1
  119. package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +2 -2
  120. package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +1 -1
  121. package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +1 -1
  122. package/dist/cjs/components/credits/context/utils/variantGetCoupon.d.ts +2 -2
  123. package/dist/cjs/components/credits/context/utils/variantGetCoupon.js +1 -1
  124. package/dist/cjs/components/credits/context/utils/variantGetCoupon.js.map +1 -1
  125. package/dist/cjs/components/credits/context/utils.d.ts +4 -0
  126. package/dist/cjs/components/credits/context/utils.js +1 -1
  127. package/dist/cjs/components/credits/context/utils.js.map +3 -3
  128. package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +1 -1
  129. package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +3 -3
  130. package/dist/cjs/components/credits/creditsBanner/index.d.ts +2 -0
  131. package/dist/cjs/components/credits/creditsBanner/index.js +12 -1
  132. package/dist/cjs/components/credits/creditsBanner/index.js.map +3 -3
  133. package/dist/cjs/components/credits/creditsBenefits/BenefitItem.js +1 -1
  134. package/dist/cjs/components/credits/creditsBenefits/BenefitItem.js.map +3 -3
  135. package/dist/cjs/components/credits/creditsBenefits/IconInfo.js +1 -1
  136. package/dist/cjs/components/credits/creditsBenefits/IconInfo.js.map +1 -1
  137. package/dist/cjs/components/credits/creditsBenefits/index.js +3 -3
  138. package/dist/cjs/components/credits/creditsBenefits/index.js.map +2 -2
  139. package/dist/cjs/components/credits/creditsCash/CreditsCash.js +1 -1
  140. package/dist/cjs/components/credits/creditsCash/CreditsCash.js.map +3 -3
  141. package/dist/cjs/components/credits/creditsCash/RedeemableItem.js +1 -1
  142. package/dist/cjs/components/credits/creditsCash/RedeemableItem.js.map +3 -3
  143. package/dist/cjs/components/credits/creditsCash/type.d.ts +1 -0
  144. package/dist/cjs/components/credits/creditsCash/type.js +1 -1
  145. package/dist/cjs/components/credits/creditsCash/type.js.map +1 -1
  146. package/dist/cjs/components/credits/creditsFaq/faqItem/FaqItem.js +1 -1
  147. package/dist/cjs/components/credits/creditsFaq/faqItem/FaqItem.js.map +3 -3
  148. package/dist/cjs/components/credits/creditsFaq/index.js +1 -1
  149. package/dist/cjs/components/credits/creditsFaq/index.js.map +3 -3
  150. package/dist/cjs/components/credits/creditsInfoCard/index.js +1 -1
  151. package/dist/cjs/components/credits/creditsInfoCard/index.js.map +3 -3
  152. package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js +1 -1
  153. package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +3 -3
  154. package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js +1 -1
  155. package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js.map +3 -3
  156. package/dist/cjs/components/credits/creditsMemberPrice/Pagination.d.ts +7 -0
  157. package/dist/cjs/components/credits/creditsMemberPrice/Pagination.js +2 -0
  158. package/dist/cjs/components/credits/creditsMemberPrice/Pagination.js.map +7 -0
  159. package/dist/cjs/components/credits/creditsMemberPrice/type.d.ts +3 -5
  160. package/dist/cjs/components/credits/creditsMemberPrice/type.js +1 -1
  161. package/dist/cjs/components/credits/creditsMemberPrice/type.js.map +1 -1
  162. package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js +1 -1
  163. package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js.map +2 -2
  164. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/CountrySelect.js +1 -1
  165. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/CountrySelect.js.map +3 -3
  166. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/StateSelect.js +1 -1
  167. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/StateSelect.js.map +3 -3
  168. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
  169. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js.map +3 -3
  170. package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
  171. package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
  172. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Address.js +1 -1
  173. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Address.js.map +3 -3
  174. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js +1 -1
  175. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js.map +2 -2
  176. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Success.js +1 -1
  177. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Success.js.map +3 -3
  178. package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
  179. package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js.map +3 -3
  180. package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
  181. package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
  182. package/dist/cjs/components/credits/modal/MyRewardsModal.js +1 -1
  183. package/dist/cjs/components/credits/modal/MyRewardsModal.js.map +3 -3
  184. package/dist/cjs/components/credits/modal/activitiesModal.js +1 -1
  185. package/dist/cjs/components/credits/modal/activitiesModal.js.map +3 -3
  186. package/dist/cjs/components/credits/modal/creditsUploadReceiptModal.js +1 -1
  187. package/dist/cjs/components/credits/modal/creditsUploadReceiptModal.js.map +3 -3
  188. package/dist/cjs/components/credits/modal/modalContainer.js +1 -1
  189. package/dist/cjs/components/credits/modal/modalContainer.js.map +3 -3
  190. package/dist/cjs/components/credits/modal/subscribeModal.js +1 -1
  191. package/dist/cjs/components/credits/modal/subscribeModal.js.map +3 -3
  192. package/dist/cjs/components/credits/modal/tip.js +1 -1
  193. package/dist/cjs/components/credits/modal/tip.js.map +3 -3
  194. package/dist/cjs/components/index.d.ts +3 -1
  195. package/dist/cjs/components/index.js +1 -1
  196. package/dist/cjs/components/index.js.map +3 -3
  197. package/dist/cjs/components/registration/authCodeActivate/index.js +1 -1
  198. package/dist/cjs/components/registration/authCodeActivate/index.js.map +3 -3
  199. package/dist/cjs/components/registration/modalContainer.js +1 -1
  200. package/dist/cjs/components/registration/modalContainer.js.map +3 -3
  201. package/dist/cjs/constants.d.ts +1 -0
  202. package/dist/cjs/constants.js +2 -0
  203. package/dist/cjs/constants.js.map +7 -0
  204. package/dist/cjs/index.d.ts +3 -2
  205. package/dist/cjs/index.js +1 -1
  206. package/dist/cjs/index.js.map +2 -2
  207. package/dist/cjs/stories/CartCard.stories.d.ts +33 -0
  208. package/dist/cjs/stories/CartCard.stories.js +21 -0
  209. package/dist/cjs/stories/CartCard.stories.js.map +7 -0
  210. package/dist/cjs/stories/LiveChatWidget.stories.d.ts +92 -0
  211. package/dist/cjs/stories/LiveChatWidget.stories.js +98 -0
  212. package/dist/cjs/stories/LiveChatWidget.stories.js.map +7 -0
  213. package/dist/cjs/templates/Credits.d.ts +15 -1
  214. package/dist/cjs/templates/Credits.js +1 -1
  215. package/dist/cjs/templates/Credits.js.map +3 -3
  216. package/dist/esm/components/LiveChatWidget/LiveChatWidget.d.ts +43 -0
  217. package/dist/esm/components/LiveChatWidget/LiveChatWidget.js +2 -0
  218. package/dist/esm/components/LiveChatWidget/LiveChatWidget.js.map +7 -0
  219. package/dist/esm/components/LiveChatWidget/api/chat.d.ts +25 -0
  220. package/dist/esm/components/LiveChatWidget/api/chat.js +3 -0
  221. package/dist/esm/components/LiveChatWidget/api/chat.js.map +7 -0
  222. package/dist/esm/components/LiveChatWidget/components/ChatBubble.d.ts +68 -0
  223. package/dist/esm/components/LiveChatWidget/components/ChatBubble.js +2 -0
  224. package/dist/esm/components/LiveChatWidget/components/ChatBubble.js.map +7 -0
  225. package/dist/esm/components/LiveChatWidget/components/ChatHeader.d.ts +57 -0
  226. package/dist/esm/components/LiveChatWidget/components/ChatHeader.js +2 -0
  227. package/dist/esm/components/LiveChatWidget/components/ChatHeader.js.map +7 -0
  228. package/dist/esm/components/LiveChatWidget/components/ChatInput.d.ts +70 -0
  229. package/dist/esm/components/LiveChatWidget/components/ChatInput.js +2 -0
  230. package/dist/esm/components/LiveChatWidget/components/ChatInput.js.map +7 -0
  231. package/dist/esm/components/LiveChatWidget/components/ChatMessage.d.ts +59 -0
  232. package/dist/esm/components/LiveChatWidget/components/ChatMessage.js +5 -0
  233. package/dist/esm/components/LiveChatWidget/components/ChatMessage.js.map +7 -0
  234. package/dist/esm/components/LiveChatWidget/components/ChatWindow.d.ts +127 -0
  235. package/dist/esm/components/LiveChatWidget/components/ChatWindow.js +2 -0
  236. package/dist/esm/components/LiveChatWidget/components/ChatWindow.js.map +7 -0
  237. package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.d.ts +54 -0
  238. package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js +2 -0
  239. package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js.map +7 -0
  240. package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.d.ts +33 -0
  241. package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.js +2 -0
  242. package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.js.map +7 -0
  243. package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.d.ts +16 -0
  244. package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js +2 -0
  245. package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js.map +7 -0
  246. package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.d.ts +45 -0
  247. package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +5 -0
  248. package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +7 -0
  249. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.d.ts +48 -0
  250. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js +5 -0
  251. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +7 -0
  252. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +70 -0
  253. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js +2 -0
  254. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +7 -0
  255. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.d.ts +47 -0
  256. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js +2 -0
  257. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js.map +7 -0
  258. package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.d.ts +78 -0
  259. package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.js +2 -0
  260. package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.js.map +7 -0
  261. package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.d.ts +54 -0
  262. package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.js +2 -0
  263. package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.js.map +7 -0
  264. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.d.ts +31 -0
  265. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js +2 -0
  266. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +7 -0
  267. package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.d.ts +31 -0
  268. package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js +2 -0
  269. package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js.map +7 -0
  270. package/dist/esm/components/LiveChatWidget/components/MessageContent/index.d.ts +15 -0
  271. package/dist/esm/components/LiveChatWidget/components/MessageContent/index.js +2 -0
  272. package/dist/esm/components/LiveChatWidget/components/MessageContent/index.js.map +7 -0
  273. package/dist/esm/components/LiveChatWidget/components/MessageContent.d.ts +63 -0
  274. package/dist/esm/components/LiveChatWidget/components/MessageContent.js +2 -0
  275. package/dist/esm/components/LiveChatWidget/components/MessageContent.js.map +7 -0
  276. package/dist/esm/components/LiveChatWidget/components/MessageList.d.ts +74 -0
  277. package/dist/esm/components/LiveChatWidget/components/MessageList.js +5 -0
  278. package/dist/esm/components/LiveChatWidget/components/MessageList.js.map +7 -0
  279. package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.d.ts +44 -0
  280. package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.js +2 -0
  281. package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.js.map +7 -0
  282. package/dist/esm/components/LiveChatWidget/constants.d.ts +8 -0
  283. package/dist/esm/components/LiveChatWidget/constants.js +2 -0
  284. package/dist/esm/components/LiveChatWidget/constants.js.map +7 -0
  285. package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.d.ts +51 -0
  286. package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js +2 -0
  287. package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js.map +7 -0
  288. package/dist/esm/components/LiveChatWidget/hooks/useChatState.d.ts +120 -0
  289. package/dist/esm/components/LiveChatWidget/hooks/useChatState.js +2 -0
  290. package/dist/esm/components/LiveChatWidget/hooks/useChatState.js.map +7 -0
  291. package/dist/esm/components/LiveChatWidget/hooks/useSession.d.ts +37 -0
  292. package/dist/esm/components/LiveChatWidget/hooks/useSession.js +2 -0
  293. package/dist/esm/components/LiveChatWidget/hooks/useSession.js.map +7 -0
  294. package/dist/esm/components/LiveChatWidget/index.d.ts +12 -0
  295. package/dist/esm/components/LiveChatWidget/index.js +2 -0
  296. package/dist/esm/components/LiveChatWidget/index.js.map +7 -0
  297. package/dist/esm/components/LiveChatWidget/types.d.ts +609 -0
  298. package/dist/esm/components/LiveChatWidget/types.js +1 -0
  299. package/dist/esm/components/LiveChatWidget/types.js.map +7 -0
  300. package/dist/esm/components/LiveChatWidget/utils/cartTransformers.d.ts +25 -0
  301. package/dist/esm/components/LiveChatWidget/utils/cartTransformers.js +2 -0
  302. package/dist/esm/components/LiveChatWidget/utils/cartTransformers.js.map +7 -0
  303. package/dist/esm/components/LiveChatWidget/utils/messageRenderers.d.ts +64 -0
  304. package/dist/esm/components/LiveChatWidget/utils/messageRenderers.js +2 -0
  305. package/dist/esm/components/LiveChatWidget/utils/messageRenderers.js.map +7 -0
  306. package/dist/esm/components/LiveChatWidget/utils/productTransformers.d.ts +43 -0
  307. package/dist/esm/components/LiveChatWidget/utils/productTransformers.js +2 -0
  308. package/dist/esm/components/LiveChatWidget/utils/productTransformers.js.map +7 -0
  309. package/dist/esm/components/LiveChatWidget/utils/userId.d.ts +18 -0
  310. package/dist/esm/components/LiveChatWidget/utils/userId.js +2 -0
  311. package/dist/esm/components/LiveChatWidget/utils/userId.js.map +7 -0
  312. package/dist/esm/components/LiveChatWidget/utils/validation.d.ts +37 -0
  313. package/dist/esm/components/LiveChatWidget/utils/validation.js +2 -0
  314. package/dist/esm/components/LiveChatWidget/utils/validation.js.map +7 -0
  315. package/dist/esm/components/chat/markdown.js +1 -1
  316. package/dist/esm/components/chat/markdown.js.map +2 -2
  317. package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.d.ts +2 -2
  318. package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js +1 -1
  319. package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js.map +2 -2
  320. package/dist/esm/components/credits/context/hooks/useRedeemableList.js +1 -1
  321. package/dist/esm/components/credits/context/hooks/useRedeemableList.js.map +2 -2
  322. package/dist/esm/components/credits/context/memberPriceConst.d.ts +0 -5
  323. package/dist/esm/components/credits/context/memberPriceConst.js +1 -1
  324. package/dist/esm/components/credits/context/memberPriceConst.js.map +3 -3
  325. package/dist/esm/components/credits/context/memberPriceTypes.d.ts +1 -22
  326. package/dist/esm/components/credits/context/provider.d.ts +16 -1
  327. package/dist/esm/components/credits/context/provider.js +1 -1
  328. package/dist/esm/components/credits/context/provider.js.map +3 -3
  329. package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.d.ts +2 -2
  330. package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js +1 -1
  331. package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js.map +1 -1
  332. package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +2 -2
  333. package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +1 -1
  334. package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +1 -1
  335. package/dist/esm/components/credits/context/utils/variantGetCoupon.d.ts +2 -2
  336. package/dist/esm/components/credits/context/utils/variantGetCoupon.js +1 -1
  337. package/dist/esm/components/credits/context/utils/variantGetCoupon.js.map +1 -1
  338. package/dist/esm/components/credits/context/utils.d.ts +4 -0
  339. package/dist/esm/components/credits/context/utils.js +1 -1
  340. package/dist/esm/components/credits/context/utils.js.map +3 -3
  341. package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +1 -1
  342. package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +3 -3
  343. package/dist/esm/components/credits/creditsBanner/index.d.ts +2 -0
  344. package/dist/esm/components/credits/creditsBanner/index.js +12 -1
  345. package/dist/esm/components/credits/creditsBanner/index.js.map +3 -3
  346. package/dist/esm/components/credits/creditsBenefits/BenefitItem.js +1 -1
  347. package/dist/esm/components/credits/creditsBenefits/BenefitItem.js.map +3 -3
  348. package/dist/esm/components/credits/creditsBenefits/IconInfo.js +1 -1
  349. package/dist/esm/components/credits/creditsBenefits/IconInfo.js.map +1 -1
  350. package/dist/esm/components/credits/creditsBenefits/index.js +3 -3
  351. package/dist/esm/components/credits/creditsBenefits/index.js.map +2 -2
  352. package/dist/esm/components/credits/creditsCash/CreditsCash.js +1 -1
  353. package/dist/esm/components/credits/creditsCash/CreditsCash.js.map +3 -3
  354. package/dist/esm/components/credits/creditsCash/RedeemableItem.js +1 -1
  355. package/dist/esm/components/credits/creditsCash/RedeemableItem.js.map +3 -3
  356. package/dist/esm/components/credits/creditsCash/type.d.ts +1 -0
  357. package/dist/esm/components/credits/creditsFaq/faqItem/FaqItem.js +1 -1
  358. package/dist/esm/components/credits/creditsFaq/faqItem/FaqItem.js.map +3 -3
  359. package/dist/esm/components/credits/creditsFaq/index.js +1 -1
  360. package/dist/esm/components/credits/creditsFaq/index.js.map +3 -3
  361. package/dist/esm/components/credits/creditsInfoCard/index.js +1 -1
  362. package/dist/esm/components/credits/creditsInfoCard/index.js.map +2 -2
  363. package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js +1 -1
  364. package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +3 -3
  365. package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js +1 -1
  366. package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js.map +3 -3
  367. package/dist/esm/components/credits/creditsMemberPrice/Pagination.d.ts +7 -0
  368. package/dist/esm/components/credits/creditsMemberPrice/Pagination.js +2 -0
  369. package/dist/esm/components/credits/creditsMemberPrice/Pagination.js.map +7 -0
  370. package/dist/esm/components/credits/creditsMemberPrice/type.d.ts +3 -5
  371. package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js +1 -1
  372. package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js.map +2 -2
  373. package/dist/esm/components/credits/creditsRedeemList/AddressForm/CountrySelect.js +1 -1
  374. package/dist/esm/components/credits/creditsRedeemList/AddressForm/CountrySelect.js.map +2 -2
  375. package/dist/esm/components/credits/creditsRedeemList/AddressForm/StateSelect.js +1 -1
  376. package/dist/esm/components/credits/creditsRedeemList/AddressForm/StateSelect.js.map +2 -2
  377. package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
  378. package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js.map +2 -2
  379. package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
  380. package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
  381. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Address.js +1 -1
  382. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Address.js.map +3 -3
  383. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js +1 -1
  384. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js.map +2 -2
  385. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Success.js +1 -1
  386. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Success.js.map +2 -2
  387. package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
  388. package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js.map +3 -3
  389. package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
  390. package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
  391. package/dist/esm/components/credits/modal/MyRewardsModal.js +1 -1
  392. package/dist/esm/components/credits/modal/MyRewardsModal.js.map +2 -2
  393. package/dist/esm/components/credits/modal/activitiesModal.js +1 -1
  394. package/dist/esm/components/credits/modal/activitiesModal.js.map +3 -3
  395. package/dist/esm/components/credits/modal/creditsUploadReceiptModal.js +1 -1
  396. package/dist/esm/components/credits/modal/creditsUploadReceiptModal.js.map +3 -3
  397. package/dist/esm/components/credits/modal/modalContainer.js +1 -1
  398. package/dist/esm/components/credits/modal/modalContainer.js.map +3 -3
  399. package/dist/esm/components/credits/modal/subscribeModal.js +1 -1
  400. package/dist/esm/components/credits/modal/subscribeModal.js.map +3 -3
  401. package/dist/esm/components/credits/modal/tip.js +1 -1
  402. package/dist/esm/components/credits/modal/tip.js.map +3 -3
  403. package/dist/esm/components/index.d.ts +3 -1
  404. package/dist/esm/components/index.js +1 -1
  405. package/dist/esm/components/index.js.map +3 -3
  406. package/dist/esm/components/registration/authCodeActivate/index.js +1 -1
  407. package/dist/esm/components/registration/authCodeActivate/index.js.map +3 -3
  408. package/dist/esm/components/registration/modalContainer.js +1 -1
  409. package/dist/esm/components/registration/modalContainer.js.map +3 -3
  410. package/dist/esm/constants.d.ts +1 -0
  411. package/dist/esm/constants.js +2 -0
  412. package/dist/esm/constants.js.map +7 -0
  413. package/dist/esm/index.d.ts +3 -2
  414. package/dist/esm/index.js +1 -1
  415. package/dist/esm/index.js.map +2 -2
  416. package/dist/esm/stories/CartCard.stories.d.ts +33 -0
  417. package/dist/esm/stories/CartCard.stories.js +21 -0
  418. package/dist/esm/stories/CartCard.stories.js.map +7 -0
  419. package/dist/esm/stories/LiveChatWidget.stories.d.ts +92 -0
  420. package/dist/esm/stories/LiveChatWidget.stories.js +98 -0
  421. package/dist/esm/stories/LiveChatWidget.stories.js.map +7 -0
  422. package/dist/esm/templates/Credits.d.ts +15 -1
  423. package/dist/esm/templates/Credits.js +1 -1
  424. package/dist/esm/templates/Credits.js.map +3 -3
  425. package/package.json +7 -3
  426. package/src/components/LiveChatWidget/LiveChatWidget.tsx +599 -0
  427. package/src/components/LiveChatWidget/api/chat.ts +136 -0
  428. package/src/components/LiveChatWidget/components/ChatBubble.tsx +152 -0
  429. package/src/components/LiveChatWidget/components/ChatHeader.tsx +151 -0
  430. package/src/components/LiveChatWidget/components/ChatInput.tsx +216 -0
  431. package/src/components/LiveChatWidget/components/ChatMessage.tsx +182 -0
  432. package/src/components/LiveChatWidget/components/ChatWindow.tsx +304 -0
  433. package/src/components/LiveChatWidget/components/MessageContent/CartCard.tsx +198 -0
  434. package/src/components/LiveChatWidget/components/MessageContent/ErrorBlock.tsx +75 -0
  435. package/src/components/LiveChatWidget/components/MessageContent/FAQList.tsx +127 -0
  436. package/src/components/LiveChatWidget/components/MessageContent/PolicyBlock.tsx +150 -0
  437. package/src/components/LiveChatWidget/components/MessageContent/ProductCard.tsx +139 -0
  438. package/src/components/LiveChatWidget/components/MessageContent/ProductComparison.tsx +348 -0
  439. package/src/components/LiveChatWidget/components/MessageContent/ProductList.tsx +275 -0
  440. package/src/components/LiveChatWidget/components/MessageContent/PromotionList.tsx +207 -0
  441. package/src/components/LiveChatWidget/components/MessageContent/QuickReplies.tsx +91 -0
  442. package/src/components/LiveChatWidget/components/MessageContent/TextBlock.tsx +89 -0
  443. package/src/components/LiveChatWidget/components/MessageContent/ThinkingBlock.tsx +53 -0
  444. package/src/components/LiveChatWidget/components/MessageContent/index.ts +16 -0
  445. package/src/components/LiveChatWidget/components/MessageContent.tsx +110 -0
  446. package/src/components/LiveChatWidget/components/MessageList.tsx +261 -0
  447. package/src/components/LiveChatWidget/components/ScrollAnchor.tsx +75 -0
  448. package/src/components/LiveChatWidget/constants.ts +15 -0
  449. package/src/components/LiveChatWidget/hooks/useChatAPI.ts +136 -0
  450. package/src/components/LiveChatWidget/hooks/useChatState.ts +542 -0
  451. package/src/components/LiveChatWidget/hooks/useSession.ts +123 -0
  452. package/src/components/LiveChatWidget/index.tsx +62 -0
  453. package/src/components/LiveChatWidget/types.ts +769 -0
  454. package/src/components/LiveChatWidget/utils/cartTransformers.ts +72 -0
  455. package/src/components/LiveChatWidget/utils/messageRenderers.ts +120 -0
  456. package/src/components/LiveChatWidget/utils/productTransformers.ts +149 -0
  457. package/src/components/LiveChatWidget/utils/userId.ts +140 -0
  458. package/src/components/LiveChatWidget/utils/validation.ts +99 -0
  459. package/src/components/chat/markdown.tsx +1 -1
  460. package/src/components/credits/context/hooks/useRedeemableList.ts +1 -1
  461. package/src/components/credits/context/memberPriceConst.ts +0 -7
  462. package/src/components/credits/context/memberPriceTypes.ts +1 -26
  463. package/src/components/credits/context/provider.tsx +16 -0
  464. package/src/components/credits/context/utils.ts +9 -0
  465. package/src/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.tsx +44 -41
  466. package/src/components/credits/creditsBanner/index.tsx +31 -3
  467. package/src/components/credits/creditsBenefits/BenefitItem.tsx +13 -5
  468. package/src/components/credits/creditsBenefits/IconInfo.tsx +1 -1
  469. package/src/components/credits/creditsBenefits/index.tsx +1 -1
  470. package/src/components/credits/creditsCash/CreditsCash.tsx +6 -3
  471. package/src/components/credits/creditsCash/RedeemableItem.tsx +29 -11
  472. package/src/components/credits/creditsCash/type.ts +1 -0
  473. package/src/components/credits/creditsFaq/faqItem/FaqItem.tsx +25 -23
  474. package/src/components/credits/creditsFaq/index.tsx +2 -1
  475. package/src/components/credits/creditsInfoCard/index.tsx +10 -3
  476. package/src/components/credits/creditsMemberPrice/CreditsMemberPrice.tsx +160 -136
  477. package/src/components/credits/creditsMemberPrice/MemberPriceItem.tsx +134 -29
  478. package/src/components/credits/creditsMemberPrice/Pagination.tsx +113 -0
  479. package/src/components/credits/creditsMemberPrice/type.ts +3 -5
  480. package/src/components/credits/creditsNavigation/CreditsNavigation.tsx +3 -3
  481. package/src/components/credits/creditsRedeemList/AddressForm/CountrySelect.tsx +2 -1
  482. package/src/components/credits/creditsRedeemList/AddressForm/StateSelect.tsx +2 -1
  483. package/src/components/credits/creditsRedeemList/AddressForm/index.tsx +2 -1
  484. package/src/components/credits/creditsRedeemList/CreditsRedeemList.tsx +32 -18
  485. package/src/components/credits/creditsRedeemList/RedeemProductModal/Address.tsx +2 -1
  486. package/src/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.tsx +6 -4
  487. package/src/components/credits/creditsRedeemList/RedeemProductModal/Success.tsx +2 -1
  488. package/src/components/credits/creditsRedeemList/RedeemableItem.tsx +21 -7
  489. package/src/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.tsx +34 -20
  490. package/src/components/credits/modal/MyRewardsModal.tsx +2 -1
  491. package/src/components/credits/modal/activitiesModal.tsx +2 -1
  492. package/src/components/credits/modal/creditsUploadReceiptModal.tsx +2 -1
  493. package/src/components/credits/modal/modalContainer.tsx +2 -1
  494. package/src/components/credits/modal/subscribeModal.tsx +2 -1
  495. package/src/components/credits/modal/tip.tsx +2 -1
  496. package/src/components/index.ts +23 -1
  497. package/src/components/registration/authCodeActivate/index.tsx +3 -1
  498. package/src/components/registration/modalContainer.tsx +2 -1
  499. package/src/constants.ts +1 -0
  500. package/src/index.ts +3 -2
  501. package/src/stories/CartCard.stories.tsx +459 -0
  502. package/src/stories/LiveChatWidget.stories.tsx +461 -0
  503. package/src/styles/livechat.css +263 -0
  504. package/src/templates/Credits.tsx +26 -9
  505. package/src/components/credits/context/hooks/useFunctionMemberPrice.ts +0 -33
  506. package/src/components/credits/context/utils/atobID.ts +0 -8
  507. package/src/components/credits/context/utils/functionDiscountCalculate.ts +0 -57
  508. package/src/components/credits/context/utils/getFunctionMemberPrice.ts +0 -135
  509. package/src/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.ts +0 -51
  510. package/src/components/credits/context/utils/variantGetCoupon.ts +0 -34
@@ -0,0 +1,542 @@
1
+ /**
2
+ * 聊天状态管理 Hook
3
+ * 管理消息列表、窗口状态、输入框状态、流式消息累积
4
+ * 基于 specs/livechat-widget/plan.md 的状态管理策略
5
+ */
6
+
7
+ import { useState, useCallback, useRef, useEffect } from 'react'
8
+ import type { Message, MessageContent, SSEEvent, StatusData, ErrorData, MessageStartData, BackendCartData } from '../types'
9
+ import { getUserId } from '../utils/userId'
10
+ import { useSession } from './useSession'
11
+ import { transformProducts } from '../utils/productTransformers'
12
+ import { transformCartData } from '../utils/cartTransformers'
13
+
14
+ export interface UseChatStateOptions {
15
+ /**
16
+ * 初始欢迎消息
17
+ */
18
+ welcomeMessage?: string
19
+
20
+ /**
21
+ * Shopify 店铺域名
22
+ */
23
+ site?: string
24
+
25
+ /**
26
+ * 窗口打开回调
27
+ */
28
+ onOpen?: () => void
29
+
30
+ /**
31
+ * 窗口关闭回调
32
+ */
33
+ onClose?: () => void
34
+
35
+ /**
36
+ * 消息发送回调
37
+ */
38
+ onMessageSend?: (message: string) => void
39
+
40
+ /**
41
+ * 错误处理回调
42
+ */
43
+ onError?: (error: Error) => void
44
+
45
+ /**
46
+ * 商品添加到购物车回调
47
+ */
48
+ onAddToCart?: (product: any) => void
49
+
50
+ /**
51
+ * 购物车按钮点击回调
52
+ */
53
+ onCart?: (cartId: string, checkoutUrl?: string) => void
54
+ }
55
+
56
+ export interface UseChatStateReturn {
57
+ /**
58
+ * 消息列表
59
+ */
60
+ messages: Message[]
61
+
62
+ /**
63
+ * 聊天窗口是否打开
64
+ */
65
+ isOpen: boolean
66
+
67
+ /**
68
+ * 用户 ID
69
+ */
70
+ userId: string
71
+
72
+ /**
73
+ * 会话 ID
74
+ */
75
+ sessionId: string | null
76
+
77
+ /**
78
+ * 输入框内容
79
+ */
80
+ inputValue: string
81
+
82
+ /**
83
+ * 是否正在接收流式消息
84
+ */
85
+ isStreaming: boolean
86
+
87
+ /**
88
+ * 打开聊天窗口
89
+ */
90
+ openChat: () => void
91
+
92
+ /**
93
+ * 关闭聊天窗口
94
+ */
95
+ closeChat: () => void
96
+
97
+ /**
98
+ * 切换聊天窗口状态
99
+ */
100
+ toggleChat: () => void
101
+
102
+ /**
103
+ * 设置输入框内容
104
+ */
105
+ setInputValue: (value: string) => void
106
+
107
+ /**
108
+ * 添加消息到列表
109
+ */
110
+ addMessage: (message: Message) => void
111
+
112
+ /**
113
+ * 批量设置消息列表(用于加载历史)
114
+ */
115
+ setMessages: (messages: Message[]) => void
116
+
117
+ /**
118
+ * 清空消息列表
119
+ */
120
+ clearMessages: () => void
121
+
122
+ /**
123
+ * 处理 SSE 事件
124
+ */
125
+ handleSSEEvent: (event: SSEEvent) => void
126
+
127
+ /**
128
+ * 保存会话 ID
129
+ */
130
+ saveSession: (id: string) => void
131
+
132
+ /**
133
+ * 清空会话
134
+ */
135
+ clearSession: () => void
136
+ }
137
+
138
+ /**
139
+ * 聊天状态管理 Hook
140
+ *
141
+ * 功能:
142
+ * 1. 管理消息列表(添加、清空、批量设置)
143
+ * 2. 管理窗口状态(打开、关闭、切换)
144
+ * 3. 管理输入框状态
145
+ * 4. 处理 SSE 流式消息事件
146
+ * 5. 累积流式文本内容
147
+ *
148
+ * @param options Hook 配置选项
149
+ * @returns 状态管理工具对象
150
+ */
151
+ export function useChatState(options: UseChatStateOptions = {}): UseChatStateReturn {
152
+ const { welcomeMessage, site, onOpen, onClose, onMessageSend, onError, onAddToCart, onCart } = options
153
+
154
+ // 会话管理
155
+ const { sessionId, saveSession, clearSession } = useSession()
156
+
157
+ // 用户 ID (初始化时异步生成)
158
+ const [userId, setUserId] = useState<string>('')
159
+
160
+ // 初始化 userId
161
+ useEffect(() => {
162
+ getUserId().then(id => setUserId(id))
163
+ }, [])
164
+
165
+ // 消息列表
166
+ const [messages, setMessagesState] = useState<Message[]>(() => {
167
+ // 如果有欢迎消息,初始化时添加
168
+ if (welcomeMessage) {
169
+ return [
170
+ {
171
+ id: `welcome-${Date.now()}`,
172
+ role: 'assistant',
173
+ content: [{ type: 'text', text: welcomeMessage }],
174
+ timestamp: Date.now(),
175
+ },
176
+ ]
177
+ }
178
+ return []
179
+ })
180
+
181
+ // 聊天窗口是否打开
182
+ const [isOpen, setIsOpen] = useState(false)
183
+
184
+ // 输入框内容
185
+ const [inputValue, setInputValue] = useState('')
186
+
187
+ // 是否正在接收流式消息
188
+ const [isStreaming, setIsStreaming] = useState(false)
189
+
190
+ // 当前正在累积的流式消息 (临时存储)
191
+ const currentMessageRef = useRef<Message | null>(null)
192
+
193
+ /**
194
+ * 打开聊天窗口
195
+ */
196
+ const openChat = useCallback(() => {
197
+ setIsOpen(true)
198
+ onOpen?.()
199
+ }, [onOpen])
200
+
201
+ /**
202
+ * 关闭聊天窗口
203
+ */
204
+ const closeChat = useCallback(() => {
205
+ setIsOpen(false)
206
+ onClose?.()
207
+ }, [onClose])
208
+
209
+ /**
210
+ * 切换聊天窗口状态
211
+ */
212
+ const toggleChat = useCallback(() => {
213
+ setIsOpen(prev => {
214
+ const newState = !prev
215
+ if (newState) {
216
+ onOpen?.()
217
+ } else {
218
+ onClose?.()
219
+ }
220
+ return newState
221
+ })
222
+ }, [onOpen, onClose])
223
+
224
+ /**
225
+ * 添加消息到列表
226
+ */
227
+ const addMessage = useCallback((message: Message) => {
228
+ setMessagesState(prev => [...prev, message])
229
+ }, [])
230
+
231
+ /**
232
+ * 批量设置消息列表(用于加载历史)
233
+ */
234
+ const setMessages = useCallback((newMessages: Message[]) => {
235
+ setMessagesState(newMessages)
236
+ }, [])
237
+
238
+ /**
239
+ * 清空消息列表
240
+ */
241
+ const clearMessages = useCallback(() => {
242
+ setMessagesState([])
243
+ }, [])
244
+
245
+ /**
246
+ * 处理 SSE 事件
247
+ * 根据事件类型进行不同的处理
248
+ */
249
+ const handleSSEEvent = useCallback(
250
+ (event: SSEEvent) => {
251
+ const { event: eventType, data } = event
252
+
253
+ switch (eventType) {
254
+ case 'message_start': {
255
+ // 开始接收新消息,显示思考气泡
256
+ setIsStreaming(true)
257
+
258
+ // T039: 保存 sessionId(如果后端返回)
259
+ const messageStartData = data as MessageStartData
260
+ if (messageStartData.sessionId && messageStartData.sessionId !== sessionId) {
261
+ saveSession(messageStartData.sessionId)
262
+ }
263
+
264
+ const messageId = `msg-${Date.now()}`
265
+ currentMessageRef.current = {
266
+ id: messageId,
267
+ role: 'assistant',
268
+ content: [{ type: 'thinking', data: { status: 'thinking' } }], // 添加思考状态
269
+ timestamp: Date.now(),
270
+ }
271
+
272
+ // 立即添加到消息列表以显示思考动画
273
+ setMessagesState(prev => [...prev, currentMessageRef.current!])
274
+ break
275
+ }
276
+
277
+ case 'content_delta': {
278
+ // 累积流式文本内容
279
+ // 实际 API 返回的是 {index: 0, delta: "文本"} 而不是 {text: "文本"}
280
+ const deltaData = data as any
281
+ const deltaText = deltaData.delta || deltaData.text || ''
282
+
283
+ if (currentMessageRef.current && deltaText) {
284
+ // 移除思考气泡(如果存在)
285
+ const hasThinking = currentMessageRef.current.content.some(c => c.type === 'thinking')
286
+ if (hasThinking) {
287
+ currentMessageRef.current.content = currentMessageRef.current.content.filter(c => c.type !== 'thinking')
288
+ }
289
+
290
+ const lastContent = currentMessageRef.current.content[currentMessageRef.current.content.length - 1] as
291
+ | MessageContent
292
+ | undefined
293
+
294
+ if (lastContent && lastContent.type === 'text') {
295
+ // 追加到现有文本块
296
+ lastContent.text += deltaText
297
+ } else {
298
+ // 创建新文本块
299
+ currentMessageRef.current.content.push({
300
+ type: 'text',
301
+ text: deltaText,
302
+ })
303
+ }
304
+
305
+ // 更新消息列表以触发渲染
306
+ setMessagesState(prev => {
307
+ const updated = [...prev]
308
+ const existingIndex = updated.findIndex(m => m.id === currentMessageRef.current!.id)
309
+
310
+ if (existingIndex >= 0) {
311
+ updated[existingIndex] = { ...currentMessageRef.current! }
312
+ } else {
313
+ updated.push({ ...currentMessageRef.current! })
314
+ }
315
+
316
+ return updated
317
+ })
318
+ }
319
+ break
320
+ }
321
+
322
+ case 'content_block': {
323
+ // 接收结构化内容块(商品、政策等)
324
+ // API 返回格式变更:
325
+ // 新格式: {index: number, type: string, data: {...}} <- type 在外层
326
+ // 旧格式: {index: number, data: {type: string, ...}} <- type 在 data 内
327
+ const blockData = data as any
328
+ if (currentMessageRef.current) {
329
+ // 获取 type 和 data
330
+ // 优先从外层获取 type,兼容旧格式从 data 内获取
331
+ const contentType = blockData.type || blockData.data?.type
332
+ const contentData = blockData.data
333
+
334
+ if (!contentType || !contentData) {
335
+ console.warn('[useChatState] Invalid content_block:', blockData)
336
+ break
337
+ }
338
+
339
+ // ============================================================
340
+ // 转换数据结构以匹配类型定义
341
+ // 根据后端数据结构规范(飞书文档)进行转换
342
+ // ============================================================
343
+ let messageContent: MessageContent
344
+
345
+ // ========== 1. 产品列表卡片 (Product List) ==========
346
+ // 后端格式: {type: "product_list", data: [product1, product2, ...]}
347
+ // data 直接是产品数组,不是 {products: [...]}
348
+ if (contentType === 'product_list' && Array.isArray(contentData)) {
349
+ // 使用统一的产品转换工具函数
350
+ const transformedProducts = transformProducts(contentData, site)
351
+
352
+ messageContent = {
353
+ type: 'product_list',
354
+ data: {
355
+ products: transformedProducts,
356
+ title: undefined, // 后端新规范不返回 title
357
+ onAddToCart: onAddToCart, // 注入购物车回调
358
+ },
359
+ } as MessageContent
360
+ }
361
+ // ========== 2. 产品对比卡片 (Product Comparison) ==========
362
+ // 后端格式: {type: "product_comparison", data: {products: [...], dimensions: {...}}}
363
+ else if (contentType === 'product_comparison' && contentData.products) {
364
+ // 使用统一的产品转换工具函数
365
+ const transformedProducts = transformProducts(contentData.products, site)
366
+
367
+ messageContent = {
368
+ type: 'product_comparison',
369
+ data: {
370
+ products: transformedProducts,
371
+ dimensions: contentData.dimensions || {},
372
+ },
373
+ } as MessageContent
374
+ }
375
+ // ========== 3. FAQ 列表卡片 (FAQ List) ==========
376
+ // 后端格式: {type: "faq_list", data: {found, count, total, results: [...]}}
377
+ else if (contentType === 'faq_list' && contentData.found !== undefined) {
378
+ messageContent = {
379
+ type: 'faq_list',
380
+ data: contentData, // 直接使用,结构已匹配
381
+ } as MessageContent
382
+ }
383
+ // ========== 4. 快捷回复 (Quick Replies) ==========
384
+ else if (contentType === 'quick_replies' && contentData.replies) {
385
+ messageContent = {
386
+ type: 'quick_replies',
387
+ data: {
388
+ replies: contentData.replies,
389
+ },
390
+ } as MessageContent
391
+ }
392
+ // ========== 5. 政策内容 (Policy) ==========
393
+ else if (contentType === 'policy' && contentData.title && contentData.content) {
394
+ messageContent = {
395
+ type: 'policy',
396
+ data: {
397
+ title: contentData.title,
398
+ content: contentData.content,
399
+ },
400
+ } as MessageContent
401
+ }
402
+ // ========== 6. 促销活动列表 (Promotion List) ==========
403
+ // 后端格式: {type: "promotion_list", data: {found, count, total, results: [...]}}
404
+ else if (contentType === 'promotion_list' && contentData.found !== undefined) {
405
+ messageContent = {
406
+ type: 'promotion_list',
407
+ data: contentData, // 直接使用,结构已匹配
408
+ } as MessageContent
409
+ }
410
+ // ========== 7. 购物车 (Cart) ==========
411
+ // 后端格式: {type: "cart", data: {id, lines: {edges: [...]}, cost, ...}} (Shopify GraphQL)
412
+ // 需要转换为前端格式: {cartId, lines: [...], cost, ...}
413
+ else if (contentType === 'cart' && contentData.id !== undefined) {
414
+ // 转换后端 Shopify GraphQL 格式为前端标准格式
415
+ const transformedData = transformCartData(contentData as BackendCartData)
416
+ messageContent = {
417
+ type: 'cart',
418
+ data: {
419
+ ...transformedData,
420
+ onCart: onCart, // 注入购物车按钮回调
421
+ },
422
+ } as MessageContent
423
+ }
424
+ // ========== 8. 其他类型(通用处理) ==========
425
+ else {
426
+ messageContent = {
427
+ type: contentType,
428
+ data: contentData,
429
+ } as MessageContent
430
+ }
431
+
432
+ currentMessageRef.current.content.push(messageContent)
433
+
434
+ setMessagesState(prev => {
435
+ const updated = [...prev]
436
+ const existingIndex = updated.findIndex(m => m.id === currentMessageRef.current!.id)
437
+
438
+ if (existingIndex >= 0) {
439
+ updated[existingIndex] = { ...currentMessageRef.current! }
440
+ } else {
441
+ updated.push({ ...currentMessageRef.current! })
442
+ }
443
+
444
+ return updated
445
+ })
446
+ }
447
+ break
448
+ }
449
+
450
+ case 'tool_start':
451
+ case 'tool_end': {
452
+ // 工具调用事件,暂时忽略
453
+ // 可以在未来用于显示工具调用状态
454
+ break
455
+ }
456
+
457
+ case 'message_end': {
458
+ // 消息接收完成
459
+ setIsStreaming(false)
460
+ currentMessageRef.current = null
461
+ break
462
+ }
463
+
464
+ case 'status': {
465
+ // T040: 状态更新(如会话过期)
466
+ const statusData = data as StatusData
467
+ if (statusData.type === 'session_expired') {
468
+ // 会话过期,清空消息列表和会话
469
+ clearMessages()
470
+ clearSession()
471
+ if (welcomeMessage) {
472
+ addMessage({
473
+ id: `welcome-${Date.now()}`,
474
+ role: 'assistant',
475
+ content: [{ type: 'text', text: welcomeMessage }],
476
+ timestamp: Date.now(),
477
+ })
478
+ }
479
+ }
480
+ break
481
+ }
482
+
483
+ case 'error': {
484
+ // 错误处理
485
+ const errorData = data as ErrorData
486
+ setIsStreaming(false)
487
+ currentMessageRef.current = null
488
+
489
+ // 添加错误消息到界面
490
+ addMessage({
491
+ id: `error-${Date.now()}`,
492
+ role: 'system',
493
+ content: [
494
+ {
495
+ type: 'error',
496
+ data: {
497
+ message: errorData.message,
498
+ code: errorData.code,
499
+ },
500
+ },
501
+ ],
502
+ timestamp: Date.now(),
503
+ })
504
+
505
+ onError?.(new Error(errorData.message))
506
+ break
507
+ }
508
+
509
+ case 'done': {
510
+ // 流结束
511
+ setIsStreaming(false)
512
+ currentMessageRef.current = null
513
+ break
514
+ }
515
+
516
+ default:
517
+ // 其他事件类型(tool_start, tool_end 等)
518
+ break
519
+ }
520
+ },
521
+ [welcomeMessage, site, addMessage, clearMessages, clearSession, saveSession, sessionId, onError, onAddToCart, onCart]
522
+ )
523
+
524
+ return {
525
+ messages,
526
+ isOpen,
527
+ userId,
528
+ sessionId,
529
+ inputValue,
530
+ isStreaming,
531
+ openChat,
532
+ closeChat,
533
+ toggleChat,
534
+ setInputValue,
535
+ addMessage,
536
+ setMessages,
537
+ clearMessages,
538
+ handleSSEEvent,
539
+ saveSession,
540
+ clearSession,
541
+ }
542
+ }
@@ -0,0 +1,123 @@
1
+ /**
2
+ * 会话管理 Hook
3
+ * 负责 sessionId 的持久化和生命周期管理
4
+ * 基于 specs/livechat-widget/plan.md 的会话管理策略
5
+ */
6
+
7
+ import { useState, useCallback, useEffect } from 'react'
8
+
9
+ const SESSION_KEY = 'livechat_session_id'
10
+
11
+ export interface UseSessionReturn {
12
+ /**
13
+ * 当前会话 ID
14
+ */
15
+ sessionId: string | null
16
+
17
+ /**
18
+ * 保存会话 ID 到 localStorage 和状态
19
+ * @param id 会话 ID (UUID 格式)
20
+ */
21
+ saveSession: (id: string) => void
22
+
23
+ /**
24
+ * 清空会话 ID (会话过期或新会话)
25
+ */
26
+ clearSession: () => void
27
+
28
+ /**
29
+ * 检查是否有活动会话
30
+ */
31
+ hasSession: boolean
32
+ }
33
+
34
+ /**
35
+ * 会话管理 Hook
36
+ *
37
+ * 会话管理策略:
38
+ * 1. 首次对话: 不传 session_id,后端从 message_start 事件返回
39
+ * 2. 存储位置: localStorage.livechat_session_id
40
+ * 3. 会话恢复: 打开聊天窗口时自动加载历史消息
41
+ * 4. 会话过期: 监听 status 事件 (type: "session_expired"),清空消息列表和 sessionId
42
+ * 5. 新会话按钮: 调用 POST /api/chat/new-session,更新 sessionId
43
+ *
44
+ * @returns 会话管理工具对象
45
+ */
46
+ export function useSession(): UseSessionReturn {
47
+ // 从 localStorage 初始化会话 ID
48
+ const [sessionId, setSessionId] = useState<string | null>(() => {
49
+ if (typeof window === 'undefined') return null
50
+
51
+ try {
52
+ return localStorage.getItem(SESSION_KEY)
53
+ } catch (error) {
54
+ console.error('[useSession] Failed to read from localStorage:', error)
55
+ return null
56
+ }
57
+ })
58
+
59
+ /**
60
+ * 保存会话 ID
61
+ * 同时更新状态和 localStorage
62
+ */
63
+ const saveSession = useCallback((id: string) => {
64
+ if (!id || typeof id !== 'string') {
65
+ console.warn('[useSession] Invalid session ID:', id)
66
+ return
67
+ }
68
+
69
+ setSessionId(id)
70
+
71
+ if (typeof window !== 'undefined') {
72
+ try {
73
+ localStorage.setItem(SESSION_KEY, id)
74
+ } catch (error) {
75
+ console.error('[useSession] Failed to save to localStorage:', error)
76
+ }
77
+ }
78
+ }, [])
79
+
80
+ /**
81
+ * 清空会话 ID
82
+ * 用于会话过期或开始新会话
83
+ */
84
+ const clearSession = useCallback(() => {
85
+ setSessionId(null)
86
+
87
+ if (typeof window !== 'undefined') {
88
+ try {
89
+ localStorage.removeItem(SESSION_KEY)
90
+ } catch (error) {
91
+ console.error('[useSession] Failed to remove from localStorage:', error)
92
+ }
93
+ }
94
+ }, [])
95
+
96
+ /**
97
+ * 监听 localStorage 变化(跨标签页同步)
98
+ * 注意:根据计划文档,多标签页不支持实时同步
99
+ * 这里仅监听是为了防止同一浏览器多标签页导致的状态不一致
100
+ */
101
+ useEffect(() => {
102
+ if (typeof window === 'undefined') return
103
+
104
+ const handleStorageChange = (event: StorageEvent) => {
105
+ if (event.key === SESSION_KEY) {
106
+ setSessionId(event.newValue)
107
+ }
108
+ }
109
+
110
+ window.addEventListener('storage', handleStorageChange)
111
+
112
+ return () => {
113
+ window.removeEventListener('storage', handleStorageChange)
114
+ }
115
+ }, [])
116
+
117
+ return {
118
+ sessionId,
119
+ saveSession,
120
+ clearSession,
121
+ hasSession: sessionId !== null,
122
+ }
123
+ }