@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.
- package/dist/cjs/components/LiveChatWidget/LiveChatWidget.d.ts +43 -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 +25 -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 +48 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js +5 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +70 -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 +78 -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 +8 -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 +51 -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 +120 -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 +609 -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/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/useFunctionMemberPrice.d.ts +2 -2
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.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/context/utils/getFunctionMemberPrice.d.ts +2 -2
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js +1 -1
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js.map +1 -1
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +2 -2
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +1 -1
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +1 -1
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.d.ts +2 -2
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.js +1 -1
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.js.map +1 -1
- package/dist/cjs/components/credits/context/utils.d.ts +4 -0
- package/dist/cjs/components/credits/context/utils.js +1 -1
- package/dist/cjs/components/credits/context/utils.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 +1 -1
- package/dist/cjs/components/credits/creditsBenefits/BenefitItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsBenefits/IconInfo.js +1 -1
- package/dist/cjs/components/credits/creditsBenefits/IconInfo.js.map +1 -1
- package/dist/cjs/components/credits/creditsBenefits/index.js +3 -3
- package/dist/cjs/components/credits/creditsBenefits/index.js.map +2 -2
- 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/creditsFaq/index.js +1 -1
- package/dist/cjs/components/credits/creditsFaq/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsInfoCard/index.js +1 -1
- package/dist/cjs/components/credits/creditsInfoCard/index.js.map +3 -3
- 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/Pagination.d.ts +7 -0
- package/dist/cjs/components/credits/creditsMemberPrice/Pagination.js +2 -0
- package/dist/cjs/components/credits/creditsMemberPrice/Pagination.js.map +7 -0
- 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/AddressForm/CountrySelect.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/CountrySelect.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/StateSelect.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/StateSelect.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js.map +3 -3
- 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/Address.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Address.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/RedeemProductModal/Success.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Success.js.map +3 -3
- 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/credits/modal/MyRewardsModal.js +1 -1
- package/dist/cjs/components/credits/modal/MyRewardsModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/activitiesModal.js +1 -1
- package/dist/cjs/components/credits/modal/activitiesModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/creditsUploadReceiptModal.js +1 -1
- package/dist/cjs/components/credits/modal/creditsUploadReceiptModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/modalContainer.js +1 -1
- package/dist/cjs/components/credits/modal/modalContainer.js.map +3 -3
- package/dist/cjs/components/credits/modal/subscribeModal.js +1 -1
- package/dist/cjs/components/credits/modal/subscribeModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/tip.js +1 -1
- package/dist/cjs/components/credits/modal/tip.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 +3 -3
- package/dist/cjs/components/registration/modalContainer.js +1 -1
- package/dist/cjs/components/registration/modalContainer.js.map +3 -3
- package/dist/cjs/constants.d.ts +1 -0
- package/dist/cjs/constants.js +2 -0
- package/dist/cjs/constants.js.map +7 -0
- package/dist/cjs/index.d.ts +3 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/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 +92 -0
- package/dist/cjs/stories/LiveChatWidget.stories.js +98 -0
- package/dist/cjs/stories/LiveChatWidget.stories.js.map +7 -0
- package/dist/cjs/templates/Credits.d.ts +15 -1
- package/dist/cjs/templates/Credits.js +1 -1
- package/dist/cjs/templates/Credits.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/LiveChatWidget.d.ts +43 -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 +25 -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 +48 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js +5 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +70 -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 +78 -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 +8 -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 +51 -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 +120 -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 +609 -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/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/useFunctionMemberPrice.d.ts +2 -2
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js +1 -1
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.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/context/utils/getFunctionMemberPrice.d.ts +2 -2
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js +1 -1
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js.map +1 -1
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +2 -2
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +1 -1
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +1 -1
- package/dist/esm/components/credits/context/utils/variantGetCoupon.d.ts +2 -2
- package/dist/esm/components/credits/context/utils/variantGetCoupon.js +1 -1
- package/dist/esm/components/credits/context/utils/variantGetCoupon.js.map +1 -1
- package/dist/esm/components/credits/context/utils.d.ts +4 -0
- package/dist/esm/components/credits/context/utils.js +1 -1
- package/dist/esm/components/credits/context/utils.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 +1 -1
- package/dist/esm/components/credits/creditsBenefits/BenefitItem.js.map +3 -3
- package/dist/esm/components/credits/creditsBenefits/IconInfo.js +1 -1
- package/dist/esm/components/credits/creditsBenefits/IconInfo.js.map +1 -1
- package/dist/esm/components/credits/creditsBenefits/index.js +3 -3
- package/dist/esm/components/credits/creditsBenefits/index.js.map +2 -2
- 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/creditsFaq/index.js +1 -1
- package/dist/esm/components/credits/creditsFaq/index.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/Pagination.d.ts +7 -0
- package/dist/esm/components/credits/creditsMemberPrice/Pagination.js +2 -0
- package/dist/esm/components/credits/creditsMemberPrice/Pagination.js.map +7 -0
- 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/AddressForm/CountrySelect.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/CountrySelect.js.map +2 -2
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/StateSelect.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/StateSelect.js.map +2 -2
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.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/Address.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Address.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/RedeemProductModal/Success.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Success.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/credits/modal/MyRewardsModal.js +1 -1
- package/dist/esm/components/credits/modal/MyRewardsModal.js.map +2 -2
- package/dist/esm/components/credits/modal/activitiesModal.js +1 -1
- package/dist/esm/components/credits/modal/activitiesModal.js.map +3 -3
- package/dist/esm/components/credits/modal/creditsUploadReceiptModal.js +1 -1
- package/dist/esm/components/credits/modal/creditsUploadReceiptModal.js.map +3 -3
- package/dist/esm/components/credits/modal/modalContainer.js +1 -1
- package/dist/esm/components/credits/modal/modalContainer.js.map +3 -3
- package/dist/esm/components/credits/modal/subscribeModal.js +1 -1
- package/dist/esm/components/credits/modal/subscribeModal.js.map +3 -3
- package/dist/esm/components/credits/modal/tip.js +1 -1
- package/dist/esm/components/credits/modal/tip.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 +3 -3
- package/dist/esm/components/registration/modalContainer.js +1 -1
- package/dist/esm/components/registration/modalContainer.js.map +3 -3
- package/dist/esm/constants.d.ts +1 -0
- package/dist/esm/constants.js +2 -0
- package/dist/esm/constants.js.map +7 -0
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/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 +92 -0
- package/dist/esm/stories/LiveChatWidget.stories.js +98 -0
- package/dist/esm/stories/LiveChatWidget.stories.js.map +7 -0
- package/dist/esm/templates/Credits.d.ts +15 -1
- package/dist/esm/templates/Credits.js +1 -1
- package/dist/esm/templates/Credits.js.map +3 -3
- package/package.json +7 -3
- package/src/components/LiveChatWidget/LiveChatWidget.tsx +599 -0
- package/src/components/LiveChatWidget/api/chat.ts +136 -0
- package/src/components/LiveChatWidget/components/ChatBubble.tsx +152 -0
- package/src/components/LiveChatWidget/components/ChatHeader.tsx +151 -0
- package/src/components/LiveChatWidget/components/ChatInput.tsx +216 -0
- package/src/components/LiveChatWidget/components/ChatMessage.tsx +182 -0
- package/src/components/LiveChatWidget/components/ChatWindow.tsx +304 -0
- package/src/components/LiveChatWidget/components/MessageContent/CartCard.tsx +198 -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 +139 -0
- package/src/components/LiveChatWidget/components/MessageContent/ProductComparison.tsx +348 -0
- package/src/components/LiveChatWidget/components/MessageContent/ProductList.tsx +275 -0
- package/src/components/LiveChatWidget/components/MessageContent/PromotionList.tsx +207 -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 +110 -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 +15 -0
- package/src/components/LiveChatWidget/hooks/useChatAPI.ts +136 -0
- package/src/components/LiveChatWidget/hooks/useChatState.ts +542 -0
- package/src/components/LiveChatWidget/hooks/useSession.ts +123 -0
- package/src/components/LiveChatWidget/index.tsx +62 -0
- package/src/components/LiveChatWidget/types.ts +769 -0
- package/src/components/LiveChatWidget/utils/cartTransformers.ts +72 -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/context/utils.ts +9 -0
- package/src/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.tsx +44 -41
- package/src/components/credits/creditsBanner/index.tsx +31 -3
- package/src/components/credits/creditsBenefits/BenefitItem.tsx +13 -5
- package/src/components/credits/creditsBenefits/IconInfo.tsx +1 -1
- package/src/components/credits/creditsBenefits/index.tsx +1 -1
- package/src/components/credits/creditsCash/CreditsCash.tsx +6 -3
- package/src/components/credits/creditsCash/RedeemableItem.tsx +29 -11
- package/src/components/credits/creditsCash/type.ts +1 -0
- package/src/components/credits/creditsFaq/faqItem/FaqItem.tsx +25 -23
- package/src/components/credits/creditsFaq/index.tsx +2 -1
- package/src/components/credits/creditsInfoCard/index.tsx +10 -3
- package/src/components/credits/creditsMemberPrice/CreditsMemberPrice.tsx +160 -136
- package/src/components/credits/creditsMemberPrice/MemberPriceItem.tsx +134 -29
- package/src/components/credits/creditsMemberPrice/Pagination.tsx +113 -0
- package/src/components/credits/creditsMemberPrice/type.ts +3 -5
- package/src/components/credits/creditsNavigation/CreditsNavigation.tsx +3 -3
- package/src/components/credits/creditsRedeemList/AddressForm/CountrySelect.tsx +2 -1
- package/src/components/credits/creditsRedeemList/AddressForm/StateSelect.tsx +2 -1
- package/src/components/credits/creditsRedeemList/AddressForm/index.tsx +2 -1
- package/src/components/credits/creditsRedeemList/CreditsRedeemList.tsx +32 -18
- package/src/components/credits/creditsRedeemList/RedeemProductModal/Address.tsx +2 -1
- package/src/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.tsx +6 -4
- package/src/components/credits/creditsRedeemList/RedeemProductModal/Success.tsx +2 -1
- package/src/components/credits/creditsRedeemList/RedeemableItem.tsx +21 -7
- package/src/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.tsx +34 -20
- package/src/components/credits/modal/MyRewardsModal.tsx +2 -1
- package/src/components/credits/modal/activitiesModal.tsx +2 -1
- package/src/components/credits/modal/creditsUploadReceiptModal.tsx +2 -1
- package/src/components/credits/modal/modalContainer.tsx +2 -1
- package/src/components/credits/modal/subscribeModal.tsx +2 -1
- package/src/components/credits/modal/tip.tsx +2 -1
- package/src/components/index.ts +23 -1
- package/src/components/registration/authCodeActivate/index.tsx +3 -1
- package/src/components/registration/modalContainer.tsx +2 -1
- package/src/constants.ts +1 -0
- package/src/index.ts +3 -2
- package/src/stories/CartCard.stories.tsx +459 -0
- package/src/stories/LiveChatWidget.stories.tsx +461 -0
- package/src/styles/livechat.css +263 -0
- package/src/templates/Credits.tsx +26 -9
- 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
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 消息渲染器注册表
|
|
3
|
+
* 支持自定义消息类型的扩展机制
|
|
4
|
+
* 基于 specs/livechat-widget/plan.md 的扩展机制设计
|
|
5
|
+
*/
|
|
6
|
+
import type { MessageContent, MessageRenderer } from '../types';
|
|
7
|
+
/**
|
|
8
|
+
* 消息渲染器注册表
|
|
9
|
+
* 允许注册自定义的消息类型渲染器
|
|
10
|
+
*/
|
|
11
|
+
export declare class MessageRendererRegistry {
|
|
12
|
+
private renderers;
|
|
13
|
+
/**
|
|
14
|
+
* 注册自定义渲染器
|
|
15
|
+
* @param type 消息内容类型
|
|
16
|
+
* @param renderer 渲染器实现
|
|
17
|
+
*/
|
|
18
|
+
register(type: string, renderer: MessageRenderer): void;
|
|
19
|
+
/**
|
|
20
|
+
* 批量注册渲染器
|
|
21
|
+
* @param renderers 渲染器映射表
|
|
22
|
+
*/
|
|
23
|
+
registerMany(renderers: Record<string, MessageRenderer>): void;
|
|
24
|
+
/**
|
|
25
|
+
* 获取指定类型的渲染器
|
|
26
|
+
* @param type 消息内容类型
|
|
27
|
+
* @returns 渲染器实现,如果未注册则返回 undefined
|
|
28
|
+
*/
|
|
29
|
+
get(type: string): MessageRenderer | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* 检查是否已注册指定类型的渲染器
|
|
32
|
+
* @param type 消息内容类型
|
|
33
|
+
* @returns 是否已注册
|
|
34
|
+
*/
|
|
35
|
+
has(type: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* 移除指定类型的渲染器
|
|
38
|
+
* @param type 消息内容类型
|
|
39
|
+
* @returns 是否成功移除
|
|
40
|
+
*/
|
|
41
|
+
unregister(type: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* 清空所有已注册的渲染器
|
|
44
|
+
*/
|
|
45
|
+
clear(): void;
|
|
46
|
+
/**
|
|
47
|
+
* 渲染消息内容
|
|
48
|
+
* @param content 消息内容
|
|
49
|
+
* @param isUser 是否为用户消息
|
|
50
|
+
* @param isSystem 是否为系统消息
|
|
51
|
+
* @returns 渲染结果,如果未找到对应渲染器则返回 null
|
|
52
|
+
*/
|
|
53
|
+
render(content: MessageContent, isUser: boolean, isSystem: boolean): React.ReactNode;
|
|
54
|
+
/**
|
|
55
|
+
* 获取所有已注册的消息类型
|
|
56
|
+
* @returns 消息类型数组
|
|
57
|
+
*/
|
|
58
|
+
getRegisteredTypes(): string[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 创建默认的渲染器注册表实例
|
|
62
|
+
* @returns 新的注册表实例
|
|
63
|
+
*/
|
|
64
|
+
export declare function createRendererRegistry(): MessageRendererRegistry;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var d=Object.defineProperty;var g=(s,e,r)=>e in s?d(s,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):s[e]=r;var i=(s,e,r)=>(g(s,typeof e!="symbol"?e+"":e,r),r);class a{constructor(){i(this,"renderers",new Map)}register(e,r){if(!e||typeof e!="string")throw new Error("Message type must be a non-empty string");if(!r)throw new Error("Renderer is required");if(!("render"in r)||typeof r.render!="function")throw new Error("Renderer must have a render function");this.renderers.set(e,r)}registerMany(e){Object.entries(e).forEach(([r,n])=>{this.register(r,n)})}get(e){return this.renderers.get(e)}has(e){return this.renderers.has(e)}unregister(e){return this.renderers.delete(e)}clear(){this.renderers.clear()}render(e,r,n){const t=this.renderers.get(e.type);if(!t)return console.warn(`[MessageRendererRegistry] No renderer found for type: ${e.type}`),null;try{return t.render(e,r,n)}catch(o){return console.error(`[MessageRendererRegistry] Error rendering ${e.type}:`,o),null}}getRegisteredTypes(){return Array.from(this.renderers.keys())}}function u(){return new a}export{a as MessageRendererRegistry,u as createRendererRegistry};
|
|
2
|
+
//# sourceMappingURL=messageRenderers.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/LiveChatWidget/utils/messageRenderers.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * \u6D88\u606F\u6E32\u67D3\u5668\u6CE8\u518C\u8868\n * \u652F\u6301\u81EA\u5B9A\u4E49\u6D88\u606F\u7C7B\u578B\u7684\u6269\u5C55\u673A\u5236\n * \u57FA\u4E8E specs/livechat-widget/plan.md \u7684\u6269\u5C55\u673A\u5236\u8BBE\u8BA1\n */\n\nimport type { MessageContent, MessageRenderer } from '../types'\n\n/**\n * \u6D88\u606F\u6E32\u67D3\u5668\u6CE8\u518C\u8868\n * \u5141\u8BB8\u6CE8\u518C\u81EA\u5B9A\u4E49\u7684\u6D88\u606F\u7C7B\u578B\u6E32\u67D3\u5668\n */\nexport class MessageRendererRegistry {\n private renderers = new Map<string, MessageRenderer>()\n\n /**\n * \u6CE8\u518C\u81EA\u5B9A\u4E49\u6E32\u67D3\u5668\n * @param type \u6D88\u606F\u5185\u5BB9\u7C7B\u578B\n * @param renderer \u6E32\u67D3\u5668\u5B9E\u73B0\n */\n register(type: string, renderer: MessageRenderer): void {\n if (!type || typeof type !== 'string') {\n throw new Error('Message type must be a non-empty string')\n }\n\n if (!renderer) {\n throw new Error('Renderer is required')\n }\n\n // \u68C0\u67E5 renderer \u662F\u5426\u6709 render \u5C5E\u6027\n if (!('render' in renderer) || typeof renderer.render !== 'function') {\n throw new Error('Renderer must have a render function')\n }\n\n this.renderers.set(type, renderer)\n }\n\n /**\n * \u6279\u91CF\u6CE8\u518C\u6E32\u67D3\u5668\n * @param renderers \u6E32\u67D3\u5668\u6620\u5C04\u8868\n */\n registerMany(renderers: Record<string, MessageRenderer>): void {\n Object.entries(renderers).forEach(([type, renderer]) => {\n this.register(type, renderer)\n })\n }\n\n /**\n * \u83B7\u53D6\u6307\u5B9A\u7C7B\u578B\u7684\u6E32\u67D3\u5668\n * @param type \u6D88\u606F\u5185\u5BB9\u7C7B\u578B\n * @returns \u6E32\u67D3\u5668\u5B9E\u73B0\uFF0C\u5982\u679C\u672A\u6CE8\u518C\u5219\u8FD4\u56DE undefined\n */\n get(type: string): MessageRenderer | undefined {\n return this.renderers.get(type)\n }\n\n /**\n * \u68C0\u67E5\u662F\u5426\u5DF2\u6CE8\u518C\u6307\u5B9A\u7C7B\u578B\u7684\u6E32\u67D3\u5668\n * @param type \u6D88\u606F\u5185\u5BB9\u7C7B\u578B\n * @returns \u662F\u5426\u5DF2\u6CE8\u518C\n */\n has(type: string): boolean {\n return this.renderers.has(type)\n }\n\n /**\n * \u79FB\u9664\u6307\u5B9A\u7C7B\u578B\u7684\u6E32\u67D3\u5668\n * @param type \u6D88\u606F\u5185\u5BB9\u7C7B\u578B\n * @returns \u662F\u5426\u6210\u529F\u79FB\u9664\n */\n unregister(type: string): boolean {\n return this.renderers.delete(type)\n }\n\n /**\n * \u6E05\u7A7A\u6240\u6709\u5DF2\u6CE8\u518C\u7684\u6E32\u67D3\u5668\n */\n clear(): void {\n this.renderers.clear()\n }\n\n /**\n * \u6E32\u67D3\u6D88\u606F\u5185\u5BB9\n * @param content \u6D88\u606F\u5185\u5BB9\n * @param isUser \u662F\u5426\u4E3A\u7528\u6237\u6D88\u606F\n * @param isSystem \u662F\u5426\u4E3A\u7CFB\u7EDF\u6D88\u606F\n * @returns \u6E32\u67D3\u7ED3\u679C\uFF0C\u5982\u679C\u672A\u627E\u5230\u5BF9\u5E94\u6E32\u67D3\u5668\u5219\u8FD4\u56DE null\n */\n render(content: MessageContent, isUser: boolean, isSystem: boolean): React.ReactNode {\n const renderer = this.renderers.get(content.type)\n\n if (!renderer) {\n console.warn(`[MessageRendererRegistry] No renderer found for type: ${content.type}`)\n return null\n }\n\n try {\n return renderer.render(content, isUser, isSystem)\n } catch (error) {\n console.error(`[MessageRendererRegistry] Error rendering ${content.type}:`, error)\n return null\n }\n }\n\n /**\n * \u83B7\u53D6\u6240\u6709\u5DF2\u6CE8\u518C\u7684\u6D88\u606F\u7C7B\u578B\n * @returns \u6D88\u606F\u7C7B\u578B\u6570\u7EC4\n */\n getRegisteredTypes(): string[] {\n return Array.from(this.renderers.keys())\n }\n}\n\n/**\n * \u521B\u5EFA\u9ED8\u8BA4\u7684\u6E32\u67D3\u5668\u6CE8\u518C\u8868\u5B9E\u4F8B\n * @returns \u65B0\u7684\u6CE8\u518C\u8868\u5B9E\u4F8B\n */\nexport function createRendererRegistry(): MessageRendererRegistry {\n return new MessageRendererRegistry()\n}\n"],
|
|
5
|
+
"mappings": "wKAYO,MAAMA,CAAwB,CAA9B,cACLC,EAAA,KAAQ,YAAY,IAAI,KAOxB,SAASC,EAAcC,EAAiC,CACtD,GAAI,CAACD,GAAQ,OAAOA,GAAS,SAC3B,MAAM,IAAI,MAAM,yCAAyC,EAG3D,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,sBAAsB,EAIxC,GAAI,EAAE,WAAYA,IAAa,OAAOA,EAAS,QAAW,WACxD,MAAM,IAAI,MAAM,sCAAsC,EAGxD,KAAK,UAAU,IAAID,EAAMC,CAAQ,CACnC,CAMA,aAAaC,EAAkD,CAC7D,OAAO,QAAQA,CAAS,EAAE,QAAQ,CAAC,CAACF,EAAMC,CAAQ,IAAM,CACtD,KAAK,SAASD,EAAMC,CAAQ,CAC9B,CAAC,CACH,CAOA,IAAID,EAA2C,CAC7C,OAAO,KAAK,UAAU,IAAIA,CAAI,CAChC,CAOA,IAAIA,EAAuB,CACzB,OAAO,KAAK,UAAU,IAAIA,CAAI,CAChC,CAOA,WAAWA,EAAuB,CAChC,OAAO,KAAK,UAAU,OAAOA,CAAI,CACnC,CAKA,OAAc,CACZ,KAAK,UAAU,MAAM,CACvB,CASA,OAAOG,EAAyBC,EAAiBC,EAAoC,CACnF,MAAMJ,EAAW,KAAK,UAAU,IAAIE,EAAQ,IAAI,EAEhD,GAAI,CAACF,EACH,eAAQ,KAAK,yDAAyDE,EAAQ,IAAI,EAAE,EAC7E,KAGT,GAAI,CACF,OAAOF,EAAS,OAAOE,EAASC,EAAQC,CAAQ,CAClD,OAASC,EAAO,CACd,eAAQ,MAAM,6CAA6CH,EAAQ,IAAI,IAAKG,CAAK,EAC1E,IACT,CACF,CAMA,oBAA+B,CAC7B,OAAO,MAAM,KAAK,KAAK,UAAU,KAAK,CAAC,CACzC,CACF,CAMO,SAASC,GAAkD,CAChE,OAAO,IAAIT,CACb",
|
|
6
|
+
"names": ["MessageRendererRegistry", "__publicField", "type", "renderer", "renderers", "content", "isUser", "isSystem", "error", "createRendererRegistry"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 产品数据转换工具函数
|
|
3
|
+
* 将后端返回的产品数据转换为前端使用的格式
|
|
4
|
+
*/
|
|
5
|
+
import type { Product } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* 转换产品数据
|
|
8
|
+
* 将后端返回的产品对象转换为前端使用的 Product 类型
|
|
9
|
+
*
|
|
10
|
+
* @param product - 后端返回的产品数据
|
|
11
|
+
* @param site - 站点域名,用于构建产品 URL(可选,默认为空字符串)
|
|
12
|
+
* @returns 转换后的 Product 对象
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const backendProduct = {
|
|
17
|
+
* shopify_product_id: "gid://shopify/Product/123",
|
|
18
|
+
* handle: "product-handle",
|
|
19
|
+
* title: "Product Title",
|
|
20
|
+
* price_range: { min: 99.99, max: 149.99, currency: "USD" },
|
|
21
|
+
* // ... 其他字段
|
|
22
|
+
* }
|
|
23
|
+
*
|
|
24
|
+
* const product = transformProduct(backendProduct, "www.example.com")
|
|
25
|
+
* // product.shopifyId === "gid://shopify/Product/123"
|
|
26
|
+
* // product.productUrl === "https://www.example.com/products/product-handle"
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function transformProduct(product: any, site?: string): Product;
|
|
30
|
+
/**
|
|
31
|
+
* 批量转换产品列表
|
|
32
|
+
*
|
|
33
|
+
* @param products - 后端返回的产品数组
|
|
34
|
+
* @param site - 站点域名(可选)
|
|
35
|
+
* @returns 转换后的 Product 数组
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* const backendProducts = [product1, product2, product3]
|
|
40
|
+
* const products = transformProducts(backendProducts, "www.example.com")
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function transformProducts(products: any[], site?: string): Product[];
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function r(e){return{id:e.shopify_variant_id||e.id,title:e.title||e.option1,sku:e.sku,price:e.price?{amount:e.price,currency:e.currency||"USD"}:void 0,availableForSale:e.available,discount:e.discount?{has_discount:e.discount.has_discount,discount_price:e.discount.discount_price,discount_code:e.discount.discount_code,discount_percentage:e.discount.discount_percentage,discount_type:e.discount.discount_type,discount_value:e.discount.discount_value}:void 0,memberPrice:e.member_price?{has_member_price:e.member_price.has_member_price,price:e.member_price.price}:void 0,inventoryQuantity:e.inventory_quantity,option1:e.option1,option2:e.option2,option3:e.option3}}function s(e,n=""){return{shopifyId:e.shopify_product_id||e.id,sku:e.variants?.[0]?.sku||"",handle:e.handle,title:e.title,description:e.description,vendor:e.vendor,price:{amount:e.price_range?.min||e.variants?.[0]?.price||0,currency:e.price_range?.currency||e.variants?.[0]?.currency||"USD"},priceRange:e.price_range?{min:e.price_range.min,max:e.price_range.max,currency:e.price_range.currency}:void 0,memberPriceRange:e.member_price_range?{min:e.member_price_range.min,max:e.member_price_range.max,currency:e.member_price_range.currency}:void 0,imageUrl:e.featured_image||"",productUrl:n?`https://${n}/products/${e.handle}`:`/products/${e.handle}`,stockStatus:e.variants?.[0]?.available?"in_stock":"out_of_stock",hotScore:e.popularity_score,averageRating:e.average_rating,reviewCount:e.review_count,variantCount:e.variant_count,availableCount:e.available_count,variants:e.variants?.map(r),features:e.features?{is_new:e.features.is_new,has_rental:e.features.has_rental,has_presale:e.features.has_presale,has_member_price:e.features.has_member_price,has_discount:e.features.has_discount}:void 0,tags:e.tags}}function a(e,n){return Array.isArray(e)?e.map(i=>s(i,n)):[]}export{s as transformProduct,a as transformProducts};
|
|
2
|
+
//# sourceMappingURL=productTransformers.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/LiveChatWidget/utils/productTransformers.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * \u4EA7\u54C1\u6570\u636E\u8F6C\u6362\u5DE5\u5177\u51FD\u6570\n * \u5C06\u540E\u7AEF\u8FD4\u56DE\u7684\u4EA7\u54C1\u6570\u636E\u8F6C\u6362\u4E3A\u524D\u7AEF\u4F7F\u7528\u7684\u683C\u5F0F\n */\n\nimport type { Product, Variant } from '../types'\n\n/**\n * \u8F6C\u6362\u5355\u4E2A\u53D8\u4F53\u6570\u636E\n */\nfunction transformVariant(variant: any): Variant {\n return {\n id: variant.shopify_variant_id || variant.id,\n title: variant.title || variant.option1,\n sku: variant.sku,\n price: variant.price\n ? {\n amount: variant.price,\n currency: variant.currency || 'USD',\n }\n : undefined,\n availableForSale: variant.available,\n discount: variant.discount\n ? {\n has_discount: variant.discount.has_discount,\n discount_price: variant.discount.discount_price,\n discount_code: variant.discount.discount_code,\n discount_percentage: variant.discount.discount_percentage,\n discount_type: variant.discount.discount_type,\n discount_value: variant.discount.discount_value,\n }\n : undefined,\n memberPrice: variant.member_price\n ? {\n has_member_price: variant.member_price.has_member_price,\n price: variant.member_price.price,\n }\n : undefined,\n inventoryQuantity: variant.inventory_quantity,\n option1: variant.option1,\n option2: variant.option2,\n option3: variant.option3,\n }\n}\n\n/**\n * \u8F6C\u6362\u4EA7\u54C1\u6570\u636E\n * \u5C06\u540E\u7AEF\u8FD4\u56DE\u7684\u4EA7\u54C1\u5BF9\u8C61\u8F6C\u6362\u4E3A\u524D\u7AEF\u4F7F\u7528\u7684 Product \u7C7B\u578B\n *\n * @param product - \u540E\u7AEF\u8FD4\u56DE\u7684\u4EA7\u54C1\u6570\u636E\n * @param site - \u7AD9\u70B9\u57DF\u540D\uFF0C\u7528\u4E8E\u6784\u5EFA\u4EA7\u54C1 URL\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u4E3A\u7A7A\u5B57\u7B26\u4E32\uFF09\n * @returns \u8F6C\u6362\u540E\u7684 Product \u5BF9\u8C61\n *\n * @example\n * ```ts\n * const backendProduct = {\n * shopify_product_id: \"gid://shopify/Product/123\",\n * handle: \"product-handle\",\n * title: \"Product Title\",\n * price_range: { min: 99.99, max: 149.99, currency: \"USD\" },\n * // ... \u5176\u4ED6\u5B57\u6BB5\n * }\n *\n * const product = transformProduct(backendProduct, \"www.example.com\")\n * // product.shopifyId === \"gid://shopify/Product/123\"\n * // product.productUrl === \"https://www.example.com/products/product-handle\"\n * ```\n */\nexport function transformProduct(product: any, site: string = ''): Product {\n return {\n // \u57FA\u672C\u4FE1\u606F\n shopifyId: product.shopify_product_id || product.id,\n sku: product.variants?.[0]?.sku || '',\n handle: product.handle,\n title: product.title,\n description: product.description,\n vendor: product.vendor,\n\n // \u4EF7\u683C\u4FE1\u606F\n price: {\n amount: product.price_range?.min || product.variants?.[0]?.price || 0,\n currency: product.price_range?.currency || product.variants?.[0]?.currency || 'USD',\n },\n priceRange: product.price_range\n ? {\n min: product.price_range.min,\n max: product.price_range.max,\n currency: product.price_range.currency,\n }\n : undefined,\n memberPriceRange: product.member_price_range\n ? {\n min: product.member_price_range.min,\n max: product.member_price_range.max,\n currency: product.member_price_range.currency,\n }\n : undefined,\n\n // \u5A92\u4F53\u548C\u94FE\u63A5\n imageUrl: product.featured_image || '',\n productUrl: site ? `https://${site}/products/${product.handle}` : `/products/${product.handle}`,\n\n // \u5E93\u5B58\u548C\u72B6\u6001\n stockStatus: product.variants?.[0]?.available ? 'in_stock' : 'out_of_stock',\n\n // \u8BC4\u5206\u548C\u70ED\u5EA6\n hotScore: product.popularity_score,\n averageRating: product.average_rating,\n reviewCount: product.review_count,\n\n // \u53D8\u4F53\u4FE1\u606F\n variantCount: product.variant_count,\n availableCount: product.available_count,\n variants: product.variants?.map(transformVariant),\n\n // \u7279\u6027\u548C\u6807\u7B7E\n features: product.features\n ? {\n is_new: product.features.is_new,\n has_rental: product.features.has_rental,\n has_presale: product.features.has_presale,\n has_member_price: product.features.has_member_price,\n has_discount: product.features.has_discount,\n }\n : undefined,\n tags: product.tags,\n }\n}\n\n/**\n * \u6279\u91CF\u8F6C\u6362\u4EA7\u54C1\u5217\u8868\n *\n * @param products - \u540E\u7AEF\u8FD4\u56DE\u7684\u4EA7\u54C1\u6570\u7EC4\n * @param site - \u7AD9\u70B9\u57DF\u540D\uFF08\u53EF\u9009\uFF09\n * @returns \u8F6C\u6362\u540E\u7684 Product \u6570\u7EC4\n *\n * @example\n * ```ts\n * const backendProducts = [product1, product2, product3]\n * const products = transformProducts(backendProducts, \"www.example.com\")\n * ```\n */\nexport function transformProducts(products: any[], site?: string): Product[] {\n if (!Array.isArray(products)) {\n return []\n }\n\n return products.map(product => transformProduct(product, site))\n}\n"],
|
|
5
|
+
"mappings": "AAUA,SAASA,EAAiBC,EAAuB,CAC/C,MAAO,CACL,GAAIA,EAAQ,oBAAsBA,EAAQ,GAC1C,MAAOA,EAAQ,OAASA,EAAQ,QAChC,IAAKA,EAAQ,IACb,MAAOA,EAAQ,MACX,CACE,OAAQA,EAAQ,MAChB,SAAUA,EAAQ,UAAY,KAChC,EACA,OACJ,iBAAkBA,EAAQ,UAC1B,SAAUA,EAAQ,SACd,CACE,aAAcA,EAAQ,SAAS,aAC/B,eAAgBA,EAAQ,SAAS,eACjC,cAAeA,EAAQ,SAAS,cAChC,oBAAqBA,EAAQ,SAAS,oBACtC,cAAeA,EAAQ,SAAS,cAChC,eAAgBA,EAAQ,SAAS,cACnC,EACA,OACJ,YAAaA,EAAQ,aACjB,CACE,iBAAkBA,EAAQ,aAAa,iBACvC,MAAOA,EAAQ,aAAa,KAC9B,EACA,OACJ,kBAAmBA,EAAQ,mBAC3B,QAASA,EAAQ,QACjB,QAASA,EAAQ,QACjB,QAASA,EAAQ,OACnB,CACF,CAyBO,SAASC,EAAiBC,EAAcC,EAAe,GAAa,CACzE,MAAO,CAEL,UAAWD,EAAQ,oBAAsBA,EAAQ,GACjD,IAAKA,EAAQ,WAAW,CAAC,GAAG,KAAO,GACnC,OAAQA,EAAQ,OAChB,MAAOA,EAAQ,MACf,YAAaA,EAAQ,YACrB,OAAQA,EAAQ,OAGhB,MAAO,CACL,OAAQA,EAAQ,aAAa,KAAOA,EAAQ,WAAW,CAAC,GAAG,OAAS,EACpE,SAAUA,EAAQ,aAAa,UAAYA,EAAQ,WAAW,CAAC,GAAG,UAAY,KAChF,EACA,WAAYA,EAAQ,YAChB,CACE,IAAKA,EAAQ,YAAY,IACzB,IAAKA,EAAQ,YAAY,IACzB,SAAUA,EAAQ,YAAY,QAChC,EACA,OACJ,iBAAkBA,EAAQ,mBACtB,CACE,IAAKA,EAAQ,mBAAmB,IAChC,IAAKA,EAAQ,mBAAmB,IAChC,SAAUA,EAAQ,mBAAmB,QACvC,EACA,OAGJ,SAAUA,EAAQ,gBAAkB,GACpC,WAAYC,EAAO,WAAWA,CAAI,aAAaD,EAAQ,MAAM,GAAK,aAAaA,EAAQ,MAAM,GAG7F,YAAaA,EAAQ,WAAW,CAAC,GAAG,UAAY,WAAa,eAG7D,SAAUA,EAAQ,iBAClB,cAAeA,EAAQ,eACvB,YAAaA,EAAQ,aAGrB,aAAcA,EAAQ,cACtB,eAAgBA,EAAQ,gBACxB,SAAUA,EAAQ,UAAU,IAAIH,CAAgB,EAGhD,SAAUG,EAAQ,SACd,CACE,OAAQA,EAAQ,SAAS,OACzB,WAAYA,EAAQ,SAAS,WAC7B,YAAaA,EAAQ,SAAS,YAC9B,iBAAkBA,EAAQ,SAAS,iBACnC,aAAcA,EAAQ,SAAS,YACjC,EACA,OACJ,KAAMA,EAAQ,IAChB,CACF,CAeO,SAASE,EAAkBC,EAAiBF,EAA0B,CAC3E,OAAK,MAAM,QAAQE,CAAQ,EAIpBA,EAAS,IAAIH,GAAWD,EAAiBC,EAASC,CAAI,CAAC,EAHrD,CAAC,CAIZ",
|
|
6
|
+
"names": ["transformVariant", "variant", "transformProduct", "product", "site", "transformProducts", "products"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* userId 生成和管理工具
|
|
3
|
+
* 基于 specs/livechat-widget/research.md 的决策
|
|
4
|
+
*
|
|
5
|
+
* 策略:
|
|
6
|
+
* 1. 优先从 localStorage 读取
|
|
7
|
+
* 2. 尝试获取 Google Analytics ID (GAID)
|
|
8
|
+
* 3. 兜底:时间戳 + 随机数哈希
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* 获取用户唯一标识符(异步版本)
|
|
12
|
+
* @returns userId (GAID 或哈希值)
|
|
13
|
+
*/
|
|
14
|
+
export declare function getUserId(): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* 清除保存的 userId(用于测试或重置)
|
|
17
|
+
*/
|
|
18
|
+
export declare function clearUserId(): void;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const a="livechat_user_id";async function g(){if(typeof window<"u"){const t=localStorage.getItem(a);if(t)return t}const e=d();if(e)return typeof window<"u"&&localStorage.setItem(a,e),e;try{const t=await l();return typeof window<"u"&&localStorage.setItem(a,t),t}catch(t){console.warn("[LiveChat userId] SHA-256 failed, using sync fallback:",t);const n=f();return typeof window<"u"&&localStorage.setItem(a,n),n}}function d(){if(typeof window>"u")return null;if(typeof window.gtag!="function")return console.warn("[LiveChat userId] Google Analytics gtag is not available"),null;try{const e=window.dataLayer||[];for(const t of e)if(t&&t[1]&&typeof t[1]=="object"){const n=t[1].client_id||t[1].clientId;if(n&&typeof n=="string")return`G-${n}`}return null}catch(e){return console.error("[LiveChat userId] Failed to get GAID:",e),null}}async function l(){const e=Date.now(),t=Math.random().toString(36).substring(2,15),n=`${e}${t}`,i=new TextEncoder().encode(n),o=await crypto.subtle.digest("SHA-256",i);return`user-${Array.from(new Uint8Array(o)).map(c=>c.toString(16).padStart(2,"0")).join("").substring(0,16)}`}function f(){const e=Date.now(),t=Math.random().toString(36).substring(2,15),n=`${e}${t}`;let r=0;for(let o=0;o<n.length;o++){const s=n.charCodeAt(o);r=(r<<5)-r+s,r=r&r}return`user-${Math.abs(r).toString(16).padStart(8,"0")}`}function h(){typeof window<"u"&&localStorage.removeItem(a)}export{h as clearUserId,g as getUserId};
|
|
2
|
+
//# sourceMappingURL=userId.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/LiveChatWidget/utils/userId.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * userId \u751F\u6210\u548C\u7BA1\u7406\u5DE5\u5177\n * \u57FA\u4E8E specs/livechat-widget/research.md \u7684\u51B3\u7B56\n *\n * \u7B56\u7565\uFF1A\n * 1. \u4F18\u5148\u4ECE localStorage \u8BFB\u53D6\n * 2. \u5C1D\u8BD5\u83B7\u53D6 Google Analytics ID (GAID)\n * 3. \u515C\u5E95\uFF1A\u65F6\u95F4\u6233 + \u968F\u673A\u6570\u54C8\u5E0C\n */\n\nconst STORAGE_KEY = 'livechat_user_id'\n\n/**\n * \u83B7\u53D6\u7528\u6237\u552F\u4E00\u6807\u8BC6\u7B26\uFF08\u5F02\u6B65\u7248\u672C\uFF09\n * @returns userId (GAID \u6216\u54C8\u5E0C\u503C)\n */\nexport async function getUserId(): Promise<string> {\n // 1. \u5C1D\u8BD5\u4ECE localStorage \u8BFB\u53D6\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem(STORAGE_KEY)\n if (stored) return stored\n }\n\n // 2. \u5C1D\u8BD5\u83B7\u53D6 GAID\n const gaid = getGAID()\n if (gaid) {\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, gaid)\n }\n return gaid\n }\n\n // 3. \u515C\u5E95\uFF1A\u4F7F\u7528 SHA-256 \u751F\u6210\u54C8\u5E0C\n try {\n const fallback = await generateHashedUserId()\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, fallback)\n }\n return fallback\n } catch (error) {\n // \u5982\u679C SHA-256 \u5931\u8D25\uFF0C\u4F7F\u7528\u540C\u6B65\u515C\u5E95\u65B9\u6848\n console.warn('[LiveChat userId] SHA-256 failed, using sync fallback:', error)\n const fallback = generateHashedUserIdSync()\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, fallback)\n }\n return fallback\n }\n}\n\n/**\n * \u4ECE Google Analytics \u83B7\u53D6 Client ID (GAID)\n * @returns GAID \u6216 null\n */\nfunction getGAID(): string | null {\n if (typeof window === 'undefined') return null\n\n // \u68C0\u67E5 gtag \u662F\u5426\u53EF\u7528\n if (typeof (window as any).gtag !== 'function') {\n console.warn('[LiveChat userId] Google Analytics gtag is not available')\n return null\n }\n\n try {\n // Google Analytics 4 \u65B9\u6CD5\n // \u6CE8\u610F\uFF1Agtag \u7684 'get' \u547D\u4EE4\u662F\u5F02\u6B65\u7684\uFF0C\u8FD9\u91CC\u4F7F\u7528\u540C\u6B65 fallback\n // \u5728\u5B9E\u9645\u9879\u76EE\u4E2D\uFF0C\u5982\u679C GA \u5DF2\u521D\u59CB\u5316\uFF0C\u53EF\u4EE5\u4ECE dataLayer \u8BFB\u53D6\n const dataLayer = (window as any).dataLayer || []\n\n // \u5C1D\u8BD5\u4ECE dataLayer \u4E2D\u67E5\u627E\u5DF2\u5B58\u5728\u7684 client_id\n for (const item of dataLayer) {\n if (item && item[1] && typeof item[1] === 'object') {\n const clientId = item[1].client_id || item[1].clientId\n if (clientId && typeof clientId === 'string') {\n return `G-${clientId}`\n }\n }\n }\n\n // \u5982\u679C\u6CA1\u6709\u627E\u5230\uFF0C\u8FD4\u56DE null\uFF0C\u4F7F\u7528\u515C\u5E95\u65B9\u6848\n return null\n } catch (error) {\n console.error('[LiveChat userId] Failed to get GAID:', error)\n return null\n }\n}\n\n/**\n * \u751F\u6210\u54C8\u5E0C\u7528\u6237 ID\uFF08\u515C\u5E95\u65B9\u6848\uFF09\n * @returns \u683C\u5F0F\u4E3A user-{hash} \u7684\u7528\u6237 ID\uFF0Chash \u7531 timestamp + random \u901A\u8FC7 SHA-256 \u751F\u6210\n */\nasync function generateHashedUserId(): Promise<string> {\n const timestamp = Date.now()\n const random = Math.random().toString(36).substring(2, 15) // \u751F\u6210\u968F\u673A\u5B57\u7B26\u4E32\n\n // \u5C06 timestamp \u548C random \u7EC4\u5408\u6210\u5B57\u7B26\u4E32\n const rawString = `${timestamp}${random}`\n\n // \u4F7F\u7528 Web Crypto API \u751F\u6210 SHA-256 \u54C8\u5E0C\n const encoder = new TextEncoder()\n const data = encoder.encode(rawString)\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n\n // \u5C06 ArrayBuffer \u8F6C\u6362\u4E3A 16 \u8FDB\u5236\u5B57\u7B26\u4E32\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('')\n\n // \u53D6\u524D 16 \u4F4D\u4F5C\u4E3A\u7528\u6237 ID\uFF08\u4FDD\u6301\u7B80\u6D01\uFF09\n return `user-${hashHex.substring(0, 16)}`\n}\n\n/**\n * \u540C\u6B65\u7248\u672C\u7684\u54C8\u5E0C\u7528\u6237 ID \u751F\u6210\uFF08\u515C\u5E95\u7684\u515C\u5E95\uFF09\n * \u5F53 Web Crypto API \u4E0D\u53EF\u7528\u65F6\u4F7F\u7528\n */\nfunction generateHashedUserIdSync(): string {\n const timestamp = Date.now()\n const random = Math.random().toString(36).substring(2, 15)\n const rawString = `${timestamp}${random}`\n\n // \u4F7F\u7528\u7B80\u5355\u7684\u54C8\u5E0C\u7B97\u6CD5\u4F5C\u4E3A\u515C\u5E95\n let hash = 0\n for (let i = 0; i < rawString.length; i++) {\n const char = rawString.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash\n }\n\n const hashString = Math.abs(hash).toString(16).padStart(8, '0')\n return `user-${hashString}`\n}\n\n/**\n * \u6E05\u9664\u4FDD\u5B58\u7684 userId\uFF08\u7528\u4E8E\u6D4B\u8BD5\u6216\u91CD\u7F6E\uFF09\n */\nexport function clearUserId(): void {\n if (typeof window !== 'undefined') {\n localStorage.removeItem(STORAGE_KEY)\n }\n}\n"],
|
|
5
|
+
"mappings": "AAUA,MAAMA,EAAc,mBAMpB,eAAsBC,GAA6B,CAEjD,GAAI,OAAO,OAAW,IAAa,CACjC,MAAMC,EAAS,aAAa,QAAQF,CAAW,EAC/C,GAAIE,EAAQ,OAAOA,CACrB,CAGA,MAAMC,EAAOC,EAAQ,EACrB,GAAID,EACF,OAAI,OAAO,OAAW,KACpB,aAAa,QAAQH,EAAaG,CAAI,EAEjCA,EAIT,GAAI,CACF,MAAME,EAAW,MAAMC,EAAqB,EAC5C,OAAI,OAAO,OAAW,KACpB,aAAa,QAAQN,EAAaK,CAAQ,EAErCA,CACT,OAASE,EAAO,CAEd,QAAQ,KAAK,yDAA0DA,CAAK,EAC5E,MAAMF,EAAWG,EAAyB,EAC1C,OAAI,OAAO,OAAW,KACpB,aAAa,QAAQR,EAAaK,CAAQ,EAErCA,CACT,CACF,CAMA,SAASD,GAAyB,CAChC,GAAI,OAAO,OAAW,IAAa,OAAO,KAG1C,GAAI,OAAQ,OAAe,MAAS,WAClC,eAAQ,KAAK,0DAA0D,EAChE,KAGT,GAAI,CAIF,MAAMK,EAAa,OAAe,WAAa,CAAC,EAGhD,UAAWC,KAAQD,EACjB,GAAIC,GAAQA,EAAK,CAAC,GAAK,OAAOA,EAAK,CAAC,GAAM,SAAU,CAClD,MAAMC,EAAWD,EAAK,CAAC,EAAE,WAAaA,EAAK,CAAC,EAAE,SAC9C,GAAIC,GAAY,OAAOA,GAAa,SAClC,MAAO,KAAKA,CAAQ,EAExB,CAIF,OAAO,IACT,OAASJ,EAAO,CACd,eAAQ,MAAM,wCAAyCA,CAAK,EACrD,IACT,CACF,CAMA,eAAeD,GAAwC,CACrD,MAAMM,EAAY,KAAK,IAAI,EACrBC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,EAAG,EAAE,EAGnDC,EAAY,GAAGF,CAAS,GAAGC,CAAM,GAIjCE,EADU,IAAI,YAAY,EACX,OAAOD,CAAS,EAC/BE,EAAa,MAAM,OAAO,OAAO,OAAO,UAAWD,CAAI,EAO7D,MAAO,QAJW,MAAM,KAAK,IAAI,WAAWC,CAAU,CAAC,EAC7B,IAAIC,GAAKA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,KAAK,EAAE,EAGpD,UAAU,EAAG,EAAE,CAAC,EACzC,CAMA,SAAST,GAAmC,CAC1C,MAAMI,EAAY,KAAK,IAAI,EACrBC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,EAAG,EAAE,EACnDC,EAAY,GAAGF,CAAS,GAAGC,CAAM,GAGvC,IAAIK,EAAO,EACX,QAASC,EAAI,EAAGA,EAAIL,EAAU,OAAQK,IAAK,CACzC,MAAMC,EAAON,EAAU,WAAWK,CAAC,EACnCD,GAAQA,GAAQ,GAAKA,EAAOE,EAC5BF,EAAOA,EAAOA,CAChB,CAGA,MAAO,QADY,KAAK,IAAIA,CAAI,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CACrC,EAC3B,CAKO,SAASG,GAAoB,CAC9B,OAAO,OAAW,KACpB,aAAa,WAAWrB,CAAW,CAEvC",
|
|
6
|
+
"names": ["STORAGE_KEY", "getUserId", "stored", "gaid", "getGAID", "fallback", "generateHashedUserId", "error", "generateHashedUserIdSync", "dataLayer", "item", "clientId", "timestamp", "random", "rawString", "data", "hashBuffer", "b", "hash", "i", "char", "clearUserId"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 输入验证工具
|
|
3
|
+
* 基于 specs/livechat-widget/research.md 的 XSS 防护策略
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 清理用户输入
|
|
7
|
+
* - 移除控制字符
|
|
8
|
+
* - 限制长度
|
|
9
|
+
* @param input 用户输入的字符串
|
|
10
|
+
* @param maxLength 最大长度
|
|
11
|
+
* @returns 清理后的字符串
|
|
12
|
+
*/
|
|
13
|
+
export declare function sanitizeInput(input: string, maxLength?: number): string;
|
|
14
|
+
/**
|
|
15
|
+
* 验证 URL 是否安全
|
|
16
|
+
* @param url URL 字符串
|
|
17
|
+
* @returns 是否为安全的 URL
|
|
18
|
+
*/
|
|
19
|
+
export declare function isValidUrl(url: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* 验证 sessionId 是否为有效的 UUID
|
|
22
|
+
* @param sessionId 会话 ID
|
|
23
|
+
* @returns 是否为有效的 UUID
|
|
24
|
+
*/
|
|
25
|
+
export declare function isValidUUID(sessionId: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* 验证消息内容是否有效
|
|
28
|
+
* @param content 消息内容
|
|
29
|
+
* @returns 是否有效
|
|
30
|
+
*/
|
|
31
|
+
export declare function isValidMessageContent(content: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* 转义 HTML 特殊字符
|
|
34
|
+
* @param text 原始文本
|
|
35
|
+
* @returns 转义后的文本
|
|
36
|
+
*/
|
|
37
|
+
export declare function escapeHtml(text: string): string;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function n(t,r=5e3){if(!t||typeof t!="string")return"";let e=t.replace(/[\x00-\x1F\x7F]/g,"");return e.length>r&&(e=e.substring(0,r)),e.trim()}function i(t){if(!t||typeof t!="string")return!1;try{const r=new URL(t);return r.protocol==="http:"||r.protocol==="https:"}catch{return!1}}function o(t){return!t||typeof t!="string"?!1:/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function s(t){if(!t||typeof t!="string")return!1;const r=t.trim();return r.length>0&&r.length<=5e3}function f(t){if(!t||typeof t!="string")return"";const r={"&":"&","<":"<",">":">",'"':""","'":"'"};return t.replace(/[&<>"']/g,e=>r[e]||e)}export{f as escapeHtml,s as isValidMessageContent,o as isValidUUID,i as isValidUrl,n as sanitizeInput};
|
|
2
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/LiveChatWidget/utils/validation.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * \u8F93\u5165\u9A8C\u8BC1\u5DE5\u5177\n * \u57FA\u4E8E specs/livechat-widget/research.md \u7684 XSS \u9632\u62A4\u7B56\u7565\n */\n\n/**\n * \u6E05\u7406\u7528\u6237\u8F93\u5165\n * - \u79FB\u9664\u63A7\u5236\u5B57\u7B26\n * - \u9650\u5236\u957F\u5EA6\n * @param input \u7528\u6237\u8F93\u5165\u7684\u5B57\u7B26\u4E32\n * @param maxLength \u6700\u5927\u957F\u5EA6\n * @returns \u6E05\u7406\u540E\u7684\u5B57\u7B26\u4E32\n */\nexport function sanitizeInput(input: string, maxLength: number = 5000): string {\n if (!input || typeof input !== 'string') {\n return ''\n }\n\n // \u79FB\u9664\u63A7\u5236\u5B57\u7B26\uFF08ASCII 0-31 \u548C 127\uFF09\n let sanitized = input.replace(/[\\x00-\\x1F\\x7F]/g, '')\n\n // \u9650\u5236\u957F\u5EA6\n if (sanitized.length > maxLength) {\n sanitized = sanitized.substring(0, maxLength)\n }\n\n // \u53BB\u9664\u9996\u5C3E\u7A7A\u767D\n return sanitized.trim()\n}\n\n/**\n * \u9A8C\u8BC1 URL \u662F\u5426\u5B89\u5168\n * @param url URL \u5B57\u7B26\u4E32\n * @returns \u662F\u5426\u4E3A\u5B89\u5168\u7684 URL\n */\nexport function isValidUrl(url: string): boolean {\n if (!url || typeof url !== 'string') {\n return false\n }\n\n try {\n const parsed = new URL(url)\n // \u53EA\u5141\u8BB8 http \u548C https \u534F\u8BAE\n return parsed.protocol === 'http:' || parsed.protocol === 'https:'\n } catch {\n return false\n }\n}\n\n/**\n * \u9A8C\u8BC1 sessionId \u662F\u5426\u4E3A\u6709\u6548\u7684 UUID\n * @param sessionId \u4F1A\u8BDD ID\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 UUID\n */\nexport function isValidUUID(sessionId: string): boolean {\n if (!sessionId || typeof sessionId !== 'string') {\n return false\n }\n\n // UUID v4 \u683C\u5F0F\uFF1Axxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n return uuidRegex.test(sessionId)\n}\n\n/**\n * \u9A8C\u8BC1\u6D88\u606F\u5185\u5BB9\u662F\u5426\u6709\u6548\n * @param content \u6D88\u606F\u5185\u5BB9\n * @returns \u662F\u5426\u6709\u6548\n */\nexport function isValidMessageContent(content: string): boolean {\n if (!content || typeof content !== 'string') {\n return false\n }\n\n // \u53BB\u9664\u7A7A\u767D\u540E\u4E0D\u80FD\u4E3A\u7A7A\n const trimmed = content.trim()\n return trimmed.length > 0 && trimmed.length <= 5000\n}\n\n/**\n * \u8F6C\u4E49 HTML \u7279\u6B8A\u5B57\u7B26\n * @param text \u539F\u59CB\u6587\u672C\n * @returns \u8F6C\u4E49\u540E\u7684\u6587\u672C\n */\nexport function escapeHtml(text: string): string {\n if (!text || typeof text !== 'string') {\n return ''\n }\n\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n }\n\n return text.replace(/[&<>\"']/g, char => map[char] || char)\n}\n"],
|
|
5
|
+
"mappings": "AAaO,SAASA,EAAcC,EAAeC,EAAoB,IAAc,CAC7E,GAAI,CAACD,GAAS,OAAOA,GAAU,SAC7B,MAAO,GAIT,IAAIE,EAAYF,EAAM,QAAQ,mBAAoB,EAAE,EAGpD,OAAIE,EAAU,OAASD,IACrBC,EAAYA,EAAU,UAAU,EAAGD,CAAS,GAIvCC,EAAU,KAAK,CACxB,CAOO,SAASC,EAAWC,EAAsB,CAC/C,GAAI,CAACA,GAAO,OAAOA,GAAQ,SACzB,MAAO,GAGT,GAAI,CACF,MAAMC,EAAS,IAAI,IAAID,CAAG,EAE1B,OAAOC,EAAO,WAAa,SAAWA,EAAO,WAAa,QAC5D,MAAQ,CACN,MAAO,EACT,CACF,CAOO,SAASC,EAAYC,EAA4B,CACtD,MAAI,CAACA,GAAa,OAAOA,GAAc,SAC9B,GAIS,yEACD,KAAKA,CAAS,CACjC,CAOO,SAASC,EAAsBC,EAA0B,CAC9D,GAAI,CAACA,GAAW,OAAOA,GAAY,SACjC,MAAO,GAIT,MAAMC,EAAUD,EAAQ,KAAK,EAC7B,OAAOC,EAAQ,OAAS,GAAKA,EAAQ,QAAU,GACjD,CAOO,SAASC,EAAWC,EAAsB,CAC/C,GAAI,CAACA,GAAQ,OAAOA,GAAS,SAC3B,MAAO,GAGT,MAAMC,EAA8B,CAClC,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,OACP,EAEA,OAAOD,EAAK,QAAQ,WAAYE,GAAQD,EAAIC,CAAI,GAAKA,CAAI,CAC3D",
|
|
6
|
+
"names": ["sanitizeInput", "input", "maxLength", "sanitized", "isValidUrl", "url", "parsed", "isValidUUID", "sessionId", "isValidMessageContent", "content", "trimmed", "escapeHtml", "text", "map", "char"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r}from"react/jsx-runtime";import{memo as n}from"react";import t from"react-markdown";import
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{memo as n}from"react";import t from"react-markdown";import p from"remark-gfm";import a from"remark-math";const m=n(t,(o,e)=>o.children===e.children),l=({content:o})=>r("div",{className:"copilotKitMarkdown",children:r(m,{components:i,remarkPlugins:[p,a],children:o})}),i={p({children:o}){return r("p",{children:o})},a({children:o,...e}){return r("a",{style:{color:"blue",textDecoration:"underline"},...e,target:"_blank",rel:"noopener noreferrer",children:o})}};export{l as Markdown};
|
|
2
2
|
//# sourceMappingURL=markdown.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/chat/markdown.tsx"],
|
|
4
|
-
"sourcesContent": ["import { type FC, memo } from 'react'\nimport ReactMarkdown, { type Options, type Components } from 'react-markdown'\nimport remarkGfm from 'remark-gfm'\nimport remarkMath from 'remark-math'\n\nconst MemoizedReactMarkdown: FC<Options> = memo(\n ReactMarkdown,\n (prevProps, nextProps) => prevProps.children === nextProps.children
|
|
5
|
-
"mappings": "AAiBM,cAAAA,MAAA,oBAjBN,OAAkB,QAAAC,MAAY,QAC9B,OAAOC,MAAsD,iBAC7D,OAAOC,MAAe,aACtB,OAAOC,MAAgB,cAEvB,MAAMC,EAAqCJ,EACzCC,EACA,CAACI,EAAWC,IAAcD,EAAU,WAAaC,EAAU,
|
|
4
|
+
"sourcesContent": ["import { type FC, memo } from 'react'\nimport ReactMarkdown, { type Options, type Components } from 'react-markdown'\nimport remarkGfm from 'remark-gfm'\nimport remarkMath from 'remark-math'\n\nconst MemoizedReactMarkdown: FC<Options> = memo(\n ReactMarkdown,\n (prevProps, nextProps) => prevProps.children === nextProps.children\n)\n\ntype MarkdownProps = {\n content: string\n}\n\nexport const Markdown = ({ content }: MarkdownProps) => {\n return (\n <div className=\"copilotKitMarkdown\">\n <MemoizedReactMarkdown components={components} remarkPlugins={[remarkGfm, remarkMath]}>\n {content}\n </MemoizedReactMarkdown>\n </div>\n )\n}\n\nconst components: Components = {\n p({ children }) {\n return <p>{children}</p>\n },\n a({ children, ...props }) {\n return (\n <a style={{ color: 'blue', textDecoration: 'underline' }} {...props} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </a>\n )\n },\n}\n"],
|
|
5
|
+
"mappings": "AAiBM,cAAAA,MAAA,oBAjBN,OAAkB,QAAAC,MAAY,QAC9B,OAAOC,MAAsD,iBAC7D,OAAOC,MAAe,aACtB,OAAOC,MAAgB,cAEvB,MAAMC,EAAqCJ,EACzCC,EACA,CAACI,EAAWC,IAAcD,EAAU,WAAaC,EAAU,QAC7D,EAMaC,EAAW,CAAC,CAAE,QAAAC,CAAQ,IAE/BT,EAAC,OAAI,UAAU,qBACb,SAAAA,EAACK,EAAA,CAAsB,WAAYK,EAAY,cAAe,CAACP,EAAWC,CAAU,EACjF,SAAAK,EACH,EACF,EAIEC,EAAyB,CAC7B,EAAE,CAAE,SAAAC,CAAS,EAAG,CACd,OAAOX,EAAC,KAAG,SAAAW,EAAS,CACtB,EACA,EAAE,CAAE,SAAAA,EAAU,GAAGC,CAAM,EAAG,CACxB,OACEZ,EAAC,KAAE,MAAO,CAAE,MAAO,OAAQ,eAAgB,WAAY,EAAI,GAAGY,EAAO,OAAO,SAAS,IAAI,sBACtF,SAAAD,EACH,CAEJ,CACF",
|
|
6
6
|
"names": ["jsx", "memo", "ReactMarkdown", "remarkGfm", "remarkMath", "MemoizedReactMarkdown", "prevProps", "nextProps", "Markdown", "content", "components", "children", "props"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NormalizedProductVariant } from '@anker-in/shopify-react';
|
|
2
2
|
import { FunctionMemberPriceResult } from '../memberPriceTypes';
|
|
3
3
|
export declare const useFunctionMemberPrice: ({ variant }: {
|
|
4
|
-
variant?:
|
|
4
|
+
variant?: NormalizedProductVariant;
|
|
5
5
|
}) => FunctionMemberPriceResult | (Partial<FunctionMemberPriceResult> & {
|
|
6
6
|
hasMemberPrice: false;
|
|
7
7
|
});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{getFunctionMemberPrice as c}from"../utils/getFunctionMemberPrice";import{useMemo as i}from"react";import{useCreditsContext as m}from"../provider";import{useHeadlessContext as n}from"@anker-in/lib";const
|
|
1
|
+
import{getFunctionMemberPrice as c}from"../utils/getFunctionMemberPrice";import{useMemo as i}from"react";import{useCreditsContext as m}from"../provider";import{useHeadlessContext as n}from"@anker-in/lib";const p=({variant:e})=>{const{memberPriceDiscount:r}=m(),{locale:t=""}=n();return i(()=>{const o=c({memberPriceDiscount:r,currencyCode:e?.price.currencyCode,variant:e,locale:t});return o||{hasMemberPrice:!1}},[t,r,e])};export{p as useFunctionMemberPrice};
|
|
2
2
|
//# sourceMappingURL=useFunctionMemberPrice.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/components/credits/context/hooks/useFunctionMemberPrice.ts"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
5
|
-
"mappings": "AAEA,OAAS,0BAAAA,MAA8B,kCACvC,OAAS,WAAAC,MAAe,QACxB,OAAS,qBAAAC,MAAyB,cAClC,OAAS,sBAAAC,MAA0B,gBAG5B,MAAMC,EAAyB,CAAC,CAAE,QAAAC,CAAQ,
|
|
4
|
+
"sourcesContent": ["import { NormalizedProductVariant } from '@anker-in/shopify-react'\nimport { FunctionMemberPriceResult } from '../memberPriceTypes'\nimport { getFunctionMemberPrice } from '../utils/getFunctionMemberPrice'\nimport { useMemo } from 'react'\nimport { useCreditsContext } from '../provider'\nimport { useHeadlessContext } from '@anker-in/lib'\n\n// \u8BA1\u7B97\u5355\u4EF6\u5546\u54C1\u7684\u4F1A\u5458\u4EF7\nexport const useFunctionMemberPrice = ({ variant }: { variant?: NormalizedProductVariant }) => {\n const { memberPriceDiscount } = useCreditsContext()\n const { locale = '' } = useHeadlessContext()\n\n const memberPrice:\n | FunctionMemberPriceResult\n | (Partial<FunctionMemberPriceResult> & {\n hasMemberPrice: false\n }) = useMemo(() => {\n const result = getFunctionMemberPrice({\n memberPriceDiscount: memberPriceDiscount,\n currencyCode: variant?.price.currencyCode,\n variant,\n locale,\n })\n\n if (result) {\n return result as FunctionMemberPriceResult\n }\n\n return { hasMemberPrice: false }\n }, [locale, memberPriceDiscount, variant])\n\n return memberPrice\n}\n"],
|
|
5
|
+
"mappings": "AAEA,OAAS,0BAAAA,MAA8B,kCACvC,OAAS,WAAAC,MAAe,QACxB,OAAS,qBAAAC,MAAyB,cAClC,OAAS,sBAAAC,MAA0B,gBAG5B,MAAMC,EAAyB,CAAC,CAAE,QAAAC,CAAQ,IAA8C,CAC7F,KAAM,CAAE,oBAAAC,CAAoB,EAAIJ,EAAkB,EAC5C,CAAE,OAAAK,EAAS,EAAG,EAAIJ,EAAmB,EAqB3C,OAfSF,EAAQ,IAAM,CACrB,MAAMO,EAASR,EAAuB,CACpC,oBAAqBM,EACrB,aAAcD,GAAS,MAAM,aAC7B,QAAAA,EACA,OAAAE,CACF,CAAC,EAED,OAAIC,GAIG,CAAE,eAAgB,EAAM,CACjC,EAAG,CAACD,EAAQD,EAAqBD,CAAO,CAAC,CAG3C",
|
|
6
6
|
"names": ["getFunctionMemberPrice", "useMemo", "useCreditsContext", "useHeadlessContext", "useFunctionMemberPrice", "variant", "memberPriceDiscount", "locale", "result"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useCallback as R,useEffect as b,useState as x}from"react";import{useAlpcMutation as y}from"./useAlpcFetch";import{ALPC_COUNTRY_MAP as S}from"../const";import{useCreditsContext as A}from"../provider";import{useHeadlessContext as M}from"@anker-in/lib";function P(){let t="";const{profile:n,isLoadingProfile:c,alpcBrand:m}=A(),{locale:u,brand:p}=M(),_=m||p;u==="pl"?t="eu":t=u;const[f,g]=x([]),{isMutating:C,trigger:l}=y({url:"/v1/credit/consume_credit_rules",initData:{brand:_,page:1,page_size:
|
|
1
|
+
import{useCallback as R,useEffect as b,useState as x}from"react";import{useAlpcMutation as y}from"./useAlpcFetch";import{ALPC_COUNTRY_MAP as S}from"../const";import{useCreditsContext as A}from"../provider";import{useHeadlessContext as M}from"@anker-in/lib";function P(){let t="";const{profile:n,isLoadingProfile:c,alpcBrand:m}=A(),{locale:u,brand:p}=M(),_=m||p;u==="pl"?t="eu":t=u;const[f,g]=x([]),{isMutating:C,trigger:l}=y({url:"/v1/credit/consume_credit_rules",initData:{brand:_,page:1,page_size:999,country:(S.get(t)||t)?.toUpperCase()}}),s=R(()=>{l({user_id:n?.user_id},{onSuccess(L){let a=L.data.consume_credit_rules||[],r=a.filter(e=>e.consume_type==1)||[],o=a.filter(e=>e.consume_type==2)||[];r=r.sort((e,i)=>e.consume_credits-i.consume_credits),o=o.sort((e,i)=>e.consume_credits-i.consume_credits);const d=r.concat(o);g(d),localStorage?.setItem(`consume_credit_rules-${t}`,JSON.stringify({expire:Date.now()+10*60*1e3,consume_credit_rules:d}))}})},[n,l,t]);return b(()=>{c||s()},[s,c]),{listLoading:C,redeemableList:f,getRedeemableList:s}}var h=P;export{h as default};
|
|
2
2
|
//# sourceMappingURL=useRedeemableList.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/components/credits/context/hooks/useRedeemableList.ts"],
|
|
4
|
-
"sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\n\nimport { useAlpcMutation } from './useAlpcFetch'\nimport { ALPC_COUNTRY_MAP } from '../const'\nimport { useCreditsContext } from '../provider'\nimport type { ConsumeCreditRuleResponse } from '../response'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useRedeemableList() {\n let locale = '' as string\n const { profile, isLoadingProfile, alpcBrand } = useCreditsContext()\n const { locale: contextLocale, brand: headlessBrand } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n\n if (contextLocale === 'pl') {\n locale = 'eu'\n } else {\n locale = contextLocale\n }\n\n const [redeemableList, setRedeemableList] = useState<ConsumeCreditRuleResponse[]>([])\n const { isMutating: listLoading, trigger } = useAlpcMutation<\n {\n data: { consume_credit_rules: ConsumeCreditRuleResponse[] }\n },\n { user_id?: string }\n >({\n url: `/v1/credit/consume_credit_rules`,\n initData: {\n brand,\n page: 1,\n page_size:
|
|
5
|
-
"mappings": "AAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QAEjD,OAAS,mBAAAC,MAAuB,iBAChC,OAAS,oBAAAC,MAAwB,WACjC,OAAS,qBAAAC,MAAyB,cAElC,OAAS,sBAAAC,MAA0B,gBAEnC,SAASC,GAAoB,CAC3B,IAAIC,EAAS,GACb,KAAM,CAAE,QAAAC,EAAS,iBAAAC,EAAkB,UAAAC,CAAU,EAAIN,EAAkB,EAC7D,CAAE,OAAQO,EAAe,MAAOC,CAAc,EAAIP,EAAmB,EACrEQ,EAAQH,GAAaE,EAEvBD,IAAkB,KACpBJ,EAAS,KAETA,EAASI,EAGX,KAAM,CAACG,EAAgBC,CAAiB,EAAId,EAAsC,CAAC,CAAC,EAC9E,CAAE,WAAYe,EAAa,QAAAC,CAAQ,EAAIf,EAK3C,CACA,IAAK,kCACL,SAAU,CACR,MAAAW,EACA,KAAM,EACN,UAAW,
|
|
4
|
+
"sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\n\nimport { useAlpcMutation } from './useAlpcFetch'\nimport { ALPC_COUNTRY_MAP } from '../const'\nimport { useCreditsContext } from '../provider'\nimport type { ConsumeCreditRuleResponse } from '../response'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useRedeemableList() {\n let locale = '' as string\n const { profile, isLoadingProfile, alpcBrand } = useCreditsContext()\n const { locale: contextLocale, brand: headlessBrand } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n\n if (contextLocale === 'pl') {\n locale = 'eu'\n } else {\n locale = contextLocale\n }\n\n const [redeemableList, setRedeemableList] = useState<ConsumeCreditRuleResponse[]>([])\n const { isMutating: listLoading, trigger } = useAlpcMutation<\n {\n data: { consume_credit_rules: ConsumeCreditRuleResponse[] }\n },\n { user_id?: string }\n >({\n url: `/v1/credit/consume_credit_rules`,\n initData: {\n brand,\n page: 1,\n page_size: 999,\n country: (ALPC_COUNTRY_MAP.get(locale) || locale)?.toUpperCase(),\n },\n })\n\n const getRedeemableList = useCallback(() => {\n trigger(\n {\n user_id: profile?.user_id,\n },\n {\n onSuccess(responseData) {\n let list = responseData.data.consume_credit_rules || []\n let cList = list.filter(i => i.consume_type == 1) || []\n let pList = list.filter(i => i.consume_type == 2) || []\n cList = cList.sort((prev, next) => prev.consume_credits - next.consume_credits)\n pList = pList.sort((prev, next) => prev.consume_credits - next.consume_credits)\n const resultList = cList.concat(pList)\n setRedeemableList(resultList)\n\n localStorage?.setItem(\n `consume_credit_rules-${locale}`,\n JSON.stringify({\n expire: Date.now() + 10 * 60 * 1000,\n consume_credit_rules: resultList,\n })\n )\n },\n }\n )\n }, [profile, trigger, locale])\n\n useEffect(() => {\n if (!isLoadingProfile) {\n getRedeemableList()\n }\n }, [getRedeemableList, isLoadingProfile])\n\n return {\n listLoading,\n redeemableList,\n getRedeemableList,\n }\n}\n\nexport default useRedeemableList\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QAEjD,OAAS,mBAAAC,MAAuB,iBAChC,OAAS,oBAAAC,MAAwB,WACjC,OAAS,qBAAAC,MAAyB,cAElC,OAAS,sBAAAC,MAA0B,gBAEnC,SAASC,GAAoB,CAC3B,IAAIC,EAAS,GACb,KAAM,CAAE,QAAAC,EAAS,iBAAAC,EAAkB,UAAAC,CAAU,EAAIN,EAAkB,EAC7D,CAAE,OAAQO,EAAe,MAAOC,CAAc,EAAIP,EAAmB,EACrEQ,EAAQH,GAAaE,EAEvBD,IAAkB,KACpBJ,EAAS,KAETA,EAASI,EAGX,KAAM,CAACG,EAAgBC,CAAiB,EAAId,EAAsC,CAAC,CAAC,EAC9E,CAAE,WAAYe,EAAa,QAAAC,CAAQ,EAAIf,EAK3C,CACA,IAAK,kCACL,SAAU,CACR,MAAAW,EACA,KAAM,EACN,UAAW,IACX,SAAUV,EAAiB,IAAII,CAAM,GAAKA,IAAS,YAAY,CACjE,CACF,CAAC,EAEKW,EAAoBnB,EAAY,IAAM,CAC1CkB,EACE,CACE,QAAST,GAAS,OACpB,EACA,CACE,UAAUW,EAAc,CACtB,IAAIC,EAAOD,EAAa,KAAK,sBAAwB,CAAC,EAClDE,EAAQD,EAAK,OAAOE,GAAKA,EAAE,cAAgB,CAAC,GAAK,CAAC,EAClDC,EAAQH,EAAK,OAAOE,GAAKA,EAAE,cAAgB,CAAC,GAAK,CAAC,EACtDD,EAAQA,EAAM,KAAK,CAACG,EAAMC,IAASD,EAAK,gBAAkBC,EAAK,eAAe,EAC9EF,EAAQA,EAAM,KAAK,CAACC,EAAMC,IAASD,EAAK,gBAAkBC,EAAK,eAAe,EAC9E,MAAMC,EAAaL,EAAM,OAAOE,CAAK,EACrCR,EAAkBW,CAAU,EAE5B,cAAc,QACZ,wBAAwBnB,CAAM,GAC9B,KAAK,UAAU,CACb,OAAQ,KAAK,IAAI,EAAI,GAAK,GAAK,IAC/B,qBAAsBmB,CACxB,CAAC,CACH,CACF,CACF,CACF,CACF,EAAG,CAAClB,EAASS,EAASV,CAAM,CAAC,EAE7B,OAAAP,EAAU,IAAM,CACTS,GACHS,EAAkB,CAEtB,EAAG,CAACA,EAAmBT,CAAgB,CAAC,EAEjC,CACL,YAAAO,EACA,eAAAF,EACA,kBAAAI,CACF,CACF,CAEA,IAAOS,EAAQrB",
|
|
6
6
|
"names": ["useCallback", "useEffect", "useState", "useAlpcMutation", "ALPC_COUNTRY_MAP", "useCreditsContext", "useHeadlessContext", "useRedeemableList", "locale", "profile", "isLoadingProfile", "alpcBrand", "contextLocale", "headlessBrand", "brand", "redeemableList", "setRedeemableList", "listLoading", "trigger", "getRedeemableList", "responseData", "list", "cList", "i", "pList", "prev", "next", "resultList", "useRedeemableList_default"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var x=(r=>(r[r.Percentage=1]="Percentage",r[r.FixedAmount=2]="FixedAmount",r[r.FixedPrice=3]="FixedPrice",r))(x||{})
|
|
1
|
+
var x=(r=>(r[r.Percentage=1]="Percentage",r[r.FixedAmount=2]="FixedAmount",r[r.FixedPrice=3]="FixedPrice",r))(x||{});export{x as FunctionDiscountType};
|
|
2
2
|
//# sourceMappingURL=memberPriceConst.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/credits/context/memberPriceConst.ts"],
|
|
4
|
-
"sourcesContent": ["// Function \u6298\u6263\u7C7B\u578B\nexport enum FunctionDiscountType {\n Percentage = 1,\n FixedAmount,\n FixedPrice,\n}\n
|
|
5
|
-
"mappings": "AACO,IAAKA,OACVA,IAAA,WAAa,GAAb,aACAA,IAAA,6BACAA,IAAA,2BAHUA,OAAA
|
|
6
|
-
"names": ["FunctionDiscountType"
|
|
4
|
+
"sourcesContent": ["// Function \u6298\u6263\u7C7B\u578B\nexport enum FunctionDiscountType {\n Percentage = 1,\n FixedAmount,\n FixedPrice,\n}\n"],
|
|
5
|
+
"mappings": "AACO,IAAKA,OACVA,IAAA,WAAa,GAAb,aACAA,IAAA,6BACAA,IAAA,2BAHUA,OAAA",
|
|
6
|
+
"names": ["FunctionDiscountType"]
|
|
7
7
|
}
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
import { FunctionDiscountType
|
|
2
|
-
export type PriceEndingConf = {
|
|
3
|
-
apply_price_ending: boolean;
|
|
4
|
-
one_decimal_place: string;
|
|
5
|
-
two_decimal_place: string;
|
|
6
|
-
round_selected: RoundSelected;
|
|
7
|
-
};
|
|
1
|
+
import { FunctionDiscountType } from './memberPriceConst';
|
|
8
2
|
export type DiscountConfig = {
|
|
9
3
|
discount_type: FunctionDiscountType;
|
|
10
4
|
discount_value: number;
|
|
11
|
-
price_ending_conf?: PriceEndingConf;
|
|
12
5
|
};
|
|
13
6
|
export type FunctionMemberPriceConfig = {
|
|
14
7
|
rule_id: string;
|
|
@@ -30,17 +23,3 @@ export type FunctionMemberPriceConfig = {
|
|
|
30
23
|
other_product_discounts: boolean;
|
|
31
24
|
};
|
|
32
25
|
};
|
|
33
|
-
export type FunctionMemberPriceResult = {
|
|
34
|
-
hasMemberPrice: boolean;
|
|
35
|
-
useCoupon: boolean;
|
|
36
|
-
originalPrice: number;
|
|
37
|
-
originalPriceWithCurrency: string;
|
|
38
|
-
salePrice: number;
|
|
39
|
-
salePriceWithCurrency: string;
|
|
40
|
-
salePriceWithoutCoupon: number;
|
|
41
|
-
salePriceWithoutCouponWithCurrency: string;
|
|
42
|
-
savePrice: number;
|
|
43
|
-
savePriceWithCurrency: string;
|
|
44
|
-
savePriceWithoutCoupon: number;
|
|
45
|
-
savePriceWithoutCouponWithCurrency: string;
|
|
46
|
-
};
|
|
@@ -16,12 +16,27 @@ type Context = {
|
|
|
16
16
|
fetchCreditInfo: (user_id: string) => void;
|
|
17
17
|
gtm: {
|
|
18
18
|
pageGroup: string;
|
|
19
|
+
pageHandle?: string;
|
|
19
20
|
};
|
|
20
21
|
pageCommon: CreditsPageCommon;
|
|
21
22
|
memberPriceDiscount?: FunctionMemberPriceConfig[];
|
|
22
23
|
alpcBrand?: string;
|
|
24
|
+
cartConfig?: {
|
|
25
|
+
addToCart: (params: {
|
|
26
|
+
variantList: Array<{
|
|
27
|
+
variant: any;
|
|
28
|
+
quantity: number;
|
|
29
|
+
attributes?: Array<{
|
|
30
|
+
key: string;
|
|
31
|
+
value: string;
|
|
32
|
+
}>;
|
|
33
|
+
}>;
|
|
34
|
+
cartAttributes?: Record<string, string>;
|
|
35
|
+
discountCodes?: string[];
|
|
36
|
+
}) => void | Promise<any>;
|
|
37
|
+
};
|
|
23
38
|
};
|
|
24
39
|
export declare const CreditsContext: import("react").Context<Context>;
|
|
25
|
-
export declare function CreditsProvider({ children, profile, removeProfile, isLoadingProfile, openSignInPopup, openSignUpPopup, taskIdToTypeMapping, creditInfo, customer, customerLoading, fetchCreditInfo, gtm, pageCommon, memberPriceDiscount, alpcBrand, }: PropsWithChildren<Context>): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
export declare function CreditsProvider({ children, profile, removeProfile, isLoadingProfile, openSignInPopup, openSignUpPopup, taskIdToTypeMapping, creditInfo, customer, customerLoading, fetchCreditInfo, gtm, pageCommon, memberPriceDiscount, alpcBrand, cartConfig, }: PropsWithChildren<Context>): import("react/jsx-runtime").JSX.Element;
|
|
26
41
|
export declare function useCreditsContext(): Context;
|
|
27
42
|
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as y}from"react/jsx-runtime";import{createContext as l,useContext as v}from"react";const o=l({profile:null,isLoadingProfile:!1,taskIdToTypeMapping:{},removeProfile:()=>{},openSignInPopup:()=>{},openSignUpPopup:()=>{},creditInfo:void 0,customerLoading:!1,fetchCreditInfo:e=>{},gtm:{pageGroup:"",pageHandle:""},pageCommon:{},memberPriceDiscount:void 0,alpcBrand:void 0,cartConfig:void 0});function _({children:e,profile:r,removeProfile:n,isLoadingProfile:t,openSignInPopup:i,openSignUpPopup:s,taskIdToTypeMapping:d,creditInfo:p,customer:a,customerLoading:g,fetchCreditInfo:u,gtm:C,pageCommon:m,memberPriceDiscount:f,alpcBrand:c,cartConfig:P}){return y(o.Provider,{value:{profile:r,isLoadingProfile:t,removeProfile:n,openSignInPopup:i,openSignUpPopup:s,taskIdToTypeMapping:d,creditInfo:p,fetchCreditInfo:u,customer:a,customerLoading:g,gtm:C,pageCommon:m,memberPriceDiscount:f,alpcBrand:c,cartConfig:P},children:e})}function A(){const e=v(o);if(!e)throw new Error("useCreditsContext must be used within a CreditsProvider");return e}export{o as CreditsContext,_ as CreditsProvider,A as useCreditsContext};
|
|
2
2
|
//# sourceMappingURL=provider.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/credits/context/provider.tsx"],
|
|
4
|
-
"sourcesContent": ["import { createContext, PropsWithChildren, useContext } from 'react'\nimport type { DTC_TASK_TYPE } from './const'\nimport type { CreditInfoResponse } from './response'\nimport { CreditsPageCommon } from '../type'\nimport { FunctionMemberPriceConfig } from './memberPriceTypes'\n\ntype Context = {\n profile: any\n isLoadingProfile: boolean\n removeProfile: () => void\n taskIdToTypeMapping: Record<string, DTC_TASK_TYPE>\n openSignInPopup: () => void\n openSignUpPopup: () => void\n creditInfo?: CreditInfoResponse\n customer?: any\n customerLoading: boolean\n fetchCreditInfo: (user_id: string) => void\n gtm: {\n pageGroup: string\n }\n pageCommon: CreditsPageCommon\n memberPriceDiscount?: FunctionMemberPriceConfig[]\n alpcBrand?: string\n}\n\nexport const CreditsContext = createContext<Context>({\n profile: null,\n isLoadingProfile: false,\n taskIdToTypeMapping: {},\n removeProfile: () => {},\n openSignInPopup: () => {},\n openSignUpPopup: () => {},\n creditInfo: undefined,\n customerLoading: false,\n fetchCreditInfo: (user_id: string) => {},\n gtm: {\n pageGroup: '',\n },\n pageCommon: {},\n memberPriceDiscount: undefined,\n alpcBrand: undefined,\n})\n\nexport function CreditsProvider({\n children,\n profile,\n removeProfile,\n isLoadingProfile,\n openSignInPopup,\n openSignUpPopup,\n taskIdToTypeMapping,\n creditInfo,\n customer,\n customerLoading,\n fetchCreditInfo,\n gtm,\n pageCommon,\n memberPriceDiscount,\n alpcBrand,\n}: PropsWithChildren<Context>) {\n return (\n <CreditsContext.Provider\n value={{\n profile,\n isLoadingProfile,\n removeProfile,\n openSignInPopup,\n openSignUpPopup,\n taskIdToTypeMapping,\n creditInfo,\n fetchCreditInfo,\n customer,\n customerLoading,\n gtm,\n pageCommon,\n memberPriceDiscount,\n alpcBrand,\n }}\n >\n {children}\n </CreditsContext.Provider>\n )\n}\n\nexport function useCreditsContext() {\n const context = useContext(CreditsContext)\n if (!context) {\n throw new Error('useCreditsContext must be used within a CreditsProvider')\n }\n return context\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["jsx", "createContext", "useContext", "CreditsContext", "user_id", "CreditsProvider", "children", "profile", "removeProfile", "isLoadingProfile", "openSignInPopup", "openSignUpPopup", "taskIdToTypeMapping", "creditInfo", "customer", "customerLoading", "fetchCreditInfo", "gtm", "pageCommon", "memberPriceDiscount", "alpcBrand", "useCreditsContext", "context"]
|
|
4
|
+
"sourcesContent": ["import { createContext, PropsWithChildren, useContext } from 'react'\nimport type { DTC_TASK_TYPE } from './const'\nimport type { CreditInfoResponse } from './response'\nimport { CreditsPageCommon } from '../type'\nimport { FunctionMemberPriceConfig } from './memberPriceTypes'\n\ntype Context = {\n profile: any\n isLoadingProfile: boolean\n removeProfile: () => void\n taskIdToTypeMapping: Record<string, DTC_TASK_TYPE>\n openSignInPopup: () => void\n openSignUpPopup: () => void\n creditInfo?: CreditInfoResponse\n customer?: any\n customerLoading: boolean\n fetchCreditInfo: (user_id: string) => void\n gtm: {\n pageGroup: string\n pageHandle?: string\n }\n pageCommon: CreditsPageCommon\n memberPriceDiscount?: FunctionMemberPriceConfig[]\n alpcBrand?: string\n cartConfig?: {\n addToCart: (params: {\n variantList: Array<{\n variant: any\n quantity: number\n attributes?: Array<{ key: string; value: string }>\n }>\n cartAttributes?: Record<string, string>\n discountCodes?: string[]\n }) => void | Promise<any>\n }\n}\n\nexport const CreditsContext = createContext<Context>({\n profile: null,\n isLoadingProfile: false,\n taskIdToTypeMapping: {},\n removeProfile: () => {},\n openSignInPopup: () => {},\n openSignUpPopup: () => {},\n creditInfo: undefined,\n customerLoading: false,\n fetchCreditInfo: (user_id: string) => {},\n gtm: {\n pageGroup: '',\n pageHandle: '',\n },\n pageCommon: {},\n memberPriceDiscount: undefined,\n alpcBrand: undefined,\n cartConfig: undefined,\n})\n\nexport function CreditsProvider({\n children,\n profile,\n removeProfile,\n isLoadingProfile,\n openSignInPopup,\n openSignUpPopup,\n taskIdToTypeMapping,\n creditInfo,\n customer,\n customerLoading,\n fetchCreditInfo,\n gtm,\n pageCommon,\n memberPriceDiscount,\n alpcBrand,\n cartConfig,\n}: PropsWithChildren<Context>) {\n return (\n <CreditsContext.Provider\n value={{\n profile,\n isLoadingProfile,\n removeProfile,\n openSignInPopup,\n openSignUpPopup,\n taskIdToTypeMapping,\n creditInfo,\n fetchCreditInfo,\n customer,\n customerLoading,\n gtm,\n pageCommon,\n memberPriceDiscount,\n alpcBrand,\n cartConfig,\n }}\n >\n {children}\n </CreditsContext.Provider>\n )\n}\n\nexport function useCreditsContext() {\n const context = useContext(CreditsContext)\n if (!context) {\n throw new Error('useCreditsContext must be used within a CreditsProvider')\n }\n return context\n}\n"],
|
|
5
|
+
"mappings": "AA4EI,cAAAA,MAAA,oBA5EJ,OAAS,iBAAAC,EAAkC,cAAAC,MAAkB,QAqCtD,MAAMC,EAAiBF,EAAuB,CACnD,QAAS,KACT,iBAAkB,GAClB,oBAAqB,CAAC,EACtB,cAAe,IAAM,CAAC,EACtB,gBAAiB,IAAM,CAAC,EACxB,gBAAiB,IAAM,CAAC,EACxB,WAAY,OACZ,gBAAiB,GACjB,gBAAkBG,GAAoB,CAAC,EACvC,IAAK,CACH,UAAW,GACX,WAAY,EACd,EACA,WAAY,CAAC,EACb,oBAAqB,OACrB,UAAW,OACX,WAAY,MACd,CAAC,EAEM,SAASC,EAAgB,CAC9B,SAAAC,EACA,QAAAC,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,oBAAAC,EACA,WAAAC,EACA,SAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,IAAAC,EACA,WAAAC,EACA,oBAAAC,EACA,UAAAC,EACA,WAAAC,CACF,EAA+B,CAC7B,OACErB,EAACG,EAAe,SAAf,CACC,MAAO,CACL,QAAAI,EACA,iBAAAE,EACA,cAAAD,EACA,gBAAAE,EACA,gBAAAC,EACA,oBAAAC,EACA,WAAAC,EACA,gBAAAG,EACA,SAAAF,EACA,gBAAAC,EACA,IAAAE,EACA,WAAAC,EACA,oBAAAC,EACA,UAAAC,EACA,WAAAC,CACF,EAEC,SAAAf,EACH,CAEJ,CAEO,SAASgB,GAAoB,CAClC,MAAMC,EAAUrB,EAAWC,CAAc,EACzC,GAAI,CAACoB,EACH,MAAM,IAAI,MAAM,yDAAyD,EAE3E,OAAOA,CACT",
|
|
6
|
+
"names": ["jsx", "createContext", "useContext", "CreditsContext", "user_id", "CreditsProvider", "children", "profile", "removeProfile", "isLoadingProfile", "openSignInPopup", "openSignUpPopup", "taskIdToTypeMapping", "creditInfo", "customer", "customerLoading", "fetchCreditInfo", "gtm", "pageCommon", "memberPriceDiscount", "alpcBrand", "cartConfig", "useCreditsContext", "context"]
|
|
7
7
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { FunctionMemberPriceConfig, FunctionMemberPriceResult } from '../memberPriceTypes';
|
|
2
|
-
import {
|
|
2
|
+
import { NormalizedProductVariant } from '@anker-in/shopify-react';
|
|
3
3
|
export declare const getFunctionMemberPrice: ({ memberPriceDiscount, currencyCode, variant, locale, }: {
|
|
4
4
|
memberPriceDiscount?: FunctionMemberPriceConfig[];
|
|
5
5
|
currencyCode?: string;
|
|
6
|
-
variant?:
|
|
6
|
+
variant?: NormalizedProductVariant;
|
|
7
7
|
locale: string;
|
|
8
8
|
}) => false | FunctionMemberPriceResult;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{formatPrice as
|
|
1
|
+
import{formatPrice as t}from"../utils";import{functionDiscountCalculate as b}from"./functionDiscountCalculate";import n from"decimal.js";import{getFunctionMemberPriceDiscountConfig as D}from"./getFunctionMemberPriceDiscountConfig";import d from"./variantGetCoupon";const R=({memberPriceDiscount:g,currencyCode:r,variant:e,locale:i})=>{const m=d({variant:e}),{memberPriceDiscountConfig:c,activeMemberPriceConfig:y}=D({config:g,variant:e}),s=!!y?.discount_combinations.other_product_discounts;if(!c)return!1;const u={amount:e?.price.amount||0,priceWithCurrency:t({amount:e?.price.amount||0,currencyCode:r||"USD",locale:i})},o=c?b({config:c,price:e?.price.amount||0}):e?.price.amount||0,a={amount:o,priceWithCurrency:t({amount:o,currencyCode:r||"USD",locale:i})};let p=o;if(m?.variant_price4wscode&&e&&s)if(s){const P=new n(e.price.amount).minus(m.variant_price4wscode);p=new n(o).minus(P).toNumber()}else{const P=new n(e.price.amount).minus(m.variant_price4wscode);if(o>P.toNumber())return!1}const C={amount:p,priceWithCurrency:t({amount:p,currencyCode:r||"USD",locale:i})},h=new n(u.amount).minus(C.amount).toNumber(),f={amount:h,priceWithCurrency:t({amount:h,currencyCode:r||"USD",locale:i,maximumFractionDigits:2})},W=new n(u.amount).minus(a.amount).toNumber(),l={amount:W,priceWithCurrency:t({amount:W,currencyCode:r||"USD",locale:i,maximumFractionDigits:2})};return{hasMemberPrice:!!c,useCoupon:s,originalPrice:u.amount,originalPriceWithCurrency:u.priceWithCurrency,salePrice:C.amount,salePriceWithCurrency:C.priceWithCurrency,salePriceWithoutCoupon:a.amount,salePriceWithoutCouponWithCurrency:a.priceWithCurrency,savePrice:f.amount,savePriceWithCurrency:f.priceWithCurrency,savePriceWithoutCoupon:l.amount,savePriceWithoutCouponWithCurrency:l.priceWithCurrency}};export{R as getFunctionMemberPrice};
|
|
2
2
|
//# sourceMappingURL=getFunctionMemberPrice.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/components/credits/context/utils/getFunctionMemberPrice.ts"],
|
|
4
|
-
"sourcesContent": ["import { formatPrice } from '../utils'\nimport { FunctionMemberPriceConfig, FunctionMemberPriceResult } from '../memberPriceTypes'\nimport {
|
|
4
|
+
"sourcesContent": ["import { formatPrice } from '../utils'\nimport { FunctionMemberPriceConfig, FunctionMemberPriceResult } from '../memberPriceTypes'\nimport { NormalizedProductVariant } from '@anker-in/shopify-react'\nimport { functionDiscountCalculate } from './functionDiscountCalculate'\nimport Decimal from 'decimal.js'\nimport { getFunctionMemberPriceDiscountConfig } from './getFunctionMemberPriceDiscountConfig'\nimport variantGetCoupon from './variantGetCoupon'\n\n// \u8BA1\u7B97\u5355\u4EF6\u5546\u54C1\u7684\u4F1A\u5458\u4EF7\nexport const getFunctionMemberPrice = ({\n memberPriceDiscount,\n currencyCode,\n variant,\n locale,\n}: {\n memberPriceDiscount?: FunctionMemberPriceConfig[]\n currencyCode?: string\n variant?: NormalizedProductVariant\n locale: string\n}) => {\n const couponData = variantGetCoupon({ variant })\n\n // variant\u5BF9\u5E94\u7684\u4F1A\u5458\u4EF7\u6298\u6263\u914D\u7F6E\n const { memberPriceDiscountConfig, activeMemberPriceConfig } = getFunctionMemberPriceDiscountConfig({\n config: memberPriceDiscount,\n variant,\n })\n\n const useCoupon = !!activeMemberPriceConfig?.discount_combinations.other_product_discounts\n\n if (!memberPriceDiscountConfig) {\n return false as false\n }\n\n const originalPrice = {\n amount: variant?.price.amount || 0,\n priceWithCurrency: formatPrice({\n amount: variant?.price.amount || 0,\n currencyCode: currencyCode || 'USD',\n locale,\n }),\n }\n\n const salePriceWithoutCouponAmount = memberPriceDiscountConfig\n ? functionDiscountCalculate({\n config: memberPriceDiscountConfig,\n price: variant?.price.amount || 0,\n })\n : variant?.price.amount || 0\n const salePriceWithoutCoupon = {\n amount: salePriceWithoutCouponAmount,\n priceWithCurrency: formatPrice({\n amount: salePriceWithoutCouponAmount,\n currencyCode: currencyCode || 'USD',\n locale,\n }),\n }\n\n // function \u4F1A\u5458\u4EF7\u662F\u5728\u539F\u4EF7\u7684\u57FA\u7840\u4E0A\u8FDB\u884C\u8BA1\u7B97\uFF0C\u6682\u4E0D\u652F\u6301\u6298\u540E\u4EF7\n let salePriceAmount = salePriceWithoutCouponAmount\n\n // \u51CF\u53BBcode\u7684\u4F18\u60E0\n if (couponData?.variant_price4wscode && variant && useCoupon) {\n if (useCoupon) {\n // code\u7684\u4F18\u60E0\u91D1\u989D\n const codeSaveAmountDecimal = new Decimal(variant.price.amount).minus(couponData.variant_price4wscode)\n salePriceAmount = new Decimal(salePriceWithoutCouponAmount).minus(codeSaveAmountDecimal).toNumber()\n } else {\n // \u4E0D\u80FD\u4E0E code \u540C\u65F6\u4F7F\u7528\uFF0C\u9700\u8981\u5224\u65AD\u4F1A\u5458\u4EF7\u662F\u5426\u5C0F\u4E8E code \u7684\u4F18\u60E0\u91D1\u989D\uFF0C\u5982\u679C\u5C0F\u4E8E\u5219\u5F53\u505A\u6CA1\u6709\u4F1A\u5458\u4EF7\n const codeSaveAmountDecimal = new Decimal(variant.price.amount).minus(couponData.variant_price4wscode)\n if (salePriceWithoutCouponAmount > codeSaveAmountDecimal.toNumber()) {\n return false as false\n }\n }\n }\n\n const salePrice = {\n amount: salePriceAmount,\n priceWithCurrency: formatPrice({\n amount: salePriceAmount,\n currencyCode: currencyCode || 'USD',\n locale,\n }),\n }\n\n const savePriceAmount = new Decimal(originalPrice.amount).minus(salePrice.amount).toNumber()\n const savePrice = {\n amount: savePriceAmount,\n priceWithCurrency: formatPrice({\n amount: savePriceAmount,\n currencyCode: currencyCode || 'USD',\n locale,\n maximumFractionDigits: 2,\n }),\n }\n\n const savePriceWithoutCouponAmount = new Decimal(originalPrice.amount)\n .minus(salePriceWithoutCoupon.amount)\n .toNumber()\n const savePriceWithoutCoupon = {\n amount: savePriceWithoutCouponAmount,\n priceWithCurrency: formatPrice({\n amount: savePriceWithoutCouponAmount,\n currencyCode: currencyCode || 'USD',\n locale,\n maximumFractionDigits: 2,\n }),\n }\n\n const result: FunctionMemberPriceResult = {\n // \u662F\u5426\u5B58\u5728\u4F1A\u5458\u4EF7\n hasMemberPrice: !!memberPriceDiscountConfig,\n useCoupon,\n // \u539F\u4EF7\n originalPrice: originalPrice.amount,\n originalPriceWithCurrency: originalPrice.priceWithCurrency as string,\n // \u4F7F\u7528\u5238\u540E\u7684\u6298\u540E\u4EF7\n salePrice: salePrice.amount,\n salePriceWithCurrency: salePrice.priceWithCurrency as string,\n\n // \u4E0D\u4F7F\u7528\u5238\u7684\u6298\u540E\u4EF7\n salePriceWithoutCoupon: salePriceWithoutCoupon.amount,\n salePriceWithoutCouponWithCurrency: salePriceWithoutCoupon.priceWithCurrency as string,\n\n // \u5305\u542B\u4F7F\u7528\u5238\u7684\u8282\u7701\u91D1\u989D\n savePrice: savePrice.amount,\n savePriceWithCurrency: savePrice.priceWithCurrency as string,\n\n // \u4E0D\u4F7F\u7528\u5238\u7684\u8282\u7701\u91D1\u989D\n savePriceWithoutCoupon: savePriceWithoutCoupon.amount,\n savePriceWithoutCouponWithCurrency: savePriceWithoutCoupon.priceWithCurrency as string,\n }\n\n return result\n}\n"],
|
|
5
5
|
"mappings": "AAAA,OAAS,eAAAA,MAAmB,WAG5B,OAAS,6BAAAC,MAAiC,8BAC1C,OAAOC,MAAa,aACpB,OAAS,wCAAAC,MAA4C,yCACrD,OAAOC,MAAsB,qBAGtB,MAAMC,EAAyB,CAAC,CACrC,oBAAAC,EACA,aAAAC,EACA,QAAAC,EACA,OAAAC,CACF,IAKM,CACJ,MAAMC,EAAaN,EAAiB,CAAE,QAAAI,CAAQ,CAAC,EAGzC,CAAE,0BAAAG,EAA2B,wBAAAC,CAAwB,EAAIT,EAAqC,CAClG,OAAQG,EACR,QAAAE,CACF,CAAC,EAEKK,EAAY,CAAC,CAACD,GAAyB,sBAAsB,wBAEnE,GAAI,CAACD,EACH,MAAO,GAGT,MAAMG,EAAgB,CACpB,OAAQN,GAAS,MAAM,QAAU,EACjC,kBAAmBR,EAAY,CAC7B,OAAQQ,GAAS,MAAM,QAAU,EACjC,aAAcD,GAAgB,MAC9B,OAAAE,CACF,CAAC,CACH,EAEMM,EAA+BJ,EACjCV,EAA0B,CACxB,OAAQU,EACR,MAAOH,GAAS,MAAM,QAAU,CAClC,CAAC,EACDA,GAAS,MAAM,QAAU,EACvBQ,EAAyB,CAC7B,OAAQD,EACR,kBAAmBf,EAAY,CAC7B,OAAQe,EACR,aAAcR,GAAgB,MAC9B,OAAAE,CACF,CAAC,CACH,EAGA,IAAIQ,EAAkBF,EAGtB,GAAIL,GAAY,sBAAwBF,GAAWK,EACjD,GAAIA,EAAW,CAEb,MAAMK,EAAwB,IAAIhB,EAAQM,EAAQ,MAAM,MAAM,EAAE,MAAME,EAAW,oBAAoB,EACrGO,EAAkB,IAAIf,EAAQa,CAA4B,EAAE,MAAMG,CAAqB,EAAE,SAAS,CACpG,KAAO,CAEL,MAAMA,EAAwB,IAAIhB,EAAQM,EAAQ,MAAM,MAAM,EAAE,MAAME,EAAW,oBAAoB,EACrG,GAAIK,EAA+BG,EAAsB,SAAS,EAChE,MAAO,EAEX,CAGF,MAAMC,EAAY,CAChB,OAAQF,EACR,kBAAmBjB,EAAY,CAC7B,OAAQiB,EACR,aAAcV,GAAgB,MAC9B,OAAAE,CACF,CAAC,CACH,EAEMW,EAAkB,IAAIlB,EAAQY,EAAc,MAAM,EAAE,MAAMK,EAAU,MAAM,EAAE,SAAS,EACrFE,EAAY,CAChB,OAAQD,EACR,kBAAmBpB,EAAY,CAC7B,OAAQoB,EACR,aAAcb,GAAgB,MAC9B,OAAAE,EACA,sBAAuB,CACzB,CAAC,CACH,EAEMa,EAA+B,IAAIpB,EAAQY,EAAc,MAAM,EAClE,MAAME,EAAuB,MAAM,EACnC,SAAS,EACNO,EAAyB,CAC7B,OAAQD,EACR,kBAAmBtB,EAAY,CAC7B,OAAQsB,EACR,aAAcf,GAAgB,MAC9B,OAAAE,EACA,sBAAuB,CACzB,CAAC,CACH,EA0BA,MAxB0C,CAExC,eAAgB,CAAC,CAACE,EAClB,UAAAE,EAEA,cAAeC,EAAc,OAC7B,0BAA2BA,EAAc,kBAEzC,UAAWK,EAAU,OACrB,sBAAuBA,EAAU,kBAGjC,uBAAwBH,EAAuB,OAC/C,mCAAoCA,EAAuB,kBAG3D,UAAWK,EAAU,OACrB,sBAAuBA,EAAU,kBAGjC,uBAAwBE,EAAuB,OAC/C,mCAAoCA,EAAuB,iBAC7D,CAGF",
|
|
6
6
|
"names": ["formatPrice", "functionDiscountCalculate", "Decimal", "getFunctionMemberPriceDiscountConfig", "variantGetCoupon", "getFunctionMemberPrice", "memberPriceDiscount", "currencyCode", "variant", "locale", "couponData", "memberPriceDiscountConfig", "activeMemberPriceConfig", "useCoupon", "originalPrice", "salePriceWithoutCouponAmount", "salePriceWithoutCoupon", "salePriceAmount", "codeSaveAmountDecimal", "salePrice", "savePriceAmount", "savePrice", "savePriceWithoutCouponAmount", "savePriceWithoutCoupon"]
|
|
7
7
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { DiscountConfig, FunctionMemberPriceConfig } from '../memberPriceTypes';
|
|
2
|
-
import {
|
|
2
|
+
import { NormalizedProductVariant } from '@anker-in/shopify-react';
|
|
3
3
|
export declare const getFunctionMemberPriceDiscountConfig: ({ config, variant, }: {
|
|
4
4
|
config?: FunctionMemberPriceConfig[];
|
|
5
|
-
variant?:
|
|
5
|
+
variant?: NormalizedProductVariant;
|
|
6
6
|
}) => {
|
|
7
7
|
memberPriceDiscountConfig: DiscountConfig | undefined;
|
|
8
8
|
activeMemberPriceConfig: FunctionMemberPriceConfig | undefined;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{atobID as f}from"./atobID";const b=({config:e,variant:
|
|
1
|
+
import{atobID as f}from"./atobID";const b=({config:e,variant:o})=>{let i,r;if(!e||!o)return{memberPriceDiscountConfig:i,activeMemberPriceConfig:r};for(const t of e)if(i=t.result_detail.member_discounts?.find(n=>n.main_products.all_store_variant?n:n.main_products.variants.find(c=>String(c.variant_id)===f(o.id)))?.discount_conf,i){r=t;break}return i?{memberPriceDiscountConfig:i,activeMemberPriceConfig:r}:{memberPriceDiscountConfig:i,activeMemberPriceConfig:r}};export{b as getFunctionMemberPriceDiscountConfig};
|
|
2
2
|
//# sourceMappingURL=getFunctionMemberPriceDiscountConfig.js.map
|