@anker-in/headless-ui 1.3.21 → 1.3.22-alpha.1781754422536

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (623) hide show
  1. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.d.ts +11 -0
  2. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.js +2 -0
  3. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.js.map +7 -0
  4. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.d.ts +23 -0
  5. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.js +2 -0
  6. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.js.map +7 -0
  7. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/index.d.ts +40 -0
  8. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/index.js +2 -0
  9. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/index.js.map +7 -0
  10. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/types.d.ts +103 -0
  11. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/types.js +2 -0
  12. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/types.js.map +7 -0
  13. package/dist/cjs/biz-components/AccessoriesShelf/components/MainProductArea/index.d.ts +27 -0
  14. package/dist/cjs/biz-components/AccessoriesShelf/components/MainProductArea/index.js +2 -0
  15. package/dist/cjs/biz-components/AccessoriesShelf/components/MainProductArea/index.js.map +7 -0
  16. package/dist/cjs/biz-components/AccessoriesShelf/components/ProductGrid/index.d.ts +11 -0
  17. package/dist/cjs/biz-components/AccessoriesShelf/components/ProductGrid/index.js +2 -0
  18. package/dist/cjs/biz-components/AccessoriesShelf/components/ProductGrid/index.js.map +7 -0
  19. package/dist/cjs/biz-components/AccessoriesShelf/components/PromoBanner/index.d.ts +10 -0
  20. package/dist/cjs/biz-components/AccessoriesShelf/components/PromoBanner/index.js +2 -0
  21. package/dist/cjs/biz-components/AccessoriesShelf/components/PromoBanner/index.js.map +7 -0
  22. package/dist/cjs/biz-components/AccessoriesShelf/components/SectionHeader/index.d.ts +9 -0
  23. package/dist/cjs/biz-components/AccessoriesShelf/components/SectionHeader/index.js +2 -0
  24. package/dist/cjs/biz-components/AccessoriesShelf/components/SectionHeader/index.js.map +7 -0
  25. package/dist/cjs/biz-components/AccessoriesShelf/index.d.ts +8 -0
  26. package/dist/cjs/biz-components/AccessoriesShelf/index.js +2 -0
  27. package/dist/cjs/biz-components/AccessoriesShelf/index.js.map +7 -0
  28. package/dist/cjs/biz-components/AccessoriesShelf/product.d.ts +280 -0
  29. package/dist/cjs/biz-components/AccessoriesShelf/product.js +2 -0
  30. package/dist/cjs/biz-components/AccessoriesShelf/product.js.map +7 -0
  31. package/dist/cjs/biz-components/AccessoriesShelf/types.d.ts +43 -0
  32. package/dist/cjs/biz-components/AccessoriesShelf/types.js +2 -0
  33. package/dist/cjs/biz-components/AccessoriesShelf/types.js.map +7 -0
  34. package/dist/cjs/biz-components/AccordionCards/index.d.ts +1 -1
  35. package/dist/cjs/biz-components/ActiveShelf/index.d.ts +1 -1
  36. package/dist/cjs/biz-components/ActivityMechanism/index.js +1 -1
  37. package/dist/cjs/biz-components/ActivityMechanism/index.js.map +3 -3
  38. package/dist/cjs/biz-components/ActivitySchedule/index.d.ts +1 -1
  39. package/dist/cjs/biz-components/ActivitySchedule/index.js +1 -1
  40. package/dist/cjs/biz-components/ActivitySchedule/index.js.map +3 -3
  41. package/dist/cjs/biz-components/AiuiProvider/index.d.ts +6 -0
  42. package/dist/cjs/biz-components/AiuiProvider/index.js +1 -1
  43. package/dist/cjs/biz-components/AiuiProvider/index.js.map +3 -3
  44. package/dist/cjs/biz-components/AnchorNavigation/index.d.ts +1 -1
  45. package/dist/cjs/biz-components/AnchorNavigation/index.js +1 -1
  46. package/dist/cjs/biz-components/AnchorNavigation/index.js.map +3 -3
  47. package/dist/cjs/biz-components/AplusDesc/index.d.ts +1 -1
  48. package/dist/cjs/biz-components/BrandCardLink/BrandCardLink.d.ts +1 -1
  49. package/dist/cjs/biz-components/BrandCardLink/BrandCardLink.js +1 -1
  50. package/dist/cjs/biz-components/BrandCardLink/BrandCardLink.js.map +3 -3
  51. package/dist/cjs/biz-components/BrandEquity/BrandEquity.d.ts +1 -1
  52. package/dist/cjs/biz-components/BrandEquity/BrandEquity.js +1 -1
  53. package/dist/cjs/biz-components/BrandEquity/BrandEquity.js.map +3 -3
  54. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.d.ts +1 -1
  55. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.js +1 -1
  56. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.js.map +3 -3
  57. package/dist/cjs/biz-components/BuyOneGetOneShelf/context.d.ts +4 -0
  58. package/dist/cjs/biz-components/BuyOneGetOneShelf/context.js +2 -0
  59. package/dist/cjs/biz-components/BuyOneGetOneShelf/context.js.map +7 -0
  60. package/dist/cjs/biz-components/BuyOneGetOneShelf/types.d.ts +1 -1
  61. package/dist/cjs/biz-components/BuyOneGetOneShelf/types.js.map +1 -1
  62. package/dist/cjs/biz-components/Category/SwiperCategory.js +1 -1
  63. package/dist/cjs/biz-components/Category/SwiperCategory.js.map +3 -3
  64. package/dist/cjs/biz-components/Category/index.d.ts +1 -1
  65. package/dist/cjs/biz-components/Category/index.js +1 -1
  66. package/dist/cjs/biz-components/Category/index.js.map +3 -3
  67. package/dist/cjs/biz-components/CreativeModule/index.d.ts +1 -1
  68. package/dist/cjs/biz-components/DownLoad/index.d.ts +1 -1
  69. package/dist/cjs/biz-components/Evaluate/index.d.ts +1 -1
  70. package/dist/cjs/biz-components/Evaluate/index.js +1 -1
  71. package/dist/cjs/biz-components/Evaluate/index.js.map +3 -3
  72. package/dist/cjs/biz-components/EventSchedule/index.d.ts +1 -1
  73. package/dist/cjs/biz-components/EventSchedule/index.js +1 -1
  74. package/dist/cjs/biz-components/EventSchedule/index.js.map +3 -3
  75. package/dist/cjs/biz-components/Faq/Faq.d.ts +1 -1
  76. package/dist/cjs/biz-components/FeatureCards/FeatureCards.d.ts +1 -1
  77. package/dist/cjs/biz-components/FeatureCards/FeatureCards.js +1 -1
  78. package/dist/cjs/biz-components/FeatureCards/FeatureCards.js.map +3 -3
  79. package/dist/cjs/biz-components/FeatureShowcase/FeatureShowcase.d.ts +1 -1
  80. package/dist/cjs/biz-components/FeaturedBlogPosts/index.d.ts +1 -1
  81. package/dist/cjs/biz-components/FeaturedBlogPosts/index.js +1 -1
  82. package/dist/cjs/biz-components/FeaturedBlogPosts/index.js.map +2 -2
  83. package/dist/cjs/biz-components/Features/index.d.ts +1 -1
  84. package/dist/cjs/biz-components/FootCharger/index.d.ts +1 -1
  85. package/dist/cjs/biz-components/FooterNavigation/index.d.ts +1 -1
  86. package/dist/cjs/biz-components/FooterNavigation/index.js +1 -1
  87. package/dist/cjs/biz-components/FooterNavigation/index.js.map +3 -3
  88. package/dist/cjs/biz-components/GiftBox/index.d.ts +1 -1
  89. package/dist/cjs/biz-components/GiftShelf/index.d.ts +1 -1
  90. package/dist/cjs/biz-components/GiftShelf/index.js +1 -1
  91. package/dist/cjs/biz-components/GiftShelf/index.js.map +2 -2
  92. package/dist/cjs/biz-components/GiftTierShelf/index.d.ts +1 -1
  93. package/dist/cjs/biz-components/Graphic/index.d.ts +1 -1
  94. package/dist/cjs/biz-components/Graphic/index.js +1 -1
  95. package/dist/cjs/biz-components/Graphic/index.js.map +3 -3
  96. package/dist/cjs/biz-components/GraphicAttractionBlock/index.d.ts +1 -1
  97. package/dist/cjs/biz-components/GraphicOverlay/GraphicOverlay.d.ts +2 -2
  98. package/dist/cjs/biz-components/GraphicOverlay/GraphicOverlay.js +1 -1
  99. package/dist/cjs/biz-components/GraphicOverlay/GraphicOverlay.js.map +3 -3
  100. package/dist/cjs/biz-components/HeaderNavigation/MobileTextLinksMenu.d.ts +12 -0
  101. package/dist/cjs/biz-components/HeaderNavigation/MobileTextLinksMenu.js +2 -0
  102. package/dist/cjs/biz-components/HeaderNavigation/MobileTextLinksMenu.js.map +7 -0
  103. package/dist/cjs/biz-components/HeaderNavigation/MulticolDropdown.js +1 -1
  104. package/dist/cjs/biz-components/HeaderNavigation/MulticolDropdown.js.map +2 -2
  105. package/dist/cjs/biz-components/HeaderNavigation/TextLinksDropdown.d.ts +10 -0
  106. package/dist/cjs/biz-components/HeaderNavigation/TextLinksDropdown.js +2 -0
  107. package/dist/cjs/biz-components/HeaderNavigation/TextLinksDropdown.js.map +7 -0
  108. package/dist/cjs/biz-components/HeaderNavigation/index.d.ts +1 -1
  109. package/dist/cjs/biz-components/HeaderNavigation/index.js +1 -1
  110. package/dist/cjs/biz-components/HeaderNavigation/index.js.map +3 -3
  111. package/dist/cjs/biz-components/HeaderNavigation/types.d.ts +11 -1
  112. package/dist/cjs/biz-components/HeaderNavigation/types.js +1 -1
  113. package/dist/cjs/biz-components/HeaderNavigation/types.js.map +2 -2
  114. package/dist/cjs/biz-components/HeaderNavigation/withCategory.d.ts +1 -0
  115. package/dist/cjs/biz-components/HeaderNavigation/withCategory.js +1 -1
  116. package/dist/cjs/biz-components/HeaderNavigation/withCategory.js.map +3 -3
  117. package/dist/cjs/biz-components/HeroBanner/HeroBanner.d.ts +1 -1
  118. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js +1 -1
  119. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js.map +3 -3
  120. package/dist/cjs/biz-components/HeroBanner/HeroBannerCarousel.js +1 -1
  121. package/dist/cjs/biz-components/HeroBanner/HeroBannerCarousel.js.map +3 -3
  122. package/dist/cjs/biz-components/ImageOverlayShelf/index.d.ts +1 -1
  123. package/dist/cjs/biz-components/ImageTextFeature/ImageTextFeature.d.ts +1 -1
  124. package/dist/cjs/biz-components/ImageTextOverlay/index.d.ts +1 -1
  125. package/dist/cjs/biz-components/ImageTextOverlay/index.js +2 -2
  126. package/dist/cjs/biz-components/ImageTextOverlay/index.js.map +3 -3
  127. package/dist/cjs/biz-components/ImageWithText/ImageWithText.d.ts +1 -1
  128. package/dist/cjs/biz-components/ImageWithText/ImageWithText.js +1 -1
  129. package/dist/cjs/biz-components/ImageWithText/ImageWithText.js.map +3 -3
  130. package/dist/cjs/biz-components/Ksp/index.d.ts +1 -1
  131. package/dist/cjs/biz-components/Ksp/index.js +1 -1
  132. package/dist/cjs/biz-components/Ksp/index.js.map +3 -3
  133. package/dist/cjs/biz-components/Listing/BizProductProvider.d.ts +3 -1
  134. package/dist/cjs/biz-components/Listing/BizProductProvider.js +1 -1
  135. package/dist/cjs/biz-components/Listing/BizProductProvider.js.map +3 -3
  136. package/dist/cjs/biz-components/Listing/components/CartActionButtons/index.d.ts +9 -1
  137. package/dist/cjs/biz-components/Listing/components/CartActionButtons/index.js +1 -1
  138. package/dist/cjs/biz-components/Listing/components/CartActionButtons/index.js.map +3 -3
  139. package/dist/cjs/biz-components/Listing/components/PaidShipping/index.d.ts +1 -1
  140. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.d.ts +1 -1
  141. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.d.ts +1 -1
  142. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.d.ts +1 -1
  143. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.d.ts +1 -1
  144. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.d.ts +1 -1
  145. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductOptions/index.d.ts +1 -1
  146. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductGallery/index.d.ts +1 -1
  147. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductPaidShipping/index.d.ts +1 -1
  148. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductSummary/index.d.ts +1 -1
  149. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductSummary/index.js +1 -1
  150. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductSummary/index.js.map +3 -3
  151. package/dist/cjs/biz-components/Listing/components/PurchaseBar/ProductActions/index.js +1 -1
  152. package/dist/cjs/biz-components/Listing/components/PurchaseBar/ProductActions/index.js.map +3 -3
  153. package/dist/cjs/biz-components/Listing/components/PurchaseBar/index.d.ts +1 -1
  154. package/dist/cjs/biz-components/LotteryShared/ErrorModal.d.ts +4 -0
  155. package/dist/cjs/biz-components/LotteryShared/ErrorModal.js.map +2 -2
  156. package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.d.ts +13 -13
  157. package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.js +1 -1
  158. package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.js.map +3 -3
  159. package/dist/cjs/biz-components/LotteryShared/types.d.ts +9 -0
  160. package/dist/cjs/biz-components/LotteryShared/types.js.map +2 -2
  161. package/dist/cjs/biz-components/Marquee/Marquee.d.ts +1 -1
  162. package/dist/cjs/biz-components/MarqueeReview/index.d.ts +1 -1
  163. package/dist/cjs/biz-components/Media/index.js +1 -1
  164. package/dist/cjs/biz-components/Media/index.js.map +3 -3
  165. package/dist/cjs/biz-components/MediaEndorsement/index.d.ts +1 -1
  166. package/dist/cjs/biz-components/MediaEndorsement/index.js +2 -2
  167. package/dist/cjs/biz-components/MediaEndorsement/index.js.map +3 -3
  168. package/dist/cjs/biz-components/MediaPlayerBase/index.d.ts +1 -1
  169. package/dist/cjs/biz-components/MediaPlayerBase/index.js +1 -1
  170. package/dist/cjs/biz-components/MediaPlayerBase/index.js.map +3 -3
  171. package/dist/cjs/biz-components/MediaPlayerMulti/index.d.ts +1 -1
  172. package/dist/cjs/biz-components/MediaPlayerMulti/index.js +1 -1
  173. package/dist/cjs/biz-components/MediaPlayerMulti/index.js.map +3 -3
  174. package/dist/cjs/biz-components/MediaPlayerSticky/index.d.ts +1 -1
  175. package/dist/cjs/biz-components/MediaPlayerSticky/index.js +1 -1
  176. package/dist/cjs/biz-components/MediaPlayerSticky/index.js.map +3 -3
  177. package/dist/cjs/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.d.ts +1 -1
  178. package/dist/cjs/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.js +2 -2
  179. package/dist/cjs/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.js.map +3 -3
  180. package/dist/cjs/biz-components/MediaSceneSwitcherV2/index.d.ts +1 -1
  181. package/dist/cjs/biz-components/MediaSceneSwitcherV2/index.js +1 -1
  182. package/dist/cjs/biz-components/MediaSceneSwitcherV2/index.js.map +3 -3
  183. package/dist/cjs/biz-components/MediaShelf/index.d.ts +1 -1
  184. package/dist/cjs/biz-components/MediaTextOverlay/MediaTextOverlay.d.ts +1 -1
  185. package/dist/cjs/biz-components/MediaTextOverlay/MediaTextOverlay.js +1 -1
  186. package/dist/cjs/biz-components/MediaTextOverlay/MediaTextOverlay.js.map +3 -3
  187. package/dist/cjs/biz-components/MemberEquity/index.d.ts +1 -1
  188. package/dist/cjs/biz-components/MemberEquity/index.js +2 -2
  189. package/dist/cjs/biz-components/MemberEquity/index.js.map +3 -3
  190. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +2 -2
  191. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js +1 -1
  192. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js.map +3 -3
  193. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.js +1 -1
  194. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.js.map +2 -2
  195. package/dist/cjs/biz-components/NavigationSearch/index.d.ts +1 -1
  196. package/dist/cjs/biz-components/NavigationSearch/index.js +2 -2
  197. package/dist/cjs/biz-components/NavigationSearch/index.js.map +2 -2
  198. package/dist/cjs/biz-components/NotifyMeDialog/NotifyMeDialog.d.ts +7 -0
  199. package/dist/cjs/biz-components/NotifyMeDialog/NotifyMeDialog.js +2 -0
  200. package/dist/cjs/biz-components/NotifyMeDialog/NotifyMeDialog.js.map +7 -0
  201. package/dist/cjs/biz-components/NotifyMeDialog/index.d.ts +2 -0
  202. package/dist/cjs/biz-components/NotifyMeDialog/index.js +2 -0
  203. package/dist/cjs/biz-components/NotifyMeDialog/index.js.map +7 -0
  204. package/dist/cjs/biz-components/NotifyMeDialog/types.d.ts +111 -0
  205. package/dist/cjs/biz-components/NotifyMeDialog/types.js +2 -0
  206. package/dist/cjs/biz-components/NotifyMeDialog/types.js.map +7 -0
  207. package/dist/cjs/biz-components/ProductCompare/index.d.ts +1 -1
  208. package/dist/cjs/biz-components/ProductCompare/index.js +1 -1
  209. package/dist/cjs/biz-components/ProductCompare/index.js.map +2 -2
  210. package/dist/cjs/biz-components/ProductHero/ProductHero.d.ts +1 -1
  211. package/dist/cjs/biz-components/ProductHero/ProductHero.js +1 -1
  212. package/dist/cjs/biz-components/ProductHero/ProductHero.js.map +3 -3
  213. package/dist/cjs/biz-components/ProductLottery/types.d.ts +62 -5
  214. package/dist/cjs/biz-components/ProductLottery/types.js +1 -1
  215. package/dist/cjs/biz-components/ProductLottery/types.js.map +2 -2
  216. package/dist/cjs/biz-components/ProductNav/ProductNav.d.ts +1 -1
  217. package/dist/cjs/biz-components/ProductNav/ProductNav.js +1 -1
  218. package/dist/cjs/biz-components/ProductNav/ProductNav.js.map +3 -3
  219. package/dist/cjs/biz-components/PromotionalBar/index.d.ts +1 -1
  220. package/dist/cjs/biz-components/PromotionalBar/index.js +1 -1
  221. package/dist/cjs/biz-components/PromotionalBar/index.js.map +3 -3
  222. package/dist/cjs/biz-components/SceneShelfV2/index.d.ts +1 -1
  223. package/dist/cjs/biz-components/SceneShelfV3/index.d.ts +1 -1
  224. package/dist/cjs/biz-components/SearchPage/index.js +1 -1
  225. package/dist/cjs/biz-components/SearchPage/index.js.map +3 -3
  226. package/dist/cjs/biz-components/SecondaryBanner/index.d.ts +1 -1
  227. package/dist/cjs/biz-components/SecondaryBanner/index.js +1 -1
  228. package/dist/cjs/biz-components/SecondaryBanner/index.js.map +2 -2
  229. package/dist/cjs/biz-components/SelectStore/index.d.ts +1 -1
  230. package/dist/cjs/biz-components/ShelfDisplay/index.d.ts +1 -1
  231. package/dist/cjs/biz-components/ShelfDisplay/shelfDisplayItem.js +1 -1
  232. package/dist/cjs/biz-components/ShelfDisplay/shelfDisplayItem.js.map +3 -3
  233. package/dist/cjs/biz-components/Slogan/index.d.ts +1 -1
  234. package/dist/cjs/biz-components/Spacer/index.d.ts +1 -1
  235. package/dist/cjs/biz-components/Specs/index.d.ts +1 -1
  236. package/dist/cjs/biz-components/Specs/index.js +1 -1
  237. package/dist/cjs/biz-components/Specs/index.js.map +3 -3
  238. package/dist/cjs/biz-components/SpecsComparison/SpecsComparison.d.ts +1 -1
  239. package/dist/cjs/biz-components/Subscribe/index.js +1 -1
  240. package/dist/cjs/biz-components/Subscribe/index.js.map +2 -2
  241. package/dist/cjs/biz-components/SwiperBox/index.js +1 -1
  242. package/dist/cjs/biz-components/SwiperBox/index.js.map +3 -3
  243. package/dist/cjs/biz-components/TabWithImage/TabWithImage.d.ts +1 -1
  244. package/dist/cjs/biz-components/Tabs/Tabs.d.ts +1 -1
  245. package/dist/cjs/biz-components/TabsGroup/index.d.ts +1 -1
  246. package/dist/cjs/biz-components/TabsWithMedia/TabsWithMedia.d.ts +1 -1
  247. package/dist/cjs/biz-components/TabsWithMedia/TabsWithMedia.js +1 -1
  248. package/dist/cjs/biz-components/TabsWithMedia/TabsWithMedia.js.map +3 -3
  249. package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.d.ts +1 -1
  250. package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.js +1 -1
  251. package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.js.map +3 -3
  252. package/dist/cjs/biz-components/Title/index.d.ts +1 -1
  253. package/dist/cjs/biz-components/Title/index.js +1 -1
  254. package/dist/cjs/biz-components/Title/index.js.map +3 -3
  255. package/dist/cjs/biz-components/VideoFeature/VideoFeature.d.ts +1 -1
  256. package/dist/cjs/biz-components/VideoModal/index.d.ts +1 -0
  257. package/dist/cjs/biz-components/VideoModal/index.js +1 -1
  258. package/dist/cjs/biz-components/VideoModal/index.js.map +3 -3
  259. package/dist/cjs/biz-components/WheelLottery/index.js +1 -1
  260. package/dist/cjs/biz-components/WheelLottery/index.js.map +3 -3
  261. package/dist/cjs/biz-components/WhyChoose/WhyChoose.d.ts +1 -1
  262. package/dist/cjs/biz-components/index.d.ts +8 -0
  263. package/dist/cjs/biz-components/index.js +1 -1
  264. package/dist/cjs/biz-components/index.js.map +3 -3
  265. package/dist/cjs/components/Countdown.js +1 -1
  266. package/dist/cjs/components/Countdown.js.map +3 -3
  267. package/dist/cjs/components/alert.d.ts +1 -0
  268. package/dist/cjs/components/alert.js +1 -1
  269. package/dist/cjs/components/alert.js.map +2 -2
  270. package/dist/cjs/components/breadcrumb.d.ts +12 -0
  271. package/dist/cjs/components/breadcrumb.js +2 -0
  272. package/dist/cjs/components/breadcrumb.js.map +7 -0
  273. package/dist/cjs/components/checkbox.js +1 -1
  274. package/dist/cjs/components/checkbox.js.map +2 -2
  275. package/dist/cjs/components/dialog.js +1 -1
  276. package/dist/cjs/components/dialog.js.map +3 -3
  277. package/dist/cjs/components/index.d.ts +5 -0
  278. package/dist/cjs/components/index.js +1 -1
  279. package/dist/cjs/components/index.js.map +3 -3
  280. package/dist/cjs/components/input-number.d.ts +22 -0
  281. package/dist/cjs/components/input-number.js +1 -1
  282. package/dist/cjs/components/input-number.js.map +3 -3
  283. package/dist/cjs/components/link.js +1 -1
  284. package/dist/cjs/components/link.js.map +2 -2
  285. package/dist/cjs/components/otp-input.d.ts +18 -0
  286. package/dist/cjs/components/otp-input.js +2 -0
  287. package/dist/cjs/components/otp-input.js.map +7 -0
  288. package/dist/cjs/components/toast.d.ts +25 -0
  289. package/dist/cjs/components/toast.js +2 -0
  290. package/dist/cjs/components/toast.js.map +7 -0
  291. package/dist/cjs/helpers/index.d.ts +2 -2
  292. package/dist/cjs/helpers/index.js +1 -1
  293. package/dist/cjs/helpers/index.js.map +2 -2
  294. package/dist/cjs/helpers/isLexicalEmpty.d.ts +5 -0
  295. package/dist/cjs/helpers/isLexicalEmpty.js +1 -1
  296. package/dist/cjs/helpers/isLexicalEmpty.js.map +3 -3
  297. package/dist/cjs/helpers/priceFormatting.d.ts +5 -0
  298. package/dist/cjs/helpers/priceFormatting.js +1 -1
  299. package/dist/cjs/helpers/priceFormatting.js.map +3 -3
  300. package/dist/cjs/helpers/utils.d.ts +7 -1
  301. package/dist/cjs/helpers/utils.js +1 -1
  302. package/dist/cjs/helpers/utils.js.map +3 -3
  303. package/dist/cjs/hooks/useIsomorphicMediaQuery.d.ts +14 -0
  304. package/dist/cjs/hooks/useIsomorphicMediaQuery.js +2 -0
  305. package/dist/cjs/hooks/useIsomorphicMediaQuery.js.map +7 -0
  306. package/dist/cjs/hooks/useProductListTrack.d.ts +43 -0
  307. package/dist/cjs/hooks/useProductListTrack.js +2 -0
  308. package/dist/cjs/hooks/useProductListTrack.js.map +7 -0
  309. package/dist/cjs/index.d.ts +10 -0
  310. package/dist/cjs/index.js +1 -1
  311. package/dist/cjs/index.js.map +3 -3
  312. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.d.ts +11 -0
  313. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.js +2 -0
  314. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.js.map +7 -0
  315. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.d.ts +23 -0
  316. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.js +2 -0
  317. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.js.map +7 -0
  318. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/index.d.ts +40 -0
  319. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/index.js +2 -0
  320. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/index.js.map +7 -0
  321. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/types.d.ts +103 -0
  322. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/types.js +1 -0
  323. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/types.js.map +7 -0
  324. package/dist/esm/biz-components/AccessoriesShelf/components/MainProductArea/index.d.ts +27 -0
  325. package/dist/esm/biz-components/AccessoriesShelf/components/MainProductArea/index.js +2 -0
  326. package/dist/esm/biz-components/AccessoriesShelf/components/MainProductArea/index.js.map +7 -0
  327. package/dist/esm/biz-components/AccessoriesShelf/components/ProductGrid/index.d.ts +11 -0
  328. package/dist/esm/biz-components/AccessoriesShelf/components/ProductGrid/index.js +2 -0
  329. package/dist/esm/biz-components/AccessoriesShelf/components/ProductGrid/index.js.map +7 -0
  330. package/dist/esm/biz-components/AccessoriesShelf/components/PromoBanner/index.d.ts +10 -0
  331. package/dist/esm/biz-components/AccessoriesShelf/components/PromoBanner/index.js +2 -0
  332. package/dist/esm/biz-components/AccessoriesShelf/components/PromoBanner/index.js.map +7 -0
  333. package/dist/esm/biz-components/AccessoriesShelf/components/SectionHeader/index.d.ts +9 -0
  334. package/dist/esm/biz-components/AccessoriesShelf/components/SectionHeader/index.js +2 -0
  335. package/dist/esm/biz-components/AccessoriesShelf/components/SectionHeader/index.js.map +7 -0
  336. package/dist/esm/biz-components/AccessoriesShelf/index.d.ts +8 -0
  337. package/dist/esm/biz-components/AccessoriesShelf/index.js +2 -0
  338. package/dist/esm/biz-components/AccessoriesShelf/index.js.map +7 -0
  339. package/dist/esm/biz-components/AccessoriesShelf/product.d.ts +280 -0
  340. package/dist/esm/biz-components/AccessoriesShelf/product.js +1 -0
  341. package/dist/esm/biz-components/AccessoriesShelf/product.js.map +7 -0
  342. package/dist/esm/biz-components/AccessoriesShelf/types.d.ts +43 -0
  343. package/dist/esm/biz-components/AccessoriesShelf/types.js +1 -0
  344. package/dist/esm/biz-components/AccessoriesShelf/types.js.map +7 -0
  345. package/dist/esm/biz-components/AccordionCards/index.d.ts +1 -1
  346. package/dist/esm/biz-components/ActiveShelf/index.d.ts +1 -1
  347. package/dist/esm/biz-components/ActivityMechanism/index.js +1 -1
  348. package/dist/esm/biz-components/ActivityMechanism/index.js.map +3 -3
  349. package/dist/esm/biz-components/ActivitySchedule/index.d.ts +1 -1
  350. package/dist/esm/biz-components/ActivitySchedule/index.js +1 -1
  351. package/dist/esm/biz-components/ActivitySchedule/index.js.map +3 -3
  352. package/dist/esm/biz-components/AiuiProvider/index.d.ts +6 -0
  353. package/dist/esm/biz-components/AiuiProvider/index.js +1 -1
  354. package/dist/esm/biz-components/AiuiProvider/index.js.map +3 -3
  355. package/dist/esm/biz-components/AnchorNavigation/index.d.ts +1 -1
  356. package/dist/esm/biz-components/AnchorNavigation/index.js +1 -1
  357. package/dist/esm/biz-components/AnchorNavigation/index.js.map +3 -3
  358. package/dist/esm/biz-components/AplusDesc/index.d.ts +1 -1
  359. package/dist/esm/biz-components/BrandCardLink/BrandCardLink.d.ts +1 -1
  360. package/dist/esm/biz-components/BrandCardLink/BrandCardLink.js +1 -1
  361. package/dist/esm/biz-components/BrandCardLink/BrandCardLink.js.map +3 -3
  362. package/dist/esm/biz-components/BrandEquity/BrandEquity.d.ts +1 -1
  363. package/dist/esm/biz-components/BrandEquity/BrandEquity.js +1 -1
  364. package/dist/esm/biz-components/BrandEquity/BrandEquity.js.map +3 -3
  365. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.d.ts +1 -1
  366. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.js +1 -1
  367. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.js.map +3 -3
  368. package/dist/esm/biz-components/BuyOneGetOneShelf/context.d.ts +4 -0
  369. package/dist/esm/biz-components/BuyOneGetOneShelf/context.js +2 -0
  370. package/dist/esm/biz-components/BuyOneGetOneShelf/context.js.map +7 -0
  371. package/dist/esm/biz-components/BuyOneGetOneShelf/types.d.ts +1 -1
  372. package/dist/esm/biz-components/BuyOneGetOneShelf/types.js.map +1 -1
  373. package/dist/esm/biz-components/Category/SwiperCategory.js +1 -1
  374. package/dist/esm/biz-components/Category/SwiperCategory.js.map +3 -3
  375. package/dist/esm/biz-components/Category/index.d.ts +1 -1
  376. package/dist/esm/biz-components/Category/index.js +1 -1
  377. package/dist/esm/biz-components/Category/index.js.map +3 -3
  378. package/dist/esm/biz-components/CreativeModule/index.d.ts +1 -1
  379. package/dist/esm/biz-components/DownLoad/index.d.ts +1 -1
  380. package/dist/esm/biz-components/Evaluate/index.d.ts +1 -1
  381. package/dist/esm/biz-components/Evaluate/index.js +1 -1
  382. package/dist/esm/biz-components/Evaluate/index.js.map +3 -3
  383. package/dist/esm/biz-components/EventSchedule/index.d.ts +1 -1
  384. package/dist/esm/biz-components/EventSchedule/index.js +1 -1
  385. package/dist/esm/biz-components/EventSchedule/index.js.map +3 -3
  386. package/dist/esm/biz-components/Faq/Faq.d.ts +1 -1
  387. package/dist/esm/biz-components/FeatureCards/FeatureCards.d.ts +1 -1
  388. package/dist/esm/biz-components/FeatureCards/FeatureCards.js +1 -1
  389. package/dist/esm/biz-components/FeatureCards/FeatureCards.js.map +3 -3
  390. package/dist/esm/biz-components/FeatureShowcase/FeatureShowcase.d.ts +1 -1
  391. package/dist/esm/biz-components/FeaturedBlogPosts/index.d.ts +1 -1
  392. package/dist/esm/biz-components/FeaturedBlogPosts/index.js +1 -1
  393. package/dist/esm/biz-components/FeaturedBlogPosts/index.js.map +2 -2
  394. package/dist/esm/biz-components/Features/index.d.ts +1 -1
  395. package/dist/esm/biz-components/FootCharger/index.d.ts +1 -1
  396. package/dist/esm/biz-components/FooterNavigation/index.d.ts +1 -1
  397. package/dist/esm/biz-components/FooterNavigation/index.js +1 -1
  398. package/dist/esm/biz-components/FooterNavigation/index.js.map +3 -3
  399. package/dist/esm/biz-components/GiftBox/index.d.ts +1 -1
  400. package/dist/esm/biz-components/GiftShelf/index.d.ts +1 -1
  401. package/dist/esm/biz-components/GiftShelf/index.js +1 -1
  402. package/dist/esm/biz-components/GiftShelf/index.js.map +2 -2
  403. package/dist/esm/biz-components/GiftTierShelf/index.d.ts +1 -1
  404. package/dist/esm/biz-components/Graphic/index.d.ts +1 -1
  405. package/dist/esm/biz-components/Graphic/index.js +1 -1
  406. package/dist/esm/biz-components/Graphic/index.js.map +3 -3
  407. package/dist/esm/biz-components/GraphicAttractionBlock/index.d.ts +1 -1
  408. package/dist/esm/biz-components/GraphicOverlay/GraphicOverlay.d.ts +2 -2
  409. package/dist/esm/biz-components/GraphicOverlay/GraphicOverlay.js +1 -1
  410. package/dist/esm/biz-components/GraphicOverlay/GraphicOverlay.js.map +3 -3
  411. package/dist/esm/biz-components/HeaderNavigation/MobileTextLinksMenu.d.ts +12 -0
  412. package/dist/esm/biz-components/HeaderNavigation/MobileTextLinksMenu.js +2 -0
  413. package/dist/esm/biz-components/HeaderNavigation/MobileTextLinksMenu.js.map +7 -0
  414. package/dist/esm/biz-components/HeaderNavigation/MulticolDropdown.js +1 -1
  415. package/dist/esm/biz-components/HeaderNavigation/MulticolDropdown.js.map +2 -2
  416. package/dist/esm/biz-components/HeaderNavigation/TextLinksDropdown.d.ts +10 -0
  417. package/dist/esm/biz-components/HeaderNavigation/TextLinksDropdown.js +2 -0
  418. package/dist/esm/biz-components/HeaderNavigation/TextLinksDropdown.js.map +7 -0
  419. package/dist/esm/biz-components/HeaderNavigation/index.d.ts +1 -1
  420. package/dist/esm/biz-components/HeaderNavigation/index.js +1 -1
  421. package/dist/esm/biz-components/HeaderNavigation/index.js.map +3 -3
  422. package/dist/esm/biz-components/HeaderNavigation/types.d.ts +11 -1
  423. package/dist/esm/biz-components/HeaderNavigation/types.js +1 -1
  424. package/dist/esm/biz-components/HeaderNavigation/types.js.map +2 -2
  425. package/dist/esm/biz-components/HeaderNavigation/withCategory.d.ts +1 -0
  426. package/dist/esm/biz-components/HeaderNavigation/withCategory.js +1 -1
  427. package/dist/esm/biz-components/HeaderNavigation/withCategory.js.map +3 -3
  428. package/dist/esm/biz-components/HeroBanner/HeroBanner.d.ts +1 -1
  429. package/dist/esm/biz-components/HeroBanner/HeroBanner.js +1 -1
  430. package/dist/esm/biz-components/HeroBanner/HeroBanner.js.map +3 -3
  431. package/dist/esm/biz-components/HeroBanner/HeroBannerCarousel.js +1 -1
  432. package/dist/esm/biz-components/HeroBanner/HeroBannerCarousel.js.map +3 -3
  433. package/dist/esm/biz-components/ImageOverlayShelf/index.d.ts +1 -1
  434. package/dist/esm/biz-components/ImageTextFeature/ImageTextFeature.d.ts +1 -1
  435. package/dist/esm/biz-components/ImageTextOverlay/index.d.ts +1 -1
  436. package/dist/esm/biz-components/ImageTextOverlay/index.js +2 -2
  437. package/dist/esm/biz-components/ImageTextOverlay/index.js.map +3 -3
  438. package/dist/esm/biz-components/ImageWithText/ImageWithText.d.ts +1 -1
  439. package/dist/esm/biz-components/ImageWithText/ImageWithText.js +1 -1
  440. package/dist/esm/biz-components/ImageWithText/ImageWithText.js.map +3 -3
  441. package/dist/esm/biz-components/Ksp/index.d.ts +1 -1
  442. package/dist/esm/biz-components/Ksp/index.js +1 -1
  443. package/dist/esm/biz-components/Ksp/index.js.map +3 -3
  444. package/dist/esm/biz-components/Listing/BizProductProvider.d.ts +3 -1
  445. package/dist/esm/biz-components/Listing/BizProductProvider.js +1 -1
  446. package/dist/esm/biz-components/Listing/BizProductProvider.js.map +3 -3
  447. package/dist/esm/biz-components/Listing/components/CartActionButtons/index.d.ts +9 -1
  448. package/dist/esm/biz-components/Listing/components/CartActionButtons/index.js +1 -1
  449. package/dist/esm/biz-components/Listing/components/CartActionButtons/index.js.map +3 -3
  450. package/dist/esm/biz-components/Listing/components/PaidShipping/index.d.ts +1 -1
  451. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.d.ts +1 -1
  452. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.d.ts +1 -1
  453. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.d.ts +1 -1
  454. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.d.ts +1 -1
  455. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.d.ts +1 -1
  456. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductOptions/index.d.ts +1 -1
  457. package/dist/esm/biz-components/Listing/components/ProductCard/ProductGallery/index.d.ts +1 -1
  458. package/dist/esm/biz-components/Listing/components/ProductCard/ProductPaidShipping/index.d.ts +1 -1
  459. package/dist/esm/biz-components/Listing/components/ProductCard/ProductSummary/index.d.ts +1 -1
  460. package/dist/esm/biz-components/Listing/components/ProductCard/ProductSummary/index.js +1 -1
  461. package/dist/esm/biz-components/Listing/components/ProductCard/ProductSummary/index.js.map +3 -3
  462. package/dist/esm/biz-components/Listing/components/PurchaseBar/ProductActions/index.js +1 -1
  463. package/dist/esm/biz-components/Listing/components/PurchaseBar/ProductActions/index.js.map +3 -3
  464. package/dist/esm/biz-components/Listing/components/PurchaseBar/index.d.ts +1 -1
  465. package/dist/esm/biz-components/LotteryShared/ErrorModal.d.ts +4 -0
  466. package/dist/esm/biz-components/LotteryShared/ErrorModal.js.map +2 -2
  467. package/dist/esm/biz-components/LotteryShared/MyRewardsModal.d.ts +13 -13
  468. package/dist/esm/biz-components/LotteryShared/MyRewardsModal.js +1 -1
  469. package/dist/esm/biz-components/LotteryShared/MyRewardsModal.js.map +3 -3
  470. package/dist/esm/biz-components/LotteryShared/types.d.ts +9 -0
  471. package/dist/esm/biz-components/LotteryShared/types.js.map +2 -2
  472. package/dist/esm/biz-components/Marquee/Marquee.d.ts +1 -1
  473. package/dist/esm/biz-components/MarqueeReview/index.d.ts +1 -1
  474. package/dist/esm/biz-components/Media/index.js +1 -1
  475. package/dist/esm/biz-components/Media/index.js.map +3 -3
  476. package/dist/esm/biz-components/MediaEndorsement/index.d.ts +1 -1
  477. package/dist/esm/biz-components/MediaEndorsement/index.js +2 -2
  478. package/dist/esm/biz-components/MediaEndorsement/index.js.map +3 -3
  479. package/dist/esm/biz-components/MediaPlayerBase/index.d.ts +1 -1
  480. package/dist/esm/biz-components/MediaPlayerBase/index.js +1 -1
  481. package/dist/esm/biz-components/MediaPlayerBase/index.js.map +3 -3
  482. package/dist/esm/biz-components/MediaPlayerMulti/index.d.ts +1 -1
  483. package/dist/esm/biz-components/MediaPlayerMulti/index.js +1 -1
  484. package/dist/esm/biz-components/MediaPlayerMulti/index.js.map +3 -3
  485. package/dist/esm/biz-components/MediaPlayerSticky/index.d.ts +1 -1
  486. package/dist/esm/biz-components/MediaPlayerSticky/index.js +1 -1
  487. package/dist/esm/biz-components/MediaPlayerSticky/index.js.map +3 -3
  488. package/dist/esm/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.d.ts +1 -1
  489. package/dist/esm/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.js +2 -2
  490. package/dist/esm/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.js.map +3 -3
  491. package/dist/esm/biz-components/MediaSceneSwitcherV2/index.d.ts +1 -1
  492. package/dist/esm/biz-components/MediaSceneSwitcherV2/index.js +1 -1
  493. package/dist/esm/biz-components/MediaSceneSwitcherV2/index.js.map +3 -3
  494. package/dist/esm/biz-components/MediaShelf/index.d.ts +1 -1
  495. package/dist/esm/biz-components/MediaTextOverlay/MediaTextOverlay.d.ts +1 -1
  496. package/dist/esm/biz-components/MediaTextOverlay/MediaTextOverlay.js +1 -1
  497. package/dist/esm/biz-components/MediaTextOverlay/MediaTextOverlay.js.map +3 -3
  498. package/dist/esm/biz-components/MemberEquity/index.d.ts +1 -1
  499. package/dist/esm/biz-components/MemberEquity/index.js +2 -2
  500. package/dist/esm/biz-components/MemberEquity/index.js.map +3 -3
  501. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +2 -2
  502. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js +1 -1
  503. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js.map +3 -3
  504. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.js +1 -1
  505. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.js.map +2 -2
  506. package/dist/esm/biz-components/NavigationSearch/index.d.ts +1 -1
  507. package/dist/esm/biz-components/NavigationSearch/index.js +2 -2
  508. package/dist/esm/biz-components/NavigationSearch/index.js.map +3 -3
  509. package/dist/esm/biz-components/NotifyMeDialog/NotifyMeDialog.d.ts +7 -0
  510. package/dist/esm/biz-components/NotifyMeDialog/NotifyMeDialog.js +2 -0
  511. package/dist/esm/biz-components/NotifyMeDialog/NotifyMeDialog.js.map +7 -0
  512. package/dist/esm/biz-components/NotifyMeDialog/index.d.ts +2 -0
  513. package/dist/esm/biz-components/NotifyMeDialog/index.js +2 -0
  514. package/dist/esm/biz-components/NotifyMeDialog/index.js.map +7 -0
  515. package/dist/esm/biz-components/NotifyMeDialog/types.d.ts +111 -0
  516. package/dist/esm/biz-components/NotifyMeDialog/types.js +1 -0
  517. package/dist/esm/biz-components/NotifyMeDialog/types.js.map +7 -0
  518. package/dist/esm/biz-components/ProductCompare/index.d.ts +1 -1
  519. package/dist/esm/biz-components/ProductCompare/index.js +1 -1
  520. package/dist/esm/biz-components/ProductCompare/index.js.map +2 -2
  521. package/dist/esm/biz-components/ProductHero/ProductHero.d.ts +1 -1
  522. package/dist/esm/biz-components/ProductHero/ProductHero.js +1 -1
  523. package/dist/esm/biz-components/ProductHero/ProductHero.js.map +3 -3
  524. package/dist/esm/biz-components/ProductLottery/types.d.ts +62 -5
  525. package/dist/esm/biz-components/ProductLottery/types.js.map +2 -2
  526. package/dist/esm/biz-components/ProductNav/ProductNav.d.ts +1 -1
  527. package/dist/esm/biz-components/ProductNav/ProductNav.js +1 -1
  528. package/dist/esm/biz-components/ProductNav/ProductNav.js.map +3 -3
  529. package/dist/esm/biz-components/PromotionalBar/index.d.ts +1 -1
  530. package/dist/esm/biz-components/PromotionalBar/index.js +1 -1
  531. package/dist/esm/biz-components/PromotionalBar/index.js.map +3 -3
  532. package/dist/esm/biz-components/SceneShelfV2/index.d.ts +1 -1
  533. package/dist/esm/biz-components/SceneShelfV3/index.d.ts +1 -1
  534. package/dist/esm/biz-components/SearchPage/index.js +1 -1
  535. package/dist/esm/biz-components/SearchPage/index.js.map +3 -3
  536. package/dist/esm/biz-components/SecondaryBanner/index.d.ts +1 -1
  537. package/dist/esm/biz-components/SecondaryBanner/index.js +1 -1
  538. package/dist/esm/biz-components/SecondaryBanner/index.js.map +2 -2
  539. package/dist/esm/biz-components/SelectStore/index.d.ts +1 -1
  540. package/dist/esm/biz-components/ShelfDisplay/index.d.ts +1 -1
  541. package/dist/esm/biz-components/ShelfDisplay/shelfDisplayItem.js +1 -1
  542. package/dist/esm/biz-components/ShelfDisplay/shelfDisplayItem.js.map +3 -3
  543. package/dist/esm/biz-components/Slogan/index.d.ts +1 -1
  544. package/dist/esm/biz-components/Spacer/index.d.ts +1 -1
  545. package/dist/esm/biz-components/Specs/index.d.ts +1 -1
  546. package/dist/esm/biz-components/Specs/index.js +1 -1
  547. package/dist/esm/biz-components/Specs/index.js.map +3 -3
  548. package/dist/esm/biz-components/SpecsComparison/SpecsComparison.d.ts +1 -1
  549. package/dist/esm/biz-components/Subscribe/index.js +1 -1
  550. package/dist/esm/biz-components/Subscribe/index.js.map +2 -2
  551. package/dist/esm/biz-components/SwiperBox/index.js +1 -1
  552. package/dist/esm/biz-components/SwiperBox/index.js.map +3 -3
  553. package/dist/esm/biz-components/TabWithImage/TabWithImage.d.ts +1 -1
  554. package/dist/esm/biz-components/Tabs/Tabs.d.ts +1 -1
  555. package/dist/esm/biz-components/TabsGroup/index.d.ts +1 -1
  556. package/dist/esm/biz-components/TabsWithMedia/TabsWithMedia.d.ts +1 -1
  557. package/dist/esm/biz-components/TabsWithMedia/TabsWithMedia.js +1 -1
  558. package/dist/esm/biz-components/TabsWithMedia/TabsWithMedia.js.map +3 -3
  559. package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.d.ts +1 -1
  560. package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.js +1 -1
  561. package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.js.map +3 -3
  562. package/dist/esm/biz-components/Title/index.d.ts +1 -1
  563. package/dist/esm/biz-components/Title/index.js +1 -1
  564. package/dist/esm/biz-components/Title/index.js.map +3 -3
  565. package/dist/esm/biz-components/VideoFeature/VideoFeature.d.ts +1 -1
  566. package/dist/esm/biz-components/VideoModal/index.d.ts +1 -0
  567. package/dist/esm/biz-components/VideoModal/index.js +1 -1
  568. package/dist/esm/biz-components/VideoModal/index.js.map +3 -3
  569. package/dist/esm/biz-components/WheelLottery/index.js +1 -1
  570. package/dist/esm/biz-components/WheelLottery/index.js.map +2 -2
  571. package/dist/esm/biz-components/WhyChoose/WhyChoose.d.ts +1 -1
  572. package/dist/esm/biz-components/index.d.ts +8 -0
  573. package/dist/esm/biz-components/index.js +1 -1
  574. package/dist/esm/biz-components/index.js.map +3 -3
  575. package/dist/esm/components/Countdown.js +1 -1
  576. package/dist/esm/components/Countdown.js.map +3 -3
  577. package/dist/esm/components/alert.d.ts +1 -0
  578. package/dist/esm/components/alert.js +1 -1
  579. package/dist/esm/components/alert.js.map +2 -2
  580. package/dist/esm/components/breadcrumb.d.ts +12 -0
  581. package/dist/esm/components/breadcrumb.js +2 -0
  582. package/dist/esm/components/breadcrumb.js.map +7 -0
  583. package/dist/esm/components/checkbox.js +1 -1
  584. package/dist/esm/components/checkbox.js.map +2 -2
  585. package/dist/esm/components/dialog.js +1 -1
  586. package/dist/esm/components/dialog.js.map +3 -3
  587. package/dist/esm/components/index.d.ts +5 -0
  588. package/dist/esm/components/index.js +1 -1
  589. package/dist/esm/components/index.js.map +3 -3
  590. package/dist/esm/components/input-number.d.ts +22 -0
  591. package/dist/esm/components/input-number.js +1 -1
  592. package/dist/esm/components/input-number.js.map +3 -3
  593. package/dist/esm/components/link.js +1 -1
  594. package/dist/esm/components/link.js.map +2 -2
  595. package/dist/esm/components/otp-input.d.ts +18 -0
  596. package/dist/esm/components/otp-input.js +2 -0
  597. package/dist/esm/components/otp-input.js.map +7 -0
  598. package/dist/esm/components/toast.d.ts +25 -0
  599. package/dist/esm/components/toast.js +2 -0
  600. package/dist/esm/components/toast.js.map +7 -0
  601. package/dist/esm/helpers/index.d.ts +2 -2
  602. package/dist/esm/helpers/index.js +1 -1
  603. package/dist/esm/helpers/index.js.map +3 -3
  604. package/dist/esm/helpers/isLexicalEmpty.d.ts +5 -0
  605. package/dist/esm/helpers/isLexicalEmpty.js +1 -1
  606. package/dist/esm/helpers/isLexicalEmpty.js.map +3 -3
  607. package/dist/esm/helpers/priceFormatting.d.ts +5 -0
  608. package/dist/esm/helpers/priceFormatting.js +1 -1
  609. package/dist/esm/helpers/priceFormatting.js.map +3 -3
  610. package/dist/esm/helpers/utils.d.ts +7 -1
  611. package/dist/esm/helpers/utils.js +1 -1
  612. package/dist/esm/helpers/utils.js.map +3 -3
  613. package/dist/esm/hooks/useIsomorphicMediaQuery.d.ts +14 -0
  614. package/dist/esm/hooks/useIsomorphicMediaQuery.js +2 -0
  615. package/dist/esm/hooks/useIsomorphicMediaQuery.js.map +7 -0
  616. package/dist/esm/hooks/useProductListTrack.d.ts +43 -0
  617. package/dist/esm/hooks/useProductListTrack.js +2 -0
  618. package/dist/esm/hooks/useProductListTrack.js.map +7 -0
  619. package/dist/esm/index.d.ts +10 -0
  620. package/dist/esm/index.js +1 -1
  621. package/dist/esm/index.js.map +3 -3
  622. package/package.json +1 -1
  623. package/style.css +208 -10
