@anker-in/headless-ui 1.1.32 → 1.1.34-alpha.1768461697532
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 +3 -3
- package/dist/cjs/biz-components/ActiveShelf/index.d.ts +222 -0
- package/dist/cjs/biz-components/ActiveShelf/index.js +2 -0
- package/dist/cjs/biz-components/ActiveShelf/index.js.map +7 -0
- package/dist/cjs/biz-components/ActiveShelf/types.d.ts +22 -0
- package/dist/cjs/biz-components/ActiveShelf/types.js +2 -0
- package/dist/cjs/biz-components/ActiveShelf/types.js.map +7 -0
- package/dist/cjs/biz-components/AiuiProvider/index.d.ts +7 -0
- package/dist/cjs/biz-components/AiuiProvider/index.js +1 -1
- package/dist/cjs/biz-components/AiuiProvider/index.js.map +2 -2
- package/dist/cjs/biz-components/AnchorNavigation/index.d.ts +42 -0
- package/dist/cjs/biz-components/AnchorNavigation/index.js +2 -0
- package/dist/cjs/biz-components/AnchorNavigation/index.js.map +7 -0
- package/dist/cjs/biz-components/AnchorNavigation/useAnchorPosition.d.ts +2 -0
- package/dist/cjs/biz-components/AnchorNavigation/useAnchorPosition.js +2 -0
- package/dist/cjs/biz-components/AnchorNavigation/useAnchorPosition.js.map +7 -0
- package/dist/cjs/biz-components/AplusDesc/index.d.ts +3 -3
- package/dist/cjs/biz-components/BrandCardLink/BrandCardLink.d.ts +3 -3
- package/dist/cjs/biz-components/BrandCardLink/BrandCardLink.js +1 -1
- package/dist/cjs/biz-components/BrandCardLink/BrandCardLink.js.map +1 -1
- package/dist/cjs/biz-components/BrandEquity/BrandEquity.d.ts +3 -3
- 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 +1 -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/BuyOneGetOneShelf/ProductCard.d.ts +74 -0
- package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.js +2 -0
- package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.js.map +7 -0
- package/dist/cjs/biz-components/BuyOneGetOneShelf/hooks/useBogoDataTransform.d.ts +36 -0
- package/dist/cjs/biz-components/BuyOneGetOneShelf/hooks/useBogoDataTransform.js +2 -0
- package/dist/cjs/biz-components/BuyOneGetOneShelf/hooks/useBogoDataTransform.js.map +7 -0
- package/dist/cjs/biz-components/BuyOneGetOneShelf/index.d.ts +193 -0
- package/dist/cjs/biz-components/BuyOneGetOneShelf/index.js +2 -0
- package/dist/cjs/biz-components/BuyOneGetOneShelf/index.js.map +7 -0
- package/dist/cjs/biz-components/Category/index.d.ts +3 -3
- package/dist/cjs/biz-components/CreativeModule/index.d.ts +3 -3
- package/dist/cjs/biz-components/DownLoad/index.d.ts +3 -3
- package/dist/cjs/biz-components/Evaluate/index.d.ts +3 -3
- package/dist/cjs/biz-components/Evaluate/index.js +1 -1
- package/dist/cjs/biz-components/Evaluate/index.js.map +3 -3
- package/dist/cjs/biz-components/EventSchedule/index.d.ts +63 -0
- package/dist/cjs/biz-components/EventSchedule/index.js +2 -0
- package/dist/cjs/biz-components/EventSchedule/index.js.map +7 -0
- package/dist/cjs/biz-components/Faq/Faq.d.ts +3 -3
- package/dist/cjs/biz-components/FeatureCards/FeatureCards.d.ts +3 -3
- package/dist/cjs/biz-components/FeatureShowcase/FeatureShowcase.d.ts +3 -3
- package/dist/cjs/biz-components/Features/index.d.ts +3 -3
- package/dist/cjs/biz-components/FootCharger/index.d.ts +3 -3
- package/dist/cjs/biz-components/FooterNavigation/index.d.ts +3 -3
- package/dist/cjs/biz-components/GiftBox/index.d.ts +3 -3
- package/dist/cjs/biz-components/Graphic/index.d.ts +3 -3
- package/dist/cjs/biz-components/Graphic/index.js +1 -1
- package/dist/cjs/biz-components/Graphic/index.js.map +3 -3
- package/dist/cjs/biz-components/GraphicAttractionBlock/index.d.ts +3 -3
- package/dist/cjs/biz-components/GraphicMore/index.d.ts +3 -3
- package/dist/cjs/biz-components/GraphicOverlay/GraphicOverlay.d.ts +3 -3
- package/dist/cjs/biz-components/HeaderNavigation/MobileSidebarMenu.js +1 -1
- package/dist/cjs/biz-components/HeaderNavigation/MobileSidebarMenu.js.map +3 -3
- package/dist/cjs/biz-components/HeaderNavigation/SidebarDropdown.js +1 -1
- package/dist/cjs/biz-components/HeaderNavigation/SidebarDropdown.js.map +2 -2
- package/dist/cjs/biz-components/HeaderNavigation/index.d.ts +3 -3
- package/dist/cjs/biz-components/HeroBanner/Countdown.js +1 -1
- package/dist/cjs/biz-components/HeroBanner/Countdown.js.map +2 -2
- package/dist/cjs/biz-components/HeroBanner/HeroBanner.d.ts +6 -3
- 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/IPRedirect/RegionBanner.d.ts +37 -0
- package/dist/cjs/biz-components/IPRedirect/RegionBanner.js +60 -0
- package/dist/cjs/biz-components/IPRedirect/RegionBanner.js.map +7 -0
- package/dist/cjs/biz-components/IPRedirect/RegionSelectorModal.d.ts +47 -0
- package/dist/cjs/biz-components/IPRedirect/RegionSelectorModal.js +69 -0
- package/dist/cjs/biz-components/IPRedirect/RegionSelectorModal.js.map +7 -0
- package/dist/cjs/biz-components/IPRedirect/index.d.ts +9 -0
- package/dist/cjs/biz-components/IPRedirect/index.js +2 -0
- package/dist/cjs/biz-components/IPRedirect/index.js.map +7 -0
- package/dist/cjs/biz-components/IPRedirect/type.d.ts +36 -0
- package/dist/cjs/biz-components/IPRedirect/type.js +2 -0
- package/dist/cjs/biz-components/IPRedirect/type.js.map +7 -0
- package/dist/cjs/biz-components/IPRedirect/useAutoRedirect.d.ts +66 -0
- package/dist/cjs/biz-components/IPRedirect/useAutoRedirect.js +2 -0
- package/dist/cjs/biz-components/IPRedirect/useAutoRedirect.js.map +7 -0
- package/dist/cjs/biz-components/IPRedirect/useDetectedRegionRedirect.d.ts +51 -0
- package/dist/cjs/biz-components/IPRedirect/useDetectedRegionRedirect.js +2 -0
- package/dist/cjs/biz-components/IPRedirect/useDetectedRegionRedirect.js.map +7 -0
- package/dist/cjs/biz-components/IPRedirect/useIPRedirect.d.ts +42 -0
- package/dist/cjs/biz-components/IPRedirect/useIPRedirect.js +2 -0
- package/dist/cjs/biz-components/IPRedirect/useIPRedirect.js.map +7 -0
- package/dist/cjs/biz-components/IPRedirect/useRedirectBanner.d.ts +108 -0
- package/dist/cjs/biz-components/IPRedirect/useRedirectBanner.js +2 -0
- package/dist/cjs/biz-components/IPRedirect/useRedirectBanner.js.map +7 -0
- package/dist/cjs/biz-components/IPRedirect/useRegionRedirectManager.d.ts +152 -0
- package/dist/cjs/biz-components/IPRedirect/useRegionRedirectManager.js +2 -0
- package/dist/cjs/biz-components/IPRedirect/useRegionRedirectManager.js.map +7 -0
- package/dist/cjs/biz-components/IPRedirect/useSavedRegionRedirect.d.ts +51 -0
- package/dist/cjs/biz-components/IPRedirect/useSavedRegionRedirect.js +2 -0
- package/dist/cjs/biz-components/IPRedirect/useSavedRegionRedirect.js.map +7 -0
- package/dist/cjs/biz-components/IPRedirect/utils.d.ts +222 -0
- package/dist/cjs/biz-components/IPRedirect/utils.js +2 -0
- package/dist/cjs/biz-components/IPRedirect/utils.js.map +7 -0
- package/dist/cjs/biz-components/ImageOverlayShelf/index.d.ts +130 -0
- package/dist/cjs/biz-components/ImageOverlayShelf/index.js +2 -0
- package/dist/cjs/biz-components/ImageOverlayShelf/index.js.map +7 -0
- package/dist/cjs/biz-components/ImageTextFeature/ImageTextFeature.d.ts +3 -3
- package/dist/cjs/biz-components/ImageTextFeature/ImageTextFeature.js +1 -1
- package/dist/cjs/biz-components/ImageTextFeature/ImageTextFeature.js.map +3 -3
- package/dist/cjs/biz-components/ImageWithText/ImageWithText.d.ts +3 -3
- package/dist/cjs/biz-components/Ksp/index.d.ts +3 -3
- package/dist/cjs/biz-components/Listing/components/PaidShipping/index.d.ts +4 -4
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.d.ts +3 -3
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.d.ts +3 -3
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.d.ts +3 -3
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.d.ts +3 -3
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.d.ts +3 -3
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductOptions/index.d.ts +3 -3
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductGallery/index.d.ts +3 -3
- package/dist/cjs/biz-components/Listing/components/ProductCard/ProductSummary/index.d.ts +3 -3
- package/dist/cjs/biz-components/Listing/components/PurchaseBar/index.d.ts +3 -3
- package/dist/cjs/biz-components/Marquee/Marquee.d.ts +3 -3
- 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 +3 -3
- package/dist/cjs/biz-components/Media/index.d.ts +32 -0
- package/dist/cjs/biz-components/Media/index.js +2 -0
- package/dist/cjs/biz-components/Media/index.js.map +7 -0
- package/dist/cjs/biz-components/MediaPlayerBase/index.d.ts +3 -3
- package/dist/cjs/biz-components/MediaPlayerMulti/index.d.ts +3 -3
- package/dist/cjs/biz-components/MediaPlayerSticky/index.d.ts +4 -4
- package/dist/cjs/biz-components/MediaPlayerSticky/types.d.ts +1 -0
- package/dist/cjs/biz-components/MediaPlayerSticky/types.js +1 -1
- package/dist/cjs/biz-components/MediaPlayerSticky/types.js.map +1 -1
- package/dist/cjs/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.d.ts +3 -3
- package/dist/cjs/biz-components/MediaShelf/index.d.ts +216 -0
- package/dist/cjs/biz-components/MediaShelf/index.js +2 -0
- package/dist/cjs/biz-components/MediaShelf/index.js.map +7 -0
- package/dist/cjs/biz-components/MediaShelf/types.d.ts +22 -0
- package/dist/cjs/biz-components/MediaShelf/types.js +2 -0
- package/dist/cjs/biz-components/MediaShelf/types.js.map +7 -0
- package/dist/cjs/biz-components/MemberEquity/index.d.ts +3 -3
- package/dist/cjs/biz-components/MiniCart/index.d.ts +88 -0
- package/dist/cjs/biz-components/MiniCart/index.js +2 -0
- package/dist/cjs/biz-components/MiniCart/index.js.map +7 -0
- package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +3 -3
- package/dist/cjs/biz-components/ProductCompare/index.d.ts +3 -3
- package/dist/cjs/biz-components/ProductHero/ProductHero.d.ts +3 -3
- package/dist/cjs/biz-components/ProductNav/ProductNav.d.ts +3 -3
- package/dist/cjs/biz-components/PromotionalBar/index.d.ts +49 -0
- package/dist/cjs/biz-components/PromotionalBar/index.js +2 -0
- package/dist/cjs/biz-components/PromotionalBar/index.js.map +7 -0
- package/dist/cjs/biz-components/SecondaryBanner/index.d.ts +69 -0
- package/dist/cjs/biz-components/SecondaryBanner/index.js +2 -0
- package/dist/cjs/biz-components/SecondaryBanner/index.js.map +7 -0
- package/dist/cjs/biz-components/SelectStore/index.d.ts +3 -3
- package/dist/cjs/biz-components/ShelfDisplay/index.d.ts +3 -3
- package/dist/cjs/biz-components/ShelfDisplay/shelfDisplay.d.ts +0 -11
- package/dist/cjs/biz-components/ShelfDisplay/shelfDisplay.js +1 -1
- package/dist/cjs/biz-components/ShelfDisplay/shelfDisplay.js.map +3 -3
- package/dist/cjs/biz-components/Slogan/index.d.ts +3 -3
- package/dist/cjs/biz-components/Spacer/index.d.ts +3 -3
- package/dist/cjs/biz-components/Specs/index.d.ts +3 -3
- package/dist/cjs/biz-components/Specs/index.js +1 -1
- package/dist/cjs/biz-components/Specs/index.js.map +2 -2
- package/dist/cjs/biz-components/SpecsComparison/SpecsComparison.d.ts +3 -3
- package/dist/cjs/biz-components/TabWithImage/TabWithImage.d.ts +3 -3
- package/dist/cjs/biz-components/Tabs/Tabs.d.ts +3 -3
- package/dist/cjs/biz-components/TabsGroup/index.d.ts +3 -3
- package/dist/cjs/biz-components/TabsWithMedia/TabsWithMedia.d.ts +3 -3
- package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.d.ts +3 -3
- package/dist/cjs/biz-components/Title/Countdown.d.ts +14 -0
- package/dist/cjs/biz-components/Title/Countdown.js +2 -0
- package/dist/cjs/biz-components/Title/Countdown.js.map +7 -0
- package/dist/cjs/biz-components/Title/index.d.ts +3 -3
- 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 +55 -0
- 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 +3 -3
- package/dist/cjs/biz-components/WheelLottery/BaseModal.d.ts +55 -0
- package/dist/cjs/biz-components/WheelLottery/BaseModal.js +12 -0
- package/dist/cjs/biz-components/WheelLottery/BaseModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/ChanceMethods.d.ts +30 -0
- package/dist/cjs/biz-components/WheelLottery/ChanceMethods.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/ChanceMethods.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/ErrorModal.d.ts +42 -0
- package/dist/cjs/biz-components/WheelLottery/ErrorModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/ErrorModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.d.ts +91 -0
- package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/PrizePool.d.ts +26 -0
- package/dist/cjs/biz-components/WheelLottery/PrizePool.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/PrizePool.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/RulesModal.d.ts +43 -0
- package/dist/cjs/biz-components/WheelLottery/RulesModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/RulesModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/ShareModal.d.ts +74 -0
- package/dist/cjs/biz-components/WheelLottery/ShareModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/ShareModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/Wheel.d.ts +27 -0
- package/dist/cjs/biz-components/WheelLottery/Wheel.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/Wheel.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/WinnerModal.d.ts +25 -0
- package/dist/cjs/biz-components/WheelLottery/WinnerModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/WinnerModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/index.d.ts +52 -0
- package/dist/cjs/biz-components/WheelLottery/index.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/index.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/types.d.ts +1193 -0
- package/dist/cjs/biz-components/WheelLottery/types.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/types.js.map +7 -0
- package/dist/cjs/biz-components/WhyChoose/WhyChoose.d.ts +3 -3
- package/dist/cjs/biz-components/index.d.ts +30 -2
- package/dist/cjs/biz-components/index.js +1 -1
- package/dist/cjs/biz-components/index.js.map +3 -3
- package/dist/cjs/components/badge.js +1 -1
- package/dist/cjs/components/badge.js.map +2 -2
- package/dist/cjs/components/index.d.ts +2 -0
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/index.js.map +3 -3
- package/dist/cjs/components/paginator.d.ts +12 -0
- package/dist/cjs/components/paginator.js +7 -0
- package/dist/cjs/components/paginator.js.map +7 -0
- package/dist/cjs/components/progress.d.ts +46 -0
- package/dist/cjs/components/progress.js +2 -0
- package/dist/cjs/components/progress.js.map +7 -0
- package/dist/cjs/components/tabs.d.ts +2 -1
- package/dist/cjs/components/tabs.js +1 -1
- package/dist/cjs/components/tabs.js.map +2 -2
- package/dist/cjs/helpers/index.d.ts +1 -0
- package/dist/cjs/helpers/index.js +1 -1
- package/dist/cjs/helpers/index.js.map +3 -3
- package/dist/cjs/helpers/priceFormatting.d.ts +11 -0
- package/dist/cjs/helpers/priceFormatting.js +2 -0
- package/dist/cjs/helpers/priceFormatting.js.map +7 -0
- package/dist/cjs/shared/Styles.d.ts +5 -4
- package/dist/cjs/shared/Styles.js +1 -1
- package/dist/cjs/shared/Styles.js.map +3 -3
- package/dist/cjs/types/props.d.ts +0 -3
- 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 +3 -3
- package/dist/esm/biz-components/ActiveShelf/index.d.ts +222 -0
- package/dist/esm/biz-components/ActiveShelf/index.js +2 -0
- package/dist/esm/biz-components/ActiveShelf/index.js.map +7 -0
- package/dist/esm/biz-components/ActiveShelf/types.d.ts +22 -0
- package/dist/esm/biz-components/ActiveShelf/types.js +1 -0
- package/dist/esm/biz-components/ActiveShelf/types.js.map +7 -0
- package/dist/esm/biz-components/AiuiProvider/index.d.ts +7 -0
- package/dist/esm/biz-components/AiuiProvider/index.js +1 -1
- package/dist/esm/biz-components/AiuiProvider/index.js.map +2 -2
- package/dist/esm/biz-components/AnchorNavigation/index.d.ts +42 -0
- package/dist/esm/biz-components/AnchorNavigation/index.js +2 -0
- package/dist/esm/biz-components/AnchorNavigation/index.js.map +7 -0
- package/dist/esm/biz-components/AnchorNavigation/useAnchorPosition.d.ts +2 -0
- package/dist/esm/biz-components/AnchorNavigation/useAnchorPosition.js +2 -0
- package/dist/esm/biz-components/AnchorNavigation/useAnchorPosition.js.map +7 -0
- package/dist/esm/biz-components/AplusDesc/index.d.ts +3 -3
- package/dist/esm/biz-components/BrandCardLink/BrandCardLink.d.ts +3 -3
- package/dist/esm/biz-components/BrandCardLink/BrandCardLink.js +1 -1
- package/dist/esm/biz-components/BrandCardLink/BrandCardLink.js.map +1 -1
- package/dist/esm/biz-components/BrandEquity/BrandEquity.d.ts +3 -3
- 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 +1 -0
- package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.d.ts +74 -0
- package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.js +2 -0
- package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.js.map +7 -0
- package/dist/esm/biz-components/BuyOneGetOneShelf/hooks/useBogoDataTransform.d.ts +36 -0
- package/dist/esm/biz-components/BuyOneGetOneShelf/hooks/useBogoDataTransform.js +2 -0
- package/dist/esm/biz-components/BuyOneGetOneShelf/hooks/useBogoDataTransform.js.map +7 -0
- package/dist/esm/biz-components/BuyOneGetOneShelf/index.d.ts +193 -0
- package/dist/esm/biz-components/BuyOneGetOneShelf/index.js +2 -0
- package/dist/esm/biz-components/BuyOneGetOneShelf/index.js.map +7 -0
- package/dist/esm/biz-components/Category/index.d.ts +3 -3
- package/dist/esm/biz-components/CreativeModule/index.d.ts +3 -3
- package/dist/esm/biz-components/DownLoad/index.d.ts +3 -3
- package/dist/esm/biz-components/Evaluate/index.d.ts +3 -3
- package/dist/esm/biz-components/Evaluate/index.js +1 -1
- package/dist/esm/biz-components/Evaluate/index.js.map +3 -3
- package/dist/esm/biz-components/EventSchedule/index.d.ts +63 -0
- package/dist/esm/biz-components/EventSchedule/index.js +2 -0
- package/dist/esm/biz-components/EventSchedule/index.js.map +7 -0
- package/dist/esm/biz-components/Faq/Faq.d.ts +3 -3
- package/dist/esm/biz-components/FeatureCards/FeatureCards.d.ts +3 -3
- package/dist/esm/biz-components/FeatureShowcase/FeatureShowcase.d.ts +3 -3
- package/dist/esm/biz-components/Features/index.d.ts +3 -3
- package/dist/esm/biz-components/FootCharger/index.d.ts +3 -3
- package/dist/esm/biz-components/FooterNavigation/index.d.ts +3 -3
- package/dist/esm/biz-components/GiftBox/index.d.ts +3 -3
- package/dist/esm/biz-components/Graphic/index.d.ts +3 -3
- package/dist/esm/biz-components/Graphic/index.js +1 -1
- package/dist/esm/biz-components/Graphic/index.js.map +3 -3
- package/dist/esm/biz-components/GraphicAttractionBlock/index.d.ts +3 -3
- package/dist/esm/biz-components/GraphicMore/index.d.ts +3 -3
- package/dist/esm/biz-components/GraphicOverlay/GraphicOverlay.d.ts +3 -3
- package/dist/esm/biz-components/HeaderNavigation/MobileSidebarMenu.js +1 -1
- package/dist/esm/biz-components/HeaderNavigation/MobileSidebarMenu.js.map +3 -3
- package/dist/esm/biz-components/HeaderNavigation/SidebarDropdown.js +1 -1
- package/dist/esm/biz-components/HeaderNavigation/SidebarDropdown.js.map +2 -2
- package/dist/esm/biz-components/HeaderNavigation/index.d.ts +3 -3
- package/dist/esm/biz-components/HeroBanner/Countdown.js +1 -1
- package/dist/esm/biz-components/HeroBanner/Countdown.js.map +2 -2
- package/dist/esm/biz-components/HeroBanner/HeroBanner.d.ts +6 -3
- 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/IPRedirect/RegionBanner.d.ts +37 -0
- package/dist/esm/biz-components/IPRedirect/RegionBanner.js +60 -0
- package/dist/esm/biz-components/IPRedirect/RegionBanner.js.map +7 -0
- package/dist/esm/biz-components/IPRedirect/RegionSelectorModal.d.ts +47 -0
- package/dist/esm/biz-components/IPRedirect/RegionSelectorModal.js +69 -0
- package/dist/esm/biz-components/IPRedirect/RegionSelectorModal.js.map +7 -0
- package/dist/esm/biz-components/IPRedirect/index.d.ts +9 -0
- package/dist/esm/biz-components/IPRedirect/index.js +2 -0
- package/dist/esm/biz-components/IPRedirect/index.js.map +7 -0
- package/dist/esm/biz-components/IPRedirect/type.d.ts +36 -0
- package/dist/esm/biz-components/IPRedirect/type.js +1 -0
- package/dist/esm/biz-components/IPRedirect/type.js.map +7 -0
- package/dist/esm/biz-components/IPRedirect/useAutoRedirect.d.ts +66 -0
- package/dist/esm/biz-components/IPRedirect/useAutoRedirect.js +2 -0
- package/dist/esm/biz-components/IPRedirect/useAutoRedirect.js.map +7 -0
- package/dist/esm/biz-components/IPRedirect/useDetectedRegionRedirect.d.ts +51 -0
- package/dist/esm/biz-components/IPRedirect/useDetectedRegionRedirect.js +2 -0
- package/dist/esm/biz-components/IPRedirect/useDetectedRegionRedirect.js.map +7 -0
- package/dist/esm/biz-components/IPRedirect/useIPRedirect.d.ts +42 -0
- package/dist/esm/biz-components/IPRedirect/useIPRedirect.js +2 -0
- package/dist/esm/biz-components/IPRedirect/useIPRedirect.js.map +7 -0
- package/dist/esm/biz-components/IPRedirect/useRedirectBanner.d.ts +108 -0
- package/dist/esm/biz-components/IPRedirect/useRedirectBanner.js +2 -0
- package/dist/esm/biz-components/IPRedirect/useRedirectBanner.js.map +7 -0
- package/dist/esm/biz-components/IPRedirect/useRegionRedirectManager.d.ts +152 -0
- package/dist/esm/biz-components/IPRedirect/useRegionRedirectManager.js +2 -0
- package/dist/esm/biz-components/IPRedirect/useRegionRedirectManager.js.map +7 -0
- package/dist/esm/biz-components/IPRedirect/useSavedRegionRedirect.d.ts +51 -0
- package/dist/esm/biz-components/IPRedirect/useSavedRegionRedirect.js +2 -0
- package/dist/esm/biz-components/IPRedirect/useSavedRegionRedirect.js.map +7 -0
- package/dist/esm/biz-components/IPRedirect/utils.d.ts +222 -0
- package/dist/esm/biz-components/IPRedirect/utils.js +2 -0
- package/dist/esm/biz-components/IPRedirect/utils.js.map +7 -0
- package/dist/esm/biz-components/ImageOverlayShelf/index.d.ts +130 -0
- package/dist/esm/biz-components/ImageOverlayShelf/index.js +2 -0
- package/dist/esm/biz-components/ImageOverlayShelf/index.js.map +7 -0
- package/dist/esm/biz-components/ImageTextFeature/ImageTextFeature.d.ts +3 -3
- package/dist/esm/biz-components/ImageTextFeature/ImageTextFeature.js +1 -1
- package/dist/esm/biz-components/ImageTextFeature/ImageTextFeature.js.map +3 -3
- package/dist/esm/biz-components/ImageWithText/ImageWithText.d.ts +3 -3
- package/dist/esm/biz-components/Ksp/index.d.ts +3 -3
- package/dist/esm/biz-components/Listing/components/PaidShipping/index.d.ts +4 -4
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.d.ts +3 -3
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.d.ts +3 -3
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.d.ts +3 -3
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.d.ts +3 -3
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.d.ts +3 -3
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductOptions/index.d.ts +3 -3
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductGallery/index.d.ts +3 -3
- package/dist/esm/biz-components/Listing/components/ProductCard/ProductSummary/index.d.ts +3 -3
- package/dist/esm/biz-components/Listing/components/PurchaseBar/index.d.ts +3 -3
- package/dist/esm/biz-components/Marquee/Marquee.d.ts +3 -3
- package/dist/esm/biz-components/Marquee/Marquee.js +1 -1
- package/dist/esm/biz-components/Marquee/Marquee.js.map +3 -3
- package/dist/esm/biz-components/MarqueeReview/index.d.ts +3 -3
- package/dist/esm/biz-components/Media/index.d.ts +32 -0
- package/dist/esm/biz-components/Media/index.js +2 -0
- package/dist/esm/biz-components/Media/index.js.map +7 -0
- package/dist/esm/biz-components/MediaPlayerBase/index.d.ts +3 -3
- package/dist/esm/biz-components/MediaPlayerMulti/index.d.ts +3 -3
- package/dist/esm/biz-components/MediaPlayerSticky/index.d.ts +4 -4
- package/dist/esm/biz-components/MediaPlayerSticky/types.d.ts +1 -0
- package/dist/esm/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.d.ts +3 -3
- package/dist/esm/biz-components/MediaShelf/index.d.ts +216 -0
- package/dist/esm/biz-components/MediaShelf/index.js +2 -0
- package/dist/esm/biz-components/MediaShelf/index.js.map +7 -0
- package/dist/esm/biz-components/MediaShelf/types.d.ts +22 -0
- package/dist/esm/biz-components/MediaShelf/types.js +1 -0
- package/dist/esm/biz-components/MediaShelf/types.js.map +7 -0
- package/dist/esm/biz-components/MemberEquity/index.d.ts +3 -3
- package/dist/esm/biz-components/MiniCart/index.d.ts +88 -0
- package/dist/esm/biz-components/MiniCart/index.js +2 -0
- package/dist/esm/biz-components/MiniCart/index.js.map +7 -0
- package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +3 -3
- package/dist/esm/biz-components/ProductCompare/index.d.ts +3 -3
- package/dist/esm/biz-components/ProductHero/ProductHero.d.ts +3 -3
- package/dist/esm/biz-components/ProductNav/ProductNav.d.ts +3 -3
- package/dist/esm/biz-components/PromotionalBar/index.d.ts +49 -0
- package/dist/esm/biz-components/PromotionalBar/index.js +2 -0
- package/dist/esm/biz-components/PromotionalBar/index.js.map +7 -0
- package/dist/esm/biz-components/SecondaryBanner/index.d.ts +69 -0
- package/dist/esm/biz-components/SecondaryBanner/index.js +2 -0
- package/dist/esm/biz-components/SecondaryBanner/index.js.map +7 -0
- package/dist/esm/biz-components/SelectStore/index.d.ts +3 -3
- package/dist/esm/biz-components/ShelfDisplay/index.d.ts +3 -3
- package/dist/esm/biz-components/ShelfDisplay/shelfDisplay.d.ts +0 -11
- package/dist/esm/biz-components/ShelfDisplay/shelfDisplay.js +1 -1
- package/dist/esm/biz-components/ShelfDisplay/shelfDisplay.js.map +3 -3
- package/dist/esm/biz-components/Slogan/index.d.ts +3 -3
- package/dist/esm/biz-components/Spacer/index.d.ts +3 -3
- package/dist/esm/biz-components/Specs/index.d.ts +3 -3
- package/dist/esm/biz-components/Specs/index.js +1 -1
- package/dist/esm/biz-components/Specs/index.js.map +2 -2
- package/dist/esm/biz-components/SpecsComparison/SpecsComparison.d.ts +3 -3
- package/dist/esm/biz-components/TabWithImage/TabWithImage.d.ts +3 -3
- package/dist/esm/biz-components/Tabs/Tabs.d.ts +3 -3
- package/dist/esm/biz-components/TabsGroup/index.d.ts +3 -3
- package/dist/esm/biz-components/TabsWithMedia/TabsWithMedia.d.ts +3 -3
- package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.d.ts +3 -3
- package/dist/esm/biz-components/Title/Countdown.d.ts +14 -0
- package/dist/esm/biz-components/Title/Countdown.js +2 -0
- package/dist/esm/biz-components/Title/Countdown.js.map +7 -0
- package/dist/esm/biz-components/Title/index.d.ts +3 -3
- 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 +55 -0
- package/dist/esm/biz-components/VideoFeature/VideoFeature.d.ts +3 -3
- package/dist/esm/biz-components/WheelLottery/BaseModal.d.ts +55 -0
- package/dist/esm/biz-components/WheelLottery/BaseModal.js +12 -0
- package/dist/esm/biz-components/WheelLottery/BaseModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/ChanceMethods.d.ts +30 -0
- package/dist/esm/biz-components/WheelLottery/ChanceMethods.js +2 -0
- package/dist/esm/biz-components/WheelLottery/ChanceMethods.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/ErrorModal.d.ts +42 -0
- package/dist/esm/biz-components/WheelLottery/ErrorModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/ErrorModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/MyRewardsModal.d.ts +91 -0
- package/dist/esm/biz-components/WheelLottery/MyRewardsModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/MyRewardsModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/PrizePool.d.ts +26 -0
- package/dist/esm/biz-components/WheelLottery/PrizePool.js +2 -0
- package/dist/esm/biz-components/WheelLottery/PrizePool.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/RulesModal.d.ts +43 -0
- package/dist/esm/biz-components/WheelLottery/RulesModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/RulesModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/ShareModal.d.ts +74 -0
- package/dist/esm/biz-components/WheelLottery/ShareModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/ShareModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/Wheel.d.ts +27 -0
- package/dist/esm/biz-components/WheelLottery/Wheel.js +2 -0
- package/dist/esm/biz-components/WheelLottery/Wheel.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/WinnerModal.d.ts +25 -0
- package/dist/esm/biz-components/WheelLottery/WinnerModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/WinnerModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/index.d.ts +52 -0
- package/dist/esm/biz-components/WheelLottery/index.js +2 -0
- package/dist/esm/biz-components/WheelLottery/index.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/types.d.ts +1193 -0
- package/dist/esm/biz-components/WheelLottery/types.js +2 -0
- package/dist/esm/biz-components/WheelLottery/types.js.map +7 -0
- package/dist/esm/biz-components/WhyChoose/WhyChoose.d.ts +3 -3
- package/dist/esm/biz-components/index.d.ts +30 -2
- package/dist/esm/biz-components/index.js +1 -1
- package/dist/esm/biz-components/index.js.map +3 -3
- package/dist/esm/components/badge.js +1 -1
- package/dist/esm/components/badge.js.map +2 -2
- package/dist/esm/components/index.d.ts +2 -0
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/index.js.map +2 -2
- package/dist/esm/components/paginator.d.ts +12 -0
- package/dist/esm/components/paginator.js +7 -0
- package/dist/esm/components/paginator.js.map +7 -0
- package/dist/esm/components/progress.d.ts +46 -0
- package/dist/esm/components/progress.js +2 -0
- package/dist/esm/components/progress.js.map +7 -0
- package/dist/esm/components/tabs.d.ts +2 -1
- package/dist/esm/components/tabs.js +1 -1
- package/dist/esm/components/tabs.js.map +2 -2
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.js +1 -1
- package/dist/esm/helpers/index.js.map +3 -3
- package/dist/esm/helpers/priceFormatting.d.ts +11 -0
- package/dist/esm/helpers/priceFormatting.js +2 -0
- package/dist/esm/helpers/priceFormatting.js.map +7 -0
- package/dist/esm/shared/Styles.d.ts +5 -4
- package/dist/esm/shared/Styles.js +1 -1
- package/dist/esm/shared/Styles.js.map +3 -3
- package/dist/esm/types/props.d.ts +0 -3
- package/dist/tokens/base.css +4 -3
- package/dist/tokens/eufy.css +1 -0
- package/dist/tokens/soundcore.css +4 -3
- package/package.json +8 -3
- package/style.css +4915 -126
- package/tailwind.config.js +19 -2
- package/dist/cjs/stories/HeroBanner.stories.d.ts +0 -28
- package/dist/cjs/stories/HeroBanner.stories.js +0 -11
- package/dist/cjs/stories/HeroBanner.stories.js.map +0 -7
- package/dist/cjs/stories/InlineVideo.stories.d.ts +0 -37
- package/dist/cjs/stories/InlineVideo.stories.js +0 -164
- package/dist/cjs/stories/InlineVideo.stories.js.map +0 -7
- package/dist/cjs/stories/MarqueeReview.stories.d.ts +0 -72
- package/dist/cjs/stories/MarqueeReview.stories.js +0 -19
- package/dist/cjs/stories/MarqueeReview.stories.js.map +0 -7
- package/dist/cjs/stories/MediaSceneSwitcher.stories.d.ts +0 -47
- package/dist/cjs/stories/MediaSceneSwitcher.stories.js +0 -2
- package/dist/cjs/stories/MediaSceneSwitcher.stories.js.map +0 -7
- package/dist/cjs/stories/MemberEquity.stories.d.ts +0 -9
- package/dist/cjs/stories/MemberEquity.stories.js +0 -31
- package/dist/cjs/stories/MemberEquity.stories.js.map +0 -7
- package/dist/cjs/stories/MultiLayoutGraphicBlock.stories.d.ts +0 -9
- package/dist/cjs/stories/MultiLayoutGraphicBlock.stories.js +0 -2
- package/dist/cjs/stories/MultiLayoutGraphicBlock.stories.js.map +0 -7
- package/dist/cjs/stories/ProductNav.stories.d.ts +0 -55
- package/dist/cjs/stories/ProductNav.stories.js +0 -2
- package/dist/cjs/stories/ProductNav.stories.js.map +0 -7
- package/dist/cjs/stories/ThreeDCarousel.stories.d.ts +0 -27
- package/dist/cjs/stories/ThreeDCarousel.stories.js +0 -118
- package/dist/cjs/stories/ThreeDCarousel.stories.js.map +0 -7
- package/dist/cjs/stories/accordionCards.stories.d.ts +0 -38
- package/dist/cjs/stories/accordionCards.stories.js +0 -2
- package/dist/cjs/stories/accordionCards.stories.js.map +0 -7
- package/dist/cjs/stories/alert.stories.d.ts +0 -27
- package/dist/cjs/stories/alert.stories.js +0 -2
- package/dist/cjs/stories/alert.stories.js.map +0 -7
- package/dist/cjs/stories/avatar.stories.d.ts +0 -39
- package/dist/cjs/stories/avatar.stories.js +0 -2
- package/dist/cjs/stories/avatar.stories.js.map +0 -7
- package/dist/cjs/stories/badge.stories.d.ts +0 -96
- package/dist/cjs/stories/badge.stories.js +0 -2
- package/dist/cjs/stories/badge.stories.js.map +0 -7
- package/dist/cjs/stories/bizTabs.stories.d.ts +0 -7
- package/dist/cjs/stories/bizTabs.stories.js +0 -2
- package/dist/cjs/stories/bizTabs.stories.js.map +0 -7
- package/dist/cjs/stories/board.stories.d.ts +0 -6
- package/dist/cjs/stories/board.stories.js +0 -2
- package/dist/cjs/stories/board.stories.js.map +0 -7
- package/dist/cjs/stories/brandEquity.stories.d.ts +0 -16
- package/dist/cjs/stories/brandEquity.stories.js +0 -2
- package/dist/cjs/stories/brandEquity.stories.js.map +0 -7
- package/dist/cjs/stories/brandStrip.stories.d.ts +0 -12
- package/dist/cjs/stories/brandStrip.stories.js +0 -2
- package/dist/cjs/stories/brandStrip.stories.js.map +0 -7
- package/dist/cjs/stories/button.stories.d.ts +0 -56
- package/dist/cjs/stories/button.stories.js +0 -2
- package/dist/cjs/stories/button.stories.js.map +0 -7
- package/dist/cjs/stories/card.stories.d.ts +0 -27
- package/dist/cjs/stories/card.stories.js +0 -2
- package/dist/cjs/stories/card.stories.js.map +0 -7
- package/dist/cjs/stories/carousel.stories.d.ts +0 -8
- package/dist/cjs/stories/carousel.stories.js +0 -2
- package/dist/cjs/stories/carousel.stories.js.map +0 -7
- package/dist/cjs/stories/category.stories.d.ts +0 -17
- package/dist/cjs/stories/category.stories.js +0 -2
- package/dist/cjs/stories/category.stories.js.map +0 -7
- package/dist/cjs/stories/checkbox.stories.d.ts +0 -46
- package/dist/cjs/stories/checkbox.stories.js +0 -2
- package/dist/cjs/stories/checkbox.stories.js.map +0 -7
- package/dist/cjs/stories/container.stories.d.ts +0 -28
- package/dist/cjs/stories/container.stories.js +0 -15
- package/dist/cjs/stories/container.stories.js.map +0 -7
- package/dist/cjs/stories/cpnBanner.stories.d.ts +0 -14
- package/dist/cjs/stories/cpnBanner.stories.js +0 -2
- package/dist/cjs/stories/cpnBanner.stories.js.map +0 -7
- package/dist/cjs/stories/cpnCountdown.stories.d.ts +0 -12
- package/dist/cjs/stories/cpnCountdown.stories.js +0 -2
- package/dist/cjs/stories/cpnCountdown.stories.js.map +0 -7
- package/dist/cjs/stories/cpnNavigation.stories.d.ts +0 -14
- package/dist/cjs/stories/cpnNavigation.stories.js +0 -2
- package/dist/cjs/stories/cpnNavigation.stories.js.map +0 -7
- package/dist/cjs/stories/cpnProductcard.stories.d.ts +0 -14
- package/dist/cjs/stories/cpnProductcard.stories.js +0 -2
- package/dist/cjs/stories/cpnProductcard.stories.js.map +0 -7
- package/dist/cjs/stories/cpnTitle.stories.d.ts +0 -14
- package/dist/cjs/stories/cpnTitle.stories.js +0 -2
- package/dist/cjs/stories/cpnTitle.stories.js.map +0 -7
- package/dist/cjs/stories/creativeModule.stories.d.ts +0 -19
- package/dist/cjs/stories/creativeModule.stories.js +0 -2
- package/dist/cjs/stories/creativeModule.stories.js.map +0 -7
- package/dist/cjs/stories/dialog.stories.d.ts +0 -20
- package/dist/cjs/stories/dialog.stories.js +0 -2
- package/dist/cjs/stories/dialog.stories.js.map +0 -7
- package/dist/cjs/stories/drawer.stories.d.ts +0 -20
- package/dist/cjs/stories/drawer.stories.js +0 -2
- package/dist/cjs/stories/drawer.stories.js.map +0 -7
- package/dist/cjs/stories/drop-down.stories.d.ts +0 -16
- package/dist/cjs/stories/drop-down.stories.js +0 -2
- package/dist/cjs/stories/drop-down.stories.js.map +0 -7
- package/dist/cjs/stories/evaluate.stories.d.ts +0 -16
- package/dist/cjs/stories/evaluate.stories.js +0 -2
- package/dist/cjs/stories/evaluate.stories.js.map +0 -7
- package/dist/cjs/stories/faq.stories.d.ts +0 -21
- package/dist/cjs/stories/faq.stories.js +0 -2
- package/dist/cjs/stories/faq.stories.js.map +0 -7
- package/dist/cjs/stories/featureCards.stories.d.ts +0 -30
- package/dist/cjs/stories/featureCards.stories.js +0 -61
- package/dist/cjs/stories/featureCards.stories.js.map +0 -7
- package/dist/cjs/stories/featureShowcase.stories.d.ts +0 -29
- package/dist/cjs/stories/featureShowcase.stories.js +0 -44
- package/dist/cjs/stories/featureShowcase.stories.js.map +0 -7
- package/dist/cjs/stories/graphic.stories.d.ts +0 -64
- package/dist/cjs/stories/graphic.stories.js +0 -2
- package/dist/cjs/stories/graphic.stories.js.map +0 -7
- package/dist/cjs/stories/graphicAttractionBlock.stories.d.ts +0 -6
- package/dist/cjs/stories/graphicAttractionBlock.stories.js +0 -2
- package/dist/cjs/stories/graphicAttractionBlock.stories.js.map +0 -7
- package/dist/cjs/stories/grid.stories.d.ts +0 -22
- package/dist/cjs/stories/grid.stories.js +0 -13
- package/dist/cjs/stories/grid.stories.js.map +0 -7
- package/dist/cjs/stories/heading.stories.d.ts +0 -84
- package/dist/cjs/stories/heading.stories.js +0 -15
- package/dist/cjs/stories/heading.stories.js.map +0 -7
- package/dist/cjs/stories/imageTextFeature.stories.d.ts +0 -28
- package/dist/cjs/stories/imageTextFeature.stories.js +0 -50
- package/dist/cjs/stories/imageTextFeature.stories.js.map +0 -7
- package/dist/cjs/stories/imageWithText.stories.d.ts +0 -51
- package/dist/cjs/stories/imageWithText.stories.js +0 -84
- package/dist/cjs/stories/imageWithText.stories.js.map +0 -7
- package/dist/cjs/stories/input-number.stories.d.ts +0 -39
- package/dist/cjs/stories/input-number.stories.js +0 -2
- package/dist/cjs/stories/input-number.stories.js.map +0 -7
- package/dist/cjs/stories/input.stories.d.ts +0 -35
- package/dist/cjs/stories/input.stories.js +0 -2
- package/dist/cjs/stories/input.stories.js.map +0 -7
- package/dist/cjs/stories/ksp.stories.d.ts +0 -63
- package/dist/cjs/stories/ksp.stories.js +0 -128
- package/dist/cjs/stories/ksp.stories.js.map +0 -7
- package/dist/cjs/stories/link.stories.d.ts +0 -69
- package/dist/cjs/stories/link.stories.js +0 -2
- package/dist/cjs/stories/link.stories.js.map +0 -7
- package/dist/cjs/stories/marquee.stories.d.ts +0 -30
- package/dist/cjs/stories/marquee.stories.js +0 -2
- package/dist/cjs/stories/marquee.stories.js.map +0 -7
- package/dist/cjs/stories/mediaplayerBase.stories.d.ts +0 -6
- package/dist/cjs/stories/mediaplayerBase.stories.js +0 -2
- package/dist/cjs/stories/mediaplayerBase.stories.js.map +0 -7
- package/dist/cjs/stories/mediaplayerMulti.stories.d.ts +0 -16
- package/dist/cjs/stories/mediaplayerMulti.stories.js +0 -2
- package/dist/cjs/stories/mediaplayerMulti.stories.js.map +0 -7
- package/dist/cjs/stories/picture.stories.d.ts +0 -23
- package/dist/cjs/stories/picture.stories.js +0 -9
- package/dist/cjs/stories/picture.stories.js.map +0 -7
- package/dist/cjs/stories/popover.stories.d.ts +0 -17
- package/dist/cjs/stories/popover.stories.js +0 -2
- package/dist/cjs/stories/popover.stories.js.map +0 -7
- package/dist/cjs/stories/productCompare.stories.d.ts +0 -54
- package/dist/cjs/stories/productCompare.stories.js +0 -54
- package/dist/cjs/stories/productCompare.stories.js.map +0 -7
- package/dist/cjs/stories/productHero.stories.d.ts +0 -29
- package/dist/cjs/stories/productHero.stories.js +0 -50
- package/dist/cjs/stories/productHero.stories.js.map +0 -7
- package/dist/cjs/stories/radio.stories.d.ts +0 -39
- package/dist/cjs/stories/radio.stories.js +0 -2
- package/dist/cjs/stories/radio.stories.js.map +0 -7
- package/dist/cjs/stories/shelfDisplay.stories.d.ts +0 -16
- package/dist/cjs/stories/shelfDisplay.stories.js +0 -2
- package/dist/cjs/stories/shelfDisplay.stories.js.map +0 -7
- package/dist/cjs/stories/skeleton.stories.d.ts +0 -20
- package/dist/cjs/stories/skeleton.stories.js +0 -2
- package/dist/cjs/stories/skeleton.stories.js.map +0 -7
- package/dist/cjs/stories/slogan.stories.d.ts +0 -20
- package/dist/cjs/stories/slogan.stories.js +0 -6
- package/dist/cjs/stories/slogan.stories.js.map +0 -7
- package/dist/cjs/stories/specs.stories.d.ts +0 -13
- package/dist/cjs/stories/specs.stories.js +0 -57
- package/dist/cjs/stories/specs.stories.js.map +0 -7
- package/dist/cjs/stories/specsComparison.stories.d.ts +0 -28
- package/dist/cjs/stories/specsComparison.stories.js +0 -105
- package/dist/cjs/stories/specsComparison.stories.js.map +0 -7
- package/dist/cjs/stories/tabWithImage.stories.d.ts +0 -28
- package/dist/cjs/stories/tabWithImage.stories.js +0 -53
- package/dist/cjs/stories/tabWithImage.stories.js.map +0 -7
- package/dist/cjs/stories/tabs.stories.d.ts +0 -373
- package/dist/cjs/stories/tabs.stories.js +0 -2
- package/dist/cjs/stories/tabs.stories.js.map +0 -7
- package/dist/cjs/stories/tabsWithMedia.stories.d.ts +0 -28
- package/dist/cjs/stories/tabsWithMedia.stories.js +0 -68
- package/dist/cjs/stories/tabsWithMedia.stories.js.map +0 -7
- package/dist/cjs/stories/text.stories.d.ts +0 -86
- package/dist/cjs/stories/text.stories.js +0 -21
- package/dist/cjs/stories/text.stories.js.map +0 -7
- package/dist/cjs/stories/videoFeature.stories.d.ts +0 -29
- package/dist/cjs/stories/videoFeature.stories.js +0 -56
- package/dist/cjs/stories/videoFeature.stories.js.map +0 -7
- package/dist/cjs/stories/whychoose.stories.d.ts +0 -21
- package/dist/cjs/stories/whychoose.stories.js +0 -2
- package/dist/cjs/stories/whychoose.stories.js.map +0 -7
- package/dist/esm/stories/HeroBanner.stories.d.ts +0 -28
- package/dist/esm/stories/HeroBanner.stories.js +0 -11
- package/dist/esm/stories/HeroBanner.stories.js.map +0 -7
- package/dist/esm/stories/InlineVideo.stories.d.ts +0 -37
- package/dist/esm/stories/InlineVideo.stories.js +0 -164
- package/dist/esm/stories/InlineVideo.stories.js.map +0 -7
- package/dist/esm/stories/MarqueeReview.stories.d.ts +0 -72
- package/dist/esm/stories/MarqueeReview.stories.js +0 -19
- package/dist/esm/stories/MarqueeReview.stories.js.map +0 -7
- package/dist/esm/stories/MediaSceneSwitcher.stories.d.ts +0 -47
- package/dist/esm/stories/MediaSceneSwitcher.stories.js +0 -2
- package/dist/esm/stories/MediaSceneSwitcher.stories.js.map +0 -7
- package/dist/esm/stories/MemberEquity.stories.d.ts +0 -9
- package/dist/esm/stories/MemberEquity.stories.js +0 -31
- package/dist/esm/stories/MemberEquity.stories.js.map +0 -7
- package/dist/esm/stories/MultiLayoutGraphicBlock.stories.d.ts +0 -9
- package/dist/esm/stories/MultiLayoutGraphicBlock.stories.js +0 -2
- package/dist/esm/stories/MultiLayoutGraphicBlock.stories.js.map +0 -7
- package/dist/esm/stories/ProductNav.stories.d.ts +0 -55
- package/dist/esm/stories/ProductNav.stories.js +0 -2
- package/dist/esm/stories/ProductNav.stories.js.map +0 -7
- package/dist/esm/stories/ThreeDCarousel.stories.d.ts +0 -27
- package/dist/esm/stories/ThreeDCarousel.stories.js +0 -118
- package/dist/esm/stories/ThreeDCarousel.stories.js.map +0 -7
- package/dist/esm/stories/accordionCards.stories.d.ts +0 -38
- package/dist/esm/stories/accordionCards.stories.js +0 -2
- package/dist/esm/stories/accordionCards.stories.js.map +0 -7
- package/dist/esm/stories/alert.stories.d.ts +0 -27
- package/dist/esm/stories/alert.stories.js +0 -2
- package/dist/esm/stories/alert.stories.js.map +0 -7
- package/dist/esm/stories/avatar.stories.d.ts +0 -39
- package/dist/esm/stories/avatar.stories.js +0 -2
- package/dist/esm/stories/avatar.stories.js.map +0 -7
- package/dist/esm/stories/badge.stories.d.ts +0 -96
- package/dist/esm/stories/badge.stories.js +0 -2
- package/dist/esm/stories/badge.stories.js.map +0 -7
- package/dist/esm/stories/bizTabs.stories.d.ts +0 -7
- package/dist/esm/stories/bizTabs.stories.js +0 -2
- package/dist/esm/stories/bizTabs.stories.js.map +0 -7
- package/dist/esm/stories/board.stories.d.ts +0 -6
- package/dist/esm/stories/board.stories.js +0 -2
- package/dist/esm/stories/board.stories.js.map +0 -7
- package/dist/esm/stories/brandEquity.stories.d.ts +0 -16
- package/dist/esm/stories/brandEquity.stories.js +0 -2
- package/dist/esm/stories/brandEquity.stories.js.map +0 -7
- package/dist/esm/stories/brandStrip.stories.d.ts +0 -12
- package/dist/esm/stories/brandStrip.stories.js +0 -2
- package/dist/esm/stories/brandStrip.stories.js.map +0 -7
- package/dist/esm/stories/button.stories.d.ts +0 -56
- package/dist/esm/stories/button.stories.js +0 -2
- package/dist/esm/stories/button.stories.js.map +0 -7
- package/dist/esm/stories/card.stories.d.ts +0 -27
- package/dist/esm/stories/card.stories.js +0 -2
- package/dist/esm/stories/card.stories.js.map +0 -7
- package/dist/esm/stories/carousel.stories.d.ts +0 -8
- package/dist/esm/stories/carousel.stories.js +0 -2
- package/dist/esm/stories/carousel.stories.js.map +0 -7
- package/dist/esm/stories/category.stories.d.ts +0 -17
- package/dist/esm/stories/category.stories.js +0 -2
- package/dist/esm/stories/category.stories.js.map +0 -7
- package/dist/esm/stories/checkbox.stories.d.ts +0 -46
- package/dist/esm/stories/checkbox.stories.js +0 -2
- package/dist/esm/stories/checkbox.stories.js.map +0 -7
- package/dist/esm/stories/container.stories.d.ts +0 -28
- package/dist/esm/stories/container.stories.js +0 -15
- package/dist/esm/stories/container.stories.js.map +0 -7
- package/dist/esm/stories/cpnBanner.stories.d.ts +0 -14
- package/dist/esm/stories/cpnBanner.stories.js +0 -2
- package/dist/esm/stories/cpnBanner.stories.js.map +0 -7
- package/dist/esm/stories/cpnCountdown.stories.d.ts +0 -12
- package/dist/esm/stories/cpnCountdown.stories.js +0 -2
- package/dist/esm/stories/cpnCountdown.stories.js.map +0 -7
- package/dist/esm/stories/cpnNavigation.stories.d.ts +0 -14
- package/dist/esm/stories/cpnNavigation.stories.js +0 -2
- package/dist/esm/stories/cpnNavigation.stories.js.map +0 -7
- package/dist/esm/stories/cpnProductcard.stories.d.ts +0 -14
- package/dist/esm/stories/cpnProductcard.stories.js +0 -2
- package/dist/esm/stories/cpnProductcard.stories.js.map +0 -7
- package/dist/esm/stories/cpnTitle.stories.d.ts +0 -14
- package/dist/esm/stories/cpnTitle.stories.js +0 -2
- package/dist/esm/stories/cpnTitle.stories.js.map +0 -7
- package/dist/esm/stories/creativeModule.stories.d.ts +0 -19
- package/dist/esm/stories/creativeModule.stories.js +0 -2
- package/dist/esm/stories/creativeModule.stories.js.map +0 -7
- package/dist/esm/stories/dialog.stories.d.ts +0 -20
- package/dist/esm/stories/dialog.stories.js +0 -2
- package/dist/esm/stories/dialog.stories.js.map +0 -7
- package/dist/esm/stories/drawer.stories.d.ts +0 -20
- package/dist/esm/stories/drawer.stories.js +0 -2
- package/dist/esm/stories/drawer.stories.js.map +0 -7
- package/dist/esm/stories/drop-down.stories.d.ts +0 -16
- package/dist/esm/stories/drop-down.stories.js +0 -2
- package/dist/esm/stories/drop-down.stories.js.map +0 -7
- package/dist/esm/stories/evaluate.stories.d.ts +0 -16
- package/dist/esm/stories/evaluate.stories.js +0 -2
- package/dist/esm/stories/evaluate.stories.js.map +0 -7
- package/dist/esm/stories/faq.stories.d.ts +0 -21
- package/dist/esm/stories/faq.stories.js +0 -2
- package/dist/esm/stories/faq.stories.js.map +0 -7
- package/dist/esm/stories/featureCards.stories.d.ts +0 -30
- package/dist/esm/stories/featureCards.stories.js +0 -61
- package/dist/esm/stories/featureCards.stories.js.map +0 -7
- package/dist/esm/stories/featureShowcase.stories.d.ts +0 -29
- package/dist/esm/stories/featureShowcase.stories.js +0 -44
- package/dist/esm/stories/featureShowcase.stories.js.map +0 -7
- package/dist/esm/stories/graphic.stories.d.ts +0 -64
- package/dist/esm/stories/graphic.stories.js +0 -2
- package/dist/esm/stories/graphic.stories.js.map +0 -7
- package/dist/esm/stories/graphicAttractionBlock.stories.d.ts +0 -6
- package/dist/esm/stories/graphicAttractionBlock.stories.js +0 -2
- package/dist/esm/stories/graphicAttractionBlock.stories.js.map +0 -7
- package/dist/esm/stories/grid.stories.d.ts +0 -22
- package/dist/esm/stories/grid.stories.js +0 -13
- package/dist/esm/stories/grid.stories.js.map +0 -7
- package/dist/esm/stories/heading.stories.d.ts +0 -84
- package/dist/esm/stories/heading.stories.js +0 -15
- package/dist/esm/stories/heading.stories.js.map +0 -7
- package/dist/esm/stories/imageTextFeature.stories.d.ts +0 -28
- package/dist/esm/stories/imageTextFeature.stories.js +0 -50
- package/dist/esm/stories/imageTextFeature.stories.js.map +0 -7
- package/dist/esm/stories/imageWithText.stories.d.ts +0 -51
- package/dist/esm/stories/imageWithText.stories.js +0 -84
- package/dist/esm/stories/imageWithText.stories.js.map +0 -7
- package/dist/esm/stories/input-number.stories.d.ts +0 -39
- package/dist/esm/stories/input-number.stories.js +0 -2
- package/dist/esm/stories/input-number.stories.js.map +0 -7
- package/dist/esm/stories/input.stories.d.ts +0 -35
- package/dist/esm/stories/input.stories.js +0 -2
- package/dist/esm/stories/input.stories.js.map +0 -7
- package/dist/esm/stories/ksp.stories.d.ts +0 -63
- package/dist/esm/stories/ksp.stories.js +0 -128
- package/dist/esm/stories/ksp.stories.js.map +0 -7
- package/dist/esm/stories/link.stories.d.ts +0 -69
- package/dist/esm/stories/link.stories.js +0 -2
- package/dist/esm/stories/link.stories.js.map +0 -7
- package/dist/esm/stories/marquee.stories.d.ts +0 -30
- package/dist/esm/stories/marquee.stories.js +0 -2
- package/dist/esm/stories/marquee.stories.js.map +0 -7
- package/dist/esm/stories/mediaplayerBase.stories.d.ts +0 -6
- package/dist/esm/stories/mediaplayerBase.stories.js +0 -2
- package/dist/esm/stories/mediaplayerBase.stories.js.map +0 -7
- package/dist/esm/stories/mediaplayerMulti.stories.d.ts +0 -16
- package/dist/esm/stories/mediaplayerMulti.stories.js +0 -2
- package/dist/esm/stories/mediaplayerMulti.stories.js.map +0 -7
- package/dist/esm/stories/picture.stories.d.ts +0 -23
- package/dist/esm/stories/picture.stories.js +0 -9
- package/dist/esm/stories/picture.stories.js.map +0 -7
- package/dist/esm/stories/popover.stories.d.ts +0 -17
- package/dist/esm/stories/popover.stories.js +0 -2
- package/dist/esm/stories/popover.stories.js.map +0 -7
- package/dist/esm/stories/productCompare.stories.d.ts +0 -54
- package/dist/esm/stories/productCompare.stories.js +0 -54
- package/dist/esm/stories/productCompare.stories.js.map +0 -7
- package/dist/esm/stories/productHero.stories.d.ts +0 -29
- package/dist/esm/stories/productHero.stories.js +0 -50
- package/dist/esm/stories/productHero.stories.js.map +0 -7
- package/dist/esm/stories/radio.stories.d.ts +0 -39
- package/dist/esm/stories/radio.stories.js +0 -2
- package/dist/esm/stories/radio.stories.js.map +0 -7
- package/dist/esm/stories/shelfDisplay.stories.d.ts +0 -16
- package/dist/esm/stories/shelfDisplay.stories.js +0 -2
- package/dist/esm/stories/shelfDisplay.stories.js.map +0 -7
- package/dist/esm/stories/skeleton.stories.d.ts +0 -20
- package/dist/esm/stories/skeleton.stories.js +0 -2
- package/dist/esm/stories/skeleton.stories.js.map +0 -7
- package/dist/esm/stories/slogan.stories.d.ts +0 -20
- package/dist/esm/stories/slogan.stories.js +0 -6
- package/dist/esm/stories/slogan.stories.js.map +0 -7
- package/dist/esm/stories/specs.stories.d.ts +0 -13
- package/dist/esm/stories/specs.stories.js +0 -57
- package/dist/esm/stories/specs.stories.js.map +0 -7
- package/dist/esm/stories/specsComparison.stories.d.ts +0 -28
- package/dist/esm/stories/specsComparison.stories.js +0 -105
- package/dist/esm/stories/specsComparison.stories.js.map +0 -7
- package/dist/esm/stories/tabWithImage.stories.d.ts +0 -28
- package/dist/esm/stories/tabWithImage.stories.js +0 -53
- package/dist/esm/stories/tabWithImage.stories.js.map +0 -7
- package/dist/esm/stories/tabs.stories.d.ts +0 -373
- package/dist/esm/stories/tabs.stories.js +0 -2
- package/dist/esm/stories/tabs.stories.js.map +0 -7
- package/dist/esm/stories/tabsWithMedia.stories.d.ts +0 -28
- package/dist/esm/stories/tabsWithMedia.stories.js +0 -68
- package/dist/esm/stories/tabsWithMedia.stories.js.map +0 -7
- package/dist/esm/stories/text.stories.d.ts +0 -86
- package/dist/esm/stories/text.stories.js +0 -21
- package/dist/esm/stories/text.stories.js.map +0 -7
- package/dist/esm/stories/videoFeature.stories.d.ts +0 -29
- package/dist/esm/stories/videoFeature.stories.js +0 -56
- package/dist/esm/stories/videoFeature.stories.js.map +0 -7
- package/dist/esm/stories/whychoose.stories.d.ts +0 -21
- package/dist/esm/stories/whychoose.stories.js +0 -2
- package/dist/esm/stories/whychoose.stories.js.map +0 -7
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { RegionConfig } from './type.js';
|
|
2
|
+
export interface UseAutoRedirectOptions {
|
|
3
|
+
/**
|
|
4
|
+
* 地区配置列表
|
|
5
|
+
*/
|
|
6
|
+
regions: RegionConfig[];
|
|
7
|
+
/**
|
|
8
|
+
* 地区代码到路径前缀的映射
|
|
9
|
+
* @example { US: '', CA: 'ca', DE: 'eu-de' }
|
|
10
|
+
*/
|
|
11
|
+
regionToPathMap: Record<string, string>;
|
|
12
|
+
/**
|
|
13
|
+
* 地理位置信息(包含国家代码)
|
|
14
|
+
*/
|
|
15
|
+
geo?: {
|
|
16
|
+
country?: {
|
|
17
|
+
code?: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* 当前站点的 locale
|
|
22
|
+
*/
|
|
23
|
+
locale?: string;
|
|
24
|
+
/**
|
|
25
|
+
* 是否检查目标站点页面存在(需要实现 /api/check-page-exists 接口)
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
checkPageExists?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* 页面存在检查的 API 端点
|
|
31
|
+
* @default '/api/check-page-exists'
|
|
32
|
+
*/
|
|
33
|
+
checkPageApiEndpoint?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface UseAutoRedirectReturn {
|
|
36
|
+
/**
|
|
37
|
+
* 自动跳转到指定地区的函数
|
|
38
|
+
* @param region - 目标地区配置
|
|
39
|
+
* @param isCookieRedirect - 是否是通过 cookie 记忆触发的跳转
|
|
40
|
+
*/
|
|
41
|
+
handleAutoRedirect: (region: RegionConfig, isCookieRedirect?: boolean) => Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 自动跳转 Hook
|
|
45
|
+
* 处理地区跳转的核心逻辑,包括:
|
|
46
|
+
* - 路径保留和转换
|
|
47
|
+
* - 页面存在检查(可选)
|
|
48
|
+
* - UTM 参数处理
|
|
49
|
+
* - sessionStorage 标记
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```tsx
|
|
53
|
+
* const { handleAutoRedirect } = useAutoRedirect({
|
|
54
|
+
* regions,
|
|
55
|
+
* regionToPathMap,
|
|
56
|
+
* geo,
|
|
57
|
+
* locale,
|
|
58
|
+
* checkPageExists: true,
|
|
59
|
+
* })
|
|
60
|
+
*
|
|
61
|
+
* // 当检测到地区不匹配时
|
|
62
|
+
* const targetRegion = regions.find(r => r.code === 'DE')
|
|
63
|
+
* await handleAutoRedirect(targetRegion)
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function useAutoRedirect(options: UseAutoRedirectOptions): UseAutoRedirectReturn;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var h=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var x=(c,r)=>{for(var n in r)h(c,n,{get:r[n],enumerable:!0})},C=(c,r,n,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of P(r))!k.call(c,i)&&i!==n&&h(c,i,{get:()=>r[i],enumerable:!(o=U(r,i))||o.enumerable});return c};var b=c=>C(h({},"__esModule",{value:!0}),c);var L={};x(L,{useAutoRedirect:()=>E});module.exports=b(L);var R=require("react"),e=require("./utils.js");function E(c){const{regions:r,regionToPathMap:n,geo:o,locale:i,checkPageExists:g=!0,checkPageApiEndpoint:p="/api/check-page-exists"}=c;return{handleAutoRedirect:(0,R.useCallback)(async(s,$=!1)=>{if(typeof window>"u")return;$?sessionStorage.setItem("cookie_redirected","true"):(sessionStorage.setItem("auto_redirected","true"),sessionStorage.setItem("auto_redirect_from",i||"US"));const m=(0,e.generateAllLocales)(n),u=(0,e.removeLocalePrefix)(window.location.pathname,m);let t;if(g)try{const a=n[s.code]||s.code.toLowerCase(),d=await fetch(`${p}?locale=${encodeURIComponent(a)}&path=${encodeURIComponent(u)}`),{exists:f}=await d.json();if(f){const l=window.location.search,w=window.location.hash;if((0,e.hasUtmParams)(l)&&o?.country?.code){const y=(0,e.buildGeoRedirectRef)(o.country.code),A=`${s.url}${u}${l}`;t=`${(0,e.appendRefParam)(A,y)}${w}`}else t=`${s.url}${u}${l}${w}`}else if(t=s.url,(0,e.hasUtmParams)(window.location.search)&&o?.country?.code){const l=(0,e.buildGeoRedirectRef)(o.country.code);t=(0,e.appendRefParam)(t,l)}}catch(a){if(console.error("Error checking page during redirect:",a),t=s.url,(0,e.hasUtmParams)(window.location.search)&&o?.country?.code){const d=(0,e.buildGeoRedirectRef)(o.country.code);t=(0,e.appendRefParam)(t,d)}}else{const a=window.location.search,d=window.location.hash;if((0,e.hasUtmParams)(a)&&o?.country?.code){const f=(0,e.buildGeoRedirectRef)(o.country.code),l=`${s.url}${u}${a}`;t=`${(0,e.appendRefParam)(l,f)}${d}`}else t=`${s.url}${u}${a}${d}`}window.location.href=t},[i,n,o,g,p])}}
|
|
2
|
+
//# sourceMappingURL=useAutoRedirect.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/biz-components/IPRedirect/useAutoRedirect.tsx"],
|
|
4
|
+
"sourcesContent": ["import { useCallback } from 'react'\nimport { generateAllLocales, removeLocalePrefix, hasUtmParams, buildGeoRedirectRef, appendRefParam } from './utils.js'\nimport type { RegionConfig } from './type.js'\n\nexport interface UseAutoRedirectOptions {\n /**\n * \u5730\u533A\u914D\u7F6E\u5217\u8868\n */\n regions: RegionConfig[]\n\n /**\n * \u5730\u533A\u4EE3\u7801\u5230\u8DEF\u5F84\u524D\u7F00\u7684\u6620\u5C04\n * @example { US: '', CA: 'ca', DE: 'eu-de' }\n */\n regionToPathMap: Record<string, string>\n\n /**\n * \u5730\u7406\u4F4D\u7F6E\u4FE1\u606F\uFF08\u5305\u542B\u56FD\u5BB6\u4EE3\u7801\uFF09\n */\n geo?: {\n country?: {\n code?: string\n }\n }\n\n /**\n * \u5F53\u524D\u7AD9\u70B9\u7684 locale\n */\n locale?: string\n\n /**\n * \u662F\u5426\u68C0\u67E5\u76EE\u6807\u7AD9\u70B9\u9875\u9762\u5B58\u5728\uFF08\u9700\u8981\u5B9E\u73B0 /api/check-page-exists \u63A5\u53E3\uFF09\n * @default true\n */\n checkPageExists?: boolean\n\n /**\n * \u9875\u9762\u5B58\u5728\u68C0\u67E5\u7684 API \u7AEF\u70B9\n * @default '/api/check-page-exists'\n */\n checkPageApiEndpoint?: string\n}\n\nexport interface UseAutoRedirectReturn {\n /**\n * \u81EA\u52A8\u8DF3\u8F6C\u5230\u6307\u5B9A\u5730\u533A\u7684\u51FD\u6570\n * @param region - \u76EE\u6807\u5730\u533A\u914D\u7F6E\n * @param isCookieRedirect - \u662F\u5426\u662F\u901A\u8FC7 cookie \u8BB0\u5FC6\u89E6\u53D1\u7684\u8DF3\u8F6C\n */\n handleAutoRedirect: (region: RegionConfig, isCookieRedirect?: boolean) => Promise<void>\n}\n\n/**\n * \u81EA\u52A8\u8DF3\u8F6C Hook\n * \u5904\u7406\u5730\u533A\u8DF3\u8F6C\u7684\u6838\u5FC3\u903B\u8F91\uFF0C\u5305\u62EC\uFF1A\n * - \u8DEF\u5F84\u4FDD\u7559\u548C\u8F6C\u6362\n * - \u9875\u9762\u5B58\u5728\u68C0\u67E5\uFF08\u53EF\u9009\uFF09\n * - UTM \u53C2\u6570\u5904\u7406\n * - sessionStorage \u6807\u8BB0\n *\n * @example\n * ```tsx\n * const { handleAutoRedirect } = useAutoRedirect({\n * regions,\n * regionToPathMap,\n * geo,\n * locale,\n * checkPageExists: true,\n * })\n *\n * // \u5F53\u68C0\u6D4B\u5230\u5730\u533A\u4E0D\u5339\u914D\u65F6\n * const targetRegion = regions.find(r => r.code === 'DE')\n * await handleAutoRedirect(targetRegion)\n * ```\n */\nexport function useAutoRedirect(options: UseAutoRedirectOptions): UseAutoRedirectReturn {\n const {\n regions,\n regionToPathMap,\n geo,\n locale,\n checkPageExists = true,\n checkPageApiEndpoint = '/api/check-page-exists',\n } = options\n\n const handleAutoRedirect = useCallback(\n async (region: RegionConfig, isCookieRedirect = false) => {\n if (typeof window === 'undefined') return\n\n // \u6807\u8BB0\u8DF3\u8F6C\u7C7B\u578B\n if (isCookieRedirect) {\n sessionStorage.setItem('cookie_redirected', 'true')\n } else {\n sessionStorage.setItem('auto_redirected', 'true')\n sessionStorage.setItem('auto_redirect_from', locale || 'US')\n }\n\n // \u53BB\u9664\u5F53\u524D\u8DEF\u5F84\u4E2D\u7684 locale \u524D\u7F00\n const allLocales = generateAllLocales(regionToPathMap)\n const pathWithoutLocale = removeLocalePrefix(window.location.pathname, allLocales)\n\n let targetUrl: string\n\n // \u68C0\u67E5\u76EE\u6807\u7AD9\u70B9\u662F\u5426\u6709\u5F53\u524D\u9875\u9762\n if (checkPageExists) {\n try {\n // \u5C06 region code \u8F6C\u6362\u4E3A locale (\u5982 DE -> eu-de, CA -> ca)\n const targetLocale = regionToPathMap[region.code] || region.code.toLowerCase()\n\n // \u8C03\u7528 API \u68C0\u67E5\u9875\u9762\u662F\u5426\u5B58\u5728\n const response = await fetch(\n `${checkPageApiEndpoint}?locale=${encodeURIComponent(\n targetLocale\n )}&path=${encodeURIComponent(pathWithoutLocale)}`\n )\n const { exists: pageExists } = await response.json()\n\n if (pageExists) {\n // \u9875\u9762\u5B58\u5728\uFF0C\u4FDD\u7559\u5F53\u524D\u8DEF\u5F84\n const currentSearch = window.location.search\n const currentHash = window.location.hash\n\n // \u5982\u679C\u6709 UTM \u53C2\u6570\uFF0C\u6DFB\u52A0 ref \u53C2\u6570\n if (hasUtmParams(currentSearch) && geo?.country?.code) {\n const refValue = buildGeoRedirectRef(geo.country.code)\n // \u5148\u62FC\u63A5\u57FA\u7840 URL\uFF08\u4E0D\u542B hash\uFF09\uFF0C\u7136\u540E\u6DFB\u52A0 ref\uFF0C\u6700\u540E\u52A0 hash\n const baseUrl = `${region.url}${pathWithoutLocale}${currentSearch}`\n targetUrl = `${appendRefParam(baseUrl, refValue)}${currentHash}`\n } else {\n targetUrl = `${region.url}${pathWithoutLocale}${currentSearch}${currentHash}`\n }\n } else {\n // \u9875\u9762\u4E0D\u5B58\u5728\uFF0C\u8DF3\u8F6C\u5230\u9996\u9875\n targetUrl = region.url\n\n // \u5982\u679C\u6709 UTM \u53C2\u6570\uFF0C\u6DFB\u52A0 ref \u53C2\u6570\n if (hasUtmParams(window.location.search) && geo?.country?.code) {\n const refValue = buildGeoRedirectRef(geo.country.code)\n targetUrl = appendRefParam(targetUrl, refValue)\n }\n }\n } catch (error) {\n // \u68C0\u67E5\u51FA\u9519\uFF0C\u8DF3\u8F6C\u5230\u9996\u9875\u66F4\u5B89\u5168\n console.error('Error checking page during redirect:', error)\n targetUrl = region.url\n\n // \u5982\u679C\u6709 UTM \u53C2\u6570\uFF0C\u6DFB\u52A0 ref \u53C2\u6570\n if (hasUtmParams(window.location.search) && geo?.country?.code) {\n const refValue = buildGeoRedirectRef(geo.country.code)\n targetUrl = appendRefParam(targetUrl, refValue)\n }\n }\n } else {\n // \u4E0D\u68C0\u67E5\u9875\u9762\u5B58\u5728\uFF0C\u76F4\u63A5\u6784\u5EFA URL\n const currentSearch = window.location.search\n const currentHash = window.location.hash\n\n // \u5982\u679C\u6709 UTM \u53C2\u6570\uFF0C\u6DFB\u52A0 ref \u53C2\u6570\n if (hasUtmParams(currentSearch) && geo?.country?.code) {\n const refValue = buildGeoRedirectRef(geo.country.code)\n const baseUrl = `${region.url}${pathWithoutLocale}${currentSearch}`\n targetUrl = `${appendRefParam(baseUrl, refValue)}${currentHash}`\n } else {\n targetUrl = `${region.url}${pathWithoutLocale}${currentSearch}${currentHash}`\n }\n }\n\n // \u6267\u884C\u8DF3\u8F6C\n window.location.href = targetUrl\n },\n [locale, regionToPathMap, geo, checkPageExists, checkPageApiEndpoint]\n )\n\n return { handleAutoRedirect }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA4B,iBAC5BC,EAA0G,sBA0EnG,SAASH,EAAgBI,EAAwD,CACtF,KAAM,CACJ,QAAAC,EACA,gBAAAC,EACA,IAAAC,EACA,OAAAC,EACA,gBAAAC,EAAkB,GAClB,qBAAAC,EAAuB,wBACzB,EAAIN,EA0FJ,MAAO,CAAE,sBAxFkB,eACzB,MAAOO,EAAsBC,EAAmB,KAAU,CACxD,GAAI,OAAO,OAAW,IAAa,OAG/BA,EACF,eAAe,QAAQ,oBAAqB,MAAM,GAElD,eAAe,QAAQ,kBAAmB,MAAM,EAChD,eAAe,QAAQ,qBAAsBJ,GAAU,IAAI,GAI7D,MAAMK,KAAa,sBAAmBP,CAAe,EAC/CQ,KAAoB,sBAAmB,OAAO,SAAS,SAAUD,CAAU,EAEjF,IAAIE,EAGJ,GAAIN,EACF,GAAI,CAEF,MAAMO,EAAeV,EAAgBK,EAAO,IAAI,GAAKA,EAAO,KAAK,YAAY,EAGvEM,EAAW,MAAM,MACrB,GAAGP,CAAoB,WAAW,mBAChCM,CACF,CAAC,SAAS,mBAAmBF,CAAiB,CAAC,EACjD,EACM,CAAE,OAAQI,CAAW,EAAI,MAAMD,EAAS,KAAK,EAEnD,GAAIC,EAAY,CAEd,MAAMC,EAAgB,OAAO,SAAS,OAChCC,EAAc,OAAO,SAAS,KAGpC,MAAI,gBAAaD,CAAa,GAAKZ,GAAK,SAAS,KAAM,CACrD,MAAMc,KAAW,uBAAoBd,EAAI,QAAQ,IAAI,EAE/Ce,EAAU,GAAGX,EAAO,GAAG,GAAGG,CAAiB,GAAGK,CAAa,GACjEJ,EAAY,MAAG,kBAAeO,EAASD,CAAQ,CAAC,GAAGD,CAAW,EAChE,MACEL,EAAY,GAAGJ,EAAO,GAAG,GAAGG,CAAiB,GAAGK,CAAa,GAAGC,CAAW,EAE/E,SAEEL,EAAYJ,EAAO,OAGf,gBAAa,OAAO,SAAS,MAAM,GAAKJ,GAAK,SAAS,KAAM,CAC9D,MAAMc,KAAW,uBAAoBd,EAAI,QAAQ,IAAI,EACrDQ,KAAY,kBAAeA,EAAWM,CAAQ,CAChD,CAEJ,OAASE,EAAO,CAMd,GAJA,QAAQ,MAAM,uCAAwCA,CAAK,EAC3DR,EAAYJ,EAAO,OAGf,gBAAa,OAAO,SAAS,MAAM,GAAKJ,GAAK,SAAS,KAAM,CAC9D,MAAMc,KAAW,uBAAoBd,EAAI,QAAQ,IAAI,EACrDQ,KAAY,kBAAeA,EAAWM,CAAQ,CAChD,CACF,KACK,CAEL,MAAMF,EAAgB,OAAO,SAAS,OAChCC,EAAc,OAAO,SAAS,KAGpC,MAAI,gBAAaD,CAAa,GAAKZ,GAAK,SAAS,KAAM,CACrD,MAAMc,KAAW,uBAAoBd,EAAI,QAAQ,IAAI,EAC/Ce,EAAU,GAAGX,EAAO,GAAG,GAAGG,CAAiB,GAAGK,CAAa,GACjEJ,EAAY,MAAG,kBAAeO,EAASD,CAAQ,CAAC,GAAGD,CAAW,EAChE,MACEL,EAAY,GAAGJ,EAAO,GAAG,GAAGG,CAAiB,GAAGK,CAAa,GAAGC,CAAW,EAE/E,CAGA,OAAO,SAAS,KAAOL,CACzB,EACA,CAACP,EAAQF,EAAiBC,EAAKE,EAAiBC,CAAoB,CACtE,CAE4B,CAC9B",
|
|
6
|
+
"names": ["useAutoRedirect_exports", "__export", "useAutoRedirect", "__toCommonJS", "import_react", "import_utils", "options", "regions", "regionToPathMap", "geo", "locale", "checkPageExists", "checkPageApiEndpoint", "region", "isCookieRedirect", "allLocales", "pathWithoutLocale", "targetUrl", "targetLocale", "response", "pageExists", "currentSearch", "currentHash", "refValue", "baseUrl", "error"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { RegionConfig } from './type.js';
|
|
2
|
+
export interface UseDetectedRegionRedirectOptions {
|
|
3
|
+
/**
|
|
4
|
+
* 检测到的地区代码(从 useIPRedirect 的 onDetectRegion 返回)
|
|
5
|
+
*/
|
|
6
|
+
detectedRegion: string | null;
|
|
7
|
+
/**
|
|
8
|
+
* 当前站点的地区代码
|
|
9
|
+
*/
|
|
10
|
+
currentRegionCode: string;
|
|
11
|
+
/**
|
|
12
|
+
* 地区配置列表
|
|
13
|
+
*/
|
|
14
|
+
regions: RegionConfig[];
|
|
15
|
+
/**
|
|
16
|
+
* 白名单路径(在白名单中不执行跳转)
|
|
17
|
+
*/
|
|
18
|
+
excludePaths?: string[];
|
|
19
|
+
/**
|
|
20
|
+
* 当前路径
|
|
21
|
+
*/
|
|
22
|
+
pathname?: string;
|
|
23
|
+
/**
|
|
24
|
+
* 用户是否手动关闭了横幅(关闭横幅后不再自动跳转)
|
|
25
|
+
*/
|
|
26
|
+
userDismissedBanner?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* 自动跳转处理函数
|
|
29
|
+
*/
|
|
30
|
+
onRedirect: (region: RegionConfig, isCookieRedirect?: boolean) => void | Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* IP 检测地区跳转监听 Hook
|
|
34
|
+
*
|
|
35
|
+
* 监听 IP 检测到的推荐地区(来自 useIPRedirect 的 detectedRegion),
|
|
36
|
+
* 如果检测到的地区与当前地区不匹配,自动跳转到推荐地区
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```tsx
|
|
40
|
+
* useDetectedRegionRedirect({
|
|
41
|
+
* detectedRegion, // 从 useIPRedirect 获取
|
|
42
|
+
* currentRegionCode,
|
|
43
|
+
* regions,
|
|
44
|
+
* excludePaths,
|
|
45
|
+
* pathname,
|
|
46
|
+
* userDismissedBanner,
|
|
47
|
+
* onRedirect: handleAutoRedirect, // 从 useAutoRedirect 获取
|
|
48
|
+
* })
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function useDetectedRegionRedirect(options: UseDetectedRegionRedirectOptions): void;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var r=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var l=(i,e)=>{for(var n in e)r(i,n,{get:e[n],enumerable:!0})},h=(i,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of m(e))!p.call(i,t)&&t!==n&&r(i,t,{get:()=>e[t],enumerable:!(o=u(e,t))||o.enumerable});return i};var C=i=>h(r({},"__esModule",{value:!0}),i);var x={};l(x,{useDetectedRegionRedirect:()=>D});module.exports=C(x);var R=require("react"),f=require("./utils.js");function D(i){const{detectedRegion:e,currentRegionCode:n,regions:o,excludePaths:t=[],pathname:s="",userDismissedBanner:d=!1,onRedirect:c}=i;(0,R.useEffect)(()=>{if((0,f.isPathInWhitelist)(s,t)||d||!e||e===n)return;const g=o.find(a=>a.code===e);g&&c(g)},[e,n,o,d,c,s,t])}
|
|
2
|
+
//# sourceMappingURL=useDetectedRegionRedirect.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/biz-components/IPRedirect/useDetectedRegionRedirect.tsx"],
|
|
4
|
+
"sourcesContent": ["import { useEffect } from 'react'\nimport { isPathInWhitelist } from './utils.js'\nimport type { RegionConfig } from './type.js'\n\nexport interface UseDetectedRegionRedirectOptions {\n /**\n * \u68C0\u6D4B\u5230\u7684\u5730\u533A\u4EE3\u7801\uFF08\u4ECE useIPRedirect \u7684 onDetectRegion \u8FD4\u56DE\uFF09\n */\n detectedRegion: string | null\n\n /**\n * \u5F53\u524D\u7AD9\u70B9\u7684\u5730\u533A\u4EE3\u7801\n */\n currentRegionCode: string\n\n /**\n * \u5730\u533A\u914D\u7F6E\u5217\u8868\n */\n regions: RegionConfig[]\n\n /**\n * \u767D\u540D\u5355\u8DEF\u5F84\uFF08\u5728\u767D\u540D\u5355\u4E2D\u4E0D\u6267\u884C\u8DF3\u8F6C\uFF09\n */\n excludePaths?: string[]\n\n /**\n * \u5F53\u524D\u8DEF\u5F84\n */\n pathname?: string\n\n /**\n * \u7528\u6237\u662F\u5426\u624B\u52A8\u5173\u95ED\u4E86\u6A2A\u5E45\uFF08\u5173\u95ED\u6A2A\u5E45\u540E\u4E0D\u518D\u81EA\u52A8\u8DF3\u8F6C\uFF09\n */\n userDismissedBanner?: boolean\n\n /**\n * \u81EA\u52A8\u8DF3\u8F6C\u5904\u7406\u51FD\u6570\n */\n onRedirect: (region: RegionConfig, isCookieRedirect?: boolean) => void | Promise<void>\n}\n\n/**\n * IP \u68C0\u6D4B\u5730\u533A\u8DF3\u8F6C\u76D1\u542C Hook\n *\n * \u76D1\u542C IP \u68C0\u6D4B\u5230\u7684\u63A8\u8350\u5730\u533A\uFF08\u6765\u81EA useIPRedirect \u7684 detectedRegion\uFF09\uFF0C\n * \u5982\u679C\u68C0\u6D4B\u5230\u7684\u5730\u533A\u4E0E\u5F53\u524D\u5730\u533A\u4E0D\u5339\u914D\uFF0C\u81EA\u52A8\u8DF3\u8F6C\u5230\u63A8\u8350\u5730\u533A\n *\n * @example\n * ```tsx\n * useDetectedRegionRedirect({\n * detectedRegion, // \u4ECE useIPRedirect \u83B7\u53D6\n * currentRegionCode,\n * regions,\n * excludePaths,\n * pathname,\n * userDismissedBanner,\n * onRedirect: handleAutoRedirect, // \u4ECE useAutoRedirect \u83B7\u53D6\n * })\n * ```\n */\nexport function useDetectedRegionRedirect(options: UseDetectedRegionRedirectOptions): void {\n const {\n detectedRegion,\n currentRegionCode,\n regions,\n excludePaths = [],\n pathname = '',\n userDismissedBanner = false,\n onRedirect,\n } = options\n\n useEffect(() => {\n // \u767D\u540D\u5355\u68C0\u67E5\uFF1A\u5982\u679C\u5F53\u524D URL/\u8DEF\u5F84\u5728\u767D\u540D\u5355\u4E2D\uFF0C\u4E0D\u6267\u884C\u81EA\u52A8\u8DF3\u8F6C\n const inWhitelist = isPathInWhitelist(pathname, excludePaths)\n\n if (inWhitelist) {\n return\n }\n\n // \u5982\u679C\u7528\u6237\u5DF2\u624B\u52A8\u5173\u95ED\u6A2A\u5E45\uFF0C\u4E0D\u518D\u81EA\u52A8\u8DF3\u8F6C\n if (userDismissedBanner) {\n return\n }\n\n // \u5982\u679C\u6CA1\u6709\u68C0\u6D4B\u5230\u5730\u533A\uFF0C\u6216\u5730\u533A\u5339\u914D\uFF0C\u4E0D\u5904\u7406\n if (!detectedRegion || detectedRegion === currentRegionCode) {\n return\n }\n\n // \u83B7\u53D6\u76EE\u6807\u5730\u533A\u4FE1\u606F\u5E76\u81EA\u52A8\u8DF3\u8F6C\n const targetRegion = regions.find(r => r.code === detectedRegion)\n\n if (targetRegion) {\n // \u8C03\u7528\u81EA\u52A8\u8DF3\u8F6C\u903B\u8F91\uFF08\u4FDD\u7559\u5F53\u524D\u8DEF\u5F84\uFF09\n onRedirect(targetRegion)\n }\n }, [detectedRegion, currentRegionCode, regions, userDismissedBanner, onRedirect, pathname, excludePaths])\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,+BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA0B,iBAC1BC,EAAkC,sBA2D3B,SAASH,EAA0BI,EAAiD,CACzF,KAAM,CACJ,eAAAC,EACA,kBAAAC,EACA,QAAAC,EACA,aAAAC,EAAe,CAAC,EAChB,SAAAC,EAAW,GACX,oBAAAC,EAAsB,GACtB,WAAAC,CACF,EAAIP,KAEJ,aAAU,IAAM,CAcd,MAZoB,qBAAkBK,EAAUD,CAAY,GAOxDE,GAKA,CAACL,GAAkBA,IAAmBC,EACxC,OAIF,MAAMM,EAAeL,EAAQ,KAAKM,GAAKA,EAAE,OAASR,CAAc,EAE5DO,GAEFD,EAAWC,CAAY,CAE3B,EAAG,CAACP,EAAgBC,EAAmBC,EAASG,EAAqBC,EAAYF,EAAUD,CAAY,CAAC,CAC1G",
|
|
6
|
+
"names": ["useDetectedRegionRedirect_exports", "__export", "useDetectedRegionRedirect", "__toCommonJS", "import_react", "import_utils", "options", "detectedRegion", "currentRegionCode", "regions", "excludePaths", "pathname", "userDismissedBanner", "onRedirect", "targetRegion", "r"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { RegionConfig } from './type.js';
|
|
2
|
+
export type UseIPRedirectOptions = {
|
|
3
|
+
/** Cookie 名称,默认为 'user_region' */
|
|
4
|
+
cookieName?: string;
|
|
5
|
+
/** Cookie 过期天数,默认为 90 天 */
|
|
6
|
+
cookieExpireDays?: number;
|
|
7
|
+
/** 地区配置列表 */
|
|
8
|
+
regions: RegionConfig[];
|
|
9
|
+
/** 当前站点的地区代码(如 'US', 'CN' 等),用于判断是否需要跳转。强烈建议提供此参数以防止无限跳转 */
|
|
10
|
+
currentRegionCode?: string;
|
|
11
|
+
/** 可选的地区检测回调函数,返回检测到的地区代码。如不需要自动检测,可不传此参数 */
|
|
12
|
+
onDetectRegion?: () => Promise<string | null>;
|
|
13
|
+
/** 是否自动显示弹窗,默认为 true */
|
|
14
|
+
autoShow?: boolean;
|
|
15
|
+
/** 白名单列表,这些 URL/路径不会触发 IP 跳转和横幅显示。支持完整 URL(如 'https://www.anker.com/prime-2025')、路径(如 '/checkout')和通配符(如 '/checkout/*' 或 'https://www.anker.com/campaign/*') */
|
|
16
|
+
excludePaths?: string[];
|
|
17
|
+
/** 当前页面路径(用于白名单检查) */
|
|
18
|
+
currentPath?: string;
|
|
19
|
+
/** 当前页面完整 URL(用于白名单检查) */
|
|
20
|
+
currentUrl?: string;
|
|
21
|
+
};
|
|
22
|
+
export type UseIPRedirectReturn = {
|
|
23
|
+
/** 是否显示地区选择弹窗 */
|
|
24
|
+
isOpen: boolean;
|
|
25
|
+
/** 设置弹窗显示状态 */
|
|
26
|
+
setIsOpen: (open: boolean) => void;
|
|
27
|
+
/** 用户已保存的地区代码 */
|
|
28
|
+
savedRegion: string | null;
|
|
29
|
+
/** 检测到的用户地区代码 */
|
|
30
|
+
detectedRegion: string | null;
|
|
31
|
+
/** 保存用户选择的地区 */
|
|
32
|
+
saveRegion: (regionCode: string, languageCode?: string) => void;
|
|
33
|
+
/** 清除已保存的地区选择 */
|
|
34
|
+
clearRegion: () => void;
|
|
35
|
+
/** 根据地区代码获取地区配置 */
|
|
36
|
+
getRegionByCode: (code: string) => RegionConfig | undefined;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* 地区选择 Hook
|
|
40
|
+
* 用于管理用户地区选择和 Cookie 存储
|
|
41
|
+
*/
|
|
42
|
+
export declare function useIPRedirect(options: UseIPRedirectOptions): UseIPRedirectReturn;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var _=Object.create;var l=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var b=(t,e)=>{for(var n in e)l(t,n,{get:e[n],enumerable:!0})},v=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of I(e))!k.call(t,o)&&o!==n&&l(t,o,{get:()=>e[o],enumerable:!(i=C(e,o))||i.enumerable});return t};var E=(t,e,n)=>(n=t!=null?_($(t)):{},v(e||!t||!t.__esModule?l(n,"default",{value:t,enumerable:!0}):n,t)),O=t=>v(l({},"__esModule",{value:!0}),t);var B={};b(B,{useIPRedirect:()=>D});module.exports=O(B);var s=require("react"),u=E(require("js-cookie"));function U(t,e,n){return!e||e.length===0?!1:e.some(i=>{if(i.startsWith("http://")||i.startsWith("https://")){if(!n)return!1;if(i.includes("*")){const o=i.replace(/\*/g,".*").replace(/\//g,"\\/");return new RegExp(`^${o}$`).test(n)}return n===i}if(i.includes("*")){const o=i.replace(/\*/g,".*");return new RegExp(`^${o}$`).test(t)}return t===i})}function D(t){const{cookieName:e="user_region",cookieExpireDays:n=90,regions:i,currentRegionCode:o,onDetectRegion:c,autoShow:d=!0,excludePaths:m=[],currentPath:h="",currentUrl:w=""}=t,[P,R]=(0,s.useState)(!1),[f,p]=(0,s.useState)(null),[y,S]=(0,s.useState)(null);(0,s.useEffect)(()=>{const r=u.default.get(e);r&&p(r)},[e]);const x=(0,s.useCallback)((r,a)=>{const g=a?`v1_${r}_${a}`:`v1_${r}`;u.default.set(e,g,{expires:n}),p(r)},[e,n]);return(0,s.useEffect)(()=>{if(U(h,m,w))return;const r=new URLSearchParams(window.location.search);if(r.get("_region_selected")){sessionStorage.setItem(`${e}_redirected`,"true"),r.delete("_region_selected");const g=window.location.pathname+(r.toString()?"?"+r.toString():"")+window.location.hash;window.history.replaceState({},"",g)}f||sessionStorage.getItem(`${e}_redirected`)||c&&c().then(g=>{g&&(S(g),o?g!==o&&d&&R(!0):d&&R(!0))})},[c,f,d,o,x,e,h,m,w]),{isOpen:P,setIsOpen:R,savedRegion:f,detectedRegion:y,saveRegion:x,clearRegion:()=>{u.default.remove(e),p(null)},getRegionByCode:r=>i.find(a=>a.code===r)}}
|
|
2
|
+
//# sourceMappingURL=useIPRedirect.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/biz-components/IPRedirect/useIPRedirect.ts"],
|
|
4
|
+
"sourcesContent": ["import { useState, useEffect, useCallback } from 'react'\nimport Cookies from 'js-cookie'\nimport type { RegionConfig } from './type.js'\n\nexport type UseIPRedirectOptions = {\n /** Cookie \u540D\u79F0,\u9ED8\u8BA4\u4E3A 'user_region' */\n cookieName?: string\n /** Cookie \u8FC7\u671F\u5929\u6570,\u9ED8\u8BA4\u4E3A 90 \u5929 */\n cookieExpireDays?: number\n /** \u5730\u533A\u914D\u7F6E\u5217\u8868 */\n regions: RegionConfig[]\n /** \u5F53\u524D\u7AD9\u70B9\u7684\u5730\u533A\u4EE3\u7801\uFF08\u5982 'US', 'CN' \u7B49\uFF09\uFF0C\u7528\u4E8E\u5224\u65AD\u662F\u5426\u9700\u8981\u8DF3\u8F6C\u3002\u5F3A\u70C8\u5EFA\u8BAE\u63D0\u4F9B\u6B64\u53C2\u6570\u4EE5\u9632\u6B62\u65E0\u9650\u8DF3\u8F6C */\n currentRegionCode?: string\n /** \u53EF\u9009\u7684\u5730\u533A\u68C0\u6D4B\u56DE\u8C03\u51FD\u6570,\u8FD4\u56DE\u68C0\u6D4B\u5230\u7684\u5730\u533A\u4EE3\u7801\u3002\u5982\u4E0D\u9700\u8981\u81EA\u52A8\u68C0\u6D4B,\u53EF\u4E0D\u4F20\u6B64\u53C2\u6570 */\n onDetectRegion?: () => Promise<string | null>\n /** \u662F\u5426\u81EA\u52A8\u663E\u793A\u5F39\u7A97,\u9ED8\u8BA4\u4E3A true */\n autoShow?: boolean\n /** \u767D\u540D\u5355\u5217\u8868\uFF0C\u8FD9\u4E9B URL/\u8DEF\u5F84\u4E0D\u4F1A\u89E6\u53D1 IP \u8DF3\u8F6C\u548C\u6A2A\u5E45\u663E\u793A\u3002\u652F\u6301\u5B8C\u6574 URL\uFF08\u5982 'https://www.anker.com/prime-2025'\uFF09\u3001\u8DEF\u5F84\uFF08\u5982 '/checkout'\uFF09\u548C\u901A\u914D\u7B26\uFF08\u5982 '/checkout/*' \u6216 'https://www.anker.com/campaign/*'\uFF09 */\n excludePaths?: string[]\n /** \u5F53\u524D\u9875\u9762\u8DEF\u5F84\uFF08\u7528\u4E8E\u767D\u540D\u5355\u68C0\u67E5\uFF09 */\n currentPath?: string\n /** \u5F53\u524D\u9875\u9762\u5B8C\u6574 URL\uFF08\u7528\u4E8E\u767D\u540D\u5355\u68C0\u67E5\uFF09 */\n currentUrl?: string\n}\n\nexport type UseIPRedirectReturn = {\n /** \u662F\u5426\u663E\u793A\u5730\u533A\u9009\u62E9\u5F39\u7A97 */\n isOpen: boolean\n /** \u8BBE\u7F6E\u5F39\u7A97\u663E\u793A\u72B6\u6001 */\n setIsOpen: (open: boolean) => void\n /** \u7528\u6237\u5DF2\u4FDD\u5B58\u7684\u5730\u533A\u4EE3\u7801 */\n savedRegion: string | null\n /** \u68C0\u6D4B\u5230\u7684\u7528\u6237\u5730\u533A\u4EE3\u7801 */\n detectedRegion: string | null\n /** \u4FDD\u5B58\u7528\u6237\u9009\u62E9\u7684\u5730\u533A */\n saveRegion: (regionCode: string, languageCode?: string) => void\n /** \u6E05\u9664\u5DF2\u4FDD\u5B58\u7684\u5730\u533A\u9009\u62E9 */\n clearRegion: () => void\n /** \u6839\u636E\u5730\u533A\u4EE3\u7801\u83B7\u53D6\u5730\u533A\u914D\u7F6E */\n getRegionByCode: (code: string) => RegionConfig | undefined\n}\n\n/**\n * \u68C0\u67E5\u5F53\u524D\u8DEF\u5F84\u662F\u5426\u5728\u767D\u540D\u5355\u4E2D\n * \u652F\u6301\u5B8C\u6574 URL \u5339\u914D\uFF08\u5982 https://www.anker.com/prime-2025\uFF09\n * \u4E5F\u652F\u6301\u8DEF\u5F84\u5339\u914D\uFF08\u5982 /prime-2025\uFF09\n */\nfunction isPathExcluded(currentPath: string, excludePaths: string[], currentUrl?: string): boolean {\n if (!excludePaths || excludePaths.length === 0) {\n return false\n }\n\n return excludePaths.some(pattern => {\n // \u5982\u679C pattern \u662F\u5B8C\u6574 URL\uFF08\u4EE5 http:// \u6216 https:// \u5F00\u5934\uFF09\n if (pattern.startsWith('http://') || pattern.startsWith('https://')) {\n if (!currentUrl) return false\n\n // \u652F\u6301\u901A\u914D\u7B26 * \u5339\u914D\u5B8C\u6574 URL\n if (pattern.includes('*')) {\n const regexPattern = pattern.replace(/\\*/g, '.*').replace(/\\//g, '\\\\/')\n const regex = new RegExp(`^${regexPattern}$`)\n return regex.test(currentUrl)\n }\n // \u7CBE\u786E\u5339\u914D\u5B8C\u6574 URL\n return currentUrl === pattern\n }\n\n // \u5426\u5219\u4F5C\u4E3A\u8DEF\u5F84\u5339\u914D\n // \u652F\u6301\u901A\u914D\u7B26 * \u5339\u914D\n if (pattern.includes('*')) {\n const regexPattern = pattern.replace(/\\*/g, '.*')\n const regex = new RegExp(`^${regexPattern}$`)\n return regex.test(currentPath)\n }\n // \u7CBE\u786E\u5339\u914D\n return currentPath === pattern\n })\n}\n\n/**\n * \u5730\u533A\u9009\u62E9 Hook\n * \u7528\u4E8E\u7BA1\u7406\u7528\u6237\u5730\u533A\u9009\u62E9\u548C Cookie \u5B58\u50A8\n */\nexport function useIPRedirect(options: UseIPRedirectOptions): UseIPRedirectReturn {\n const {\n cookieName = 'user_region',\n cookieExpireDays = 90,\n regions,\n currentRegionCode,\n onDetectRegion,\n autoShow = true,\n excludePaths = [],\n currentPath = '',\n currentUrl = '',\n } = options\n\n const [isOpen, setIsOpen] = useState(false)\n const [savedRegion, setSavedRegion] = useState<string | null>(null)\n const [detectedRegion, setDetectedRegion] = useState<string | null>(null)\n\n // \u4ECE Cookie \u8BFB\u53D6\u5DF2\u4FDD\u5B58\u7684\u5730\u533A\n useEffect(() => {\n const saved = Cookies.get(cookieName)\n if (saved) {\n setSavedRegion(saved)\n }\n }, [cookieName])\n\n // \u4FDD\u5B58\u7528\u6237\u9009\u62E9\u7684\u5730\u533A\n const saveRegion = useCallback(\n (regionCode: string, languageCode?: string) => {\n // \u683C\u5F0F\uFF1Av1_\u56FD\u5BB6_\u8BED\u8A00\uFF08\u5982 v1_CA_EN\uFF09\n // \u5982\u679C\u6CA1\u6709\u63D0\u4F9B languageCode\uFF0C\u4F7F\u7528 regionCode\uFF08\u5411\u540E\u517C\u5BB9\uFF09\n const cookieValue = languageCode ? `v1_${regionCode}_${languageCode}` : `v1_${regionCode}`\n Cookies.set(cookieName, cookieValue, { expires: cookieExpireDays })\n setSavedRegion(regionCode)\n },\n [cookieName, cookieExpireDays]\n )\n\n // \u68C0\u6D4B\u7528\u6237\u5730\u533A\n useEffect(() => {\n // \u767D\u540D\u5355\u68C0\u67E5\uFF1A\u5982\u679C\u5F53\u524D URL/\u8DEF\u5F84\u5728\u767D\u540D\u5355\u4E2D\uFF0C\u4E0D\u6267\u884C\u4EFB\u4F55\u68C0\u6D4B\u548C\u8DF3\u8F6C\n if (isPathExcluded(currentPath, excludePaths, currentUrl)) {\n return\n }\n\n // \u68C0\u67E5 URL \u53C2\u6570\uFF0C\u5982\u679C\u5B58\u5728 _region_selected \u6807\u8BB0\uFF0C\u6E05\u7406\u6389\u5E76\u6807\u8BB0\u672C\u6B21\u4F1A\u8BDD\u5DF2\u8DF3\u8F6C\n const urlParams = new URLSearchParams(window.location.search)\n const wasRedirected = urlParams.get('_region_selected')\n\n if (wasRedirected) {\n // \u6E05\u7406 URL \u53C2\u6570\uFF0C\u4F46\u4E0D\u4FDD\u5B58 Cookie\n // \u4F7F\u7528 sessionStorage \u8BB0\u5F55\u672C\u6B21\u4F1A\u8BDD\u5DF2\u8DF3\u8F6C\uFF0C\u907F\u514D\u5237\u65B0\u540E\u518D\u6B21\u8DF3\u8F6C\n sessionStorage.setItem(`${cookieName}_redirected`, 'true')\n urlParams.delete('_region_selected')\n const newUrl =\n window.location.pathname + (urlParams.toString() ? '?' + urlParams.toString() : '') + window.location.hash\n window.history.replaceState({}, '', newUrl)\n }\n\n // \u5982\u679C\u5DF2\u6709\u4FDD\u5B58\u7684\u5730\u533A\u9009\u62E9\uFF0C\u4E0D\u518D\u68C0\u6D4B\n if (savedRegion) {\n return\n }\n\n // \u5982\u679C\u672C\u6B21\u4F1A\u8BDD\u5DF2\u7ECF\u8DF3\u8F6C\u8FC7\uFF0C\u4E0D\u518D\u68C0\u6D4B\n if (sessionStorage.getItem(`${cookieName}_redirected`)) {\n return\n }\n\n // \u6267\u884C IP \u68C0\u6D4B\n if (onDetectRegion) {\n onDetectRegion().then(detected => {\n if (detected) {\n setDetectedRegion(detected)\n\n // \u5173\u952E\u5224\u65AD\uFF1A\u53EA\u6709\u5F53\u68C0\u6D4B\u5230\u7684\u5730\u533A\u4E0E\u5F53\u524D\u7AD9\u70B9\u4E0D\u540C\u65F6\u624D\u663E\u793A\u5F39\u7A97\n if (currentRegionCode) {\n if (detected !== currentRegionCode) {\n if (autoShow) {\n setIsOpen(true)\n }\n }\n // \uD83D\uDD27 \u5982\u679C\u68C0\u6D4B\u5230\u7684\u5730\u533A\u4E0E\u5F53\u524D\u7AD9\u70B9\u5339\u914D\uFF0C\u4E0D\u4FDD\u5B58 Cookie\n // Cookie \u53EA\u5728\u4EE5\u4E0B\u60C5\u51B5\u4FDD\u5B58\uFF1A\n // 1. \u7528\u6237\u4ECE\u5176\u4ED6\u7AD9\u70B9\u8DF3\u8F6C\u8FC7\u6765\uFF08URL \u5E26 _region_selected \u53C2\u6570\uFF09\n // 2. \u7528\u6237\u70B9\u51FB \"Stay Here\" \u6309\u94AE\u624B\u52A8\u4FDD\u5B58\n } else {\n // \u5982\u679C\u6CA1\u6709\u63D0\u4F9B currentRegionCode\uFF0C\u4F7F\u7528\u65E7\u7684\u884C\u4E3A\uFF08\u603B\u662F\u663E\u793A\u5F39\u7A97\uFF09\n if (autoShow) {\n setIsOpen(true)\n }\n }\n }\n })\n }\n }, [\n onDetectRegion,\n savedRegion,\n autoShow,\n currentRegionCode,\n saveRegion,\n cookieName,\n currentPath,\n excludePaths,\n currentUrl,\n ])\n\n // \u6E05\u9664\u5DF2\u4FDD\u5B58\u7684\u5730\u533A\u9009\u62E9\n const clearRegion = () => {\n Cookies.remove(cookieName)\n setSavedRegion(null)\n }\n\n // \u6839\u636E\u5730\u533A\u4EE3\u7801\u83B7\u53D6\u5730\u533A\u914D\u7F6E\n const getRegionByCode = (code: string) => {\n return regions.find(region => region.code === code)\n }\n\n return {\n isOpen,\n setIsOpen,\n savedRegion,\n detectedRegion,\n saveRegion,\n clearRegion,\n getRegionByCode,\n }\n}\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAiD,iBACjDC,EAAoB,wBA8CpB,SAASC,EAAeC,EAAqBC,EAAwBC,EAA8B,CACjG,MAAI,CAACD,GAAgBA,EAAa,SAAW,EACpC,GAGFA,EAAa,KAAKE,GAAW,CAElC,GAAIA,EAAQ,WAAW,SAAS,GAAKA,EAAQ,WAAW,UAAU,EAAG,CACnE,GAAI,CAACD,EAAY,MAAO,GAGxB,GAAIC,EAAQ,SAAS,GAAG,EAAG,CACzB,MAAMC,EAAeD,EAAQ,QAAQ,MAAO,IAAI,EAAE,QAAQ,MAAO,KAAK,EAEtE,OADc,IAAI,OAAO,IAAIC,CAAY,GAAG,EAC/B,KAAKF,CAAU,CAC9B,CAEA,OAAOA,IAAeC,CACxB,CAIA,GAAIA,EAAQ,SAAS,GAAG,EAAG,CACzB,MAAMC,EAAeD,EAAQ,QAAQ,MAAO,IAAI,EAEhD,OADc,IAAI,OAAO,IAAIC,CAAY,GAAG,EAC/B,KAAKJ,CAAW,CAC/B,CAEA,OAAOA,IAAgBG,CACzB,CAAC,CACH,CAMO,SAASR,EAAcU,EAAoD,CAChF,KAAM,CACJ,WAAAC,EAAa,cACb,iBAAAC,EAAmB,GACnB,QAAAC,EACA,kBAAAC,EACA,eAAAC,EACA,SAAAC,EAAW,GACX,aAAAV,EAAe,CAAC,EAChB,YAAAD,EAAc,GACd,WAAAE,EAAa,EACf,EAAIG,EAEE,CAACO,EAAQC,CAAS,KAAI,YAAS,EAAK,EACpC,CAACC,EAAaC,CAAc,KAAI,YAAwB,IAAI,EAC5D,CAACC,EAAgBC,CAAiB,KAAI,YAAwB,IAAI,KAGxE,aAAU,IAAM,CACd,MAAMC,EAAQ,EAAAC,QAAQ,IAAIb,CAAU,EAChCY,GACFH,EAAeG,CAAK,CAExB,EAAG,CAACZ,CAAU,CAAC,EAGf,MAAMc,KAAa,eACjB,CAACC,EAAoBC,IAA0B,CAG7C,MAAMC,EAAcD,EAAe,MAAMD,CAAU,IAAIC,CAAY,GAAK,MAAMD,CAAU,GACxF,EAAAF,QAAQ,IAAIb,EAAYiB,EAAa,CAAE,QAAShB,CAAiB,CAAC,EAClEQ,EAAeM,CAAU,CAC3B,EACA,CAACf,EAAYC,CAAgB,CAC/B,EAGA,sBAAU,IAAM,CAEd,GAAIR,EAAeC,EAAaC,EAAcC,CAAU,EACtD,OAIF,MAAMsB,EAAY,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAG5D,GAFsBA,EAAU,IAAI,kBAAkB,EAEnC,CAGjB,eAAe,QAAQ,GAAGlB,CAAU,cAAe,MAAM,EACzDkB,EAAU,OAAO,kBAAkB,EACnC,MAAMC,EACJ,OAAO,SAAS,UAAYD,EAAU,SAAS,EAAI,IAAMA,EAAU,SAAS,EAAI,IAAM,OAAO,SAAS,KACxG,OAAO,QAAQ,aAAa,CAAC,EAAG,GAAIC,CAAM,CAC5C,CAGIX,GAKA,eAAe,QAAQ,GAAGR,CAAU,aAAa,GAKjDI,GACFA,EAAe,EAAE,KAAKgB,GAAY,CAC5BA,IACFT,EAAkBS,CAAQ,EAGtBjB,EACEiB,IAAajB,GACXE,GACFE,EAAU,EAAI,EASdF,GACFE,EAAU,EAAI,EAItB,CAAC,CAEL,EAAG,CACDH,EACAI,EACAH,EACAF,EACAW,EACAd,EACAN,EACAC,EACAC,CACF,CAAC,EAaM,CACL,OAAAU,EACA,UAAAC,EACA,YAAAC,EACA,eAAAE,EACA,WAAAI,EACA,YAhBkB,IAAM,CACxB,EAAAD,QAAQ,OAAOb,CAAU,EACzBS,EAAe,IAAI,CACrB,EAcE,gBAXuBY,GAChBnB,EAAQ,KAAKoB,GAAUA,EAAO,OAASD,CAAI,CAWpD,CACF",
|
|
6
|
+
"names": ["useIPRedirect_exports", "__export", "useIPRedirect", "__toCommonJS", "import_react", "import_js_cookie", "isPathExcluded", "currentPath", "excludePaths", "currentUrl", "pattern", "regexPattern", "options", "cookieName", "cookieExpireDays", "regions", "currentRegionCode", "onDetectRegion", "autoShow", "isOpen", "setIsOpen", "savedRegion", "setSavedRegion", "detectedRegion", "setDetectedRegion", "saved", "Cookies", "saveRegion", "regionCode", "languageCode", "cookieValue", "urlParams", "newUrl", "detected", "code", "region"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import type { RegionConfig } from './type.js';
|
|
2
|
+
export interface UseRedirectBannerOptions {
|
|
3
|
+
/**
|
|
4
|
+
* 地理位置信息
|
|
5
|
+
*/
|
|
6
|
+
geo?: {
|
|
7
|
+
country?: {
|
|
8
|
+
code?: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* 地区配置列表
|
|
13
|
+
*/
|
|
14
|
+
regions: RegionConfig[];
|
|
15
|
+
/**
|
|
16
|
+
* 国家到地区的映射
|
|
17
|
+
*/
|
|
18
|
+
countryToRegionMap: Record<string, string>;
|
|
19
|
+
/**
|
|
20
|
+
* 当前站点的地区代码
|
|
21
|
+
*/
|
|
22
|
+
currentRegionCode: string;
|
|
23
|
+
/**
|
|
24
|
+
* 当前路径
|
|
25
|
+
*/
|
|
26
|
+
pathname: string;
|
|
27
|
+
/**
|
|
28
|
+
* 白名单路径(在白名单中不显示横幅)
|
|
29
|
+
*/
|
|
30
|
+
excludePaths?: string[];
|
|
31
|
+
/**
|
|
32
|
+
* 保存地区选择的函数
|
|
33
|
+
*/
|
|
34
|
+
saveRegion: (regionCode: string, languageCode?: string) => void;
|
|
35
|
+
/**
|
|
36
|
+
* 打开地区选择弹窗的函数
|
|
37
|
+
*/
|
|
38
|
+
setModalOpen: (open: boolean) => void;
|
|
39
|
+
}
|
|
40
|
+
export interface UseRedirectBannerReturn {
|
|
41
|
+
/**
|
|
42
|
+
* 横幅是否可见
|
|
43
|
+
*/
|
|
44
|
+
bannerVisible: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* 设置横幅可见性
|
|
47
|
+
*/
|
|
48
|
+
setBannerVisible: (visible: boolean) => void;
|
|
49
|
+
/**
|
|
50
|
+
* 推荐的地区信息
|
|
51
|
+
*/
|
|
52
|
+
recommendedRegion: (RegionConfig & {
|
|
53
|
+
userCountry?: string;
|
|
54
|
+
}) | null;
|
|
55
|
+
/**
|
|
56
|
+
* 用户是否手动关闭了横幅
|
|
57
|
+
*/
|
|
58
|
+
userDismissedBanner: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* 设置用户已关闭横幅的状态
|
|
61
|
+
*/
|
|
62
|
+
setUserDismissedBanner: (dismissed: boolean) => void;
|
|
63
|
+
/**
|
|
64
|
+
* "留在这里"按钮处理函数
|
|
65
|
+
*/
|
|
66
|
+
handleStayHere: () => void;
|
|
67
|
+
/**
|
|
68
|
+
* "切换站点"按钮处理函数
|
|
69
|
+
*/
|
|
70
|
+
handleSwitchSite: () => void;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 地区重定向横幅控制 Hook
|
|
74
|
+
*
|
|
75
|
+
* 自动检测用户是否被重定向,并显示提示横幅
|
|
76
|
+
* 提供"留在这里"和"切换站点"的交互
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```tsx
|
|
80
|
+
* const {
|
|
81
|
+
* bannerVisible,
|
|
82
|
+
* setBannerVisible,
|
|
83
|
+
* recommendedRegion,
|
|
84
|
+
* handleStayHere,
|
|
85
|
+
* handleSwitchSite,
|
|
86
|
+
* } = useRedirectBanner({
|
|
87
|
+
* geo,
|
|
88
|
+
* regions,
|
|
89
|
+
* countryToRegionMap,
|
|
90
|
+
* currentRegionCode,
|
|
91
|
+
* pathname,
|
|
92
|
+
* excludePaths,
|
|
93
|
+
* saveRegion,
|
|
94
|
+
* setModalOpen,
|
|
95
|
+
* })
|
|
96
|
+
*
|
|
97
|
+
* return (
|
|
98
|
+
* <RegionBanner
|
|
99
|
+
* visible={bannerVisible}
|
|
100
|
+
* onVisibleChange={setBannerVisible}
|
|
101
|
+
* onStayHere={handleStayHere}
|
|
102
|
+
* onSwitchSite={handleSwitchSite}
|
|
103
|
+
* recommendedRegion={recommendedRegion}
|
|
104
|
+
* />
|
|
105
|
+
* )
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
export declare function useRedirectBanner(options: UseRedirectBannerOptions): UseRedirectBannerReturn;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var a=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var x=(n,e)=>{for(var o in e)a(n,o,{get:e[o],enumerable:!0})},D=(n,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of U(e))!w.call(n,t)&&t!==o&&a(n,t,{get:()=>e[t],enumerable:!(i=I(e,t))||i.enumerable});return n};var M=n=>D(a({},"__esModule",{value:!0}),n);var V={};x(V,{useRedirectBanner:()=>O});module.exports=M(V);var r=require("react"),v=require("./utils.js");function O(n){const{geo:e,regions:o,countryToRegionMap:i,currentRegionCode:t,pathname:c,excludePaths:g=[],saveRegion:u,setModalOpen:m}=n,[C,d]=(0,r.useState)(!1),[y,S]=(0,r.useState)(null),[b,l]=(0,r.useState)(!1);(0,r.useEffect)(()=>{if(typeof window>"u")return;if(sessionStorage.getItem("auto_redirected")==="true"&&e?.country?.code){if((0,v.isPathInWhitelist)(c,g)){sessionStorage.removeItem("auto_redirected"),sessionStorage.removeItem("auto_redirect_from");return}sessionStorage.removeItem("auto_redirected"),sessionStorage.removeItem("auto_redirect_from");const s=e.country.code.toUpperCase(),R=i[s];if(R){const p=o.find(_=>_.code===R);p&&(S({...p,userCountry:s}),d(!0))}}},[e,i,o,c,g]);const h=(0,r.useCallback)(()=>{const f=o.find(s=>s.code===t);u(t,f?.languageCode),typeof window<"u"&&(sessionStorage.removeItem("auto_redirected"),sessionStorage.removeItem("auto_redirect_from")),l(!0),d(!1)},[u,t,o]),B=(0,r.useCallback)(()=>{m(!0)},[m]);return{bannerVisible:C,setBannerVisible:d,recommendedRegion:y,userDismissedBanner:b,setUserDismissedBanner:l,handleStayHere:h,handleSwitchSite:B}}
|
|
2
|
+
//# sourceMappingURL=useRedirectBanner.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/biz-components/IPRedirect/useRedirectBanner.tsx"],
|
|
4
|
+
"sourcesContent": ["import { useState, useEffect, useCallback } from 'react'\nimport { isPathInWhitelist } from './utils.js'\nimport type { RegionConfig } from './type.js'\n\nexport interface UseRedirectBannerOptions {\n /**\n * \u5730\u7406\u4F4D\u7F6E\u4FE1\u606F\n */\n geo?: {\n country?: {\n code?: string\n }\n }\n\n /**\n * \u5730\u533A\u914D\u7F6E\u5217\u8868\n */\n regions: RegionConfig[]\n\n /**\n * \u56FD\u5BB6\u5230\u5730\u533A\u7684\u6620\u5C04\n */\n countryToRegionMap: Record<string, string>\n\n /**\n * \u5F53\u524D\u7AD9\u70B9\u7684\u5730\u533A\u4EE3\u7801\n */\n currentRegionCode: string\n\n /**\n * \u5F53\u524D\u8DEF\u5F84\n */\n pathname: string\n\n /**\n * \u767D\u540D\u5355\u8DEF\u5F84\uFF08\u5728\u767D\u540D\u5355\u4E2D\u4E0D\u663E\u793A\u6A2A\u5E45\uFF09\n */\n excludePaths?: string[]\n\n /**\n * \u4FDD\u5B58\u5730\u533A\u9009\u62E9\u7684\u51FD\u6570\n */\n saveRegion: (regionCode: string, languageCode?: string) => void\n\n /**\n * \u6253\u5F00\u5730\u533A\u9009\u62E9\u5F39\u7A97\u7684\u51FD\u6570\n */\n setModalOpen: (open: boolean) => void\n}\n\nexport interface UseRedirectBannerReturn {\n /**\n * \u6A2A\u5E45\u662F\u5426\u53EF\u89C1\n */\n bannerVisible: boolean\n\n /**\n * \u8BBE\u7F6E\u6A2A\u5E45\u53EF\u89C1\u6027\n */\n setBannerVisible: (visible: boolean) => void\n\n /**\n * \u63A8\u8350\u7684\u5730\u533A\u4FE1\u606F\n */\n recommendedRegion: (RegionConfig & { userCountry?: string }) | null\n\n /**\n * \u7528\u6237\u662F\u5426\u624B\u52A8\u5173\u95ED\u4E86\u6A2A\u5E45\n */\n userDismissedBanner: boolean\n\n /**\n * \u8BBE\u7F6E\u7528\u6237\u5DF2\u5173\u95ED\u6A2A\u5E45\u7684\u72B6\u6001\n */\n setUserDismissedBanner: (dismissed: boolean) => void\n\n /**\n * \"\u7559\u5728\u8FD9\u91CC\"\u6309\u94AE\u5904\u7406\u51FD\u6570\n */\n handleStayHere: () => void\n\n /**\n * \"\u5207\u6362\u7AD9\u70B9\"\u6309\u94AE\u5904\u7406\u51FD\u6570\n */\n handleSwitchSite: () => void\n}\n\n/**\n * \u5730\u533A\u91CD\u5B9A\u5411\u6A2A\u5E45\u63A7\u5236 Hook\n *\n * \u81EA\u52A8\u68C0\u6D4B\u7528\u6237\u662F\u5426\u88AB\u91CD\u5B9A\u5411\uFF0C\u5E76\u663E\u793A\u63D0\u793A\u6A2A\u5E45\n * \u63D0\u4F9B\"\u7559\u5728\u8FD9\u91CC\"\u548C\"\u5207\u6362\u7AD9\u70B9\"\u7684\u4EA4\u4E92\n *\n * @example\n * ```tsx\n * const {\n * bannerVisible,\n * setBannerVisible,\n * recommendedRegion,\n * handleStayHere,\n * handleSwitchSite,\n * } = useRedirectBanner({\n * geo,\n * regions,\n * countryToRegionMap,\n * currentRegionCode,\n * pathname,\n * excludePaths,\n * saveRegion,\n * setModalOpen,\n * })\n *\n * return (\n * <RegionBanner\n * visible={bannerVisible}\n * onVisibleChange={setBannerVisible}\n * onStayHere={handleStayHere}\n * onSwitchSite={handleSwitchSite}\n * recommendedRegion={recommendedRegion}\n * />\n * )\n * ```\n */\nexport function useRedirectBanner(options: UseRedirectBannerOptions): UseRedirectBannerReturn {\n const {\n geo,\n regions,\n countryToRegionMap,\n currentRegionCode,\n pathname,\n excludePaths = [],\n saveRegion,\n setModalOpen,\n } = options\n\n const [bannerVisible, setBannerVisible] = useState(false)\n const [recommendedRegion, setRecommendedRegion] = useState<(RegionConfig & { userCountry?: string }) | null>(null)\n const [userDismissedBanner, setUserDismissedBanner] = useState(false)\n\n // \u68C0\u67E5\u662F\u5426\u662F\u81EA\u52A8\u8DF3\u8F6C\u8FC7\u6765\u7684\uFF0C\u5982\u679C\u662F\u5219\u663E\u793A\u6A2A\u5E45\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const autoRedirected = sessionStorage.getItem('auto_redirected')\n\n if (autoRedirected === 'true' && geo?.country?.code) {\n // \u68C0\u67E5\u5F53\u524D\u8DEF\u5F84\u662F\u5426\u5728\u767D\u540D\u5355\u4E2D\n if (isPathInWhitelist(pathname, excludePaths)) {\n // \u5728\u767D\u540D\u5355\u4E2D\uFF0C\u6E05\u9664\u6807\u8BB0\u4F46\u4E0D\u663E\u793A\u6A2A\u5E45\n sessionStorage.removeItem('auto_redirected')\n sessionStorage.removeItem('auto_redirect_from')\n return\n }\n\n // \u6E05\u9664\u6807\u8BB0\uFF08\u53EA\u663E\u793A\u4E00\u6B21\uFF09\n sessionStorage.removeItem('auto_redirected')\n sessionStorage.removeItem('auto_redirect_from')\n\n // \u8BBE\u7F6E\u63A8\u8350\u7684\u5730\u533A\u4FE1\u606F\n const userCountry = geo.country.code.toUpperCase()\n const recommendedRegionCode = countryToRegionMap[userCountry]\n\n // \u53EA\u6709\u5728\u7528\u6237\u7684\u56FD\u5BB6\u6709\u6620\u5C04\u914D\u7F6E\u65F6\u624D\u663E\u793A\u6A2A\u5E45\n if (recommendedRegionCode) {\n const targetRegion = regions.find(r => r.code === recommendedRegionCode)\n if (targetRegion) {\n setRecommendedRegion({\n ...targetRegion,\n userCountry,\n })\n // \u663E\u793A\u6A2A\u5E45\n setBannerVisible(true)\n }\n }\n }\n }, [geo, countryToRegionMap, regions, pathname, excludePaths])\n\n // \"\u7559\u5728\u8FD9\u91CC\"\u6309\u94AE\u5904\u7406\n const handleStayHere = useCallback(() => {\n // \u67E5\u627E\u5F53\u524D\u5730\u533A\u7684\u8BED\u8A00\u4EE3\u7801\n const currentRegion = regions.find(r => r.code === currentRegionCode)\n\n // \u4FDD\u5B58\u7528\u6237\u9009\u62E9\u5230 cookie\uFF08\u5305\u542B\u8BED\u8A00\u4EE3\u7801\uFF09\n saveRegion(currentRegionCode, currentRegion?.languageCode)\n\n // \u6E05\u9664 sessionStorage \u6807\u8BB0\uFF08\u5982\u679C\u6709\uFF09\n if (typeof window !== 'undefined') {\n sessionStorage.removeItem('auto_redirected')\n sessionStorage.removeItem('auto_redirect_from')\n }\n\n // \u6807\u8BB0\u7528\u6237\u5DF2\u624B\u52A8\u5173\u95ED\u6A2A\u5E45\n setUserDismissedBanner(true)\n\n // \u9690\u85CF\u6A2A\u5E45\n setBannerVisible(false)\n }, [saveRegion, currentRegionCode, regions])\n\n // \"\u5207\u6362\u7AD9\u70B9\"\u6309\u94AE\u5904\u7406\n const handleSwitchSite = useCallback(() => {\n // \u6253\u5F00\u5F39\u7A97\u8BA9\u7528\u6237\u9009\u62E9\u5730\u533A\n setModalOpen(true)\n }, [setModalOpen])\n\n return {\n bannerVisible,\n setBannerVisible,\n recommendedRegion,\n userDismissedBanner,\n setUserDismissedBanner,\n handleStayHere,\n handleSwitchSite,\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAiD,iBACjDC,EAAkC,sBA0H3B,SAASH,EAAkBI,EAA4D,CAC5F,KAAM,CACJ,IAAAC,EACA,QAAAC,EACA,mBAAAC,EACA,kBAAAC,EACA,SAAAC,EACA,aAAAC,EAAe,CAAC,EAChB,WAAAC,EACA,aAAAC,CACF,EAAIR,EAEE,CAACS,EAAeC,CAAgB,KAAI,YAAS,EAAK,EAClD,CAACC,EAAmBC,CAAoB,KAAI,YAA2D,IAAI,EAC3G,CAACC,EAAqBC,CAAsB,KAAI,YAAS,EAAK,KAGpE,aAAU,IAAM,CACd,GAAI,OAAO,OAAW,IAAa,OAInC,GAFuB,eAAe,QAAQ,iBAAiB,IAExC,QAAUb,GAAK,SAAS,KAAM,CAEnD,MAAI,qBAAkBI,EAAUC,CAAY,EAAG,CAE7C,eAAe,WAAW,iBAAiB,EAC3C,eAAe,WAAW,oBAAoB,EAC9C,MACF,CAGA,eAAe,WAAW,iBAAiB,EAC3C,eAAe,WAAW,oBAAoB,EAG9C,MAAMS,EAAcd,EAAI,QAAQ,KAAK,YAAY,EAC3Ce,EAAwBb,EAAmBY,CAAW,EAG5D,GAAIC,EAAuB,CACzB,MAAMC,EAAef,EAAQ,KAAKgB,GAAKA,EAAE,OAASF,CAAqB,EACnEC,IACFL,EAAqB,CACnB,GAAGK,EACH,YAAAF,CACF,CAAC,EAEDL,EAAiB,EAAI,EAEzB,CACF,CACF,EAAG,CAACT,EAAKE,EAAoBD,EAASG,EAAUC,CAAY,CAAC,EAG7D,MAAMa,KAAiB,eAAY,IAAM,CAEvC,MAAMC,EAAgBlB,EAAQ,KAAKgB,GAAKA,EAAE,OAASd,CAAiB,EAGpEG,EAAWH,EAAmBgB,GAAe,YAAY,EAGrD,OAAO,OAAW,MACpB,eAAe,WAAW,iBAAiB,EAC3C,eAAe,WAAW,oBAAoB,GAIhDN,EAAuB,EAAI,EAG3BJ,EAAiB,EAAK,CACxB,EAAG,CAACH,EAAYH,EAAmBF,CAAO,CAAC,EAGrCmB,KAAmB,eAAY,IAAM,CAEzCb,EAAa,EAAI,CACnB,EAAG,CAACA,CAAY,CAAC,EAEjB,MAAO,CACL,cAAAC,EACA,iBAAAC,EACA,kBAAAC,EACA,oBAAAE,EACA,uBAAAC,EACA,eAAAK,EACA,iBAAAE,CACF,CACF",
|
|
6
|
+
"names": ["useRedirectBanner_exports", "__export", "useRedirectBanner", "__toCommonJS", "import_react", "import_utils", "options", "geo", "regions", "countryToRegionMap", "currentRegionCode", "pathname", "excludePaths", "saveRegion", "setModalOpen", "bannerVisible", "setBannerVisible", "recommendedRegion", "setRecommendedRegion", "userDismissedBanner", "setUserDismissedBanner", "userCountry", "recommendedRegionCode", "targetRegion", "r", "handleStayHere", "currentRegion", "handleSwitchSite"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import type { RegionConfig } from './type.js';
|
|
2
|
+
export interface UseRegionRedirectManagerOptions {
|
|
3
|
+
/**
|
|
4
|
+
* 地理位置信息
|
|
5
|
+
*/
|
|
6
|
+
geo?: {
|
|
7
|
+
country?: {
|
|
8
|
+
code?: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* 地区配置列表
|
|
13
|
+
*/
|
|
14
|
+
regions: RegionConfig[];
|
|
15
|
+
/**
|
|
16
|
+
* 国家到地区的映射
|
|
17
|
+
*/
|
|
18
|
+
countryToRegionMap: Record<string, string>;
|
|
19
|
+
/**
|
|
20
|
+
* 地区代码到路径前缀的映射
|
|
21
|
+
*/
|
|
22
|
+
regionToPathMap: Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* 当前站点的地区代码
|
|
25
|
+
*/
|
|
26
|
+
currentRegionCode: string;
|
|
27
|
+
/**
|
|
28
|
+
* 当前站点的 locale
|
|
29
|
+
*/
|
|
30
|
+
locale?: string;
|
|
31
|
+
/**
|
|
32
|
+
* 当前路径
|
|
33
|
+
*/
|
|
34
|
+
pathname: string;
|
|
35
|
+
/**
|
|
36
|
+
* 当前完整 URL
|
|
37
|
+
*/
|
|
38
|
+
currentUrl?: string;
|
|
39
|
+
/**
|
|
40
|
+
* 白名单路径(在白名单中不跳转)
|
|
41
|
+
*/
|
|
42
|
+
excludePaths?: string[];
|
|
43
|
+
/**
|
|
44
|
+
* Cookie 名称
|
|
45
|
+
* @default 'user_region'
|
|
46
|
+
*/
|
|
47
|
+
cookieName?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Cookie 过期天数
|
|
50
|
+
* @default 90
|
|
51
|
+
*/
|
|
52
|
+
cookieExpireDays?: number;
|
|
53
|
+
/**
|
|
54
|
+
* 是否检查目标站点页面存在
|
|
55
|
+
* @default true
|
|
56
|
+
*/
|
|
57
|
+
checkPageExists?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* 页面存在检查的 API 端点
|
|
60
|
+
* @default '/api/check-page-exists'
|
|
61
|
+
*/
|
|
62
|
+
checkPageApiEndpoint?: string;
|
|
63
|
+
/**
|
|
64
|
+
* 地区检测回调
|
|
65
|
+
*/
|
|
66
|
+
onDetectRegion?: (geo: any) => Promise<any>;
|
|
67
|
+
}
|
|
68
|
+
export interface UseRegionRedirectManagerReturn {
|
|
69
|
+
/**
|
|
70
|
+
* 地区选择弹窗是否打开
|
|
71
|
+
*/
|
|
72
|
+
isRegionModalOpen: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* 设置地区选择弹窗状态
|
|
75
|
+
*/
|
|
76
|
+
setRegionModalOpen: (open: boolean) => void;
|
|
77
|
+
/**
|
|
78
|
+
* 保存地区选择
|
|
79
|
+
*/
|
|
80
|
+
saveRegion: (regionCode: string, languageCode?: string) => void;
|
|
81
|
+
/**
|
|
82
|
+
* 保存的地区信息
|
|
83
|
+
*/
|
|
84
|
+
savedRegion: any;
|
|
85
|
+
/**
|
|
86
|
+
* 检测到的地区信息
|
|
87
|
+
*/
|
|
88
|
+
detectedRegion: any;
|
|
89
|
+
/**
|
|
90
|
+
* 横幅是否可见
|
|
91
|
+
*/
|
|
92
|
+
bannerVisible: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* 设置横幅可见性
|
|
95
|
+
*/
|
|
96
|
+
setBannerVisible: (visible: boolean) => void;
|
|
97
|
+
/**
|
|
98
|
+
* 推荐的地区信息
|
|
99
|
+
*/
|
|
100
|
+
recommendedRegion: (RegionConfig & {
|
|
101
|
+
userCountry?: string;
|
|
102
|
+
}) | null;
|
|
103
|
+
/**
|
|
104
|
+
* 用户是否手动关闭了横幅
|
|
105
|
+
*/
|
|
106
|
+
userDismissedBanner: boolean;
|
|
107
|
+
/**
|
|
108
|
+
* "留在这里"按钮处理函数
|
|
109
|
+
*/
|
|
110
|
+
handleStayHere: () => void;
|
|
111
|
+
/**
|
|
112
|
+
* "切换站点"按钮处理函数
|
|
113
|
+
*/
|
|
114
|
+
handleSwitchSite: () => void;
|
|
115
|
+
/**
|
|
116
|
+
* 手动选择地区的回调
|
|
117
|
+
*/
|
|
118
|
+
handleRegionSelect: (region: RegionConfig) => void;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* 统一的地区重定向管理 Hook
|
|
122
|
+
*
|
|
123
|
+
* 整合了以下功能:
|
|
124
|
+
* - IP 检测和地区推荐
|
|
125
|
+
* - Cookie 偏好记忆
|
|
126
|
+
* - 自动跳转处理
|
|
127
|
+
* - 横幅显示管理
|
|
128
|
+
* - 地区选择交互
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```tsx
|
|
132
|
+
* const {
|
|
133
|
+
* isRegionModalOpen,
|
|
134
|
+
* setRegionModalOpen,
|
|
135
|
+
* bannerVisible,
|
|
136
|
+
* recommendedRegion,
|
|
137
|
+
* handleStayHere,
|
|
138
|
+
* handleSwitchSite,
|
|
139
|
+
* handleRegionSelect,
|
|
140
|
+
* } = useRegionRedirectManager({
|
|
141
|
+
* geo,
|
|
142
|
+
* regions,
|
|
143
|
+
* countryToRegionMap,
|
|
144
|
+
* regionToPathMap,
|
|
145
|
+
* currentRegionCode,
|
|
146
|
+
* locale,
|
|
147
|
+
* pathname,
|
|
148
|
+
* excludePaths,
|
|
149
|
+
* })
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
export declare function useRegionRedirectManager(options: UseRegionRedirectManagerOptions): UseRegionRedirectManagerReturn;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var c=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var j=(o,e)=>{for(var n in e)c(o,n,{get:e[n],enumerable:!0})},_=(o,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of I(e))!N.call(o,i)&&i!==n&&c(o,i,{get:()=>e[i],enumerable:!(t=H(e,i))||t.enumerable});return o};var q=o=>_(c({},"__esModule",{value:!0}),o);var F={};j(F,{useRegionRedirectManager:()=>z});module.exports=q(F);var h=require("react"),f=require("./useIPRedirect.js"),b=require("./useAutoRedirect.js"),y=require("./useRedirectBanner.js"),M=require("./useSavedRegionRedirect.js"),v=require("./useDetectedRegionRedirect.js");function z(o){const{geo:e,regions:n,countryToRegionMap:t,regionToPathMap:i,currentRegionCode:r,locale:C,pathname:a,currentUrl:P,excludePaths:s=[],cookieName:k="user_region",cookieExpireDays:x=90,checkPageExists:S=!0,checkPageApiEndpoint:O="/api/check-page-exists",onDetectRegion:d}=o,{isOpen:D,setIsOpen:R,saveRegion:g,savedRegion:l,detectedRegion:p}=(0,f.useIPRedirect)({regions:n,currentRegionCode:r,cookieName:k,cookieExpireDays:x,autoShow:!1,onDetectRegion:d?()=>d(e):void 0,excludePaths:s,currentPath:a,currentUrl:P}),{handleAutoRedirect:u}=(0,b.useAutoRedirect)({regions:n,regionToPathMap:i,geo:e,locale:C,checkPageExists:S,checkPageApiEndpoint:O}),{bannerVisible:E,setBannerVisible:U,recommendedRegion:B,userDismissedBanner:A,handleStayHere:T,handleSwitchSite:V}=(0,y.useRedirectBanner)({geo:e,regions:n,countryToRegionMap:t,currentRegionCode:r,pathname:a,excludePaths:s,saveRegion:g,setModalOpen:R});(0,M.useSavedRegionRedirect)({savedRegion:l,currentRegionCode:r,regions:n,excludePaths:s,pathname:a,onRedirect:u}),(0,v.useDetectedRegionRedirect)({detectedRegion:p,currentRegionCode:r,regions:n,excludePaths:s,pathname:a,onRedirect:u});const w=(0,h.useCallback)(m=>{g(m.code,m.languageCode)},[g]);return{isRegionModalOpen:D,setRegionModalOpen:R,saveRegion:g,savedRegion:l,detectedRegion:p,bannerVisible:E,setBannerVisible:U,recommendedRegion:B,userDismissedBanner:A,handleStayHere:T,handleSwitchSite:V,handleRegionSelect:w}}
|
|
2
|
+
//# sourceMappingURL=useRegionRedirectManager.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/biz-components/IPRedirect/useRegionRedirectManager.tsx"],
|
|
4
|
+
"sourcesContent": ["import { useCallback } from 'react'\nimport { useIPRedirect } from './useIPRedirect.js'\nimport { useAutoRedirect } from './useAutoRedirect.js'\nimport { useRedirectBanner } from './useRedirectBanner.js'\nimport { useSavedRegionRedirect } from './useSavedRegionRedirect.js'\nimport { useDetectedRegionRedirect } from './useDetectedRegionRedirect.js'\nimport type { RegionConfig } from './type.js'\n\nexport interface UseRegionRedirectManagerOptions {\n /**\n * \u5730\u7406\u4F4D\u7F6E\u4FE1\u606F\n */\n geo?: {\n country?: {\n code?: string\n }\n }\n\n /**\n * \u5730\u533A\u914D\u7F6E\u5217\u8868\n */\n regions: RegionConfig[]\n\n /**\n * \u56FD\u5BB6\u5230\u5730\u533A\u7684\u6620\u5C04\n */\n countryToRegionMap: Record<string, string>\n\n /**\n * \u5730\u533A\u4EE3\u7801\u5230\u8DEF\u5F84\u524D\u7F00\u7684\u6620\u5C04\n */\n regionToPathMap: Record<string, string>\n\n /**\n * \u5F53\u524D\u7AD9\u70B9\u7684\u5730\u533A\u4EE3\u7801\n */\n currentRegionCode: string\n\n /**\n * \u5F53\u524D\u7AD9\u70B9\u7684 locale\n */\n locale?: string\n\n /**\n * \u5F53\u524D\u8DEF\u5F84\n */\n pathname: string\n\n /**\n * \u5F53\u524D\u5B8C\u6574 URL\n */\n currentUrl?: string\n\n /**\n * \u767D\u540D\u5355\u8DEF\u5F84\uFF08\u5728\u767D\u540D\u5355\u4E2D\u4E0D\u8DF3\u8F6C\uFF09\n */\n excludePaths?: string[]\n\n /**\n * Cookie \u540D\u79F0\n * @default 'user_region'\n */\n cookieName?: string\n\n /**\n * Cookie \u8FC7\u671F\u5929\u6570\n * @default 90\n */\n cookieExpireDays?: number\n\n /**\n * \u662F\u5426\u68C0\u67E5\u76EE\u6807\u7AD9\u70B9\u9875\u9762\u5B58\u5728\n * @default true\n */\n checkPageExists?: boolean\n\n /**\n * \u9875\u9762\u5B58\u5728\u68C0\u67E5\u7684 API \u7AEF\u70B9\n * @default '/api/check-page-exists'\n */\n checkPageApiEndpoint?: string\n\n /**\n * \u5730\u533A\u68C0\u6D4B\u56DE\u8C03\n */\n onDetectRegion?: (geo: any) => Promise<any>\n}\n\nexport interface UseRegionRedirectManagerReturn {\n /**\n * \u5730\u533A\u9009\u62E9\u5F39\u7A97\u662F\u5426\u6253\u5F00\n */\n isRegionModalOpen: boolean\n\n /**\n * \u8BBE\u7F6E\u5730\u533A\u9009\u62E9\u5F39\u7A97\u72B6\u6001\n */\n setRegionModalOpen: (open: boolean) => void\n\n /**\n * \u4FDD\u5B58\u5730\u533A\u9009\u62E9\n */\n saveRegion: (regionCode: string, languageCode?: string) => void\n\n /**\n * \u4FDD\u5B58\u7684\u5730\u533A\u4FE1\u606F\n */\n savedRegion: any\n\n /**\n * \u68C0\u6D4B\u5230\u7684\u5730\u533A\u4FE1\u606F\n */\n detectedRegion: any\n\n /**\n * \u6A2A\u5E45\u662F\u5426\u53EF\u89C1\n */\n bannerVisible: boolean\n\n /**\n * \u8BBE\u7F6E\u6A2A\u5E45\u53EF\u89C1\u6027\n */\n setBannerVisible: (visible: boolean) => void\n\n /**\n * \u63A8\u8350\u7684\u5730\u533A\u4FE1\u606F\n */\n recommendedRegion: (RegionConfig & { userCountry?: string }) | null\n\n /**\n * \u7528\u6237\u662F\u5426\u624B\u52A8\u5173\u95ED\u4E86\u6A2A\u5E45\n */\n userDismissedBanner: boolean\n\n /**\n * \"\u7559\u5728\u8FD9\u91CC\"\u6309\u94AE\u5904\u7406\u51FD\u6570\n */\n handleStayHere: () => void\n\n /**\n * \"\u5207\u6362\u7AD9\u70B9\"\u6309\u94AE\u5904\u7406\u51FD\u6570\n */\n handleSwitchSite: () => void\n\n /**\n * \u624B\u52A8\u9009\u62E9\u5730\u533A\u7684\u56DE\u8C03\n */\n handleRegionSelect: (region: RegionConfig) => void\n}\n\n/**\n * \u7EDF\u4E00\u7684\u5730\u533A\u91CD\u5B9A\u5411\u7BA1\u7406 Hook\n *\n * \u6574\u5408\u4E86\u4EE5\u4E0B\u529F\u80FD\uFF1A\n * - IP \u68C0\u6D4B\u548C\u5730\u533A\u63A8\u8350\n * - Cookie \u504F\u597D\u8BB0\u5FC6\n * - \u81EA\u52A8\u8DF3\u8F6C\u5904\u7406\n * - \u6A2A\u5E45\u663E\u793A\u7BA1\u7406\n * - \u5730\u533A\u9009\u62E9\u4EA4\u4E92\n *\n * @example\n * ```tsx\n * const {\n * isRegionModalOpen,\n * setRegionModalOpen,\n * bannerVisible,\n * recommendedRegion,\n * handleStayHere,\n * handleSwitchSite,\n * handleRegionSelect,\n * } = useRegionRedirectManager({\n * geo,\n * regions,\n * countryToRegionMap,\n * regionToPathMap,\n * currentRegionCode,\n * locale,\n * pathname,\n * excludePaths,\n * })\n * ```\n */\nexport function useRegionRedirectManager(options: UseRegionRedirectManagerOptions): UseRegionRedirectManagerReturn {\n const {\n geo,\n regions,\n countryToRegionMap,\n regionToPathMap,\n currentRegionCode,\n locale,\n pathname,\n currentUrl,\n excludePaths = [],\n cookieName = 'user_region',\n cookieExpireDays = 90,\n checkPageExists = true,\n checkPageApiEndpoint = '/api/check-page-exists',\n onDetectRegion,\n } = options\n\n // 1. \u6838\u5FC3 IP \u68C0\u6D4B Hook\n const {\n isOpen: isRegionModalOpen,\n setIsOpen: setRegionModalOpen,\n saveRegion,\n savedRegion,\n detectedRegion,\n } = useIPRedirect({\n regions,\n currentRegionCode,\n cookieName,\n cookieExpireDays,\n autoShow: false,\n onDetectRegion: onDetectRegion ? () => onDetectRegion(geo) : undefined,\n excludePaths,\n currentPath: pathname,\n currentUrl,\n })\n\n // 2. \u81EA\u52A8\u8DF3\u8F6C\u5904\u7406 Hook\n const { handleAutoRedirect } = useAutoRedirect({\n regions,\n regionToPathMap,\n geo,\n locale,\n checkPageExists,\n checkPageApiEndpoint,\n })\n\n // 3. \u6A2A\u5E45\u7BA1\u7406 Hook\n const { bannerVisible, setBannerVisible, recommendedRegion, userDismissedBanner, handleStayHere, handleSwitchSite } =\n useRedirectBanner({\n geo,\n regions,\n countryToRegionMap,\n currentRegionCode,\n pathname,\n excludePaths,\n saveRegion,\n setModalOpen: setRegionModalOpen,\n })\n\n // 4. Cookie \u504F\u597D\u76D1\u542C Hook\uFF08\u81EA\u52A8\u6267\u884C\uFF09\n useSavedRegionRedirect({\n savedRegion,\n currentRegionCode,\n regions,\n excludePaths,\n pathname,\n onRedirect: handleAutoRedirect,\n })\n\n // 5. IP \u68C0\u6D4B\u76D1\u542C Hook\uFF08\u81EA\u52A8\u6267\u884C\uFF09\n useDetectedRegionRedirect({\n detectedRegion,\n currentRegionCode,\n regions,\n excludePaths,\n pathname,\n onRedirect: handleAutoRedirect,\n })\n\n // \u624B\u52A8\u9009\u62E9\u5730\u533A\u7684\u56DE\u8C03\n const handleRegionSelect = useCallback(\n (region: RegionConfig) => {\n // \u4FDD\u5B58\u7528\u6237\u9009\u62E9\u7684\u5730\u533A\u5230 cookie\uFF08\u5305\u542B\u8BED\u8A00\u4EE3\u7801\uFF09\n saveRegion(region.code, region.languageCode)\n // \u8DF3\u8F6C\u903B\u8F91\u7531 RegionSelectorModal \u5185\u90E8\u5904\u7406\uFF08autoRedirect + redirectToHomepage\uFF09\n },\n [saveRegion]\n )\n\n return {\n isRegionModalOpen,\n setRegionModalOpen,\n saveRegion,\n savedRegion,\n detectedRegion,\n bannerVisible,\n setBannerVisible,\n recommendedRegion,\n userDismissedBanner,\n handleStayHere,\n handleSwitchSite,\n handleRegionSelect,\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,8BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA4B,iBAC5BC,EAA8B,8BAC9BC,EAAgC,gCAChCC,EAAkC,kCAClCC,EAAuC,uCACvCC,EAA0C,0CAiLnC,SAASP,EAAyBQ,EAA0E,CACjH,KAAM,CACJ,IAAAC,EACA,QAAAC,EACA,mBAAAC,EACA,gBAAAC,EACA,kBAAAC,EACA,OAAAC,EACA,SAAAC,EACA,WAAAC,EACA,aAAAC,EAAe,CAAC,EAChB,WAAAC,EAAa,cACb,iBAAAC,EAAmB,GACnB,gBAAAC,EAAkB,GAClB,qBAAAC,EAAuB,yBACvB,eAAAC,CACF,EAAId,EAGE,CACJ,OAAQe,EACR,UAAWC,EACX,WAAAC,EACA,YAAAC,EACA,eAAAC,CACF,KAAI,iBAAc,CAChB,QAAAjB,EACA,kBAAAG,EACA,WAAAK,EACA,iBAAAC,EACA,SAAU,GACV,eAAgBG,EAAiB,IAAMA,EAAeb,CAAG,EAAI,OAC7D,aAAAQ,EACA,YAAaF,EACb,WAAAC,CACF,CAAC,EAGK,CAAE,mBAAAY,CAAmB,KAAI,mBAAgB,CAC7C,QAAAlB,EACA,gBAAAE,EACA,IAAAH,EACA,OAAAK,EACA,gBAAAM,EACA,qBAAAC,CACF,CAAC,EAGK,CAAE,cAAAQ,EAAe,iBAAAC,EAAkB,kBAAAC,EAAmB,oBAAAC,EAAqB,eAAAC,EAAgB,iBAAAC,CAAiB,KAChH,qBAAkB,CAChB,IAAAzB,EACA,QAAAC,EACA,mBAAAC,EACA,kBAAAE,EACA,SAAAE,EACA,aAAAE,EACA,WAAAQ,EACA,aAAcD,CAChB,CAAC,KAGH,0BAAuB,CACrB,YAAAE,EACA,kBAAAb,EACA,QAAAH,EACA,aAAAO,EACA,SAAAF,EACA,WAAYa,CACd,CAAC,KAGD,6BAA0B,CACxB,eAAAD,EACA,kBAAAd,EACA,QAAAH,EACA,aAAAO,EACA,SAAAF,EACA,WAAYa,CACd,CAAC,EAGD,MAAMO,KAAqB,eACxBC,GAAyB,CAExBX,EAAWW,EAAO,KAAMA,EAAO,YAAY,CAE7C,EACA,CAACX,CAAU,CACb,EAEA,MAAO,CACL,kBAAAF,EACA,mBAAAC,EACA,WAAAC,EACA,YAAAC,EACA,eAAAC,EACA,cAAAE,EACA,iBAAAC,EACA,kBAAAC,EACA,oBAAAC,EACA,eAAAC,EACA,iBAAAC,EACA,mBAAAC,CACF,CACF",
|
|
6
|
+
"names": ["useRegionRedirectManager_exports", "__export", "useRegionRedirectManager", "__toCommonJS", "import_react", "import_useIPRedirect", "import_useAutoRedirect", "import_useRedirectBanner", "import_useSavedRegionRedirect", "import_useDetectedRegionRedirect", "options", "geo", "regions", "countryToRegionMap", "regionToPathMap", "currentRegionCode", "locale", "pathname", "currentUrl", "excludePaths", "cookieName", "cookieExpireDays", "checkPageExists", "checkPageApiEndpoint", "onDetectRegion", "isRegionModalOpen", "setRegionModalOpen", "saveRegion", "savedRegion", "detectedRegion", "handleAutoRedirect", "bannerVisible", "setBannerVisible", "recommendedRegion", "userDismissedBanner", "handleStayHere", "handleSwitchSite", "handleRegionSelect", "region"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { RegionConfig } from './type.js';
|
|
2
|
+
export interface UseSavedRegionRedirectOptions {
|
|
3
|
+
/**
|
|
4
|
+
* 从 cookie 中读取的已保存地区信息(格式:'DE:de')
|
|
5
|
+
*/
|
|
6
|
+
savedRegion: string | null;
|
|
7
|
+
/**
|
|
8
|
+
* 当前站点的地区代码
|
|
9
|
+
*/
|
|
10
|
+
currentRegionCode: string;
|
|
11
|
+
/**
|
|
12
|
+
* 地区配置列表
|
|
13
|
+
*/
|
|
14
|
+
regions: RegionConfig[];
|
|
15
|
+
/**
|
|
16
|
+
* 白名单路径(在白名单中不执行跳转)
|
|
17
|
+
*/
|
|
18
|
+
excludePaths?: string[];
|
|
19
|
+
/**
|
|
20
|
+
* 当前路径
|
|
21
|
+
*/
|
|
22
|
+
pathname?: string;
|
|
23
|
+
/**
|
|
24
|
+
* 用户是否手动关闭了横幅(关闭横幅后不再自动跳转)
|
|
25
|
+
*/
|
|
26
|
+
userDismissedBanner?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* 自动跳转处理函数
|
|
29
|
+
*/
|
|
30
|
+
onRedirect: (region: RegionConfig, isCookieRedirect?: boolean) => void | Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Cookie 保存地区跳转监听 Hook
|
|
34
|
+
*
|
|
35
|
+
* 监听用户之前保存的地区偏好(存储在 cookie 中),
|
|
36
|
+
* 如果保存的地区与当前地区不匹配,自动跳转到保存的地区
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```tsx
|
|
40
|
+
* useSavedRegionRedirect({
|
|
41
|
+
* savedRegion, // 从 useIPRedirect 获取
|
|
42
|
+
* currentRegionCode,
|
|
43
|
+
* regions,
|
|
44
|
+
* excludePaths,
|
|
45
|
+
* pathname,
|
|
46
|
+
* userDismissedBanner,
|
|
47
|
+
* onRedirect: handleAutoRedirect, // 从 useAutoRedirect 获取
|
|
48
|
+
* })
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function useSavedRegionRedirect(options: UseSavedRegionRedirectOptions): void;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var s=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var l=(i,e)=>{for(var o in e)s(i,o,{get:e[o],enumerable:!0})},h=(i,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of v(e))!C.call(i,n)&&n!==o&&s(i,n,{get:()=>e[n],enumerable:!(r=m(e,n))||r.enumerable});return i};var x=i=>h(s({},"__esModule",{value:!0}),i);var S={};l(S,{useSavedRegionRedirect:()=>P});module.exports=x(S);var u=require("react"),t=require("./utils.js");function P(i){const{savedRegion:e,currentRegionCode:o,regions:r,excludePaths:n=[],pathname:d="",userDismissedBanner:g=!1,onRedirect:a}=i;(0,u.useEffect)(()=>{if((0,t.isPathInWhitelist)(d,n)||g||!e)return;const R=(0,t.parseRegionCookie)(e);if(!R)return;const{regionCode:c}=R;if(c===o)return;const f=r.find(p=>p.code===c);f&&a(f,!0)},[e,o,r,g,a,d,n])}
|
|
2
|
+
//# sourceMappingURL=useSavedRegionRedirect.js.map
|