@anker-in/campaign-ui 0.2.11-beta.3 → 0.2.11-beta.31
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.
- package/dist/cjs/components/LiveChatWidget/LiveChatWidget.d.ts +63 -0
- package/dist/cjs/components/LiveChatWidget/LiveChatWidget.js +2 -0
- package/dist/cjs/components/LiveChatWidget/LiveChatWidget.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/api/chat.d.ts +46 -0
- package/dist/cjs/components/LiveChatWidget/api/chat.js +3 -0
- package/dist/cjs/components/LiveChatWidget/api/chat.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatBubble.d.ts +68 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatBubble.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatBubble.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatHeader.d.ts +57 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatHeader.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatHeader.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatInput.d.ts +70 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatInput.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatInput.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatMessage.d.ts +59 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatMessage.js +5 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatMessage.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatWindow.d.ts +127 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatWindow.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatWindow.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.d.ts +54 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.d.ts +33 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.d.ts +16 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.d.ts +45 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +5 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.d.ts +41 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +75 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.d.ts +47 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.d.ts +81 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.d.ts +54 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.d.ts +31 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ThinkingBlock.d.ts +31 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/index.d.ts +15 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/index.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/index.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent.d.ts +63 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageList.d.ts +74 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageList.js +5 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageList.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/ScrollAnchor.d.ts +44 -0
- package/dist/cjs/components/LiveChatWidget/components/ScrollAnchor.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/ScrollAnchor.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/constants.d.ts +13 -0
- package/dist/cjs/components/LiveChatWidget/constants.js +2 -0
- package/dist/cjs/components/LiveChatWidget/constants.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.d.ts +60 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.js +2 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatState.d.ts +151 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatState.js +2 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatState.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useSession.d.ts +37 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useSession.js +2 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useSession.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/index.d.ts +12 -0
- package/dist/cjs/components/LiveChatWidget/index.js +2 -0
- package/dist/cjs/components/LiveChatWidget/index.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/types.d.ts +767 -0
- package/dist/cjs/components/LiveChatWidget/types.js +2 -0
- package/dist/cjs/components/LiveChatWidget/types.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/utils/cartTransformers.d.ts +25 -0
- package/dist/cjs/components/LiveChatWidget/utils/cartTransformers.js +2 -0
- package/dist/cjs/components/LiveChatWidget/utils/cartTransformers.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/utils/fetcher.d.ts +36 -0
- package/dist/cjs/components/LiveChatWidget/utils/fetcher.js +2 -0
- package/dist/cjs/components/LiveChatWidget/utils/fetcher.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.d.ts +64 -0
- package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.js +2 -0
- package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/utils/productTransformers.d.ts +43 -0
- package/dist/cjs/components/LiveChatWidget/utils/productTransformers.js +2 -0
- package/dist/cjs/components/LiveChatWidget/utils/productTransformers.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/utils/userId.d.ts +18 -0
- package/dist/cjs/components/LiveChatWidget/utils/userId.js +2 -0
- package/dist/cjs/components/LiveChatWidget/utils/userId.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/utils/validation.d.ts +37 -0
- package/dist/cjs/components/LiveChatWidget/utils/validation.js +2 -0
- package/dist/cjs/components/LiveChatWidget/utils/validation.js.map +7 -0
- package/dist/cjs/components/chat/markdown.js +1 -1
- package/dist/cjs/components/chat/markdown.js.map +2 -2
- package/dist/cjs/components/credits/context/hooks/useRedeemableList.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useRedeemableList.js.map +2 -2
- package/dist/cjs/components/credits/context/memberPriceConst.d.ts +0 -5
- package/dist/cjs/components/credits/context/memberPriceConst.js +1 -1
- package/dist/cjs/components/credits/context/memberPriceConst.js.map +3 -3
- package/dist/cjs/components/credits/context/memberPriceTypes.d.ts +1 -22
- package/dist/cjs/components/credits/context/memberPriceTypes.js +1 -1
- package/dist/cjs/components/credits/context/memberPriceTypes.js.map +1 -1
- package/dist/cjs/components/credits/context/provider.d.ts +16 -1
- package/dist/cjs/components/credits/context/provider.js +1 -1
- package/dist/cjs/components/credits/context/provider.js.map +3 -3
- package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +1 -1
- package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +3 -3
- package/dist/cjs/components/credits/creditsBanner/index.d.ts +2 -0
- package/dist/cjs/components/credits/creditsBanner/index.js +12 -1
- package/dist/cjs/components/credits/creditsBanner/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsBenefits/BenefitItem.js +2 -0
- package/dist/cjs/components/credits/creditsBenefits/BenefitItem.js.map +7 -0
- package/dist/cjs/components/credits/creditsBenefits/{iconInfo.js → IconInfo.js} +1 -1
- package/dist/cjs/components/credits/creditsBenefits/{iconInfo.js.map → IconInfo.js.map} +1 -1
- package/dist/cjs/components/credits/creditsCash/CreditsCash.js +1 -1
- package/dist/cjs/components/credits/creditsCash/CreditsCash.js.map +3 -3
- package/dist/cjs/components/credits/creditsCash/RedeemableItem.js +1 -1
- package/dist/cjs/components/credits/creditsCash/RedeemableItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsCash/type.d.ts +1 -0
- package/dist/cjs/components/credits/creditsCash/type.js +1 -1
- package/dist/cjs/components/credits/creditsCash/type.js.map +1 -1
- package/dist/cjs/components/credits/creditsFaq/faqItem/FaqItem.js +1 -1
- package/dist/cjs/components/credits/creditsFaq/faqItem/FaqItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsInfoCard/index.js +1 -1
- package/dist/cjs/components/credits/creditsInfoCard/index.js.map +2 -2
- package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js +1 -1
- package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +3 -3
- package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js +1 -1
- package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsMemberPrice/type.d.ts +3 -5
- package/dist/cjs/components/credits/creditsMemberPrice/type.js +1 -1
- package/dist/cjs/components/credits/creditsMemberPrice/type.js.map +1 -1
- package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js +1 -1
- package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js.map +2 -2
- package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js.map +2 -2
- package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
- package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
- package/dist/cjs/components/index.d.ts +3 -1
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/index.js.map +3 -3
- package/dist/cjs/components/registration/authCodeActivate/index.js +1 -1
- package/dist/cjs/components/registration/authCodeActivate/index.js.map +2 -2
- package/dist/cjs/stories/CartCard.stories.d.ts +33 -0
- package/dist/cjs/stories/CartCard.stories.js +21 -0
- package/dist/cjs/stories/CartCard.stories.js.map +7 -0
- package/dist/cjs/stories/LiveChatWidget.stories.d.ts +108 -0
- package/dist/cjs/stories/LiveChatWidget.stories.js +149 -0
- package/dist/cjs/stories/LiveChatWidget.stories.js.map +7 -0
- package/dist/cjs/templates/{credits.d.ts → Credits.d.ts} +16 -1
- package/dist/cjs/templates/Credits.js +2 -0
- package/dist/cjs/templates/Credits.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/LiveChatWidget.d.ts +63 -0
- package/dist/esm/components/LiveChatWidget/LiveChatWidget.js +2 -0
- package/dist/esm/components/LiveChatWidget/LiveChatWidget.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/api/chat.d.ts +46 -0
- package/dist/esm/components/LiveChatWidget/api/chat.js +3 -0
- package/dist/esm/components/LiveChatWidget/api/chat.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/ChatBubble.d.ts +68 -0
- package/dist/esm/components/LiveChatWidget/components/ChatBubble.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/ChatBubble.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/ChatHeader.d.ts +57 -0
- package/dist/esm/components/LiveChatWidget/components/ChatHeader.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/ChatHeader.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/ChatInput.d.ts +70 -0
- package/dist/esm/components/LiveChatWidget/components/ChatInput.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/ChatInput.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/ChatMessage.d.ts +59 -0
- package/dist/esm/components/LiveChatWidget/components/ChatMessage.js +5 -0
- package/dist/esm/components/LiveChatWidget/components/ChatMessage.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/ChatWindow.d.ts +127 -0
- package/dist/esm/components/LiveChatWidget/components/ChatWindow.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/ChatWindow.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.d.ts +54 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.d.ts +33 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.d.ts +16 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.d.ts +45 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +5 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.d.ts +41 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +75 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.d.ts +47 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.d.ts +81 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.d.ts +54 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.d.ts +31 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.d.ts +31 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/index.d.ts +15 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/index.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/index.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent.d.ts +63 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageList.d.ts +74 -0
- package/dist/esm/components/LiveChatWidget/components/MessageList.js +5 -0
- package/dist/esm/components/LiveChatWidget/components/MessageList.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.d.ts +44 -0
- package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/constants.d.ts +13 -0
- package/dist/esm/components/LiveChatWidget/constants.js +2 -0
- package/dist/esm/components/LiveChatWidget/constants.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.d.ts +60 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js +2 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatState.d.ts +151 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatState.js +2 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatState.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/hooks/useSession.d.ts +37 -0
- package/dist/esm/components/LiveChatWidget/hooks/useSession.js +2 -0
- package/dist/esm/components/LiveChatWidget/hooks/useSession.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/index.d.ts +12 -0
- package/dist/esm/components/LiveChatWidget/index.js +2 -0
- package/dist/esm/components/LiveChatWidget/index.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/types.d.ts +767 -0
- package/dist/esm/components/LiveChatWidget/types.js +1 -0
- package/dist/esm/components/LiveChatWidget/types.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/utils/cartTransformers.d.ts +25 -0
- package/dist/esm/components/LiveChatWidget/utils/cartTransformers.js +2 -0
- package/dist/esm/components/LiveChatWidget/utils/cartTransformers.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/utils/fetcher.d.ts +36 -0
- package/dist/esm/components/LiveChatWidget/utils/fetcher.js +2 -0
- package/dist/esm/components/LiveChatWidget/utils/fetcher.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/utils/messageRenderers.d.ts +64 -0
- package/dist/esm/components/LiveChatWidget/utils/messageRenderers.js +2 -0
- package/dist/esm/components/LiveChatWidget/utils/messageRenderers.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/utils/productTransformers.d.ts +43 -0
- package/dist/esm/components/LiveChatWidget/utils/productTransformers.js +2 -0
- package/dist/esm/components/LiveChatWidget/utils/productTransformers.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/utils/userId.d.ts +18 -0
- package/dist/esm/components/LiveChatWidget/utils/userId.js +2 -0
- package/dist/esm/components/LiveChatWidget/utils/userId.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/utils/validation.d.ts +37 -0
- package/dist/esm/components/LiveChatWidget/utils/validation.js +2 -0
- package/dist/esm/components/LiveChatWidget/utils/validation.js.map +7 -0
- package/dist/esm/components/chat/markdown.js +1 -1
- package/dist/esm/components/chat/markdown.js.map +2 -2
- package/dist/esm/components/credits/context/hooks/useRedeemableList.js +1 -1
- package/dist/esm/components/credits/context/hooks/useRedeemableList.js.map +2 -2
- package/dist/esm/components/credits/context/memberPriceConst.d.ts +0 -5
- package/dist/esm/components/credits/context/memberPriceConst.js +1 -1
- package/dist/esm/components/credits/context/memberPriceConst.js.map +3 -3
- package/dist/esm/components/credits/context/memberPriceTypes.d.ts +1 -22
- package/dist/esm/components/credits/context/provider.d.ts +16 -1
- package/dist/esm/components/credits/context/provider.js +1 -1
- package/dist/esm/components/credits/context/provider.js.map +3 -3
- package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +1 -1
- package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +3 -3
- package/dist/esm/components/credits/creditsBanner/index.d.ts +2 -0
- package/dist/esm/components/credits/creditsBanner/index.js +12 -1
- package/dist/esm/components/credits/creditsBanner/index.js.map +3 -3
- package/dist/esm/components/credits/creditsBenefits/BenefitItem.js +2 -0
- package/dist/esm/components/credits/creditsBenefits/BenefitItem.js.map +7 -0
- package/dist/esm/components/credits/creditsBenefits/{iconInfo.js → IconInfo.js} +1 -1
- package/dist/esm/components/credits/creditsBenefits/{iconInfo.js.map → IconInfo.js.map} +1 -1
- package/dist/esm/components/credits/creditsCash/CreditsCash.js +1 -1
- package/dist/esm/components/credits/creditsCash/CreditsCash.js.map +3 -3
- package/dist/esm/components/credits/creditsCash/RedeemableItem.js +1 -1
- package/dist/esm/components/credits/creditsCash/RedeemableItem.js.map +3 -3
- package/dist/esm/components/credits/creditsCash/type.d.ts +1 -0
- package/dist/esm/components/credits/creditsFaq/faqItem/FaqItem.js +1 -1
- package/dist/esm/components/credits/creditsFaq/faqItem/FaqItem.js.map +3 -3
- package/dist/esm/components/credits/creditsInfoCard/index.js +1 -1
- package/dist/esm/components/credits/creditsInfoCard/index.js.map +2 -2
- package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js +1 -1
- package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +3 -3
- package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js +1 -1
- package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js.map +3 -3
- package/dist/esm/components/credits/creditsMemberPrice/type.d.ts +3 -5
- package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js +1 -1
- package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js.map +2 -2
- package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js.map +2 -2
- package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js.map +3 -3
- package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
- package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
- package/dist/esm/components/index.d.ts +3 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/index.js.map +3 -3
- package/dist/esm/components/registration/authCodeActivate/index.js +1 -1
- package/dist/esm/components/registration/authCodeActivate/index.js.map +2 -2
- package/dist/esm/stories/CartCard.stories.d.ts +33 -0
- package/dist/esm/stories/CartCard.stories.js +21 -0
- package/dist/esm/stories/CartCard.stories.js.map +7 -0
- package/dist/esm/stories/LiveChatWidget.stories.d.ts +108 -0
- package/dist/esm/stories/LiveChatWidget.stories.js +149 -0
- package/dist/esm/stories/LiveChatWidget.stories.js.map +7 -0
- package/dist/esm/templates/{credits.d.ts → Credits.d.ts} +16 -1
- package/dist/esm/templates/Credits.js +2 -0
- package/dist/esm/templates/Credits.js.map +7 -0
- package/dist/index.d.mts +1305 -0
- package/dist/index.d.ts +1305 -0
- package/dist/index.js +26656 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +26641 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +7 -3
- package/src/components/LiveChatWidget/LiveChatWidget.tsx +732 -0
- package/src/components/LiveChatWidget/api/chat.ts +174 -0
- package/src/components/LiveChatWidget/components/ChatBubble.tsx +152 -0
- package/src/components/LiveChatWidget/components/ChatHeader.tsx +150 -0
- package/src/components/LiveChatWidget/components/ChatInput.tsx +241 -0
- package/src/components/LiveChatWidget/components/ChatMessage.tsx +190 -0
- package/src/components/LiveChatWidget/components/ChatWindow.tsx +353 -0
- package/src/components/LiveChatWidget/components/MessageContent/CartCard.tsx +202 -0
- package/src/components/LiveChatWidget/components/MessageContent/ErrorBlock.tsx +75 -0
- package/src/components/LiveChatWidget/components/MessageContent/FAQList.tsx +127 -0
- package/src/components/LiveChatWidget/components/MessageContent/PolicyBlock.tsx +150 -0
- package/src/components/LiveChatWidget/components/MessageContent/ProductCard.tsx +218 -0
- package/src/components/LiveChatWidget/components/MessageContent/ProductComparison.tsx +359 -0
- package/src/components/LiveChatWidget/components/MessageContent/ProductList.tsx +293 -0
- package/src/components/LiveChatWidget/components/MessageContent/PromotionList.tsx +170 -0
- package/src/components/LiveChatWidget/components/MessageContent/QuickReplies.tsx +91 -0
- package/src/components/LiveChatWidget/components/MessageContent/TextBlock.tsx +89 -0
- package/src/components/LiveChatWidget/components/MessageContent/ThinkingBlock.tsx +53 -0
- package/src/components/LiveChatWidget/components/MessageContent/index.ts +16 -0
- package/src/components/LiveChatWidget/components/MessageContent.tsx +113 -0
- package/src/components/LiveChatWidget/components/MessageList.tsx +261 -0
- package/src/components/LiveChatWidget/components/ScrollAnchor.tsx +75 -0
- package/src/components/LiveChatWidget/constants.ts +36 -0
- package/src/components/LiveChatWidget/hooks/useChatAPI.ts +146 -0
- package/src/components/LiveChatWidget/hooks/useChatState.ts +1086 -0
- package/src/components/LiveChatWidget/hooks/useSession.ts +123 -0
- package/src/components/LiveChatWidget/index.tsx +62 -0
- package/src/components/LiveChatWidget/types.ts +949 -0
- package/src/components/LiveChatWidget/utils/cartTransformers.ts +72 -0
- package/src/components/LiveChatWidget/utils/fetcher.ts +126 -0
- package/src/components/LiveChatWidget/utils/messageRenderers.ts +120 -0
- package/src/components/LiveChatWidget/utils/productTransformers.ts +149 -0
- package/src/components/LiveChatWidget/utils/userId.ts +140 -0
- package/src/components/LiveChatWidget/utils/validation.ts +99 -0
- package/src/components/chat/markdown.tsx +1 -1
- package/src/components/credits/context/hooks/useRedeemableList.ts +1 -1
- package/src/components/credits/context/memberPriceConst.ts +0 -7
- package/src/components/credits/context/memberPriceTypes.ts +1 -26
- package/src/components/credits/context/provider.tsx +16 -0
- package/src/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.tsx +26 -26
- package/src/components/credits/creditsBanner/index.tsx +31 -3
- package/src/components/credits/creditsBenefits/BenefitItem.tsx +11 -4
- package/src/components/credits/creditsBenefits/IconInfo.tsx +1 -1
- package/src/components/credits/creditsCash/CreditsCash.tsx +6 -3
- package/src/components/credits/creditsCash/RedeemableItem.tsx +23 -10
- package/src/components/credits/creditsCash/type.ts +1 -0
- package/src/components/credits/creditsFaq/faqItem/FaqItem.tsx +25 -23
- package/src/components/credits/creditsInfoCard/index.tsx +8 -2
- package/src/components/credits/creditsMemberPrice/CreditsMemberPrice.tsx +124 -25
- package/src/components/credits/creditsMemberPrice/MemberPriceItem.tsx +113 -31
- package/src/components/credits/creditsMemberPrice/type.ts +3 -5
- package/src/components/credits/creditsNavigation/CreditsNavigation.tsx +3 -3
- package/src/components/credits/creditsRedeemList/CreditsRedeemList.tsx +31 -18
- package/src/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.tsx +6 -4
- package/src/components/credits/creditsRedeemList/RedeemableItem.tsx +19 -6
- package/src/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.tsx +20 -17
- package/src/components/index.ts +23 -1
- package/src/components/registration/authCodeActivate/index.tsx +2 -0
- package/src/stories/CartCard.stories.tsx +459 -0
- package/src/stories/LiveChatWidget.stories.tsx +754 -0
- package/src/styles/livechat.css +268 -0
- package/src/templates/Credits.tsx +27 -9
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.d.ts +0 -7
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js +0 -2
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js.map +0 -7
- package/dist/cjs/components/credits/context/hooks/useSendEmailValidation.d.ts +0 -1
- package/dist/cjs/components/credits/context/hooks/useSendEmailValidation.js +0 -2
- package/dist/cjs/components/credits/context/hooks/useSendEmailValidation.js.map +0 -7
- package/dist/cjs/components/credits/context/hooks/useSubscriptions.d.ts +0 -9
- package/dist/cjs/components/credits/context/hooks/useSubscriptions.js +0 -2
- package/dist/cjs/components/credits/context/hooks/useSubscriptions.js.map +0 -7
- package/dist/cjs/components/credits/context/utils/atobID.d.ts +0 -1
- package/dist/cjs/components/credits/context/utils/atobID.js +0 -2
- package/dist/cjs/components/credits/context/utils/atobID.js.map +0 -7
- package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.d.ts +0 -5
- package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.js +0 -2
- package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.js.map +0 -7
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.d.ts +0 -8
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js +0 -2
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js.map +0 -7
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +0 -9
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +0 -2
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +0 -7
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.d.ts +0 -6
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.js +0 -2
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.js.map +0 -7
- package/dist/cjs/components/credits/creditsBenefits/benefitItem.js +0 -2
- package/dist/cjs/components/credits/creditsBenefits/benefitItem.js.map +0 -7
- package/dist/cjs/helpers/fetchResponse.d.ts +0 -14
- package/dist/cjs/helpers/fetchResponse.js +0 -2
- package/dist/cjs/helpers/fetchResponse.js.map +0 -7
- package/dist/cjs/helpers/fetcher.d.ts +0 -2
- package/dist/cjs/helpers/fetcher.js +0 -2
- package/dist/cjs/helpers/fetcher.js.map +0 -7
- package/dist/cjs/helpers/index.d.ts +0 -2
- package/dist/cjs/helpers/index.js +0 -2
- package/dist/cjs/helpers/index.js.map +0 -7
- package/dist/cjs/helpers/track.d.ts +0 -19
- package/dist/cjs/helpers/track.js +0 -2
- package/dist/cjs/helpers/track.js.map +0 -7
- package/dist/cjs/helpers/utils.d.ts +0 -3
- package/dist/cjs/helpers/utils.js +0 -2
- package/dist/cjs/helpers/utils.js.map +0 -7
- package/dist/cjs/templates/credits.js +0 -2
- package/dist/cjs/templates/credits.js.map +0 -7
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.d.ts +0 -7
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js +0 -2
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js.map +0 -7
- package/dist/esm/components/credits/context/hooks/useSendEmailValidation.d.ts +0 -1
- package/dist/esm/components/credits/context/hooks/useSendEmailValidation.js +0 -2
- package/dist/esm/components/credits/context/hooks/useSendEmailValidation.js.map +0 -7
- package/dist/esm/components/credits/context/hooks/useSubscriptions.d.ts +0 -9
- package/dist/esm/components/credits/context/hooks/useSubscriptions.js +0 -2
- package/dist/esm/components/credits/context/hooks/useSubscriptions.js.map +0 -7
- package/dist/esm/components/credits/context/utils/atobID.d.ts +0 -1
- package/dist/esm/components/credits/context/utils/atobID.js +0 -2
- package/dist/esm/components/credits/context/utils/atobID.js.map +0 -7
- package/dist/esm/components/credits/context/utils/functionDiscountCalculate.d.ts +0 -5
- package/dist/esm/components/credits/context/utils/functionDiscountCalculate.js +0 -2
- package/dist/esm/components/credits/context/utils/functionDiscountCalculate.js.map +0 -7
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.d.ts +0 -8
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js +0 -2
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js.map +0 -7
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +0 -9
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +0 -2
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +0 -7
- package/dist/esm/components/credits/context/utils/variantGetCoupon.d.ts +0 -6
- package/dist/esm/components/credits/context/utils/variantGetCoupon.js +0 -2
- package/dist/esm/components/credits/context/utils/variantGetCoupon.js.map +0 -7
- package/dist/esm/components/credits/creditsBenefits/benefitItem.js +0 -2
- package/dist/esm/components/credits/creditsBenefits/benefitItem.js.map +0 -7
- package/dist/esm/helpers/fetchResponse.d.ts +0 -14
- package/dist/esm/helpers/fetchResponse.js +0 -2
- package/dist/esm/helpers/fetchResponse.js.map +0 -7
- package/dist/esm/helpers/fetcher.d.ts +0 -2
- package/dist/esm/helpers/fetcher.js +0 -2
- package/dist/esm/helpers/fetcher.js.map +0 -7
- package/dist/esm/helpers/index.d.ts +0 -2
- package/dist/esm/helpers/index.js +0 -2
- package/dist/esm/helpers/index.js.map +0 -7
- package/dist/esm/helpers/track.d.ts +0 -19
- package/dist/esm/helpers/track.js +0 -2
- package/dist/esm/helpers/track.js.map +0 -7
- package/dist/esm/helpers/utils.d.ts +0 -3
- package/dist/esm/helpers/utils.js +0 -2
- package/dist/esm/helpers/utils.js.map +0 -7
- package/dist/esm/templates/credits.js +0 -2
- package/dist/esm/templates/credits.js.map +0 -7
- package/src/components/credits/context/hooks/useFunctionMemberPrice.ts +0 -33
- package/src/components/credits/context/utils/atobID.ts +0 -8
- package/src/components/credits/context/utils/functionDiscountCalculate.ts +0 -57
- package/src/components/credits/context/utils/getFunctionMemberPrice.ts +0 -135
- package/src/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.ts +0 -51
- package/src/components/credits/context/utils/variantGetCoupon.ts +0 -34
- /package/dist/cjs/components/credits/creditsBenefits/{benefitItem.d.ts → BenefitItem.d.ts} +0 -0
- /package/dist/cjs/components/credits/creditsBenefits/{iconInfo.d.ts → IconInfo.d.ts} +0 -0
- /package/dist/esm/components/credits/creditsBenefits/{benefitItem.d.ts → BenefitItem.d.ts} +0 -0
- /package/dist/esm/components/credits/creditsBenefits/{iconInfo.d.ts → IconInfo.d.ts} +0 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 单条聊天消息组件
|
|
3
|
+
* 显示消息气泡、发送者、时间戳
|
|
4
|
+
* 基于 specs/livechat-widget/plan.md 的消息展示设计
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import React from 'react'
|
|
8
|
+
import type { Message, MessageRenderer } from '../types'
|
|
9
|
+
import { MessageContent } from './MessageContent'
|
|
10
|
+
import { MessageRendererRegistry } from '../utils/messageRenderers'
|
|
11
|
+
import cn from 'classnames'
|
|
12
|
+
export interface ChatMessageProps {
|
|
13
|
+
/**
|
|
14
|
+
* 消息数据
|
|
15
|
+
*/
|
|
16
|
+
message: Message
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 自定义渲染器注册表
|
|
20
|
+
*/
|
|
21
|
+
rendererRegistry?: MessageRendererRegistry
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 默认渲染器
|
|
25
|
+
*/
|
|
26
|
+
defaultRenderer?: MessageRenderer
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 是否显示时间戳
|
|
30
|
+
* @default true
|
|
31
|
+
*/
|
|
32
|
+
showTimestamp?: boolean
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* 自定义样式类名
|
|
36
|
+
*/
|
|
37
|
+
className?: string
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* 商品添加到购物车回调
|
|
41
|
+
*/
|
|
42
|
+
onAddToCart?: (product: any) => void
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* 格式化时间戳为可读格式
|
|
47
|
+
* @param timestamp Unix 时间戳(毫秒)
|
|
48
|
+
* @returns 格式化后的时间字符串 (如 "14:30")
|
|
49
|
+
*/
|
|
50
|
+
function formatTimestamp(timestamp: number): string {
|
|
51
|
+
const date = new Date(timestamp)
|
|
52
|
+
const hours = date.getHours().toString().padStart(2, '0')
|
|
53
|
+
const minutes = date.getMinutes().toString().padStart(2, '0')
|
|
54
|
+
return `${hours}:${minutes}`
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* 单条聊天消息组件
|
|
59
|
+
*
|
|
60
|
+
* 功能:
|
|
61
|
+
* - 显示消息气泡(用户 vs AI 助手不同样式)
|
|
62
|
+
* - 支持多个 content 块(一条消息可包含多种内容类型)
|
|
63
|
+
* - 显示时间戳
|
|
64
|
+
* - 系统消息居中显示
|
|
65
|
+
*
|
|
66
|
+
* 样式规则:
|
|
67
|
+
* - 用户消息:右对齐,灰色背景
|
|
68
|
+
* - AI 助手消息:左对齐,白色背景
|
|
69
|
+
* - 系统消息:居中,黄色背景
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```tsx
|
|
73
|
+
* <ChatMessage
|
|
74
|
+
* message={message}
|
|
75
|
+
* rendererRegistry={customRegistry}
|
|
76
|
+
* showTimestamp={true}
|
|
77
|
+
* />
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export const ChatMessage: React.FC<ChatMessageProps> = ({
|
|
81
|
+
message,
|
|
82
|
+
rendererRegistry,
|
|
83
|
+
defaultRenderer,
|
|
84
|
+
showTimestamp = true,
|
|
85
|
+
className = '',
|
|
86
|
+
onAddToCart,
|
|
87
|
+
}) => {
|
|
88
|
+
const isUser = message.role === 'user'
|
|
89
|
+
const isAssistant = message.role === 'assistant'
|
|
90
|
+
const isSystem = message.role === 'system'
|
|
91
|
+
const isTool = message.role === 'tool'
|
|
92
|
+
|
|
93
|
+
// 系统消息特殊处理(居中显示)
|
|
94
|
+
if (isSystem) {
|
|
95
|
+
return (
|
|
96
|
+
<div className={`flex justify-center py-2 ${className}`}>
|
|
97
|
+
<div className="">
|
|
98
|
+
{message.content.map((content, index) => (
|
|
99
|
+
<MessageContent
|
|
100
|
+
key={index}
|
|
101
|
+
content={content}
|
|
102
|
+
isUser={false}
|
|
103
|
+
isSystem={true}
|
|
104
|
+
rendererRegistry={rendererRegistry}
|
|
105
|
+
defaultRenderer={defaultRenderer}
|
|
106
|
+
/>
|
|
107
|
+
))}
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// 工具消息(通常不显示,或显示为系统消息)
|
|
114
|
+
if (isTool) {
|
|
115
|
+
return null
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// 分离内容类型:需要独立渲染的结构化内容
|
|
119
|
+
// 注意:product_card 不在此列表中,它会在气泡内渲染
|
|
120
|
+
const structuredContentTypes = ['product_list', 'product_comparison', 'faq_list', 'promotion_list', 'cart']
|
|
121
|
+
|
|
122
|
+
// 将内容分为两组:气泡内容 和 独立内容
|
|
123
|
+
const bubbleContent = message.content.filter(c => !structuredContentTypes.includes(c.type))
|
|
124
|
+
const standaloneContent = message.content.filter(c => structuredContentTypes.includes(c.type))
|
|
125
|
+
const isBubbleProductCard = bubbleContent.some(c => c.type === 'product_card')
|
|
126
|
+
// 用户/助手消息
|
|
127
|
+
return (
|
|
128
|
+
<div className={`flex ${isUser ? 'justify-end' : 'justify-start'} py-2 ${className}`}>
|
|
129
|
+
<div className="flex w-fit max-w-full flex-col gap-2">
|
|
130
|
+
{/* 消息气泡(包含文本和产品卡片,按原始顺序) */}
|
|
131
|
+
{bubbleContent.length > 0 && (
|
|
132
|
+
<div
|
|
133
|
+
className={cn(
|
|
134
|
+
'w-fit min-w-0 overflow-hidden rounded-2xl ',
|
|
135
|
+
isUser ? 'text-white' : 'text-[#1D1D1F]',
|
|
136
|
+
isBubbleProductCard ? 'p-4' : 'p-3'
|
|
137
|
+
)}
|
|
138
|
+
style={{
|
|
139
|
+
backgroundColor: isUser ? '#005D8E' : '#F5F6F7',
|
|
140
|
+
}}
|
|
141
|
+
>
|
|
142
|
+
{/* 按原始顺序渲染气泡内的所有内容(text 和 product_card 交替) */}
|
|
143
|
+
<div className={cn(
|
|
144
|
+
'flex w-full min-w-0 flex-col',
|
|
145
|
+
isBubbleProductCard ?'gap-0':'gap-2'
|
|
146
|
+
)}>
|
|
147
|
+
{bubbleContent.map((content, index) => (
|
|
148
|
+
<MessageContent
|
|
149
|
+
key={index}
|
|
150
|
+
content={content}
|
|
151
|
+
isUser={isUser}
|
|
152
|
+
isSystem={false}
|
|
153
|
+
rendererRegistry={rendererRegistry}
|
|
154
|
+
defaultRenderer={defaultRenderer}
|
|
155
|
+
onAddToCart={onAddToCart}
|
|
156
|
+
/>
|
|
157
|
+
))}
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
)}
|
|
161
|
+
|
|
162
|
+
{/* 独立渲染的结构化内容(不在气泡内) */}
|
|
163
|
+
{standaloneContent.map((content, index) => (
|
|
164
|
+
<div key={`standalone-${index}`} className="w-full">
|
|
165
|
+
<MessageContent
|
|
166
|
+
content={content}
|
|
167
|
+
isUser={isUser}
|
|
168
|
+
isSystem={false}
|
|
169
|
+
rendererRegistry={rendererRegistry}
|
|
170
|
+
defaultRenderer={defaultRenderer}
|
|
171
|
+
onAddToCart={onAddToCart}
|
|
172
|
+
/>
|
|
173
|
+
</div>
|
|
174
|
+
))}
|
|
175
|
+
|
|
176
|
+
{/* 时间戳 */}
|
|
177
|
+
{showTimestamp && (
|
|
178
|
+
<span
|
|
179
|
+
className={`
|
|
180
|
+
px-2 text-xs text-gray-400
|
|
181
|
+
${isUser ? 'text-right' : 'text-left'}
|
|
182
|
+
`}
|
|
183
|
+
>
|
|
184
|
+
{formatTimestamp(message.timestamp)}
|
|
185
|
+
</span>
|
|
186
|
+
)}
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
)
|
|
190
|
+
}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 聊天窗口容器组件
|
|
3
|
+
* 包含头部、消息列表、输入框的完整聊天界面
|
|
4
|
+
* 基于 specs/livechat-widget/plan.md 的窗口设计
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import React, { useState, useRef, useEffect, useCallback } from 'react'
|
|
8
|
+
import type { Message, MessageRenderer } from '../types'
|
|
9
|
+
import { ChatHeader } from './ChatHeader'
|
|
10
|
+
import { MessageList } from './MessageList'
|
|
11
|
+
import { ChatInput } from './ChatInput'
|
|
12
|
+
import { MessageRendererRegistry } from '../utils/messageRenderers'
|
|
13
|
+
|
|
14
|
+
export interface ChatWindowProps {
|
|
15
|
+
/**
|
|
16
|
+
* 消息列表
|
|
17
|
+
*/
|
|
18
|
+
messages: Message[]
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* 输入框当前值
|
|
22
|
+
*/
|
|
23
|
+
inputValue: string
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 输入框值变化回调
|
|
27
|
+
*/
|
|
28
|
+
onInputChange: (value: string) => void
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* 发送消息回调
|
|
32
|
+
*/
|
|
33
|
+
onSend: () => void
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 关闭窗口回调
|
|
37
|
+
*/
|
|
38
|
+
onClose?: () => void
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* 新会话回调
|
|
42
|
+
*/
|
|
43
|
+
onNewSession?: () => void
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* 头部标题
|
|
47
|
+
*/
|
|
48
|
+
title?: string
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Logo URL
|
|
52
|
+
*/
|
|
53
|
+
logoUrl?: string
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* 是否正在发送消息
|
|
57
|
+
* @default false
|
|
58
|
+
*/
|
|
59
|
+
isSending?: boolean
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* 是否正在加载历史消息
|
|
63
|
+
* @default false
|
|
64
|
+
*/
|
|
65
|
+
isLoadingHistory?: boolean
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* 是否显示时间戳
|
|
69
|
+
* @default true
|
|
70
|
+
*/
|
|
71
|
+
showTimestamp?: boolean
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 是否自动滚动
|
|
75
|
+
* @default true
|
|
76
|
+
*/
|
|
77
|
+
autoScroll?: boolean
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* 自定义渲染器注册表
|
|
81
|
+
*/
|
|
82
|
+
rendererRegistry?: MessageRendererRegistry
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* 默认渲染器
|
|
86
|
+
*/
|
|
87
|
+
defaultRenderer?: MessageRenderer
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* 输入框占位符
|
|
91
|
+
*/
|
|
92
|
+
inputPlaceholder?: string
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* 自定义样式类名
|
|
96
|
+
*/
|
|
97
|
+
className?: string
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* 商品添加到购物车回调
|
|
101
|
+
*/
|
|
102
|
+
onAddToCart?: (product: any) => void
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* 是否显示新会话按钮
|
|
106
|
+
* @default true
|
|
107
|
+
*/
|
|
108
|
+
showNewSessionButton?: boolean
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* 聊天窗口容器组件
|
|
113
|
+
*
|
|
114
|
+
* 功能:
|
|
115
|
+
* - 组合头部、消息列表、输入框
|
|
116
|
+
* - 响应式布局(移动端全屏,桌面端固定尺寸)
|
|
117
|
+
* - 动画进入/退出效果
|
|
118
|
+
*
|
|
119
|
+
* 布局结构:
|
|
120
|
+
* ```
|
|
121
|
+
* ┌─────────────────────┐
|
|
122
|
+
* │ ChatHeader │ (固定顶部)
|
|
123
|
+
* ├─────────────────────┤
|
|
124
|
+
* │ MessageList │ (可滚动区域)
|
|
125
|
+
* │ (flex-1) │
|
|
126
|
+
* ├─────────────────────┤
|
|
127
|
+
* │ ChatInput │ (固定底部)
|
|
128
|
+
* └─────────────────────┘
|
|
129
|
+
* ```
|
|
130
|
+
*
|
|
131
|
+
* 响应式设计:
|
|
132
|
+
* - 移动端 (< 768px): 全屏显示
|
|
133
|
+
* - 平板及以上 (>= 768px): 固定尺寸弹窗
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```tsx
|
|
137
|
+
* <ChatWindow
|
|
138
|
+
* messages={messages}
|
|
139
|
+
* inputValue={inputValue}
|
|
140
|
+
* onInputChange={setInputValue}
|
|
141
|
+
* onSend={handleSend}
|
|
142
|
+
* onClose={() => setIsOpen(false)}
|
|
143
|
+
* onNewSession={handleNewSession}
|
|
144
|
+
* isSending={isStreaming}
|
|
145
|
+
* title="AI 助手"
|
|
146
|
+
* logoUrl="/logo.png"
|
|
147
|
+
* />
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
export const ChatWindow: React.FC<ChatWindowProps> = ({
|
|
151
|
+
messages,
|
|
152
|
+
inputValue,
|
|
153
|
+
onInputChange,
|
|
154
|
+
onSend,
|
|
155
|
+
onClose,
|
|
156
|
+
onNewSession,
|
|
157
|
+
title,
|
|
158
|
+
logoUrl,
|
|
159
|
+
isSending = false,
|
|
160
|
+
isLoadingHistory = false,
|
|
161
|
+
showTimestamp = true,
|
|
162
|
+
autoScroll = true,
|
|
163
|
+
rendererRegistry,
|
|
164
|
+
defaultRenderer,
|
|
165
|
+
inputPlaceholder,
|
|
166
|
+
className = '',
|
|
167
|
+
onAddToCart,
|
|
168
|
+
showNewSessionButton = true,
|
|
169
|
+
}) => {
|
|
170
|
+
// 常量:高度限制比例
|
|
171
|
+
const MIN_HEIGHT_RATIO = 0.4 // 最小40%
|
|
172
|
+
const MAX_HEIGHT_RATIO = 0.8 // 最大80%
|
|
173
|
+
const DEFAULT_HEIGHT = 680 // 默认680px
|
|
174
|
+
|
|
175
|
+
// 获取当前允许的高度范围
|
|
176
|
+
const getHeightConstraints = useCallback(() => {
|
|
177
|
+
if (typeof window === 'undefined') {
|
|
178
|
+
return { minHeight: DEFAULT_HEIGHT, maxHeight: DEFAULT_HEIGHT }
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
minHeight: window.innerHeight * MIN_HEIGHT_RATIO,
|
|
182
|
+
maxHeight: window.innerHeight * MAX_HEIGHT_RATIO,
|
|
183
|
+
}
|
|
184
|
+
}, [MIN_HEIGHT_RATIO, MAX_HEIGHT_RATIO, DEFAULT_HEIGHT])
|
|
185
|
+
|
|
186
|
+
// 将高度限制在允许范围内
|
|
187
|
+
const clampHeight = useCallback(
|
|
188
|
+
(height: number) => {
|
|
189
|
+
const { minHeight, maxHeight } = getHeightConstraints()
|
|
190
|
+
return Math.max(minHeight, Math.min(maxHeight, height))
|
|
191
|
+
},
|
|
192
|
+
[getHeightConstraints]
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
// 计算初始高度:默认680px,但需要在30%-80%范围内
|
|
196
|
+
const getInitialHeight = () => {
|
|
197
|
+
if (typeof window === 'undefined') return DEFAULT_HEIGHT
|
|
198
|
+
return clampHeight(DEFAULT_HEIGHT)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// 移动端高度调节状态(默认680px或屏幕80%,取较小值)
|
|
202
|
+
const [mobileHeight, setMobileHeight] = useState(getInitialHeight)
|
|
203
|
+
const [isDragging, setIsDragging] = useState(false)
|
|
204
|
+
const dragStartY = useRef(0)
|
|
205
|
+
const dragStartHeight = useRef(getInitialHeight())
|
|
206
|
+
const windowRef = useRef<HTMLDivElement>(null)
|
|
207
|
+
|
|
208
|
+
// 更新高度并同步CSS变量
|
|
209
|
+
const updateHeight = useCallback(
|
|
210
|
+
(newHeight: number) => {
|
|
211
|
+
const clampedHeight = clampHeight(newHeight)
|
|
212
|
+
setMobileHeight(clampedHeight)
|
|
213
|
+
// 同步更新CSS变量,供 livechat.css 使用
|
|
214
|
+
if (windowRef.current) {
|
|
215
|
+
windowRef.current.style.setProperty('--livechat-mobile-height', `${clampedHeight}px`)
|
|
216
|
+
}
|
|
217
|
+
return clampedHeight
|
|
218
|
+
},
|
|
219
|
+
[clampHeight]
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
// 检测是否为移动端(初始化时立即检测)
|
|
223
|
+
const [isMobile, setIsMobile] = useState(() => {
|
|
224
|
+
if (typeof window !== 'undefined') {
|
|
225
|
+
return window.innerWidth < 768
|
|
226
|
+
}
|
|
227
|
+
return false
|
|
228
|
+
})
|
|
229
|
+
|
|
230
|
+
useEffect(() => {
|
|
231
|
+
const handleResize = () => {
|
|
232
|
+
const newIsMobile = window.innerWidth < 768
|
|
233
|
+
setIsMobile(newIsMobile)
|
|
234
|
+
|
|
235
|
+
// 如果是移动端,检查当前高度是否在允许范围内
|
|
236
|
+
if (newIsMobile) {
|
|
237
|
+
const clampedHeight = clampHeight(mobileHeight)
|
|
238
|
+
if (clampedHeight !== mobileHeight) {
|
|
239
|
+
updateHeight(clampedHeight)
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
window.addEventListener('resize', handleResize)
|
|
245
|
+
return () => window.removeEventListener('resize', handleResize)
|
|
246
|
+
}, [mobileHeight, clampHeight, updateHeight])
|
|
247
|
+
|
|
248
|
+
// 拖拽开始
|
|
249
|
+
const handleDragStart = (e: React.MouseEvent | React.TouchEvent) => {
|
|
250
|
+
if (!isMobile) return
|
|
251
|
+
|
|
252
|
+
setIsDragging(true)
|
|
253
|
+
const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY
|
|
254
|
+
dragStartY.current = clientY
|
|
255
|
+
dragStartHeight.current = mobileHeight
|
|
256
|
+
|
|
257
|
+
// 阻止默认行为
|
|
258
|
+
e.preventDefault()
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// 拖拽中
|
|
262
|
+
useEffect(() => {
|
|
263
|
+
if (!isDragging) return
|
|
264
|
+
|
|
265
|
+
const handleDragMove = (e: MouseEvent | TouchEvent) => {
|
|
266
|
+
const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY
|
|
267
|
+
const deltaY = dragStartY.current - clientY // 向上拖动为正值
|
|
268
|
+
const newHeight = dragStartHeight.current + deltaY
|
|
269
|
+
|
|
270
|
+
updateHeight(newHeight)
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
const handleDragEnd = () => {
|
|
274
|
+
setIsDragging(false)
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
document.addEventListener('mousemove', handleDragMove)
|
|
278
|
+
document.addEventListener('mouseup', handleDragEnd)
|
|
279
|
+
document.addEventListener('touchmove', handleDragMove, { passive: false })
|
|
280
|
+
document.addEventListener('touchend', handleDragEnd)
|
|
281
|
+
|
|
282
|
+
return () => {
|
|
283
|
+
document.removeEventListener('mousemove', handleDragMove)
|
|
284
|
+
document.removeEventListener('mouseup', handleDragEnd)
|
|
285
|
+
document.removeEventListener('touchmove', handleDragMove)
|
|
286
|
+
document.removeEventListener('touchend', handleDragEnd)
|
|
287
|
+
}
|
|
288
|
+
}, [isDragging, updateHeight])
|
|
289
|
+
|
|
290
|
+
return (
|
|
291
|
+
<div
|
|
292
|
+
ref={windowRef}
|
|
293
|
+
className={`livechat-window flex flex-col overflow-hidden bg-white ${className}`}
|
|
294
|
+
style={
|
|
295
|
+
{
|
|
296
|
+
borderRadius: '16px',
|
|
297
|
+
'--livechat-mobile-height': `${mobileHeight}px`,
|
|
298
|
+
} as React.CSSProperties
|
|
299
|
+
}
|
|
300
|
+
>
|
|
301
|
+
{/* 移动端拖拽手柄 */}
|
|
302
|
+
{isMobile && (
|
|
303
|
+
<div
|
|
304
|
+
className="flex cursor-ns-resize items-center justify-center py-2"
|
|
305
|
+
style={{
|
|
306
|
+
touchAction: 'none',
|
|
307
|
+
backgroundColor: '#ffffff',
|
|
308
|
+
}}
|
|
309
|
+
onMouseDown={handleDragStart}
|
|
310
|
+
onTouchStart={handleDragStart}
|
|
311
|
+
>
|
|
312
|
+
<div
|
|
313
|
+
style={{
|
|
314
|
+
width: '48px',
|
|
315
|
+
height: '6px',
|
|
316
|
+
borderRadius: '999px',
|
|
317
|
+
backgroundColor: '#DADCE0',
|
|
318
|
+
}}
|
|
319
|
+
/>
|
|
320
|
+
</div>
|
|
321
|
+
)}
|
|
322
|
+
|
|
323
|
+
{/* 头部 */}
|
|
324
|
+
<ChatHeader
|
|
325
|
+
title={title}
|
|
326
|
+
logoUrl={logoUrl}
|
|
327
|
+
onClose={onClose}
|
|
328
|
+
onNewSession={onNewSession}
|
|
329
|
+
showNewSessionButton={showNewSessionButton}
|
|
330
|
+
/>
|
|
331
|
+
|
|
332
|
+
{/* 消息列表(可滚动区域) */}
|
|
333
|
+
<MessageList
|
|
334
|
+
messages={messages}
|
|
335
|
+
rendererRegistry={rendererRegistry}
|
|
336
|
+
defaultRenderer={defaultRenderer}
|
|
337
|
+
showTimestamp={showTimestamp}
|
|
338
|
+
autoScroll={autoScroll}
|
|
339
|
+
isLoadingHistory={isLoadingHistory}
|
|
340
|
+
onAddToCart={onAddToCart}
|
|
341
|
+
/>
|
|
342
|
+
|
|
343
|
+
{/* 输入框 */}
|
|
344
|
+
<ChatInput
|
|
345
|
+
value={inputValue}
|
|
346
|
+
onChange={onInputChange}
|
|
347
|
+
onSend={onSend}
|
|
348
|
+
placeholder={inputPlaceholder}
|
|
349
|
+
disabled={isSending}
|
|
350
|
+
/>
|
|
351
|
+
</div>
|
|
352
|
+
)
|
|
353
|
+
}
|