@@ -4,6 +4,12 @@
4
4
  * 基于媒体展示(图片/视频)的抽奖组件,点击 CTA 按钮触发抽奖。
5
5
  * 共享类型来自 LotteryShared/types.ts。
6
6
  *
7
+ * ## CMS 契约优先
8
+ *
9
+ * 本文件以 CMS block schema (`/src/blocks/ProductLottery/config.ts`) 作为
10
+ * 首要文档契约,字段名与 CMS 对齐。旧版字段保留但标注 `@deprecated`,
11
+ * 以维持向后兼容。CMS 端字段优先级高于同义旧版字段。
12
+ *
7
13
  * @module ProductLotteryTypes
8
14
  * @date 2026-04-07
9
15
  */
@@ -178,10 +184,46 @@ export interface ProductLotteryHandle {
178
184
  /** 关闭所有弹窗 */
179
185
  hideAllModals: () => void;
180
186
  }
187
+ /**
188
+ * 错误弹窗配置(ErrorConfig)
189
+ *
190
+ * 对齐 CMS `error` group 字段结构。新代码使用此类型;
191
+ * `errorModalConfig`(`ErrorModalConfig`)已废弃,保留仅供过渡期使用。
192
+ *
193
+ * CMS 字段映射:
194
+ * - `title` → 错误标题
195
+ * - `defaultMessage` → 默认错误消息(对应渲染层的 `message`)
196
+ * - `confirmButton` → 确认按钮文案(对应渲染层的 `confirmText`)
197
+ * - `exchangeFailedTitle` → 兑换失败标题
198
+ * - `exchangeFailedMessage` → 兑换失败消息
199
+ */
200
+ export interface ErrorConfig {
201
+ title?: string;
202
+ defaultMessage?: string;
203
+ confirmButton?: string;
204
+ exchangeFailedTitle?: string;
205
+ exchangeFailedMessage?: string;
206
+ }
207
+ /**
208
+ * 未中奖弹窗配置(TryAgainConfig)
209
+ *
210
+ * 对齐 CMS `tryAgain` group 字段结构。
211
+ *
212
+ * CMS 字段映射:
213
+ * - `title` → 弹窗标题
214
+ * - `message` → 内容文案
215
+ * - `confirmText` → 确认按钮文案
216
+ */
217
+ export interface TryAgainConfig {
218
+ title?: string;
219
+ message?: string;
220
+ confirmText?: string;
221
+ }
181
222
  /**
182
223
  * MediaDrawArea 子组件 Props
183
224
  *
184
225
  * 媒体抽奖区域,展示图片/视频并叠加 CTA 按钮。
226
+ * videoAutoPlay / videoMuted / videoLoop 为组件级运行时控制,CMS 不配置。
185
227
  */
