@anker-in/headless-ui 1.1.87 → 1.1.88
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/biz-components/AccordionCards/index.d.ts +1 -1
- package/dist/cjs/biz-components/ActiveShelf/index.d.ts +1 -1
- package/dist/cjs/biz-components/ActivitySchedule/index.d.ts +1 -1
- package/dist/cjs/biz-components/AiuiProvider/index.d.ts +6 -0
- package/dist/cjs/biz-components/AiuiProvider/index.js +1 -1
- package/dist/cjs/biz-components/AiuiProvider/index.js.map +3 -3
- package/dist/cjs/biz-components/AnchorNavigation/index.d.ts +1 -1
- package/dist/cjs/biz-components/AplusDesc/index.d.ts +1 -1
- package/dist/cjs/biz-components/BrandCardLink/BrandCardLink.d.ts +1 -1
- package/dist/cjs/biz-components/BrandEquity/BrandEquity.d.ts +1 -1
- package/dist/cjs/biz-components/BrandEquity/BrandEquity.js +1 -1
- package/dist/cjs/biz-components/BrandEquity/BrandEquity.js.map +3 -3
- package/dist/cjs/biz-components/BrandEquity/types.d.ts +8 -0
- package/dist/cjs/biz-components/BrandEquity/types.js +1 -1
- package/dist/cjs/biz-components/BrandEquity/types.js.map +1 -1
- package/dist/cjs/biz-components/Category/index.d.ts +1 -1
- package/dist/cjs/biz-components/CreativeModule/index.d.ts +1 -1
- package/dist/cjs/biz-components/DownLoad/index.d.ts +1 -1
- package/dist/cjs/biz-components/Evaluate/index.d.ts +1 -1
- package/dist/cjs/biz-components/EventSchedule/index.d.ts +1 -1
- package/dist/cjs/biz-components/Faq/Faq.d.ts +1 -1
- package/dist/cjs/biz-components/Faq/Faq.js +1 -1
- package/dist/cjs/biz-components/Faq/Faq.js.map +2 -2
- package/dist/cjs/biz-components/Faq/types.d.ts +1 -0
- package/dist/cjs/biz-components/Faq/types.js +1 -1
- package/dist/cjs/biz-components/Faq/types.js.map +1 -1
- package/dist/cjs/biz-components/FeatureCards/FeatureCards.d.ts +1 -1
- package/dist/cjs/biz-components/FeatureShowcase/FeatureShowcase.d.ts +1 -1
- package/dist/cjs/biz-components/FeaturedBlogPosts/index.d.ts +1 -1
- package/dist/cjs/biz-components/Features/index.d.ts +1 -1
- package/dist/cjs/biz-components/FootCharger/index.d.ts +1 -1
- package/dist/cjs/biz-components/FooterNavigation/index.d.ts +1 -1
- package/dist/cjs/biz-components/GiftBox/index.d.ts +1 -1
- package/dist/cjs/biz-components/GiftShelf/index.d.ts +1 -1
- package/dist/cjs/biz-components/GiftTierShelf/index.d.ts +1 -1
- package/dist/cjs/biz-components/Graphic/index.d.ts +1 -1
- package/dist/cjs/biz-components/GraphicAttractionBlock/index.d.ts +1 -1
- package/dist/cjs/biz-components/GraphicMore/index.d.ts +1 -1
- package/dist/cjs/biz-components/GraphicOverlay/GraphicOverlay.d.ts +1 -1
- package/dist/cjs/biz-components/HeaderNavigation/index.d.ts +1 -1
- package/dist/cjs/biz-components/HeroBanner/HeroBanner.d.ts +21 -1
- package/dist/cjs/biz-components/HeroBanner/HeroBanner.js +1 -1
- package/dist/cjs/biz-components/HeroBanner/HeroBanner.js.map +3 -3
- package/dist/cjs/biz-components/HeroBanner/HeroBannerCarousel.d.ts +23 -0
- package/dist/cjs/biz-components/HeroBanner/HeroBannerCarousel.js +2 -0
- package/dist/cjs/biz-components/HeroBanner/HeroBannerCarousel.js.map +7 -0
- package/dist/cjs/biz-components/HeroBanner/index.d.ts +1 -0
- package/dist/cjs/biz-components/HeroBanner/index.js +1 -1
- package/dist/cjs/biz-components/HeroBanner/index.js.map +1 -1
- package/dist/cjs/biz-components/HeroBanner/types.d.ts +73 -0
- package/dist/cjs/biz-components/HeroBanner/types.js +1 -1
- package/dist/cjs/biz-components/HeroBanner/types.js.map +1 -1
- package/dist/cjs/biz-components/ImageOverlayShelf/index.d.ts +2 -2
- package/dist/cjs/biz-components/ImageOverlayShelf/index.js +1 -1
- package/dist/cjs/biz-components/ImageOverlayShelf/index.js.map +3 -3
- package/dist/cjs/biz-components/ImageTextFeature/ImageTextFeature.d.ts +1 -1
- package/dist/cjs/biz-components/ImageTextOverlay/index.d.ts +9 -0
- package/dist/cjs/biz-components/ImageTextOverlay/index.js +18 -0
- package/dist/cjs/biz-components/ImageTextOverlay/index.js.map +7 -0
- package/dist/cjs/biz-components/ImageTextOverlay/types.d.ts +58 -0
- package/dist/cjs/biz-components/ImageTextOverlay/types.js +2 -0
- package/dist/cjs/biz-components/ImageTextOverlay/types.js.map +7 -0
- package/dist/cjs/biz-components/ImageWithText/ImageWithText.d.ts +1 -1
- package/dist/cjs/biz-components/ImageWithText/ImageWithText.js +1 -1
- package/dist/cjs/biz-components/ImageWithText/ImageWithText.js.map +2 -2
- package/dist/cjs/biz-components/Ksp/index.d.ts +1 -1
- package/dist/cjs/biz-components/Listing/components/PaidShipping/index.d.ts +1 -1
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.d.ts +1 -1
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.d.ts +1 -1
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.d.ts +1 -1
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.d.ts +1 -1
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.d.ts +1 -1
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductOptions/index.d.ts +1 -1
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductGallery/index.d.ts +1 -1
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductPaidShipping/index.d.ts +1 -1
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductSummary/index.d.ts +1 -1
- package/dist/cjs/biz-components/Listing/components/PurchaseBar/index.d.ts +1 -1
- package/dist/cjs/biz-components/LotteryShared/BaseModal.js +1 -1
- package/dist/cjs/biz-components/LotteryShared/BaseModal.js.map +2 -2
- package/dist/cjs/biz-components/LotteryShared/ChanceMethods.js +1 -1
- package/dist/cjs/biz-components/LotteryShared/ChanceMethods.js.map +3 -3
- package/dist/cjs/biz-components/LotteryShared/ErrorModal.js +1 -1
- package/dist/cjs/biz-components/LotteryShared/ErrorModal.js.map +2 -2
- package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.d.ts +33 -0
- package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.js +1 -1
- package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.js.map +3 -3
- package/dist/cjs/biz-components/LotteryShared/PrizePool.js +1 -1
- package/dist/cjs/biz-components/LotteryShared/PrizePool.js.map +3 -3
- package/dist/cjs/biz-components/LotteryShared/WinnerModal.d.ts +1 -1
- package/dist/cjs/biz-components/LotteryShared/WinnerModal.js +1 -1
- package/dist/cjs/biz-components/LotteryShared/WinnerModal.js.map +3 -3
- package/dist/cjs/biz-components/LotteryShared/types.d.ts +101 -0
- package/dist/cjs/biz-components/LotteryShared/types.js +1 -1
- package/dist/cjs/biz-components/LotteryShared/types.js.map +2 -2
- package/dist/cjs/biz-components/Marquee/Marquee.d.ts +2 -1
- package/dist/cjs/biz-components/Marquee/Marquee.js +1 -1
- package/dist/cjs/biz-components/Marquee/Marquee.js.map +3 -3
- package/dist/cjs/biz-components/MarqueeReview/index.d.ts +1 -1
- package/dist/cjs/biz-components/Media/index.d.ts +15 -3
- package/dist/cjs/biz-components/Media/index.js +1 -1
- package/dist/cjs/biz-components/Media/index.js.map +3 -3
- package/dist/cjs/biz-components/MediaEndorsement/index.d.ts +1 -1
- package/dist/cjs/biz-components/MediaEndorsement/index.js +2 -2
- package/dist/cjs/biz-components/MediaEndorsement/index.js.map +3 -3
- package/dist/cjs/biz-components/MediaPlayerBase/index.d.ts +1 -1
- package/dist/cjs/biz-components/MediaPlayerBase/index.js +1 -1
- package/dist/cjs/biz-components/MediaPlayerBase/index.js.map +3 -3
- package/dist/cjs/biz-components/MediaPlayerBase/types.d.ts +26 -0
- package/dist/cjs/biz-components/MediaPlayerBase/types.js +1 -1
- package/dist/cjs/biz-components/MediaPlayerBase/types.js.map +1 -1
- package/dist/cjs/biz-components/MediaPlayerMulti/index.d.ts +1 -1
- package/dist/cjs/biz-components/MediaPlayerSticky/index.d.ts +1 -1
- package/dist/cjs/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.d.ts +1 -1
- package/dist/cjs/biz-components/MediaSceneSwitcherV2/index.d.ts +1 -1
- package/dist/cjs/biz-components/MediaShelf/index.d.ts +1 -1
- package/dist/cjs/biz-components/MemberEquity/index.d.ts +1 -1
- package/dist/cjs/biz-components/MiniCart/index.js +1 -1
- package/dist/cjs/biz-components/MiniCart/index.js.map +2 -2
- package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +1 -1
- package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js +1 -1
- package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js.map +2 -2
- package/dist/cjs/biz-components/NavigationSearch/index.d.ts +1 -1
- package/dist/cjs/biz-components/ProductCompare/index.d.ts +1 -1
- package/dist/cjs/biz-components/ProductHero/ProductHero.d.ts +1 -1
- package/dist/cjs/biz-components/ProductLottery/MediaDrawArea.js +1 -1
- package/dist/cjs/biz-components/ProductLottery/MediaDrawArea.js.map +3 -3
- package/dist/cjs/biz-components/ProductLottery/index.d.ts +3 -2
- package/dist/cjs/biz-components/ProductLottery/index.js +1 -1
- package/dist/cjs/biz-components/ProductLottery/index.js.map +3 -3
- package/dist/cjs/biz-components/ProductLottery/types.d.ts +75 -89
- package/dist/cjs/biz-components/ProductLottery/types.js +1 -1
- package/dist/cjs/biz-components/ProductLottery/types.js.map +2 -2
- package/dist/cjs/biz-components/ProductNav/ProductNav.d.ts +1 -1
- package/dist/cjs/biz-components/PromotionalBar/index.d.ts +3 -2
- package/dist/cjs/biz-components/PromotionalBar/index.js +1 -1
- package/dist/cjs/biz-components/PromotionalBar/index.js.map +3 -3
- package/dist/cjs/biz-components/SceneShelfV2/index.d.ts +113 -0
- package/dist/cjs/biz-components/SceneShelfV2/index.js +2 -0
- package/dist/cjs/biz-components/SceneShelfV2/index.js.map +7 -0
- package/dist/cjs/biz-components/SceneShelfV3/ProductCard.d.ts +89 -0
- package/dist/cjs/biz-components/SceneShelfV3/ProductCard.js +2 -0
- package/dist/cjs/biz-components/SceneShelfV3/ProductCard.js.map +7 -0
- package/dist/cjs/biz-components/SceneShelfV3/index.d.ts +79 -0
- package/dist/cjs/biz-components/SceneShelfV3/index.js +2 -0
- package/dist/cjs/biz-components/SceneShelfV3/index.js.map +7 -0
- package/dist/cjs/biz-components/SceneShelfV3/types.d.ts +19 -0
- package/dist/cjs/biz-components/SceneShelfV3/types.js +2 -0
- package/dist/cjs/biz-components/SceneShelfV3/types.js.map +7 -0
- package/dist/cjs/biz-components/SecondaryBanner/SecondaryBannerCarousel.d.ts +21 -0
- package/dist/cjs/biz-components/SecondaryBanner/SecondaryBannerCarousel.js +2 -0
- package/dist/cjs/biz-components/SecondaryBanner/SecondaryBannerCarousel.js.map +7 -0
- package/dist/cjs/biz-components/SecondaryBanner/index.d.ts +65 -1
- package/dist/cjs/biz-components/SecondaryBanner/index.js +1 -1
- package/dist/cjs/biz-components/SecondaryBanner/index.js.map +3 -3
- package/dist/cjs/biz-components/SelectStore/index.d.ts +1 -1
- package/dist/cjs/biz-components/ShelfDisplay/index.d.ts +1 -1
- package/dist/cjs/biz-components/Slogan/index.d.ts +1 -1
- package/dist/cjs/biz-components/Spacer/index.d.ts +1 -1
- package/dist/cjs/biz-components/Specs/index.d.ts +1 -1
- package/dist/cjs/biz-components/SpecsComparison/SpecsComparison.d.ts +1 -1
- package/dist/cjs/biz-components/TabWithImage/TabWithImage.d.ts +1 -1
- package/dist/cjs/biz-components/Tabs/Tabs.d.ts +1 -1
- package/dist/cjs/biz-components/TabsGroup/index.d.ts +1 -1
- package/dist/cjs/biz-components/TabsWithMedia/TabsWithMedia.d.ts +1 -1
- package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.d.ts +1 -1
- package/dist/cjs/biz-components/Title/index.d.ts +1 -1
- package/dist/cjs/biz-components/Title/index.js +1 -1
- package/dist/cjs/biz-components/Title/index.js.map +3 -3
- package/dist/cjs/biz-components/Title/types.d.ts +53 -1
- package/dist/cjs/biz-components/Title/types.js +1 -1
- package/dist/cjs/biz-components/Title/types.js.map +1 -1
- package/dist/cjs/biz-components/VideoFeature/VideoFeature.d.ts +1 -1
- package/dist/cjs/biz-components/WheelLottery/BaseModal.js +1 -1
- package/dist/cjs/biz-components/WheelLottery/BaseModal.js.map +2 -2
- package/dist/cjs/biz-components/WheelLottery/ErrorModal.js +1 -1
- package/dist/cjs/biz-components/WheelLottery/ErrorModal.js.map +2 -2
- package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.js +1 -1
- package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.js.map +2 -2
- package/dist/cjs/biz-components/WheelLottery/WinnerModal.js +1 -1
- package/dist/cjs/biz-components/WheelLottery/WinnerModal.js.map +2 -2
- package/dist/cjs/biz-components/WheelLottery/index.d.ts +2 -1
- package/dist/cjs/biz-components/WheelLottery/index.js +1 -1
- package/dist/cjs/biz-components/WheelLottery/index.js.map +3 -3
- package/dist/cjs/biz-components/WheelLottery/types.d.ts +6 -0
- package/dist/cjs/biz-components/WheelLottery/types.js.map +2 -2
- package/dist/cjs/biz-components/WhyChoose/WhyChoose.d.ts +1 -1
- package/dist/cjs/biz-components/index.d.ts +7 -0
- package/dist/cjs/biz-components/index.js +1 -1
- package/dist/cjs/biz-components/index.js.map +3 -3
- package/dist/cjs/hooks/useExposure.d.ts +4 -3
- package/dist/cjs/hooks/useExposure.js +1 -1
- package/dist/cjs/hooks/useExposure.js.map +3 -3
- package/dist/cjs/hooks/useGridRowCount.d.ts +16 -0
- package/dist/cjs/hooks/useGridRowCount.js +2 -0
- package/dist/cjs/hooks/useGridRowCount.js.map +7 -0
- package/dist/cjs/hooks/useViewItemList.d.ts +21 -0
- package/dist/cjs/hooks/useViewItemList.js +2 -0
- package/dist/cjs/hooks/useViewItemList.js.map +7 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/shared/Styles.js +1 -1
- package/dist/cjs/shared/Styles.js.map +3 -3
- package/dist/cjs/shared/trackUrlRef.d.ts +9 -0
- package/dist/cjs/shared/trackUrlRef.js +1 -1
- package/dist/cjs/shared/trackUrlRef.js.map +3 -3
- package/dist/cjs/types/props.d.ts +18 -1
- package/dist/cjs/types/props.js +1 -1
- package/dist/cjs/types/props.js.map +1 -1
- package/dist/esm/biz-components/AccordionCards/index.d.ts +1 -1
- package/dist/esm/biz-components/ActiveShelf/index.d.ts +1 -1
- package/dist/esm/biz-components/ActivitySchedule/index.d.ts +1 -1
- package/dist/esm/biz-components/AiuiProvider/index.d.ts +6 -0
- package/dist/esm/biz-components/AiuiProvider/index.js +1 -1
- package/dist/esm/biz-components/AiuiProvider/index.js.map +3 -3
- package/dist/esm/biz-components/AnchorNavigation/index.d.ts +1 -1
- package/dist/esm/biz-components/AplusDesc/index.d.ts +1 -1
- package/dist/esm/biz-components/BrandCardLink/BrandCardLink.d.ts +1 -1
- package/dist/esm/biz-components/BrandEquity/BrandEquity.d.ts +1 -1
- package/dist/esm/biz-components/BrandEquity/BrandEquity.js +1 -1
- package/dist/esm/biz-components/BrandEquity/BrandEquity.js.map +3 -3
- package/dist/esm/biz-components/BrandEquity/types.d.ts +8 -0
- package/dist/esm/biz-components/Category/index.d.ts +1 -1
- package/dist/esm/biz-components/CreativeModule/index.d.ts +1 -1
- package/dist/esm/biz-components/DownLoad/index.d.ts +1 -1
- package/dist/esm/biz-components/Evaluate/index.d.ts +1 -1
- package/dist/esm/biz-components/EventSchedule/index.d.ts +1 -1
- package/dist/esm/biz-components/Faq/Faq.d.ts +1 -1
- package/dist/esm/biz-components/Faq/Faq.js +1 -1
- package/dist/esm/biz-components/Faq/Faq.js.map +2 -2
- package/dist/esm/biz-components/Faq/types.d.ts +1 -0
- package/dist/esm/biz-components/FeatureCards/FeatureCards.d.ts +1 -1
- package/dist/esm/biz-components/FeatureShowcase/FeatureShowcase.d.ts +1 -1
- package/dist/esm/biz-components/FeaturedBlogPosts/index.d.ts +1 -1
- package/dist/esm/biz-components/Features/index.d.ts +1 -1
- package/dist/esm/biz-components/FootCharger/index.d.ts +1 -1
- package/dist/esm/biz-components/FooterNavigation/index.d.ts +1 -1
- package/dist/esm/biz-components/GiftBox/index.d.ts +1 -1
- package/dist/esm/biz-components/GiftShelf/index.d.ts +1 -1
- package/dist/esm/biz-components/GiftTierShelf/index.d.ts +1 -1
- package/dist/esm/biz-components/Graphic/index.d.ts +1 -1
- package/dist/esm/biz-components/GraphicAttractionBlock/index.d.ts +1 -1
- package/dist/esm/biz-components/GraphicMore/index.d.ts +1 -1
- package/dist/esm/biz-components/GraphicOverlay/GraphicOverlay.d.ts +1 -1
- package/dist/esm/biz-components/HeaderNavigation/index.d.ts +1 -1
- package/dist/esm/biz-components/HeroBanner/HeroBanner.d.ts +21 -1
- package/dist/esm/biz-components/HeroBanner/HeroBanner.js +1 -1
- package/dist/esm/biz-components/HeroBanner/HeroBanner.js.map +3 -3
- package/dist/esm/biz-components/HeroBanner/HeroBannerCarousel.d.ts +23 -0
- package/dist/esm/biz-components/HeroBanner/HeroBannerCarousel.js +2 -0
- package/dist/esm/biz-components/HeroBanner/HeroBannerCarousel.js.map +7 -0
- package/dist/esm/biz-components/HeroBanner/index.d.ts +1 -0
- package/dist/esm/biz-components/HeroBanner/index.js +1 -1
- package/dist/esm/biz-components/HeroBanner/index.js.map +1 -1
- package/dist/esm/biz-components/HeroBanner/types.d.ts +73 -0
- package/dist/esm/biz-components/ImageOverlayShelf/index.d.ts +2 -2
- package/dist/esm/biz-components/ImageOverlayShelf/index.js +1 -1
- package/dist/esm/biz-components/ImageOverlayShelf/index.js.map +3 -3
- package/dist/esm/biz-components/ImageTextFeature/ImageTextFeature.d.ts +1 -1
- package/dist/esm/biz-components/ImageTextOverlay/index.d.ts +9 -0
- package/dist/esm/biz-components/ImageTextOverlay/index.js +18 -0
- package/dist/esm/biz-components/ImageTextOverlay/index.js.map +7 -0
- package/dist/esm/biz-components/ImageTextOverlay/types.d.ts +58 -0
- package/dist/esm/biz-components/ImageTextOverlay/types.js +1 -0
- package/dist/esm/biz-components/ImageTextOverlay/types.js.map +7 -0
- package/dist/esm/biz-components/ImageWithText/ImageWithText.d.ts +1 -1
- package/dist/esm/biz-components/ImageWithText/ImageWithText.js +1 -1
- package/dist/esm/biz-components/ImageWithText/ImageWithText.js.map +2 -2
- package/dist/esm/biz-components/Ksp/index.d.ts +1 -1
- package/dist/esm/biz-components/Listing/components/PaidShipping/index.d.ts +1 -1
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.d.ts +1 -1
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.d.ts +1 -1
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.d.ts +1 -1
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.d.ts +1 -1
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.d.ts +1 -1
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductOptions/index.d.ts +1 -1
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductGallery/index.d.ts +1 -1
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductPaidShipping/index.d.ts +1 -1
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductSummary/index.d.ts +1 -1
- package/dist/esm/biz-components/Listing/components/PurchaseBar/index.d.ts +1 -1
- package/dist/esm/biz-components/LotteryShared/BaseModal.js +1 -1
- package/dist/esm/biz-components/LotteryShared/BaseModal.js.map +2 -2
- package/dist/esm/biz-components/LotteryShared/ChanceMethods.js +1 -1
- package/dist/esm/biz-components/LotteryShared/ChanceMethods.js.map +3 -3
- package/dist/esm/biz-components/LotteryShared/ErrorModal.js +1 -1
- package/dist/esm/biz-components/LotteryShared/ErrorModal.js.map +2 -2
- package/dist/esm/biz-components/LotteryShared/MyRewardsModal.d.ts +33 -0
- package/dist/esm/biz-components/LotteryShared/MyRewardsModal.js +1 -1
- package/dist/esm/biz-components/LotteryShared/MyRewardsModal.js.map +3 -3
- package/dist/esm/biz-components/LotteryShared/PrizePool.js +1 -1
- package/dist/esm/biz-components/LotteryShared/PrizePool.js.map +3 -3
- package/dist/esm/biz-components/LotteryShared/WinnerModal.d.ts +1 -1
- package/dist/esm/biz-components/LotteryShared/WinnerModal.js +1 -1
- package/dist/esm/biz-components/LotteryShared/WinnerModal.js.map +3 -3
- package/dist/esm/biz-components/LotteryShared/types.d.ts +101 -0
- package/dist/esm/biz-components/LotteryShared/types.js +1 -1
- package/dist/esm/biz-components/LotteryShared/types.js.map +2 -2
- package/dist/esm/biz-components/Marquee/Marquee.d.ts +2 -1
- package/dist/esm/biz-components/Marquee/Marquee.js +1 -1
- package/dist/esm/biz-components/Marquee/Marquee.js.map +2 -2
- package/dist/esm/biz-components/MarqueeReview/index.d.ts +1 -1
- package/dist/esm/biz-components/Media/index.d.ts +15 -3
- package/dist/esm/biz-components/Media/index.js +1 -1
- package/dist/esm/biz-components/Media/index.js.map +3 -3
- package/dist/esm/biz-components/MediaEndorsement/index.d.ts +1 -1
- package/dist/esm/biz-components/MediaEndorsement/index.js +2 -2
- package/dist/esm/biz-components/MediaEndorsement/index.js.map +3 -3
- package/dist/esm/biz-components/MediaPlayerBase/index.d.ts +1 -1
- package/dist/esm/biz-components/MediaPlayerBase/index.js +1 -1
- package/dist/esm/biz-components/MediaPlayerBase/index.js.map +3 -3
- package/dist/esm/biz-components/MediaPlayerBase/types.d.ts +26 -0
- package/dist/esm/biz-components/MediaPlayerMulti/index.d.ts +1 -1
- package/dist/esm/biz-components/MediaPlayerSticky/index.d.ts +1 -1
- package/dist/esm/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.d.ts +1 -1
- package/dist/esm/biz-components/MediaSceneSwitcherV2/index.d.ts +1 -1
- package/dist/esm/biz-components/MediaShelf/index.d.ts +1 -1
- package/dist/esm/biz-components/MemberEquity/index.d.ts +1 -1
- package/dist/esm/biz-components/MiniCart/index.js +1 -1
- package/dist/esm/biz-components/MiniCart/index.js.map +2 -2
- package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +1 -1
- package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js +1 -1
- package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js.map +2 -2
- package/dist/esm/biz-components/NavigationSearch/index.d.ts +1 -1
- package/dist/esm/biz-components/ProductCompare/index.d.ts +1 -1
- package/dist/esm/biz-components/ProductHero/ProductHero.d.ts +1 -1
- package/dist/esm/biz-components/ProductLottery/MediaDrawArea.js +1 -1
- package/dist/esm/biz-components/ProductLottery/MediaDrawArea.js.map +3 -3
- package/dist/esm/biz-components/ProductLottery/index.d.ts +3 -2
- package/dist/esm/biz-components/ProductLottery/index.js +1 -1
- package/dist/esm/biz-components/ProductLottery/index.js.map +3 -3
- package/dist/esm/biz-components/ProductLottery/types.d.ts +75 -89
- package/dist/esm/biz-components/ProductLottery/types.js.map +2 -2
- package/dist/esm/biz-components/ProductNav/ProductNav.d.ts +1 -1
- package/dist/esm/biz-components/PromotionalBar/index.d.ts +3 -2
- package/dist/esm/biz-components/PromotionalBar/index.js +1 -1
- package/dist/esm/biz-components/PromotionalBar/index.js.map +3 -3
- package/dist/esm/biz-components/SceneShelfV2/index.d.ts +113 -0
- package/dist/esm/biz-components/SceneShelfV2/index.js +2 -0
- package/dist/esm/biz-components/SceneShelfV2/index.js.map +7 -0
- package/dist/esm/biz-components/SceneShelfV3/ProductCard.d.ts +89 -0
- package/dist/esm/biz-components/SceneShelfV3/ProductCard.js +2 -0
- package/dist/esm/biz-components/SceneShelfV3/ProductCard.js.map +7 -0
- package/dist/esm/biz-components/SceneShelfV3/index.d.ts +79 -0
- package/dist/esm/biz-components/SceneShelfV3/index.js +2 -0
- package/dist/esm/biz-components/SceneShelfV3/index.js.map +7 -0
- package/dist/esm/biz-components/SceneShelfV3/types.d.ts +19 -0
- package/dist/esm/biz-components/SceneShelfV3/types.js +1 -0
- package/dist/esm/biz-components/SceneShelfV3/types.js.map +7 -0
- package/dist/esm/biz-components/SecondaryBanner/SecondaryBannerCarousel.d.ts +21 -0
- package/dist/esm/biz-components/SecondaryBanner/SecondaryBannerCarousel.js +2 -0
- package/dist/esm/biz-components/SecondaryBanner/SecondaryBannerCarousel.js.map +7 -0
- package/dist/esm/biz-components/SecondaryBanner/index.d.ts +65 -1
- package/dist/esm/biz-components/SecondaryBanner/index.js +1 -1
- package/dist/esm/biz-components/SecondaryBanner/index.js.map +3 -3
- package/dist/esm/biz-components/SelectStore/index.d.ts +1 -1
- package/dist/esm/biz-components/ShelfDisplay/index.d.ts +1 -1
- package/dist/esm/biz-components/Slogan/index.d.ts +1 -1
- package/dist/esm/biz-components/Spacer/index.d.ts +1 -1
- package/dist/esm/biz-components/Specs/index.d.ts +1 -1
- package/dist/esm/biz-components/SpecsComparison/SpecsComparison.d.ts +1 -1
- package/dist/esm/biz-components/TabWithImage/TabWithImage.d.ts +1 -1
- package/dist/esm/biz-components/Tabs/Tabs.d.ts +1 -1
- package/dist/esm/biz-components/TabsGroup/index.d.ts +1 -1
- package/dist/esm/biz-components/TabsWithMedia/TabsWithMedia.d.ts +1 -1
- package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.d.ts +1 -1
- package/dist/esm/biz-components/Title/index.d.ts +1 -1
- package/dist/esm/biz-components/Title/index.js +1 -1
- package/dist/esm/biz-components/Title/index.js.map +3 -3
- package/dist/esm/biz-components/Title/types.d.ts +53 -1
- package/dist/esm/biz-components/VideoFeature/VideoFeature.d.ts +1 -1
- package/dist/esm/biz-components/WheelLottery/BaseModal.js +1 -1
- package/dist/esm/biz-components/WheelLottery/BaseModal.js.map +2 -2
- package/dist/esm/biz-components/WheelLottery/ErrorModal.js +1 -1
- package/dist/esm/biz-components/WheelLottery/ErrorModal.js.map +2 -2
- package/dist/esm/biz-components/WheelLottery/MyRewardsModal.js +1 -1
- package/dist/esm/biz-components/WheelLottery/MyRewardsModal.js.map +2 -2
- package/dist/esm/biz-components/WheelLottery/WinnerModal.js +1 -1
- package/dist/esm/biz-components/WheelLottery/WinnerModal.js.map +2 -2
- package/dist/esm/biz-components/WheelLottery/index.d.ts +2 -1
- package/dist/esm/biz-components/WheelLottery/index.js +1 -1
- package/dist/esm/biz-components/WheelLottery/index.js.map +3 -3
- package/dist/esm/biz-components/WheelLottery/types.d.ts +6 -0
- package/dist/esm/biz-components/WheelLottery/types.js.map +2 -2
- package/dist/esm/biz-components/WhyChoose/WhyChoose.d.ts +1 -1
- package/dist/esm/biz-components/index.d.ts +7 -0
- package/dist/esm/biz-components/index.js +1 -1
- package/dist/esm/biz-components/index.js.map +3 -3
- package/dist/esm/hooks/useExposure.d.ts +4 -3
- package/dist/esm/hooks/useExposure.js +1 -1
- package/dist/esm/hooks/useExposure.js.map +3 -3
- package/dist/esm/hooks/useGridRowCount.d.ts +16 -0
- package/dist/esm/hooks/useGridRowCount.js +2 -0
- package/dist/esm/hooks/useGridRowCount.js.map +7 -0
- package/dist/esm/hooks/useViewItemList.d.ts +21 -0
- package/dist/esm/hooks/useViewItemList.js +2 -0
- package/dist/esm/hooks/useViewItemList.js.map +7 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +3 -3
- package/dist/esm/shared/Styles.js +1 -1
- package/dist/esm/shared/Styles.js.map +3 -3
- package/dist/esm/shared/trackUrlRef.d.ts +9 -0
- package/dist/esm/shared/trackUrlRef.js +1 -1
- package/dist/esm/shared/trackUrlRef.js.map +3 -3
- package/dist/esm/types/props.d.ts +18 -1
- package/dist/tokens/anker.css +2 -2
- package/dist/tokens/eufy.css +2 -2
- package/dist/tokens/eufyMake.css +2 -2
- package/dist/tokens/soundcore.css +2 -2
- package/package.json +1 -1
- package/style.css +215 -26
- package/tailwind.config.js +14 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/biz-components/WheelLottery/index.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * WheelLottery - \u5927\u8F6C\u76D8\u62BD\u5956\u7EC4\u4EF6\n *\n * \u7528\u4E8E\u8425\u9500\u6D3B\u52A8\u7684\u4EA4\u4E92\u5F0F\u62BD\u5956\u8F6C\u76D8\uFF0C\u652F\u6301\u591A\u54C1\u724C\u4E3B\u9898\u548C\u54CD\u5E94\u5F0F\u5E03\u5C40\u3002\n *\n * @module WheelLottery\n * @date 2025-12-17\n */\n\n'use client'\n\nimport { useState, useCallback, useRef, useEffect, useImperativeHandle, forwardRef } from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { DEFAULT_WHEEL_CONFIG, DEFAULT_CHANCE_METHODS, INITIAL_WHEEL_STATE } from './types.js'\nimport { Grid, GridItem } from '../../components/grid.js'\nimport { Wheel } from './Wheel.js'\nimport { PrizePool } from '../LotteryShared/PrizePool.js'\nimport { ChanceMethods } from '../LotteryShared/ChanceMethods.js'\nimport { WinnerModal } from '../LotteryShared/WinnerModal.js'\nimport { RulesModal } from '../LotteryShared/RulesModal.js'\nimport { MyRewardsModal } from '../LotteryShared/MyRewardsModal.js'\nimport { ErrorModal } from '../LotteryShared/ErrorModal.js'\nimport { ShareModal } from '../LotteryShared/ShareModal.js'\nimport { withLayout } from '../../shared/Styles.js'\n\nimport type { WheelLotteryProps, WheelState, WheelLotteryHandle, WinnerModalConfig } from './types.js'\n\n// ============================================================================\n// \u4E3B\u7EC4\u4EF6\n// ============================================================================\n\n/**\n * WheelLottery \u7EC4\u4EF6\n *\n * @example\n * ```tsx\n * // \u57FA\u7840\u4F7F\u7528\n * <WheelLottery\n * prizes={prizes}\n * winningPrizeId=\"prize-003\"\n * onSpinEnd={(prize) => alert(`You won ${prize.name}`)}\n * />\n *\n * // \u4F7F\u7528 ref \u63A7\u5236\u5F39\u7A97\n * const lotteryRef = useRef<WheelLotteryHandle>(null)\n *\n * <WheelLottery ref={lotteryRef} prizes={prizes} />\n *\n * // \u5916\u90E8\u89E6\u53D1\u5F39\u7A97\n * lotteryRef.current?.showError({\n * title: 'Error',\n * message: 'Something went wrong'\n * })\n * ```\n */\nexport const WheelLottery = forwardRef<WheelLotteryHandle, WheelLotteryProps>(\n (\n {\n prizes,\n theme,\n winningPrizeId,\n spinDuration = DEFAULT_WHEEL_CONFIG.spinDuration,\n wheelBackgroundImage,\n pointerImage,\n chanceMethods = DEFAULT_CHANCE_METHODS,\n chanceTitle = DEFAULT_WHEEL_CONFIG.chanceTitle,\n chanceSubtitle,\n chanceFooterNote,\n chanceMethodsText,\n mechanismType,\n inputConfig,\n winningInfos = [],\n prizesTitle,\n onSpinStart,\n onSpinEnd,\n onSpinError,\n winnerModalConfig,\n rulesModalConfig = {},\n myRewardsModalConfig = {},\n errorModalConfig = {},\n shareModalConfig = {},\n userData,\n loginPromptText = 'Please log in to participate',\n loginButtonText = 'Log In',\n noChancesText = 'You have no chances left',\n onLoginRequired,\n onCopyCode,\n opportunitiesText = ['Number of draws remaining today:'],\n className,\n },\n ref\n ) => {\n const { rulesData, rulesText = 'Rules' } = rulesModalConfig\n const {\n rewardsData,\n myRewardsText = 'My Rewards',\n codeText = 'CODE:',\n copyText = 'COPY',\n copiedText = 'COPIED',\n prizeText = 'Prize time:',\n } = myRewardsModalConfig\n const completedText = chanceMethodsText?.completedText\n const usedText = chanceMethodsText?.usedText\n const isLoggedIn = userData?.isLoggedIn ?? false\n const availableChances = userData?.availableChances || 0\n const showLoginOverlay = !isLoggedIn\n const showNoChancesOverlay = isLoggedIn && availableChances <= 0\n // ==========================================================================\n // State \u7BA1\u7406\n // ==========================================================================\n\n const [wheelState, setWheelState] = useState<WheelState>(INITIAL_WHEEL_STATE)\n const [showWinnerModal, setShowWinnerModal] = useState(false)\n const [showRulesModal, setShowRulesModal] = useState(false)\n const [showRewardsModal, setShowRewardsModal] = useState(false)\n const [showErrorModal, setShowErrorModal] = useState(false)\n const [showNoWinModal, setShowNoWinModal] = useState(false)\n const [showShareModal, setShowShareModal] = useState(false)\n const [errorMessage, setErrorMessage] = useState('')\n const [errorTitle, setErrorTitle] = useState<string | undefined>()\n const [errorConfirmText, setErrorConfirmText] = useState<string | undefined>()\n const [noWinTitle, setNoWinTitle] = useState<string | undefined>()\n const [noWinMessage, setNoWinMessage] = useState<string | undefined>()\n const [noWinConfirmText, setNoWinConfirmText] = useState<string | undefined>()\n const [externalWinnerConfig, setExternalWinnerConfig] = useState<Partial<WinnerModalConfig> | undefined>()\n const animationRef = useRef<number | null>(null)\n\n // ==========================================================================\n // Imperative Handle - \u66B4\u9732\u65B9\u6CD5\u7ED9\u7236\u7EC4\u4EF6\n // ==========================================================================\n\n useImperativeHandle(\n ref,\n () => ({\n showError: ({ message, title, confirmText }) => {\n setErrorMessage(message)\n setErrorTitle(title)\n setErrorConfirmText(confirmText)\n setShowErrorModal(true)\n },\n hideError: () => {\n setShowErrorModal(false)\n },\n showNoWin: config => {\n setNoWinTitle(config?.title)\n setNoWinMessage(config?.message)\n setNoWinConfirmText(config?.confirmText)\n setShowNoWinModal(true)\n },\n hideNoWin: () => {\n setShowNoWinModal(false)\n },\n showWinner: (prize, config) => {\n setWheelState(prev => ({ ...prev, winningPrize: prize }))\n setExternalWinnerConfig(config)\n setShowWinnerModal(true)\n },\n hideWinner: () => {\n setShowWinnerModal(false)\n },\n showRules: () => {\n setShowRulesModal(true)\n },\n hideRules: () => {\n setShowRulesModal(false)\n },\n showRewards: () => {\n setShowRewardsModal(true)\n },\n hideRewards: () => {\n setShowRewardsModal(false)\n },\n showShare: () => {\n setShowShareModal(true)\n },\n hideShare: () => {\n setShowShareModal(false)\n },\n hideAllModals: () => {\n setShowWinnerModal(false)\n setShowRulesModal(false)\n setShowRewardsModal(false)\n setShowErrorModal(false)\n setShowNoWinModal(false)\n setShowShareModal(false)\n },\n }),\n []\n )\n\n // ==========================================================================\n // Props \u9A8C\u8BC1\uFF08\u5F00\u53D1\u73AF\u5883\uFF09\n // ==========================================================================\n\n useEffect(() => {\n if (process.env.NODE_ENV === 'development' && prizes) {\n if (prizes.length !== 8) {\n console.warn(\n `WheelLottery expects exactly 8 prizes, got ${prizes.length}. The component may not render correctly.`\n )\n }\n\n if (winningPrizeId && !prizes.find(p => p.prizeKey === winningPrizeId)) {\n console.warn(`WheelLottery: winningPrizeId \"${winningPrizeId}\" not found in prizes array.`)\n }\n }\n }, [prizes, winningPrizeId])\n\n // ==========================================================================\n // \u6E05\u7406\u52A8\u753B\n // ==========================================================================\n\n useEffect(() => {\n return () => {\n // \u7EC4\u4EF6\u5378\u8F7D\u65F6\u53D6\u6D88\u52A8\u753B\u5E27\n if (animationRef.current !== null) {\n cancelAnimationFrame(animationRef.current)\n }\n }\n }, [])\n\n // ==========================================================================\n // \u62BD\u5956\u903B\u8F91\n // ==========================================================================\n\n /**\n * \u5F00\u59CB\u62BD\u5956 - \u652F\u6301\u5F02\u6B65\u63A5\u53E3\u8C03\u7528\n * \u5229\u7528\u521D\u59CB\u6162\u901F\u65CB\u8F6C\uFF0C\u70B9\u51FB\u540E\u8FDB\u5165\u5FEB\u901F\u65CB\u8F6C\u72B6\u6001\uFF0C\u63A5\u53E3\u8FD4\u56DE\u540E\u51CF\u901F\u505C\u6B62\n */\n const handleSpinStart = useCallback(async () => {\n if (wheelState.isSpinning) return\n\n // \u68C0\u67E5\u7528\u6237\u662F\u5426\u5DF2\u767B\u5F55\n if (!userData?.isLoggedIn) {\n onLoginRequired?.()\n return\n }\n\n // \u2705 \u6B21\u6570\u4E3A 0 \u65F6\uFF0C\u6309\u94AE\u5DF2\u88AB\u7981\u7528\uFF0C\u8FD9\u91CC\u4E0D\u9700\u8981\u989D\u5916\u68C0\u67E5\n // \u9632\u5FA1\u6027\u7F16\u7A0B\uFF1A\u5982\u679C\u4ECD\u7136\u89E6\u53D1\uFF0C\u76F4\u63A5\u8FD4\u56DE\n if (userData.availableChances <= 0) {\n return\n }\n\n // \u8FDB\u5165\u5FEB\u901F\u65CB\u8F6C\u72B6\u6001\uFF08\u521D\u59CB\u6162\u901F\u65CB\u8F6C\u4F1A\u81EA\u52A8\u53D8\u4E3A\u5FEB\u901F\u65CB\u8F6C\uFF09\n setWheelState(prev => ({\n ...prev,\n isSpinning: true,\n isButtonDisabled: true,\n }))\n\n try {\n // \u8C03\u7528\u5916\u90E8\u63A5\u53E3\u83B7\u53D6\u4E2D\u5956\u7ED3\u679C\n let finalWinningPrizeId = winningPrizeId\n\n if (onSpinStart) {\n // \u7B49\u5F85\u63A5\u53E3\u8FD4\u56DE\u4E2D\u5956 ID\uFF08\u63A5\u53E3\u65F6\u95F4\u4E0D\u56FA\u5B9A\uFF0C1-30s\uFF09\n // \u5728\u6B64\u671F\u95F4\uFF0C\u8F6C\u76D8\u4F1A\u4FDD\u6301\u5FEB\u901F\u65CB\u8F6C\uFF08\u7531 CSS \u52A8\u753B\u63A7\u5236\uFF09\n finalWinningPrizeId = await onSpinStart()\n }\n\n // \u786E\u5B9A\u4E2D\u5956\u5956\u54C1\n const winningPrize = prizes.find(p => p.prizeKey === finalWinningPrizeId) || prizes[0]\n const winningIndex = prizes.findIndex(p => p.prizeKey === winningPrize.prizeKey)\n\n // \u8BA1\u7B97\u76EE\u6807\u89D2\u5EA6\n const degreesPerPrize = 360 / prizes.length\n const basePrizeAngle = winningIndex * degreesPerPrize\n // \u81F3\u5C11\u65CB\u8F6C 3 \u5708\uFF081080\u5EA6\uFF09+ \u76EE\u6807\u89D2\u5EA6\n const minRotations = 3\n const targetAngle = minRotations * 360 + (360 - basePrizeAngle)\n\n // \u63A5\u53E3\u8FD4\u56DE\u540E\uFF0C\u7B49\u5F85 1.5s \u518D\u5F00\u59CB\u505C\u6B62\u52A8\u753B\n await new Promise(resolve => setTimeout(resolve, 1500))\n\n // \u7ACB\u5373\u8FDB\u5165\u51CF\u901F\u72B6\u6001\uFF0C\u505C\u6B62 CSS \u5FAA\u73AF\u52A8\u753B\n setWheelState(prev => ({\n ...prev,\n isFinished: true,\n currentRotation: 0, // \u4ECE 0 \u5EA6\u5F00\u59CB\u51CF\u901F\u52A8\u753B\n }))\n\n // \u5F00\u59CB\u505C\u6B62\u65CB\u8F6C\u52A8\u753B\n const startTime = Date.now()\n\n const animate = () => {\n const now = Date.now()\n const elapsed = now - startTime\n const progress = Math.min(elapsed / spinDuration, 1)\n\n // \u5E94\u7528 ease-out \u7F13\u52A8\u51FD\u6570\n const eased = 1 - Math.pow(1 - progress, 3)\n\n // \u8BA1\u7B97\u5F53\u524D\u65CB\u8F6C\u89D2\u5EA6\n const currentRotation = targetAngle * eased\n\n // \u66F4\u65B0\u72B6\u6001\n setWheelState(prev => ({\n ...prev,\n currentRotation,\n }))\n\n // \u7EE7\u7EED\u52A8\u753B\u6216\u7ED3\u675F\n if (progress < 1) {\n animationRef.current = requestAnimationFrame(animate)\n } else {\n // \u52A8\u753B\u7ED3\u675F - \u4FDD\u6301\u6309\u94AE\u7981\u7528\u72B6\u6001,\u76F4\u5230\u5F39\u7A97\u5173\u95ED\n setWheelState(prev => ({\n ...prev,\n isSpinning: false,\n isButtonDisabled: true,\n winningPrize,\n currentRotation: targetAngle,\n }))\n\n // \u5EF6\u8FDF\u663E\u793A\u5F39\u7A97\uFF08500ms\u540E\uFF09\n if (onSpinEnd) {\n onSpinEnd?.(winningPrize)\n } else {\n setTimeout(() => {\n // \u68C0\u67E5\u662F\u5426\u672A\u4E2D\u5956\uFF08try-again\uFF09\n if (winningPrize.prizeKey === 'try-again') {\n // \u672A\u4E2D\u5956\uFF0C\u663E\u793A ErrorModal\n setShowNoWinModal(true)\n } else {\n // \u4E2D\u5956\uFF0C\u663E\u793A WinnerModal\n setShowWinnerModal(true)\n }\n }, 500)\n }\n }\n }\n\n // \u542F\u52A8\u505C\u6B62\u52A8\u753B\n animationRef.current = requestAnimationFrame(animate)\n } catch (error) {\n // \u63A5\u53E3\u62A5\u9519\uFF0C\u6062\u590D\u5230\u521D\u59CB\u6162\u901F\u65CB\u8F6C\u72B6\u6001\n setWheelState(prev => ({\n ...prev,\n isSpinning: false,\n isButtonDisabled: false,\n }))\n\n // \u663E\u793A\u9519\u8BEF\u5F39\u7A97\n setErrorMessage((error as Error).message || 'An error occurred')\n setShowErrorModal(true)\n\n // \u89E6\u53D1\u9519\u8BEF\u56DE\u8C03\n onSpinError?.(error as Error)\n\n console.error('\u62BD\u5956\u63A5\u53E3\u8C03\u7528\u5931\u8D25:', error)\n }\n }, [\n wheelState.isSpinning,\n prizes,\n winningPrizeId,\n spinDuration,\n onSpinStart,\n onSpinEnd,\n onSpinError,\n userData,\n onLoginRequired,\n ])\n\n const handleWheelGoClick = useCallback(() => {\n if (isLoggedIn) {\n void handleSpinStart()\n return\n }\n\n onLoginRequired?.()\n }, [handleSpinStart, isLoggedIn, onLoginRequired])\n\n // ==========================================================================\n // \u5F39\u7A97\u5173\u95ED\u5904\u7406\n // ==========================================================================\n\n /**\n * \u5173\u95ED\u4E2D\u5956\u5F39\u7A97\u5E76\u91CD\u7F6E\u8F6C\u76D8\u72B6\u6001\n */\n const handleCloseWinnerModal = useCallback(() => {\n setShowWinnerModal(false)\n // \u91CD\u7F6E\u8F6C\u76D8\u72B6\u6001,\u5141\u8BB8\u4E0B\u6B21\u62BD\u5956\n setWheelState(prev => ({\n ...prev,\n isButtonDisabled: false,\n isFinished: false, // \u91CD\u7F6E\u4E3A\u672A\u5B8C\u6210,\u6062\u590D\u521D\u59CB\u65CB\u8F6C\u52A8\u753B\n }))\n }, [])\n\n /**\n * \u5173\u95ED\u672A\u4E2D\u5956\u5F39\u7A97\u5E76\u91CD\u7F6E\u8F6C\u76D8\u72B6\u6001\n */\n const handleCloseNoWinModal = useCallback(() => {\n setShowNoWinModal(false)\n // \u91CD\u7F6E\u8F6C\u76D8\u72B6\u6001,\u5141\u8BB8\u4E0B\u6B21\u62BD\u5956\n setWheelState(prev => ({\n ...prev,\n isButtonDisabled: false,\n isFinished: false, // \u91CD\u7F6E\u4E3A\u672A\u5B8C\u6210,\u6062\u590D\u521D\u59CB\u65CB\u8F6C\u52A8\u753B\n }))\n }, [])\n\n // ==========================================================================\n // \u6E32\u67D3\n // ==========================================================================\n\n return (\n <div className={cn('wheel-lottery-container', 'w-full', theme === 'dark' ? 'aiui-dark' : '', className)}>\n {/* ARIA Live Region - \u5C4F\u5E55\u9605\u8BFB\u5668\u72B6\u6001\u64AD\u62A5 */}\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\n {wheelState.isSpinning && '\u62BD\u5956\u8FDB\u884C\u4E2D...'}\n {wheelState.winningPrize && !wheelState.isSpinning && `\u5DF2\u4E2D\u5956: ${wheelState.winningPrize.name}`}\n </div>\n\n {/* \u4E3B\u5185\u5BB9\u533A - \u54CD\u5E94\u5F0F\u4E24\u680F/\u5355\u680F\u5E03\u5C40 */}\n <Grid className={cn('wheel-lottery-main', 'tablet:mb-4 mb-3')}>\n {/* \u5DE6\u4FA7\uFF1A\u8F6C\u76D8\u533A\u57DF */}\n <GridItem\n span={7}\n className={cn(\n 'wheel-section',\n 'relative flex w-full flex-1 items-center justify-center overflow-hidden',\n 'rounded-box',\n // \u79FB\u52A8\u7AEF\uFF08<=1024px\uFF09\u4F7F\u7528min-h\uFF0C\u684C\u9762\u7AEF\u4F7F\u7528aspect ratio\n 'laptop:min-h-[288px] min-h-[240px]',\n 'lg-desktop:aspect-w-[964] lg-desktop:aspect-h-[480]',\n 'desktop:aspect-w-[759] desktop:aspect-h-[384]',\n 'laptop:aspect-w-[516] laptop:aspect-h-[288]',\n 'l-tablet:col-span-12',\n // \u79FB\u52A8\u7AEF\u5E95\u90E8\u95F4\u8DDD\n 'l-tablet:mb-3',\n theme === 'dark' ? 'bg-[#1E2024]' : 'bg-[#EAEAEC]'\n )}\n >\n <div\n className={cn(\n 'w-full px-[16px] pt-[16px]',\n 'lg-desktop:pb-[32px] lg-desktop:px-[32px]',\n 'desktop:pt-[24px] desktop:px-[24px]',\n 'laptop:pt-[16px] laptop:px-[16px]',\n 'tablet:px-[24px]',\n // \u79FB\u52A8\u7AEF(<=1024px)\u65F6\u4F7F\u7528\u7EDD\u5BF9\u5B9A\u4F4D\u8986\u76D6\u5728\u8F6C\u76D8\u80CC\u666F\u4E0A\n 'l-tablet:absolute l-tablet:top-0 l-tablet:inset-x-0 l-tablet:z-10'\n )}\n >\n {/* \u9876\u90E8\u4FE1\u606F\u680F\uFF1A\u5DE6\u4FA7\u673A\u4F1A\u8FDB\u5EA6\uFF0C\u53F3\u4FA7\u94FE\u63A5 */}\n <div className=\"relative z-10 mb-2 flex max-h-[24px] w-full flex-wrap items-center justify-between gap-3\">\n {/* \u5DE6\u4FA7\uFF1A\u673A\u4F1A\u5C55\u793A - \u4EC5\u767B\u5F55\u65F6\u663E\u793A */}\n <div>\n {isLoggedIn && (\n <p className=\"text-info-primary font-[700]\">\n {opportunitiesText?.[0]}\n <span className=\"ml-1 text-[#FF6B35]\">{availableChances}</span>\n {opportunitiesText?.[1] || ''}\n </p>\n )}\n </div>\n {/* \u53F3\u4FA7\uFF1ARules \u548C My Rewards \u6309\u94AE */}\n <div className=\"flex items-center gap-4\">\n {rulesData && (\n <button\n onClick={() => setShowRulesModal(true)}\n className=\"cursor-pointer touch-manipulation\"\n type=\"button\"\n >\n <span className=\"text-info-primary font-[700] underline\">{rulesText}</span>\n </button>\n )}\n {/* My Rewards \u6309\u94AE - \u4EC5\u767B\u5F55\u65F6\u663E\u793A */}\n {userData?.isLoggedIn && rewardsData && (\n <button\n onClick={() => setShowRewardsModal(true)}\n className=\"cursor-pointer touch-manipulation whitespace-nowrap\"\n type=\"button\"\n >\n <span className=\"text-info-primary font-[700] underline\">{myRewardsText}</span>\n </button>\n )}\n </div>\n </div>\n {/* \u8F6C\u76D8\u7EC4\u4EF6 */}\n <Wheel\n theme={theme}\n prizes={prizes}\n rotation={wheelState.currentRotation}\n isSpinning={wheelState.isSpinning}\n isFinished={wheelState.isFinished}\n isButtonDisabled={wheelState.isButtonDisabled || !isLoggedIn || showNoChancesOverlay}\n userData={userData}\n onGoClick={handleWheelGoClick}\n wheelBackgroundImage={wheelBackgroundImage}\n pointerImage={pointerImage}\n />\n\n {(showLoginOverlay || showNoChancesOverlay) && (\n <div\n className={cn(\n 'rounded-box absolute inset-0 z-20 flex items-center justify-center bg-black/60 backdrop-blur-sm',\n 'px-6 text-center'\n )}\n >\n <div className=\"flex flex-col items-center gap-4\">\n <p className=\"lg-desktop:text-[24px] text-[18px] font-semibold text-white\">\n {showLoginOverlay ? loginPromptText : noChancesText}\n </p>\n {showLoginOverlay && (\n <button\n type=\"button\"\n onClick={onLoginRequired}\n className={cn(\n 'rounded-full bg-white px-6 py-2 text-[14px] font-semibold text-[#1D1D1F]',\n 'transition-transform hover:scale-105 active:scale-95'\n )}\n >\n {loginButtonText}\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n </GridItem>\n\n {/* \u53F3\u4FA7\uFF1A\u83B7\u53D6\u673A\u4F1A\u533A\u57DF */}\n {chanceMethods.length > 0 && (\n <GridItem\n span={5}\n className={cn(\n 'info-section',\n 'rounded-box',\n 'relative flex flex-col overflow-hidden',\n 'lg-desktop:aspect-w-[684] lg-desktop:aspect-h-[480]',\n 'desktop:aspect-w-[536] desktop:aspect-h-[384]',\n 'laptop:aspect-w-[364] laptop:aspect-h-[288]',\n // \u79FB\u52A8\u7AEF\u4F7F\u7528min-h\u800C\u4E0D\u662Fmax-h\uFF0C\u786E\u4FDD\u5185\u5BB9\u5B8C\u6574\u663E\u793A\n 'l-tablet:min-h-[280px] laptop:max-h-[320px]',\n 'w-full',\n 'l-tablet:col-span-12',\n theme === 'dark' ? 'bg-[#1E2024]' : 'bg-[#EAEAEC]'\n )}\n >\n <ChanceMethods\n theme={theme}\n userData={userData}\n methods={chanceMethods}\n title={chanceTitle}\n subtitle={chanceSubtitle}\n footerNote={chanceFooterNote}\n onOpenShareModal={() => setShowShareModal(true)}\n chanceBadgeText={chanceMethodsText?.chanceBadgeText}\n completedText={completedText}\n usedText={usedText}\n loadingText={chanceMethodsText?.loadingText}\n mechanismType={mechanismType}\n inputConfig={inputConfig}\n />\n </GridItem>\n )}\n </Grid>\n\n {/* \u5E95\u90E8\u533A\u57DF\uFF1A\u5956\u54C1\u6C60(\u5305\u542B\u4E2D\u5956\u4EBA\u540D\u5355) */}\n <div\n className={cn(\n 'wheel-lottery-footer',\n 'rounded-box',\n 'flex flex-col overflow-hidden',\n theme === 'dark' ? 'bg-[#1E2024]' : 'bg-[#EAEAEC]'\n )}\n >\n {/* \u5956\u54C1\u6C60(\u5305\u542B\u4E2D\u5956\u4EBA\u540D\u5355\u81EA\u52A8\u6EDA\u52A8) */}\n <PrizePool theme={theme} prizes={prizes} title={prizesTitle} winningInfos={winningInfos} />\n </div>\n\n {/* \u4E2D\u5956\u5F39\u7A97 */}\n <WinnerModal\n isOpen={showWinnerModal}\n prize={wheelState.winningPrize}\n title={externalWinnerConfig?.title || winnerModalConfig?.title}\n prizeTitle={externalWinnerConfig?.prizeTitle || winnerModalConfig?.prizeTitle}\n prizeImage={externalWinnerConfig?.prizeImage || winnerModalConfig?.prizeImage}\n prizeDescription={externalWinnerConfig?.prizeDescription || winnerModalConfig?.prizeDescription}\n learnMoreUrl={externalWinnerConfig?.learnMoreUrl || winnerModalConfig?.learnMoreUrl}\n learnMoreText={externalWinnerConfig?.learnMoreText || winnerModalConfig?.learnMoreText}\n couponCode={externalWinnerConfig?.couponCode || winnerModalConfig?.couponCode}\n expiresAt={externalWinnerConfig?.expiresAt || winnerModalConfig?.expiresAt}\n couponDiscount={externalWinnerConfig?.couponDiscount || winnerModalConfig?.couponDiscount}\n couponUnit={externalWinnerConfig?.couponUnit || winnerModalConfig?.couponUnit}\n confirmText={externalWinnerConfig?.confirmText || winnerModalConfig?.confirmText}\n onClose={handleCloseWinnerModal}\n theme={theme}\n />\n\n {/* Rules \u5F39\u7A97 */}\n {rulesData && (\n <RulesModal\n title={rulesText}\n isOpen={showRulesModal}\n onClose={() => setShowRulesModal(false)}\n rules={rulesData}\n theme={theme}\n />\n )}\n\n {/* My Rewards \u5F39\u7A97 */}\n {rewardsData && (\n <MyRewardsModal\n isOpen={showRewardsModal}\n onClose={() => setShowRewardsModal(false)}\n rewards={rewardsData}\n onCopyCode={onCopyCode}\n codeText={codeText}\n copyText={copyText}\n copiedText={copiedText}\n prizeText={prizeText}\n theme={theme}\n title={myRewardsText}\n />\n )}\n\n {/* \u9519\u8BEF\u5F39\u7A97 */}\n <ErrorModal\n isOpen={showErrorModal}\n onClose={() => setShowErrorModal(false)}\n title={errorTitle || errorModalConfig?.title}\n message={errorMessage || errorModalConfig?.message}\n confirmText={errorConfirmText || errorModalConfig?.confirmText}\n theme={theme}\n />\n\n {/* \u672A\u4E2D\u5956\u5F39\u7A97 */}\n <ErrorModal\n isOpen={showNoWinModal}\n onClose={handleCloseNoWinModal}\n title={noWinTitle || errorModalConfig?.title}\n message={noWinMessage || errorModalConfig?.message}\n confirmText={noWinConfirmText || errorModalConfig?.confirmText}\n theme={theme}\n />\n\n {/* \u5206\u4EAB\u5F39\u7A97 */}\n <ShareModal\n isOpen={showShareModal}\n onClose={() => setShowShareModal(false)}\n title={shareModalConfig?.title}\n subtitle={shareModalConfig?.subtitle}\n note={shareModalConfig?.note}\n platforms={shareModalConfig?.platforms}\n onShareSuccess={shareModalConfig?.onShareSuccess}\n theme={theme}\n />\n </div>\n )\n }\n)\n\n// \u8BBE\u7F6E displayName \u7528\u4E8E\u8C03\u8BD5\nWheelLottery.displayName = 'WheelLottery'\n\n// ============================================================================\n// \u5BFC\u51FA\n// ============================================================================\n\nexport default withLayout(WheelLottery)\nexport { WinnerModal } from '../LotteryShared/WinnerModal.js'\nexport { RulesModal } from '../LotteryShared/RulesModal.js'\nexport { MyRewardsModal } from '../LotteryShared/MyRewardsModal.js'\nexport { ErrorModal } from '../LotteryShared/ErrorModal.js'\nexport { ShareModal } from '../LotteryShared/ShareModal.js'\nexport { BaseModal } from '../LotteryShared/BaseModal.js'\nexport type {\n WheelLotteryProps,\n WheelLotteryHandle,\n Prize,\n ChanceMethod,\n ChanceMethodStatus,\n WinningInfo,\n WheelProps,\n PrizePoolProps,\n ChanceMethodsProps,\n WinnerModalProps,\n WinnerModalConfig,\n UserData,\n ShareModalConfig,\n SocialPlatform,\n SharePlatformConfig,\n} from './types.js'\nexport type { RulesModalProps, RuleItem } from '../LotteryShared/RulesModal.js'\nexport type { MyRewardsModalProps, Reward, RewardStatus } from '../LotteryShared/MyRewardsModal.js'\nexport type { ErrorModalProps } from '../LotteryShared/ErrorModal.js'\nexport type { ShareModalProps } from '../LotteryShared/ShareModal.js'\nexport type { BaseModalProps } from '../LotteryShared/BaseModal.js'\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["jsx", "jsxs", "useState", "useCallback", "useRef", "useEffect", "useImperativeHandle", "forwardRef", "cn", "DEFAULT_WHEEL_CONFIG", "DEFAULT_CHANCE_METHODS", "INITIAL_WHEEL_STATE", "Grid", "GridItem", "Wheel", "PrizePool", "ChanceMethods", "WinnerModal", "RulesModal", "MyRewardsModal", "ErrorModal", "ShareModal", "withLayout", "WheelLottery", "prizes", "theme", "winningPrizeId", "spinDuration", "wheelBackgroundImage", "pointerImage", "chanceMethods", "chanceTitle", "chanceSubtitle", "chanceFooterNote", "chanceMethodsText", "mechanismType", "inputConfig", "winningInfos", "prizesTitle", "onSpinStart", "onSpinEnd", "onSpinError", "winnerModalConfig", "rulesModalConfig", "myRewardsModalConfig", "errorModalConfig", "shareModalConfig", "userData", "loginPromptText", "loginButtonText", "noChancesText", "onLoginRequired", "onCopyCode", "opportunitiesText", "className", "ref", "rulesData", "rulesText", "rewardsData", "myRewardsText", "codeText", "copyText", "copiedText", "prizeText", "completedText", "usedText", "isLoggedIn", "availableChances", "showLoginOverlay", "
|
|
4
|
+
"sourcesContent": ["/**\n * WheelLottery - \u5927\u8F6C\u76D8\u62BD\u5956\u7EC4\u4EF6\n *\n * \u7528\u4E8E\u8425\u9500\u6D3B\u52A8\u7684\u4EA4\u4E92\u5F0F\u62BD\u5956\u8F6C\u76D8\uFF0C\u652F\u6301\u591A\u54C1\u724C\u4E3B\u9898\u548C\u54CD\u5E94\u5F0F\u5E03\u5C40\u3002\n *\n * @module WheelLottery\n * @date 2025-12-17\n */\n\n'use client'\n\nimport { useState, useCallback, useRef, useEffect, useImperativeHandle, forwardRef } from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { DEFAULT_WHEEL_CONFIG, DEFAULT_CHANCE_METHODS, INITIAL_WHEEL_STATE } from './types.js'\nimport { Grid, GridItem } from '../../components/grid.js'\nimport { Wheel } from './Wheel.js'\nimport { PrizePool } from '../LotteryShared/PrizePool.js'\nimport { ChanceMethods } from '../LotteryShared/ChanceMethods.js'\nimport { WinnerModal } from '../LotteryShared/WinnerModal.js'\nimport { RulesModal } from '../LotteryShared/RulesModal.js'\nimport { MyRewardsModal } from '../LotteryShared/MyRewardsModal.js'\nimport { ErrorModal } from '../LotteryShared/ErrorModal.js'\nimport { ShareModal } from '../LotteryShared/ShareModal.js'\nimport { withLayout } from '../../shared/Styles.js'\n\nimport type { WheelLotteryProps, WheelState, WheelLotteryHandle, WinnerModalConfig } from './types.js'\n\n// ============================================================================\n// \u4E3B\u7EC4\u4EF6\n// ============================================================================\n\n/**\n * WheelLottery \u7EC4\u4EF6\n *\n * @example\n * ```tsx\n * // \u57FA\u7840\u4F7F\u7528\n * <WheelLottery\n * prizes={prizes}\n * winningPrizeId=\"prize-003\"\n * onSpinEnd={(prize) => alert(`You won ${prize.name}`)}\n * />\n *\n * // \u4F7F\u7528 ref \u63A7\u5236\u5F39\u7A97\n * const lotteryRef = useRef<WheelLotteryHandle>(null)\n *\n * <WheelLottery ref={lotteryRef} prizes={prizes} />\n *\n * // \u5916\u90E8\u89E6\u53D1\u5F39\u7A97\n * lotteryRef.current?.showError({\n * title: 'Error',\n * message: 'Something went wrong'\n * })\n * ```\n */\nexport const WheelLottery = forwardRef<WheelLotteryHandle, WheelLotteryProps>(\n (\n {\n prizes,\n theme,\n winningPrizeId,\n spinDuration = DEFAULT_WHEEL_CONFIG.spinDuration,\n wheelBackgroundImage,\n pointerImage,\n chanceMethods = DEFAULT_CHANCE_METHODS,\n chanceTitle = DEFAULT_WHEEL_CONFIG.chanceTitle,\n chanceSubtitle,\n chanceFooterNote,\n chanceMethodsText,\n mechanismType,\n inputConfig,\n winningInfos = [],\n winnerNameTemplate,\n prizesTitle,\n onSpinStart,\n onSpinEnd,\n onSpinError,\n winnerModalConfig,\n rulesModalConfig = {},\n myRewardsModalConfig = {},\n errorModalConfig = {},\n shareModalConfig = {},\n userData,\n loginPromptText = 'Please log in to participate',\n loginButtonText = 'Log In',\n noChancesText = 'You have no chances left',\n onLoginRequired,\n onCopyCode,\n opportunitiesText = ['Number of draws remaining today:'],\n className,\n },\n ref\n ) => {\n const { rulesData, rulesText = 'Rules' } = rulesModalConfig\n const {\n rewardsData,\n myRewardsText = 'My Rewards',\n codeText = 'CODE:',\n copyText = 'COPY',\n copiedText = 'COPIED',\n prizeText = 'Prize time:',\n emptyText,\n copyError,\n availableText,\n usedStatusText,\n expiredText,\n notFoundText,\n } = myRewardsModalConfig\n const completedText = chanceMethodsText?.completedText\n const usedText = chanceMethodsText?.usedText\n const isLoggedIn = userData?.isLoggedIn ?? false\n const availableChances = userData?.availableChances || 0\n const showLoginOverlay = false\n const isNoChancesState = isLoggedIn && availableChances <= 0\n // ==========================================================================\n // State \u7BA1\u7406\n // ==========================================================================\n\n const [wheelState, setWheelState] = useState<WheelState>(INITIAL_WHEEL_STATE)\n const [showWinnerModal, setShowWinnerModal] = useState(false)\n const [showRulesModal, setShowRulesModal] = useState(false)\n const [showRewardsModal, setShowRewardsModal] = useState(false)\n const [showErrorModal, setShowErrorModal] = useState(false)\n const [showNoWinModal, setShowNoWinModal] = useState(false)\n const [showShareModal, setShowShareModal] = useState(false)\n const [errorMessage, setErrorMessage] = useState('')\n const [errorTitle, setErrorTitle] = useState<string | undefined>()\n const [errorConfirmText, setErrorConfirmText] = useState<string | undefined>()\n const [noWinTitle, setNoWinTitle] = useState<string | undefined>()\n const [noWinMessage, setNoWinMessage] = useState<string | undefined>()\n const [noWinConfirmText, setNoWinConfirmText] = useState<string | undefined>()\n const [externalWinnerConfig, setExternalWinnerConfig] = useState<Partial<WinnerModalConfig> | undefined>()\n const animationRef = useRef<number | null>(null)\n\n // ==========================================================================\n // Imperative Handle - \u66B4\u9732\u65B9\u6CD5\u7ED9\u7236\u7EC4\u4EF6\n // ==========================================================================\n\n useImperativeHandle(\n ref,\n () => ({\n showError: ({ message, title, confirmText }) => {\n setErrorMessage(message)\n setErrorTitle(title)\n setErrorConfirmText(confirmText)\n setShowErrorModal(true)\n },\n hideError: () => {\n setShowErrorModal(false)\n },\n showNoWin: config => {\n setNoWinTitle(config?.title)\n setNoWinMessage(config?.message)\n setNoWinConfirmText(config?.confirmText)\n setShowNoWinModal(true)\n },\n hideNoWin: () => {\n setShowNoWinModal(false)\n },\n showWinner: (prize, config) => {\n setWheelState(prev => ({ ...prev, winningPrize: prize }))\n setExternalWinnerConfig(config)\n setShowWinnerModal(true)\n },\n hideWinner: () => {\n setShowWinnerModal(false)\n },\n showRules: () => {\n setShowRulesModal(true)\n },\n hideRules: () => {\n setShowRulesModal(false)\n },\n showRewards: () => {\n setShowRewardsModal(true)\n },\n hideRewards: () => {\n setShowRewardsModal(false)\n },\n showShare: () => {\n setShowShareModal(true)\n },\n hideShare: () => {\n setShowShareModal(false)\n },\n hideAllModals: () => {\n setShowWinnerModal(false)\n setShowRulesModal(false)\n setShowRewardsModal(false)\n setShowErrorModal(false)\n setShowNoWinModal(false)\n setShowShareModal(false)\n },\n }),\n []\n )\n\n // ==========================================================================\n // Props \u9A8C\u8BC1\uFF08\u5F00\u53D1\u73AF\u5883\uFF09\n // ==========================================================================\n\n useEffect(() => {\n if (process.env.NODE_ENV === 'development' && prizes) {\n if (prizes.length !== 8) {\n console.warn(\n `WheelLottery expects exactly 8 prizes, got ${prizes.length}. The component may not render correctly.`\n )\n }\n\n if (winningPrizeId && !prizes.find(p => p.prizeKey === winningPrizeId)) {\n console.warn(`WheelLottery: winningPrizeId \"${winningPrizeId}\" not found in prizes array.`)\n }\n }\n }, [prizes, winningPrizeId])\n\n // ==========================================================================\n // \u6E05\u7406\u52A8\u753B\n // ==========================================================================\n\n useEffect(() => {\n return () => {\n // \u7EC4\u4EF6\u5378\u8F7D\u65F6\u53D6\u6D88\u52A8\u753B\u5E27\n if (animationRef.current !== null) {\n cancelAnimationFrame(animationRef.current)\n }\n }\n }, [])\n\n // ==========================================================================\n // \u62BD\u5956\u903B\u8F91\n // ==========================================================================\n\n /**\n * \u5F00\u59CB\u62BD\u5956 - \u652F\u6301\u5F02\u6B65\u63A5\u53E3\u8C03\u7528\n * \u5229\u7528\u521D\u59CB\u6162\u901F\u65CB\u8F6C\uFF0C\u70B9\u51FB\u540E\u8FDB\u5165\u5FEB\u901F\u65CB\u8F6C\u72B6\u6001\uFF0C\u63A5\u53E3\u8FD4\u56DE\u540E\u51CF\u901F\u505C\u6B62\n */\n const handleSpinStart = useCallback(async () => {\n if (wheelState.isSpinning) return\n\n // \u68C0\u67E5\u7528\u6237\u662F\u5426\u5DF2\u767B\u5F55\n if (!userData?.isLoggedIn) {\n onLoginRequired?.()\n return\n }\n\n // \u2705 \u6B21\u6570\u4E3A 0 \u65F6\uFF0C\u6309\u94AE\u5DF2\u88AB\u7981\u7528\uFF0C\u8FD9\u91CC\u4E0D\u9700\u8981\u989D\u5916\u68C0\u67E5\n // \u9632\u5FA1\u6027\u7F16\u7A0B\uFF1A\u5982\u679C\u4ECD\u7136\u89E6\u53D1\uFF0C\u76F4\u63A5\u8FD4\u56DE\n if (userData.availableChances <= 0) {\n return\n }\n\n // \u8FDB\u5165\u5FEB\u901F\u65CB\u8F6C\u72B6\u6001\uFF08\u521D\u59CB\u6162\u901F\u65CB\u8F6C\u4F1A\u81EA\u52A8\u53D8\u4E3A\u5FEB\u901F\u65CB\u8F6C\uFF09\n setWheelState(prev => ({\n ...prev,\n isSpinning: true,\n isButtonDisabled: true,\n }))\n\n try {\n // \u8C03\u7528\u5916\u90E8\u63A5\u53E3\u83B7\u53D6\u4E2D\u5956\u7ED3\u679C\n let finalWinningPrizeId = winningPrizeId\n\n if (onSpinStart) {\n // \u7B49\u5F85\u63A5\u53E3\u8FD4\u56DE\u4E2D\u5956 ID\uFF08\u63A5\u53E3\u65F6\u95F4\u4E0D\u56FA\u5B9A\uFF0C1-30s\uFF09\n // \u5728\u6B64\u671F\u95F4\uFF0C\u8F6C\u76D8\u4F1A\u4FDD\u6301\u5FEB\u901F\u65CB\u8F6C\uFF08\u7531 CSS \u52A8\u753B\u63A7\u5236\uFF09\n finalWinningPrizeId = await onSpinStart()\n }\n\n // \u786E\u5B9A\u4E2D\u5956\u5956\u54C1\n const winningPrize = prizes.find(p => p.prizeKey === finalWinningPrizeId) || prizes[0]\n const winningIndex = prizes.findIndex(p => p.prizeKey === winningPrize.prizeKey)\n\n // \u8BA1\u7B97\u76EE\u6807\u89D2\u5EA6\n const degreesPerPrize = 360 / prizes.length\n const basePrizeAngle = winningIndex * degreesPerPrize\n // \u81F3\u5C11\u65CB\u8F6C 3 \u5708\uFF081080\u5EA6\uFF09+ \u76EE\u6807\u89D2\u5EA6\n const minRotations = 3\n const targetAngle = minRotations * 360 + (360 - basePrizeAngle)\n\n // \u63A5\u53E3\u8FD4\u56DE\u540E\uFF0C\u7B49\u5F85 1.5s \u518D\u5F00\u59CB\u505C\u6B62\u52A8\u753B\n await new Promise(resolve => setTimeout(resolve, 1500))\n\n // \u7ACB\u5373\u8FDB\u5165\u51CF\u901F\u72B6\u6001\uFF0C\u505C\u6B62 CSS \u5FAA\u73AF\u52A8\u753B\n setWheelState(prev => ({\n ...prev,\n isFinished: true,\n currentRotation: 0, // \u4ECE 0 \u5EA6\u5F00\u59CB\u51CF\u901F\u52A8\u753B\n }))\n\n // \u5F00\u59CB\u505C\u6B62\u65CB\u8F6C\u52A8\u753B\n const startTime = Date.now()\n\n const animate = () => {\n const now = Date.now()\n const elapsed = now - startTime\n const progress = Math.min(elapsed / spinDuration, 1)\n\n // \u5E94\u7528 ease-out \u7F13\u52A8\u51FD\u6570\n const eased = 1 - Math.pow(1 - progress, 3)\n\n // \u8BA1\u7B97\u5F53\u524D\u65CB\u8F6C\u89D2\u5EA6\n const currentRotation = targetAngle * eased\n\n // \u66F4\u65B0\u72B6\u6001\n setWheelState(prev => ({\n ...prev,\n currentRotation,\n }))\n\n // \u7EE7\u7EED\u52A8\u753B\u6216\u7ED3\u675F\n if (progress < 1) {\n animationRef.current = requestAnimationFrame(animate)\n } else {\n // \u52A8\u753B\u7ED3\u675F - \u4FDD\u6301\u6309\u94AE\u7981\u7528\u72B6\u6001,\u76F4\u5230\u5F39\u7A97\u5173\u95ED\n setWheelState(prev => ({\n ...prev,\n isSpinning: false,\n isButtonDisabled: true,\n winningPrize,\n currentRotation: targetAngle,\n }))\n\n // \u5EF6\u8FDF\u663E\u793A\u5F39\u7A97\uFF08500ms\u540E\uFF09\n if (onSpinEnd) {\n onSpinEnd?.(winningPrize)\n } else {\n setTimeout(() => {\n // \u68C0\u67E5\u662F\u5426\u672A\u4E2D\u5956\uFF08try-again\uFF09\n if (winningPrize.prizeKey === 'try-again') {\n // \u672A\u4E2D\u5956\uFF0C\u663E\u793A ErrorModal\n setShowNoWinModal(true)\n } else {\n // \u4E2D\u5956\uFF0C\u663E\u793A WinnerModal\n setShowWinnerModal(true)\n }\n }, 500)\n }\n }\n }\n\n // \u542F\u52A8\u505C\u6B62\u52A8\u753B\n animationRef.current = requestAnimationFrame(animate)\n } catch (error) {\n // \u63A5\u53E3\u62A5\u9519\uFF0C\u6062\u590D\u5230\u521D\u59CB\u6162\u901F\u65CB\u8F6C\u72B6\u6001\n setWheelState(prev => ({\n ...prev,\n isSpinning: false,\n isButtonDisabled: false,\n }))\n\n // \u663E\u793A\u9519\u8BEF\u5F39\u7A97\n setErrorMessage((error as Error).message || 'An error occurred')\n setShowErrorModal(true)\n\n // \u89E6\u53D1\u9519\u8BEF\u56DE\u8C03\n onSpinError?.(error as Error)\n\n console.error('\u62BD\u5956\u63A5\u53E3\u8C03\u7528\u5931\u8D25:', error)\n }\n }, [\n wheelState.isSpinning,\n prizes,\n winningPrizeId,\n spinDuration,\n onSpinStart,\n onSpinEnd,\n onSpinError,\n userData,\n onLoginRequired,\n ])\n\n const handleWheelGoClick = useCallback(() => {\n if (isLoggedIn) {\n void handleSpinStart()\n return\n }\n\n onLoginRequired?.()\n }, [handleSpinStart, isLoggedIn, onLoginRequired])\n\n // ==========================================================================\n // \u5F39\u7A97\u5173\u95ED\u5904\u7406\n // ==========================================================================\n\n /**\n * \u5173\u95ED\u4E2D\u5956\u5F39\u7A97\u5E76\u91CD\u7F6E\u8F6C\u76D8\u72B6\u6001\n */\n const handleCloseWinnerModal = useCallback(() => {\n setShowWinnerModal(false)\n // \u91CD\u7F6E\u8F6C\u76D8\u72B6\u6001,\u5141\u8BB8\u4E0B\u6B21\u62BD\u5956\n setWheelState(prev => ({\n ...prev,\n isButtonDisabled: false,\n isFinished: false, // \u91CD\u7F6E\u4E3A\u672A\u5B8C\u6210,\u6062\u590D\u521D\u59CB\u65CB\u8F6C\u52A8\u753B\n }))\n }, [])\n\n /**\n * \u5173\u95ED\u672A\u4E2D\u5956\u5F39\u7A97\u5E76\u91CD\u7F6E\u8F6C\u76D8\u72B6\u6001\n */\n const handleCloseNoWinModal = useCallback(() => {\n setShowNoWinModal(false)\n // \u91CD\u7F6E\u8F6C\u76D8\u72B6\u6001,\u5141\u8BB8\u4E0B\u6B21\u62BD\u5956\n setWheelState(prev => ({\n ...prev,\n isButtonDisabled: false,\n isFinished: false, // \u91CD\u7F6E\u4E3A\u672A\u5B8C\u6210,\u6062\u590D\u521D\u59CB\u65CB\u8F6C\u52A8\u753B\n }))\n }, [])\n\n // ==========================================================================\n // \u6E32\u67D3\n // ==========================================================================\n\n return (\n <div className={cn('wheel-lottery-container', 'w-full', theme === 'dark' ? 'aiui-dark' : '', className)}>\n {/* ARIA Live Region - \u5C4F\u5E55\u9605\u8BFB\u5668\u72B6\u6001\u64AD\u62A5 */}\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\n {wheelState.isSpinning && '\u62BD\u5956\u8FDB\u884C\u4E2D...'}\n {wheelState.winningPrize && !wheelState.isSpinning && `\u5DF2\u4E2D\u5956: ${wheelState.winningPrize.name}`}\n </div>\n\n {/* \u4E3B\u5185\u5BB9\u533A - \u54CD\u5E94\u5F0F\u4E24\u680F/\u5355\u680F\u5E03\u5C40 */}\n <Grid className={cn('wheel-lottery-main', 'tablet:mb-4 mb-3')}>\n {/* \u5DE6\u4FA7\uFF1A\u8F6C\u76D8\u533A\u57DF */}\n <GridItem\n span={7}\n className={cn(\n 'wheel-section',\n 'relative flex w-full flex-1 items-center justify-center overflow-hidden',\n 'rounded-box',\n // \u79FB\u52A8\u7AEF\uFF08<=1024px\uFF09\u4F7F\u7528min-h\uFF0C\u684C\u9762\u7AEF\u4F7F\u7528aspect ratio\n 'laptop:min-h-[288px] min-h-[240px]',\n 'lg-desktop:aspect-w-[964] lg-desktop:aspect-h-[480]',\n 'desktop:aspect-w-[759] desktop:aspect-h-[384]',\n 'laptop:aspect-w-[516] laptop:aspect-h-[288]',\n 'l-tablet:col-span-12',\n // \u79FB\u52A8\u7AEF\u5E95\u90E8\u95F4\u8DDD\n 'l-tablet:mb-3',\n theme === 'dark' ? 'bg-[#1E2024]' : 'bg-[#EAEAEC]'\n )}\n >\n <div\n className={cn(\n 'w-full px-[16px] pt-[16px]',\n 'lg-desktop:pb-[32px] lg-desktop:px-[32px]',\n 'desktop:pt-[24px] desktop:px-[24px]',\n 'laptop:pt-[16px] laptop:px-[16px]',\n 'tablet:px-[24px]',\n // \u79FB\u52A8\u7AEF(<=1024px)\u65F6\u4F7F\u7528\u7EDD\u5BF9\u5B9A\u4F4D\u8986\u76D6\u5728\u8F6C\u76D8\u80CC\u666F\u4E0A\n 'l-tablet:absolute l-tablet:top-0 l-tablet:inset-x-0 l-tablet:z-10'\n )}\n >\n {/* \u9876\u90E8\u4FE1\u606F\u680F\uFF1A\u5DE6\u4FA7\u673A\u4F1A\u8FDB\u5EA6\uFF0C\u53F3\u4FA7\u94FE\u63A5 */}\n <div className=\"tablet:max-h-[24px] relative z-10 mb-2 flex max-h-[40px] w-full flex-wrap items-center justify-between gap-3\">\n {/* \u5DE6\u4FA7\uFF1A\u673A\u4F1A\u5C55\u793A - \u4EC5\u767B\u5F55\u65F6\u663E\u793A */}\n <div>\n {isLoggedIn && (\n <p className=\"text-info-primary font-[700]\">\n {opportunitiesText?.[0]}\n <span className=\"ml-1 text-[#FF6B35]\">{availableChances}</span>\n {opportunitiesText?.[1] || ''}\n </p>\n )}\n </div>\n {/* \u53F3\u4FA7\uFF1ARules \u548C My Rewards \u6309\u94AE */}\n <div className=\"flex items-center gap-4\">\n {rulesData && rulesData.length > 0 && (\n <button\n onClick={() => setShowRulesModal(true)}\n className=\"cursor-pointer touch-manipulation\"\n type=\"button\"\n >\n <span className=\"text-info-primary font-[700] underline\">{rulesText}</span>\n </button>\n )}\n {/* My Rewards \u6309\u94AE - \u4EC5\u767B\u5F55\u65F6\u663E\u793A */}\n {userData?.isLoggedIn && rewardsData && (\n <button\n onClick={() => setShowRewardsModal(true)}\n className=\"cursor-pointer touch-manipulation whitespace-nowrap\"\n type=\"button\"\n >\n <span className=\"text-info-primary font-[700] underline\">{myRewardsText}</span>\n </button>\n )}\n </div>\n </div>\n {/* \u8F6C\u76D8\u7EC4\u4EF6 */}\n <Wheel\n theme={theme}\n prizes={prizes}\n rotation={wheelState.currentRotation}\n isSpinning={wheelState.isSpinning}\n isFinished={wheelState.isFinished}\n isButtonDisabled={wheelState.isButtonDisabled || !isLoggedIn || isNoChancesState}\n userData={userData}\n onGoClick={handleWheelGoClick}\n wheelBackgroundImage={wheelBackgroundImage}\n pointerImage={pointerImage}\n />\n\n {showLoginOverlay && (\n <div\n className={cn(\n 'rounded-box absolute inset-0 z-20 flex items-center justify-center bg-black/60 backdrop-blur-sm',\n 'px-6 text-center'\n )}\n >\n <div className=\"flex flex-col items-center gap-4\">\n <p className=\"lg-desktop:text-[24px] text-[18px] font-semibold text-white\">{loginPromptText}</p>\n {showLoginOverlay && (\n <button\n type=\"button\"\n onClick={onLoginRequired}\n className={cn(\n 'rounded-full bg-white px-6 py-2 text-[14px] font-semibold text-[#1D1D1F]',\n 'transition-transform hover:scale-105 active:scale-95'\n )}\n >\n {loginButtonText}\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n </GridItem>\n\n {/* \u53F3\u4FA7\uFF1A\u83B7\u53D6\u673A\u4F1A\u533A\u57DF */}\n {chanceMethods.length > 0 && (\n <GridItem\n span={5}\n className={cn(\n 'info-section',\n 'rounded-box',\n 'relative flex flex-col overflow-hidden',\n 'lg-desktop:aspect-w-[684] lg-desktop:aspect-h-[480]',\n 'desktop:aspect-w-[536] desktop:aspect-h-[384]',\n 'laptop:aspect-w-[364] laptop:aspect-h-[288]',\n // \u79FB\u52A8\u7AEF\u4F7F\u7528min-h\u800C\u4E0D\u662Fmax-h\uFF0C\u786E\u4FDD\u5185\u5BB9\u5B8C\u6574\u663E\u793A\n 'l-tablet:min-h-[280px] laptop:max-h-[320px]',\n 'w-full',\n 'l-tablet:col-span-12',\n theme === 'dark' ? 'bg-[#1E2024]' : 'bg-[#EAEAEC]'\n )}\n >\n <ChanceMethods\n theme={theme}\n userData={userData}\n methods={chanceMethods}\n title={chanceTitle}\n subtitle={chanceSubtitle}\n footerNote={chanceFooterNote}\n onOpenShareModal={() => setShowShareModal(true)}\n chanceBadgeText={chanceMethodsText?.chanceBadgeText}\n completedText={completedText}\n usedText={usedText}\n loadingText={chanceMethodsText?.loadingText}\n mechanismType={mechanismType}\n inputConfig={inputConfig}\n />\n </GridItem>\n )}\n </Grid>\n\n {/* \u5E95\u90E8\u533A\u57DF\uFF1A\u5956\u54C1\u6C60(\u5305\u542B\u4E2D\u5956\u4EBA\u540D\u5355) */}\n <div\n className={cn(\n 'wheel-lottery-footer',\n 'rounded-box',\n 'flex flex-col overflow-hidden',\n theme === 'dark' ? 'bg-[#1E2024]' : 'bg-[#EAEAEC]'\n )}\n >\n {/* \u5956\u54C1\u6C60(\u5305\u542B\u4E2D\u5956\u4EBA\u540D\u5355\u81EA\u52A8\u6EDA\u52A8) */}\n <PrizePool\n theme={theme}\n prizes={prizes}\n title={prizesTitle}\n winningInfos={winningInfos}\n winnerNameTemplate={winnerNameTemplate}\n />\n </div>\n\n {/* \u4E2D\u5956\u5F39\u7A97 */}\n <WinnerModal\n isOpen={showWinnerModal}\n prize={wheelState.winningPrize}\n title={externalWinnerConfig?.title || winnerModalConfig?.title}\n prizeTitle={externalWinnerConfig?.prizeTitle || winnerModalConfig?.prizeTitle}\n prizeImage={externalWinnerConfig?.prizeImage || winnerModalConfig?.prizeImage}\n prizeDescription={externalWinnerConfig?.prizeDescription || winnerModalConfig?.prizeDescription}\n winnerNote={\n externalWinnerConfig?.winnerNote ??\n wheelState.winningPrize?.winnerModalConfig?.winnerNote ??\n winnerModalConfig?.winnerNote\n }\n learnMoreUrl={\n externalWinnerConfig?.learnMoreUrl ||\n wheelState.winningPrize?.winnerModalConfig?.learnMoreUrl ||\n winnerModalConfig?.learnMoreUrl\n }\n learnMoreText={\n externalWinnerConfig?.learnMoreText ||\n wheelState.winningPrize?.winnerModalConfig?.learnMoreText ||\n winnerModalConfig?.learnMoreText\n }\n couponCode={externalWinnerConfig?.couponCode || winnerModalConfig?.couponCode}\n expiresAt={externalWinnerConfig?.expiresAt || winnerModalConfig?.expiresAt}\n couponDiscount={externalWinnerConfig?.couponDiscount || winnerModalConfig?.couponDiscount}\n couponUnit={externalWinnerConfig?.couponUnit || winnerModalConfig?.couponUnit}\n confirmText={\n externalWinnerConfig?.confirmText ||\n wheelState.winningPrize?.winnerModalConfig?.confirmText ||\n winnerModalConfig?.confirmText\n }\n confirmUrl={\n externalWinnerConfig?.confirmUrl ||\n wheelState.winningPrize?.winnerModalConfig?.confirmUrl ||\n winnerModalConfig?.confirmUrl\n }\n copyText={externalWinnerConfig?.copyText || winnerModalConfig?.copyText || copyText}\n copiedText={externalWinnerConfig?.copiedText || winnerModalConfig?.copiedText || copiedText}\n onClose={handleCloseWinnerModal}\n theme={theme}\n />\n\n {/* Rules \u5F39\u7A97 */}\n {rulesData && rulesData.length > 0 && (\n <RulesModal\n title={rulesText}\n isOpen={showRulesModal}\n onClose={() => setShowRulesModal(false)}\n rules={rulesData}\n theme={theme}\n />\n )}\n\n {/* My Rewards \u5F39\u7A97 */}\n {rewardsData && (\n <MyRewardsModal\n isOpen={showRewardsModal}\n onClose={() => setShowRewardsModal(false)}\n rewards={rewardsData}\n onCopyCode={onCopyCode}\n codeText={codeText}\n copyText={copyText}\n copiedText={copiedText}\n prizeText={prizeText}\n emptyText={emptyText}\n copyError={copyError}\n availableText={availableText}\n usedStatusText={usedStatusText}\n expiredText={expiredText}\n notFoundText={notFoundText}\n theme={theme}\n title={myRewardsText}\n />\n )}\n\n {/* \u9519\u8BEF\u5F39\u7A97 */}\n <ErrorModal\n isOpen={showErrorModal}\n onClose={() => setShowErrorModal(false)}\n title={errorTitle || errorModalConfig?.title}\n message={errorMessage || errorModalConfig?.message}\n confirmText={errorConfirmText || errorModalConfig?.confirmText}\n theme={theme}\n />\n\n {/* \u672A\u4E2D\u5956\u5F39\u7A97 */}\n <ErrorModal\n isOpen={showNoWinModal}\n onClose={handleCloseNoWinModal}\n title={noWinTitle || errorModalConfig?.title}\n message={noWinMessage || errorModalConfig?.message}\n confirmText={noWinConfirmText || errorModalConfig?.confirmText}\n theme={theme}\n />\n\n {/* \u5206\u4EAB\u5F39\u7A97 */}\n <ShareModal\n isOpen={showShareModal}\n onClose={() => setShowShareModal(false)}\n title={shareModalConfig?.title}\n subtitle={shareModalConfig?.subtitle}\n note={shareModalConfig?.note}\n platforms={shareModalConfig?.platforms}\n onShareSuccess={shareModalConfig?.onShareSuccess}\n theme={theme}\n />\n </div>\n )\n }\n)\n\n// \u8BBE\u7F6E displayName \u7528\u4E8E\u8C03\u8BD5\nWheelLottery.displayName = 'WheelLottery'\n\n// ============================================================================\n// \u5BFC\u51FA\n// ============================================================================\n\nexport default withLayout(WheelLottery)\nexport { WinnerModal } from '../LotteryShared/WinnerModal.js'\nexport { RulesModal } from '../LotteryShared/RulesModal.js'\nexport { MyRewardsModal } from '../LotteryShared/MyRewardsModal.js'\nexport { ErrorModal } from '../LotteryShared/ErrorModal.js'\nexport { ShareModal } from '../LotteryShared/ShareModal.js'\nexport { BaseModal } from '../LotteryShared/BaseModal.js'\nexport type {\n WheelLotteryProps,\n WheelLotteryHandle,\n Prize,\n ChanceMethod,\n ChanceMethodStatus,\n WinningInfo,\n WheelProps,\n PrizePoolProps,\n ChanceMethodsProps,\n WinnerModalProps,\n WinnerModalConfig,\n UserData,\n ShareModalConfig,\n SocialPlatform,\n SharePlatformConfig,\n} from './types.js'\nexport type { RulesModalProps, RuleItem } from '../LotteryShared/RulesModal.js'\nexport type { MyRewardsModalProps, Reward, RewardStatus } from '../LotteryShared/MyRewardsModal.js'\nexport type { ErrorModalProps } from '../LotteryShared/ErrorModal.js'\nexport type { ShareModalProps } from '../LotteryShared/ShareModal.js'\nexport type { BaseModalProps } from '../LotteryShared/BaseModal.js'\nexport type { ContainerProps } from '../../shared/Styles.js'\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["jsx", "jsxs", "useState", "useCallback", "useRef", "useEffect", "useImperativeHandle", "forwardRef", "cn", "DEFAULT_WHEEL_CONFIG", "DEFAULT_CHANCE_METHODS", "INITIAL_WHEEL_STATE", "Grid", "GridItem", "Wheel", "PrizePool", "ChanceMethods", "WinnerModal", "RulesModal", "MyRewardsModal", "ErrorModal", "ShareModal", "withLayout", "WheelLottery", "prizes", "theme", "winningPrizeId", "spinDuration", "wheelBackgroundImage", "pointerImage", "chanceMethods", "chanceTitle", "chanceSubtitle", "chanceFooterNote", "chanceMethodsText", "mechanismType", "inputConfig", "winningInfos", "winnerNameTemplate", "prizesTitle", "onSpinStart", "onSpinEnd", "onSpinError", "winnerModalConfig", "rulesModalConfig", "myRewardsModalConfig", "errorModalConfig", "shareModalConfig", "userData", "loginPromptText", "loginButtonText", "noChancesText", "onLoginRequired", "onCopyCode", "opportunitiesText", "className", "ref", "rulesData", "rulesText", "rewardsData", "myRewardsText", "codeText", "copyText", "copiedText", "prizeText", "emptyText", "copyError", "availableText", "usedStatusText", "expiredText", "notFoundText", "completedText", "usedText", "isLoggedIn", "availableChances", "showLoginOverlay", "isNoChancesState", "wheelState", "setWheelState", "showWinnerModal", "setShowWinnerModal", "showRulesModal", "setShowRulesModal", "showRewardsModal", "setShowRewardsModal", "showErrorModal", "setShowErrorModal", "showNoWinModal", "setShowNoWinModal", "showShareModal", "setShowShareModal", "errorMessage", "setErrorMessage", "errorTitle", "setErrorTitle", "errorConfirmText", "setErrorConfirmText", "noWinTitle", "setNoWinTitle", "noWinMessage", "setNoWinMessage", "noWinConfirmText", "setNoWinConfirmText", "externalWinnerConfig", "setExternalWinnerConfig", "animationRef", "message", "title", "confirmText", "config", "prize", "prev", "handleSpinStart", "finalWinningPrizeId", "winningPrize", "p", "winningIndex", "degreesPerPrize", "basePrizeAngle", "targetAngle", "resolve", "startTime", "animate", "elapsed", "progress", "eased", "currentRotation", "error", "handleWheelGoClick", "handleCloseWinnerModal", "handleCloseNoWinModal", "WheelLottery_default", "BaseModal"]
|
|
7
7
|
}
|
|
@@ -232,6 +232,12 @@ export interface WheelLotteryProps {
|
|
|
232
232
|
* @optional
|
|
233
233
|
*/
|
|
234
234
|
winningInfos?: WinningInfo[];
|
|
235
|
+
/**
|
|
236
|
+
* 中奖滚动 Ticker 文案模板,支持 {{name}} 和 {{prize}} 变量
|
|
237
|
+
* @default "{{name}} just won {{prize}}!"
|
|
238
|
+
* @optional
|
|
239
|
+
*/
|
|
240
|
+
winnerNameTemplate?: string;
|
|
235
241
|
/**
|
|
236
242
|
* 奖品池展示区域标题
|
|
237
243
|
* @default "Prize Pool"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/biz-components/WheelLottery/types.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * \u5927\u8F6C\u76D8\u62BD\u5956\u7EC4\u4EF6\uFF08WheelLottery\uFF09\u7C7B\u578B\u5B9A\u4E49 - \u8F6C\u76D8\u4E13\u7528\u7C7B\u578B\n *\n * \u5171\u4EAB\u7C7B\u578B\u5DF2\u63D0\u53D6\u5230 LotteryShared/types.ts\uFF0C\u6B64\u6587\u4EF6\u901A\u8FC7 re-export \u4FDD\u6301\u5411\u540E\u517C\u5BB9\u3002\n *\n * @module WheelLotteryTypes\n * @date 2025-12-17\n */\n\n// ============================================================================\n// Re-export \u6240\u6709\u5171\u4EAB\u7C7B\u578B\uFF08\u5411\u540E\u517C\u5BB9\uFF09\n// ============================================================================\n\nexport * from '../LotteryShared/types.js'\n\n// ============================================================================\n// \u8F6C\u76D8\u4E13\u7528 import\n// ============================================================================\n\nimport type {\n Prize,\n WinnerModalConfig,\n ShareModalConfig,\n EasingFunction,\n ChanceMethod,\n WinningInfo,\n RulesModalConfig,\n MyRewardsModalConfig,\n ErrorModalConfig,\n UserData,\n ChanceMechanismType,\n ChanceInputConfig,\n} from '../LotteryShared/types.js'\n\nimport type { Theme } from '../../types/props.js'\n\n// ============================================================================\n// Imperative Handle \u63A5\u53E3\n// ============================================================================\n\n/**\n * WheelLottery \u7EC4\u4EF6\u547D\u4EE4\u5F0F\u63A7\u5236\u63A5\u53E3\n *\n * \u901A\u8FC7 ref \u66B4\u9732\u7ED9\u7236\u7EC4\u4EF6\uFF0C\u7528\u4E8E\u5916\u90E8\u63A7\u5236\u5F39\u7A97\u7B49\u72B6\u6001\n *\n * @example\n * ```tsx\n * const lotteryRef = useRef<WheelLotteryHandle>(null)\n *\n * <WheelLottery ref={lotteryRef} prizes={prizes} />\n *\n * // \u5916\u90E8\u89E6\u53D1\u9519\u8BEF\u5F39\u7A97\n * lotteryRef.current?.showError({\n * title: 'Network Error',\n * message: 'Failed to connect to server',\n * confirmText: 'Retry'\n * })\n *\n * // \u663E\u793A\u89C4\u5219\u5F39\u7A97\n * lotteryRef.current?.showRules()\n *\n * // \u5173\u95ED\u6240\u6709\u5F39\u7A97\n * lotteryRef.current?.hideAllModals()\n * ```\n */\nexport interface WheelLotteryHandle {\n /**\n * \u663E\u793A\u9519\u8BEF\u5F39\u7A97\n * @param config \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\n */\n showError: (config: {\n /** \u9519\u8BEF\u4FE1\u606F */\n message: string\n /** \u6807\u9898\uFF08\u53EF\u9009\uFF09 */\n title?: string\n /** \u786E\u8BA4\u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF09 */\n confirmText?: string\n }) => void\n\n /**\n * \u9690\u85CF\u9519\u8BEF\u5F39\u7A97\n */\n hideError: () => void\n\n /**\n * \u663E\u793A\u672A\u4E2D\u5956\u5F39\u7A97\uFF08\u4F7F\u7528 ErrorModal\uFF09\n * @param config \u672A\u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\n */\n showNoWin: (config?: {\n /** \u6807\u9898\uFF08\u53EF\u9009\uFF09 */\n title?: string\n /** \u63D0\u793A\u4FE1\u606F\uFF08\u53EF\u9009\uFF09 */\n message?: string\n /** \u786E\u8BA4\u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF09 */\n confirmText?: string\n }) => void\n\n /**\n * \u9690\u85CF\u672A\u4E2D\u5956\u5F39\u7A97\n */\n hideNoWin: () => void\n\n /**\n * \u663E\u793A\u4E2D\u5956\u5F39\u7A97\n * @param prize \u4E2D\u5956\u5956\u54C1\n * @param config \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08\u53EF\u9009\uFF09\n */\n showWinner: (prize: Prize, config?: Partial<WinnerModalConfig>) => void\n\n /**\n * \u9690\u85CF\u4E2D\u5956\u5F39\u7A97\n */\n hideWinner: () => void\n\n /**\n * \u663E\u793A\u89C4\u5219\u5F39\u7A97\n */\n showRules: () => void\n\n /**\n * \u9690\u85CF\u89C4\u5219\u5F39\u7A97\n */\n hideRules: () => void\n\n /**\n * \u663E\u793A\u6211\u7684\u5956\u52B1\u5F39\u7A97\n */\n showRewards: () => void\n\n /**\n * \u9690\u85CF\u6211\u7684\u5956\u52B1\u5F39\u7A97\n */\n hideRewards: () => void\n\n /**\n * \u663E\u793A\u5206\u4EAB\u5F39\u7A97\n * @param config \u5206\u4EAB\u5F39\u7A97\u914D\u7F6E\uFF08\u53EF\u9009\uFF09\n */\n showShare: (config?: Partial<ShareModalConfig>) => void\n\n /**\n * \u9690\u85CF\u5206\u4EAB\u5F39\u7A97\n */\n hideShare: () => void\n\n /**\n * \u5173\u95ED\u6240\u6709\u5F39\u7A97\n */\n hideAllModals: () => void\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u56FE\u7247\u7D20\u6750\u5E38\u91CF\n// ============================================================================\n\n/**\n * \u9ED8\u8BA4\u8F6C\u76D8\u6307\u9488\u56FE\u7247 URL\n */\nexport const DEFAULT_POINTER_IMAGE =\n 'https://cdn.shopify.com/s/files/1/0517/2199/4432/files/2790697ba78c1a85d953787a8be9b258.png?v=1766371471'\n\nexport const DEFAULT_POINTER_DISABLE_IMAGE =\n 'https://cdn.shopify.com/s/files/1/0582/4669/3040/files/2790697ba78c1a85d953787a8be9b258.png?v=1767610632'\n\n/**\n * \u9ED8\u8BA4\u8F6C\u76D8\u5E95\u56FE\uFF086 \u4E2A\u5956\u54C1\uFF09\n */\nexport const DEFAULT_WHEEL_BG_6_PRIZES =\n 'https://cdn.shopify.com/s/files/1/0517/2199/4432/files/be866c03-4d29-4d59-a8d4-39f5d64bbc0e_ae_e_6.png?v=1766374361'\n\n/**\n * \u9ED8\u8BA4\u8F6C\u76D8\u5E95\u56FE\uFF088 \u4E2A\u5956\u54C1\uFF09\n */\nexport const DEFAULT_WHEEL_BG_8_PRIZES =\n 'https://cdn.shopify.com/s/files/1/0517/2199/4432/files/ad63174a-3da0-4dcd-ac61-c83172c7893c_ae_e_8.png?v=1766374392'\n\n// ============================================================================\n// \u7EC4\u4EF6 Props \u63A5\u53E3\n// ============================================================================\n\n/**\n * WheelLottery \u7EC4\u4EF6 Props\n *\n * @example\n * ```tsx\n * <WheelLottery\n * prizes={prizes}\n * winningPrizeId=\"prize-003\"\n * spinDuration={4000}\n * easing=\"ease-out\"\n * chanceMethods={chanceMethods}\n * chanceTitle=\"Want more chances to win?\"\n * winningInfos={winningInfos}\n * onSpinStart={() => console.log('Spin started')}\n * onSpinEnd={(prize) => alert(`You won ${prize.name}`)}\n * />\n * ```\n */\nexport interface WheelLotteryProps {\n // ========== \u5FC5\u9700 Props ==========\n\n /**\n * 8 \u4E2A\u5956\u54C1\u6570\u7EC4\uFF08\u5FC5\u9700\uFF09\n * @minLength 8\n * @maxLength 8\n * @validation \u5982\u679C\u957F\u5EA6\u4E0D\u7B49\u4E8E 8\uFF0C\u5E94\u5728\u5F00\u53D1\u73AF\u5883\u4E0B\u8F93\u51FA\u8B66\u544A\n */\n prizes: Prize[]\n\n // ========== \u8F6C\u76D8\u914D\u7F6E Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u4E3B\u9898\u8272\n */\n theme?: Theme\n\n /**\n * \u6307\u5B9A\u4E2D\u5956\u5956\u54C1\u7684 ID\uFF0C\u7528\u4E8E\u6D4B\u8BD5\u6216\u670D\u52A1\u7AEF\u51B3\u5B9A\u7ED3\u679C\n * @note \u5FC5\u987B\u662F prizes \u6570\u7EC4\u4E2D\u67D0\u4E2A Prize \u7684 id\n * @optional\n */\n winningPrizeId?: string\n\n /**\n * \u65CB\u8F6C\u65F6\u957F\uFF08\u6BEB\u79D2\uFF09\n * @default 4000\n * @range 3000-5000\n * @optional\n */\n spinDuration?: number\n\n /**\n * \u7F13\u52A8\u51FD\u6570\n * @default \"ease-out\"\n * @optional\n */\n easing?: EasingFunction\n\n /**\n * \u8F6C\u76D8\u5E95\u56FE URL\uFF08\u652F\u6301 6 \u4E2A\u6216 8 \u4E2A\u5956\u54C1\u7684\u80CC\u666F\u56FE\uFF09\n * @default \u6839\u636E prizes.length \u81EA\u52A8\u9009\u62E9 6 \u6216 8 \u5956\u54C1\u5E95\u56FE\n * @optional\n */\n wheelBackgroundImage?: string\n\n /**\n * \u8F6C\u76D8\u6307\u9488\u56FE\u7247 URL\n * @default \u9ED8\u8BA4\u6307\u9488\u56FE\u7247\n * @optional\n */\n pointerImage?: string\n\n // ========== \u83B7\u53D6\u673A\u4F1A\u533A\u57DF Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u6570\u7EC4\n * @default DEFAULT_CHANCE_METHODS\uFF083\u79CD\u9ED8\u8BA4\u65B9\u5F0F\uFF1A\u5206\u4EAB\u3001\u79EF\u5206\u3001\u63A8\u8350\uFF09\n * @note \u5F53\u6570\u7EC4\u4E3A\u7A7A\u65F6\uFF0C\u9690\u85CF\u6574\u4E2A\"\u83B7\u53D6\u673A\u4F1A\"\u533A\u57DF\n * @optional\n */\n chanceMethods?: ChanceMethod[]\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u673A\u5236\u7C7B\u578B\n * @default \"methods\"\n * @optional\n */\n mechanismType?: ChanceMechanismType\n\n /**\n * \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u5F53 mechanismType \u4E3A 'input' \u65F6\u4F7F\u7528\uFF09\n * @optional\n */\n inputConfig?: ChanceInputConfig\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u6807\u9898\n * @default \"Want more chances to win?\"\n * @optional\n */\n chanceTitle?: string\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u526F\u6807\u9898\n * @optional\n */\n chanceSubtitle?: string\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u5E95\u90E8\u63D0\u793A\n * @optional\n */\n chanceFooterNote?: string\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u6587\u6848\u914D\u7F6E\n * @optional\n */\n chanceMethodsText?: {\n chanceBadgeText?: string\n completedText?: string\n usedText?: string\n loadingText?: string\n }\n\n // ========== \u4E2D\u5956\u4FE1\u606F Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u4E2D\u5956\u4FE1\u606F\u6570\u7EC4\uFF0C\u7528\u4E8E\u5E95\u90E8\u6EDA\u52A8\u6761\u5C55\u793A\n * @default []\n * @note \u5F53\u6570\u7EC4\u4E3A\u7A7A\u65F6\uFF0C\u9690\u85CF\u5E95\u90E8\u6EDA\u52A8\u6761\u6216\u663E\u793A\u9ED8\u8BA4\u63D0\u793A\n * @optional\n */\n winningInfos?: WinningInfo[]\n\n /**\n * \u5956\u54C1\u6C60\u5C55\u793A\u533A\u57DF\u6807\u9898\n * @default \"Prize Pool\"\n * @optional\n */\n prizesTitle?: string\n\n // ========== \u56DE\u8C03\u51FD\u6570 Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u62BD\u5956\u5F00\u59CB\u65F6\u7684\u56DE\u8C03\uFF0C\u8FD4\u56DE Promise \u4EE5\u652F\u6301\u5F02\u6B65\u63A5\u53E3\u8C03\u7528\n * @returns Promise<string> - \u4E2D\u5956\u5956\u54C1\u7684 ID\uFF0C\u5982\u679C\u63A5\u53E3\u5931\u8D25\u5219 reject\n * @optional\n * @example\n * ```tsx\n * onSpinStart={async () => {\n * const result = await fetch('/api/lottery')\n * const data = await result.json()\n * return data.prizeId // \u8FD4\u56DE\u4E2D\u5956\u5956\u54C1 ID\n * }}\n * ```\n */\n onSpinStart?: () => Promise<string>\n\n /**\n * \u62BD\u5956\u7ED3\u675F\u65F6\u7684\u56DE\u8C03\uFF0C\u4F20\u9012\u4E2D\u5956\u5956\u54C1\n * @param prize \u4E2D\u5956\u5956\u54C1\u5BF9\u8C61\n * @optional\n */\n onSpinEnd?: (prize: Prize) => void\n\n /**\n * \u62BD\u5956\u9519\u8BEF\u65F6\u7684\u56DE\u8C03\n * @param error \u9519\u8BEF\u4FE1\u606F\n * @optional\n */\n onSpinError?: (error: Error) => void\n\n // ========== \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\u5BF9\u8C61\uFF0C\u901A\u5E38\u7531\u62BD\u5956\u63A5\u53E3\u8FD4\u56DE\u63D0\u4F9B\n * @optional\n * @example\n * ```tsx\n * winnerModalConfig={{\n * title: 'Congratulations!',\n * prizeTitle: 'Anker Prime Charger',\n * prizeImage: 'https://...',\n * prizeDescription: 'High-speed charging',\n * learnMoreUrl: 'https://...',\n * couponCode: 'ANKER2024',\n * expiresAt: '2024-12-31',\n * couponDiscount: '20%',\n * confirmText: 'Claim Now'\n * }}\n * ```\n */\n winnerModalConfig?: WinnerModalConfig\n\n rulesModalConfig?: RulesModalConfig\n\n myRewardsModalConfig?: MyRewardsModalConfig\n\n errorModalConfig?: ErrorModalConfig\n\n /**\n * \u5206\u4EAB\u5F39\u7A97\u914D\u7F6E\n * @optional\n */\n shareModalConfig?: ShareModalConfig\n\n /**\n * \u672A\u767B\u5F55\u65F6\u70B9\u51FB GO \u6309\u94AE\u7684\u56DE\u8C03\n * @example\n * ```tsx\n * onLoginRequired={() => {\n * // \u6253\u5F00\u767B\u5F55\u5F39\u7A97\u6216\u8DF3\u8F6C\u767B\u5F55\u9875\n * router.push('/login')\n * }}\n * ```\n */\n onLoginRequired?: () => void\n\n // ========== \u7528\u6237\u76F8\u5173 Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u7528\u6237\u6570\u636E\n * @optional\n * @example\n * ```tsx\n * userData={{\n * isLoggedIn: true,\n * availableChances: 3,\n * wonPrizes: [{ id: 'prize-001', name: 'Charger', image: 'https://...' }]\n * }}\n * ```\n */\n userData?: UserData\n\n /**\n * \u672A\u767B\u5F55\u65F6\u7684\u63D0\u793A\u6587\u6848\n * @default \"Please log in to participate\"\n * @optional\n */\n loginPromptText?: string\n\n /**\n * \u767B\u5F55\u6309\u94AE\u6587\u6848\n * @default \"Log In\"\n * @optional\n */\n loginButtonText?: string\n\n /**\n * \u6B21\u6570\u4E0D\u8DB3\u65F6\u7684\u63D0\u793A\u6587\u6848\n * @default \"You have no chances left\"\n * @optional\n */\n noChancesText?: string\n\n // ========== \u5F39\u7A97\u76F8\u5173 Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u590D\u5236\u4F18\u60E0\u7801\u56DE\u8C03\n * @optional\n */\n onCopyCode?: (code: string) => void\n\n /**\n * Rules \u6309\u94AE\u6587\u672C\n * @default \"Rules\"\n * @optional\n */\n rulesText?: string\n\n /**\n * Opportunities \u6587\u672C\u6570\u7EC4\n * @default [\"Accumulate\", \"lottery opportunities\"]\n * @optional\n */\n opportunitiesText?: string[]\n\n /**\n * My Rewards \u6309\u94AE\u6587\u672C\n * @default \"My Rewards\"\n * @optional\n */\n myRewardsText?: string\n\n /**\n * \u672A\u4E2D\u5956\u5F39\u7A97\u6807\u9898\n * @default \"Sorry, You Didn't Win This Time\"\n * @optional\n */\n noWinTitle?: string\n\n /**\n * \u672A\u4E2D\u5956\u5F39\u7A97\u526F\u6807\u9898\n * @default \"Keep Trying, You Could Still Win Big!\"\n * @optional\n */\n noWinSubtitle?: string\n\n // ========== My Rewards \u5F39\u7A97\u6587\u6848\u914D\u7F6E\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * My Rewards \u5F39\u7A97\u65E0\u5956\u52B1\u65F6\u7684\u63D0\u793A\u6587\u672C\n * @default \"No rewards yet\"\n * @optional\n */\n rewardsEmptyText?: string\n\n /**\n * My Rewards \u5F39\u7A97 CODE \u6807\u7B7E\u6587\u672C\n * @default \"CODE:\"\n * @optional\n */\n rewardsCodeLabel?: string\n\n /**\n * My Rewards \u5F39\u7A97\u590D\u5236\u6309\u94AE\u6587\u672C\n * @default \"Copy\"\n * @optional\n */\n rewardsCopyButtonText?: string\n\n /**\n * My Rewards \u5F39\u7A97\u5956\u52B1\u65F6\u95F4\u6807\u7B7E\u6587\u672C\n * @default \"Prize time:\"\n * @optional\n */\n rewardsPrizeTimeLabel?: string\n\n // ========== BaseModal \u914D\u7F6E\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u5F39\u7A97\u5173\u95ED\u6309\u94AE\u7684 aria-label\n * @default \"\u5173\u95ED\u5F39\u7A97\"\n * @optional\n */\n modalCloseButtonAriaLabel?: string\n\n // ========== \u6837\u5F0F\u76F8\u5173 Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u81EA\u5B9A\u4E49 CSS \u7C7B\u540D\uFF0C\u7528\u4E8E\u8986\u76D6\u6216\u6269\u5C55\u9ED8\u8BA4\u6837\u5F0F\n * @optional\n */\n className?: string\n}\n\n/**\n * \u9ED8\u8BA4\u8F6C\u76D8\u914D\u7F6E\n */\n\nexport const DEFAULT_WHEEL_CONFIG = {\n spinDuration: 4000, // 4 \u79D2\n easing: 'ease-out' as EasingFunction,\n chanceTitle: 'Want more chances to win?',\n}\n\n// ============================================================================\n// \u5185\u90E8\u72B6\u6001\u7C7B\u578B\uFF08\u4EC5\u4F9B\u7EC4\u4EF6\u5185\u90E8\u4F7F\u7528\uFF09\n// ============================================================================\n\n/**\n * \u8F6C\u76D8\u8FD0\u884C\u65F6\u72B6\u6001\uFF08\u7EC4\u4EF6\u5185\u90E8\u4F7F\u7528\uFF09\n * @internal\n */\nexport interface WheelState {\n /**\n * \u8F6C\u76D8\u662F\u5426\u6B63\u5728\u65CB\u8F6C\n */\n isSpinning: boolean\n\n /**\n * \u5F53\u524D\u65CB\u8F6C\u89D2\u5EA6\uFF08\u5EA6\u6570\uFF09\n */\n currentRotation: number\n\n /**\n * \u4E2D\u5956\u5956\u54C1\uFF0C\u62BD\u5956\u7ED3\u675F\u540E\u8BBE\u7F6E\n */\n winningPrize: Prize | null\n\n /**\n * GO \u6309\u94AE\u662F\u5426\u7981\u7528\n */\n isButtonDisabled: boolean\n\n /**\n * \u662F\u5426\u5DF2\u5B8C\u6210\u62BD\u5956\uFF08\u7528\u4E8E\u63A7\u5236\u8F6C\u76D8\u662F\u5426\u663E\u793A\u521D\u59CB\u65CB\u8F6C\u52A8\u753B\uFF09\n */\n isFinished: boolean\n}\n\n/**\n * \u521D\u59CB\u8F6C\u76D8\u72B6\u6001\n * @internal\n */\nexport const INITIAL_WHEEL_STATE: WheelState = {\n isSpinning: false,\n currentRotation: 0,\n winningPrize: null,\n isButtonDisabled: false,\n isFinished: false,\n}\n\n// ============================================================================\n// \u8F6C\u76D8\u5B50\u7EC4\u4EF6 Props \u7C7B\u578B\n// ============================================================================\n\n/**\n * Wheel \u8F6C\u76D8\u7EC4\u4EF6 Props\n */\nexport interface WheelProps {\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @optional\n */\n theme?: Theme\n\n /**\n * 8 \u4E2A\u5956\u54C1\u6570\u7EC4\n */\n prizes: Prize[]\n\n /**\n * \u5F53\u524D\u65CB\u8F6C\u89D2\u5EA6(\u5EA6\u6570)\n */\n rotation: number\n\n /**\n * \u662F\u5426\u6B63\u5728\u65CB\u8F6C\n */\n isSpinning: boolean\n\n /**\n * \u662F\u5426\u5DF2\u5B8C\u6210\u62BD\u5956\uFF08\u7528\u4E8E\u63A7\u5236\u8F6C\u76D8\u662F\u5426\u663E\u793A\u521D\u59CB\u65CB\u8F6C\u52A8\u753B\uFF09\n */\n isFinished?: boolean\n\n /**\n * GO \u6309\u94AE\u662F\u5426\u7981\u7528\n */\n isButtonDisabled: boolean\n\n /**\n * GO \u6309\u94AE\u70B9\u51FB\u56DE\u8C03\n */\n onGoClick: () => void\n\n /**\n * \u8F6C\u76D8\u5E95\u56FE URL\uFF08\u53EF\u9009\uFF09\n */\n wheelBackgroundImage?: string\n\n /**\n * \u8F6C\u76D8\u6307\u9488\u56FE\u7247 URL\uFF08\u53EF\u9009\uFF09\n */\n pointerImage?: string\n\n /**\n * \u767B\u5F55\u7528\u6237\u6570\u636E\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n userData?: UserData\n\n /**\n * \u6253\u5F00\u5206\u4EAB\u5F39\u7A97\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n onOpenShareModal?: () => void\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n}\n\n// ============================================================================\n// \u5DE5\u5177\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u9A8C\u8BC1\u7ED3\u679C\n */\nexport interface ValidationResult {\n valid: boolean\n error?: string\n}\n\n/**\n * \u5956\u54C1\u9A8C\u8BC1\u9009\u9879\n */\nexport interface ValidatePrizesOptions {\n /**\n * \u662F\u5426\u5141\u8BB8\u7F3A\u5C11 rank \u5B57\u6BB5\n * @default true\n */\n allowMissingRank?: boolean\n\n /**\n * \u662F\u5426\u5141\u8BB8\u7F3A\u5C11 price \u5B57\u6BB5\n * @default true\n */\n allowMissingPrice?: boolean\n}\n"],
|
|
5
|
-
"mappings": "AAaA,WAAc,4BAiJP,MAAMA,EACX,2GAEWC,EACX,2GAKWC,EACX,sHAKWC,EACX,
|
|
4
|
+
"sourcesContent": ["/**\n * \u5927\u8F6C\u76D8\u62BD\u5956\u7EC4\u4EF6\uFF08WheelLottery\uFF09\u7C7B\u578B\u5B9A\u4E49 - \u8F6C\u76D8\u4E13\u7528\u7C7B\u578B\n *\n * \u5171\u4EAB\u7C7B\u578B\u5DF2\u63D0\u53D6\u5230 LotteryShared/types.ts\uFF0C\u6B64\u6587\u4EF6\u901A\u8FC7 re-export \u4FDD\u6301\u5411\u540E\u517C\u5BB9\u3002\n *\n * @module WheelLotteryTypes\n * @date 2025-12-17\n */\n\n// ============================================================================\n// Re-export \u6240\u6709\u5171\u4EAB\u7C7B\u578B\uFF08\u5411\u540E\u517C\u5BB9\uFF09\n// ============================================================================\n\nexport * from '../LotteryShared/types.js'\n\n// ============================================================================\n// \u8F6C\u76D8\u4E13\u7528 import\n// ============================================================================\n\nimport type {\n Prize,\n WinnerModalConfig,\n ShareModalConfig,\n EasingFunction,\n ChanceMethod,\n WinningInfo,\n RulesModalConfig,\n MyRewardsModalConfig,\n ErrorModalConfig,\n UserData,\n ChanceMechanismType,\n ChanceInputConfig,\n} from '../LotteryShared/types.js'\n\nimport type { Theme } from '../../types/props.js'\n\n// ============================================================================\n// Imperative Handle \u63A5\u53E3\n// ============================================================================\n\n/**\n * WheelLottery \u7EC4\u4EF6\u547D\u4EE4\u5F0F\u63A7\u5236\u63A5\u53E3\n *\n * \u901A\u8FC7 ref \u66B4\u9732\u7ED9\u7236\u7EC4\u4EF6\uFF0C\u7528\u4E8E\u5916\u90E8\u63A7\u5236\u5F39\u7A97\u7B49\u72B6\u6001\n *\n * @example\n * ```tsx\n * const lotteryRef = useRef<WheelLotteryHandle>(null)\n *\n * <WheelLottery ref={lotteryRef} prizes={prizes} />\n *\n * // \u5916\u90E8\u89E6\u53D1\u9519\u8BEF\u5F39\u7A97\n * lotteryRef.current?.showError({\n * title: 'Network Error',\n * message: 'Failed to connect to server',\n * confirmText: 'Retry'\n * })\n *\n * // \u663E\u793A\u89C4\u5219\u5F39\u7A97\n * lotteryRef.current?.showRules()\n *\n * // \u5173\u95ED\u6240\u6709\u5F39\u7A97\n * lotteryRef.current?.hideAllModals()\n * ```\n */\nexport interface WheelLotteryHandle {\n /**\n * \u663E\u793A\u9519\u8BEF\u5F39\u7A97\n * @param config \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\n */\n showError: (config: {\n /** \u9519\u8BEF\u4FE1\u606F */\n message: string\n /** \u6807\u9898\uFF08\u53EF\u9009\uFF09 */\n title?: string\n /** \u786E\u8BA4\u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF09 */\n confirmText?: string\n }) => void\n\n /**\n * \u9690\u85CF\u9519\u8BEF\u5F39\u7A97\n */\n hideError: () => void\n\n /**\n * \u663E\u793A\u672A\u4E2D\u5956\u5F39\u7A97\uFF08\u4F7F\u7528 ErrorModal\uFF09\n * @param config \u672A\u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\n */\n showNoWin: (config?: {\n /** \u6807\u9898\uFF08\u53EF\u9009\uFF09 */\n title?: string\n /** \u63D0\u793A\u4FE1\u606F\uFF08\u53EF\u9009\uFF09 */\n message?: string\n /** \u786E\u8BA4\u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF09 */\n confirmText?: string\n }) => void\n\n /**\n * \u9690\u85CF\u672A\u4E2D\u5956\u5F39\u7A97\n */\n hideNoWin: () => void\n\n /**\n * \u663E\u793A\u4E2D\u5956\u5F39\u7A97\n * @param prize \u4E2D\u5956\u5956\u54C1\n * @param config \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08\u53EF\u9009\uFF09\n */\n showWinner: (prize: Prize, config?: Partial<WinnerModalConfig>) => void\n\n /**\n * \u9690\u85CF\u4E2D\u5956\u5F39\u7A97\n */\n hideWinner: () => void\n\n /**\n * \u663E\u793A\u89C4\u5219\u5F39\u7A97\n */\n showRules: () => void\n\n /**\n * \u9690\u85CF\u89C4\u5219\u5F39\u7A97\n */\n hideRules: () => void\n\n /**\n * \u663E\u793A\u6211\u7684\u5956\u52B1\u5F39\u7A97\n */\n showRewards: () => void\n\n /**\n * \u9690\u85CF\u6211\u7684\u5956\u52B1\u5F39\u7A97\n */\n hideRewards: () => void\n\n /**\n * \u663E\u793A\u5206\u4EAB\u5F39\u7A97\n * @param config \u5206\u4EAB\u5F39\u7A97\u914D\u7F6E\uFF08\u53EF\u9009\uFF09\n */\n showShare: (config?: Partial<ShareModalConfig>) => void\n\n /**\n * \u9690\u85CF\u5206\u4EAB\u5F39\u7A97\n */\n hideShare: () => void\n\n /**\n * \u5173\u95ED\u6240\u6709\u5F39\u7A97\n */\n hideAllModals: () => void\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u56FE\u7247\u7D20\u6750\u5E38\u91CF\n// ============================================================================\n\n/**\n * \u9ED8\u8BA4\u8F6C\u76D8\u6307\u9488\u56FE\u7247 URL\n */\nexport const DEFAULT_POINTER_IMAGE =\n 'https://cdn.shopify.com/s/files/1/0517/2199/4432/files/2790697ba78c1a85d953787a8be9b258.png?v=1766371471'\n\nexport const DEFAULT_POINTER_DISABLE_IMAGE =\n 'https://cdn.shopify.com/s/files/1/0582/4669/3040/files/2790697ba78c1a85d953787a8be9b258.png?v=1767610632'\n\n/**\n * \u9ED8\u8BA4\u8F6C\u76D8\u5E95\u56FE\uFF086 \u4E2A\u5956\u54C1\uFF09\n */\nexport const DEFAULT_WHEEL_BG_6_PRIZES =\n 'https://cdn.shopify.com/s/files/1/0517/2199/4432/files/be866c03-4d29-4d59-a8d4-39f5d64bbc0e_ae_e_6.png?v=1766374361'\n\n/**\n * \u9ED8\u8BA4\u8F6C\u76D8\u5E95\u56FE\uFF088 \u4E2A\u5956\u54C1\uFF09\n */\nexport const DEFAULT_WHEEL_BG_8_PRIZES =\n 'https://cdn.shopify.com/s/files/1/0517/2199/4432/files/ad63174a-3da0-4dcd-ac61-c83172c7893c_ae_e_8.png?v=1766374392'\n\n// ============================================================================\n// \u7EC4\u4EF6 Props \u63A5\u53E3\n// ============================================================================\n\n/**\n * WheelLottery \u7EC4\u4EF6 Props\n *\n * @example\n * ```tsx\n * <WheelLottery\n * prizes={prizes}\n * winningPrizeId=\"prize-003\"\n * spinDuration={4000}\n * easing=\"ease-out\"\n * chanceMethods={chanceMethods}\n * chanceTitle=\"Want more chances to win?\"\n * winningInfos={winningInfos}\n * onSpinStart={() => console.log('Spin started')}\n * onSpinEnd={(prize) => alert(`You won ${prize.name}`)}\n * />\n * ```\n */\nexport interface WheelLotteryProps {\n // ========== \u5FC5\u9700 Props ==========\n\n /**\n * 8 \u4E2A\u5956\u54C1\u6570\u7EC4\uFF08\u5FC5\u9700\uFF09\n * @minLength 8\n * @maxLength 8\n * @validation \u5982\u679C\u957F\u5EA6\u4E0D\u7B49\u4E8E 8\uFF0C\u5E94\u5728\u5F00\u53D1\u73AF\u5883\u4E0B\u8F93\u51FA\u8B66\u544A\n */\n prizes: Prize[]\n\n // ========== \u8F6C\u76D8\u914D\u7F6E Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u4E3B\u9898\u8272\n */\n theme?: Theme\n\n /**\n * \u6307\u5B9A\u4E2D\u5956\u5956\u54C1\u7684 ID\uFF0C\u7528\u4E8E\u6D4B\u8BD5\u6216\u670D\u52A1\u7AEF\u51B3\u5B9A\u7ED3\u679C\n * @note \u5FC5\u987B\u662F prizes \u6570\u7EC4\u4E2D\u67D0\u4E2A Prize \u7684 id\n * @optional\n */\n winningPrizeId?: string\n\n /**\n * \u65CB\u8F6C\u65F6\u957F\uFF08\u6BEB\u79D2\uFF09\n * @default 4000\n * @range 3000-5000\n * @optional\n */\n spinDuration?: number\n\n /**\n * \u7F13\u52A8\u51FD\u6570\n * @default \"ease-out\"\n * @optional\n */\n easing?: EasingFunction\n\n /**\n * \u8F6C\u76D8\u5E95\u56FE URL\uFF08\u652F\u6301 6 \u4E2A\u6216 8 \u4E2A\u5956\u54C1\u7684\u80CC\u666F\u56FE\uFF09\n * @default \u6839\u636E prizes.length \u81EA\u52A8\u9009\u62E9 6 \u6216 8 \u5956\u54C1\u5E95\u56FE\n * @optional\n */\n wheelBackgroundImage?: string\n\n /**\n * \u8F6C\u76D8\u6307\u9488\u56FE\u7247 URL\n * @default \u9ED8\u8BA4\u6307\u9488\u56FE\u7247\n * @optional\n */\n pointerImage?: string\n\n // ========== \u83B7\u53D6\u673A\u4F1A\u533A\u57DF Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u6570\u7EC4\n * @default DEFAULT_CHANCE_METHODS\uFF083\u79CD\u9ED8\u8BA4\u65B9\u5F0F\uFF1A\u5206\u4EAB\u3001\u79EF\u5206\u3001\u63A8\u8350\uFF09\n * @note \u5F53\u6570\u7EC4\u4E3A\u7A7A\u65F6\uFF0C\u9690\u85CF\u6574\u4E2A\"\u83B7\u53D6\u673A\u4F1A\"\u533A\u57DF\n * @optional\n */\n chanceMethods?: ChanceMethod[]\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u673A\u5236\u7C7B\u578B\n * @default \"methods\"\n * @optional\n */\n mechanismType?: ChanceMechanismType\n\n /**\n * \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u5F53 mechanismType \u4E3A 'input' \u65F6\u4F7F\u7528\uFF09\n * @optional\n */\n inputConfig?: ChanceInputConfig\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u6807\u9898\n * @default \"Want more chances to win?\"\n * @optional\n */\n chanceTitle?: string\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u526F\u6807\u9898\n * @optional\n */\n chanceSubtitle?: string\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u5E95\u90E8\u63D0\u793A\n * @optional\n */\n chanceFooterNote?: string\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u6587\u6848\u914D\u7F6E\n * @optional\n */\n chanceMethodsText?: {\n chanceBadgeText?: string\n completedText?: string\n usedText?: string\n loadingText?: string\n }\n\n // ========== \u4E2D\u5956\u4FE1\u606F Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u4E2D\u5956\u4FE1\u606F\u6570\u7EC4\uFF0C\u7528\u4E8E\u5E95\u90E8\u6EDA\u52A8\u6761\u5C55\u793A\n * @default []\n * @note \u5F53\u6570\u7EC4\u4E3A\u7A7A\u65F6\uFF0C\u9690\u85CF\u5E95\u90E8\u6EDA\u52A8\u6761\u6216\u663E\u793A\u9ED8\u8BA4\u63D0\u793A\n * @optional\n */\n winningInfos?: WinningInfo[]\n\n /**\n * \u4E2D\u5956\u6EDA\u52A8 Ticker \u6587\u6848\u6A21\u677F\uFF0C\u652F\u6301 {{name}} \u548C {{prize}} \u53D8\u91CF\n * @default \"{{name}} just won {{prize}}!\"\n * @optional\n */\n winnerNameTemplate?: string\n\n /**\n * \u5956\u54C1\u6C60\u5C55\u793A\u533A\u57DF\u6807\u9898\n * @default \"Prize Pool\"\n * @optional\n */\n prizesTitle?: string\n\n // ========== \u56DE\u8C03\u51FD\u6570 Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u62BD\u5956\u5F00\u59CB\u65F6\u7684\u56DE\u8C03\uFF0C\u8FD4\u56DE Promise \u4EE5\u652F\u6301\u5F02\u6B65\u63A5\u53E3\u8C03\u7528\n * @returns Promise<string> - \u4E2D\u5956\u5956\u54C1\u7684 ID\uFF0C\u5982\u679C\u63A5\u53E3\u5931\u8D25\u5219 reject\n * @optional\n * @example\n * ```tsx\n * onSpinStart={async () => {\n * const result = await fetch('/api/lottery')\n * const data = await result.json()\n * return data.prizeId // \u8FD4\u56DE\u4E2D\u5956\u5956\u54C1 ID\n * }}\n * ```\n */\n onSpinStart?: () => Promise<string>\n\n /**\n * \u62BD\u5956\u7ED3\u675F\u65F6\u7684\u56DE\u8C03\uFF0C\u4F20\u9012\u4E2D\u5956\u5956\u54C1\n * @param prize \u4E2D\u5956\u5956\u54C1\u5BF9\u8C61\n * @optional\n */\n onSpinEnd?: (prize: Prize) => void\n\n /**\n * \u62BD\u5956\u9519\u8BEF\u65F6\u7684\u56DE\u8C03\n * @param error \u9519\u8BEF\u4FE1\u606F\n * @optional\n */\n onSpinError?: (error: Error) => void\n\n // ========== \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\u5BF9\u8C61\uFF0C\u901A\u5E38\u7531\u62BD\u5956\u63A5\u53E3\u8FD4\u56DE\u63D0\u4F9B\n * @optional\n * @example\n * ```tsx\n * winnerModalConfig={{\n * title: 'Congratulations!',\n * prizeTitle: 'Anker Prime Charger',\n * prizeImage: 'https://...',\n * prizeDescription: 'High-speed charging',\n * learnMoreUrl: 'https://...',\n * couponCode: 'ANKER2024',\n * expiresAt: '2024-12-31',\n * couponDiscount: '20%',\n * confirmText: 'Claim Now'\n * }}\n * ```\n */\n winnerModalConfig?: WinnerModalConfig\n\n rulesModalConfig?: RulesModalConfig\n\n myRewardsModalConfig?: MyRewardsModalConfig\n\n errorModalConfig?: ErrorModalConfig\n\n /**\n * \u5206\u4EAB\u5F39\u7A97\u914D\u7F6E\n * @optional\n */\n shareModalConfig?: ShareModalConfig\n\n /**\n * \u672A\u767B\u5F55\u65F6\u70B9\u51FB GO \u6309\u94AE\u7684\u56DE\u8C03\n * @example\n * ```tsx\n * onLoginRequired={() => {\n * // \u6253\u5F00\u767B\u5F55\u5F39\u7A97\u6216\u8DF3\u8F6C\u767B\u5F55\u9875\n * router.push('/login')\n * }}\n * ```\n */\n onLoginRequired?: () => void\n\n // ========== \u7528\u6237\u76F8\u5173 Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u7528\u6237\u6570\u636E\n * @optional\n * @example\n * ```tsx\n * userData={{\n * isLoggedIn: true,\n * availableChances: 3,\n * wonPrizes: [{ id: 'prize-001', name: 'Charger', image: 'https://...' }]\n * }}\n * ```\n */\n userData?: UserData\n\n /**\n * \u672A\u767B\u5F55\u65F6\u7684\u63D0\u793A\u6587\u6848\n * @default \"Please log in to participate\"\n * @optional\n */\n loginPromptText?: string\n\n /**\n * \u767B\u5F55\u6309\u94AE\u6587\u6848\n * @default \"Log In\"\n * @optional\n */\n loginButtonText?: string\n\n /**\n * \u6B21\u6570\u4E0D\u8DB3\u65F6\u7684\u63D0\u793A\u6587\u6848\n * @default \"You have no chances left\"\n * @optional\n */\n noChancesText?: string\n\n // ========== \u5F39\u7A97\u76F8\u5173 Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u590D\u5236\u4F18\u60E0\u7801\u56DE\u8C03\n * @optional\n */\n onCopyCode?: (code: string) => void\n\n /**\n * Rules \u6309\u94AE\u6587\u672C\n * @default \"Rules\"\n * @optional\n */\n rulesText?: string\n\n /**\n * Opportunities \u6587\u672C\u6570\u7EC4\n * @default [\"Accumulate\", \"lottery opportunities\"]\n * @optional\n */\n opportunitiesText?: string[]\n\n /**\n * My Rewards \u6309\u94AE\u6587\u672C\n * @default \"My Rewards\"\n * @optional\n */\n myRewardsText?: string\n\n /**\n * \u672A\u4E2D\u5956\u5F39\u7A97\u6807\u9898\n * @default \"Sorry, You Didn't Win This Time\"\n * @optional\n */\n noWinTitle?: string\n\n /**\n * \u672A\u4E2D\u5956\u5F39\u7A97\u526F\u6807\u9898\n * @default \"Keep Trying, You Could Still Win Big!\"\n * @optional\n */\n noWinSubtitle?: string\n\n // ========== My Rewards \u5F39\u7A97\u6587\u6848\u914D\u7F6E\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * My Rewards \u5F39\u7A97\u65E0\u5956\u52B1\u65F6\u7684\u63D0\u793A\u6587\u672C\n * @default \"No rewards yet\"\n * @optional\n */\n rewardsEmptyText?: string\n\n /**\n * My Rewards \u5F39\u7A97 CODE \u6807\u7B7E\u6587\u672C\n * @default \"CODE:\"\n * @optional\n */\n rewardsCodeLabel?: string\n\n /**\n * My Rewards \u5F39\u7A97\u590D\u5236\u6309\u94AE\u6587\u672C\n * @default \"Copy\"\n * @optional\n */\n rewardsCopyButtonText?: string\n\n /**\n * My Rewards \u5F39\u7A97\u5956\u52B1\u65F6\u95F4\u6807\u7B7E\u6587\u672C\n * @default \"Prize time:\"\n * @optional\n */\n rewardsPrizeTimeLabel?: string\n\n // ========== BaseModal \u914D\u7F6E\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u5F39\u7A97\u5173\u95ED\u6309\u94AE\u7684 aria-label\n * @default \"\u5173\u95ED\u5F39\u7A97\"\n * @optional\n */\n modalCloseButtonAriaLabel?: string\n\n // ========== \u6837\u5F0F\u76F8\u5173 Props\uFF08\u53EF\u9009\uFF09 ==========\n\n /**\n * \u81EA\u5B9A\u4E49 CSS \u7C7B\u540D\uFF0C\u7528\u4E8E\u8986\u76D6\u6216\u6269\u5C55\u9ED8\u8BA4\u6837\u5F0F\n * @optional\n */\n className?: string\n}\n\n/**\n * \u9ED8\u8BA4\u8F6C\u76D8\u914D\u7F6E\n */\n\nexport const DEFAULT_WHEEL_CONFIG = {\n spinDuration: 4000, // 4 \u79D2\n easing: 'ease-out' as EasingFunction,\n chanceTitle: 'Want more chances to win?',\n}\n\n// ============================================================================\n// \u5185\u90E8\u72B6\u6001\u7C7B\u578B\uFF08\u4EC5\u4F9B\u7EC4\u4EF6\u5185\u90E8\u4F7F\u7528\uFF09\n// ============================================================================\n\n/**\n * \u8F6C\u76D8\u8FD0\u884C\u65F6\u72B6\u6001\uFF08\u7EC4\u4EF6\u5185\u90E8\u4F7F\u7528\uFF09\n * @internal\n */\nexport interface WheelState {\n /**\n * \u8F6C\u76D8\u662F\u5426\u6B63\u5728\u65CB\u8F6C\n */\n isSpinning: boolean\n\n /**\n * \u5F53\u524D\u65CB\u8F6C\u89D2\u5EA6\uFF08\u5EA6\u6570\uFF09\n */\n currentRotation: number\n\n /**\n * \u4E2D\u5956\u5956\u54C1\uFF0C\u62BD\u5956\u7ED3\u675F\u540E\u8BBE\u7F6E\n */\n winningPrize: Prize | null\n\n /**\n * GO \u6309\u94AE\u662F\u5426\u7981\u7528\n */\n isButtonDisabled: boolean\n\n /**\n * \u662F\u5426\u5DF2\u5B8C\u6210\u62BD\u5956\uFF08\u7528\u4E8E\u63A7\u5236\u8F6C\u76D8\u662F\u5426\u663E\u793A\u521D\u59CB\u65CB\u8F6C\u52A8\u753B\uFF09\n */\n isFinished: boolean\n}\n\n/**\n * \u521D\u59CB\u8F6C\u76D8\u72B6\u6001\n * @internal\n */\nexport const INITIAL_WHEEL_STATE: WheelState = {\n isSpinning: false,\n currentRotation: 0,\n winningPrize: null,\n isButtonDisabled: false,\n isFinished: false,\n}\n\n// ============================================================================\n// \u8F6C\u76D8\u5B50\u7EC4\u4EF6 Props \u7C7B\u578B\n// ============================================================================\n\n/**\n * Wheel \u8F6C\u76D8\u7EC4\u4EF6 Props\n */\nexport interface WheelProps {\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @optional\n */\n theme?: Theme\n\n /**\n * 8 \u4E2A\u5956\u54C1\u6570\u7EC4\n */\n prizes: Prize[]\n\n /**\n * \u5F53\u524D\u65CB\u8F6C\u89D2\u5EA6(\u5EA6\u6570)\n */\n rotation: number\n\n /**\n * \u662F\u5426\u6B63\u5728\u65CB\u8F6C\n */\n isSpinning: boolean\n\n /**\n * \u662F\u5426\u5DF2\u5B8C\u6210\u62BD\u5956\uFF08\u7528\u4E8E\u63A7\u5236\u8F6C\u76D8\u662F\u5426\u663E\u793A\u521D\u59CB\u65CB\u8F6C\u52A8\u753B\uFF09\n */\n isFinished?: boolean\n\n /**\n * GO \u6309\u94AE\u662F\u5426\u7981\u7528\n */\n isButtonDisabled: boolean\n\n /**\n * GO \u6309\u94AE\u70B9\u51FB\u56DE\u8C03\n */\n onGoClick: () => void\n\n /**\n * \u8F6C\u76D8\u5E95\u56FE URL\uFF08\u53EF\u9009\uFF09\n */\n wheelBackgroundImage?: string\n\n /**\n * \u8F6C\u76D8\u6307\u9488\u56FE\u7247 URL\uFF08\u53EF\u9009\uFF09\n */\n pointerImage?: string\n\n /**\n * \u767B\u5F55\u7528\u6237\u6570\u636E\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n userData?: UserData\n\n /**\n * \u6253\u5F00\u5206\u4EAB\u5F39\u7A97\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n onOpenShareModal?: () => void\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n}\n\n// ============================================================================\n// \u5DE5\u5177\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u9A8C\u8BC1\u7ED3\u679C\n */\nexport interface ValidationResult {\n valid: boolean\n error?: string\n}\n\n/**\n * \u5956\u54C1\u9A8C\u8BC1\u9009\u9879\n */\nexport interface ValidatePrizesOptions {\n /**\n * \u662F\u5426\u5141\u8BB8\u7F3A\u5C11 rank \u5B57\u6BB5\n * @default true\n */\n allowMissingRank?: boolean\n\n /**\n * \u662F\u5426\u5141\u8BB8\u7F3A\u5C11 price \u5B57\u6BB5\n * @default true\n */\n allowMissingPrice?: boolean\n}\n"],
|
|
5
|
+
"mappings": "AAaA,WAAc,4BAiJP,MAAMA,EACX,2GAEWC,EACX,2GAKWC,EACX,sHAKWC,EACX,sHA4WWC,EAAuB,CAClC,aAAc,IACd,OAAQ,WACR,YAAa,2BACf,EAyCaC,EAAkC,CAC7C,WAAY,GACZ,gBAAiB,EACjB,aAAc,KACd,iBAAkB,GAClB,WAAY,EACd",
|
|
6
6
|
"names": ["DEFAULT_POINTER_IMAGE", "DEFAULT_POINTER_DISABLE_IMAGE", "DEFAULT_WHEEL_BG_6_PRIZES", "DEFAULT_WHEEL_BG_8_PRIZES", "DEFAULT_WHEEL_CONFIG", "INITIAL_WHEEL_STATE"]
|
|
7
7
|
}
|
|
@@ -6,7 +6,7 @@ declare const WhyChooseItem: {
|
|
|
6
6
|
}): import("react/jsx-runtime").JSX.Element;
|
|
7
7
|
displayName: string;
|
|
8
8
|
};
|
|
9
|
-
declare const _default: React.ForwardRefExoticComponent<Omit<WhyChooseProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("
|
|
9
|
+
declare const _default: React.ForwardRefExoticComponent<Omit<WhyChooseProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
|
|
10
10
|
readonly $$typeof: symbol;
|
|
11
11
|
};
|
|
12
12
|
export default _default;
|
|
@@ -120,11 +120,18 @@ export { default as CreditsShelf, CreditsProductCard } from './CreditsShelf/inde
|
|
|
120
120
|
export type { CreditsShelfSemanticName, CreditsProductCardData, CopyConfig as CreditsShelfCopyConfig, ButtonFunctionType as CreditsShelfButtonFunctionType, } from './CreditsShelf/index.js';
|
|
121
121
|
export { default as SceneShelf, SceneProductCard } from './SceneShelf/index.js';
|
|
122
122
|
export type { SceneShelfSemanticName, SceneProductCardData, SceneProductCardSemanticName } from './SceneShelf/index.js';
|
|
123
|
+
export { default as SceneShelfV2, SceneShelfV2ProductCard } from './SceneShelfV2/index.js';
|
|
124
|
+
export type { SceneShelfV2SemanticName, SceneShelfV2Data, SceneShelfV2Product, SceneShelfV2Props, } from './SceneShelfV2/index.js';
|
|
125
|
+
export { default as SceneShelfV3 } from './SceneShelfV3/index.js';
|
|
126
|
+
export type { SceneShelfV3Data, SceneShelfV3Props, ProductTab as SceneShelfV3ProductTab } from './SceneShelfV3/index.js';
|
|
127
|
+
export type { SceneShelfV3SemanticName, ProductCardData as SceneShelfV3ProductCardData, } from './SceneShelfV3/ProductCard.js';
|
|
123
128
|
export { default as MediaEndorsement } from './MediaEndorsement/index.js';
|
|
124
129
|
export type { MediaEndorsementProps, MediaEndorsementData, MediaEndorsementItem, MediaEndorsementSemanticName, } from './MediaEndorsement/index.js';
|
|
125
130
|
export type { CopyConfig as MediaShelfCopyConfig, ButtonFunctionType as MediaShelfButtonFunctionType, } from './MediaShelf/types.js';
|
|
126
131
|
export type { CopyConfig as ActiveShelfCopyConfig, ButtonFunctionType } from './ActiveShelf/types.js';
|
|
127
132
|
export { default as ImageOverlayShelf, type ButtonFunctionType as ImageOverlayShelfButtonFunctionType, } from './ImageOverlayShelf/index.js';
|
|
133
|
+
export { default as ImageTextOverlay } from './ImageTextOverlay/index.js';
|
|
134
|
+
export type { ImageTextOverlayProps, ImageTextOverlayData, ImageTextOverlayItem, ImageTextOverlaySemanticName, ImageTextOverlayBackgroundImage, } from './ImageTextOverlay/types.js';
|
|
128
135
|
export { default as MiniCart } from './MiniCart/index.js';
|
|
129
136
|
export type { Cart, CartLineItem, MiniCartData, MiniCartProps, CircleProgressConfig } from './MiniCart/index.js';
|
|
130
137
|
export { default as MiniCartCircleProgress } from './MiniCart/CircleProgress.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{default as
|
|
1
|
+
import{default as a}from"./ActivitySchedule/index.js";import{default as i}from"./GiftShelf/index.js";import{default as s}from"./GiftTierShelf/index.js";import{default as d}from"./ActivityMechanism/index.js";import{default as l}from"./BrandEquity/index.js";import{default as n}from"./MemberEquity/index.js";import{default as x}from"./Slogan/index.js";import{default as y}from"./Title/index.js";import{default as P}from"./Spacer/index.js";import{default as g}from"./ShelfDisplay/index.js";import{default as B}from"./Evaluate/index.js";import{default as T}from"./Category/index.js";import{default as j}from"./HeroBanner/index.js";import{default as F}from"./AccordionCards/index.js";import{default as b}from"./Graphic/index.js";import{default as k}from"./MediaPlayerBase/index.js";import{default as L}from"./MediaPlayerSticky/index.js";import{default as q}from"./MediaPlayerMulti/index.js";import{default as E}from"./Marquee/index.js";import{default as W}from"./MarqueeReview/index.js";import{default as H}from"./WhyChoose/index.js";import{default as _}from"./Faq/index.js";import{MarqueeItem as U,MarqueeImageContent as Y,MarqueeTextContent as J}from"./Marquee/index.js";import{default as X}from"./MultiLayoutGraphicBlock/index.js";import{default as $}from"./GraphicAttractionBlock/index.js";import{default as te}from"./HeaderNavigation/index.js";import{default as ae}from"./FooterNavigation/index.js";import{default as ie}from"./SearchPage/index.js";import{IPC_SEARCH_PAGE as se,SearchPageTabType as fe}from"./SearchPage/types.js";import{withLayout as ce}from"../shared/Styles.js";import{default as ue}from"./AiuiProvider/index.js";import{default as me}from"./Tabs/index.js";import{default as he}from"./CreativeModule/index.js";import{default as Se}from"./GraphicOverlay/index.js";import{default as Ce}from"./Specs/index.js";import{default as Me}from"./TabsGroup/index.js";import{default as ve}from"./Listing/BizProductProvider.js";import{default as Ie}from"./Listing/components/PurchaseBar/index.js";import{default as De}from"./Listing/components/PurchaseBar/ProductActions/index.js";import{default as Ge}from"./Listing/components/ProductCard/index.js";import{default as Ae}from"./Listing/components/ProductCard/ProductDetail/ProductBenefitsTabs/index.js";import{default as we}from"./Listing/components/ProductCard/ProductDetail/ProductBenefits/index.js";import{default as Ve}from"./Listing/components/ProductCard/ProductDetail/ProductHighlight/index.js";import{default as Oe}from"./Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.js";import{default as Ne}from"./Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.js";import{default as Re}from"./Listing/components/ProductCard/ProductDetail/ProductOptions/index.js";import{default as Ke}from"./Listing/components/ProductCard/ProductDetail/ProductBundle/index.js";import{default as ze}from"./Listing/components/ProductCard/ProductDetail/ProductCoupon/index.js";import{default as Ye}from"./Listing/components/ProductCard/ProductDetail/ProductBanner/index.js";import{default as Qe}from"./Listing/components/ProductCard/ProductGridBox.js";import{default as Ze}from"./Listing/components/ProductCard/ProductGallery/index.js";import{default as et}from"./Listing/components/ProductCard/ProductDetail/index.js";import{default as rt}from"./Listing/components/ProductCard/ProductSummary/index.js";import{default as ot}from"./Listing/components/ProductCard/ProductDetail/BenefitsTab.js";import{default as pt}from"./Listing/components/PaidShipping/index.js";import{default as ft}from"./Listing/components/ProductCard/ProductPaidShipping/index.js";import{default as ct}from"./GraphicMore/index.js";import{default as ut}from"./Features/index.js";import{default as mt}from"./AplusDesc/index.js";import{default as ht}from"./GiftBox/index.js";import{default as St}from"./SelectStore/index.js";import{default as Ct}from"./DownLoad/index.js";import{default as Mt}from"./FootCharger/index.js";import{default as vt}from"./BrandCardLink/index.js";import*as Tt from"./IPRedirect/index.js";import{default as jt}from"./WheelLottery/index.js";import{default as Ft}from"./ProductLottery/index.js";import{default as bt}from"./ProductCompare/index.js";import{default as kt}from"./Ksp/index.js";import{default as Lt}from"./ImageTextFeature/index.js";import{default as qt}from"./FeatureCards/index.js";import{default as Et}from"./FeaturedBlogPosts/index.js";import{default as Wt}from"./ImageWithText/index.js";import{default as Ht}from"./VideoFeature/index.js";import{default as _t}from"./TabsWithMedia/index.js";import{default as Ut}from"./TabWithImage/index.js";import{default as Jt}from"./FeatureShowcase/index.js";import{default as Xt}from"./ProductHero/index.js";import{default as $t}from"./SpecsComparison/index.js";import{default as tr}from"./MediaSceneSwitcher/index.js";import{default as ar}from"./MediaSceneSwitcherV2/index.js";import{default as ir}from"./ThreeDCarousel/index.js";import{default as sr}from"./ProductNav/index.js";import{default as dr}from"./AnchorNavigation/index.js";import{default as lr}from"./PromotionalBar/index.js";import{default as nr}from"./EventSchedule/index.js";import{default as xr}from"./SecondaryBanner/index.js";import{default as yr}from"./BuyOneGetOneShelf/index.js";import{default as Pr}from"./ActiveShelf/index.js";import{default as gr}from"./MediaShelf/index.js";import{default as Br,CreditsProductCard as vr}from"./CreditsShelf/index.js";import{default as Ir,SceneProductCard as jr}from"./SceneShelf/index.js";import{default as Fr,SceneShelfV2ProductCard as Gr}from"./SceneShelfV2/index.js";import{default as Ar}from"./SceneShelfV3/index.js";import{default as wr}from"./MediaEndorsement/index.js";import{default as Vr}from"./ImageOverlayShelf/index.js";import{default as Or}from"./ImageTextOverlay/index.js";import{default as Nr}from"./MiniCart/index.js";import{default as Rr}from"./MiniCart/CircleProgress.js";import{default as Kr,MiniCartDialog as _r}from"./MiniCart/MiniCartDialog.js";const e={"ipc-accordioncards":"AccordionCards","ipc-aplusdesc":"AplusDesc","ipc-banner":"HeroBanner","ipc-brand-equity":"BrandEquity","ipc-category":"Category","ipc-collection-banner":"CollectionBanner","ipc-collection-shelves":"CollectionShelves","ipc-creativemodule":"CreativeModule","ipc-download":"DownLoad","ipc-evaluate":"Evaluate","ipc-faq":"Faq","ipc-features":"Features","ipc-footcharger":"FootCharger","ipc-ga-block":"GraphicAttractionBlock","ipc-giftbox":"GiftBox","ipc-giftshelf":"GiftShelf","ipc-graphic":"Graphic","ipc-graphicmore":"GraphicMore","ipc-graphicoverlay":"GraphicOverlay","ipc-marquee":"Marquee","ipc-mediaplayerbase":"MediaPlayerBase","ipc-mediaplayermulti":"MediaPlayerMulti","ipc-mediaplayersticky":"MediaPlayerSticky","ipc-member-equity":"MemberEquity","ipc-mlg-block":"MultiLayoutGraphicBlock","ipc-search-page-tabs":"SearchPageBlock","ipc-selectstore":"SelectStore","ipc-shelfdisplay":"ShelfDisplay","ipc-slogan":"Slogan","ipc-spacer":"Spacer","ipc-specs":"Specs","ipc-tabs":"TabsBlock","ipc-text-marquee":"TextMarquee","ipc-title":"Title","ipc-whychoose":"WhyChoose","ipc-product-nav":"ProductNav","ipc-brand-card-link":"BrandCardLink","ipc-ipredirect":"IPRedirect",ksp:"Ksp","ipc-secondary-banner":"SecondaryBanner","ipc-active-shelf":"ActiveShelf","ipc-media-shelf":"MediaShelf","ipc-bogo-shelf":"BuyOneGetOneShelf","ipc-media-endorsement":"MediaEndorsement","ipc-media-scene-switcher-v2":"MediaSceneSwitcherV2","ipc-featured-blog-posts":"FeaturedBlogPosts"};export{F as AccordionCards,Pr as ActiveShelf,d as ActivityMechanism,a as ActivitySchedule,ue as AiuiProvider,dr as AnchorNavigation,mt as AplusDesc,ot as BenefitsTab,ve as BizProductProvider,vt as BrandCardLink,l as BrandEquity,yr as BuyOneGetOneShelf,T as Category,he as CreativeModule,vr as CreditsProductCard,Br as CreditsShelf,Ct as DownLoad,B as Evaluate,nr as EventSchedule,_ as Faq,qt as FeatureCards,Jt as FeatureShowcase,Et as FeaturedBlogPosts,ut as Features,Mt as FootCharger,ae as FooterNavigation,ht as GiftBox,i as GiftShelf,s as GiftTierShelf,b as Graphic,$ as GraphicAttractionBlock,ct as GraphicMore,Se as GraphicOverlay,te as HeaderNavigation,j as HeroBanner,se as IPC_SEARCH_PAGE,Tt as IPRedirect,Vr as ImageOverlayShelf,Lt as ImageTextFeature,Or as ImageTextOverlay,Wt as ImageWithText,kt as Ksp,E as Marquee,Y as MarqueeImageContent,U as MarqueeItem,W as MarqueeReview,J as MarqueeTextContent,wr as MediaEndorsement,k as MediaPlayerBase,q as MediaPlayerMulti,L as MediaPlayerSticky,tr as MediaSceneSwitcher,ar as MediaSceneSwitcherV2,gr as MediaShelf,n as MemberEquity,Nr as MiniCart,Rr as MiniCartCircleProgress,Kr as MiniCartDialog,_r as MiniCartDialogComponent,X as MultiLayoutGraphicBlock,e as PAYLOAD_COMPONENT_MAP,pt as PaidShipping,De as ProductActions,Ye as ProductBanner,we as ProductBenefits,Ae as ProductBenefitsTabs,Ke as ProductBundle,Ge as ProductCard,bt as ProductCompare,ze as ProductCoupon,et as ProductDetail,Ne as ProductExchangePurchase,Oe as ProductFreeGift,Ze as ProductGallery,Qe as ProductGridBox,Xt as ProductHero,Ve as ProductHighlight,Ft as ProductLottery,sr as ProductNav,Re as ProductOptions,ft as ProductPaidShipping,rt as ProductSummary,lr as PromotionalBar,Ie as PurchaseBar,jr as SceneProductCard,Ir as SceneShelf,Fr as SceneShelfV2,Gr as SceneShelfV2ProductCard,Ar as SceneShelfV3,ie as SearchPage,fe as SearchPageTabType,xr as SecondaryBanner,St as SelectStore,g as ShelfDisplay,x as Slogan,P as Spacer,Ce as Specs,$t as SpecsComparison,Me as TabGroup,Ut as TabWithImage,me as Tabs,_t as TabsWithMedia,ir as ThreeDCarousel,y as Title,Ht as VideoFeature,jt as WheelLottery,H as WhyChoose,ce as withLayout};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/biz-components/index.ts"],
|
|
4
|
-
"sourcesContent": ["export { default as ActivitySchedule } from './ActivitySchedule/index.js'\nexport type { ActivityScheduleProps, ActivityScheduleData, ActivityScheduleItem } from './ActivitySchedule/types.js'\nexport { default as GiftShelf } from './GiftShelf/index.js'\nexport type {\n GiftShelfProps,\n GiftShelfData,\n GiftShelfItem,\n CountdownConfig,\n ResponsiveBackgroundImage as GiftShelfResponsiveBackgroundImage,\n} from './GiftShelf/types.js'\nexport { default as GiftTierShelf } from './GiftTierShelf/index.js'\nexport type { GiftTierShelfProps, GiftTierShelfData, GiftTierItem, GiftTierProduct } from './GiftTierShelf/types.js'\nexport { default as ActivityMechanism } from './ActivityMechanism/index.js'\nexport type {\n ActivityMechanismProps,\n ActivityMechanismItem,\n ActivityMechanismSemanticName,\n ResponsiveBackgroundImage,\n} from './ActivityMechanism/types.js'\nexport { default as BrandEquity } from './BrandEquity/index.js'\nexport { default as MemberEquity } from './MemberEquity/index.js'\nexport { default as Slogan } from './Slogan/index.js'\nexport { default as Title } from './Title/index.js'\nexport { default as Spacer } from './Spacer/index.js'\nexport { default as ShelfDisplay } from './ShelfDisplay/index.js'\nexport { default as Evaluate } from './Evaluate/index.js'\nexport { default as Category } from './Category/index.js'\nexport { default as HeroBanner } from './HeroBanner/index.js'\nexport { default as AccordionCards } from './AccordionCards/index.js'\nexport { default as Graphic } from './Graphic/index.js'\nexport { default as MediaPlayerBase } from './MediaPlayerBase/index.js'\nexport { default as MediaPlayerSticky } from './MediaPlayerSticky/index.js'\nexport { default as MediaPlayerMulti } from './MediaPlayerMulti/index.js'\nexport { default as Marquee } from './Marquee/index.js'\nexport { default as MarqueeReview } from './MarqueeReview/index.js'\nexport type { MarqueeReviewProps, MarqueeReviewData, ReviewItem } from './MarqueeReview/index.js'\nexport { default as WhyChoose } from './WhyChoose/index.js'\nexport { default as Faq } from './Faq/index.js'\nexport { MarqueeItem, MarqueeImageContent, MarqueeTextContent } from './Marquee/index.js'\nexport { default as MultiLayoutGraphicBlock } from './MultiLayoutGraphicBlock/index.js'\nexport type { MultiLayoutGraphicBlockProps } from './MultiLayoutGraphicBlock/index.js'\nexport { default as GraphicAttractionBlock } from './GraphicAttractionBlock/index.js'\nexport type { GraphicAttractionBlockProps } from './GraphicAttractionBlock/index.js'\nexport { default as HeaderNavigation } from './HeaderNavigation/index.js'\nexport { default as FooterNavigation } from './FooterNavigation/index.js'\nexport { default as SearchPage } from './SearchPage/index.js'\nexport type { SearchPageProps } from './SearchPage/types.js'\nexport { IPC_SEARCH_PAGE, SearchPageTabType } from './SearchPage/types.js'\n\nexport { withLayout } from '../shared/Styles.js'\nexport { default as AiuiProvider } from './AiuiProvider/index.js'\nexport { default as Tabs } from './Tabs/index.js'\nexport { default as CreativeModule } from './CreativeModule/index.js'\nexport { default as GraphicOverlay } from './GraphicOverlay/index.js'\nexport { default as Specs } from './Specs/index.js'\nexport { default as TabGroup } from './TabsGroup/index.js'\n\nexport { default as BizProductProvider } from './Listing/BizProductProvider.js'\nexport { default as PurchaseBar } from './Listing/components/PurchaseBar/index.js'\nexport { default as ProductActions } from './Listing/components/PurchaseBar/ProductActions/index.js'\nexport type { ProductActionsProps } from './Listing/components/PurchaseBar/ProductActions/index.js'\nexport { default as ProductCard } from './Listing/components/ProductCard/index.js'\nexport { default as ProductBenefitsTabs } from './Listing/components/ProductCard/ProductDetail/ProductBenefitsTabs/index.js'\nexport { default as ProductBenefits } from './Listing/components/ProductCard/ProductDetail/ProductBenefits/index.js'\nexport { default as ProductHighlight } from './Listing/components/ProductCard/ProductDetail/ProductHighlight/index.js'\nexport { default as ProductFreeGift } from './Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.js'\nexport { default as ProductExchangePurchase } from './Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.js'\nexport { default as ProductOptions } from './Listing/components/ProductCard/ProductDetail/ProductOptions/index.js'\nexport { default as ProductBundle } from './Listing/components/ProductCard/ProductDetail/ProductBundle/index.js'\nexport { default as ProductCoupon } from './Listing/components/ProductCard/ProductDetail/ProductCoupon/index.js'\nexport { default as ProductBanner } from './Listing/components/ProductCard/ProductDetail/ProductBanner/index.js'\nexport { default as ProductGridBox } from './Listing/components/ProductCard/ProductGridBox.js'\nexport { default as ProductGallery } from './Listing/components/ProductCard/ProductGallery/index.js'\nexport { default as ProductDetail } from './Listing/components/ProductCard/ProductDetail/index.js'\nexport { default as ProductSummary } from './Listing/components/ProductCard/ProductSummary/index.js'\nexport { default as BenefitsTab } from './Listing/components/ProductCard/ProductDetail/BenefitsTab.js'\nexport { default as PaidShipping } from './Listing/components/PaidShipping/index.js'\nexport { default as ProductPaidShipping } from './Listing/components/ProductCard/ProductPaidShipping/index.js'\n\nexport { default as GraphicMore } from './GraphicMore/index.js'\nexport { default as Features } from './Features/index.js'\nexport { default as AplusDesc } from './AplusDesc/index.js'\nexport { default as GiftBox } from './GiftBox/index.js'\nexport { default as SelectStore } from './SelectStore/index.js'\nexport { default as DownLoad } from './DownLoad/index.js'\nexport { default as FootCharger } from './FootCharger/index.js'\nexport { default as BrandCardLink } from './BrandCardLink/index.js'\nexport type { BrandCardLinkProps, BrandCardLinkItemProps } from './BrandCardLink/types.js'\n\nexport * as IPRedirect from './IPRedirect/index.js'\n\nexport { default as WheelLottery } from './WheelLottery/index.js'\nexport type {\n WheelLotteryProps,\n WheelLotteryHandle,\n Prize,\n ChanceMethod,\n WinningInfo,\n UserData,\n} from './WheelLottery/types.js'\nexport { default as ProductLottery } from './ProductLottery/index.js'\nexport type { ProductLotteryProps, ProductLotteryHandle, MediaConfig, CtaButtonConfig } from './ProductLottery/types.js'\nexport { default as ProductCompare } from './ProductCompare/index.js'\nexport type { ProductCompareProps, ProductItemData } from './ProductCompare/index.js'\nexport { default as Ksp } from './Ksp/index.js'\nexport type { KspProps, KspData, KspCardItem } from './Ksp/index.js'\nexport { default as ImageTextFeature } from './ImageTextFeature/index.js'\nexport type { ImageTextFeatureProps, ImageTextFeatureItem } from './ImageTextFeature/index.js'\nexport { default as FeatureCards } from './FeatureCards/index.js'\nexport type { FeatureCardsProps, FeatureCardItem } from './FeatureCards/index.js'\nexport { default as FeaturedBlogPosts } from './FeaturedBlogPosts/index.js'\nexport type {\n FeaturedBlogPostsProps,\n FeaturedBlogPostsData,\n FeaturedBlogPostItem,\n FeaturedBlogPostSpan,\n} from './FeaturedBlogPosts/index.js'\nexport { default as ImageWithText } from './ImageWithText/index.js'\nexport type { ImageWithTextProps } from './ImageWithText/index.js'\nexport { default as VideoFeature } from './VideoFeature/index.js'\nexport type { VideoFeatureProps } from './VideoFeature/index.js'\nexport { default as TabsWithMedia } from './TabsWithMedia/index.js'\nexport type { TabsWithMediaProps, TabItem, TimeIndex } from './TabsWithMedia/index.js'\nexport { default as TabWithImage } from './TabWithImage/index.js'\nexport type { TabWithImageProps, TabWithImageDataItem } from './TabWithImage/index.js'\nexport { default as FeatureShowcase } from './FeatureShowcase/index.js'\nexport type { FeatureShowcaseProps, FeatureShowcaseItem } from './FeatureShowcase/index.js'\nexport { default as ProductHero } from './ProductHero/index.js'\nexport type { ProductHeroProps } from './ProductHero/index.js'\nexport { default as SpecsComparison } from './SpecsComparison/index.js'\nexport type {\n SpecsComparisonProps,\n SpecsComparisonMenuItem,\n SpecsComparisonLeftMenuItem,\n} from './SpecsComparison/index.js'\nexport { default as MediaSceneSwitcher } from './MediaSceneSwitcher/index.js'\nexport type { MediaSceneSwitcherProps } from './MediaSceneSwitcher/types.js'\nexport { default as MediaSceneSwitcherV2 } from './MediaSceneSwitcherV2/index.js'\nexport type {\n MediaSceneSwitcherV2Props,\n MediaSceneSwitcherV2Data,\n MediaSceneSwitcherV2Item,\n MediaSceneSwitcherV2Layout,\n} from './MediaSceneSwitcherV2/index.js'\nexport { default as ThreeDCarousel } from './ThreeDCarousel/index.js'\nexport type { ThreeDCarouselProps } from './ThreeDCarousel/index.js'\nexport { default as ProductNav } from './ProductNav/index.js'\nexport type { ProductNavProps, TabLink, AnchorItem, BuyButton } from './ProductNav/index.js'\nexport { default as AnchorNavigation } from './AnchorNavigation/index.js'\nexport { default as PromotionalBar } from './PromotionalBar/index.js'\nexport { default as EventSchedule } from './EventSchedule/index.js'\nexport { default as SecondaryBanner } from './SecondaryBanner/index.js'\nexport { default as BuyOneGetOneShelf } from './BuyOneGetOneShelf/index.js'\nexport { default as ActiveShelf } from './ActiveShelf/index.js'\nexport { default as MediaShelf } from './MediaShelf/index.js'\nexport { default as CreditsShelf, CreditsProductCard } from './CreditsShelf/index.js'\nexport type {\n CreditsShelfSemanticName,\n CreditsProductCardData,\n CopyConfig as CreditsShelfCopyConfig,\n ButtonFunctionType as CreditsShelfButtonFunctionType,\n} from './CreditsShelf/index.js'\nexport { default as SceneShelf, SceneProductCard } from './SceneShelf/index.js'\nexport type { SceneShelfSemanticName, SceneProductCardData, SceneProductCardSemanticName } from './SceneShelf/index.js'\n\nexport { default as MediaEndorsement } from './MediaEndorsement/index.js'\nexport type {\n MediaEndorsementProps,\n MediaEndorsementData,\n MediaEndorsementItem,\n MediaEndorsementSemanticName,\n} from './MediaEndorsement/index.js'\n\n// Copy configuration types and defaults\nexport type {\n CopyConfig as MediaShelfCopyConfig,\n ButtonFunctionType as MediaShelfButtonFunctionType,\n} from './MediaShelf/types.js'\nexport type { CopyConfig as ActiveShelfCopyConfig, ButtonFunctionType } from './ActiveShelf/types.js'\n\nexport {\n default as ImageOverlayShelf,\n type ButtonFunctionType as ImageOverlayShelfButtonFunctionType,\n} from './ImageOverlayShelf/index.js'\n\n// MiniCart \u7EC4\u4EF6\u53CA\u7C7B\u578B\u5BFC\u51FA\nexport { default as MiniCart } from './MiniCart/index.js'\nexport type { Cart, CartLineItem, MiniCartData, MiniCartProps, CircleProgressConfig } from './MiniCart/index.js'\nexport { default as MiniCartCircleProgress } from './MiniCart/CircleProgress.js'\nexport type { CircleProgressProps as MiniCartCircleProgressProps } from './MiniCart/CircleProgress.js'\nexport { default as MiniCartDialog, MiniCartDialog as MiniCartDialogComponent } from './MiniCart/MiniCartDialog.js'\nexport type {\n MiniCartDialogProps,\n MiniCartDialogCopy,\n MiniCartDialogSemanticName,\n CartData,\n} from './MiniCart/MiniCartDialog.js'\n\n/**\n * \u7EC4\u4EF6\u6620\u5C04\u5BF9\u8C61\n */\n\nexport const PAYLOAD_COMPONENT_MAP = {\n 'ipc-accordioncards': 'AccordionCards',\n 'ipc-aplusdesc': 'AplusDesc',\n 'ipc-banner': 'HeroBanner',\n 'ipc-brand-equity': 'BrandEquity',\n 'ipc-category': 'Category',\n 'ipc-collection-banner': 'CollectionBanner',\n 'ipc-collection-shelves': 'CollectionShelves',\n 'ipc-creativemodule': 'CreativeModule',\n 'ipc-download': 'DownLoad',\n 'ipc-evaluate': 'Evaluate',\n 'ipc-faq': 'Faq',\n 'ipc-features': 'Features',\n 'ipc-footcharger': 'FootCharger',\n 'ipc-ga-block': 'GraphicAttractionBlock',\n 'ipc-giftbox': 'GiftBox',\n 'ipc-giftshelf': 'GiftShelf',\n 'ipc-graphic': 'Graphic',\n 'ipc-graphicmore': 'GraphicMore',\n 'ipc-graphicoverlay': 'GraphicOverlay',\n 'ipc-marquee': 'Marquee',\n 'ipc-mediaplayerbase': 'MediaPlayerBase',\n 'ipc-mediaplayermulti': 'MediaPlayerMulti',\n 'ipc-mediaplayersticky': 'MediaPlayerSticky',\n 'ipc-member-equity': 'MemberEquity',\n 'ipc-mlg-block': 'MultiLayoutGraphicBlock',\n 'ipc-search-page-tabs': 'SearchPageBlock',\n 'ipc-selectstore': 'SelectStore',\n 'ipc-shelfdisplay': 'ShelfDisplay',\n 'ipc-slogan': 'Slogan',\n 'ipc-spacer': 'Spacer',\n 'ipc-specs': 'Specs',\n 'ipc-tabs': 'TabsBlock',\n 'ipc-text-marquee': 'TextMarquee',\n 'ipc-title': 'Title',\n 'ipc-whychoose': 'WhyChoose',\n 'ipc-product-nav': 'ProductNav',\n 'ipc-brand-card-link': 'BrandCardLink',\n 'ipc-ipredirect': 'IPRedirect',\n ksp: 'Ksp',\n 'ipc-secondary-banner': 'SecondaryBanner',\n /**\n * \u6D3B\u52A8\u8D27\u67B6\n */\n 'ipc-active-shelf': 'ActiveShelf',\n 'ipc-media-shelf': 'MediaShelf',\n /**\n * \u6D3B\u52A8\u4E70\u8D60\u8D27\u67B6\n */\n 'ipc-bogo-shelf': 'BuyOneGetOneShelf',\n 'ipc-media-endorsement': 'MediaEndorsement',\n 'ipc-media-scene-switcher-v2': 'MediaSceneSwitcherV2',\n 'ipc-featured-blog-posts': 'FeaturedBlogPosts',\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
6
|
-
"names": ["default", "MarqueeItem", "MarqueeImageContent", "MarqueeTextContent", "IPC_SEARCH_PAGE", "SearchPageTabType", "withLayout", "IPRedirect", "CreditsProductCard", "SceneProductCard", "MiniCartDialog", "PAYLOAD_COMPONENT_MAP"]
|
|
4
|
+
"sourcesContent": ["export { default as ActivitySchedule } from './ActivitySchedule/index.js'\nexport type { ActivityScheduleProps, ActivityScheduleData, ActivityScheduleItem } from './ActivitySchedule/types.js'\nexport { default as GiftShelf } from './GiftShelf/index.js'\nexport type {\n GiftShelfProps,\n GiftShelfData,\n GiftShelfItem,\n CountdownConfig,\n ResponsiveBackgroundImage as GiftShelfResponsiveBackgroundImage,\n} from './GiftShelf/types.js'\nexport { default as GiftTierShelf } from './GiftTierShelf/index.js'\nexport type { GiftTierShelfProps, GiftTierShelfData, GiftTierItem, GiftTierProduct } from './GiftTierShelf/types.js'\nexport { default as ActivityMechanism } from './ActivityMechanism/index.js'\nexport type {\n ActivityMechanismProps,\n ActivityMechanismItem,\n ActivityMechanismSemanticName,\n ResponsiveBackgroundImage,\n} from './ActivityMechanism/types.js'\nexport { default as BrandEquity } from './BrandEquity/index.js'\nexport { default as MemberEquity } from './MemberEquity/index.js'\nexport { default as Slogan } from './Slogan/index.js'\nexport { default as Title } from './Title/index.js'\nexport { default as Spacer } from './Spacer/index.js'\nexport { default as ShelfDisplay } from './ShelfDisplay/index.js'\nexport { default as Evaluate } from './Evaluate/index.js'\nexport { default as Category } from './Category/index.js'\nexport { default as HeroBanner } from './HeroBanner/index.js'\nexport { default as AccordionCards } from './AccordionCards/index.js'\nexport { default as Graphic } from './Graphic/index.js'\nexport { default as MediaPlayerBase } from './MediaPlayerBase/index.js'\nexport { default as MediaPlayerSticky } from './MediaPlayerSticky/index.js'\nexport { default as MediaPlayerMulti } from './MediaPlayerMulti/index.js'\nexport { default as Marquee } from './Marquee/index.js'\nexport { default as MarqueeReview } from './MarqueeReview/index.js'\nexport type { MarqueeReviewProps, MarqueeReviewData, ReviewItem } from './MarqueeReview/index.js'\nexport { default as WhyChoose } from './WhyChoose/index.js'\nexport { default as Faq } from './Faq/index.js'\nexport { MarqueeItem, MarqueeImageContent, MarqueeTextContent } from './Marquee/index.js'\nexport { default as MultiLayoutGraphicBlock } from './MultiLayoutGraphicBlock/index.js'\nexport type { MultiLayoutGraphicBlockProps } from './MultiLayoutGraphicBlock/index.js'\nexport { default as GraphicAttractionBlock } from './GraphicAttractionBlock/index.js'\nexport type { GraphicAttractionBlockProps } from './GraphicAttractionBlock/index.js'\nexport { default as HeaderNavigation } from './HeaderNavigation/index.js'\nexport { default as FooterNavigation } from './FooterNavigation/index.js'\nexport { default as SearchPage } from './SearchPage/index.js'\nexport type { SearchPageProps } from './SearchPage/types.js'\nexport { IPC_SEARCH_PAGE, SearchPageTabType } from './SearchPage/types.js'\n\nexport { withLayout } from '../shared/Styles.js'\nexport { default as AiuiProvider } from './AiuiProvider/index.js'\nexport { default as Tabs } from './Tabs/index.js'\nexport { default as CreativeModule } from './CreativeModule/index.js'\nexport { default as GraphicOverlay } from './GraphicOverlay/index.js'\nexport { default as Specs } from './Specs/index.js'\nexport { default as TabGroup } from './TabsGroup/index.js'\n\nexport { default as BizProductProvider } from './Listing/BizProductProvider.js'\nexport { default as PurchaseBar } from './Listing/components/PurchaseBar/index.js'\nexport { default as ProductActions } from './Listing/components/PurchaseBar/ProductActions/index.js'\nexport type { ProductActionsProps } from './Listing/components/PurchaseBar/ProductActions/index.js'\nexport { default as ProductCard } from './Listing/components/ProductCard/index.js'\nexport { default as ProductBenefitsTabs } from './Listing/components/ProductCard/ProductDetail/ProductBenefitsTabs/index.js'\nexport { default as ProductBenefits } from './Listing/components/ProductCard/ProductDetail/ProductBenefits/index.js'\nexport { default as ProductHighlight } from './Listing/components/ProductCard/ProductDetail/ProductHighlight/index.js'\nexport { default as ProductFreeGift } from './Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.js'\nexport { default as ProductExchangePurchase } from './Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.js'\nexport { default as ProductOptions } from './Listing/components/ProductCard/ProductDetail/ProductOptions/index.js'\nexport { default as ProductBundle } from './Listing/components/ProductCard/ProductDetail/ProductBundle/index.js'\nexport { default as ProductCoupon } from './Listing/components/ProductCard/ProductDetail/ProductCoupon/index.js'\nexport { default as ProductBanner } from './Listing/components/ProductCard/ProductDetail/ProductBanner/index.js'\nexport { default as ProductGridBox } from './Listing/components/ProductCard/ProductGridBox.js'\nexport { default as ProductGallery } from './Listing/components/ProductCard/ProductGallery/index.js'\nexport { default as ProductDetail } from './Listing/components/ProductCard/ProductDetail/index.js'\nexport { default as ProductSummary } from './Listing/components/ProductCard/ProductSummary/index.js'\nexport { default as BenefitsTab } from './Listing/components/ProductCard/ProductDetail/BenefitsTab.js'\nexport { default as PaidShipping } from './Listing/components/PaidShipping/index.js'\nexport { default as ProductPaidShipping } from './Listing/components/ProductCard/ProductPaidShipping/index.js'\n\nexport { default as GraphicMore } from './GraphicMore/index.js'\nexport { default as Features } from './Features/index.js'\nexport { default as AplusDesc } from './AplusDesc/index.js'\nexport { default as GiftBox } from './GiftBox/index.js'\nexport { default as SelectStore } from './SelectStore/index.js'\nexport { default as DownLoad } from './DownLoad/index.js'\nexport { default as FootCharger } from './FootCharger/index.js'\nexport { default as BrandCardLink } from './BrandCardLink/index.js'\nexport type { BrandCardLinkProps, BrandCardLinkItemProps } from './BrandCardLink/types.js'\n\nexport * as IPRedirect from './IPRedirect/index.js'\n\nexport { default as WheelLottery } from './WheelLottery/index.js'\nexport type {\n WheelLotteryProps,\n WheelLotteryHandle,\n Prize,\n ChanceMethod,\n WinningInfo,\n UserData,\n} from './WheelLottery/types.js'\nexport { default as ProductLottery } from './ProductLottery/index.js'\nexport type { ProductLotteryProps, ProductLotteryHandle, MediaConfig, CtaButtonConfig } from './ProductLottery/types.js'\nexport { default as ProductCompare } from './ProductCompare/index.js'\nexport type { ProductCompareProps, ProductItemData } from './ProductCompare/index.js'\nexport { default as Ksp } from './Ksp/index.js'\nexport type { KspProps, KspData, KspCardItem } from './Ksp/index.js'\nexport { default as ImageTextFeature } from './ImageTextFeature/index.js'\nexport type { ImageTextFeatureProps, ImageTextFeatureItem } from './ImageTextFeature/index.js'\nexport { default as FeatureCards } from './FeatureCards/index.js'\nexport type { FeatureCardsProps, FeatureCardItem } from './FeatureCards/index.js'\nexport { default as FeaturedBlogPosts } from './FeaturedBlogPosts/index.js'\nexport type {\n FeaturedBlogPostsProps,\n FeaturedBlogPostsData,\n FeaturedBlogPostItem,\n FeaturedBlogPostSpan,\n} from './FeaturedBlogPosts/index.js'\nexport { default as ImageWithText } from './ImageWithText/index.js'\nexport type { ImageWithTextProps } from './ImageWithText/index.js'\nexport { default as VideoFeature } from './VideoFeature/index.js'\nexport type { VideoFeatureProps } from './VideoFeature/index.js'\nexport { default as TabsWithMedia } from './TabsWithMedia/index.js'\nexport type { TabsWithMediaProps, TabItem, TimeIndex } from './TabsWithMedia/index.js'\nexport { default as TabWithImage } from './TabWithImage/index.js'\nexport type { TabWithImageProps, TabWithImageDataItem } from './TabWithImage/index.js'\nexport { default as FeatureShowcase } from './FeatureShowcase/index.js'\nexport type { FeatureShowcaseProps, FeatureShowcaseItem } from './FeatureShowcase/index.js'\nexport { default as ProductHero } from './ProductHero/index.js'\nexport type { ProductHeroProps } from './ProductHero/index.js'\nexport { default as SpecsComparison } from './SpecsComparison/index.js'\nexport type {\n SpecsComparisonProps,\n SpecsComparisonMenuItem,\n SpecsComparisonLeftMenuItem,\n} from './SpecsComparison/index.js'\nexport { default as MediaSceneSwitcher } from './MediaSceneSwitcher/index.js'\nexport type { MediaSceneSwitcherProps } from './MediaSceneSwitcher/types.js'\nexport { default as MediaSceneSwitcherV2 } from './MediaSceneSwitcherV2/index.js'\nexport type {\n MediaSceneSwitcherV2Props,\n MediaSceneSwitcherV2Data,\n MediaSceneSwitcherV2Item,\n MediaSceneSwitcherV2Layout,\n} from './MediaSceneSwitcherV2/index.js'\nexport { default as ThreeDCarousel } from './ThreeDCarousel/index.js'\nexport type { ThreeDCarouselProps } from './ThreeDCarousel/index.js'\nexport { default as ProductNav } from './ProductNav/index.js'\nexport type { ProductNavProps, TabLink, AnchorItem, BuyButton } from './ProductNav/index.js'\nexport { default as AnchorNavigation } from './AnchorNavigation/index.js'\nexport { default as PromotionalBar } from './PromotionalBar/index.js'\nexport { default as EventSchedule } from './EventSchedule/index.js'\nexport { default as SecondaryBanner } from './SecondaryBanner/index.js'\nexport { default as BuyOneGetOneShelf } from './BuyOneGetOneShelf/index.js'\nexport { default as ActiveShelf } from './ActiveShelf/index.js'\nexport { default as MediaShelf } from './MediaShelf/index.js'\nexport { default as CreditsShelf, CreditsProductCard } from './CreditsShelf/index.js'\nexport type {\n CreditsShelfSemanticName,\n CreditsProductCardData,\n CopyConfig as CreditsShelfCopyConfig,\n ButtonFunctionType as CreditsShelfButtonFunctionType,\n} from './CreditsShelf/index.js'\nexport { default as SceneShelf, SceneProductCard } from './SceneShelf/index.js'\nexport type { SceneShelfSemanticName, SceneProductCardData, SceneProductCardSemanticName } from './SceneShelf/index.js'\nexport { default as SceneShelfV2, SceneShelfV2ProductCard } from './SceneShelfV2/index.js'\nexport type {\n SceneShelfV2SemanticName,\n SceneShelfV2Data,\n SceneShelfV2Product,\n SceneShelfV2Props,\n} from './SceneShelfV2/index.js'\nexport { default as SceneShelfV3 } from './SceneShelfV3/index.js'\nexport type { SceneShelfV3Data, SceneShelfV3Props, ProductTab as SceneShelfV3ProductTab } from './SceneShelfV3/index.js'\nexport type {\n SceneShelfV3SemanticName,\n ProductCardData as SceneShelfV3ProductCardData,\n} from './SceneShelfV3/ProductCard.js'\n\nexport { default as MediaEndorsement } from './MediaEndorsement/index.js'\nexport type {\n MediaEndorsementProps,\n MediaEndorsementData,\n MediaEndorsementItem,\n MediaEndorsementSemanticName,\n} from './MediaEndorsement/index.js'\n\n// Copy configuration types and defaults\nexport type {\n CopyConfig as MediaShelfCopyConfig,\n ButtonFunctionType as MediaShelfButtonFunctionType,\n} from './MediaShelf/types.js'\nexport type { CopyConfig as ActiveShelfCopyConfig, ButtonFunctionType } from './ActiveShelf/types.js'\n\nexport {\n default as ImageOverlayShelf,\n type ButtonFunctionType as ImageOverlayShelfButtonFunctionType,\n} from './ImageOverlayShelf/index.js'\n\nexport { default as ImageTextOverlay } from './ImageTextOverlay/index.js'\nexport type {\n ImageTextOverlayProps,\n ImageTextOverlayData,\n ImageTextOverlayItem,\n ImageTextOverlaySemanticName,\n ImageTextOverlayBackgroundImage,\n} from './ImageTextOverlay/types.js'\n\n// MiniCart \u7EC4\u4EF6\u53CA\u7C7B\u578B\u5BFC\u51FA\nexport { default as MiniCart } from './MiniCart/index.js'\nexport type { Cart, CartLineItem, MiniCartData, MiniCartProps, CircleProgressConfig } from './MiniCart/index.js'\nexport { default as MiniCartCircleProgress } from './MiniCart/CircleProgress.js'\nexport type { CircleProgressProps as MiniCartCircleProgressProps } from './MiniCart/CircleProgress.js'\nexport { default as MiniCartDialog, MiniCartDialog as MiniCartDialogComponent } from './MiniCart/MiniCartDialog.js'\nexport type {\n MiniCartDialogProps,\n MiniCartDialogCopy,\n MiniCartDialogSemanticName,\n CartData,\n} from './MiniCart/MiniCartDialog.js'\n\n/**\n * \u7EC4\u4EF6\u6620\u5C04\u5BF9\u8C61\n */\n\nexport const PAYLOAD_COMPONENT_MAP = {\n 'ipc-accordioncards': 'AccordionCards',\n 'ipc-aplusdesc': 'AplusDesc',\n 'ipc-banner': 'HeroBanner',\n 'ipc-brand-equity': 'BrandEquity',\n 'ipc-category': 'Category',\n 'ipc-collection-banner': 'CollectionBanner',\n 'ipc-collection-shelves': 'CollectionShelves',\n 'ipc-creativemodule': 'CreativeModule',\n 'ipc-download': 'DownLoad',\n 'ipc-evaluate': 'Evaluate',\n 'ipc-faq': 'Faq',\n 'ipc-features': 'Features',\n 'ipc-footcharger': 'FootCharger',\n 'ipc-ga-block': 'GraphicAttractionBlock',\n 'ipc-giftbox': 'GiftBox',\n 'ipc-giftshelf': 'GiftShelf',\n 'ipc-graphic': 'Graphic',\n 'ipc-graphicmore': 'GraphicMore',\n 'ipc-graphicoverlay': 'GraphicOverlay',\n 'ipc-marquee': 'Marquee',\n 'ipc-mediaplayerbase': 'MediaPlayerBase',\n 'ipc-mediaplayermulti': 'MediaPlayerMulti',\n 'ipc-mediaplayersticky': 'MediaPlayerSticky',\n 'ipc-member-equity': 'MemberEquity',\n 'ipc-mlg-block': 'MultiLayoutGraphicBlock',\n 'ipc-search-page-tabs': 'SearchPageBlock',\n 'ipc-selectstore': 'SelectStore',\n 'ipc-shelfdisplay': 'ShelfDisplay',\n 'ipc-slogan': 'Slogan',\n 'ipc-spacer': 'Spacer',\n 'ipc-specs': 'Specs',\n 'ipc-tabs': 'TabsBlock',\n 'ipc-text-marquee': 'TextMarquee',\n 'ipc-title': 'Title',\n 'ipc-whychoose': 'WhyChoose',\n 'ipc-product-nav': 'ProductNav',\n 'ipc-brand-card-link': 'BrandCardLink',\n 'ipc-ipredirect': 'IPRedirect',\n ksp: 'Ksp',\n 'ipc-secondary-banner': 'SecondaryBanner',\n /**\n * \u6D3B\u52A8\u8D27\u67B6\n */\n 'ipc-active-shelf': 'ActiveShelf',\n 'ipc-media-shelf': 'MediaShelf',\n /**\n * \u6D3B\u52A8\u4E70\u8D60\u8D27\u67B6\n */\n 'ipc-bogo-shelf': 'BuyOneGetOneShelf',\n 'ipc-media-endorsement': 'MediaEndorsement',\n 'ipc-media-scene-switcher-v2': 'MediaSceneSwitcherV2',\n 'ipc-featured-blog-posts': 'FeaturedBlogPosts',\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["default", "MarqueeItem", "MarqueeImageContent", "MarqueeTextContent", "IPC_SEARCH_PAGE", "SearchPageTabType", "withLayout", "IPRedirect", "CreditsProductCard", "SceneProductCard", "SceneShelfV2ProductCard", "MiniCartDialog", "PAYLOAD_COMPONENT_MAP"]
|
|
7
7
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { type RefObject } from 'react';
|
|
2
|
+
import type { SerializedEditorState } from '@payloadcms/richtext-lexical/lexical';
|
|
2
3
|
interface ExposureOptions {
|
|
3
4
|
componentType: string;
|
|
4
5
|
componentName: string;
|
|
5
|
-
componentTitle?: string;
|
|
6
|
-
componentDescription?: string;
|
|
6
|
+
componentTitle?: string | SerializedEditorState;
|
|
7
|
+
componentDescription?: string | SerializedEditorState;
|
|
7
8
|
navigation?: string;
|
|
8
9
|
pageGroup?: string;
|
|
9
10
|
position?: number;
|
|
10
11
|
}
|
|
11
|
-
export declare const useExposure: (ref: RefObject<
|
|
12
|
+
export declare const useExposure: (ref: RefObject<HTMLElement>, { componentType, componentName, componentTitle, componentDescription, navigation, position }: ExposureOptions) => void;
|
|
12
13
|
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"react";import{gaTrack as
|
|
1
|
+
import{useMemo as m}from"react";import{gaTrack as d}from"../shared/track.js";import{useIntersectionObserverDelay as f}from"./useIntersectionObserver.js";import{useAiuiContext as x}from"../biz-components/AiuiProvider/index.js";import{convertLexicalToPlaintext as l}from"@payloadcms/richtext-lexical/plaintext";const S=(u,{componentType:o,componentName:r,componentTitle:e,componentDescription:t,navigation:i="",position:a=1})=>{const{trackingData:g,onExposure:n}=x(),p=m(()=>typeof e=="object"&&e!==null?l({data:e}):e,[e]),s=m(()=>typeof t=="object"&&t!==null?l({data:t}):t,[t]);f(u,{once:!0,threshold:.5,delay:2e3,callback:()=>{const c=g.pageGroup||"Home Page";n?n({componentType:o,componentName:r,componentTitle:p,componentDescription:s,navigation:i,pageGroup:c,position:a}):d({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:c,component_type:o,component_name:r,position:a,creative_id:"",component_title:p,component_description:s,navigation:i}})}})};export{S as useExposure};
|
|
2
2
|
//# sourceMappingURL=useExposure.js.map
|