186
228
  export interface MediaDrawAreaProps {
187
229
  /** 主题模式 */
@@ -224,12 +266,18 @@ export interface MediaDrawAreaProps {
224
266
  * 基于媒体展示的产品抽奖组件。左侧为可点击的媒体区域(图片/视频),
225
267
  * 右侧为获取机会区域,底部为奖品池。
226
268
  *
269
+ * ## 字段命名策略(CMS-primary)
270
+ *
271
+ * 本接口以 CMS block schema 字段名为主名称。旧版命名以 `@deprecated` 标记,
272
+ * 保留仅供过渡期使用。当 CMS 字段与旧版字段同时存在时,CMS 字段优先。
273
+ *
227
274
  * @example
228
275
  * ```tsx
229
276
  * <ProductLottery
230
277
  * prizes={prizes}
231
- * media={{ type: 'image', src: '/banner.jpg', alt: 'Lottery' }}
278
+ * media={{ type: 'image', image: { url: '/banner.jpg', alt: 'Lottery', thumbnailURL: '' } }}
232
279
  * ctaButton={{ text: 'Draw Now' }}
280
+ * loginPrompt="Please sign in to join the draw"
233
281
  * onDrawStart={async () => {
234
282
  * const result = await fetch('/api/lottery')
235
283
  * const data = await result.json()
@@ -346,7 +394,10 @@ export interface ProductLotteryProps {
346
394
  * 中奖弹窗配置(CMS: `winningInfos` group — 主名称)
347
395
  *
348
396
  * CMS 中 `winningInfos` 是中奖弹窗配置 group,字段:
349
- * `title`、`confirmButton`、`confirmUrl`、`learnMoreUrl`、`learnMoreText`。
397
+ * `title`、`confirmButton`(对应渲染层 confirmText)、`confirmUrl`、
398
+ * `learnMoreUrl`、`learnMoreText`。
399
+ *
400
+ * @note CMS 字段 `confirmButton` 对应组件渲染层的 `confirmText`。
350
401
  */
351
402
  winningInfos?: WinnerModalConfig;
352
403
  /**
@@ -381,7 +432,13 @@ export interface ProductLotteryProps {
381
432
  * @param error 错误信息
382
433
  */
383
434
  onDrawError?: (error: Error) => void;
384
- /** 中奖弹窗配置 */
435
+ /**
436
+ * 中奖弹窗详细渲染配置(含 prizeTitle / prizeImage / couponCode 等)
437
+ *
438
+ * @note `winningInfos` is the CMS-primary equivalent for basic config, and `winnerModalConfig` is for extended UI config that overlays on top.
439
+ * 与 `winningInfos` 共同配置中奖弹窗。当两者同时存在时,此字段中的
440
+ * 同名属性优先级更高(逐字段合并,此字段覆盖 `winningInfos`)。
441
+ */
385
442
  winnerModalConfig?: WinnerModalConfig;
386
443
  /** 规则弹窗配置 */
387
444
  rulesModalConfig?: RulesModalConfig;
@@ -402,13 +459,13 @@ export interface ProductLotteryProps {
402
459
  * 字段:`title`、`message`、`confirmText`。
403
460
  */
404
461
  tryAgain?: TryAgainConfig;
462
+ /** 分享弹窗配置 */
463
+ shareModalConfig?: ShareModalConfig;
405
464
  /**
406
465
  * 错误弹窗配置(旧版)
407
466
  * @deprecated Use `error` instead (CMS field name)
408
467
  */
409
468
  errorModalConfig?: ErrorModalConfig;
410
- /** 分享弹窗配置 */
411
- shareModalConfig?: ShareModalConfig;
412
469
  /**
413
470
  * 未登录时的提示文案(CMS: `loginPrompt`)
414
471
  * @default "Please log in to participate in the lottery"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/ProductLottery/types.ts"],
4
- "sourcesContent": ["/**\n * ProductLottery - \u4EA7\u54C1\u62BD\u5956\u7EC4\u4EF6\u7C7B\u578B\u5B9A\u4E49\n *\n * \u57FA\u4E8E\u5A92\u4F53\u5C55\u793A\uFF08\u56FE\u7247/\u89C6\u9891\uFF09\u7684\u62BD\u5956\u7EC4\u4EF6\uFF0C\u70B9\u51FB CTA \u6309\u94AE\u89E6\u53D1\u62BD\u5956\u3002\n * \u5171\u4EAB\u7C7B\u578B\u6765\u81EA LotteryShared/types.ts\u3002\n *\n * @module ProductLotteryTypes\n * @date 2026-04-07\n */\n\nimport type {\n Prize,\n WinnerModalConfig,\n ShareModalConfig,\n ChanceMethod,\n WinningInfo,\n RulesModalConfig,\n ActionButtonConfig,\n MyRewardsModalConfig,\n ErrorModalConfig,\n UserData,\n ChanceMechanismType,\n ChanceInputConfig,\n} from '../LotteryShared/types.js'\n\nimport type { Theme, Media } from '../../types/props.js'\n\n// Re-export shared types for convenience\nexport type { Theme, Media }\n\n// ============================================================================\n// \u5A92\u4F53\u914D\u7F6E\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u5A92\u4F53\u914D\u7F6E\uFF08MediaConfig\uFF09\n *\n * \u7CBE\u786E\u5BF9\u9F50 CMS block \u5B57\u6BB5\u7ED3\u6784\uFF0C\u76F4\u63A5\u6620\u5C04\u65E0\u9700\u989D\u5916\u8F6C\u6362\u3002\n *\n * @example\n * ```tsx\n * // \u56FE\u7247\u6A21\u5F0F\uFF08\u54CD\u5E94\u5F0F\uFF09\n * const imageMedia: MediaConfig = {\n * type: 'image',\n * image: { url: '/img/banner-sm.jpg', alt: 'Banner', thumbnailURL: '' },\n * imageTablet: { url: '/img/banner-md.jpg', alt: 'Banner', thumbnailURL: '' },\n * imageLaptop: { url: '/img/banner-lg.jpg', alt: 'Banner', thumbnailURL: '' },\n * imageDesktop: { url: '/img/banner-xl.jpg', alt: 'Banner', thumbnailURL: '' },\n * imageLgDesktop: { url: '/img/banner-xxl.jpg', alt: 'Banner', thumbnailURL: '' },\n * }\n *\n * // \u89C6\u9891\u6A21\u5F0F\n * const videoMedia: MediaConfig = {\n * type: 'video',\n * video: {\n * url: 'https://cdn.example.com/promo.mp4',\n * alt: 'Product Lottery Video',\n * thumbnailURL: 'https://cdn.example.com/poster.jpg',\n * mimeType: 'video/mp4',\n * },\n * }\n * ```\n */\nexport interface MediaConfig {\n /** \u5A92\u4F53\u7C7B\u578B */\n type: 'image' | 'video'\n\n // \u2014\u2014 \u56FE\u7247\u5B57\u6BB5\uFF08type === 'image' \u65F6\u4F7F\u7528\uFF09\u2014\u2014\n\n /** \u9ED8\u8BA4/\u79FB\u52A8\u7AEF\u56FE\u7247\uFF08<768px\uFF09 */\n image?: Media\n /** \u5E73\u677F\u7AEF\u56FE\u7247\uFF08\u2265768px\uFF09 */\n imageTablet?: Media\n /** \u5C0F\u684C\u9762\u56FE\u7247\uFF08\u22651025px\uFF09 */\n imageLaptop?: Media\n /** \u5927\u684C\u9762\u56FE\u7247\uFF08\u22651440px\uFF09 */\n imageDesktop?: Media\n /** \u8D85\u5927\u5C4F\u56FE\u7247\uFF08\u22651920px\uFF09 */\n imageLgDesktop?: Media\n\n // \u2014\u2014 \u89C6\u9891\u5B57\u6BB5\uFF08type === 'video' \u65F6\u4F7F\u7528\uFF09\u2014\u2014\n\n /** \u89C6\u9891\u5A92\u4F53\uFF08mimeType: 'video/mp4'\uFF0CthumbnailURL \u4F5C\u5C01\u9762\u56FE\uFF09 */\n video?: Media\n}\n\n// ============================================================================\n// CTA \u6309\u94AE\u914D\u7F6E\n// ============================================================================\n\n/**\n * CTA \u6309\u94AE\u914D\u7F6E\uFF08CtaButtonConfig\uFF09\n *\n * \u914D\u7F6E\u8986\u76D6\u5728\u5A92\u4F53\u533A\u57DF\u4E0A\u7684\u884C\u52A8\u53F7\u53EC\u6309\u94AE\u3002\n *\n * @example\n * ```tsx\n * const ctaButton: CtaButtonConfig = {\n * text: 'Join the Draw',\n * style: 'primary',\n * }\n * ```\n */\nexport interface CtaButtonConfig {\n /**\n * \u6309\u94AE\u6587\u6848\n * @default \"Join the Draw\"\n * @optional\n */\n text?: string\n\n /**\n * \u6309\u94AE\u6837\u5F0F\n * @default \"primary\"\n * @optional\n */\n style?: 'primary' | 'secondary' | 'outline'\n}\n\n// ============================================================================\n// \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08CMS error group\uFF09\n// ============================================================================\n\n/**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08ErrorConfig\uFF09\n *\n * \u5BF9\u9F50 CMS `error` group \u5B57\u6BB5\u7ED3\u6784\u3002\n *\n * CMS \u5B57\u6BB5\u6620\u5C04:\n * - `title` \u2192 \u5F39\u7A97\u6807\u9898\n * - `defaultMessage` \u2192 \u9ED8\u8BA4\u9519\u8BEF\u5185\u5BB9\u6587\u6848\n * - `confirmButton` \u2192 \u786E\u8BA4\u6309\u94AE\u6587\u6848\n * - `exchangeFailedTitle` \u2192 \u5151\u6362\u5931\u8D25\u5F39\u7A97\u6807\u9898\n * - `exchangeFailedMessage` \u2192 \u5151\u6362\u5931\u8D25\u5F39\u7A97\u5185\u5BB9\n */\nexport interface ErrorConfig {\n title?: string\n defaultMessage?: string\n confirmButton?: string\n exchangeFailedTitle?: string\n exchangeFailedMessage?: string\n}\n\n// ============================================================================\n// \u672A\u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08CMS tryAgain group\uFF09\n// ============================================================================\n\n/**\n * \u672A\u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08TryAgainConfig\uFF09\n *\n * \u5BF9\u9F50 CMS `tryAgain` group \u5B57\u6BB5\u7ED3\u6784\u3002\n *\n * CMS \u5B57\u6BB5\u6620\u5C04:\n * - `title` \u2192 \u5F39\u7A97\u6807\u9898\n * - `message` \u2192 \u5185\u5BB9\u6587\u6848\n * - `confirmText` \u2192 \u786E\u8BA4\u6309\u94AE\u6587\u6848\n */\nexport interface TryAgainConfig {\n title?: string\n message?: string\n confirmText?: string\n}\n\n// ============================================================================\n// Imperative Handle \u63A5\u53E3\n// ============================================================================\n\n/**\n * ProductLottery \u7EC4\u4EF6\u547D\u4EE4\u5F0F\u63A7\u5236\u63A5\u53E3\n *\n * \u901A\u8FC7 ref \u66B4\u9732\u7ED9\u7236\u7EC4\u4EF6\uFF0C\u7528\u4E8E\u5916\u90E8\u63A7\u5236\u5F39\u7A97\u7B49\u72B6\u6001\u3002\n * \u4E0E WheelLotteryHandle \u4FDD\u6301\u4E00\u81F4\u7684\u5F39\u7A97\u63A7\u5236\u65B9\u6CD5\u3002\n *\n * @example\n * ```tsx\n * const lotteryRef = useRef<ProductLotteryHandle>(null)\n *\n * <ProductLottery ref={lotteryRef} prizes={prizes} media={media} />\n *\n * // \u5916\u90E8\u89E6\u53D1\u9519\u8BEF\u5F39\u7A97\n * lotteryRef.current?.showError({\n * title: 'Network Error',\n * message: 'Failed to connect to server',\n * confirmText: 'Retry'\n * })\n *\n * // \u663E\u793A\u89C4\u5219\u5F39\u7A97\n * lotteryRef.current?.showRules()\n *\n * // \u5173\u95ED\u6240\u6709\u5F39\u7A97\n * lotteryRef.current?.hideAllModals()\n * ```\n */\nexport interface ProductLotteryHandle {\n /** \u663E\u793A\u9519\u8BEF\u5F39\u7A97 */\n showError: (config: { message: string; title?: string; confirmText?: string }) => void\n\n /** \u9690\u85CF\u9519\u8BEF\u5F39\u7A97 */\n hideError: () => void\n\n /** \u663E\u793A\u672A\u4E2D\u5956\u5F39\u7A97 */\n showNoWin: (config?: { title?: string; message?: string; confirmText?: string }) => void\n\n /** \u9690\u85CF\u672A\u4E2D\u5956\u5F39\u7A97 */\n hideNoWin: () => void\n\n /** \u663E\u793A\u4E2D\u5956\u5F39\u7A97 */\n showWinner: (prize: Prize, config?: Partial<WinnerModalConfig>) => void\n\n /** \u9690\u85CF\u4E2D\u5956\u5F39\u7A97 */\n hideWinner: () => void\n\n /** \u663E\u793A\u89C4\u5219\u5F39\u7A97 */\n showRules: () => void\n\n /** \u9690\u85CF\u89C4\u5219\u5F39\u7A97 */\n hideRules: () => void\n\n /** \u663E\u793A\u6211\u7684\u5956\u52B1\u5F39\u7A97 */\n showRewards: () => void\n\n /** \u9690\u85CF\u6211\u7684\u5956\u52B1\u5F39\u7A97 */\n hideRewards: () => void\n\n /** \u663E\u793A\u5206\u4EAB\u5F39\u7A97 */\n showShare: (config?: Partial<ShareModalConfig>) => void\n\n /** \u9690\u85CF\u5206\u4EAB\u5F39\u7A97 */\n hideShare: () => void\n\n /** \u5173\u95ED\u6240\u6709\u5F39\u7A97 */\n hideAllModals: () => void\n}\n\n// ============================================================================\n// MediaDrawArea \u5B50\u7EC4\u4EF6 Props\n// ============================================================================\n\n/**\n * MediaDrawArea \u5B50\u7EC4\u4EF6 Props\n *\n * \u5A92\u4F53\u62BD\u5956\u533A\u57DF\uFF0C\u5C55\u793A\u56FE\u7247/\u89C6\u9891\u5E76\u53E0\u52A0 CTA \u6309\u94AE\u3002\n */\nexport interface MediaDrawAreaProps {\n /** \u4E3B\u9898\u6A21\u5F0F */\n theme?: Theme\n\n /** \u5A92\u4F53\u914D\u7F6E\uFF08\u5FC5\u9700\uFF09 */\n media: MediaConfig\n\n /** CTA \u6309\u9492\u914D\u7F6E */\n ctaButton?: CtaButtonConfig\n\n /**\n * \u89C6\u9891\u81EA\u52A8\u64AD\u653E\uFF08\u4EC5 mimeType='video/mp4' \u65F6\u6709\u6548\uFF09\n * @default true\n */\n videoAutoPlay?: boolean\n\n /**\n * \u89C6\u9891\u9759\u97F3\uFF08\u4EC5 mimeType='video/mp4' \u65F6\u6709\u6548\uFF09\n * @default true\n */\n videoMuted?: boolean\n\n /**\n * \u89C6\u9891\u5FAA\u73AF\uFF08\u4EC5 mimeType='video/mp4' \u65F6\u6709\u6548\uFF09\n * @default true\n */\n videoLoop?: boolean\n\n /** \u662F\u5426\u6B63\u5728\u62BD\u5956\u4E2D */\n isDrawing?: boolean\n\n /** \u662F\u5426\u7981\u7528\uFF08\u672A\u767B\u5F55\u6216\u65E0\u6B21\u6570\uFF09 */\n isDisabled?: boolean\n\n /** \u70B9\u51FB\u62BD\u5956\u56DE\u8C03 */\n onClick: () => void\n\n /** \u81EA\u5B9A\u4E49\u7C7B\u540D */\n className?: string\n\n /** \u70B9\u51FB\u8FFD\u8E2A\uFF1Adata-headless-type-name \u5C5E\u6027\u503C\uFF0C\u683C\u5F0F `{clickType}#{componentName}` */\n ctaTrackTypeName?: string\n\n /** \u70B9\u51FB\u8FFD\u8E2A\uFF1Adata-headless-title-desc-button \u5C5E\u6027\u503C\uFF0C\u683C\u5F0F `{title}#{desc}#{buttonName}` */\n ctaTrackTitleDescButton?: string\n}\n\n// ============================================================================\n// \u4E3B\u7EC4\u4EF6 Props\n// ============================================================================\n\n/**\n * ProductLottery \u7EC4\u4EF6 Props\n *\n * \u57FA\u4E8E\u5A92\u4F53\u5C55\u793A\u7684\u4EA7\u54C1\u62BD\u5956\u7EC4\u4EF6\u3002\u5DE6\u4FA7\u4E3A\u53EF\u70B9\u51FB\u7684\u5A92\u4F53\u533A\u57DF\uFF08\u56FE\u7247/\u89C6\u9891\uFF09\uFF0C\n * \u53F3\u4FA7\u4E3A\u83B7\u53D6\u673A\u4F1A\u533A\u57DF\uFF0C\u5E95\u90E8\u4E3A\u5956\u54C1\u6C60\u3002\n *\n * @example\n * ```tsx\n * <ProductLottery\n * prizes={prizes}\n * media={{ type: 'image', src: '/banner.jpg', alt: 'Lottery' }}\n * ctaButton={{ text: 'Draw Now' }}\n * onDrawStart={async () => {\n * const result = await fetch('/api/lottery')\n * const data = await result.json()\n * return data.prizeId\n * }}\n * onDrawEnd={(prize) => console.log('Won:', prize.name)}\n * />\n * ```\n */\nexport interface ProductLotteryProps {\n // ========== \u5FC5\u9700 Props ==========\n\n /**\n * 8 \u4E2A\u5956\u54C1\u6570\u7EC4\uFF08\u5FC5\u9700\uFF09\n * @minLength 8\n * @maxLength 8\n */\n prizes: Prize[]\n\n /**\n * \u5A92\u4F53\u914D\u7F6E\uFF08\u5FC5\u9700\uFF09\n * \u914D\u7F6E\u5DE6\u4FA7\u62BD\u5956\u533A\u57DF\u5C55\u793A\u7684\u56FE\u7247\u6216\u89C6\u9891\uFF0C\u65E0\u9700 type/src \u5305\u88C5\u5C42\n */\n media: MediaConfig\n\n /**\n * \u89C6\u9891\u81EA\u52A8\u64AD\u653E\uFF08\u5F53 media.mimeType === 'video/mp4' \u65F6\u751F\u6548\uFF09\n * @default true\n * @optional\n */\n videoAutoPlay?: boolean\n\n /**\n * \u89C6\u9891\u9759\u97F3\uFF08\u5F53 media.mimeType === 'video/mp4' \u65F6\u751F\u6548\uFF09\n * @default true\n * @optional\n */\n videoMuted?: boolean\n\n /**\n * \u89C6\u9891\u5FAA\u73AF\uFF08\u5F53 media.mimeType === 'video/mp4' \u65F6\u751F\u6548\uFF09\n * @default true\n * @optional\n */\n videoLoop?: boolean\n\n // ========== \u4E3B\u9898\u548C\u6837\u5F0F ==========\n\n /** \u4E3B\u9898\u6A21\u5F0F */\n theme?: Theme\n\n /** CTA \u6309\u94AE\u914D\u7F6E */\n ctaButton?: CtaButtonConfig\n\n // ========== CMS \u9876\u5C42\u5B57\u6BB5 ==========\n\n /**\n * \u62BD\u5956\u6D3B\u52A8\u7C7B\u578B\uFF08CMS: `dealsType`\uFF09\n * \u7528\u4E8E\u6807\u8BC6\u62BD\u5956\u6D3B\u52A8\u7684\u552F\u4E00\u7C7B\u578B\uFF0C\u5982\uFF1A`ipc-2614`\n * @optional\n */\n dealsType?: string\n\n // ========== \u83B7\u53D6\u673A\u4F1A\u533A\u57DF Props ==========\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u6570\u7EC4\n * @optional\n */\n chanceMethods?: ChanceMethod[]\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u673A\u5236\u7C7B\u578B\n * @default \"methods\"\n * @optional\n */\n mechanismType?: ChanceMechanismType\n\n // \u2500\u2500 CMS flat input fields\uFF08mechanismType='input' \u65F6\u4F7F\u7528\uFF09\u2500\u2500\n\n /**\n * \u8F93\u5165\u6846\u5360\u4F4D\u6587\u672C\uFF08CMS: `inputPlaceholder`\uFF09\n * @default \"Enter your order number\"\n * @optional\n */\n inputPlaceholder?: string\n\n /**\n * \u63D0\u4EA4\u6309\u94AE\u6587\u6848\uFF08CMS: `inputSubmitText`\uFF09\n * @default \"Spin and Win\"\n * @optional\n */\n inputSubmitText?: string\n\n /**\n * \u8F93\u5165\u6846\u7C7B\u578B\uFF08CMS: `inputType`\uFF09\n * @default \"text\"\n * @optional\n */\n inputType?: 'text' | 'email' | 'number'\n\n /**\n * \u8F93\u5165\u683C\u5F0F\u9519\u8BEF\u63D0\u793A\u6587\u6848\uFF08CMS: `inputValidationErrorText`\uFF09\n * @optional\n */\n inputValidationErrorText?: string\n\n /**\n * \u8F93\u5165\u6846\u63D0\u4EA4\u4E2D loading \u6309\u94AE\u6587\u6848\uFF08CMS: `inputLoadingText`\uFF09\n * @default \"Loading...\"\n * @optional\n */\n inputLoadingText?: string\n\n /**\n * \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u5F53 mechanismType \u4E3A 'input' \u65F6\u4F7F\u7528\uFF09\n * @deprecated Use flat input fields (`inputPlaceholder`, `inputSubmitText`, `inputType`, `inputValidationErrorText`, `inputLoadingText`) instead (CMS field names)\n * @optional\n */\n inputConfig?: ChanceInputConfig\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u6807\u9898\n * @default \"Want more chances to win?\"\n * @optional\n */\n chanceTitle?: string\n\n /** \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u526F\u6807\u9898 */\n chanceSubtitle?: string\n\n /** \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u5E95\u90E8\u63D0\u793A */\n chanceFooterNote?: string\n\n /** \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u6587\u6848\u914D\u7F6E */\n chanceMethodsText?: {\n chanceBadgeText?: string\n completedText?: string\n usedText?: string\n loadingText?: string\n }\n\n // ========== \u4E2D\u5956\u4FE1\u606F Props ==========\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08CMS: `winningInfos` group \u2014 \u4E3B\u540D\u79F0\uFF09\n *\n * CMS \u4E2D `winningInfos` \u662F\u4E2D\u5956\u5F39\u7A97\u914D\u7F6E group\uFF0C\u5B57\u6BB5\uFF1A\n * `title`\u3001`confirmButton`\u3001`confirmUrl`\u3001`learnMoreUrl`\u3001`learnMoreText`\u3002\n */\n winningInfos?: WinnerModalConfig\n\n /**\n * \u5E95\u90E8\u6EDA\u52A8\u6761\u4E2D\u5956\u4EBA\u540D\u5355\u6570\u636E\n *\n * \u539F `winningInfos: WinningInfo[]` \u91CD\u547D\u540D\u4E3A `winnerTickerData` \u4EE5\u907F\u514D\n * \u4E0E CMS `winningInfos` group \u547D\u540D\u51B2\u7A81\u3002\n *\n * @default []\n */\n winnerTickerData?: WinningInfo[]\n\n /**\n * \u4E2D\u5956\u6EDA\u52A8 Ticker \u6587\u6848\u6A21\u677F\uFF0C\u652F\u6301 {{name}} \u548C {{prize}} \u53D8\u91CF\n * @default \"{{name}} just won {{prize}}!\"\n * @optional\n */\n winnerNameTemplate?: string\n\n /** \u5956\u54C1\u6C60\u5C55\u793A\u533A\u57DF\u6807\u9898 */\n prizesTitle?: string\n\n // ========== \u56DE\u8C03\u51FD\u6570 Props ==========\n\n /**\n * \u62BD\u5956\u5F00\u59CB\u65F6\u7684\u56DE\u8C03\uFF0C\u8FD4\u56DE Promise \u4EE5\u652F\u6301\u5F02\u6B65\u63A5\u53E3\u8C03\u7528\n * @returns Promise<string> - \u4E2D\u5956\u5956\u54C1\u7684 prizeKey\n */\n onDrawStart?: () => Promise<string>\n\n /**\n * \u62BD\u5956\u7ED3\u675F\u65F6\u7684\u56DE\u8C03\uFF0C\u4F20\u9012\u4E2D\u5956\u5956\u54C1\n * @param prize \u4E2D\u5956\u5956\u54C1\u5BF9\u8C61\n */\n onDrawEnd?: (prize: Prize) => void\n\n /**\n * \u62BD\u5956\u9519\u8BEF\u65F6\u7684\u56DE\u8C03\n * @param error \u9519\u8BEF\u4FE1\u606F\n */\n onDrawError?: (error: Error) => void\n\n // ========== \u5F39\u7A97\u914D\u7F6E Props ==========\n\n /** \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E */\n winnerModalConfig?: WinnerModalConfig\n\n /** \u89C4\u5219\u5F39\u7A97\u914D\u7F6E */\n rulesModalConfig?: RulesModalConfig\n\n /** \u9876\u680F\u53F3\u4FA7\u8DF3\u8F6C\u6309\u94AE\u914D\u7F6E\uFF1B\u672A\u914D\u7F6E text \u6216 url \u65F6\u4E0D\u5C55\u793A */\n actionButtonConfig?: ActionButtonConfig\n\n /** \u6211\u7684\u5956\u52B1\u5F39\u7A97\u914D\u7F6E */\n myRewardsModalConfig?: MyRewardsModalConfig\n\n /**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08CMS: `error` group \u2014 \u4E3B\u540D\u79F0\uFF09\n *\n * \u5B57\u6BB5\uFF1A`title`\u3001`defaultMessage`\u3001`confirmButton`\u3001\n * `exchangeFailedTitle`\u3001`exchangeFailedMessage`\u3002\n */\n error?: ErrorConfig\n\n /**\n * \u672A\u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08CMS: `tryAgain` group\uFF09\n *\n * \u5B57\u6BB5\uFF1A`title`\u3001`message`\u3001`confirmText`\u3002\n */\n tryAgain?: TryAgainConfig\n\n /**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08\u65E7\u7248\uFF09\n * @deprecated Use `error` instead (CMS field name)\n */\n errorModalConfig?: ErrorModalConfig\n\n /** \u5206\u4EAB\u5F39\u7A97\u914D\u7F6E */\n shareModalConfig?: ShareModalConfig\n\n // ========== CMS \u5E73\u94FA\u6587\u6848\u5B57\u6BB5\uFF08\u4E3B\u540D\u79F0\uFF09==========\n\n /**\n * \u672A\u767B\u5F55\u65F6\u7684\u63D0\u793A\u6587\u6848\uFF08CMS: `loginPrompt`\uFF09\n * @default \"Please log in to participate in the lottery\"\n */\n loginPrompt?: string\n\n /**\n * \u6B21\u6570\u4E0D\u8DB3\u65F6\u7684\u63D0\u793A\u6587\u6848\uFF08CMS: `noChances`\uFF09\n * @default \"You have no chances left. Get more chances below!\"\n */\n noChances?: string\n\n /**\n * \u673A\u4F1A\u8FDB\u5EA6\u524D\u7F00\u6587\u6848\uFF08CMS: `opportunitiesPrefix`\uFF09\n * @default \"Number of draws remaining today: \"\n */\n opportunitiesPrefix?: string\n\n // ========== \u7528\u6237\u76F8\u5173 Props ==========\n\n /** \u7528\u6237\u6570\u636E */\n userData?: UserData\n\n /**\n * \u672A\u767B\u5F55\u65F6\u7684\u63D0\u793A\u6587\u6848\n * @deprecated Use `loginPrompt` instead (CMS field name)\n * @default \"Please log in to participate\"\n */\n loginPromptText?: string\n\n /**\n * \u767B\u5F55\u6309\u94AE\u6587\u6848\n * @default \"Log In\"\n */\n loginButtonText?: string\n\n /**\n * \u6B21\u6570\u4E0D\u8DB3\u65F6\u7684\u63D0\u793A\u6587\u6848\n * @deprecated Use `noChances` instead (CMS field name)\n * @default \"You have no chances left\"\n */\n noChancesText?: string\n\n /**\n * \u672A\u767B\u5F55\u65F6\u70B9\u51FB\u62BD\u5956\u7684\u56DE\u8C03\n */\n onLoginRequired?: () => void\n\n // ========== \u5176\u4ED6\u914D\u7F6E ==========\n\n /** \u590D\u5236\u4F18\u60E0\u7801\u56DE\u8C03 */\n onCopyCode?: (code: string) => void\n\n /**\n * \u673A\u4F1A\u8FDB\u5EA6\u6587\u6848\u6570\u7EC4\uFF08\u65E7\u7248\uFF0C\u9996\u5143\u7D20\u4E3A\u524D\u7F00\uFF0C\u6B21\u5143\u7D20\u4E3A\u540E\u7F00\uFF09\n * @deprecated Use `opportunitiesPrefix` instead (CMS field name)\n * @default [\"Number of draws remaining today:\"]\n */\n opportunitiesText?: string[]\n\n /** \u81EA\u5B9A\u4E49 CSS \u7C7B\u540D */\n className?: string\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u914D\u7F6E\n// ============================================================================\n\n/** \u9ED8\u8BA4 CTA \u6309\u94AE\u914D\u7F6E */\nexport const DEFAULT_CTA_BUTTON: CtaButtonConfig = {\n text: '',\n style: 'primary',\n}\n\n/** \u9ED8\u8BA4\u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u6807\u9898 */\nexport const DEFAULT_CHANCE_TITLE = 'Want more chances to win?'\n"],
5
- "mappings": "AA+lBO,MAAMA,EAAsC,CACjD,KAAM,GACN,MAAO,SACT,EAGaC,EAAuB",
4
+ "sourcesContent": ["/**\n * ProductLottery - \u4EA7\u54C1\u62BD\u5956\u7EC4\u4EF6\u7C7B\u578B\u5B9A\u4E49\n *\n * \u57FA\u4E8E\u5A92\u4F53\u5C55\u793A\uFF08\u56FE\u7247/\u89C6\u9891\uFF09\u7684\u62BD\u5956\u7EC4\u4EF6\uFF0C\u70B9\u51FB CTA \u6309\u94AE\u89E6\u53D1\u62BD\u5956\u3002\n * \u5171\u4EAB\u7C7B\u578B\u6765\u81EA LotteryShared/types.ts\u3002\n *\n * ## CMS \u5951\u7EA6\u4F18\u5148\n *\n * \u672C\u6587\u4EF6\u4EE5 CMS block schema (`/src/blocks/ProductLottery/config.ts`) \u4F5C\u4E3A\n * \u9996\u8981\u6587\u6863\u5951\u7EA6\uFF0C\u5B57\u6BB5\u540D\u4E0E CMS \u5BF9\u9F50\u3002\u65E7\u7248\u5B57\u6BB5\u4FDD\u7559\u4F46\u6807\u6CE8 `@deprecated`\uFF0C\n * \u4EE5\u7EF4\u6301\u5411\u540E\u517C\u5BB9\u3002CMS \u7AEF\u5B57\u6BB5\u4F18\u5148\u7EA7\u9AD8\u4E8E\u540C\u4E49\u65E7\u7248\u5B57\u6BB5\u3002\n *\n * @module ProductLotteryTypes\n * @date 2026-04-07\n */\n\nimport type {\n Prize,\n WinnerModalConfig,\n ShareModalConfig,\n ChanceMethod,\n WinningInfo,\n RulesModalConfig,\n ActionButtonConfig,\n MyRewardsModalConfig,\n ErrorModalConfig,\n UserData,\n ChanceMechanismType,\n ChanceInputConfig,\n} from '../LotteryShared/types.js'\n\nimport type { Theme, Media } from '../../types/props.js'\n\n// Re-export shared types for convenience\nexport type { Theme, Media }\n\n// ============================================================================\n// \u5A92\u4F53\u914D\u7F6E\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u5A92\u4F53\u914D\u7F6E\uFF08MediaConfig\uFF09\n *\n * \u7CBE\u786E\u5BF9\u9F50 CMS block \u5B57\u6BB5\u7ED3\u6784\uFF0C\u76F4\u63A5\u6620\u5C04\u65E0\u9700\u989D\u5916\u8F6C\u6362\u3002\n *\n * @example\n * ```tsx\n * // \u56FE\u7247\u6A21\u5F0F\uFF08\u54CD\u5E94\u5F0F\uFF09\n * const imageMedia: MediaConfig = {\n * type: 'image',\n * image: { url: '/img/banner-sm.jpg', alt: 'Banner', thumbnailURL: '' },\n * imageTablet: { url: '/img/banner-md.jpg', alt: 'Banner', thumbnailURL: '' },\n * imageLaptop: { url: '/img/banner-lg.jpg', alt: 'Banner', thumbnailURL: '' },\n * imageDesktop: { url: '/img/banner-xl.jpg', alt: 'Banner', thumbnailURL: '' },\n * imageLgDesktop: { url: '/img/banner-xxl.jpg', alt: 'Banner', thumbnailURL: '' },\n * }\n *\n * // \u89C6\u9891\u6A21\u5F0F\n * const videoMedia: MediaConfig = {\n * type: 'video',\n * video: {\n * url: 'https://cdn.example.com/promo.mp4',\n * alt: 'Product Lottery Video',\n * thumbnailURL: 'https://cdn.example.com/poster.jpg',\n * mimeType: 'video/mp4',\n * },\n * }\n * ```\n */\nexport interface MediaConfig {\n /** \u5A92\u4F53\u7C7B\u578B */\n type: 'image' | 'video'\n\n // \u2014\u2014 \u56FE\u7247\u5B57\u6BB5\uFF08type === 'image' \u65F6\u4F7F\u7528\uFF09\u2014\u2014\n\n /** \u9ED8\u8BA4/\u79FB\u52A8\u7AEF\u56FE\u7247\uFF08<768px\uFF09 */\n image?: Media\n /** \u5E73\u677F\u7AEF\u56FE\u7247\uFF08\u2265768px\uFF09 */\n imageTablet?: Media\n /** \u5C0F\u684C\u9762\u56FE\u7247\uFF08\u22651025px\uFF09 */\n imageLaptop?: Media\n /** \u5927\u684C\u9762\u56FE\u7247\uFF08\u22651440px\uFF09 */\n imageDesktop?: Media\n /** \u8D85\u5927\u5C4F\u56FE\u7247\uFF08\u22651920px\uFF09 */\n imageLgDesktop?: Media\n\n // \u2014\u2014 \u89C6\u9891\u5B57\u6BB5\uFF08type === 'video' \u65F6\u4F7F\u7528\uFF09\u2014\u2014\n\n /** \u89C6\u9891\u5A92\u4F53\uFF08mimeType: 'video/mp4'\uFF0CthumbnailURL \u4F5C\u5C01\u9762\u56FE\uFF09 */\n video?: Media\n}\n\n// ============================================================================\n// CTA \u6309\u94AE\u914D\u7F6E\n// ============================================================================\n\n/**\n * CTA \u6309\u94AE\u914D\u7F6E\uFF08CtaButtonConfig\uFF09\n *\n * \u914D\u7F6E\u8986\u76D6\u5728\u5A92\u4F53\u533A\u57DF\u4E0A\u7684\u884C\u52A8\u53F7\u53EC\u6309\u94AE\u3002\n *\n * @example\n * ```tsx\n * const ctaButton: CtaButtonConfig = {\n * text: 'Join the Draw',\n * style: 'primary',\n * }\n * ```\n */\nexport interface CtaButtonConfig {\n /**\n * \u6309\u94AE\u6587\u6848\n * @default \"Join the Draw\"\n * @optional\n */\n text?: string\n\n /**\n * \u6309\u94AE\u6837\u5F0F\n * @default \"primary\"\n * @optional\n */\n style?: 'primary' | 'secondary' | 'outline'\n}\n\n// ============================================================================\n// \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08CMS error group\uFF09\n// ============================================================================\n\n/**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08ErrorConfig\uFF09\n *\n * \u5BF9\u9F50 CMS `error` group \u5B57\u6BB5\u7ED3\u6784\u3002\n *\n * CMS \u5B57\u6BB5\u6620\u5C04:\n * - `title` \u2192 \u5F39\u7A97\u6807\u9898\n * - `defaultMessage` \u2192 \u9ED8\u8BA4\u9519\u8BEF\u5185\u5BB9\u6587\u6848\n * - `confirmButton` \u2192 \u786E\u8BA4\u6309\u94AE\u6587\u6848\n * - `exchangeFailedTitle` \u2192 \u5151\u6362\u5931\u8D25\u5F39\u7A97\u6807\u9898\n * - `exchangeFailedMessage` \u2192 \u5151\u6362\u5931\u8D25\u5F39\u7A97\u5185\u5BB9\n */\nexport interface ErrorConfig {\n title?: string\n defaultMessage?: string\n confirmButton?: string\n exchangeFailedTitle?: string\n exchangeFailedMessage?: string\n}\n\n// ============================================================================\n// \u672A\u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08CMS tryAgain group\uFF09\n// ============================================================================\n\n/**\n * \u672A\u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08TryAgainConfig\uFF09\n *\n * \u5BF9\u9F50 CMS `tryAgain` group \u5B57\u6BB5\u7ED3\u6784\u3002\n *\n * CMS \u5B57\u6BB5\u6620\u5C04:\n * - `title` \u2192 \u5F39\u7A97\u6807\u9898\n * - `message` \u2192 \u5185\u5BB9\u6587\u6848\n * - `confirmText` \u2192 \u786E\u8BA4\u6309\u94AE\u6587\u6848\n */\nexport interface TryAgainConfig {\n title?: string\n message?: string\n confirmText?: string\n}\n\n// ============================================================================\n// Imperative Handle \u63A5\u53E3\n// ============================================================================\n\n/**\n * ProductLottery \u7EC4\u4EF6\u547D\u4EE4\u5F0F\u63A7\u5236\u63A5\u53E3\n *\n * \u901A\u8FC7 ref \u66B4\u9732\u7ED9\u7236\u7EC4\u4EF6\uFF0C\u7528\u4E8E\u5916\u90E8\u63A7\u5236\u5F39\u7A97\u7B49\u72B6\u6001\u3002\n * \u4E0E WheelLotteryHandle \u4FDD\u6301\u4E00\u81F4\u7684\u5F39\u7A97\u63A7\u5236\u65B9\u6CD5\u3002\n *\n * @example\n * ```tsx\n * const lotteryRef = useRef<ProductLotteryHandle>(null)\n *\n * <ProductLottery ref={lotteryRef} prizes={prizes} media={media} />\n *\n * // \u5916\u90E8\u89E6\u53D1\u9519\u8BEF\u5F39\u7A97\n * lotteryRef.current?.showError({\n * title: 'Network Error',\n * message: 'Failed to connect to server',\n * confirmText: 'Retry'\n * })\n *\n * // \u663E\u793A\u89C4\u5219\u5F39\u7A97\n * lotteryRef.current?.showRules()\n *\n * // \u5173\u95ED\u6240\u6709\u5F39\u7A97\n * lotteryRef.current?.hideAllModals()\n * ```\n */\nexport interface ProductLotteryHandle {\n /** \u663E\u793A\u9519\u8BEF\u5F39\u7A97 */\n showError: (config: { message: string; title?: string; confirmText?: string }) => void\n\n /** \u9690\u85CF\u9519\u8BEF\u5F39\u7A97 */\n hideError: () => void\n\n /** \u663E\u793A\u672A\u4E2D\u5956\u5F39\u7A97 */\n showNoWin: (config?: { title?: string; message?: string; confirmText?: string }) => void\n\n /** \u9690\u85CF\u672A\u4E2D\u5956\u5F39\u7A97 */\n hideNoWin: () => void\n\n /** \u663E\u793A\u4E2D\u5956\u5F39\u7A97 */\n showWinner: (prize: Prize, config?: Partial<WinnerModalConfig>) => void\n\n /** \u9690\u85CF\u4E2D\u5956\u5F39\u7A97 */\n hideWinner: () => void\n\n /** \u663E\u793A\u89C4\u5219\u5F39\u7A97 */\n showRules: () => void\n\n /** \u9690\u85CF\u89C4\u5219\u5F39\u7A97 */\n hideRules: () => void\n\n /** \u663E\u793A\u6211\u7684\u5956\u52B1\u5F39\u7A97 */\n showRewards: () => void\n\n /** \u9690\u85CF\u6211\u7684\u5956\u52B1\u5F39\u7A97 */\n hideRewards: () => void\n\n /** \u663E\u793A\u5206\u4EAB\u5F39\u7A97 */\n showShare: (config?: Partial<ShareModalConfig>) => void\n\n /** \u9690\u85CF\u5206\u4EAB\u5F39\u7A97 */\n hideShare: () => void\n\n /** \u5173\u95ED\u6240\u6709\u5F39\u7A97 */\n hideAllModals: () => void\n}\n\n// ============================================================================\n// \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08CMS error group\uFF09\n// ============================================================================\n\n/**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08ErrorConfig\uFF09\n *\n * \u5BF9\u9F50 CMS `error` group \u5B57\u6BB5\u7ED3\u6784\u3002\u65B0\u4EE3\u7801\u4F7F\u7528\u6B64\u7C7B\u578B\uFF1B\n * `errorModalConfig`\uFF08`ErrorModalConfig`\uFF09\u5DF2\u5E9F\u5F03\uFF0C\u4FDD\u7559\u4EC5\u4F9B\u8FC7\u6E21\u671F\u4F7F\u7528\u3002\n *\n * CMS \u5B57\u6BB5\u6620\u5C04:\n * - `title` \u2192 \u9519\u8BEF\u6807\u9898\n * - `defaultMessage` \u2192 \u9ED8\u8BA4\u9519\u8BEF\u6D88\u606F\uFF08\u5BF9\u5E94\u6E32\u67D3\u5C42\u7684 `message`\uFF09\n * - `confirmButton` \u2192 \u786E\u8BA4\u6309\u94AE\u6587\u6848\uFF08\u5BF9\u5E94\u6E32\u67D3\u5C42\u7684 `confirmText`\uFF09\n * - `exchangeFailedTitle` \u2192 \u5151\u6362\u5931\u8D25\u6807\u9898\n * - `exchangeFailedMessage` \u2192 \u5151\u6362\u5931\u8D25\u6D88\u606F\n */\nexport interface ErrorConfig {\n title?: string\n defaultMessage?: string\n confirmButton?: string\n exchangeFailedTitle?: string\n exchangeFailedMessage?: string\n}\n\n// ============================================================================\n// \u672A\u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08CMS tryAgain group\uFF09\n// ============================================================================\n\n/**\n * \u672A\u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08TryAgainConfig\uFF09\n *\n * \u5BF9\u9F50 CMS `tryAgain` group \u5B57\u6BB5\u7ED3\u6784\u3002\n *\n * CMS \u5B57\u6BB5\u6620\u5C04:\n * - `title` \u2192 \u5F39\u7A97\u6807\u9898\n * - `message` \u2192 \u5185\u5BB9\u6587\u6848\n * - `confirmText` \u2192 \u786E\u8BA4\u6309\u94AE\u6587\u6848\n */\nexport interface TryAgainConfig {\n title?: string\n message?: string\n confirmText?: string\n}\n\n// ============================================================================\n// MediaDrawArea \u5B50\u7EC4\u4EF6 Props\n// ============================================================================\n\n/**\n * MediaDrawArea \u5B50\u7EC4\u4EF6 Props\n *\n * \u5A92\u4F53\u62BD\u5956\u533A\u57DF\uFF0C\u5C55\u793A\u56FE\u7247/\u89C6\u9891\u5E76\u53E0\u52A0 CTA \u6309\u94AE\u3002\n * videoAutoPlay / videoMuted / videoLoop \u4E3A\u7EC4\u4EF6\u7EA7\u8FD0\u884C\u65F6\u63A7\u5236\uFF0CCMS \u4E0D\u914D\u7F6E\u3002\n */\nexport interface MediaDrawAreaProps {\n /** \u4E3B\u9898\u6A21\u5F0F */\n theme?: Theme\n\n /** \u5A92\u4F53\u914D\u7F6E\uFF08\u5FC5\u9700\uFF09 */\n media: MediaConfig\n\n /** CTA \u6309\u9492\u914D\u7F6E */\n ctaButton?: CtaButtonConfig\n\n /**\n * \u89C6\u9891\u81EA\u52A8\u64AD\u653E\uFF08\u4EC5 mimeType='video/mp4' \u65F6\u6709\u6548\uFF09\n * @default true\n */\n videoAutoPlay?: boolean\n\n /**\n * \u89C6\u9891\u9759\u97F3\uFF08\u4EC5 mimeType='video/mp4' \u65F6\u6709\u6548\uFF09\n * @default true\n */\n videoMuted?: boolean\n\n /**\n * \u89C6\u9891\u5FAA\u73AF\uFF08\u4EC5 mimeType='video/mp4' \u65F6\u6709\u6548\uFF09\n * @default true\n */\n videoLoop?: boolean\n\n /** \u662F\u5426\u6B63\u5728\u62BD\u5956\u4E2D */\n isDrawing?: boolean\n\n /** \u662F\u5426\u7981\u7528\uFF08\u672A\u767B\u5F55\u6216\u65E0\u6B21\u6570\uFF09 */\n isDisabled?: boolean\n\n /** \u70B9\u51FB\u62BD\u5956\u56DE\u8C03 */\n onClick: () => void\n\n /** \u81EA\u5B9A\u4E49\u7C7B\u540D */\n className?: string\n\n /** \u70B9\u51FB\u8FFD\u8E2A\uFF1Adata-headless-type-name \u5C5E\u6027\u503C\uFF0C\u683C\u5F0F `{clickType}#{componentName}` */\n ctaTrackTypeName?: string\n\n /** \u70B9\u51FB\u8FFD\u8E2A\uFF1Adata-headless-title-desc-button \u5C5E\u6027\u503C\uFF0C\u683C\u5F0F `{title}#{desc}#{buttonName}` */\n ctaTrackTitleDescButton?: string\n}\n\n// ============================================================================\n// \u4E3B\u7EC4\u4EF6 Props\n// ============================================================================\n\n/**\n * ProductLottery \u7EC4\u4EF6 Props\n *\n * \u57FA\u4E8E\u5A92\u4F53\u5C55\u793A\u7684\u4EA7\u54C1\u62BD\u5956\u7EC4\u4EF6\u3002\u5DE6\u4FA7\u4E3A\u53EF\u70B9\u51FB\u7684\u5A92\u4F53\u533A\u57DF\uFF08\u56FE\u7247/\u89C6\u9891\uFF09\uFF0C\n * \u53F3\u4FA7\u4E3A\u83B7\u53D6\u673A\u4F1A\u533A\u57DF\uFF0C\u5E95\u90E8\u4E3A\u5956\u54C1\u6C60\u3002\n *\n * ## \u5B57\u6BB5\u547D\u540D\u7B56\u7565\uFF08CMS-primary\uFF09\n *\n * \u672C\u63A5\u53E3\u4EE5 CMS block schema \u5B57\u6BB5\u540D\u4E3A\u4E3B\u540D\u79F0\u3002\u65E7\u7248\u547D\u540D\u4EE5 `@deprecated` \u6807\u8BB0\uFF0C\n * \u4FDD\u7559\u4EC5\u4F9B\u8FC7\u6E21\u671F\u4F7F\u7528\u3002\u5F53 CMS \u5B57\u6BB5\u4E0E\u65E7\u7248\u5B57\u6BB5\u540C\u65F6\u5B58\u5728\u65F6\uFF0CCMS \u5B57\u6BB5\u4F18\u5148\u3002\n *\n * @example\n * ```tsx\n * <ProductLottery\n * prizes={prizes}\n * media={{ type: 'image', image: { url: '/banner.jpg', alt: 'Lottery', thumbnailURL: '' } }}\n * ctaButton={{ text: 'Draw Now' }}\n * loginPrompt=\"Please sign in to join the draw\"\n * onDrawStart={async () => {\n * const result = await fetch('/api/lottery')\n * const data = await result.json()\n * return data.prizeId\n * }}\n * onDrawEnd={(prize) => console.log('Won:', prize.name)}\n * />\n * ```\n */\nexport interface ProductLotteryProps {\n // ========== \u5FC5\u9700 Props ==========\n\n /**\n * 8 \u4E2A\u5956\u54C1\u6570\u7EC4\uFF08\u5FC5\u9700\uFF09\n * @minLength 8\n * @maxLength 8\n */\n prizes: Prize[]\n\n /**\n * \u5A92\u4F53\u914D\u7F6E\uFF08\u5FC5\u9700\uFF09\n * \u914D\u7F6E\u5DE6\u4FA7\u62BD\u5956\u533A\u57DF\u5C55\u793A\u7684\u56FE\u7247\u6216\u89C6\u9891\uFF0C\u65E0\u9700 type/src \u5305\u88C5\u5C42\n */\n media: MediaConfig\n\n /**\n * \u89C6\u9891\u81EA\u52A8\u64AD\u653E\uFF08\u5F53 media.mimeType === 'video/mp4' \u65F6\u751F\u6548\uFF09\n * @default true\n * @optional\n */\n videoAutoPlay?: boolean\n\n /**\n * \u89C6\u9891\u9759\u97F3\uFF08\u5F53 media.mimeType === 'video/mp4' \u65F6\u751F\u6548\uFF09\n * @default true\n * @optional\n */\n videoMuted?: boolean\n\n /**\n * \u89C6\u9891\u5FAA\u73AF\uFF08\u5F53 media.mimeType === 'video/mp4' \u65F6\u751F\u6548\uFF09\n * @default true\n * @optional\n */\n videoLoop?: boolean\n\n // ========== \u4E3B\u9898\u548C\u6837\u5F0F ==========\n\n /** \u4E3B\u9898\u6A21\u5F0F */\n theme?: Theme\n\n /** CTA \u6309\u94AE\u914D\u7F6E */\n ctaButton?: CtaButtonConfig\n\n // ========== CMS \u9876\u5C42\u5B57\u6BB5 ==========\n\n /**\n * \u62BD\u5956\u6D3B\u52A8\u7C7B\u578B\uFF08CMS: `dealsType`\uFF09\n * \u7528\u4E8E\u6807\u8BC6\u62BD\u5956\u6D3B\u52A8\u7684\u552F\u4E00\u7C7B\u578B\uFF0C\u5982\uFF1A`ipc-2614`\n * @optional\n */\n dealsType?: string\n\n // ========== \u83B7\u53D6\u673A\u4F1A\u533A\u57DF Props ==========\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u6570\u7EC4\n * @optional\n */\n chanceMethods?: ChanceMethod[]\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u673A\u5236\u7C7B\u578B\n * @default \"methods\"\n * @optional\n */\n mechanismType?: ChanceMechanismType\n\n // \u2500\u2500 CMS flat input fields\uFF08mechanismType='input' \u65F6\u4F7F\u7528\uFF09\u2500\u2500\n\n /**\n * \u8F93\u5165\u6846\u5360\u4F4D\u6587\u672C\uFF08CMS: `inputPlaceholder`\uFF09\n * @default \"Enter your order number\"\n * @optional\n */\n inputPlaceholder?: string\n\n /**\n * \u63D0\u4EA4\u6309\u94AE\u6587\u6848\uFF08CMS: `inputSubmitText`\uFF09\n * @default \"Spin and Win\"\n * @optional\n */\n inputSubmitText?: string\n\n /**\n * \u8F93\u5165\u6846\u7C7B\u578B\uFF08CMS: `inputType`\uFF09\n * @default \"text\"\n * @optional\n */\n inputType?: 'text' | 'email' | 'number'\n\n /**\n * \u8F93\u5165\u683C\u5F0F\u9519\u8BEF\u63D0\u793A\u6587\u6848\uFF08CMS: `inputValidationErrorText`\uFF09\n * @optional\n */\n inputValidationErrorText?: string\n\n /**\n * \u8F93\u5165\u6846\u63D0\u4EA4\u4E2D loading \u6309\u94AE\u6587\u6848\uFF08CMS: `inputLoadingText`\uFF09\n * @default \"Loading...\"\n * @optional\n */\n inputLoadingText?: string\n\n /**\n * \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u5F53 mechanismType \u4E3A 'input' \u65F6\u4F7F\u7528\uFF09\n * @deprecated Use flat input fields (`inputPlaceholder`, `inputSubmitText`, `inputType`, `inputValidationErrorText`, `inputLoadingText`) instead (CMS field names)\n * @optional\n */\n inputConfig?: ChanceInputConfig\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u6807\u9898\n * @default \"Want more chances to win?\"\n * @optional\n */\n chanceTitle?: string\n\n /** \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u526F\u6807\u9898 */\n chanceSubtitle?: string\n\n /** \u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u5E95\u90E8\u63D0\u793A */\n chanceFooterNote?: string\n\n /** \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u6587\u6848\u914D\u7F6E */\n chanceMethodsText?: {\n chanceBadgeText?: string\n completedText?: string\n usedText?: string\n loadingText?: string\n }\n\n // ========== \u4E2D\u5956\u5F39\u7A97 Props ==========\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08CMS: `winningInfos` group \u2014 \u4E3B\u540D\u79F0\uFF09\n *\n * CMS \u4E2D `winningInfos` \u662F\u4E2D\u5956\u5F39\u7A97\u914D\u7F6E group\uFF0C\u5B57\u6BB5\uFF1A\n * `title`\u3001`confirmButton`\uFF08\u5BF9\u5E94\u6E32\u67D3\u5C42 confirmText\uFF09\u3001`confirmUrl`\u3001\n * `learnMoreUrl`\u3001`learnMoreText`\u3002\n *\n * @note CMS \u5B57\u6BB5 `confirmButton` \u5BF9\u5E94\u7EC4\u4EF6\u6E32\u67D3\u5C42\u7684 `confirmText`\u3002\n */\n winningInfos?: WinnerModalConfig\n\n /**\n * \u5E95\u90E8\u6EDA\u52A8\u6761\u4E2D\u5956\u4EBA\u540D\u5355\u6570\u636E\n *\n * \u539F `winningInfos: WinningInfo[]` \u91CD\u547D\u540D\u4E3A `winnerTickerData` \u4EE5\u907F\u514D\n * \u4E0E CMS `winningInfos` group \u547D\u540D\u51B2\u7A81\u3002\n *\n * @default []\n */\n winnerTickerData?: WinningInfo[]\n\n /**\n * \u4E2D\u5956\u6EDA\u52A8 Ticker \u6587\u6848\u6A21\u677F\uFF0C\u652F\u6301 {{name}} \u548C {{prize}} \u53D8\u91CF\n * @default \"{{name}} just won {{prize}}!\"\n * @optional\n */\n winnerNameTemplate?: string\n\n /** \u5956\u54C1\u6C60\u5C55\u793A\u533A\u57DF\u6807\u9898 */\n prizesTitle?: string\n\n // ========== \u56DE\u8C03\u51FD\u6570 Props ==========\n\n /**\n * \u62BD\u5956\u5F00\u59CB\u65F6\u7684\u56DE\u8C03\uFF0C\u8FD4\u56DE Promise \u4EE5\u652F\u6301\u5F02\u6B65\u63A5\u53E3\u8C03\u7528\n * @returns Promise<string> - \u4E2D\u5956\u5956\u54C1\u7684 prizeKey\n */\n onDrawStart?: () => Promise<string>\n\n /**\n * \u62BD\u5956\u7ED3\u675F\u65F6\u7684\u56DE\u8C03\uFF0C\u4F20\u9012\u4E2D\u5956\u5956\u54C1\n * @param prize \u4E2D\u5956\u5956\u54C1\u5BF9\u8C61\n */\n onDrawEnd?: (prize: Prize) => void\n\n /**\n * \u62BD\u5956\u9519\u8BEF\u65F6\u7684\u56DE\u8C03\n * @param error \u9519\u8BEF\u4FE1\u606F\n */\n onDrawError?: (error: Error) => void\n\n // ========== \u5F39\u7A97\u914D\u7F6E Props ==========\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u8BE6\u7EC6\u6E32\u67D3\u914D\u7F6E\uFF08\u542B prizeTitle / prizeImage / couponCode \u7B49\uFF09\n *\n * @note `winningInfos` is the CMS-primary equivalent for basic config, and `winnerModalConfig` is for extended UI config that overlays on top.\n * \u4E0E `winningInfos` \u5171\u540C\u914D\u7F6E\u4E2D\u5956\u5F39\u7A97\u3002\u5F53\u4E24\u8005\u540C\u65F6\u5B58\u5728\u65F6\uFF0C\u6B64\u5B57\u6BB5\u4E2D\u7684\n * \u540C\u540D\u5C5E\u6027\u4F18\u5148\u7EA7\u66F4\u9AD8\uFF08\u9010\u5B57\u6BB5\u5408\u5E76\uFF0C\u6B64\u5B57\u6BB5\u8986\u76D6 `winningInfos`\uFF09\u3002\n */\n winnerModalConfig?: WinnerModalConfig\n\n /** \u89C4\u5219\u5F39\u7A97\u914D\u7F6E */\n rulesModalConfig?: RulesModalConfig\n\n /** \u9876\u680F\u53F3\u4FA7\u8DF3\u8F6C\u6309\u94AE\u914D\u7F6E\uFF1B\u672A\u914D\u7F6E text \u6216 url \u65F6\u4E0D\u5C55\u793A */\n actionButtonConfig?: ActionButtonConfig\n\n /** \u6211\u7684\u5956\u52B1\u5F39\u7A97\u914D\u7F6E */\n myRewardsModalConfig?: MyRewardsModalConfig\n\n /**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08CMS: `error` group \u2014 \u4E3B\u540D\u79F0\uFF09\n *\n * \u5B57\u6BB5\uFF1A`title`\u3001`defaultMessage`\u3001`confirmButton`\u3001\n * `exchangeFailedTitle`\u3001`exchangeFailedMessage`\u3002\n */\n error?: ErrorConfig\n\n /**\n * \u672A\u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08CMS: `tryAgain` group\uFF09\n *\n * \u5B57\u6BB5\uFF1A`title`\u3001`message`\u3001`confirmText`\u3002\n */\n tryAgain?: TryAgainConfig\n\n /** \u5206\u4EAB\u5F39\u7A97\u914D\u7F6E */\n shareModalConfig?: ShareModalConfig\n\n /**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08\u65E7\u7248\uFF09\n * @deprecated Use `error` instead (CMS field name)\n */\n errorModalConfig?: ErrorModalConfig\n\n // ========== CMS \u5E73\u94FA\u6587\u6848\u5B57\u6BB5\uFF08\u4E3B\u540D\u79F0\uFF09==========\n\n /**\n * \u672A\u767B\u5F55\u65F6\u7684\u63D0\u793A\u6587\u6848\uFF08CMS: `loginPrompt`\uFF09\n * @default \"Please log in to participate in the lottery\"\n */\n loginPrompt?: string\n\n /**\n * \u6B21\u6570\u4E0D\u8DB3\u65F6\u7684\u63D0\u793A\u6587\u6848\uFF08CMS: `noChances`\uFF09\n * @default \"You have no chances left. Get more chances below!\"\n */\n noChances?: string\n\n /**\n * \u673A\u4F1A\u8FDB\u5EA6\u524D\u7F00\u6587\u6848\uFF08CMS: `opportunitiesPrefix`\uFF09\n * @default \"Number of draws remaining today: \"\n */\n opportunitiesPrefix?: string\n\n // ========== \u7528\u6237\u76F8\u5173 Props ==========\n\n /** \u7528\u6237\u6570\u636E */\n userData?: UserData\n\n /**\n * \u672A\u767B\u5F55\u65F6\u7684\u63D0\u793A\u6587\u6848\n * @deprecated Use `loginPrompt` instead (CMS field name)\n * @default \"Please log in to participate\"\n */\n loginPromptText?: string\n\n /**\n * \u767B\u5F55\u6309\u94AE\u6587\u6848\n * @default \"Log In\"\n */\n loginButtonText?: string\n\n /**\n * \u6B21\u6570\u4E0D\u8DB3\u65F6\u7684\u63D0\u793A\u6587\u6848\n * @deprecated Use `noChances` instead (CMS field name)\n * @default \"You have no chances left\"\n */\n noChancesText?: string\n\n /**\n * \u672A\u767B\u5F55\u65F6\u70B9\u51FB\u62BD\u5956\u7684\u56DE\u8C03\n */\n onLoginRequired?: () => void\n\n // ========== \u5176\u4ED6\u914D\u7F6E ==========\n\n /** \u590D\u5236\u4F18\u60E0\u7801\u56DE\u8C03 */\n onCopyCode?: (code: string) => void\n\n /**\n * \u673A\u4F1A\u8FDB\u5EA6\u6587\u6848\u6570\u7EC4\uFF08\u65E7\u7248\uFF0C\u9996\u5143\u7D20\u4E3A\u524D\u7F00\uFF0C\u6B21\u5143\u7D20\u4E3A\u540E\u7F00\uFF09\n * @deprecated Use `opportunitiesPrefix` instead (CMS field name)\n * @default [\"Number of draws remaining today:\"]\n */\n opportunitiesText?: string[]\n\n /** \u81EA\u5B9A\u4E49 CSS \u7C7B\u540D */\n className?: string\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u914D\u7F6E\n// ============================================================================\n\n/** \u9ED8\u8BA4 CTA \u6309\u94AE\u914D\u7F6E */\nexport const DEFAULT_CTA_BUTTON: CtaButtonConfig = {\n text: '',\n style: 'primary',\n}\n\n/** \u9ED8\u8BA4\u83B7\u53D6\u673A\u4F1A\u533A\u57DF\u6807\u9898 */\nexport const DEFAULT_CHANCE_TITLE = 'Want more chances to win?'\n"],
5
+ "mappings": "AAkqBO,MAAMA,EAAsC,CACjD,KAAM,GACN,MAAO,SACT,EAGaC,EAAuB",
6
6
  "names": ["DEFAULT_CTA_BUTTON", "DEFAULT_CHANCE_TITLE"]
7
7
  }
@@ -1,5 +1,5 @@
1
1
  import type { ProductNavProps } from './types.js';
2
- declare const _default: import("react").ForwardRefExoticComponent<Omit<ProductNavProps & import("react").RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & import("react").RefAttributes<unknown>> & {
2
+ declare const _default: import("react").ForwardRefExoticComponent<Omit<ProductNavProps & import("react").RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../index.js").ContainerProps & import("react").RefAttributes<unknown>> & {
3
3
  readonly $$typeof: symbol;
4
4
  };
5
5
  export default _default;
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as o,jsxs as i}from"react/jsx-runtime";import{useState as Y,useEffect as w,useCallback as F,forwardRef as G,useImperativeHandle as I,useRef as f}from"react";import{cn as T}from"../../helpers/utils.js";import{withLayout as V}from"../../shared/Styles.js";import{Button as L,Text as N}from"../../components/index.js";import{useExposure as _}from"../../hooks/useExposure.js";import*as E from"@radix-ui/react-popover";const $="navigation",q="product_nav",O=k=>o("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",...k,children:o("path",{d:"M5 7.5L10 12.5L15 7.5",stroke:"currentColor",strokeWidth:"1.66667",strokeLinecap:"round",strokeLinejoin:"round"})}),M=G(({className:k="",data:D,id:H,onAnchorClick:P,scrollOffsetExtra:b=0},A)=>{const{tabLinks:v=[],anchorList:r=[],textLink:a,buyBtn:p,theme:B="light"}=D||{},[z,x]=Y(""),d=f(null),g=f(!1),u=f(""),m=f(null),y=f(new Map);I(A,()=>d.current),_(d,{componentType:$,componentName:q});const h=F(()=>{if(r.length===0)return;const e=window.scrollY;window.scrollTo({top:0,behavior:"instant"}),requestAnimationFrame(()=>{const t=new Map;r.forEach(s=>{const n=document.getElementById(s.id);if(n){const l=n.getBoundingClientRect();t.set(s.id,l.top+window.scrollY)}}),y.current=t,window.scrollTo({top:e,behavior:"instant"})})},[r]);w(()=>{if(r.length===0)return;const e=setTimeout(h,100);return()=>clearTimeout(e)},[r,h]),w(()=>{if(r.length===0)return;let e=null;const t=new ResizeObserver(()=>{e&&clearTimeout(e),e=setTimeout(h,150)});return t.observe(document.body),()=>{t.disconnect(),e&&clearTimeout(e)}},[r,h]),w(()=>{if(r.length===0)return;const e=()=>{if(g.current){m.current&&clearTimeout(m.current),m.current=setTimeout(()=>{g.current=!1,u.current&&(x(u.current),u.current="")},100);return}const s=d.current?.offsetHeight||0,n=window.scrollY+s+b+10;let l="";const S=y.current;for(let c=r.length-1;c>=0;c--){const R=r[c],C=S.get(R.id);if(C!==void 0&&n>=C){l=R.id;break}}if(!l&&r.length>0){const c=S.get(r[0].id);c!==void 0&&n<c&&(l="")}x(l)},t=setTimeout(()=>{e()},200);return window.addEventListener("scroll",e,{passive:!0}),()=>{clearTimeout(t),window.removeEventListener("scroll",e),m.current&&clearTimeout(m.current)}},[r,b]),w(()=>{const e=document.querySelectorAll(".header"),t=[];return e.forEach(s=>{const n=s;t.push({element:n,originalPosition:n.style.position||getComputedStyle(n).position}),n.style.position="relative"}),()=>{t.forEach(({element:s,originalPosition:n})=>{s.style.position=n==="static"?"":n})}},[]);const j=(e,t)=>{e.preventDefault();const s=y.current.get(t);if(s===void 0){console.warn(`Cached position for "${t}" not found`);return}x(t),u.current=t,g.current=!0;const n=d.current?.offsetHeight||0,l=s-n-b;window.scrollTo({top:l,behavior:"smooth"}),window.history.pushState(null,"",`#${t}`)};return i("div",{id:H,ref:d,className:T("product-nav text-info-primary bg-container-primary tablet:px-8 laptop:px-16 desktop:px-16 lg-desktop:px-[calc(50%-832px)] !sticky top-0 !z-[51] flex w-full justify-between overflow-hidden px-4 py-0",{"aiui-dark":B==="dark"},k),children:[i("div",{className:"product-nav-main desktop:flex-row desktop:gap-[48px] flex w-full flex-col justify-start",children:[i("div",{className:"product-nav-header laptop:w-full desktop:w-fit desktop:gap-[24px] desktop:py-0 flex w-full flex-row items-center justify-between gap-[16px] pt-[14px]",children:[i("div",{className:"product-nav-tabs flex flex-row items-center gap-[8px]",children:[v.map((e,t)=>i("div",{className:"product-nav-tab-item flex items-center gap-[8px]",children:[o("a",{href:e.link,className:T("product-nav-tab-link hover:text-brand-color text-nowrap text-[14px] font-bold tracking-[-0.04em]",{"text-[#6D6D6F]":t!==0,"hidden desktop:block":t===1}),children:o("span",{children:e.label})}),t!==v.length-1&&o("div",{className:"product-nav-tab-divider desktop:inline-block hidden h-[14px] w-px bg-[#E4E5E6]"})]},e.link||t)),v.length>1&&i(E.Root,{children:[o(E.Trigger,{asChild:!0,children:o("button",{className:"product-nav-dropdown-trigger desktop:hidden -ml-1 inline-block","aria-label":"More products",children:o(O,{className:"text-[#1D1D1F]"})})}),o(E.Content,{className:"product-nav-dropdown-content rounded-[6px] border border-[#E4E5E6] bg-white p-[6px] px-[8px] py-[4px]",style:{boxShadow:"0px 4px 8px 0px rgba(0,0,0,0.12)"},side:"bottom",align:"end",alignOffset:10,sideOffset:10,children:v.slice(1).map(e=>o("a",{href:e.link,className:"product-nav-dropdown-link hover:text-brand-color text-nowrap",children:o("span",{children:e.label})},e.link))})]})]}),i("div",{className:"product-nav-mobile-actions desktop:hidden desktop:gap-[24px] flex items-center gap-[16px]",children:[a?.link&&o("a",{href:a.link,target:a.target||"_self",className:"product-nav-text-link hover:text-brand-color cursor-pointer",children:o(N,{size:2,className:"text-nowrap",children:a.text})}),p?.link&&o(L,{as:"a",href:p.link,size:"sm",className:"product-nav-buy-button text-nowrap",children:p.text})]})]}),o("div",{className:"product-nav-anchors laptop:w-fit desktop:gap-[24px] desktop:py-[8px] flex w-full items-center gap-[16px] overflow-x-scroll py-[12px] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:r.map((e,t)=>i("a",{href:`#${e.id}`,className:"product-nav-anchor-link",onClick:s=>{P?(s.preventDefault(),x(e.id),u.current=e.id,g.current=!0,P(e,t)):j(s,e.id)},children:[o(N,{size:2,className:"product-nav-anchor-text text-nowrap",children:e.label}),o("div",{className:T("product-nav-anchor-indicator laptop:top-[12px] desktop:top-[10px] relative top-[12px] h-[4px] w-full bg-transparent",{"!bg-brand-0":z===e.id})})]},e.id))})]}),i("div",{className:"product-nav-desktop-actions desktop:flex desktop:gap-[24px] desktop:py-[8px] hidden items-center gap-[16px]",children:[a?.link&&o("a",{href:a.link,target:a.target||"_self",className:"product-nav-text-link hover:text-brand-color cursor-pointer text-black",children:o(N,{size:2,className:"text-nowrap",children:a.text})}),p?.link&&o(L,{as:"a",href:p.link,size:"sm",className:"product-nav-buy-button text-nowrap",children:p.text})]})]})});M.displayName="ProductNav";var X=V(M);export{X as default};
1
+ "use client";import{jsx as o,jsxs as s}from"react/jsx-runtime";import{useState as q,useEffect as E,useCallback as O,forwardRef as U,useImperativeHandle as W,useRef as k}from"react";import{cn as S,getLocalizedPath as v}from"../../helpers/utils.js";import{withLayout as J}from"../../shared/Styles.js";import{Button as A,Text as _}from"../../components/index.js";import{useExposure as K}from"../../hooks/useExposure.js";import{trackUrlRef as x}from"../../shared/trackUrlRef.js";import{useAiuiContext as Q}from"../AiuiProvider/index.js";import*as C from"@radix-ui/react-popover";const c="navigation",p="product_nav",X=$=>o("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",...$,children:o("path",{d:"M5 7.5L10 12.5L15 7.5",stroke:"currentColor",strokeWidth:"1.66667",strokeLinecap:"round",strokeLinejoin:"round"})}),z=U(({className:$="",data:B,id:j,onAnchorClick:H,scrollOffsetExtra:P=0},Y)=>{const{tabLinks:b=[],anchorList:r=[],textLink:a,buyBtn:d,theme:F="light"}=B||{},{locale:u="us",trackingData:G}=Q(),m=G?.contextHandle||"",[I,y]=q(""),g=k(null),T=k(!1),h=k(""),w=k(null),R=k(new Map);W(Y,()=>g.current),K(g,{componentType:c,componentName:p});const N=O(()=>{if(r.length===0)return;const e=window.scrollY;window.scrollTo({top:0,behavior:"instant"}),requestAnimationFrame(()=>{const t=new Map;r.forEach(i=>{const n=document.getElementById(i.id);if(n){const l=n.getBoundingClientRect();t.set(i.id,l.top+window.scrollY)}}),R.current=t,window.scrollTo({top:e,behavior:"instant"})})},[r]);E(()=>{if(r.length===0)return;const e=setTimeout(N,100);return()=>clearTimeout(e)},[r,N]),E(()=>{if(r.length===0)return;let e=null;const t=new ResizeObserver(()=>{e&&clearTimeout(e),e=setTimeout(N,150)});return t.observe(document.body),()=>{t.disconnect(),e&&clearTimeout(e)}},[r,N]),E(()=>{if(r.length===0)return;const e=()=>{if(T.current){w.current&&clearTimeout(w.current),w.current=setTimeout(()=>{T.current=!1,h.current&&(y(h.current),h.current="")},100);return}const i=g.current?.offsetHeight||0,n=window.scrollY+i+P+10;let l="";const L=R.current;for(let f=r.length-1;f>=0;f--){const D=r[f],M=L.get(D.id);if(M!==void 0&&n>=M){l=D.id;break}}if(!l&&r.length>0){const f=L.get(r[0].id);f!==void 0&&n<f&&(l="")}y(l)},t=setTimeout(()=>{e()},200);return window.addEventListener("scroll",e,{passive:!0}),()=>{clearTimeout(t),window.removeEventListener("scroll",e),w.current&&clearTimeout(w.current)}},[r,P]),E(()=>{const e=document.querySelectorAll(".header"),t=[];return e.forEach(i=>{const n=i;t.push({element:n,originalPosition:n.style.position||getComputedStyle(n).position}),n.style.position="relative"}),()=>{t.forEach(({element:i,originalPosition:n})=>{i.style.position=n==="static"?"":n})}},[]);const V=(e,t)=>{e.preventDefault();const i=R.current.get(t);if(i===void 0){console.warn(`Cached position for "${t}" not found`);return}y(t),h.current=t,T.current=!0;const n=g.current?.offsetHeight||0,l=i-n-P;window.scrollTo({top:l,behavior:"smooth"}),window.history.pushState(null,"",`#${t}`)};return s("div",{id:j,ref:g,className:S("product-nav text-info-primary bg-container-primary tablet:px-8 laptop:px-16 desktop:px-16 lg-desktop:px-[calc(50%-832px)] !sticky top-0 !z-[51] flex w-full justify-between overflow-hidden px-4 py-0",{"aiui-dark":F==="dark"},$),children:[s("div",{className:"product-nav-main desktop:flex-row desktop:gap-[48px] flex w-full flex-col justify-start",children:[s("div",{className:"product-nav-header laptop:w-full desktop:w-fit desktop:gap-[24px] desktop:py-0 flex w-full flex-row items-center justify-between gap-[16px] pt-[14px]",children:[s("div",{className:"product-nav-tabs flex flex-row items-center gap-[8px]",children:[b.map((e,t)=>s("div",{className:"product-nav-tab-item flex items-center gap-[8px]",children:[o("a",{href:x(v(e.link,u),`${m}_${c}_${p}`),className:S("product-nav-tab-link hover:text-brand-color text-nowrap text-[14px] font-bold tracking-[-0.04em]",{"text-[#6D6D6F]":t!==0,"hidden desktop:block":t===1}),children:o("span",{children:e.label})}),t!==b.length-1&&o("div",{className:"product-nav-tab-divider desktop:inline-block hidden h-[14px] w-px bg-[#E4E5E6]"})]},e.link||t)),b.length>1&&s(C.Root,{children:[o(C.Trigger,{asChild:!0,children:o("button",{className:"product-nav-dropdown-trigger desktop:hidden -ml-1 inline-block","aria-label":"More products",children:o(X,{className:"text-[#1D1D1F]"})})}),o(C.Content,{className:"product-nav-dropdown-content rounded-[6px] border border-[#E4E5E6] bg-white p-[6px] px-[8px] py-[4px]",style:{boxShadow:"0px 4px 8px 0px rgba(0,0,0,0.12)"},side:"bottom",align:"end",alignOffset:10,sideOffset:10,children:b.slice(1).map(e=>o("a",{href:x(v(e.link,u),`${m}_${c}_${p}`),className:"product-nav-dropdown-link hover:text-brand-color text-nowrap",children:o("span",{children:e.label})},e.link))})]})]}),s("div",{className:"product-nav-mobile-actions desktop:hidden desktop:gap-[24px] flex items-center gap-[16px]",children:[a?.link&&o("a",{href:x(v(a.link,u),`${m}_${c}_${p}`),target:a.target||"_self",className:"product-nav-text-link hover:text-brand-color cursor-pointer",children:o(_,{size:2,className:"text-nowrap",children:a.text})}),d?.link&&o(A,{as:"a",href:x(v(d.link,u),`${m}_${c}_${p}`),size:"sm",className:"product-nav-buy-button text-nowrap",children:d.text})]})]}),o("div",{className:"product-nav-anchors laptop:w-fit desktop:gap-[24px] desktop:py-[8px] flex w-full items-center gap-[16px] overflow-x-scroll py-[12px] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:r.map((e,t)=>s("a",{href:`#${e.id}`,className:"product-nav-anchor-link",onClick:i=>{H?(i.preventDefault(),y(e.id),h.current=e.id,T.current=!0,H(e,t)):V(i,e.id)},children:[o(_,{size:2,className:"product-nav-anchor-text text-nowrap",children:e.label}),o("div",{className:S("product-nav-anchor-indicator laptop:top-[12px] desktop:top-[10px] relative top-[12px] h-[4px] w-full bg-transparent",{"!bg-brand-0":I===e.id})})]},e.id))})]}),s("div",{className:"product-nav-desktop-actions desktop:flex desktop:gap-[24px] desktop:py-[8px] hidden items-center gap-[16px]",children:[a?.link&&o("a",{href:x(v(a.link,u),`${m}_${c}_${p}`),target:a.target||"_self",className:"product-nav-text-link hover:text-brand-color cursor-pointer text-black",children:o(_,{size:2,className:"text-nowrap",children:a.text})}),d?.link&&o(A,{as:"a",href:x(v(d.link,u),`${m}_${c}_${p}`),size:"sm",className:"product-nav-buy-button text-nowrap",children:d.text})]})]})});z.displayName="ProductNav";var se=J(z);export{se as default};
2
2
  //# sourceMappingURL=ProductNav.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/ProductNav/ProductNav.tsx"],
4
- "sourcesContent": ["'use client'\nimport { useState, useEffect, useCallback, forwardRef, useImperativeHandle, useRef } from 'react'\nimport { cn } from '../../helpers/utils.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { Button, Text } from '../../components/index.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport type { ProductNavProps } from './types.js'\nimport * as Popover from '@radix-ui/react-popover'\n\nconst componentType = 'navigation'\nconst componentName = 'product_nav'\n\nconst ChevronDownIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M5 7.5L10 12.5L15 7.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nconst ProductNav = forwardRef<HTMLDivElement, ProductNavProps>(\n ({ className = '', data, id, onAnchorClick, scrollOffsetExtra = 0 }, ref) => {\n const { tabLinks = [], anchorList = [], textLink, buyBtn, theme = 'light' } = data || {}\n const [activeAnchorId, setActiveAnchorId] = useState('')\n const innerRef = useRef<HTMLDivElement>(null)\n const isScrollingRef = useRef(false) // \u6807\u8BB0\u662F\u5426\u6B63\u5728\u7A0B\u5E8F\u5316\u6EDA\u52A8\u4E2D\n const targetAnchorIdRef = useRef<string>('') // \u8BB0\u5F55\u70B9\u51FB\u76EE\u6807\u951A\u70B9\n const scrollEndTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null) // \u6EDA\u52A8\u7ED3\u675F\u68C0\u6D4B\u5B9A\u65F6\u5668\n const anchorPositionsRef = useRef<Map<string, number>>(new Map()) // \u7F13\u5B58\u951A\u70B9\u539F\u59CB\u4F4D\u7F6E\n\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement)\n\n useExposure(innerRef, {\n componentType,\n componentName,\n })\n\n // \u7F13\u5B58\u6240\u6709\u951A\u70B9\u7684\u7EDD\u5BF9\u4F4D\u7F6E\uFF08\u6EDA\u52A8\u5230\u9876\u90E8\u540E\u8BA1\u7B97\uFF0C\u907F\u514D sticky \u5F71\u54CD\uFF09\n const updateAnchorPositions = useCallback(() => {\n if (anchorList.length === 0) return\n\n const originalScrollY = window.scrollY\n window.scrollTo({ top: 0, behavior: 'instant' as ScrollBehavior })\n\n requestAnimationFrame(() => {\n const positions = new Map<string, number>()\n anchorList.forEach(anchor => {\n const element = document.getElementById(anchor.id)\n if (element) {\n const rect = element.getBoundingClientRect()\n positions.set(anchor.id, rect.top + window.scrollY)\n }\n })\n anchorPositionsRef.current = positions\n\n window.scrollTo({ top: originalScrollY, behavior: 'instant' as ScrollBehavior })\n })\n }, [anchorList])\n\n // \u521D\u59CB\u5316\u65F6\u7F13\u5B58\u6240\u6709\u951A\u70B9\u7684\u539F\u59CB\u4F4D\u7F6E\n useEffect(() => {\n if (anchorList.length === 0) return\n\n // \u9875\u9762\u52A0\u8F7D\u540E\u5EF6\u8FDF\u8BA1\u7B97\uFF0C\u786E\u4FDD\u5E03\u5C40\u5B8C\u6210\n const timer = setTimeout(updateAnchorPositions, 100)\n\n return () => clearTimeout(timer)\n }, [anchorList, updateAnchorPositions])\n\n // \u76D1\u542C body \u9AD8\u5EA6\u53D8\u5316\uFF0C\u9AD8\u5EA6\u6539\u53D8\u65F6\u91CD\u65B0\u8BA1\u7B97\u951A\u70B9\u4F4D\u7F6E\n useEffect(() => {\n if (anchorList.length === 0) return\n\n let resizeTimer: ReturnType<typeof setTimeout> | null = null\n\n const observer = new ResizeObserver(() => {\n // debounce\uFF0C\u907F\u514D\u9AD8\u9891\u89E6\u53D1\n if (resizeTimer) clearTimeout(resizeTimer)\n resizeTimer = setTimeout(updateAnchorPositions, 150)\n })\n\n observer.observe(document.body)\n\n return () => {\n observer.disconnect()\n if (resizeTimer) clearTimeout(resizeTimer)\n }\n }, [anchorList, updateAnchorPositions])\n\n // \u6EDA\u52A8\u76D1\u542C\uFF1A\u68C0\u6D4B\u5F53\u524D\u6EDA\u52A8\u4F4D\u7F6E\u5BF9\u5E94\u7684\u951A\u70B9\n useEffect(() => {\n if (anchorList.length === 0) return\n\n const handleScroll = () => {\n // \u5982\u679C\u6B63\u5728\u7A0B\u5E8F\u5316\u6EDA\u52A8\u4E2D\uFF0C\u4F7F\u7528 debounce \u68C0\u6D4B\u6EDA\u52A8\u7ED3\u675F\n if (isScrollingRef.current) {\n // \u6E05\u9664\u4E4B\u524D\u7684\u5B9A\u65F6\u5668\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current)\n }\n // \u8BBE\u7F6E\u65B0\u7684\u5B9A\u65F6\u5668\uFF0C100ms \u6CA1\u6709\u65B0\u6EDA\u52A8\u4E8B\u4EF6\u5219\u8BA4\u4E3A\u6EDA\u52A8\u7ED3\u675F\n scrollEndTimerRef.current = setTimeout(() => {\n isScrollingRef.current = false\n // \u6EDA\u52A8\u7ED3\u675F\u540E\uFF0C\u786E\u4FDD\u9AD8\u4EAE\u505C\u7559\u5728\u76EE\u6807\u951A\u70B9\n if (targetAnchorIdRef.current) {\n setActiveAnchorId(targetAnchorIdRef.current)\n targetAnchorIdRef.current = ''\n }\n }, 100)\n return\n }\n\n const navHeight = innerRef.current?.offsetHeight || 0\n const scrollPosition = window.scrollY + navHeight + scrollOffsetExtra + 10 // 10px \u7F13\u51B2\n\n let currentAnchorId = ''\n\n // \u4F7F\u7528\u7F13\u5B58\u7684\u951A\u70B9\u4F4D\u7F6E\n const positions = anchorPositionsRef.current\n\n // \u904D\u5386\u6240\u6709\u951A\u70B9\uFF0C\u627E\u5230\u5F53\u524D\u6EDA\u52A8\u4F4D\u7F6E\u5BF9\u5E94\u7684\u951A\u70B9\n for (let i = anchorList.length - 1; i >= 0; i--) {\n const anchor = anchorList[i]\n const elementTop = positions.get(anchor.id)\n if (elementTop !== undefined && scrollPosition >= elementTop) {\n currentAnchorId = anchor.id\n break\n }\n }\n\n // \u5982\u679C\u6CA1\u6709\u627E\u5230\u4E14\u7F13\u5B58\u4E2D\u6709\u7B2C\u4E00\u4E2A\u951A\u70B9\u7684\u4F4D\u7F6E\n if (!currentAnchorId && anchorList.length > 0) {\n const firstElementTop = positions.get(anchorList[0].id)\n if (firstElementTop !== undefined && scrollPosition < firstElementTop) {\n currentAnchorId = ''\n }\n }\n\n setActiveAnchorId(currentAnchorId)\n }\n\n // \u5EF6\u8FDF\u521D\u59CB\u5316\uFF0C\u7B49\u5F85\u4F4D\u7F6E\u7F13\u5B58\u5B8C\u6210\n const timer = setTimeout(() => {\n handleScroll()\n }, 200)\n\n window.addEventListener('scroll', handleScroll, { passive: true })\n return () => {\n clearTimeout(timer)\n window.removeEventListener('scroll', handleScroll)\n // \u6E05\u7406\u5B9A\u65F6\u5668\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current)\n }\n }\n }, [anchorList, scrollOffsetExtra])\n\n // \u8BBE\u7F6E\u9875\u9762\u4E2Dheader\u5143\u7D20\u7684position\u4E3Arelative\n useEffect(() => {\n const headerElements = document.querySelectorAll('.header')\n const originalStyles: { element: HTMLElement; originalPosition: string }[] = []\n\n headerElements.forEach(element => {\n const htmlElement = element as HTMLElement\n // \u4FDD\u5B58\u539F\u59CB\u6837\u5F0F\n originalStyles.push({\n element: htmlElement,\n originalPosition: htmlElement.style.position || getComputedStyle(htmlElement).position,\n })\n // \u8BBE\u7F6E\u4E3Arelative\n htmlElement.style.position = 'relative'\n })\n\n // \u6E05\u7406\u51FD\u6570\uFF1A\u6062\u590D\u539F\u59CB\u6837\u5F0F\n return () => {\n originalStyles.forEach(({ element, originalPosition }) => {\n element.style.position = originalPosition === 'static' ? '' : originalPosition\n })\n }\n }, [])\n\n // \u5904\u7406\u951A\u70B9\u70B9\u51FB\u6EDA\u52A8\n const handleAnchorClick = (e: React.MouseEvent, anchorId: string) => {\n e.preventDefault()\n\n // \u4F7F\u7528\u7F13\u5B58\u7684\u4F4D\u7F6E\n const elementAbsoluteTop = anchorPositionsRef.current.get(anchorId)\n if (elementAbsoluteTop === undefined) {\n console.warn(`Cached position for \"${anchorId}\" not found`)\n return\n }\n\n // \u7ACB\u5373\u66F4\u65B0\u9AD8\u4EAE\u72B6\u6001\uFF0C\u907F\u514D\u6EDA\u52A8\u8FC7\u7A0B\u4E2D\u95EA\u70C1\n setActiveAnchorId(anchorId)\n\n // \u8BB0\u5F55\u76EE\u6807\u951A\u70B9\uFF0C\u7528\u4E8E\u6EDA\u52A8\u7ED3\u675F\u540E\u786E\u4FDD\u9AD8\u4EAE\u6B63\u786E\n targetAnchorIdRef.current = anchorId\n\n // \u6807\u8BB0\u6B63\u5728\u7A0B\u5E8F\u5316\u6EDA\u52A8\uFF0C\u6682\u505C\u6EDA\u52A8\u76D1\u542C\n isScrollingRef.current = true\n\n // \u83B7\u53D6\u5BFC\u822A\u680F\u9AD8\u5EA6\n const navHeight = innerRef.current?.offsetHeight || 0\n\n // \u76EE\u6807\u6EDA\u52A8\u4F4D\u7F6E = \u7F13\u5B58\u7684\u5143\u7D20\u7EDD\u5BF9\u4F4D\u7F6E - \u5BFC\u822A\u680F\u9AD8\u5EA6 - \u989D\u5916\u504F\u79FB\n const targetPosition = elementAbsoluteTop - navHeight - scrollOffsetExtra\n\n // \u5E73\u6ED1\u6EDA\u52A8\u5230\u76EE\u6807\u4F4D\u7F6E\n window.scrollTo({\n top: targetPosition,\n behavior: 'smooth',\n })\n\n // \u66F4\u65B0 URL hash\uFF08\u4E0D\u89E6\u53D1\u9875\u9762\u8DF3\u8F6C\uFF09\n window.history.pushState(null, '', `#${anchorId}`)\n\n // \u6CE8\u610F\uFF1A\u6EDA\u52A8\u7ED3\u675F\u68C0\u6D4B\u7531 handleScroll \u4E2D\u7684 debounce \u903B\u8F91\u5904\u7406\n // \u4E0D\u518D\u4F7F\u7528\u56FA\u5B9A 800ms \u8D85\u65F6\uFF0C\u800C\u662F\u68C0\u6D4B\u5B9E\u9645\u6EDA\u52A8\u7ED3\u675F\n }\n\n return (\n <div\n id={id}\n ref={innerRef}\n className={cn(\n 'product-nav text-info-primary bg-container-primary tablet:px-8 laptop:px-16 desktop:px-16 lg-desktop:px-[calc(50%-832px)] !sticky top-0 !z-[51] flex w-full justify-between overflow-hidden px-4 py-0',\n {\n 'aiui-dark': theme === 'dark',\n },\n className\n )}\n >\n <div className=\"product-nav-main desktop:flex-row desktop:gap-[48px] flex w-full flex-col justify-start\">\n {/* Tab Links Section */}\n <div className=\"product-nav-header laptop:w-full desktop:w-fit desktop:gap-[24px] desktop:py-0 flex w-full flex-row items-center justify-between gap-[16px] pt-[14px]\">\n <div className=\"product-nav-tabs flex flex-row items-center gap-[8px]\">\n {tabLinks.map((tabLink, index) => {\n return (\n <div key={tabLink.link || index} className=\"product-nav-tab-item flex items-center gap-[8px]\">\n <a\n href={tabLink.link}\n className={cn(\n 'product-nav-tab-link hover:text-brand-color text-nowrap text-[14px] font-bold tracking-[-0.04em]',\n {\n 'text-[#6D6D6F]': index !== 0,\n 'hidden desktop:block': index === 1,\n }\n )}\n // onClick={() => onShowSpecs?.(false)}\n >\n <span>{tabLink.label}</span>\n </a>\n {index !== tabLinks.length - 1 && (\n <div className=\"product-nav-tab-divider desktop:inline-block hidden h-[14px] w-px bg-[#E4E5E6]\" />\n )}\n </div>\n )\n })}\n\n {/* Mobile Dropdown */}\n {tabLinks.length > 1 && (\n <Popover.Root>\n <Popover.Trigger asChild>\n <button\n className=\"product-nav-dropdown-trigger desktop:hidden -ml-1 inline-block\"\n aria-label=\"More products\"\n >\n <ChevronDownIcon className=\"text-[#1D1D1F]\" />\n </button>\n </Popover.Trigger>\n <Popover.Content\n className=\"product-nav-dropdown-content rounded-[6px] border border-[#E4E5E6] bg-white p-[6px] px-[8px] py-[4px]\"\n style={{\n boxShadow: '0px 4px 8px 0px rgba(0,0,0,0.12)',\n }}\n side=\"bottom\"\n align=\"end\"\n alignOffset={10}\n sideOffset={10}\n >\n {tabLinks.slice(1).map(tabLink => (\n <a\n key={tabLink.link}\n href={tabLink.link}\n className=\"product-nav-dropdown-link hover:text-brand-color text-nowrap\"\n >\n <span>{tabLink.label}</span>\n </a>\n ))}\n </Popover.Content>\n </Popover.Root>\n )}\n </div>\n\n {/* Mobile Actions */}\n <div className=\"product-nav-mobile-actions desktop:hidden desktop:gap-[24px] flex items-center gap-[16px]\">\n {/* {specs?.text && (\n <Text\n size={2}\n onClick={handleSpecsClick}\n className=\"product-nav-specs-button cursor-pointer hover:text-brand-color\"\n >\n {specs.text}\n </Text>\n )} */}\n {textLink?.link && (\n <a\n href={textLink.link}\n target={textLink.target || '_self'}\n className=\"product-nav-text-link hover:text-brand-color cursor-pointer\"\n >\n <Text size={2} className=\"text-nowrap\">\n {textLink.text}\n </Text>\n </a>\n )}\n {buyBtn?.link && (\n <Button as=\"a\" href={buyBtn.link} size=\"sm\" className=\"product-nav-buy-button text-nowrap\">\n {buyBtn.text}\n </Button>\n )}\n </div>\n </div>\n\n {/* Anchor Navigation */}\n <div className=\"product-nav-anchors laptop:w-fit desktop:gap-[24px] desktop:py-[8px] flex w-full items-center gap-[16px] overflow-x-scroll py-[12px] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">\n {anchorList.map((anchor, index) => (\n <a\n key={anchor.id}\n href={`#${anchor.id}`}\n className=\"product-nav-anchor-link\"\n onClick={e => {\n // \u5982\u679C\u63D0\u4F9B\u4E86\u81EA\u5B9A\u4E49\u70B9\u51FB\u4E8B\u4EF6,\u4F7F\u7528\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u5E76\u963B\u6B62\u9ED8\u8BA4\u884C\u4E3A\n if (onAnchorClick) {\n e.preventDefault()\n // \u6807\u8BB0\u7A0B\u5E8F\u5316\u6EDA\u52A8\uFF0C\u907F\u514D\u6EDA\u52A8\u8FC7\u7A0B\u4E2D\u9AD8\u4EAE\u95EA\u70C1\n setActiveAnchorId(anchor.id)\n targetAnchorIdRef.current = anchor.id\n isScrollingRef.current = true\n onAnchorClick(anchor, index)\n } else {\n // \u4F7F\u7528\u9ED8\u8BA4\u7684\u951A\u70B9\u6EDA\u52A8\u884C\u4E3A\uFF0C\u5E26\u504F\u79FB\u91CF\n handleAnchorClick(e, anchor.id)\n }\n }}\n >\n <Text size={2} className=\"product-nav-anchor-text text-nowrap\">\n {anchor.label}\n </Text>\n <div\n className={cn(\n 'product-nav-anchor-indicator laptop:top-[12px] desktop:top-[10px] relative top-[12px] h-[4px] w-full bg-transparent',\n {\n '!bg-brand-0': activeAnchorId === anchor.id,\n }\n )}\n />\n </a>\n ))}\n </div>\n </div>\n\n {/* Desktop Actions */}\n <div className=\"product-nav-desktop-actions desktop:flex desktop:gap-[24px] desktop:py-[8px] hidden items-center gap-[16px]\">\n {/* {specs?.text && (\n <Text\n size={2}\n onClick={handleSpecsClick}\n className=\"product-nav-specs-button cursor-pointer text-black hover:text-brand-color\"\n >\n {specs.text}\n </Text>\n )} */}\n {textLink?.link && (\n <a\n href={textLink.link}\n target={textLink.target || '_self'}\n className=\"product-nav-text-link hover:text-brand-color cursor-pointer text-black\"\n >\n <Text size={2} className=\"text-nowrap\">\n {textLink.text}\n </Text>\n </a>\n )}\n {buyBtn?.link && (\n <Button as=\"a\" href={buyBtn.link} size=\"sm\" className=\"product-nav-buy-button text-nowrap\">\n {buyBtn.text}\n </Button>\n )}\n </div>\n </div>\n )\n }\n)\n\nProductNav.displayName = 'ProductNav'\n\nexport default withLayout(ProductNav)\n"],
5
- "mappings": "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",
6
- "names": ["jsx", "jsxs", "useState", "useEffect", "useCallback", "forwardRef", "useImperativeHandle", "useRef", "cn", "withLayout", "Button", "Text", "useExposure", "Popover", "componentType", "componentName", "ChevronDownIcon", "props", "ProductNav", "className", "data", "id", "onAnchorClick", "scrollOffsetExtra", "ref", "tabLinks", "anchorList", "textLink", "buyBtn", "theme", "activeAnchorId", "setActiveAnchorId", "innerRef", "isScrollingRef", "targetAnchorIdRef", "scrollEndTimerRef", "anchorPositionsRef", "updateAnchorPositions", "originalScrollY", "positions", "anchor", "element", "rect", "timer", "resizeTimer", "observer", "handleScroll", "navHeight", "scrollPosition", "currentAnchorId", "i", "elementTop", "firstElementTop", "headerElements", "originalStyles", "htmlElement", "originalPosition", "handleAnchorClick", "anchorId", "elementAbsoluteTop", "targetPosition", "tabLink", "index", "e", "ProductNav_default"]
4
+ "sourcesContent": ["'use client'\nimport { useState, useEffect, useCallback, forwardRef, useImperativeHandle, useRef } from 'react'\nimport { cn, getLocalizedPath } from '../../helpers/utils.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { Button, Text } from '../../components/index.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { trackUrlRef } from '../../shared/trackUrlRef.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport type { ProductNavProps } from './types.js'\nimport * as Popover from '@radix-ui/react-popover'\n\nconst componentType = 'navigation'\nconst componentName = 'product_nav'\n\nconst ChevronDownIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M5 7.5L10 12.5L15 7.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nconst ProductNav = forwardRef<HTMLDivElement, ProductNavProps>(\n ({ className = '', data, id, onAnchorClick, scrollOffsetExtra = 0 }, ref) => {\n const { tabLinks = [], anchorList = [], textLink, buyBtn, theme = 'light' } = data || {}\n const { locale = 'us', trackingData } = useAiuiContext()\n const contextHandle = trackingData?.contextHandle || ''\n const [activeAnchorId, setActiveAnchorId] = useState('')\n const innerRef = useRef<HTMLDivElement>(null)\n const isScrollingRef = useRef(false) // \u6807\u8BB0\u662F\u5426\u6B63\u5728\u7A0B\u5E8F\u5316\u6EDA\u52A8\u4E2D\n const targetAnchorIdRef = useRef<string>('') // \u8BB0\u5F55\u70B9\u51FB\u76EE\u6807\u951A\u70B9\n const scrollEndTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null) // \u6EDA\u52A8\u7ED3\u675F\u68C0\u6D4B\u5B9A\u65F6\u5668\n const anchorPositionsRef = useRef<Map<string, number>>(new Map()) // \u7F13\u5B58\u951A\u70B9\u539F\u59CB\u4F4D\u7F6E\n\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement)\n\n useExposure(innerRef, {\n componentType,\n componentName,\n })\n\n // \u7F13\u5B58\u6240\u6709\u951A\u70B9\u7684\u7EDD\u5BF9\u4F4D\u7F6E\uFF08\u6EDA\u52A8\u5230\u9876\u90E8\u540E\u8BA1\u7B97\uFF0C\u907F\u514D sticky \u5F71\u54CD\uFF09\n const updateAnchorPositions = useCallback(() => {\n if (anchorList.length === 0) return\n\n const originalScrollY = window.scrollY\n window.scrollTo({ top: 0, behavior: 'instant' as ScrollBehavior })\n\n requestAnimationFrame(() => {\n const positions = new Map<string, number>()\n anchorList.forEach(anchor => {\n const element = document.getElementById(anchor.id)\n if (element) {\n const rect = element.getBoundingClientRect()\n positions.set(anchor.id, rect.top + window.scrollY)\n }\n })\n anchorPositionsRef.current = positions\n\n window.scrollTo({ top: originalScrollY, behavior: 'instant' as ScrollBehavior })\n })\n }, [anchorList])\n\n // \u521D\u59CB\u5316\u65F6\u7F13\u5B58\u6240\u6709\u951A\u70B9\u7684\u539F\u59CB\u4F4D\u7F6E\n useEffect(() => {\n if (anchorList.length === 0) return\n\n // \u9875\u9762\u52A0\u8F7D\u540E\u5EF6\u8FDF\u8BA1\u7B97\uFF0C\u786E\u4FDD\u5E03\u5C40\u5B8C\u6210\n const timer = setTimeout(updateAnchorPositions, 100)\n\n return () => clearTimeout(timer)\n }, [anchorList, updateAnchorPositions])\n\n // \u76D1\u542C body \u9AD8\u5EA6\u53D8\u5316\uFF0C\u9AD8\u5EA6\u6539\u53D8\u65F6\u91CD\u65B0\u8BA1\u7B97\u951A\u70B9\u4F4D\u7F6E\n useEffect(() => {\n if (anchorList.length === 0) return\n\n let resizeTimer: ReturnType<typeof setTimeout> | null = null\n\n const observer = new ResizeObserver(() => {\n // debounce\uFF0C\u907F\u514D\u9AD8\u9891\u89E6\u53D1\n if (resizeTimer) clearTimeout(resizeTimer)\n resizeTimer = setTimeout(updateAnchorPositions, 150)\n })\n\n observer.observe(document.body)\n\n return () => {\n observer.disconnect()\n if (resizeTimer) clearTimeout(resizeTimer)\n }\n }, [anchorList, updateAnchorPositions])\n\n // \u6EDA\u52A8\u76D1\u542C\uFF1A\u68C0\u6D4B\u5F53\u524D\u6EDA\u52A8\u4F4D\u7F6E\u5BF9\u5E94\u7684\u951A\u70B9\n useEffect(() => {\n if (anchorList.length === 0) return\n\n const handleScroll = () => {\n // \u5982\u679C\u6B63\u5728\u7A0B\u5E8F\u5316\u6EDA\u52A8\u4E2D\uFF0C\u4F7F\u7528 debounce \u68C0\u6D4B\u6EDA\u52A8\u7ED3\u675F\n if (isScrollingRef.current) {\n // \u6E05\u9664\u4E4B\u524D\u7684\u5B9A\u65F6\u5668\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current)\n }\n // \u8BBE\u7F6E\u65B0\u7684\u5B9A\u65F6\u5668\uFF0C100ms \u6CA1\u6709\u65B0\u6EDA\u52A8\u4E8B\u4EF6\u5219\u8BA4\u4E3A\u6EDA\u52A8\u7ED3\u675F\n scrollEndTimerRef.current = setTimeout(() => {\n isScrollingRef.current = false\n // \u6EDA\u52A8\u7ED3\u675F\u540E\uFF0C\u786E\u4FDD\u9AD8\u4EAE\u505C\u7559\u5728\u76EE\u6807\u951A\u70B9\n if (targetAnchorIdRef.current) {\n setActiveAnchorId(targetAnchorIdRef.current)\n targetAnchorIdRef.current = ''\n }\n }, 100)\n return\n }\n\n const navHeight = innerRef.current?.offsetHeight || 0\n const scrollPosition = window.scrollY + navHeight + scrollOffsetExtra + 10 // 10px \u7F13\u51B2\n\n let currentAnchorId = ''\n\n // \u4F7F\u7528\u7F13\u5B58\u7684\u951A\u70B9\u4F4D\u7F6E\n const positions = anchorPositionsRef.current\n\n // \u904D\u5386\u6240\u6709\u951A\u70B9\uFF0C\u627E\u5230\u5F53\u524D\u6EDA\u52A8\u4F4D\u7F6E\u5BF9\u5E94\u7684\u951A\u70B9\n for (let i = anchorList.length - 1; i >= 0; i--) {\n const anchor = anchorList[i]\n const elementTop = positions.get(anchor.id)\n if (elementTop !== undefined && scrollPosition >= elementTop) {\n currentAnchorId = anchor.id\n break\n }\n }\n\n // \u5982\u679C\u6CA1\u6709\u627E\u5230\u4E14\u7F13\u5B58\u4E2D\u6709\u7B2C\u4E00\u4E2A\u951A\u70B9\u7684\u4F4D\u7F6E\n if (!currentAnchorId && anchorList.length > 0) {\n const firstElementTop = positions.get(anchorList[0].id)\n if (firstElementTop !== undefined && scrollPosition < firstElementTop) {\n currentAnchorId = ''\n }\n }\n\n setActiveAnchorId(currentAnchorId)\n }\n\n // \u5EF6\u8FDF\u521D\u59CB\u5316\uFF0C\u7B49\u5F85\u4F4D\u7F6E\u7F13\u5B58\u5B8C\u6210\n const timer = setTimeout(() => {\n handleScroll()\n }, 200)\n\n window.addEventListener('scroll', handleScroll, { passive: true })\n return () => {\n clearTimeout(timer)\n window.removeEventListener('scroll', handleScroll)\n // \u6E05\u7406\u5B9A\u65F6\u5668\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current)\n }\n }\n }, [anchorList, scrollOffsetExtra])\n\n // \u8BBE\u7F6E\u9875\u9762\u4E2Dheader\u5143\u7D20\u7684position\u4E3Arelative\n useEffect(() => {\n const headerElements = document.querySelectorAll('.header')\n const originalStyles: { element: HTMLElement; originalPosition: string }[] = []\n\n headerElements.forEach(element => {\n const htmlElement = element as HTMLElement\n // \u4FDD\u5B58\u539F\u59CB\u6837\u5F0F\n originalStyles.push({\n element: htmlElement,\n originalPosition: htmlElement.style.position || getComputedStyle(htmlElement).position,\n })\n // \u8BBE\u7F6E\u4E3Arelative\n htmlElement.style.position = 'relative'\n })\n\n // \u6E05\u7406\u51FD\u6570\uFF1A\u6062\u590D\u539F\u59CB\u6837\u5F0F\n return () => {\n originalStyles.forEach(({ element, originalPosition }) => {\n element.style.position = originalPosition === 'static' ? '' : originalPosition\n })\n }\n }, [])\n\n // \u5904\u7406\u951A\u70B9\u70B9\u51FB\u6EDA\u52A8\n const handleAnchorClick = (e: React.MouseEvent, anchorId: string) => {\n e.preventDefault()\n\n // \u4F7F\u7528\u7F13\u5B58\u7684\u4F4D\u7F6E\n const elementAbsoluteTop = anchorPositionsRef.current.get(anchorId)\n if (elementAbsoluteTop === undefined) {\n console.warn(`Cached position for \"${anchorId}\" not found`)\n return\n }\n\n // \u7ACB\u5373\u66F4\u65B0\u9AD8\u4EAE\u72B6\u6001\uFF0C\u907F\u514D\u6EDA\u52A8\u8FC7\u7A0B\u4E2D\u95EA\u70C1\n setActiveAnchorId(anchorId)\n\n // \u8BB0\u5F55\u76EE\u6807\u951A\u70B9\uFF0C\u7528\u4E8E\u6EDA\u52A8\u7ED3\u675F\u540E\u786E\u4FDD\u9AD8\u4EAE\u6B63\u786E\n targetAnchorIdRef.current = anchorId\n\n // \u6807\u8BB0\u6B63\u5728\u7A0B\u5E8F\u5316\u6EDA\u52A8\uFF0C\u6682\u505C\u6EDA\u52A8\u76D1\u542C\n isScrollingRef.current = true\n\n // \u83B7\u53D6\u5BFC\u822A\u680F\u9AD8\u5EA6\n const navHeight = innerRef.current?.offsetHeight || 0\n\n // \u76EE\u6807\u6EDA\u52A8\u4F4D\u7F6E = \u7F13\u5B58\u7684\u5143\u7D20\u7EDD\u5BF9\u4F4D\u7F6E - \u5BFC\u822A\u680F\u9AD8\u5EA6 - \u989D\u5916\u504F\u79FB\n const targetPosition = elementAbsoluteTop - navHeight - scrollOffsetExtra\n\n // \u5E73\u6ED1\u6EDA\u52A8\u5230\u76EE\u6807\u4F4D\u7F6E\n window.scrollTo({\n top: targetPosition,\n behavior: 'smooth',\n })\n\n // \u66F4\u65B0 URL hash\uFF08\u4E0D\u89E6\u53D1\u9875\u9762\u8DF3\u8F6C\uFF09\n window.history.pushState(null, '', `#${anchorId}`)\n\n // \u6CE8\u610F\uFF1A\u6EDA\u52A8\u7ED3\u675F\u68C0\u6D4B\u7531 handleScroll \u4E2D\u7684 debounce \u903B\u8F91\u5904\u7406\n // \u4E0D\u518D\u4F7F\u7528\u56FA\u5B9A 800ms \u8D85\u65F6\uFF0C\u800C\u662F\u68C0\u6D4B\u5B9E\u9645\u6EDA\u52A8\u7ED3\u675F\n }\n\n return (\n <div\n id={id}\n ref={innerRef}\n className={cn(\n 'product-nav text-info-primary bg-container-primary tablet:px-8 laptop:px-16 desktop:px-16 lg-desktop:px-[calc(50%-832px)] !sticky top-0 !z-[51] flex w-full justify-between overflow-hidden px-4 py-0',\n {\n 'aiui-dark': theme === 'dark',\n },\n className\n )}\n >\n <div className=\"product-nav-main desktop:flex-row desktop:gap-[48px] flex w-full flex-col justify-start\">\n {/* Tab Links Section */}\n <div className=\"product-nav-header laptop:w-full desktop:w-fit desktop:gap-[24px] desktop:py-0 flex w-full flex-row items-center justify-between gap-[16px] pt-[14px]\">\n <div className=\"product-nav-tabs flex flex-row items-center gap-[8px]\">\n {tabLinks.map((tabLink, index) => {\n return (\n <div key={tabLink.link || index} className=\"product-nav-tab-item flex items-center gap-[8px]\">\n <a\n href={trackUrlRef(\n getLocalizedPath(tabLink.link, locale),\n `${contextHandle}_${componentType}_${componentName}`\n )}\n className={cn(\n 'product-nav-tab-link hover:text-brand-color text-nowrap text-[14px] font-bold tracking-[-0.04em]',\n {\n 'text-[#6D6D6F]': index !== 0,\n 'hidden desktop:block': index === 1,\n }\n )}\n // onClick={() => onShowSpecs?.(false)}\n >\n <span>{tabLink.label}</span>\n </a>\n {index !== tabLinks.length - 1 && (\n <div className=\"product-nav-tab-divider desktop:inline-block hidden h-[14px] w-px bg-[#E4E5E6]\" />\n )}\n </div>\n )\n })}\n\n {/* Mobile Dropdown */}\n {tabLinks.length > 1 && (\n <Popover.Root>\n <Popover.Trigger asChild>\n <button\n className=\"product-nav-dropdown-trigger desktop:hidden -ml-1 inline-block\"\n aria-label=\"More products\"\n >\n <ChevronDownIcon className=\"text-[#1D1D1F]\" />\n </button>\n </Popover.Trigger>\n <Popover.Content\n className=\"product-nav-dropdown-content rounded-[6px] border border-[#E4E5E6] bg-white p-[6px] px-[8px] py-[4px]\"\n style={{\n boxShadow: '0px 4px 8px 0px rgba(0,0,0,0.12)',\n }}\n side=\"bottom\"\n align=\"end\"\n alignOffset={10}\n sideOffset={10}\n >\n {tabLinks.slice(1).map(tabLink => (\n <a\n key={tabLink.link}\n href={trackUrlRef(\n getLocalizedPath(tabLink.link, locale),\n `${contextHandle}_${componentType}_${componentName}`\n )}\n className=\"product-nav-dropdown-link hover:text-brand-color text-nowrap\"\n >\n <span>{tabLink.label}</span>\n </a>\n ))}\n </Popover.Content>\n </Popover.Root>\n )}\n </div>\n\n {/* Mobile Actions */}\n <div className=\"product-nav-mobile-actions desktop:hidden desktop:gap-[24px] flex items-center gap-[16px]\">\n {/* {specs?.text && (\n <Text\n size={2}\n onClick={handleSpecsClick}\n className=\"product-nav-specs-button cursor-pointer hover:text-brand-color\"\n >\n {specs.text}\n </Text>\n )} */}\n {textLink?.link && (\n <a\n href={trackUrlRef(\n getLocalizedPath(textLink.link, locale),\n `${contextHandle}_${componentType}_${componentName}`\n )}\n target={textLink.target || '_self'}\n className=\"product-nav-text-link hover:text-brand-color cursor-pointer\"\n >\n <Text size={2} className=\"text-nowrap\">\n {textLink.text}\n </Text>\n </a>\n )}\n {buyBtn?.link && (\n <Button\n as=\"a\"\n href={trackUrlRef(\n getLocalizedPath(buyBtn.link, locale),\n `${contextHandle}_${componentType}_${componentName}`\n )}\n size=\"sm\"\n className=\"product-nav-buy-button text-nowrap\"\n >\n {buyBtn.text}\n </Button>\n )}\n </div>\n </div>\n\n {/* Anchor Navigation */}\n <div className=\"product-nav-anchors laptop:w-fit desktop:gap-[24px] desktop:py-[8px] flex w-full items-center gap-[16px] overflow-x-scroll py-[12px] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">\n {anchorList.map((anchor, index) => (\n <a\n key={anchor.id}\n href={`#${anchor.id}`}\n className=\"product-nav-anchor-link\"\n onClick={e => {\n // \u5982\u679C\u63D0\u4F9B\u4E86\u81EA\u5B9A\u4E49\u70B9\u51FB\u4E8B\u4EF6,\u4F7F\u7528\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u5E76\u963B\u6B62\u9ED8\u8BA4\u884C\u4E3A\n if (onAnchorClick) {\n e.preventDefault()\n // \u6807\u8BB0\u7A0B\u5E8F\u5316\u6EDA\u52A8\uFF0C\u907F\u514D\u6EDA\u52A8\u8FC7\u7A0B\u4E2D\u9AD8\u4EAE\u95EA\u70C1\n setActiveAnchorId(anchor.id)\n targetAnchorIdRef.current = anchor.id\n isScrollingRef.current = true\n onAnchorClick(anchor, index)\n } else {\n // \u4F7F\u7528\u9ED8\u8BA4\u7684\u951A\u70B9\u6EDA\u52A8\u884C\u4E3A\uFF0C\u5E26\u504F\u79FB\u91CF\n handleAnchorClick(e, anchor.id)\n }\n }}\n >\n <Text size={2} className=\"product-nav-anchor-text text-nowrap\">\n {anchor.label}\n </Text>\n <div\n className={cn(\n 'product-nav-anchor-indicator laptop:top-[12px] desktop:top-[10px] relative top-[12px] h-[4px] w-full bg-transparent',\n {\n '!bg-brand-0': activeAnchorId === anchor.id,\n }\n )}\n />\n </a>\n ))}\n </div>\n </div>\n\n {/* Desktop Actions */}\n <div className=\"product-nav-desktop-actions desktop:flex desktop:gap-[24px] desktop:py-[8px] hidden items-center gap-[16px]\">\n {/* {specs?.text && (\n <Text\n size={2}\n onClick={handleSpecsClick}\n className=\"product-nav-specs-button cursor-pointer text-black hover:text-brand-color\"\n >\n {specs.text}\n </Text>\n )} */}\n {textLink?.link && (\n <a\n href={trackUrlRef(\n getLocalizedPath(textLink.link, locale),\n `${contextHandle}_${componentType}_${componentName}`\n )}\n target={textLink.target || '_self'}\n className=\"product-nav-text-link hover:text-brand-color cursor-pointer text-black\"\n >\n <Text size={2} className=\"text-nowrap\">\n {textLink.text}\n </Text>\n </a>\n )}\n {buyBtn?.link && (\n <Button\n as=\"a\"\n href={trackUrlRef(\n getLocalizedPath(buyBtn.link, locale),\n `${contextHandle}_${componentType}_${componentName}`\n )}\n size=\"sm\"\n className=\"product-nav-buy-button text-nowrap\"\n >\n {buyBtn.text}\n </Button>\n )}\n </div>\n </div>\n )\n }\n)\n\nProductNav.displayName = 'ProductNav'\n\nexport default withLayout(ProductNav)\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "useState", "useEffect", "useCallback", "forwardRef", "useImperativeHandle", "useRef", "cn", "getLocalizedPath", "withLayout", "Button", "Text", "useExposure", "trackUrlRef", "useAiuiContext", "Popover", "componentType", "componentName", "ChevronDownIcon", "props", "ProductNav", "className", "data", "id", "onAnchorClick", "scrollOffsetExtra", "ref", "tabLinks", "anchorList", "textLink", "buyBtn", "theme", "locale", "trackingData", "contextHandle", "activeAnchorId", "setActiveAnchorId", "innerRef", "isScrollingRef", "targetAnchorIdRef", "scrollEndTimerRef", "anchorPositionsRef", "updateAnchorPositions", "originalScrollY", "positions", "anchor", "element", "rect", "timer", "resizeTimer", "observer", "handleScroll", "navHeight", "scrollPosition", "currentAnchorId", "i", "elementTop", "firstElementTop", "headerElements", "originalStyles", "htmlElement", "originalPosition", "handleAnchorClick", "anchorId", "elementAbsoluteTop", "targetPosition", "tabLink", "index", "e", "ProductNav_default"]
7
7
  }
@@ -43,7 +43,7 @@ export interface PromotionalBarProps extends React.HTMLAttributes<HTMLDivElement
43
43
  data: PromotionalBarData;
44
44
  classNames?: Partial<Record<keyof PromotionalBarSemanticName, string>>;
45
45
  }
46
- declare const _default: React.ForwardRefExoticComponent<Omit<PromotionalBarProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
46
+ declare const _default: React.ForwardRefExoticComponent<Omit<PromotionalBarProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../index.js").ContainerProps & React.RefAttributes<unknown>> & {
47
47
  readonly $$typeof: symbol;
48
48
  };
49
49
  export default _default;
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as l,jsxs as h}from"react/jsx-runtime";import*as g from"react";import{cn as p}from"../../helpers/index.js";import{Heading as k,Button as v,Picture as B}from"../../components/index.js";import{withLayout as P}from"../../shared/Styles.js";import{getLocalizedPath as T}from"../../helpers/index.js";import{useAiuiContext as M}from"../AiuiProvider/index.js";import{trackUrlRef as N}from"../../shared/trackUrlRef.js";const D="image",y="PromotionalBar",R=i=>{if(!i)return;const{mobile:e,tablet:m,laptop:u,desktop:d,lgDesktop:f}=i,t=[],r=b=>b?.url,o=r(f),n=r(d),a=r(u),s=r(m),c=r(e);return o?t.push(o):n?t.push(n):a?t.push(a):s?t.push(s):c&&t.push(c),n&&o&&t.push(`${n} 1920`),a&&(n||o)&&t.push(`${a} 1440`),s&&(a||n||o)&&t.push(`${s} 1024`),c&&(s||a||n||o)&&t.push(`${c} 768`),t.length>0?t.join(", "):void 0},x=g.forwardRef(({classNames:i,data:e,className:m,...u},d)=>{const{locale:f="us",pageHandle:t}=M(),{backgroundImage:r,theme:o="dark"}=e,n=g.useMemo(()=>R(r),[r]);return l("div",{ref:d,...u,className:p("laptop:h-[192px] lg-desktop:h-[240px] h-[240px] text-[#080A0F]",{"text-[#F5F6F7]":o==="dark"},i?.root,m),children:h("div",{className:"promotional-bar-content rounded-card relative h-full overflow-hidden",children:[h("div",{className:p("laptop:px-8 laptop:justify-center lg-desktop:max-w-[620px] laptop:max-w-[392px] desktop:max-w-[584px] laptop:py-0 tablet:px-8 laptop:pr-0 relative z-20 flex h-full flex-col p-4",i?.content),children:[e.contentTitle&&l(k,{className:p("line-clamp-2 ",i?.title),html:e.contentTitle,size:3}),e.contentDesc&&l("p",{className:p("laptop:text-[16px] laptop:mt-2 lg-desktop:text-[18px] mt-1 line-clamp-2 text-[14px] font-bold leading-[1.4] ",i?.description),dangerouslySetInnerHTML:{__html:e.contentDesc}}),l("div",{className:"laptop:mt-4 mt-2",children:e.buttonText&&l(v,{as:"a",variant:"link",className:p("!p-0 text-[#F5F6F7]",{"text-[#080A0F]":o==="light"},i?.button),href:N(T(e.buttonLink||"",f),`${t}_${D}_${y}`),iconClassName:"size-4",children:e.buttonText})})]}),l(B,{source:n,className:"absolute inset-0 z-10 ",imgClassName:"h-full object-cover transition-transform duration-300 ease-in-out hover:scale-[1.05]"})]})})});x.displayName="PromotionalBar";var I=P(x);export{I as default};
1
+ "use client";import{jsx as a,jsxs as k}from"react/jsx-runtime";import*as f from"react";import{cn as p}from"../../helpers/index.js";import{Heading as T,Button as D,Picture as B}from"../../components/index.js";import{withLayout as M}from"../../shared/Styles.js";import{getLocalizedPath as P}from"../../helpers/index.js";import{useAiuiContext as $}from"../AiuiProvider/index.js";import{useExposure as N}from"../../hooks/useExposure.js";import{trackUrlRef as R}from"../../shared/trackUrlRef.js";const x="image",g="promotional_bar",y=r=>{if(!r)return;const{mobile:t,tablet:m,laptop:u,desktop:h,lgDesktop:d}=r,e=[],s=v=>v?.url,o=s(d),n=s(h),i=s(u),l=s(m),c=s(t);return o?e.push(o):n?e.push(n):i?e.push(i):l?e.push(l):c&&e.push(c),n&&o&&e.push(`${n} 1920`),i&&(n||o)&&e.push(`${i} 1440`),l&&(i||n||o)&&e.push(`${l} 1024`),c&&(l||i||n||o)&&e.push(`${c} 768`),e.length>0?e.join(", "):void 0},b=f.forwardRef(({classNames:r,data:t,className:m,...u},h)=>{const{locale:d="us",trackingData:e}=$(),{backgroundImage:s,theme:o="dark"}=t,n=f.useMemo(()=>y(s),[s]),i=f.useRef(null);return N(i,{componentType:x,componentName:g,componentTitle:t.contentTitle||"",componentDescription:t.contentDesc||""}),a("div",{ref:i,...u,className:p("laptop:h-[192px] lg-desktop:h-[240px] h-[240px] text-[#080A0F]",{"text-[#F5F6F7]":o==="dark"},r?.root,m),children:k("div",{className:"promotional-bar-content rounded-card relative h-full overflow-hidden",children:[k("div",{className:p("laptop:px-8 laptop:justify-center lg-desktop:max-w-[620px] laptop:max-w-[392px] desktop:max-w-[584px] laptop:py-0 tablet:px-8 laptop:pr-0 relative z-20 flex h-full flex-col p-4",r?.content),children:[t.contentTitle&&a(T,{className:p("line-clamp-2 ",r?.title),html:t.contentTitle,size:3}),t.contentDesc&&a("p",{className:p("laptop:text-[16px] laptop:mt-2 lg-desktop:text-[18px] mt-1 line-clamp-2 text-[14px] font-bold leading-[1.4] ",r?.description),dangerouslySetInnerHTML:{__html:t.contentDesc}}),a("div",{className:"laptop:mt-4 mt-2",children:t.buttonText&&a(D,{as:"a",variant:"link",className:p("!p-0 text-[#F5F6F7]",{"text-[#080A0F]":o==="light"},r?.button),href:R(P(t.buttonLink||"",d),`${e?.contextHandle||""}_${x}_${g}`),iconClassName:"size-4","data-headless-type-name":`${x}#${g}`,"data-headless-title-desc-button":`${t.contentTitle||""}#${t.contentDesc||""}#${t.buttonText||""}`,children:t.buttonText})})]}),a(B,{source:n,className:"absolute inset-0 z-10 ",imgClassName:"h-full object-cover transition-transform duration-300 ease-in-out hover:scale-[1.05]"})]})})});b.displayName="PromotionalBar";var S=M(b);export{S as default};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/PromotionalBar/index.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { Heading, Button, Picture } from '../../components/index.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport type { Media, Theme } from '../../types/props.js'\nimport { getLocalizedPath } from '../../helpers/index.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport { trackUrlRef } from '../../shared/trackUrlRef.js'\n\nexport interface PromotionalBarSemanticName {\n root: 'root'\n content: 'content'\n title: 'title'\n description: 'description'\n button: 'button'\n}\n\n/**\n * \u54CD\u5E94\u5F0F\u80CC\u666F\u56FE\u7247\u914D\u7F6E\n */\nexport interface ResponsiveBackgroundImage {\n /** \u79FB\u52A8\u7AEF\u56FE\u7247 (<768px) */\n mobile?: Media\n /** \u5E73\u677F\u56FE\u7247 (768-1440px) */\n tablet?: Media\n /** \u7B14\u8BB0\u672C\u56FE\u7247 (1025-1440px) */\n laptop?: Media\n /** \u684C\u9762\u56FE\u7247 (1441-1920px) */\n desktop?: Media\n /** \u8D85\u5927\u684C\u9762\u56FE\u7247 (\u22651921px) */\n lgDesktop?: Media\n}\n\n/**\n * PromotionalBar \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3\n */\nexport interface PromotionalBarData {\n theme: Theme\n /** \u7EC4\u4EF6\u5185\u5BB9\u6807\u9898 */\n contentTitle?: string\n /** \u7EC4\u4EF6\u5185\u5BB9\u63CF\u8FF0 */\n contentDesc?: string\n /** \u6309\u94AE\u6587\u672C */\n buttonText?: string\n /** \u6309\u94AE\u94FE\u63A5 */\n buttonLink?: string\n /** \u80CC\u666F\u56FE\u7247 - \u54CD\u5E94\u5F0F\u56FE\u7247\u5BF9\u8C61 */\n backgroundImage?: ResponsiveBackgroundImage\n}\n\nexport interface PromotionalBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: PromotionalBarData\n classNames?: Partial<Record<keyof PromotionalBarSemanticName, string>>\n}\n\nconst componentType = 'image'\nconst componentName = 'PromotionalBar'\n\n/**\n * \u5C06\u54CD\u5E94\u5F0F\u80CC\u666F\u56FE\u7247\u5BF9\u8C61\u8F6C\u6362\u4E3A Picture \u7EC4\u4EF6\u6240\u9700\u7684\u5B57\u7B26\u4E32\u683C\u5F0F\n */\nconst convertResponsiveImageToString = (backgroundImage: ResponsiveBackgroundImage | undefined): string | undefined => {\n if (!backgroundImage) return undefined\n\n const { mobile, tablet, laptop, desktop, lgDesktop } = backgroundImage\n const parts: string[] = []\n\n // \u8F85\u52A9\u51FD\u6570\uFF1A\u4ECE Media \u5BF9\u8C61\u4E2D\u63D0\u53D6 URL\n const getUrl = (media: Media | undefined): string | undefined => {\n return media?.url\n }\n\n // \u9ED8\u8BA4\u56FE\u7247\uFF08\u6700\u5927\u5C3A\u5BF8\uFF09\u653E\u5728\u6700\u524D\u9762\uFF0C\u4E0D\u9700\u8981\u65AD\u70B9\n const lgDesktopUrl = getUrl(lgDesktop)\n const desktopUrl = getUrl(desktop)\n const laptopUrl = getUrl(laptop)\n const tabletUrl = getUrl(tablet)\n const mobileUrl = getUrl(mobile)\n\n if (lgDesktopUrl) parts.push(lgDesktopUrl)\n else if (desktopUrl) parts.push(desktopUrl)\n else if (laptopUrl) parts.push(laptopUrl)\n else if (tabletUrl) parts.push(tabletUrl)\n else if (mobileUrl) parts.push(mobileUrl)\n\n // \u6309\u65AD\u70B9\u4ECE\u5927\u5230\u5C0F\u6DFB\u52A0\n if (desktopUrl && lgDesktopUrl) parts.push(`${desktopUrl} 1920`)\n if (laptopUrl && (desktopUrl || lgDesktopUrl)) parts.push(`${laptopUrl} 1440`)\n if (tabletUrl && (laptopUrl || desktopUrl || lgDesktopUrl)) parts.push(`${tabletUrl} 1024`)\n if (mobileUrl && (tabletUrl || laptopUrl || desktopUrl || lgDesktopUrl)) parts.push(`${mobileUrl} 768`)\n\n return parts.length > 0 ? parts.join(', ') : undefined\n}\n\n/**\n * PromotionalBar - \u63A8\u5E7F\u680F\n *\n * @description \u63A8\u5E7F\u680F\n */\nconst PromotionalBar = React.forwardRef<HTMLDivElement, PromotionalBarProps>(\n ({ classNames, data, className, ...rest }, ref) => {\n const { locale = 'us', pageHandle } = useAiuiContext()\n const { backgroundImage, theme = 'dark' } = data\n const pictureSource = React.useMemo(() => {\n return convertResponsiveImageToString(backgroundImage)\n }, [backgroundImage])\n return (\n <div\n ref={ref}\n {...rest}\n className={cn(\n 'laptop:h-[192px] lg-desktop:h-[240px] h-[240px] text-[#080A0F]',\n {\n 'text-[#F5F6F7]': theme === 'dark',\n },\n classNames?.root,\n className\n )}\n >\n {/* \u63A8\u5E7F\u680F\u5185\u5BB9\u533A\u57DF - \u6839\u636E\u5177\u4F53\u4E1A\u52A1\u9700\u6C42\u5B9A\u5236 */}\n <div className=\"promotional-bar-content rounded-card relative h-full overflow-hidden\">\n <div\n className={cn(\n 'laptop:px-8 laptop:justify-center lg-desktop:max-w-[620px] laptop:max-w-[392px] desktop:max-w-[584px] laptop:py-0 tablet:px-8 laptop:pr-0 relative z-20 flex h-full flex-col p-4',\n classNames?.content\n )}\n >\n {data.contentTitle && (\n <Heading className={cn('line-clamp-2 ', classNames?.title)} html={data.contentTitle} size={3} />\n )}\n {data.contentDesc && (\n <p\n className={cn(\n 'laptop:text-[16px] laptop:mt-2 lg-desktop:text-[18px] mt-1 line-clamp-2 text-[14px] font-bold leading-[1.4] ',\n classNames?.description\n )}\n dangerouslySetInnerHTML={{ __html: data.contentDesc }}\n />\n )}\n <div className=\"laptop:mt-4 mt-2\">\n {data.buttonText && (\n <Button\n as=\"a\"\n variant=\"link\"\n className={cn(\n '!p-0 text-[#F5F6F7]',\n {\n 'text-[#080A0F]': theme === 'light',\n },\n classNames?.button\n )}\n href={trackUrlRef(\n getLocalizedPath(data.buttonLink || '', locale),\n `${pageHandle}_${componentType}_${componentName}`\n )}\n iconClassName=\"size-4\"\n >\n {data.buttonText}\n </Button>\n )}\n </div>\n </div>\n <Picture\n source={pictureSource}\n className=\"absolute inset-0 z-10 \"\n imgClassName=\"h-full object-cover transition-transform duration-300 ease-in-out hover:scale-[1.05]\"\n />\n </div>\n </div>\n )\n }\n)\n\nPromotionalBar.displayName = 'PromotionalBar'\nexport default withLayout(PromotionalBar)\n"],
5
- "mappings": "aA4HU,OAOI,OAAAA,EAPJ,QAAAC,MAAA,oBA1HV,UAAYC,MAAW,QACvB,OAAS,MAAAC,MAAU,yBACnB,OAAS,WAAAC,EAAS,UAAAC,EAAQ,WAAAC,MAAe,4BACzC,OAAS,cAAAC,MAAkB,yBAE3B,OAAS,oBAAAC,MAAwB,yBACjC,OAAS,kBAAAC,MAAsB,2BAC/B,OAAS,eAAAC,MAAmB,8BAiD5B,MAAMC,EAAgB,QAChBC,EAAgB,iBAKhBC,EAAkCC,GAA+E,CACrH,GAAI,CAACA,EAAiB,OAEtB,KAAM,CAAE,OAAAC,EAAQ,OAAAC,EAAQ,OAAAC,EAAQ,QAAAC,EAAS,UAAAC,CAAU,EAAIL,EACjDM,EAAkB,CAAC,EAGnBC,EAAUC,GACPA,GAAO,IAIVC,EAAeF,EAAOF,CAAS,EAC/BK,EAAaH,EAAOH,CAAO,EAC3BO,EAAYJ,EAAOJ,CAAM,EACzBS,EAAYL,EAAOL,CAAM,EACzBW,EAAYN,EAAON,CAAM,EAE/B,OAAIQ,EAAcH,EAAM,KAAKG,CAAY,EAChCC,EAAYJ,EAAM,KAAKI,CAAU,EACjCC,EAAWL,EAAM,KAAKK,CAAS,EAC/BC,EAAWN,EAAM,KAAKM,CAAS,EAC/BC,GAAWP,EAAM,KAAKO,CAAS,EAGpCH,GAAcD,GAAcH,EAAM,KAAK,GAAGI,CAAU,OAAO,EAC3DC,IAAcD,GAAcD,IAAeH,EAAM,KAAK,GAAGK,CAAS,OAAO,EACzEC,IAAcD,GAAaD,GAAcD,IAAeH,EAAM,KAAK,GAAGM,CAAS,OAAO,EACtFC,IAAcD,GAAaD,GAAaD,GAAcD,IAAeH,EAAM,KAAK,GAAGO,CAAS,MAAM,EAE/FP,EAAM,OAAS,EAAIA,EAAM,KAAK,IAAI,EAAI,MAC/C,EAOMQ,EAAiB1B,EAAM,WAC3B,CAAC,CAAE,WAAA2B,EAAY,KAAAC,EAAM,UAAAC,EAAW,GAAGC,CAAK,EAAGC,IAAQ,CACjD,KAAM,CAAE,OAAAC,EAAS,KAAM,WAAAC,CAAW,EAAI1B,EAAe,EAC/C,CAAE,gBAAAK,EAAiB,MAAAsB,EAAQ,MAAO,EAAIN,EACtCO,EAAgBnC,EAAM,QAAQ,IAC3BW,EAA+BC,CAAe,EACpD,CAACA,CAAe,CAAC,EACpB,OACEd,EAAC,OACC,IAAKiC,EACJ,GAAGD,EACJ,UAAW7B,EACT,iEACA,CACE,iBAAkBiC,IAAU,MAC9B,EACAP,GAAY,KACZE,CACF,EAGA,SAAA9B,EAAC,OAAI,UAAU,uEACb,UAAAA,EAAC,OACC,UAAWE,EACT,mLACA0B,GAAY,OACd,EAEC,UAAAC,EAAK,cACJ9B,EAACI,EAAA,CAAQ,UAAWD,EAAG,gBAAiB0B,GAAY,KAAK,EAAG,KAAMC,EAAK,aAAc,KAAM,EAAG,EAE/FA,EAAK,aACJ9B,EAAC,KACC,UAAWG,EACT,+GACA0B,GAAY,WACd,EACA,wBAAyB,CAAE,OAAQC,EAAK,WAAY,EACtD,EAEF9B,EAAC,OAAI,UAAU,mBACZ,SAAA8B,EAAK,YACJ9B,EAACK,EAAA,CACC,GAAG,IACH,QAAQ,OACR,UAAWF,EACT,sBACA,CACE,iBAAkBiC,IAAU,OAC9B,EACAP,GAAY,MACd,EACA,KAAMnB,EACJF,EAAiBsB,EAAK,YAAc,GAAII,CAAM,EAC9C,GAAGC,CAAU,IAAIxB,CAAa,IAAIC,CAAa,EACjD,EACA,cAAc,SAEb,SAAAkB,EAAK,WACR,EAEJ,GACF,EACA9B,EAACM,EAAA,CACC,OAAQ+B,EACR,UAAU,yBACV,aAAa,uFACf,GACF,EACF,CAEJ,CACF,EAEAT,EAAe,YAAc,iBAC7B,IAAOU,EAAQ/B,EAAWqB,CAAc",
6
- "names": ["jsx", "jsxs", "React", "cn", "Heading", "Button", "Picture", "withLayout", "getLocalizedPath", "useAiuiContext", "trackUrlRef", "componentType", "componentName", "convertResponsiveImageToString", "backgroundImage", "mobile", "tablet", "laptop", "desktop", "lgDesktop", "parts", "getUrl", "media", "lgDesktopUrl", "desktopUrl", "laptopUrl", "tabletUrl", "mobileUrl", "PromotionalBar", "classNames", "data", "className", "rest", "ref", "locale", "pageHandle", "theme", "pictureSource", "PromotionalBar_default"]
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { Heading, Button, Picture } from '../../components/index.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport type { Media, Theme } from '../../types/props.js'\nimport { getLocalizedPath } from '../../helpers/index.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { trackUrlRef } from '../../shared/trackUrlRef.js'\n\nconst componentType = 'image'\nconst componentName = 'promotional_bar'\nexport interface PromotionalBarSemanticName {\n root: 'root'\n content: 'content'\n title: 'title'\n description: 'description'\n button: 'button'\n}\n\n/**\n * \u54CD\u5E94\u5F0F\u80CC\u666F\u56FE\u7247\u914D\u7F6E\n */\nexport interface ResponsiveBackgroundImage {\n /** \u79FB\u52A8\u7AEF\u56FE\u7247 (<768px) */\n mobile?: Media\n /** \u5E73\u677F\u56FE\u7247 (768-1440px) */\n tablet?: Media\n /** \u7B14\u8BB0\u672C\u56FE\u7247 (1025-1440px) */\n laptop?: Media\n /** \u684C\u9762\u56FE\u7247 (1441-1920px) */\n desktop?: Media\n /** \u8D85\u5927\u684C\u9762\u56FE\u7247 (\u22651921px) */\n lgDesktop?: Media\n}\n\n/**\n * PromotionalBar \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3\n */\nexport interface PromotionalBarData {\n theme: Theme\n /** \u7EC4\u4EF6\u5185\u5BB9\u6807\u9898 */\n contentTitle?: string\n /** \u7EC4\u4EF6\u5185\u5BB9\u63CF\u8FF0 */\n contentDesc?: string\n /** \u6309\u94AE\u6587\u672C */\n buttonText?: string\n /** \u6309\u94AE\u94FE\u63A5 */\n buttonLink?: string\n /** \u80CC\u666F\u56FE\u7247 - \u54CD\u5E94\u5F0F\u56FE\u7247\u5BF9\u8C61 */\n backgroundImage?: ResponsiveBackgroundImage\n}\n\nexport interface PromotionalBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: PromotionalBarData\n classNames?: Partial<Record<keyof PromotionalBarSemanticName, string>>\n}\n\n/**\n * \u5C06\u54CD\u5E94\u5F0F\u80CC\u666F\u56FE\u7247\u5BF9\u8C61\u8F6C\u6362\u4E3A Picture \u7EC4\u4EF6\u6240\u9700\u7684\u5B57\u7B26\u4E32\u683C\u5F0F\n */\nconst convertResponsiveImageToString = (backgroundImage: ResponsiveBackgroundImage | undefined): string | undefined => {\n if (!backgroundImage) return undefined\n\n const { mobile, tablet, laptop, desktop, lgDesktop } = backgroundImage\n const parts: string[] = []\n\n // \u8F85\u52A9\u51FD\u6570\uFF1A\u4ECE Media \u5BF9\u8C61\u4E2D\u63D0\u53D6 URL\n const getUrl = (media: Media | undefined): string | undefined => {\n return media?.url\n }\n\n // \u9ED8\u8BA4\u56FE\u7247\uFF08\u6700\u5927\u5C3A\u5BF8\uFF09\u653E\u5728\u6700\u524D\u9762\uFF0C\u4E0D\u9700\u8981\u65AD\u70B9\n const lgDesktopUrl = getUrl(lgDesktop)\n const desktopUrl = getUrl(desktop)\n const laptopUrl = getUrl(laptop)\n const tabletUrl = getUrl(tablet)\n const mobileUrl = getUrl(mobile)\n\n if (lgDesktopUrl) parts.push(lgDesktopUrl)\n else if (desktopUrl) parts.push(desktopUrl)\n else if (laptopUrl) parts.push(laptopUrl)\n else if (tabletUrl) parts.push(tabletUrl)\n else if (mobileUrl) parts.push(mobileUrl)\n\n // \u6309\u65AD\u70B9\u4ECE\u5927\u5230\u5C0F\u6DFB\u52A0\n if (desktopUrl && lgDesktopUrl) parts.push(`${desktopUrl} 1920`)\n if (laptopUrl && (desktopUrl || lgDesktopUrl)) parts.push(`${laptopUrl} 1440`)\n if (tabletUrl && (laptopUrl || desktopUrl || lgDesktopUrl)) parts.push(`${tabletUrl} 1024`)\n if (mobileUrl && (tabletUrl || laptopUrl || desktopUrl || lgDesktopUrl)) parts.push(`${mobileUrl} 768`)\n\n return parts.length > 0 ? parts.join(', ') : undefined\n}\n\n/**\n * PromotionalBar - \u63A8\u5E7F\u680F\n *\n * @description \u63A8\u5E7F\u680F\n */\nconst PromotionalBar = React.forwardRef<HTMLDivElement, PromotionalBarProps>(\n ({ classNames, data, className, ...rest }, ref) => {\n const { locale = 'us', trackingData } = useAiuiContext()\n const { backgroundImage, theme = 'dark' } = data\n const pictureSource = React.useMemo(() => {\n return convertResponsiveImageToString(backgroundImage)\n }, [backgroundImage])\n const innerRef = React.useRef<HTMLDivElement>(null)\n\n // \u66DD\u5149\u57CB\u70B9\n useExposure(innerRef, {\n componentType,\n componentName,\n componentTitle: data.contentTitle || '',\n componentDescription: data.contentDesc || '',\n })\n\n return (\n <div\n ref={innerRef}\n {...rest}\n className={cn(\n 'laptop:h-[192px] lg-desktop:h-[240px] h-[240px] text-[#080A0F]',\n {\n 'text-[#F5F6F7]': theme === 'dark',\n },\n classNames?.root,\n className\n )}\n >\n {/* \u63A8\u5E7F\u680F\u5185\u5BB9\u533A\u57DF - \u6839\u636E\u5177\u4F53\u4E1A\u52A1\u9700\u6C42\u5B9A\u5236 */}\n <div className=\"promotional-bar-content rounded-card relative h-full overflow-hidden\">\n <div\n className={cn(\n 'laptop:px-8 laptop:justify-center lg-desktop:max-w-[620px] laptop:max-w-[392px] desktop:max-w-[584px] laptop:py-0 tablet:px-8 laptop:pr-0 relative z-20 flex h-full flex-col p-4',\n classNames?.content\n )}\n >\n {data.contentTitle && (\n <Heading className={cn('line-clamp-2 ', classNames?.title)} html={data.contentTitle} size={3} />\n )}\n {data.contentDesc && (\n <p\n className={cn(\n 'laptop:text-[16px] laptop:mt-2 lg-desktop:text-[18px] mt-1 line-clamp-2 text-[14px] font-bold leading-[1.4] ',\n classNames?.description\n )}\n dangerouslySetInnerHTML={{ __html: data.contentDesc }}\n />\n )}\n <div className=\"laptop:mt-4 mt-2\">\n {data.buttonText && (\n <Button\n as=\"a\"\n variant=\"link\"\n className={cn(\n '!p-0 text-[#F5F6F7]',\n {\n 'text-[#080A0F]': theme === 'light',\n },\n classNames?.button\n )}\n href={trackUrlRef(\n getLocalizedPath(data.buttonLink || '', locale),\n `${trackingData?.contextHandle || ''}_${componentType}_${componentName}`\n )}\n iconClassName=\"size-4\"\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`${data.contentTitle || ''}#${data.contentDesc || ''}#${data.buttonText || ''}`}\n >\n {data.buttonText}\n </Button>\n )}\n </div>\n </div>\n <Picture\n source={pictureSource}\n className=\"absolute inset-0 z-10 \"\n imgClassName=\"h-full object-cover transition-transform duration-300 ease-in-out hover:scale-[1.05]\"\n />\n </div>\n </div>\n )\n }\n)\n\nPromotionalBar.displayName = 'PromotionalBar'\nexport default withLayout(PromotionalBar)\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "React", "cn", "Heading", "Button", "Picture", "withLayout", "getLocalizedPath", "useAiuiContext", "useExposure", "trackUrlRef", "componentType", "componentName", "convertResponsiveImageToString", "backgroundImage", "mobile", "tablet", "laptop", "desktop", "lgDesktop", "parts", "getUrl", "media", "lgDesktopUrl", "desktopUrl", "laptopUrl", "tabletUrl", "mobileUrl", "PromotionalBar", "classNames", "data", "className", "rest", "ref", "locale", "trackingData", "theme", "pictureSource", "innerRef", "PromotionalBar_default"]
7
7
  }
@@ -115,7 +115,7 @@ interface ProductCardInnerProps {
115
115
  index?: number;
116
116
  }
117
117
  declare const ProductCardInner: React.MemoExoticComponent<({ product, isShowTag, onImageClick, onProductImageClick, onLearnMore, onShopNow, onAddToCart, secondaryButtonText, secondaryButtonFun, primaryButtonText, primaryButtonFun, classNames, className, theme, index, }: ProductCardInnerProps) => import("react/jsx-runtime").JSX.Element>;
118
- declare const _default: React.ForwardRefExoticComponent<Omit<SceneShelfV2Props & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
118
+ declare const _default: React.ForwardRefExoticComponent<Omit<SceneShelfV2Props & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../index.js").ContainerProps & React.RefAttributes<unknown>> & {
119
119
  readonly $$typeof: symbol;
120
120
  };
121
121
  export default _default;
@@ -73,7 +73,7 @@ export interface SceneShelfV3Props extends React.HTMLAttributes<HTMLDivElement>
73
73
  export interface SceneShelfV3Component extends React.ForwardRefExoticComponent<SceneShelfV3Props & React.RefAttributes<HTMLDivElement>> {
74
74
  ProductCard: typeof ProductCard;
75
75
  }
76
- declare const _default: React.ForwardRefExoticComponent<Omit<SceneShelfV3Props & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
76
+ declare const _default: React.ForwardRefExoticComponent<Omit<SceneShelfV3Props & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../index.js").ContainerProps & React.RefAttributes<unknown>> & {
77
77
  readonly $$typeof: symbol;
78
78
  ProductCard: typeof ProductCard;
79
79
  };