@anker-in/headless-ui 1.1.84 → 1.1.86

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 (292) hide show
  1. package/dist/cjs/biz-components/AccordionCards/index.d.ts +36 -1
  2. package/dist/cjs/biz-components/ActiveShelf/index.d.ts +2 -2
  3. package/dist/cjs/biz-components/ActiveShelf/index.js +1 -1
  4. package/dist/cjs/biz-components/ActiveShelf/index.js.map +3 -3
  5. package/dist/cjs/biz-components/ActivitySchedule/index.d.ts +3 -1
  6. package/dist/cjs/biz-components/AnchorNavigation/index.d.ts +1 -1
  7. package/dist/cjs/biz-components/AplusDesc/index.d.ts +17 -1
  8. package/dist/cjs/biz-components/BrandCardLink/BrandCardLink.d.ts +2 -1
  9. package/dist/cjs/biz-components/BrandEquity/BrandEquity.d.ts +2 -1
  10. package/dist/cjs/biz-components/Category/index.d.ts +1 -1
  11. package/dist/cjs/biz-components/CreativeModule/index.d.ts +7 -1
  12. package/dist/cjs/biz-components/DownLoad/index.d.ts +6 -1
  13. package/dist/cjs/biz-components/Evaluate/index.d.ts +1 -1
  14. package/dist/cjs/biz-components/EventSchedule/index.d.ts +2 -7
  15. package/dist/cjs/biz-components/EventSchedule/index.js +1 -1
  16. package/dist/cjs/biz-components/EventSchedule/index.js.map +3 -3
  17. package/dist/cjs/biz-components/Faq/Faq.d.ts +3 -2
  18. package/dist/cjs/biz-components/FeatureCards/FeatureCards.d.ts +3 -1
  19. package/dist/cjs/biz-components/FeatureShowcase/FeatureShowcase.d.ts +3 -1
  20. package/dist/cjs/biz-components/FeaturedBlogPosts/index.d.ts +1 -6
  21. package/dist/cjs/biz-components/FeaturedBlogPosts/index.js +1 -1
  22. package/dist/cjs/biz-components/FeaturedBlogPosts/index.js.map +3 -3
  23. package/dist/cjs/biz-components/Features/index.d.ts +9 -1
  24. package/dist/cjs/biz-components/FootCharger/index.d.ts +7 -1
  25. package/dist/cjs/biz-components/FooterNavigation/index.d.ts +2 -1
  26. package/dist/cjs/biz-components/GiftBox/index.d.ts +3 -1
  27. package/dist/cjs/biz-components/GiftShelf/index.d.ts +3 -1
  28. package/dist/cjs/biz-components/GiftTierShelf/index.d.ts +3 -1
  29. package/dist/cjs/biz-components/Graphic/index.d.ts +1 -1
  30. package/dist/cjs/biz-components/GraphicAttractionBlock/index.d.ts +1 -1
  31. package/dist/cjs/biz-components/GraphicMore/index.d.ts +7 -1
  32. package/dist/cjs/biz-components/GraphicOverlay/GraphicOverlay.d.ts +10 -2
  33. package/dist/cjs/biz-components/HeaderNavigation/index.d.ts +3 -1
  34. package/dist/cjs/biz-components/HeroBanner/HeroBanner.d.ts +5 -1
  35. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js +1 -1
  36. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js.map +2 -2
  37. package/dist/cjs/biz-components/ImageOverlayShelf/index.d.ts +2 -2
  38. package/dist/cjs/biz-components/ImageOverlayShelf/index.js +1 -1
  39. package/dist/cjs/biz-components/ImageOverlayShelf/index.js.map +3 -3
  40. package/dist/cjs/biz-components/ImageTextFeature/ImageTextFeature.d.ts +3 -1
  41. package/dist/cjs/biz-components/ImageWithText/ImageWithText.d.ts +3 -1
  42. package/dist/cjs/biz-components/Ksp/index.d.ts +1 -1
  43. package/dist/cjs/biz-components/Listing/components/PaidShipping/index.d.ts +11 -1
  44. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.d.ts +26 -1
  45. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.d.ts +1 -1
  46. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.d.ts +1 -1
  47. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.d.ts +1 -1
  48. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.d.ts +1 -1
  49. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductOptions/index.d.ts +1 -1
  50. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductGallery/index.d.ts +1 -1
  51. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductPaidShipping/index.d.ts +11 -1
  52. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductSummary/index.d.ts +1 -1
  53. package/dist/cjs/biz-components/Listing/components/PurchaseBar/index.d.ts +2 -1
  54. package/dist/cjs/biz-components/LotteryShared/BaseModal.d.ts +61 -0
  55. package/dist/cjs/biz-components/LotteryShared/BaseModal.js +2 -0
  56. package/dist/cjs/biz-components/LotteryShared/BaseModal.js.map +7 -0
  57. package/dist/cjs/biz-components/LotteryShared/ChanceMethods.d.ts +25 -0
  58. package/dist/cjs/biz-components/LotteryShared/ChanceMethods.js +2 -0
  59. package/dist/cjs/biz-components/LotteryShared/ChanceMethods.js.map +7 -0
  60. package/dist/cjs/biz-components/LotteryShared/ErrorModal.d.ts +47 -0
  61. package/dist/cjs/biz-components/LotteryShared/ErrorModal.js +2 -0
  62. package/dist/cjs/biz-components/LotteryShared/ErrorModal.js.map +7 -0
  63. package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.d.ts +101 -0
  64. package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.js +2 -0
  65. package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.js.map +7 -0
  66. package/dist/cjs/biz-components/LotteryShared/PrizePool.d.ts +29 -0
  67. package/dist/cjs/biz-components/LotteryShared/PrizePool.js +2 -0
  68. package/dist/cjs/biz-components/LotteryShared/PrizePool.js.map +7 -0
  69. package/dist/cjs/biz-components/LotteryShared/RulesModal.d.ts +56 -0
  70. package/dist/cjs/biz-components/LotteryShared/RulesModal.js +2 -0
  71. package/dist/cjs/biz-components/LotteryShared/RulesModal.js.map +7 -0
  72. package/dist/cjs/biz-components/LotteryShared/ShareModal.d.ts +79 -0
  73. package/dist/cjs/biz-components/LotteryShared/ShareModal.js +2 -0
  74. package/dist/cjs/biz-components/LotteryShared/ShareModal.js.map +7 -0
  75. package/dist/cjs/biz-components/LotteryShared/WinnerModal.d.ts +27 -0
  76. package/dist/cjs/biz-components/LotteryShared/WinnerModal.js +2 -0
  77. package/dist/cjs/biz-components/LotteryShared/WinnerModal.js.map +7 -0
  78. package/dist/cjs/biz-components/LotteryShared/index.d.ts +23 -0
  79. package/dist/cjs/biz-components/LotteryShared/index.js +2 -0
  80. package/dist/cjs/biz-components/LotteryShared/index.js.map +7 -0
  81. package/dist/cjs/biz-components/LotteryShared/types.d.ts +760 -0
  82. package/dist/cjs/biz-components/LotteryShared/types.js +2 -0
  83. package/dist/cjs/biz-components/LotteryShared/types.js.map +7 -0
  84. package/dist/cjs/biz-components/Marquee/Marquee.d.ts +3 -2
  85. package/dist/cjs/biz-components/MarqueeReview/index.d.ts +1 -1
  86. package/dist/cjs/biz-components/MediaEndorsement/index.d.ts +2 -1
  87. package/dist/cjs/biz-components/MediaEndorsement/index.js +2 -2
  88. package/dist/cjs/biz-components/MediaEndorsement/index.js.map +2 -2
  89. package/dist/cjs/biz-components/MediaPlayerBase/index.d.ts +2 -1
  90. package/dist/cjs/biz-components/MediaPlayerMulti/index.d.ts +2 -1
  91. package/dist/cjs/biz-components/MediaPlayerSticky/index.d.ts +7 -1
  92. package/dist/cjs/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.d.ts +2 -1
  93. package/dist/cjs/biz-components/MediaSceneSwitcherV2/index.d.ts +1 -1
  94. package/dist/cjs/biz-components/MediaShelf/index.d.ts +2 -2
  95. package/dist/cjs/biz-components/MediaShelf/index.js +1 -1
  96. package/dist/cjs/biz-components/MediaShelf/index.js.map +3 -3
  97. package/dist/cjs/biz-components/MemberEquity/index.d.ts +3 -1
  98. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +17 -2
  99. package/dist/cjs/biz-components/NavigationSearch/index.d.ts +2 -1
  100. package/dist/cjs/biz-components/ProductCompare/index.d.ts +1 -1
  101. package/dist/cjs/biz-components/ProductHero/ProductHero.d.ts +3 -1
  102. package/dist/cjs/biz-components/ProductLottery/MediaDrawArea.d.ts +4 -0
  103. package/dist/cjs/biz-components/ProductLottery/MediaDrawArea.js +2 -0
  104. package/dist/cjs/biz-components/ProductLottery/MediaDrawArea.js.map +7 -0
  105. package/dist/cjs/biz-components/ProductLottery/index.d.ts +17 -0
  106. package/dist/cjs/biz-components/ProductLottery/index.js +2 -0
  107. package/dist/cjs/biz-components/ProductLottery/index.js.map +7 -0
  108. package/dist/cjs/biz-components/ProductLottery/types.d.ts +363 -0
  109. package/dist/cjs/biz-components/ProductLottery/types.js +2 -0
  110. package/dist/cjs/biz-components/ProductLottery/types.js.map +7 -0
  111. package/dist/cjs/biz-components/ProductNav/ProductNav.d.ts +2 -1
  112. package/dist/cjs/biz-components/PromotionalBar/index.d.ts +1 -1
  113. package/dist/cjs/biz-components/SecondaryBanner/index.d.ts +1 -1
  114. package/dist/cjs/biz-components/SelectStore/index.d.ts +7 -1
  115. package/dist/cjs/biz-components/ShelfDisplay/index.d.ts +3 -1
  116. package/dist/cjs/biz-components/Slogan/index.d.ts +3 -1
  117. package/dist/cjs/biz-components/Spacer/index.d.ts +3 -1
  118. package/dist/cjs/biz-components/Specs/index.d.ts +1 -1
  119. package/dist/cjs/biz-components/Specs/index.js +1 -1
  120. package/dist/cjs/biz-components/Specs/index.js.map +3 -3
  121. package/dist/cjs/biz-components/SpecsComparison/SpecsComparison.d.ts +3 -1
  122. package/dist/cjs/biz-components/Subscribe/index.js +2 -2
  123. package/dist/cjs/biz-components/Subscribe/index.js.map +2 -2
  124. package/dist/cjs/biz-components/TabWithImage/TabWithImage.d.ts +3 -1
  125. package/dist/cjs/biz-components/Tabs/Tabs.d.ts +3 -1
  126. package/dist/cjs/biz-components/Tabs/Tabs.js +1 -1
  127. package/dist/cjs/biz-components/Tabs/Tabs.js.map +2 -2
  128. package/dist/cjs/biz-components/TabsGroup/index.d.ts +3 -1
  129. package/dist/cjs/biz-components/TabsWithMedia/TabsWithMedia.d.ts +3 -1
  130. package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.d.ts +3 -1
  131. package/dist/cjs/biz-components/Title/index.d.ts +1 -1
  132. package/dist/cjs/biz-components/VideoFeature/VideoFeature.d.ts +3 -1
  133. package/dist/cjs/biz-components/WheelLottery/index.d.ts +12 -12
  134. package/dist/cjs/biz-components/WheelLottery/index.js +1 -1
  135. package/dist/cjs/biz-components/WheelLottery/index.js.map +3 -3
  136. package/dist/cjs/biz-components/WheelLottery/types.d.ts +17 -723
  137. package/dist/cjs/biz-components/WheelLottery/types.js +1 -1
  138. package/dist/cjs/biz-components/WheelLottery/types.js.map +3 -3
  139. package/dist/cjs/biz-components/WhyChoose/WhyChoose.d.ts +3 -2
  140. package/dist/cjs/biz-components/index.d.ts +2 -0
  141. package/dist/cjs/biz-components/index.js +1 -1
  142. package/dist/cjs/biz-components/index.js.map +3 -3
  143. package/dist/cjs/shared/Styles.d.ts +7 -21
  144. package/dist/cjs/shared/Styles.js +1 -1
  145. package/dist/cjs/shared/Styles.js.map +3 -3
  146. package/dist/esm/biz-components/AccordionCards/index.d.ts +36 -1
  147. package/dist/esm/biz-components/ActiveShelf/index.d.ts +2 -2
  148. package/dist/esm/biz-components/ActiveShelf/index.js +1 -1
  149. package/dist/esm/biz-components/ActiveShelf/index.js.map +3 -3
  150. package/dist/esm/biz-components/ActivitySchedule/index.d.ts +3 -1
  151. package/dist/esm/biz-components/AnchorNavigation/index.d.ts +1 -1
  152. package/dist/esm/biz-components/AplusDesc/index.d.ts +17 -1
  153. package/dist/esm/biz-components/BrandCardLink/BrandCardLink.d.ts +2 -1
  154. package/dist/esm/biz-components/BrandEquity/BrandEquity.d.ts +2 -1
  155. package/dist/esm/biz-components/Category/index.d.ts +1 -1
  156. package/dist/esm/biz-components/CreativeModule/index.d.ts +7 -1
  157. package/dist/esm/biz-components/DownLoad/index.d.ts +6 -1
  158. package/dist/esm/biz-components/Evaluate/index.d.ts +1 -1
  159. package/dist/esm/biz-components/EventSchedule/index.d.ts +2 -7
  160. package/dist/esm/biz-components/EventSchedule/index.js +1 -1
  161. package/dist/esm/biz-components/EventSchedule/index.js.map +3 -3
  162. package/dist/esm/biz-components/Faq/Faq.d.ts +3 -2
  163. package/dist/esm/biz-components/FeatureCards/FeatureCards.d.ts +3 -1
  164. package/dist/esm/biz-components/FeatureShowcase/FeatureShowcase.d.ts +3 -1
  165. package/dist/esm/biz-components/FeaturedBlogPosts/index.d.ts +1 -6
  166. package/dist/esm/biz-components/FeaturedBlogPosts/index.js +1 -1
  167. package/dist/esm/biz-components/FeaturedBlogPosts/index.js.map +3 -3
  168. package/dist/esm/biz-components/Features/index.d.ts +9 -1
  169. package/dist/esm/biz-components/FootCharger/index.d.ts +7 -1
  170. package/dist/esm/biz-components/FooterNavigation/index.d.ts +2 -1
  171. package/dist/esm/biz-components/GiftBox/index.d.ts +3 -1
  172. package/dist/esm/biz-components/GiftShelf/index.d.ts +3 -1
  173. package/dist/esm/biz-components/GiftTierShelf/index.d.ts +3 -1
  174. package/dist/esm/biz-components/Graphic/index.d.ts +1 -1
  175. package/dist/esm/biz-components/GraphicAttractionBlock/index.d.ts +1 -1
  176. package/dist/esm/biz-components/GraphicMore/index.d.ts +7 -1
  177. package/dist/esm/biz-components/GraphicOverlay/GraphicOverlay.d.ts +10 -2
  178. package/dist/esm/biz-components/HeaderNavigation/index.d.ts +3 -1
  179. package/dist/esm/biz-components/HeroBanner/HeroBanner.d.ts +5 -1
  180. package/dist/esm/biz-components/HeroBanner/HeroBanner.js +1 -1
  181. package/dist/esm/biz-components/HeroBanner/HeroBanner.js.map +2 -2
  182. package/dist/esm/biz-components/ImageOverlayShelf/index.d.ts +2 -2
  183. package/dist/esm/biz-components/ImageOverlayShelf/index.js +1 -1
  184. package/dist/esm/biz-components/ImageOverlayShelf/index.js.map +3 -3
  185. package/dist/esm/biz-components/ImageTextFeature/ImageTextFeature.d.ts +3 -1
  186. package/dist/esm/biz-components/ImageWithText/ImageWithText.d.ts +3 -1
  187. package/dist/esm/biz-components/Ksp/index.d.ts +1 -1
  188. package/dist/esm/biz-components/Listing/components/PaidShipping/index.d.ts +11 -1
  189. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.d.ts +26 -1
  190. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.d.ts +1 -1
  191. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.d.ts +1 -1
  192. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.d.ts +1 -1
  193. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.d.ts +1 -1
  194. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductOptions/index.d.ts +1 -1
  195. package/dist/esm/biz-components/Listing/components/ProductCard/ProductGallery/index.d.ts +1 -1
  196. package/dist/esm/biz-components/Listing/components/ProductCard/ProductPaidShipping/index.d.ts +11 -1
  197. package/dist/esm/biz-components/Listing/components/ProductCard/ProductSummary/index.d.ts +1 -1
  198. package/dist/esm/biz-components/Listing/components/PurchaseBar/index.d.ts +2 -1
  199. package/dist/esm/biz-components/LotteryShared/BaseModal.d.ts +61 -0
  200. package/dist/esm/biz-components/LotteryShared/BaseModal.js +2 -0
  201. package/dist/esm/biz-components/LotteryShared/BaseModal.js.map +7 -0
  202. package/dist/esm/biz-components/LotteryShared/ChanceMethods.d.ts +25 -0
  203. package/dist/esm/biz-components/LotteryShared/ChanceMethods.js +2 -0
  204. package/dist/esm/biz-components/LotteryShared/ChanceMethods.js.map +7 -0
  205. package/dist/esm/biz-components/LotteryShared/ErrorModal.d.ts +47 -0
  206. package/dist/esm/biz-components/LotteryShared/ErrorModal.js +2 -0
  207. package/dist/esm/biz-components/LotteryShared/ErrorModal.js.map +7 -0
  208. package/dist/esm/biz-components/LotteryShared/MyRewardsModal.d.ts +101 -0
  209. package/dist/esm/biz-components/LotteryShared/MyRewardsModal.js +2 -0
  210. package/dist/esm/biz-components/LotteryShared/MyRewardsModal.js.map +7 -0
  211. package/dist/esm/biz-components/LotteryShared/PrizePool.d.ts +29 -0
  212. package/dist/esm/biz-components/LotteryShared/PrizePool.js +2 -0
  213. package/dist/esm/biz-components/LotteryShared/PrizePool.js.map +7 -0
  214. package/dist/esm/biz-components/LotteryShared/RulesModal.d.ts +56 -0
  215. package/dist/esm/biz-components/LotteryShared/RulesModal.js +2 -0
  216. package/dist/esm/biz-components/LotteryShared/RulesModal.js.map +7 -0
  217. package/dist/esm/biz-components/LotteryShared/ShareModal.d.ts +79 -0
  218. package/dist/esm/biz-components/LotteryShared/ShareModal.js +2 -0
  219. package/dist/esm/biz-components/LotteryShared/ShareModal.js.map +7 -0
  220. package/dist/esm/biz-components/LotteryShared/WinnerModal.d.ts +27 -0
  221. package/dist/esm/biz-components/LotteryShared/WinnerModal.js +2 -0
  222. package/dist/esm/biz-components/LotteryShared/WinnerModal.js.map +7 -0
  223. package/dist/esm/biz-components/LotteryShared/index.d.ts +23 -0
  224. package/dist/esm/biz-components/LotteryShared/index.js +2 -0
  225. package/dist/esm/biz-components/LotteryShared/index.js.map +7 -0
  226. package/dist/esm/biz-components/LotteryShared/types.d.ts +760 -0
  227. package/dist/esm/biz-components/LotteryShared/types.js +2 -0
  228. package/dist/esm/biz-components/LotteryShared/types.js.map +7 -0
  229. package/dist/esm/biz-components/Marquee/Marquee.d.ts +3 -2
  230. package/dist/esm/biz-components/MarqueeReview/index.d.ts +1 -1
  231. package/dist/esm/biz-components/MediaEndorsement/index.d.ts +2 -1
  232. package/dist/esm/biz-components/MediaEndorsement/index.js +2 -2
  233. package/dist/esm/biz-components/MediaEndorsement/index.js.map +3 -3
  234. package/dist/esm/biz-components/MediaPlayerBase/index.d.ts +2 -1
  235. package/dist/esm/biz-components/MediaPlayerMulti/index.d.ts +2 -1
  236. package/dist/esm/biz-components/MediaPlayerSticky/index.d.ts +7 -1
  237. package/dist/esm/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.d.ts +2 -1
  238. package/dist/esm/biz-components/MediaSceneSwitcherV2/index.d.ts +1 -1
  239. package/dist/esm/biz-components/MediaShelf/index.d.ts +2 -2
  240. package/dist/esm/biz-components/MediaShelf/index.js +1 -1
  241. package/dist/esm/biz-components/MediaShelf/index.js.map +3 -3
  242. package/dist/esm/biz-components/MemberEquity/index.d.ts +3 -1
  243. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +17 -2
  244. package/dist/esm/biz-components/NavigationSearch/index.d.ts +2 -1
  245. package/dist/esm/biz-components/ProductCompare/index.d.ts +1 -1
  246. package/dist/esm/biz-components/ProductHero/ProductHero.d.ts +3 -1
  247. package/dist/esm/biz-components/ProductLottery/MediaDrawArea.d.ts +4 -0
  248. package/dist/esm/biz-components/ProductLottery/MediaDrawArea.js +2 -0
  249. package/dist/esm/biz-components/ProductLottery/MediaDrawArea.js.map +7 -0
  250. package/dist/esm/biz-components/ProductLottery/index.d.ts +17 -0
  251. package/dist/esm/biz-components/ProductLottery/index.js +2 -0
  252. package/dist/esm/biz-components/ProductLottery/index.js.map +7 -0
  253. package/dist/esm/biz-components/ProductLottery/types.d.ts +363 -0
  254. package/dist/esm/biz-components/ProductLottery/types.js +2 -0
  255. package/dist/esm/biz-components/ProductLottery/types.js.map +7 -0
  256. package/dist/esm/biz-components/ProductNav/ProductNav.d.ts +2 -1
  257. package/dist/esm/biz-components/PromotionalBar/index.d.ts +1 -1
  258. package/dist/esm/biz-components/SecondaryBanner/index.d.ts +1 -1
  259. package/dist/esm/biz-components/SelectStore/index.d.ts +7 -1
  260. package/dist/esm/biz-components/ShelfDisplay/index.d.ts +3 -1
  261. package/dist/esm/biz-components/Slogan/index.d.ts +3 -1
  262. package/dist/esm/biz-components/Spacer/index.d.ts +3 -1
  263. package/dist/esm/biz-components/Specs/index.d.ts +1 -1
  264. package/dist/esm/biz-components/Specs/index.js +1 -1
  265. package/dist/esm/biz-components/Specs/index.js.map +3 -3
  266. package/dist/esm/biz-components/SpecsComparison/SpecsComparison.d.ts +3 -1
  267. package/dist/esm/biz-components/Subscribe/index.js +2 -2
  268. package/dist/esm/biz-components/Subscribe/index.js.map +2 -2
  269. package/dist/esm/biz-components/TabWithImage/TabWithImage.d.ts +3 -1
  270. package/dist/esm/biz-components/Tabs/Tabs.d.ts +3 -1
  271. package/dist/esm/biz-components/Tabs/Tabs.js +1 -1
  272. package/dist/esm/biz-components/Tabs/Tabs.js.map +2 -2
  273. package/dist/esm/biz-components/TabsGroup/index.d.ts +3 -1
  274. package/dist/esm/biz-components/TabsWithMedia/TabsWithMedia.d.ts +3 -1
  275. package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.d.ts +3 -1
  276. package/dist/esm/biz-components/Title/index.d.ts +1 -1
  277. package/dist/esm/biz-components/VideoFeature/VideoFeature.d.ts +3 -1
  278. package/dist/esm/biz-components/WheelLottery/index.d.ts +12 -12
  279. package/dist/esm/biz-components/WheelLottery/index.js +1 -1
  280. package/dist/esm/biz-components/WheelLottery/index.js.map +3 -3
  281. package/dist/esm/biz-components/WheelLottery/types.d.ts +17 -723
  282. package/dist/esm/biz-components/WheelLottery/types.js +1 -1
  283. package/dist/esm/biz-components/WheelLottery/types.js.map +3 -3
  284. package/dist/esm/biz-components/WhyChoose/WhyChoose.d.ts +3 -2
  285. package/dist/esm/biz-components/index.d.ts +2 -0
  286. package/dist/esm/biz-components/index.js +1 -1
  287. package/dist/esm/biz-components/index.js.map +2 -2
  288. package/dist/esm/shared/Styles.d.ts +7 -21
  289. package/dist/esm/shared/Styles.js +1 -1
  290. package/dist/esm/shared/Styles.js.map +3 -3
  291. package/package.json +1 -1
  292. package/style.css +77 -0
@@ -0,0 +1,2 @@
1
+ const n=[{methodKey:"default-share",type:"share",title:"Share on your socials",description:"Share this event on your social media",buttonText:"Redeem now",onLoginRequired:()=>{alert("Please log in to share and get a chance!")},onClick:()=>{console.warn("ChanceMethod.onClick not implemented. Please provide a custom onClick handler.")},disabled:!1},{methodKey:"default-points",type:"points",title:"Spend 100 points",description:"Use your reward points to get a chance",buttonText:"Redeem now",onLoginRequired:()=>{alert("Please log in to share and get a chance!")},onClick:()=>{console.warn("ChanceMethod.onClick not implemented. Please provide a custom onClick handler.")},disabled:!1},{methodKey:"default-refer",type:"refer",title:"Refer a friend",description:"Invite your friends to join",buttonText:"Redeem now",onLoginRequired:()=>{alert("Please log in to share and get a chance!")},onClick:()=>{console.warn("ChanceMethod.onClick not implemented. Please provide a custom onClick handler.")},disabled:!1}];function t(e){return typeof e=="object"&&e!==null&&"prizeKey"in e&&"name"in e&&"image"in e&&typeof e.prizeKey=="string"&&typeof e.name=="string"&&typeof e.image=="object"}function i(e){return typeof e=="object"&&e!==null&&"methodKey"in e&&"type"in e&&"title"in e&&"description"in e&&"onClick"in e&&typeof e.methodKey=="string"&&typeof e.type=="string"&&typeof e.title=="string"&&typeof e.description=="string"&&typeof e.onClick=="function"}function o(e){return typeof e=="object"&&e!==null&&"winningKey"in e&&"userName"in e&&"prizeName"in e&&typeof e.winningKey=="string"&&typeof e.userName=="string"&&typeof e.prizeName=="string"}export{n as DEFAULT_CHANCE_METHODS,i as isChanceMethod,t as isPrize,o as isWinningInfo};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/LotteryShared/types.ts"],
4
+ "sourcesContent": ["/**\n * \u62BD\u5956\u7EC4\u4EF6\u5171\u4EAB\u7C7B\u578B\u5B9A\u4E49\n *\n * \u5305\u542B\u6240\u6709\u62BD\u5956\u7EC4\u4EF6\uFF08WheelLottery, ProductLottery \u7B49\uFF09\u5171\u7528\u7684\u7C7B\u578B\u3001\u63A5\u53E3\u548C\u5E38\u91CF\u3002\n *\n * @module LotterySharedTypes\n * @date 2026-04-07\n */\n\nimport type { Theme, Img } from '../../types/props.js'\n\n// Re-export Theme and Img for convenience\nexport type { Theme, Img }\n\n// ============================================================================\n// \u6838\u5FC3\u5B9E\u4F53\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u5956\u54C1\uFF08Prize\uFF09\n *\n * \u4EE3\u8868\u62BD\u5956\u6D3B\u52A8\u4E2D\u7684\u4E00\u4E2A\u5956\u54C1\uFF0C\u5305\u542B\u663E\u793A\u6240\u9700\u7684\u6240\u6709\u4FE1\u606F\u3002\n *\n * @example\n * ```tsx\n * const prize: Prize = {\n * prizeKey: 'prize-001',\n * name: 'Anker Prime Charger (100W, 3 Ports, GaN)',\n * image: { url: 'https://images.unsplash.com/photo-123', alt: 'Charger' },\n * rank: '1st',\n * price: '$79.99'\n * }\n * ```\n */\nexport interface Prize {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\uFF0C\u7528\u4E8E React key \u548C\u4E2D\u5956\u7ED3\u679C\u5339\u914D\n */\n prizeKey: string\n\n /**\n * \u5956\u54C1\u540D\u79F0\uFF0C\u663E\u793A\u5728\u8F6C\u76D8\u548C\u5956\u6C60\u4E2D\n * @maxLength 100\n */\n name: string\n\n /**\n * \u5956\u54C1\u56FE\u7247\u5BF9\u8C61\uFF0C\u5305\u542B url \u548C alt\n */\n image: Img\n\n /**\n * \u6392\u540D\u6807\u8BC6\uFF0C\u4EC5\u5728 Prize Pool \u4E2D\u663E\u793A\n * @optional\n */\n rank?: '1st' | '2nd' | '3rd'\n\n /**\n * \u4EF7\u683C\u6216\u6298\u6263\u4FE1\u606F\uFF0C\u663E\u793A\u5728\u5956\u6C60\u4E2D\n * @example \"$99.99\" | \"12% Off\"\n * @optional\n */\n price?: string\n}\n\n/**\n * \u4E2D\u5956\u4FE1\u606F\uFF08WinningInfo\uFF09\n *\n * \u4EE3\u8868\u4E00\u6761\u4E2D\u5956\u8BB0\u5F55\uFF0C\u7528\u4E8E\u5E95\u90E8\u6EDA\u52A8\u6761\u5C55\u793A\uFF0C\u8425\u9020\u6D3B\u52A8\u6C1B\u56F4\u3002\n *\n * @example\n * ```tsx\n * const winningInfo: WinningInfo = {\n * winningKey: 'win-001',\n * userName: 'Shuqi***',\n * prizeName: '12% Off Discount',\n * timestamp: 1702800000000\n * }\n * ```\n */\nexport interface WinningInfo {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\n */\n winningKey: string\n\n /**\n * \u7528\u6237\u540D\uFF08\u5DF2\u8131\u654F\uFF09\uFF0C\u5982 \"Shuqi***\"\n * @note \u5047\u8BBE\u4F20\u5165\u7684\u7528\u6237\u540D\u5DF2\u7ECF\u8FC7\u8131\u654F\u5904\u7406\uFF0C\u7EC4\u4EF6\u5185\u90E8\u4E0D\u518D\u5904\u7406\n */\n userName: string\n\n /**\n * \u4E2D\u5956\u5956\u54C1\u540D\u79F0\n */\n prizeName: string\n\n /**\n * \u4E2D\u5956\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n * @optional\n */\n timestamp?: number\n}\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u7C7B\u578B\n */\nexport type ChanceMethodType = 'share' | 'points' | 'refer' | string\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u72B6\u6001\n */\nexport type ChanceMethodStatus = 'pending' | 'completed' | 'used'\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\uFF08ChanceMethod\uFF09\n *\n * \u4EE3\u8868\u4E00\u79CD\u83B7\u53D6\u62BD\u5956\u673A\u4F1A\u7684\u65B9\u5F0F\uFF0C\u652F\u6301\u7075\u6D3B\u914D\u7F6E\uFF08\u5206\u4EAB\u3001\u79EF\u5206\u3001\u63A8\u8350\u7B49\uFF09\u3002\n *\n * @example\n * ```tsx\n * const chanceMethod: ChanceMethod = {\n * methodKey: 'share-001',\n * type: 'share',\n * title: 'Share on your socials',\n * description: 'Share this event on your social media',\n * buttonText: 'Redeem now',\n * onClick: () => console.log('Share clicked'),\n * disabled: false,\n * status: 'pending'\n * }\n * ```\n */\nexport interface ChanceMethod {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\n */\n methodKey: string\n\n /**\n * \u65B9\u5F0F\u7C7B\u578B\uFF0C\u652F\u6301\u9884\u5B9A\u4E49\u7C7B\u578B\uFF08'share', 'points', 'refer'\uFF09\u6216\u81EA\u5B9A\u4E49\u7C7B\u578B\n */\n type: ChanceMethodType\n\n /**\n * \u65B9\u5F0F\u6807\u9898\uFF0C\u5982 \"Share on your socials\"\n */\n title: string\n\n /**\n * \u8BE6\u7EC6\u8BF4\u660E\u6587\u5B57\n */\n description: string\n\n /**\n * \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 \"Redeem now\"\n * @default \"Redeem now\"\n * @optional\n */\n buttonText?: string\n\n completed?: string\n\n used?: string\n\n /**\n * \u672A\u767B\u5F55\u65F6\u70B9\u51FB GO \u6309\u94AE\u7684\u56DE\u8C03\n * @example\n * ```tsx\n * onLoginRequired={() => {\n * // \u6253\u5F00\u767B\u5F55\u5F39\u7A97\u6216\u8DF3\u8F6C\u767B\u5F55\u9875\n * router.push('/login')\n * }}\n * ```\n */\n onLoginRequired?: () => void\n\n /**\n * \u70B9\u51FB\u6309\u94AE\u65F6\u7684\u56DE\u8C03\u51FD\u6570\n * @note \u4E1A\u52A1\u903B\u8F91\uFF08\u5982\u79EF\u5206\u6263\u9664\u3001\u5206\u4EAB\u9A8C\u8BC1\uFF09\u7531\u7236\u7EC4\u4EF6\u5904\u7406\n */\n onClick: () => void\n\n /**\n * \u662F\u5426\u7981\u7528\u8BE5\u65B9\u5F0F\n * @default false\n * @optional\n */\n disabled?: boolean\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u7684\u72B6\u6001\n * - pending: \u672A\u5B8C\u6210\uFF08\u9ED8\u8BA4\u72B6\u6001\uFF09\n * - completed: \u5DF2\u5B8C\u6210/\u5DF2\u83B7\u5F97\n * - used: \u5DF2\u4F7F\u7528\n * @default \"pending\"\n * @optional\n */\n status?: ChanceMethodStatus\n\n /**\n * \u662F\u5426\u663E\u793A\u52A0\u8F7D\u72B6\u6001\n * @default false\n * @optional\n */\n loading?: boolean\n\n /**\n * \u662F\u5426\u5728\u70B9\u51FB\u65F6\u6253\u5F00\u5206\u4EAB\u5F39\u7A97\n * @default false\n * @optional\n */\n openShareModal?: boolean\n}\n\n/**\n * \u7528\u6237\u6570\u636E\uFF08UserData\uFF09\n *\n * \u4EE3\u8868\u5F53\u524D\u7528\u6237\u7684\u62BD\u5956\u76F8\u5173\u6570\u636E\n *\n * @example\n * ```tsx\n * const userData: UserData = {\n * isLoggedIn: true,\n * availableChances: 3,\n * wonPrizes: [\n * { id: 'prize-001', name: 'Charger', image: 'https://...', timestamp: 1702800000000 }\n * ]\n * }\n * ```\n */\nexport interface UserData {\n /**\n * \u7528\u6237\u662F\u5426\u5DF2\u767B\u5F55\n */\n isLoggedIn: boolean\n\n /**\n * \u5F53\u524D\u53EF\u4F7F\u7528\u7684\u62BD\u5956\u6B21\u6570\n * @default 0\n */\n availableChances: number\n\n /**\n * \u603B\u673A\u4F1A\u6570\uFF08\u7528\u4E8E\u663E\u793A\u8FDB\u5EA6\uFF0C\u4F8B\u5982 \"3/5\"\uFF09\n * @default undefined\n * @optional\n */\n totalChances?: number\n\n /**\n * \u5DF2\u83B7\u5F97\u7684\u5956\u54C1\u5217\u8868\n * @optional\n */\n wonPrizes?: Array<Prize & { timestamp?: number }>\n\n /** * \u7528\u6237\u7535\u5B50\u90AE\u7BB1\uFF08\u53EF\u9009\uFF0C\u7528\u4E8E\u53D1\u9001\u4E2D\u5956\u901A\u77E5\u7B49\uFF09\n * @optional\n */\n email?: string\n}\n\n/**\n * \u7F13\u52A8\u51FD\u6570\u7C7B\u578B\n */\nexport type EasingFunction = 'ease-out' | 'ease-in-out' | 'linear'\n\n// ============================================================================\n// \u516C\u5171\u6587\u6848\u914D\u7F6E\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u590D\u5236\u64CD\u4F5C\u76F8\u5173\u6587\u6848\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n * \u7528\u4E8E\u6240\u6709\u5305\u542B\u590D\u5236\u529F\u80FD\u7684\u7EC4\u4EF6\n */\nexport interface CopyTextConfig {\n /**\n * \u590D\u5236\u6309\u94AE\u6587\u672C\n * @default \"COPY\"\n */\n copyText?: string\n\n /**\n * \u590D\u5236\u6210\u529F\u540E\u7684\u6309\u94AE\u6587\u672C\n * @default \"COPIED\"\n */\n copiedText?: string\n}\n\n/**\n * \u4F18\u60E0\u7801\u76F8\u5173\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n * \u7528\u4E8E\u6240\u6709\u5C55\u793A\u4F18\u60E0\u7801\u7684\u7EC4\u4EF6\n */\nexport interface CouponConfig {\n /**\n * \u4EE3\u7801\u6587\u672C\u524D\u7F00\n * @default \"CODE:\"\n */\n codeText?: string\n\n /**\n * \u4F18\u60E0\u7801\n */\n couponCode?: string\n\n /**\n * \u4F18\u60E0\u7801\u8FC7\u671F\u65F6\u95F4\n */\n expiresAt?: string\n\n /**\n * \u4F18\u60E0\u5238\u6298\u6263\u6587\u672C\uFF08\u4F8B\u5982 \"20%\"\uFF09\n */\n couponDiscount?: string\n\n /**\n * \u4F18\u60E0\u5238\u5355\u4F4D\u6587\u672C\n * @default \"Off\"\n */\n couponUnit?: string\n}\n\n/**\n * \u5956\u52B1\u65F6\u95F4\u6587\u6848\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n */\nexport interface PrizeTimeTextConfig {\n /**\n * \u5956\u52B1\u65F6\u95F4\u6587\u672C\u524D\u7F00\n * @default \"Prize time:\"\n */\n prizeText?: string\n}\n\n/**\n * \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08WinnerModalConfig\uFF09\n *\n * \u7528\u4E8E\u914D\u7F6E\u4E2D\u5956\u5F39\u7A97\u7684\u5C55\u793A\u5185\u5BB9\uFF0C\u901A\u5E38\u7531\u62BD\u5956\u63A5\u53E3\u8FD4\u56DE\u63D0\u4F9B\n *\n * @example\n * ```tsx\n * const winnerModalConfig: WinnerModalConfig = {\n * title: 'Congratulations!',\n * prizeTitle: 'Anker Prime Charger',\n * prizeImage: 'https://...',\n * prizeDescription: 'High-speed charging for all your devices',\n * learnMoreUrl: 'https://...',\n * learnMoreText: 'View Details',\n * couponCode: 'ANKER2024',\n * expiresAt: '2024-12-31',\n * couponDiscount: '20%',\n * couponUnit: 'Off',\n * confirmText: 'Claim Now'\n * }\n * ```\n */\nexport interface WinnerModalConfig extends CopyTextConfig, CouponConfig, PrizeTimeTextConfig {\n /**\n * \u4E2D\u5956\u5F39\u7A97\u6807\u9898\n * @default \"You Have Won\"\n * @optional\n */\n title?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u6807\u9898\uFF08\u4F18\u5148\u7EA7\u9AD8\u4E8E prize.name\uFF09\n * @optional\n */\n prizeTitle?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u56FE\u7247 URL\uFF08\u4F18\u5148\u7EA7\u9AD8\u4E8E prize.image\uFF09\n * @optional\n */\n prizeImage?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u8BE6\u60C5\u63CF\u8FF0\n * @optional\n */\n prizeDescription?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97 Learn More \u94FE\u63A5\n * @optional\n */\n learnMoreUrl?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97 Learn More \u6309\u94AE\u6587\u672C\n * @default \"Learn More\"\n * @optional\n */\n learnMoreText?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u786E\u8BA4\u6309\u94AE\u6587\u672C\n * @default \"Okay, Got It\"\n * @optional\n */\n confirmText?: string\n\n /** \u786E\u8BA4\u6309\u94AE\u8DF3\u8F6C\u94FE\u63A5\uFF0C\u914D\u7F6E\u540E\u70B9\u51FB\u6309\u94AE\u5C06\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00\u6B64\u94FE\u63A5 @optional */\n confirmUrl?: string\n}\n\n/**\n * Rules \u5F39\u7A97\u914D\u7F6E\n *\n * @example\n * ```tsx\n * rulesModalConfig={{\n * rulesData: [\n * { item: '$100 instead of $200, 10 tickets/day.' },\n * { item: '$100 for $120, 50 tickets/day.' }\n * ],\n * rulesText: 'Game Rules',\n * rulesTitle: 'Activity Rules'\n * }}\n * ```\n */\nexport interface RulesModalConfig {\n /**\n * \u89C4\u5219\u6570\u636E\u5217\u8868\n * @optional\n */\n rulesData?: Array<{\n /**\n * \u89C4\u5219\u9879\u5185\u5BB9\n */\n item: string\n }>\n\n /**\n * Rules \u6309\u94AE\u6587\u672C\n * @default \"Rules\"\n * @optional\n */\n rulesText?: string\n\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Rules\"\n * @optional\n */\n rulesTitle?: string\n}\n\n/**\n * My Rewards \u5F39\u7A97\u914D\u7F6E\n *\n * @example\n * ```tsx\n * myRewardsModalConfig={{\n * rewardsData: [\n * {\n * id: '1',\n * name: 'Anker Charger',\n * code: 'ANKER2024',\n * status: 'Available',\n * prizeTime: '2024-01-01',\n * showCopyCode: true\n * }\n * ],\n * myRewardsText: 'My Prizes',\n * codeText: 'CODE:',\n * copyText: 'COPY',\n * prizeText: 'Prize time:',\n * emptyText: 'No rewards yet'\n * }}\n * ```\n */\nexport interface MyRewardsModalConfig extends CopyTextConfig, PrizeTimeTextConfig {\n /**\n * \u5956\u52B1\u6570\u636E\u5217\u8868\n * @optional\n */\n rewardsData?: Array<{\n /**\n * \u5956\u52B1 ID\n */\n id: string\n /**\n * \u5956\u52B1\u540D\u79F0\n */\n name: string\n /**\n * \u4F18\u60E0\u7801\uFF08\u53EF\u9009\uFF09\n */\n code?: string\n /**\n * \u72B6\u6001\n */\n status: 'Available' | 'Expired' | 'Used'\n /**\n * \u5956\u52B1\u65F6\u95F4\n */\n prizeTime?: string\n /**\n * \u662F\u5426\u53EF\u590D\u5236\u7801\n */\n showCopyCode?: boolean\n }>\n\n /**\n * My Rewards \u6309\u94AE\u6587\u672C\n * @default \"My Rewards\"\n * @optional\n */\n myRewardsText?: string\n\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"My Rewards\"\n * @optional\n */\n myRewardsTitle?: string\n\n /**\n * \u4EE3\u7801\u6587\u672C\u524D\u7F00\n * @default \"CODE:\"\n * @optional\n */\n codeText?: string\n\n /**\n * \u7A7A\u72B6\u6001\u63D0\u793A\u6587\u672C\n * @default \"No rewards yet\"\n * @optional\n */\n emptyText?: string\n}\n\n/**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\n * @example\n * ```tsx\n * errorModalConfig={{\n * title: 'Oops!',\n * message: 'Something went wrong during the lottery process.',\n * confirmText: 'OK, I get'\n * }}\n * ```\n */\nexport interface ErrorModalConfig {\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Oops!\"\n * @optional\n */\n title?: string\n /**\n * \u9519\u8BEF\u6D88\u606F\u5185\u5BB9\n * @default \"Something went wrong during the lottery process.\"\n * @optional\n */\n message?: string\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u672C\n * @default \"OK, I get\"\n * @optional\n */\n confirmText?: string\n}\n\n/**\n * \u793E\u4EA4\u5E73\u53F0\u7C7B\u578B\n */\nexport type SocialPlatform = 'facebook' | 'twitter' | 'instagram' | 'linkedin' | 'tiktok' | 'youtube'\n\n/**\n * \u793E\u4EA4\u5E73\u53F0\u914D\u7F6E\n */\nexport interface SharePlatformConfig {\n /**\n * \u5E73\u53F0\u7C7B\u578B\n */\n platform: SocialPlatform\n\n /**\n * \u5E73\u53F0\u540D\u79F0\n */\n name: string\n\n /**\n * \u5206\u4EAB URL\uFF08\u53EF\u9009\uFF0C\u5982\u679C\u63D0\u4F9B\u5219\u76F4\u63A5\u8DF3\u8F6C\uFF09\n */\n url?: string\n\n /**\n * \u70B9\u51FB\u56DE\u8C03\uFF08\u5982\u679C\u63D0\u4F9B url \u5219\u6B64\u56DE\u8C03\u4F1A\u5728\u8DF3\u8F6C\u524D\u6267\u884C\uFF09\n */\n onClick?: () => void\n\n /**\n * \u662F\u5426\u7981\u7528\n */\n disabled?: boolean\n}\n\n/**\n * \u5206\u4EAB\u5F39\u7A97\u914D\u7F6E\n */\nexport interface ShareModalConfig {\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Share to Get More Chances\"\n */\n title?: string\n\n /**\n * \u526F\u6807\u9898/\u5F15\u5BFC\u6587\u6848\n * @default \"Share to Play Again Keep Trying! You Could Still Win Big!\"\n */\n subtitle?: string\n\n /**\n * \u5E95\u90E8\u63D0\u793A\u6587\u6848\n * @default \"Note: Maximum of 3 times per participant.\"\n */\n note?: string\n\n /**\n * \u793E\u4EA4\u5E73\u53F0\u914D\u7F6E\u5217\u8868\n */\n platforms?: SharePlatformConfig[]\n\n /**\n * \u5206\u4EAB\u6210\u529F\u56DE\u8C03\n */\n onShareSuccess?: (platform: SocialPlatform) => void\n}\n\n// ============================================================================\n// \u5B50\u7EC4\u4EF6 Props \u63A5\u53E3\n// ============================================================================\n\n/**\n * PrizePool \u5956\u54C1\u6C60\u7EC4\u4EF6 Props\n */\nexport interface PrizePoolProps {\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @optional\n */\n theme?: Theme\n\n /**\n * \u5956\u54C1\u5217\u8868(\u901A\u5E38\u662F\u5168\u90E8 8 \u4E2A\u5956\u54C1)\n */\n prizes: Prize[]\n\n /**\n * \u6807\u9898\u6587\u672C\n * @default \"Prize Pool\"\n */\n title?: string\n\n /**\n * \u4E2D\u5956\u4EBA\u540D\u5355\u6570\u636E\n * @optional\n */\n winningInfos?: WinningInfo[]\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n}\n\n/** \u6D3B\u52A8\u673A\u5236\u6A21\u5F0F */\nexport type ChanceMechanismType = 'methods' | 'input'\n\n/** \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u4EC5 mechanismType='input' \u65F6\u4F7F\u7528\uFF09 */\nexport interface ChanceInputConfig {\n /** \u8F93\u5165\u6846\u5360\u4F4D\u6587\u672C @default \"Enter your order number\" */\n placeholder?: string\n /** \u63D0\u4EA4\u6309\u94AE\u6587\u6848 @default \"Spin and Win\" */\n submitText?: string\n /** \u8F93\u5165\u503C\u63D0\u4EA4\u56DE\u8C03 */\n onSubmit?: (value: string) => void | Promise<void>\n /** \u662F\u5426\u6B63\u5728\u63D0\u4EA4 */\n isSubmitting?: boolean\n /** \u8F93\u5165\u6846\u7C7B\u578B @default \"text\" */\n inputType?: 'text' | 'email' | 'number'\n /** \u9A8C\u8BC1\u6B63\u5219 (\u53EF\u9009) */\n validationPattern?: string\n /** \u9A8C\u8BC1\u5931\u8D25\u63D0\u793A\u6587\u6848 */\n validationErrorText?: string\n /** \u8F93\u5165\u6846\u9ED8\u8BA4\u503C\uFF08\u5982\u767B\u5F55\u7528\u6237 email\uFF0C\u652F\u6301\u5F02\u6B65\u586B\u5145\uFF09 @optional */\n defaultValue?: string\n}\n\n/**\n * ChanceMethods \u83B7\u53D6\u673A\u4F1A\u7EC4\u4EF6 Props\n */\nexport interface ChanceMethodsProps {\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @optional\n */\n theme?: Theme\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u5217\u8868\n */\n methods: ChanceMethod[]\n\n /**\n * \u6807\u9898\u6587\u672C\n * @default \"Want more chances to win?\"\n */\n title?: string\n\n /**\n * \u526F\u6807\u9898(\u53EF\u9009)\n */\n subtitle?: string\n\n /**\n * \u5E95\u90E8\u63D0\u793A\u6587\u672C(\u53EF\u9009)\n */\n footerNote?: string\n\n /**\n * \u767B\u5F55\u7528\u6237\u6570\u636E\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n userData?: UserData\n\n /**\n * \u6253\u5F00\u5206\u4EAB\u5F39\u7A97\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n onOpenShareModal?: () => void\n\n /**\n * \u5FBD\u7AE0\u6587\u6848\n * @default \"Chance +1\"\n */\n chanceBadgeText?: string\n\n /**\n * \u5DF2\u5B8C\u6210\u72B6\u6001\u6587\u6848\n * @default \"Completed\"\n */\n completedText?: string\n\n /**\n * \u5DF2\u4F7F\u7528\u72B6\u6001\u6587\u6848\n * @default \"Used\"\n */\n usedText?: string\n\n /**\n * \u52A0\u8F7D\u4E2D\u6587\u6848\n * @default \"Loading...\"\n */\n loadingText?: string\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n\n /** \u6D3B\u52A8\u673A\u5236\u6A21\u5F0F @default 'methods' */\n mechanismType?: ChanceMechanismType\n /** \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u4EC5 mechanismType='input' \u65F6\u4F7F\u7528\uFF09 */\n inputConfig?: ChanceInputConfig\n}\n\n/**\n * WinnerModal \u4E2D\u5956\u5F39\u7A97\u7EC4\u4EF6 Props\n */\nexport interface WinnerModalProps extends CopyTextConfig, CouponConfig, PrizeTimeTextConfig {\n /**\n * \u662F\u5426\u663E\u793A\u5F39\u7A97\n */\n isOpen: boolean\n\n /**\n * \u4E2D\u5956\u5956\u54C1\u4FE1\u606F\n */\n prize: Prize | null\n\n /**\n * \u5F39\u7A97\u6807\u9898\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"You Have Won\"\uFF09\n */\n title?: string\n\n /**\n * \u5956\u54C1\u6807\u9898\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u4F7F\u7528 prize.name\uFF09\n */\n prizeTitle?: string\n\n /**\n * \u5956\u54C1\u56FE\u7247 URL\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u4F7F\u7528 prize.image\uFF09\n */\n prizeImage?: string\n\n /**\n * \u5956\u54C1\u8BE6\u60C5\u63CF\u8FF0\uFF08\u53EF\u9009\uFF09\n */\n prizeDescription?: string\n\n /**\n * Learn More \u94FE\u63A5\uFF08\u53EF\u9009\uFF09\n */\n learnMoreUrl?: string\n\n /**\n * Learn More \u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"Learn More\"\uFF09\n */\n learnMoreText?: string\n\n /**\n * \u590D\u5236\u7801\u70B9\u51FB\u56DE\u8C03\n */\n onCopyCode?: (code: string) => void\n\n /**\n * \u5173\u95ED\u5F39\u7A97\u56DE\u8C03\n */\n onClose: () => void\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"Okay, Got It\"\uFF09\n */\n confirmText?: string\n\n /** \u786E\u8BA4\u6309\u94AE\u8DF3\u8F6C\u94FE\u63A5 @optional */\n confirmUrl?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u70B9\u51FB\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n */\n onConfirm?: () => void\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u914D\u7F6E\n// ============================================================================\n\n/**\n * \u9ED8\u8BA4\u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\uFF083\u79CD\uFF09\n * @note \u7236\u7EC4\u4EF6\u9700\u8981\u8986\u76D6 onClick \u56DE\u8C03\u4EE5\u5B9E\u73B0\u5177\u4F53\u4E1A\u52A1\u903B\u8F91\n */\nexport const DEFAULT_CHANCE_METHODS: ChanceMethod[] = [\n {\n methodKey: 'default-share',\n type: 'share',\n title: 'Share on your socials',\n description: 'Share this event on your social media',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n {\n methodKey: 'default-points',\n type: 'points',\n title: 'Spend 100 points',\n description: 'Use your reward points to get a chance',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n {\n methodKey: 'default-refer',\n type: 'refer',\n title: 'Refer a friend',\n description: 'Invite your friends to join',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n]\n\n// ============================================================================\n// \u7C7B\u578B\u5B88\u536B\n// ============================================================================\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 Prize \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 Prize\n */\nexport function isPrize(value: unknown): value is Prize {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'prizeKey' in value &&\n 'name' in value &&\n 'image' in value &&\n typeof (value as Prize).prizeKey === 'string' &&\n typeof (value as Prize).name === 'string' &&\n typeof (value as Prize).image === 'object'\n )\n}\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 ChanceMethod \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 ChanceMethod\n */\nexport function isChanceMethod(value: unknown): value is ChanceMethod {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'methodKey' in value &&\n 'type' in value &&\n 'title' in value &&\n 'description' in value &&\n 'onClick' in value &&\n typeof (value as ChanceMethod).methodKey === 'string' &&\n typeof (value as ChanceMethod).type === 'string' &&\n typeof (value as ChanceMethod).title === 'string' &&\n typeof (value as ChanceMethod).description === 'string' &&\n typeof (value as ChanceMethod).onClick === 'function'\n )\n}\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 WinningInfo \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 WinningInfo\n */\nexport function isWinningInfo(value: unknown): value is WinningInfo {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'winningKey' in value &&\n 'userName' in value &&\n 'prizeName' in value &&\n typeof (value as WinningInfo).winningKey === 'string' &&\n typeof (value as WinningInfo).userName === 'string' &&\n typeof (value as WinningInfo).prizeName === 'string'\n )\n}\n\n// ============================================================================\n// \u5BFC\u51FA\u7C7B\u578B\u522B\u540D\uFF08\u7528\u4E8E\u7B80\u5316\u4F7F\u7528\uFF09\n// ============================================================================\n\n/**\n * \u62BD\u5956\u56DE\u8C03\u51FD\u6570\u7C7B\u578B\n */\nexport type OnSpinEndCallback = (prize: Prize) => void\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u70B9\u51FB\u56DE\u8C03\u51FD\u6570\u7C7B\u578B\n */\nexport type OnChanceMethodClick = () => void\n"],
5
+ "mappings": "AAm1BO,MAAMA,EAAyC,CACpD,CACE,UAAW,gBACX,KAAM,QACN,MAAO,wBACP,YAAa,wCACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,EACA,CACE,UAAW,iBACX,KAAM,SACN,MAAO,mBACP,YAAa,yCACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,EACA,CACE,UAAW,gBACX,KAAM,QACN,MAAO,iBACP,YAAa,8BACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,CACF,EAWO,SAASC,EAAQC,EAAgC,CACtD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,aAAcA,GACd,SAAUA,GACV,UAAWA,GACX,OAAQA,EAAgB,UAAa,UACrC,OAAQA,EAAgB,MAAS,UACjC,OAAQA,EAAgB,OAAU,QAEtC,CAOO,SAASC,EAAeD,EAAuC,CACpE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,cAAeA,GACf,SAAUA,GACV,UAAWA,GACX,gBAAiBA,GACjB,YAAaA,GACb,OAAQA,EAAuB,WAAc,UAC7C,OAAQA,EAAuB,MAAS,UACxC,OAAQA,EAAuB,OAAU,UACzC,OAAQA,EAAuB,aAAgB,UAC/C,OAAQA,EAAuB,SAAY,UAE/C,CAOO,SAASE,EAAcF,EAAsC,CAClE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,eAAgBA,GAChB,aAAcA,GACd,cAAeA,GACf,OAAQA,EAAsB,YAAe,UAC7C,OAAQA,EAAsB,UAAa,UAC3C,OAAQA,EAAsB,WAAc,QAEhD",
6
+ "names": ["DEFAULT_CHANCE_METHODS", "isPrize", "value", "isChanceMethod", "isWinningInfo"]
7
+ }
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
- import type { MarqueeItemProps, MarqueeImageContentProps, MarqueeTextContentProps } from './type.js';
2
+ import type { MarqueeProps, MarqueeItemProps, MarqueeImageContentProps, MarqueeTextContentProps } from './type.js';
3
+ import { type SwiperRef } from 'swiper/react';
3
4
  declare const MarqueeItem: {
4
5
  ({ data, configuration }: MarqueeItemProps): import("react/jsx-runtime").JSX.Element;
5
6
  displayName: string;
@@ -9,6 +10,6 @@ declare const MarqueeImageContent: {
9
10
  displayName: string;
10
11
  };
11
12
  declare const MarqueeTextContent: React.ForwardRefExoticComponent<MarqueeTextContentProps & React.RefAttributes<HTMLDivElement>>;
12
- declare const _default: any;
13
+ declare const _default: React.ForwardRefExoticComponent<Omit<MarqueeProps & React.RefAttributes<SwiperRef>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<SwiperRef>>;
13
14
  export default _default;
14
15
  export { MarqueeItem, MarqueeImageContent, MarqueeTextContent };
@@ -33,5 +33,5 @@ export interface MarqueeReviewProps extends React.HTMLAttributes<HTMLElement> {
33
33
  /** 评论数据 */
34
34
  data: MarqueeReviewData;
35
35
  }
36
- declare const _default: any;
36
+ declare const _default: React.ForwardRefExoticComponent<Omit<MarqueeReviewProps, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>>;
37
37
  export default _default;
@@ -1,5 +1,6 @@
1
+ import * as React from 'react';
1
2
  import 'swiper/css/pagination';
2
3
  import type { MediaEndorsementProps, MediaEndorsementData, MediaEndorsementItem, MediaEndorsementSemanticName } from './types.js';
3
- declare const _default: any;
4
+ declare const _default: React.ForwardRefExoticComponent<Omit<MediaEndorsementProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<HTMLDivElement>>;
4
5
  export default _default;
5
6
  export type { MediaEndorsementProps, MediaEndorsementData, MediaEndorsementItem, MediaEndorsementSemanticName };
@@ -1,4 +1,4 @@
1
- "use client";import{jsx as r,jsxs as u}from"react/jsx-runtime";import*as b from"react";import{cva as z}from"class-variance-authority";import{Swiper as g,SwiperSlide as w}from"swiper/react";import{FreeMode as C,Mousewheel as B,Pagination as L}from"swiper/modules";import{useMediaQuery as R}from"react-responsive";import"swiper/css/pagination";import{cn as i}from"../../helpers/index.js";import{Heading as h,Text as V}from"../../index.js";import{withLayout as j}from"../../shared/Styles.js";const v=3;function A(d,t){const n=[];for(let o=0;o<d.length;o+=t)n.push(d.slice(o,o+t));return n}const H=z("rounded-box lg-desktop:h-[240px] desktop:px-6 bg-container-secondary-0 flex h-[200px] flex-col justify-start gap-[26px] p-4",{variants:{theme:{light:"",dark:""},rounded:{true:"rounded-card",false:""}},defaultVariants:{theme:"light",rounded:!1}}),x=b.forwardRef(({className:d,classNames:t={},data:n,onItemClick:o,...M},k)=>{const{title:l,subtitle:m,items:p,theme:f="light",rounded:y=!1,layout:E="grid"}=n,S=R({query:"(max-width: 767px)"}),N=b.useCallback((e,a)=>s=>{o?.(e,a,s)},[o]),c=(e,a)=>u("div",{className:i("media-endorsement-card text-info-primary",H({theme:f,rounded:y}),t.card),onClick:N(e,a),"aria-label":e.mediaName?`${e.mediaName} endorsement`:void 0,children:[r("div",{className:i("media-endorsement-card-icon rounded-full","lg-desktop::size-14 flex size-12 items-center justify-center overflow-hidden",t.cardIcon),children:r("img",{src:e.icon.url,alt:e.icon.alt||e.mediaName||"Media logo",className:"size-full object-contain",loading:"lazy"})}),r(h,{size:2,as:"h6",className:i("media-endorsement-card-quote line-clamp-4",t.cardQuote),children:e.text})]},a),I=()=>{const e=A(p,v);return r(g,{className:i("media-endorsement-mobile-swiper","w-full !overflow-visible pb-8",t.carousel),modules:[L],slidesPerView:1,spaceBetween:12,pagination:{clickable:!0,bulletClass:"media-endorsement-bullet",bulletActiveClass:"media-endorsement-bullet-active"},children:e.map((a,s)=>r(w,{className:"!h-auto",children:r("div",{className:"flex flex-col gap-3",children:a.map((T,D)=>{const P=s*v+D;return c(T,P)})})},s))})};return u("div",{ref:k,className:i("media-endorsement-root text-info-primary","w-full",d,t.root,{"aiui-dark":f==="dark"}),...M,children:[r("style",{children:`
1
+ "use client";import{jsx as r,jsxs as u}from"react/jsx-runtime";import*as b from"react";import{cva as C}from"class-variance-authority";import{Swiper as g,SwiperSlide as h}from"swiper/react";import{FreeMode as B,Mousewheel as L,Pagination as R}from"swiper/modules";import{useMediaQuery as V}from"react-responsive";import"swiper/css/pagination";import{cn as o}from"../../helpers/index.js";import{Heading as w,Text as z}from"../../index.js";import{withLayout as A}from"../../shared/Styles.js";const x=3;function H(d,t){const n=[];for(let i=0;i<d.length;i+=t)n.push(d.slice(i,i+t));return n}const _=C("rounded-box lg-desktop:h-[240px] desktop:px-6 bg-container-secondary-0 flex h-[200px] flex-col justify-start gap-[26px] p-4",{variants:{theme:{light:"",dark:""},rounded:{true:"rounded-card",false:""}},defaultVariants:{theme:"light",rounded:!1}}),v=b.forwardRef(({className:d,classNames:t={},data:n,onItemClick:i,...M},k)=>{const{title:l,subtitle:m,items:p,theme:f="light",rounded:y=!1,layout:E="grid"}=n,S=V({query:"(max-width: 767px)"}),N=b.useCallback((e,a)=>s=>{i?.(e,a,s)},[i]),c=(e,a)=>u("div",{className:o("media-endorsement-card text-info-primary",_({theme:f,rounded:y}),t.card),onClick:N(e,a),"aria-label":e.mediaName?`${e.mediaName} endorsement`:void 0,children:[r("div",{className:o("media-endorsement-card-icon rounded-full","lg-desktop::h-14 flex h-12 w-auto items-center overflow-hidden",t.cardIcon),children:r("img",{src:e.icon.url,alt:e.icon.alt||e.mediaName||"Media logo",className:"lg-desktop::h-12 h-[42px] w-auto object-contain",loading:"lazy"})}),r(w,{size:2,as:"h6",className:o("media-endorsement-card-quote line-clamp-4",t.cardQuote),children:e.text})]},a),I=()=>{const e=H(p,x);return r(g,{className:o("media-endorsement-mobile-swiper","w-full !overflow-visible pb-8",t.carousel),modules:[R],slidesPerView:1,spaceBetween:12,pagination:{clickable:!0,bulletClass:"media-endorsement-bullet",bulletActiveClass:"media-endorsement-bullet-active"},children:e.map((a,s)=>r(h,{className:"!h-auto",children:r("div",{className:"flex flex-col gap-3",children:a.map((T,D)=>{const P=s*x+D;return c(T,P)})})},s))})};return u("div",{ref:k,className:o("media-endorsement-root text-info-primary","w-full",d,t.root,{"aiui-dark":f==="dark"}),...M,children:[r("style",{children:`
2
2
  .media-endorsement-bullet {
3
3
  display: inline-block;
4
4
  width: 8px;
@@ -19,5 +19,5 @@
19
19
  right: 0;
20
20
  text-align: center;
21
21
  }
22
- `}),(l||m)&&u("div",{className:i("media-endorsement-header mb-6",t.header),children:[l&&r(h,{as:"h2",size:4,html:l,className:i("media-endorsement-title",t.title)}),m&&r(V,{as:"p",size:3,className:i("",t?.subtitle),html:m})]}),E==="carousel"?r(g,{className:i("media-endorsement-carousel","w-full !overflow-visible",t.carousel),modules:[C,B],freeMode:!0,mousewheel:{forceToAxis:!0},slidesPerView:"auto",spaceBetween:12,breakpoints:{768:{spaceBetween:16}},children:p.map((e,a)=>r(w,{className:"tablet:!w-[320px] laptop:!w-[360px] desktop:!w-[404px] !w-[280px]",children:c(e,a)},a))}):S?I():r("div",{className:i("media-endorsement-grid","laptop:grid-cols-2 laptop:gap-4 desktop:grid-cols-3 tablet:grid-cols-2 grid grid-cols-1 gap-3",t.grid),children:p.map((e,a)=>c(e,a))})]})});x.displayName="MediaEndorsement";var K=j(x);export{K as default};
22
+ `}),(l||m)&&u("div",{className:o("media-endorsement-header mb-6",t.header),children:[l&&r(w,{as:"h2",size:4,html:l,className:o("media-endorsement-title",t.title)}),m&&r(z,{as:"p",size:3,className:o("",t?.subtitle),html:m})]}),E==="carousel"?r(g,{className:o("media-endorsement-carousel","w-full !overflow-visible",t.carousel),modules:[B,L],freeMode:!0,mousewheel:{forceToAxis:!0},slidesPerView:"auto",spaceBetween:12,breakpoints:{768:{spaceBetween:16}},children:p.map((e,a)=>r(h,{className:"tablet:!w-[320px] laptop:!w-[360px] desktop:!w-[404px] !w-[280px]",children:c(e,a)},a))}):S?I():r("div",{className:o("media-endorsement-grid","laptop:grid-cols-2 laptop:gap-4 desktop:grid-cols-3 tablet:grid-cols-2 grid grid-cols-1 gap-3",t.grid),children:p.map((e,a)=>c(e,a))})]})});v.displayName="MediaEndorsement";var K=A(v);export{K as default};
23
23
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/MediaEndorsement/index.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cva } from 'class-variance-authority'\nimport { Swiper, SwiperSlide } from 'swiper/react'\nimport { FreeMode, Mousewheel, Pagination } from 'swiper/modules'\nimport { useMediaQuery } from 'react-responsive'\nimport 'swiper/css/pagination'\nimport { cn } from '../../helpers/index.js'\nimport type {\n MediaEndorsementProps,\n MediaEndorsementData,\n MediaEndorsementItem,\n MediaEndorsementSemanticName,\n} from './types.js'\nimport { Heading, Text } from '../../index.js'\nimport { withLayout } from '../../shared/Styles.js'\n\nconst MOBILE_ITEMS_PER_SLIDE = 3\n\n// Helper to chunk array into groups\nfunction chunkArray<T>(array: T[], size: number): T[][] {\n const result: T[][] = []\n for (let i = 0; i < array.length; i += size) {\n result.push(array.slice(i, i + size))\n }\n return result\n}\n\n/**\n * \u5361\u7247\u5BB9\u5668\u53D8\u4F53\n */\nconst cardVariants = cva(\n 'rounded-box lg-desktop:h-[240px] desktop:px-6 bg-container-secondary-0 flex h-[200px] flex-col justify-start gap-[26px] p-4',\n {\n variants: {\n theme: {\n light: '',\n dark: '',\n },\n rounded: {\n true: 'rounded-card',\n false: '',\n },\n },\n defaultVariants: {\n theme: 'light',\n rounded: false,\n },\n }\n)\n\n/**\n * MediaEndorsement - \u5A92\u4F53\u80CC\u4E66\n *\n * @description \u5A92\u4F53\u80CC\u4E66\u7EC4\u4EF6\u7684\u4F5C\u7528\u662F\u901A\u8FC7\u5C55\u793A\u7B2C\u4E09\u65B9\u5A92\u4F53\u7684\u8BC4\u4EF7\u6216\u62A5\u9053\uFF0C\u63D0\u5347\u54C1\u724C\u6216\u4EA7\u54C1\u7684\u53EF\u4FE1\u5EA6\u548C\u5F71\u54CD\u529B\n */\nconst MediaEndorsement = React.forwardRef<HTMLDivElement, MediaEndorsementProps>(\n ({ className, classNames = {}, data, onItemClick, ...props }, ref) => {\n const { title, subtitle, items, theme = 'light', rounded = false, layout = 'grid' } = data\n const isMobile = useMediaQuery({ query: '(max-width: 767px)' })\n\n const handleCardClick = React.useCallback(\n (item: MediaEndorsementItem, index: number) => (event: React.MouseEvent) => {\n onItemClick?.(item, index, event)\n },\n [onItemClick]\n )\n\n const renderCard = (item: MediaEndorsementItem, index: number) => (\n <div\n key={index}\n className={cn('media-endorsement-card text-info-primary', cardVariants({ theme, rounded }), classNames.card)}\n onClick={handleCardClick(item, index)}\n aria-label={item.mediaName ? `${item.mediaName} endorsement` : undefined}\n >\n {/* \u5A92\u4F53 Logo */}\n <div\n className={cn(\n 'media-endorsement-card-icon rounded-full',\n 'lg-desktop::size-14 flex size-12 items-center justify-center overflow-hidden',\n classNames.cardIcon\n )}\n >\n <img\n src={item.icon.url}\n alt={item.icon.alt || item.mediaName || 'Media logo'}\n className=\"size-full object-contain\"\n loading=\"lazy\"\n />\n </div>\n\n {/* \u5F15\u7528\u6587\u6848 */}\n <Heading size={2} as={'h6'} className={cn('media-endorsement-card-quote line-clamp-4', classNames.cardQuote)}>\n {item.text}\n </Heading>\n </div>\n )\n\n // Mobile swiper for grid layout\n const renderMobileGridSwiper = () => {\n const chunkedItems = chunkArray(items, MOBILE_ITEMS_PER_SLIDE)\n return (\n <Swiper\n className={cn('media-endorsement-mobile-swiper', 'w-full !overflow-visible pb-8', classNames.carousel)}\n modules={[Pagination]}\n slidesPerView={1}\n spaceBetween={12}\n pagination={{\n clickable: true,\n bulletClass: 'media-endorsement-bullet',\n bulletActiveClass: 'media-endorsement-bullet-active',\n }}\n >\n {chunkedItems.map((group, slideIndex) => (\n <SwiperSlide key={slideIndex} className=\"!h-auto\">\n <div className=\"flex flex-col gap-3\">\n {group.map((item, itemIndex) => {\n const globalIndex = slideIndex * MOBILE_ITEMS_PER_SLIDE + itemIndex\n return renderCard(item, globalIndex)\n })}\n </div>\n </SwiperSlide>\n ))}\n </Swiper>\n )\n }\n\n return (\n <div\n ref={ref}\n className={cn('media-endorsement-root text-info-primary', 'w-full', className, classNames.root, {\n 'aiui-dark': theme === 'dark',\n })}\n {...props}\n >\n <style>{`\n .media-endorsement-bullet {\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #D9D9D9;\n margin: 0 4px;\n cursor: pointer;\n transition: background-color 0.3s ease;\n }\n .media-endorsement-bullet-active {\n background: var(--info-primary-color);\n }\n .media-endorsement-mobile-swiper .swiper-pagination {\n position: absolute;\n bottom: -28px;\n left: 0;\n right: 0;\n text-align: center;\n }\n `}</style>\n {/* \u6807\u9898\u533A\u57DF */}\n {(title || subtitle) && (\n <div className={cn('media-endorsement-header mb-6', classNames.header)}>\n {title && (\n <Heading as=\"h2\" size={4} html={title} className={cn('media-endorsement-title', classNames.title)} />\n )}\n {subtitle && <Text as=\"p\" size={3} className={cn('', classNames?.subtitle)} html={subtitle} />}\n </div>\n )}\n {layout === 'carousel' ? (\n <Swiper\n className={cn('media-endorsement-carousel', 'w-full !overflow-visible', classNames.carousel)}\n modules={[FreeMode, Mousewheel]}\n freeMode={true}\n mousewheel={{ forceToAxis: true }}\n slidesPerView=\"auto\"\n spaceBetween={12}\n breakpoints={{\n 768: { spaceBetween: 16 },\n }}\n >\n {items.map((item, index) => (\n <SwiperSlide key={index} className=\"tablet:!w-[320px] laptop:!w-[360px] desktop:!w-[404px] !w-[280px]\">\n {renderCard(item, index)}\n </SwiperSlide>\n ))}\n </Swiper>\n ) : isMobile ? (\n renderMobileGridSwiper()\n ) : (\n <div\n className={cn(\n 'media-endorsement-grid',\n 'laptop:grid-cols-2 laptop:gap-4 desktop:grid-cols-3 tablet:grid-cols-2 grid grid-cols-1 gap-3',\n classNames.grid\n )}\n >\n {items.map((item, index) => renderCard(item, index))}\n </div>\n )}\n </div>\n )\n }\n)\n\nMediaEndorsement.displayName = 'MediaEndorsement'\n\nexport default withLayout(MediaEndorsement)\nexport type { MediaEndorsementProps, MediaEndorsementData, MediaEndorsementItem, MediaEndorsementSemanticName }\n"],
5
- "mappings": "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",
6
- "names": ["jsx", "jsxs", "React", "cva", "Swiper", "SwiperSlide", "FreeMode", "Mousewheel", "Pagination", "useMediaQuery", "cn", "Heading", "Text", "withLayout", "MOBILE_ITEMS_PER_SLIDE", "chunkArray", "array", "size", "result", "i", "cardVariants", "MediaEndorsement", "className", "classNames", "data", "onItemClick", "props", "ref", "title", "subtitle", "items", "theme", "rounded", "layout", "isMobile", "handleCardClick", "item", "index", "event", "renderCard", "renderMobileGridSwiper", "chunkedItems", "group", "slideIndex", "itemIndex", "globalIndex", "MediaEndorsement_default"]
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cva } from 'class-variance-authority'\nimport { Swiper, SwiperSlide } from 'swiper/react'\nimport { FreeMode, Mousewheel, Pagination } from 'swiper/modules'\nimport { useMediaQuery } from 'react-responsive'\nimport 'swiper/css/pagination'\nimport { cn } from '../../helpers/index.js'\nimport type {\n MediaEndorsementProps,\n MediaEndorsementData,\n MediaEndorsementItem,\n MediaEndorsementSemanticName,\n} from './types.js'\nimport { Heading, Text } from '../../index.js'\nimport { withLayout } from '../../shared/Styles.js'\n\nconst MOBILE_ITEMS_PER_SLIDE = 3\n\n// Helper to chunk array into groups\nfunction chunkArray<T>(array: T[], size: number): T[][] {\n const result: T[][] = []\n for (let i = 0; i < array.length; i += size) {\n result.push(array.slice(i, i + size))\n }\n return result\n}\n\n/**\n * \u5361\u7247\u5BB9\u5668\u53D8\u4F53\n */\nconst cardVariants = cva(\n 'rounded-box lg-desktop:h-[240px] desktop:px-6 bg-container-secondary-0 flex h-[200px] flex-col justify-start gap-[26px] p-4',\n {\n variants: {\n theme: {\n light: '',\n dark: '',\n },\n rounded: {\n true: 'rounded-card',\n false: '',\n },\n },\n defaultVariants: {\n theme: 'light',\n rounded: false,\n },\n }\n)\n\n/**\n * MediaEndorsement - \u5A92\u4F53\u80CC\u4E66\n *\n * @description \u5A92\u4F53\u80CC\u4E66\u7EC4\u4EF6\u7684\u4F5C\u7528\u662F\u901A\u8FC7\u5C55\u793A\u7B2C\u4E09\u65B9\u5A92\u4F53\u7684\u8BC4\u4EF7\u6216\u62A5\u9053\uFF0C\u63D0\u5347\u54C1\u724C\u6216\u4EA7\u54C1\u7684\u53EF\u4FE1\u5EA6\u548C\u5F71\u54CD\u529B\n */\nconst MediaEndorsement = React.forwardRef<HTMLDivElement, MediaEndorsementProps>(\n ({ className, classNames = {}, data, onItemClick, ...props }, ref) => {\n const { title, subtitle, items, theme = 'light', rounded = false, layout = 'grid' } = data\n const isMobile = useMediaQuery({ query: '(max-width: 767px)' })\n\n const handleCardClick = React.useCallback(\n (item: MediaEndorsementItem, index: number) => (event: React.MouseEvent) => {\n onItemClick?.(item, index, event)\n },\n [onItemClick]\n )\n\n const renderCard = (item: MediaEndorsementItem, index: number) => (\n <div\n key={index}\n className={cn('media-endorsement-card text-info-primary', cardVariants({ theme, rounded }), classNames.card)}\n onClick={handleCardClick(item, index)}\n aria-label={item.mediaName ? `${item.mediaName} endorsement` : undefined}\n >\n {/* \u5A92\u4F53 Logo */}\n <div\n className={cn(\n 'media-endorsement-card-icon rounded-full',\n 'lg-desktop::h-14 flex h-12 w-auto items-center overflow-hidden',\n classNames.cardIcon\n )}\n >\n <img\n src={item.icon.url}\n alt={item.icon.alt || item.mediaName || 'Media logo'}\n className=\"lg-desktop::h-12 h-[42px] w-auto object-contain\"\n loading=\"lazy\"\n />\n </div>\n\n {/* \u5F15\u7528\u6587\u6848 */}\n <Heading size={2} as={'h6'} className={cn('media-endorsement-card-quote line-clamp-4', classNames.cardQuote)}>\n {item.text}\n </Heading>\n </div>\n )\n\n // Mobile swiper for grid layout\n const renderMobileGridSwiper = () => {\n const chunkedItems = chunkArray(items, MOBILE_ITEMS_PER_SLIDE)\n return (\n <Swiper\n className={cn('media-endorsement-mobile-swiper', 'w-full !overflow-visible pb-8', classNames.carousel)}\n modules={[Pagination]}\n slidesPerView={1}\n spaceBetween={12}\n pagination={{\n clickable: true,\n bulletClass: 'media-endorsement-bullet',\n bulletActiveClass: 'media-endorsement-bullet-active',\n }}\n >\n {chunkedItems.map((group, slideIndex) => (\n <SwiperSlide key={slideIndex} className=\"!h-auto\">\n <div className=\"flex flex-col gap-3\">\n {group.map((item, itemIndex) => {\n const globalIndex = slideIndex * MOBILE_ITEMS_PER_SLIDE + itemIndex\n return renderCard(item, globalIndex)\n })}\n </div>\n </SwiperSlide>\n ))}\n </Swiper>\n )\n }\n\n return (\n <div\n ref={ref}\n className={cn('media-endorsement-root text-info-primary', 'w-full', className, classNames.root, {\n 'aiui-dark': theme === 'dark',\n })}\n {...props}\n >\n <style>{`\n .media-endorsement-bullet {\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #D9D9D9;\n margin: 0 4px;\n cursor: pointer;\n transition: background-color 0.3s ease;\n }\n .media-endorsement-bullet-active {\n background: var(--info-primary-color);\n }\n .media-endorsement-mobile-swiper .swiper-pagination {\n position: absolute;\n bottom: -28px;\n left: 0;\n right: 0;\n text-align: center;\n }\n `}</style>\n {/* \u6807\u9898\u533A\u57DF */}\n {(title || subtitle) && (\n <div className={cn('media-endorsement-header mb-6', classNames.header)}>\n {title && (\n <Heading as=\"h2\" size={4} html={title} className={cn('media-endorsement-title', classNames.title)} />\n )}\n {subtitle && <Text as=\"p\" size={3} className={cn('', classNames?.subtitle)} html={subtitle} />}\n </div>\n )}\n {layout === 'carousel' ? (\n <Swiper\n className={cn('media-endorsement-carousel', 'w-full !overflow-visible', classNames.carousel)}\n modules={[FreeMode, Mousewheel]}\n freeMode={true}\n mousewheel={{ forceToAxis: true }}\n slidesPerView=\"auto\"\n spaceBetween={12}\n breakpoints={{\n 768: { spaceBetween: 16 },\n }}\n >\n {items.map((item, index) => (\n <SwiperSlide key={index} className=\"tablet:!w-[320px] laptop:!w-[360px] desktop:!w-[404px] !w-[280px]\">\n {renderCard(item, index)}\n </SwiperSlide>\n ))}\n </Swiper>\n ) : isMobile ? (\n renderMobileGridSwiper()\n ) : (\n <div\n className={cn(\n 'media-endorsement-grid',\n 'laptop:grid-cols-2 laptop:gap-4 desktop:grid-cols-3 tablet:grid-cols-2 grid grid-cols-1 gap-3',\n classNames.grid\n )}\n >\n {items.map((item, index) => renderCard(item, index))}\n </div>\n )}\n </div>\n )\n }\n)\n\nMediaEndorsement.displayName = 'MediaEndorsement'\n\nexport default withLayout(MediaEndorsement)\nexport type { MediaEndorsementProps, MediaEndorsementData, MediaEndorsementItem, MediaEndorsementSemanticName }\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "React", "cva", "Swiper", "SwiperSlide", "FreeMode", "Mousewheel", "Pagination", "useMediaQuery", "cn", "Heading", "Text", "withLayout", "MOBILE_ITEMS_PER_SLIDE", "chunkArray", "array", "size", "result", "cardVariants", "MediaEndorsement", "className", "classNames", "data", "onItemClick", "props", "ref", "title", "subtitle", "items", "theme", "rounded", "layout", "isMobile", "handleCardClick", "item", "index", "event", "renderCard", "renderMobileGridSwiper", "chunkedItems", "group", "slideIndex", "itemIndex", "globalIndex", "MediaEndorsement_default"]
7
7
  }
@@ -1,2 +1,3 @@
1
- declare const _default: any;
1
+ import type { MediaPlayerBaseProps } from './types.js';
2
+ declare const _default: import("react").ForwardRefExoticComponent<Omit<MediaPlayerBaseProps & import("react").RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & import("react").RefAttributes<HTMLDivElement>>;
2
3
  export default _default;
@@ -1,2 +1,3 @@
1
- declare const _default: any;
1
+ import type { MediaPlayerMultiProps } from './types.js';
2
+ declare const _default: import("react").ForwardRefExoticComponent<Omit<MediaPlayerMultiProps & import("react").RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & import("react").RefAttributes<HTMLDivElement>>;
2
3
  export default _default;
@@ -1,2 +1,8 @@
1
- declare const _default: any;
1
+ import React from 'react';
2
+ import type { MediaPlayerBaseProps } from './types.js';
3
+ declare const _default: React.ForwardRefExoticComponent<Omit<MediaPlayerBaseProps & React.RefAttributes<{
4
+ mediaPlayerStickyRef: HTMLDivElement;
5
+ }>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<{
6
+ mediaPlayerStickyRef: HTMLDivElement;
7
+ }>>;
2
8
  export default _default;
@@ -1,3 +1,4 @@
1
+ import type { MediaSceneSwitcherProps } from './types.js';
1
2
  import 'swiper/css';
2
- declare const _default: any;
3
+ declare const _default: import("react").ForwardRefExoticComponent<Omit<MediaSceneSwitcherProps & import("react").RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & import("react").RefAttributes<HTMLDivElement>>;
3
4
  export default _default;
@@ -54,5 +54,5 @@ export interface MediaSceneSwitcherV2Props extends React.HTMLAttributes<HTMLDivE
54
54
  /** 场景切换回调 */
55
55
  onSceneChange?: (index: number, scene: MediaSceneSwitcherV2Item) => void;
56
56
  }
57
- declare const _default: any;
57
+ declare const _default: React.ForwardRefExoticComponent<Omit<MediaSceneSwitcherV2Props & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<HTMLDivElement>>;
58
58
  export default _default;
@@ -114,5 +114,5 @@ export interface MediaShelfComponent extends React.ForwardRefExoticComponent<Med
114
114
  /** 独立的 ProductCard 组件 */
115
115
  ProductCard: typeof ProductCard;
116
116
  }
117
- declare const MediaShelfWithProductCard: MediaShelfComponent;
118
- export default MediaShelfWithProductCard;
117
+ declare const MediaShelfWrapped: React.ForwardRefExoticComponent<Omit<MediaShelfProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<HTMLDivElement>>;
118
+ export default MediaShelfWrapped;
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as t,jsxs as m}from"react/jsx-runtime";import*as i from"react";import{cn as h}from"../../helpers/index.js";import{Text as z,Heading as A,Tabs as O,TabsList as $,TabsTrigger as I,TabsContent as W}from"../../components/index.js";import{Swiper as j,SwiperSlide as q}from"swiper/react";import{Navigation as Z}from"swiper/modules";import"swiper/css";import"swiper/css/navigation";import F from"./ProductCard.js";import{useExposure as _}from"../../hooks/useExposure.js";const G="shelf",J="media_shelf",K=({disabled:o})=>m("svg",{width:"56",height:"56",viewBox:"0 0 56 56",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"text-info-primary laptop:block lg-desktop:size-[56px] hidden size-[40px]",children:[t("path",{d:"M0 28C0 43.464 12.536 56 28 56C43.464 56 56 43.464 56 28C56 12.536 43.464 0 28 0C12.536 0 0 12.536 0 28Z",fill:"currentColor",fillOpacity:o?"0.2":"0.6"}),t("path",{d:"M31 22L25 28L31 34",stroke:"white",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]}),Q=({disabled:o})=>m("svg",{width:"56",height:"56",viewBox:"0 0 56 56",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"text-info-primary laptop:block lg-desktop:size-[56px] hidden size-[40px]",children:[t("path",{d:"M0 28C0 12.536 12.536 0 28 0C43.464 0 56 12.536 56 28C56 43.464 43.464 56 28 56C12.536 56 0 43.464 0 28Z",fill:"currentColor",fillOpacity:o?"0.2":"0.6"}),t("path",{d:"M25 22L31 28L25 34",stroke:"white",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]}),H=i.createContext(null),U=()=>{const o=i.useContext(H);if(!o)throw new Error("useMediaShelfContext must be used within an MediaShelfProvider");return o},E=i.forwardRef(({products:o,className:n},T)=>{const{copy:d,stockDisplayMode:x,stockThresholdValue:r,onLearnMore:M,onShopNow:S,onAddToCart:c,classNames:v,secondaryButtonText:B,primaryButtonText:P,secondaryButtonFun:k,primaryButtonFun:D,showOriginalPrice:L,showTags:N}=U(),f=i.useId().replace(/:/g,""),g=`swiper-button-next-custom-${f}`,b=`swiper-button-prev-custom-${f}`,[l,C]=i.useState({isBeginning:!0,isEnd:!1}),w=i.useRef(null),u=i.useCallback(()=>{const e=w.current;if(!e?.slides||e.slides.length===0)return;e.slides.forEach(a=>{a.style.height="auto"});const p=Array.from(e.slides).map(a=>a.scrollHeight),y=Math.max(...p);y>0&&e.slides.forEach(a=>{a.style.height=`${y}px`})},[]);return i.useEffect(()=>{const e=()=>{requestAnimationFrame(u)};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[u]),o?.length===0?null:t("div",{ref:T,className:n,children:m("div",{className:"relative",children:[t(j,{modules:[Z],spaceBetween:16,slidesPerView:"auto",navigation:{nextEl:`.${g}`,prevEl:`.${b}`},onSwiper:e=>{w.current=e,C({isBeginning:e.isBeginning,isEnd:e.isEnd}),setTimeout(u,100)},onSlideChange:e=>{C({isBeginning:e.isBeginning,isEnd:e.isEnd})},className:"!overflow-visible",breakpoints:{0:{spaceBetween:12,slidesPerView:1.2},768:{spaceBetween:12,slidesPerView:o.length<=2?2:2.3},1024:{spaceBetween:16,slidesPerView:Math.min(3,o.length)}},children:o.map((e,p)=>t(q,{className:"tablet:!max-w-[50%] overflow-hidden",children:t(F,{product:e,className:"box-border w-full max-w-full",stockDisplayMode:x,stockThresholdValue:r,onLearnMore:M,onShopNow:S,onAddToCart:c,classNames:v,secondaryButtonText:B,primaryButtonText:P,secondaryButtonFun:k,primaryButtonFun:D,showOriginalPrice:L,copy:d,showTags:N})},e.shopify_id+"-"+e.sku||p))}),t("button",{className:h(`${b} tablet:block absolute left-4 top-1/2 z-10 hidden -translate-y-1/2`,{"tablet:hidden":o.length<=2,"laptop:hidden":o.length<=3}),"aria-label":d?.previousSlideLabel,disabled:l.isBeginning,children:t(K,{disabled:l.isBeginning})}),t("button",{className:h(`${g} tablet:block absolute right-4 top-1/2 z-10 hidden -translate-y-1/2`,{"tablet:hidden":o.length<=2,"laptop:hidden":o.length<=3}),"aria-label":d?.nextSlideLabel,disabled:l.isEnd,children:t(Q,{disabled:l.isEnd})})]})})});E.displayName="ProductsList";const R=i.forwardRef(({className:o,data:n,onLearnMore:T,onShopNow:d,onAddToCart:x,classNames:r,...M},S)=>{const c=i.useRef(null);_(c,{componentType:G,componentName:J,componentTitle:n.title,componentDescription:n.description}),i.useImperativeHandle(S,()=>c.current);const{theme:v="light",codeChannel:B,showMemberPrice:P=!0,showDiscount:k=!0,showTags:D=!0,stockDisplayMode:L,stockThresholdValue:N,showOriginalPrice:f=!0,secondaryButtonText:g,primaryButtonText:b,secondaryButtonFun:l,primaryButtonFun:C,isShowTab:w=!0,copy:u}=n,p={codeChannel:B,showMemberPrice:P,showDiscount:k,showTags:D,stockDisplayMode:L,stockThresholdValue:N,showOriginalPrice:f,onLearnMore:T,onShopNow:d,onAddToCart:x,classNames:r,secondaryButtonText:g,secondaryButtonFun:l,primaryButtonText:b,primaryButtonFun:C,copy:u||{}},y=n.productsTab&&n.productsTab.length>0,a=w&&y;return t(H.Provider,{value:p,children:m("div",{ref:c,className:h("w-full",{"aiui-dark":v==="dark"},o,r?.root),...M,children:[n.title&&t(A,{as:"h2",html:n.title,size:4,className:h("text-info-primary mb-4",r?.title)}),n.description&&t(z,{size:3,as:"p",html:n.description,className:h("text-info-primary mb-6",r?.description)}),m(O,{defaultValue:n.productsTab?.[0]?.id,className:"w-full",children:[a&&t($,{className:"mb-6",children:n.productsTab?.map(s=>t(I,{value:s.id,children:s.tab},"tab-"+s.id))}),a?n.productsTab?.map(s=>t(W,{value:s.id,children:t(E,{products:s.data})},"tab-content-"+s.id)):t(E,{products:n.productsCard})]})]})})});R.displayName="MediaShelf";const V=R;V.ProductCard=F;var se=V;export{se as default,U as useMediaShelfContext};
1
+ "use client";import{jsx as t,jsxs as m}from"react/jsx-runtime";import*as i from"react";import{cn as h}from"../../helpers/index.js";import{withLayout as z}from"../../shared/Styles.js";import{Text as A,Heading as O,Tabs as $,TabsList as I,TabsTrigger as W,TabsContent as j}from"../../components/index.js";import{Swiper as q,SwiperSlide as Z}from"swiper/react";import{Navigation as _}from"swiper/modules";import"swiper/css";import"swiper/css/navigation";import F from"./ProductCard.js";import{useExposure as G}from"../../hooks/useExposure.js";const J="shelf",K="media_shelf",Q=({disabled:o})=>m("svg",{width:"56",height:"56",viewBox:"0 0 56 56",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"text-info-primary laptop:block lg-desktop:size-[56px] hidden size-[40px]",children:[t("path",{d:"M0 28C0 43.464 12.536 56 28 56C43.464 56 56 43.464 56 28C56 12.536 43.464 0 28 0C12.536 0 0 12.536 0 28Z",fill:"currentColor",fillOpacity:o?"0.2":"0.6"}),t("path",{d:"M31 22L25 28L31 34",stroke:"white",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]}),U=({disabled:o})=>m("svg",{width:"56",height:"56",viewBox:"0 0 56 56",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"text-info-primary laptop:block lg-desktop:size-[56px] hidden size-[40px]",children:[t("path",{d:"M0 28C0 12.536 12.536 0 28 0C43.464 0 56 12.536 56 28C56 43.464 43.464 56 28 56C12.536 56 0 43.464 0 28Z",fill:"currentColor",fillOpacity:o?"0.2":"0.6"}),t("path",{d:"M25 22L31 28L25 34",stroke:"white",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]}),H=i.createContext(null),X=()=>{const o=i.useContext(H);if(!o)throw new Error("useMediaShelfContext must be used within an MediaShelfProvider");return o},E=i.forwardRef(({products:o,className:n},T)=>{const{copy:d,stockDisplayMode:x,stockThresholdValue:r,onLearnMore:M,onShopNow:S,onAddToCart:c,classNames:v,secondaryButtonText:B,primaryButtonText:P,secondaryButtonFun:k,primaryButtonFun:D,showOriginalPrice:L,showTags:N}=X(),f=i.useId().replace(/:/g,""),g=`swiper-button-next-custom-${f}`,b=`swiper-button-prev-custom-${f}`,[l,C]=i.useState({isBeginning:!0,isEnd:!1}),w=i.useRef(null),u=i.useCallback(()=>{const e=w.current;if(!e?.slides||e.slides.length===0)return;e.slides.forEach(a=>{a.style.height="auto"});const p=Array.from(e.slides).map(a=>a.scrollHeight),y=Math.max(...p);y>0&&e.slides.forEach(a=>{a.style.height=`${y}px`})},[]);return i.useEffect(()=>{const e=()=>{requestAnimationFrame(u)};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[u]),o?.length===0?null:t("div",{ref:T,className:n,children:m("div",{className:"relative",children:[t(q,{modules:[_],spaceBetween:16,slidesPerView:"auto",navigation:{nextEl:`.${g}`,prevEl:`.${b}`},onSwiper:e=>{w.current=e,C({isBeginning:e.isBeginning,isEnd:e.isEnd}),setTimeout(u,100)},onSlideChange:e=>{C({isBeginning:e.isBeginning,isEnd:e.isEnd})},className:"!overflow-visible",breakpoints:{0:{spaceBetween:12,slidesPerView:1.2},768:{spaceBetween:12,slidesPerView:o.length<=2?2:2.3},1024:{spaceBetween:16,slidesPerView:Math.min(3,o.length)}},children:o.map((e,p)=>t(Z,{className:"tablet:!max-w-[50%] overflow-hidden",children:t(F,{product:e,className:"box-border w-full max-w-full",stockDisplayMode:x,stockThresholdValue:r,onLearnMore:M,onShopNow:S,onAddToCart:c,classNames:v,secondaryButtonText:B,primaryButtonText:P,secondaryButtonFun:k,primaryButtonFun:D,showOriginalPrice:L,copy:d,showTags:N})},e.shopify_id+"-"+e.sku||p))}),t("button",{className:h(`${b} tablet:block absolute left-4 top-1/2 z-10 hidden -translate-y-1/2`,{"tablet:hidden":o.length<=2,"laptop:hidden":o.length<=3}),"aria-label":d?.previousSlideLabel,disabled:l.isBeginning,children:t(Q,{disabled:l.isBeginning})}),t("button",{className:h(`${g} tablet:block absolute right-4 top-1/2 z-10 hidden -translate-y-1/2`,{"tablet:hidden":o.length<=2,"laptop:hidden":o.length<=3}),"aria-label":d?.nextSlideLabel,disabled:l.isEnd,children:t(U,{disabled:l.isEnd})})]})})});E.displayName="ProductsList";const R=i.forwardRef(({className:o,data:n,onLearnMore:T,onShopNow:d,onAddToCart:x,classNames:r,...M},S)=>{const c=i.useRef(null);G(c,{componentType:J,componentName:K,componentTitle:n.title,componentDescription:n.description}),i.useImperativeHandle(S,()=>c.current);const{theme:v="light",codeChannel:B,showMemberPrice:P=!0,showDiscount:k=!0,showTags:D=!0,stockDisplayMode:L,stockThresholdValue:N,showOriginalPrice:f=!0,secondaryButtonText:g,primaryButtonText:b,secondaryButtonFun:l,primaryButtonFun:C,isShowTab:w=!0,copy:u}=n,p={codeChannel:B,showMemberPrice:P,showDiscount:k,showTags:D,stockDisplayMode:L,stockThresholdValue:N,showOriginalPrice:f,onLearnMore:T,onShopNow:d,onAddToCart:x,classNames:r,secondaryButtonText:g,secondaryButtonFun:l,primaryButtonText:b,primaryButtonFun:C,copy:u||{}},y=n.productsTab&&n.productsTab.length>0,a=w&&y;return t(H.Provider,{value:p,children:m("div",{ref:c,className:h("w-full",{"aiui-dark":v==="dark"},o,r?.root),...M,children:[n.title&&t(O,{as:"h2",html:n.title,size:4,className:h("text-info-primary mb-4",r?.title)}),n.description&&t(A,{size:3,as:"p",html:n.description,className:h("text-info-primary mb-6",r?.description)}),m($,{defaultValue:n.productsTab?.[0]?.id,className:"w-full",children:[a&&t(I,{className:"mb-6",children:n.productsTab?.map(s=>t(W,{value:s.id,children:s.tab},"tab-"+s.id))}),a?n.productsTab?.map(s=>t(j,{value:s.id,children:t(E,{products:s.data})},"tab-content-"+s.id)):t(E,{products:n.productsCard})]})]})})});R.displayName="MediaShelf";const V=R;V.ProductCard=F;const Y=z(V);var de=Y;export{de as default,X as useMediaShelfContext};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/MediaShelf/index.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { Text, Heading, Tabs, TabsList, TabsTrigger, TabsContent } from '../../components/index.js'\n\nimport { Swiper, SwiperSlide } from 'swiper/react'\nimport { Navigation } from 'swiper/modules'\n\n// Import Swiper styles\nimport 'swiper/css'\nimport 'swiper/css/navigation'\nimport type {\n ButtonFunctionType,\n CopyConfig,\n ProductCardData,\n ProductTab,\n StockDisplayMode,\n MediaShelfSemanticName,\n} from './types.js'\nimport ProductCard from './ProductCard.js'\nimport { useExposure } from '../../hooks/useExposure.js'\n\nconst componentType = 'shelf'\nconst componentName = 'media_shelf'\n\nconst PrevIcon = ({ disabled }: { disabled: boolean }) => (\n <svg\n width=\"56\"\n height=\"56\"\n viewBox=\"0 0 56 56\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"text-info-primary laptop:block lg-desktop:size-[56px] hidden size-[40px]\"\n >\n <path\n d=\"M0 28C0 43.464 12.536 56 28 56C43.464 56 56 43.464 56 28C56 12.536 43.464 0 28 0C12.536 0 0 12.536 0 28Z\"\n fill=\"currentColor\"\n fillOpacity={disabled ? '0.2' : '0.6'}\n />\n <path d=\"M31 22L25 28L31 34\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nconst NextIcon = ({ disabled }: { disabled: boolean }) => (\n <svg\n width=\"56\"\n height=\"56\"\n viewBox=\"0 0 56 56\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"text-info-primary laptop:block lg-desktop:size-[56px] hidden size-[40px]\"\n >\n <path\n d=\"M0 28C0 12.536 12.536 0 28 0C43.464 0 56 12.536 56 28C56 43.464 43.464 56 28 56C12.536 56 0 43.464 0 28Z\"\n fill=\"currentColor\"\n fillOpacity={disabled ? '0.2' : '0.6'}\n />\n <path d=\"M25 22L31 28L25 34\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\n/**\n * Code Channel \u914D\u7F6E - \u6298\u6263\u524D\u7F00\n */\nexport type CodeChannelConfig = string\n\n/**\n * MediaShelf Context \u914D\u7F6E\u63A5\u53E3\n */\nexport interface MediaShelfContextConfig {\n /** Code Channel \u914D\u7F6E - \u6298\u6263\u524D\u7F00 */\n codeChannel?: CodeChannelConfig\n /** \u662F\u5426\u5C55\u793A\u4F1A\u5458\u4EF7\u683C */\n showMemberPrice?: boolean\n /** \u662F\u5426\u5C55\u793A\u6298\u6263\u6807\u7B7E */\n showDiscount?: boolean\n /** \u662F\u5426\u5C55\u793A\u6807\u7B7E\u7CFB\u7EDF */\n showTags?: boolean\n /** \u5E93\u5B58\u5C55\u793A\u6A21\u5F0F */\n stockDisplayMode?: StockDisplayMode\n /** \u5E93\u5B58\u9608\u503C\uFF08\u5F53\u6A21\u5F0F\u4E3A below-quantity \u6216 below-percentage \u65F6\u4F7F\u7528\uFF09 */\n stockThresholdValue?: number\n /** \u662F\u5426\u5C55\u793A\u539F\u4EF7\uFF08\u5220\u9664\u7EBF\u4EF7\u683C\uFF09 */\n showOriginalPrice?: boolean\n /** \u7528\u6237\u72B6\u6001 */\n}\n\n/**\n * MediaShelf Context \u503C\u63A5\u53E3\n */\ninterface MediaShelfContextValue extends MediaShelfContextConfig {\n /** \u70B9\u51FB\u4E86\u89E3\u66F4\u591A\u56DE\u8C03 */\n onLearnMore?: (product: ProductCardData) => void\n /** \u70B9\u51FB\u7ACB\u5373\u8D2D\u4E70\u56DE\u8C03 */\n onShopNow?: (product: ProductCardData) => void\n /** \u70B9\u51FB\u52A0\u5165\u8D2D\u7269\u8F66\u56DE\u8C03 */\n onAddToCart?: (product: ProductCardData) => void\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: Partial<Record<MediaShelfSemanticName, string>>\n /** \u4E86\u89E3\u66F4\u591A\u6309\u94AE\u6587\u672C */\n secondaryButtonText?: string\n secondaryButtonFun?: ButtonFunctionType\n /** \u7ACB\u5373\u8D2D\u4E70\u6309\u94AE\u6587\u672C */\n primaryButtonText?: string\n primaryButtonFun?: ButtonFunctionType\n /** \u6587\u6848\u914D\u7F6E */\n copy: CopyConfig\n}\n\n/**\n * MediaShelf Context\n */\nconst MediaShelfContext = React.createContext<MediaShelfContextValue | null>(null)\n\n/**\n * \u4F7F\u7528 MediaShelf Context \u7684 Hook\n */\nexport const useMediaShelfContext = () => {\n const context = React.useContext(MediaShelfContext)\n if (!context) {\n throw new Error('useMediaShelfContext must be used within an MediaShelfProvider')\n }\n return context\n}\n\n/**\n * MediaShelf \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3\n */\nexport interface MediaShelfData {\n theme?: 'light' | 'dark'\n /** \u7EC4\u4EF6\u6807\u9898 */\n title?: string\n /** \u7EC4\u4EF6\u63CF\u8FF0 */\n description?: string\n /** \u5206\u7EC4\u4EA7\u54C1Tab\u5217\u8868 */\n productsTab?: ProductTab[]\n /** \u662F\u5426\u663E\u793A Tab\uFF08\u9ED8\u8BA4\uFF1Atrue\uFF09 */\n isShowTab?: boolean\n /** \u4E86\u89E3\u66F4\u591A\u6309\u94AE\u6587\u672C */\n secondaryButtonText?: string\n secondaryButtonFun: ButtonFunctionType\n /** \u7ACB\u5373\u8D2D\u4E70\u6309\u94AE\u6587\u672C */\n primaryButtonText?: string\n primaryButtonFun: ButtonFunctionType\n /** Code Channel \u914D\u7F6E - \u6298\u6263\u524D\u7F00 */\n codeChannel?: CodeChannelConfig\n /** \u662F\u5426\u5C55\u793A\u4F1A\u5458\u4EF7\u683C */\n showMemberPrice?: boolean\n /** \u662F\u5426\u5C55\u793A\u6298\u6263\u6807\u7B7E */\n showDiscount?: boolean\n /** \u662F\u5426\u5C55\u793A\u6807\u7B7E\u7CFB\u7EDF */\n showTags?: boolean\n /** \u5E93\u5B58\u5C55\u793A\u6A21\u5F0F */\n stockDisplayMode?: StockDisplayMode\n /** \u5E93\u5B58\u9608\u503C\uFF08\u5F53\u6A21\u5F0F\u4E3A below-quantity \u6216 below-percentage \u65F6\u4F7F\u7528\uFF09 */\n stockThresholdValue?: number\n /**\n * \u5E93\u5B58\u6587\u672C\u6A21\u677F\uFF0C\u652F\u6301 {count} \u5360\u4F4D\u7B26\n */\n stockDisplayText?: string\n /** \u662F\u5426\u5C55\u793A\u539F\u4EF7\uFF08\u5220\u9664\u7EBF\u4EF7\u683C\uFF09 */\n showOriginalPrice?: boolean\n /** \u6587\u6848\u914D\u7F6E */\n copy?: CopyConfig\n /**\n * \u4EA7\u54C1\u5217\u8868\uFF08\u5F53\u4E0D\u4F7F\u7528 Tab \u5206\u7EC4\u65F6\u53EF\u76F4\u63A5\u4F20\u5165\u4EA7\u54C1\u5217\u8868\uFF09\n */\n productsCard: ProductCardData[]\n}\n\nexport interface MediaShelfProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: MediaShelfData\n /** \u70B9\u51FB\u4E86\u89E3\u66F4\u591A\u56DE\u8C03 */\n onLearnMore?: (product: ProductCardData) => void\n /** \u70B9\u51FB\u7ACB\u5373\u8D2D\u4E70\u56DE\u8C03 */\n onShopNow?: (product: ProductCardData) => void\n /** \u70B9\u51FB\u52A0\u5165\u8D2D\u7269\u8F66\u56DE\u8C03 */\n onAddToCart?: (product: ProductCardData) => void\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: Partial<Record<MediaShelfSemanticName, string>>\n}\n\n/**\n * MediaShelf \u590D\u5408\u7EC4\u4EF6\u7C7B\u578B\u5B9A\u4E49\n */\nexport interface MediaShelfComponent extends React.ForwardRefExoticComponent<\n MediaShelfProps & React.RefAttributes<HTMLDivElement>\n> {\n /** \u72EC\u7ACB\u7684 ProductCard \u7EC4\u4EF6 */\n ProductCard: typeof ProductCard\n}\n\n/**\n * \u4EA7\u54C1\u5217\u8868\u7EC4\u4EF6 - \u4F7F\u7528 Swiper \u6A2A\u5411\u6ED1\u52A8\u5E03\u5C40\n */\nconst ProductsList = React.forwardRef<\n HTMLDivElement,\n {\n products: ProductCardData[]\n className?: string\n }\n>(({ products, className }, ref) => {\n const {\n copy,\n stockDisplayMode,\n stockThresholdValue,\n onLearnMore,\n onShopNow,\n onAddToCart,\n classNames,\n secondaryButtonText,\n primaryButtonText,\n secondaryButtonFun,\n primaryButtonFun,\n showOriginalPrice,\n showTags,\n } = useMediaShelfContext()\n // \u751F\u6210\u552F\u4E00 ID\uFF0C\u79FB\u9664\u7279\u6B8A\u5B57\u7B26\u4EE5\u786E\u4FDD\u53EF\u7528\u4E8E CSS \u9009\u62E9\u5668\n const id = React.useId().replace(/:/g, '')\n // \u9884\u5B9A\u4E49\u5BFC\u822A\u6309\u94AE\u9009\u62E9\u5668\uFF0C\u907F\u514D\u591A\u6B21\u62FC\u63A5\n const nextButtonClass = `swiper-button-next-custom-${id}`\n const prevButtonClass = `swiper-button-prev-custom-${id}`\n\n // Swiper \u5BFC\u822A\u72B6\u6001\n const [swiperState, setSwiperState] = React.useState({\n isBeginning: true,\n isEnd: false,\n })\n\n // Swiper \u5B9E\u4F8B\u5F15\u7528\n const swiperRef = React.useRef<any>(null)\n\n // \u8BA1\u7B97\u5E76\u8BBE\u7F6E\u6240\u6709 slide \u4E3A\u6700\u9AD8\u9AD8\u5EA6\n const equalizeSlideHeights = React.useCallback(() => {\n const swiper = swiperRef.current\n if (!swiper?.slides || swiper.slides.length === 0) return\n\n // \u5148\u91CD\u7F6E\u6240\u6709 slide \u9AD8\u5EA6\u4EE5\u83B7\u53D6\u771F\u5B9E\u5185\u5BB9\u9AD8\u5EA6\n swiper.slides.forEach((slide: HTMLElement) => {\n slide.style.height = 'auto'\n })\n\n // \u8BA1\u7B97\u6700\u5927\u9AD8\u5EA6\n // @ts-ignore\n const heights = Array.from(swiper.slides).map((slide: HTMLElement) => slide.scrollHeight)\n const maxHeight = Math.max(...heights)\n\n // \u8BBE\u7F6E\u6240\u6709 slide \u4E3A\u6700\u5927\u9AD8\u5EA6\n if (maxHeight > 0) {\n swiper.slides.forEach((slide: HTMLElement) => {\n slide.style.height = `${maxHeight}px`\n })\n }\n }, [])\n\n // \u76D1\u542C\u7A97\u53E3 resize \u91CD\u65B0\u8BA1\u7B97\u9AD8\u5EA6\n React.useEffect(() => {\n const handleResize = () => {\n // \u4F7F\u7528 requestAnimationFrame \u786E\u4FDD DOM \u66F4\u65B0\u5B8C\u6210\n requestAnimationFrame(equalizeSlideHeights)\n }\n\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [equalizeSlideHeights])\n\n if (products?.length === 0) {\n return null\n }\n\n return (\n <div ref={ref} className={className}>\n {/* Swiper \u6A2A\u5411\u6ED1\u52A8\u5E03\u5C40 */}\n <div className=\"relative\">\n <Swiper\n modules={[Navigation]}\n spaceBetween={16}\n slidesPerView=\"auto\"\n navigation={{\n nextEl: `.${nextButtonClass}`,\n prevEl: `.${prevButtonClass}`,\n }}\n onSwiper={swiper => {\n swiperRef.current = swiper\n setSwiperState({\n isBeginning: swiper.isBeginning,\n isEnd: swiper.isEnd,\n })\n // \u5EF6\u8FDF\u6267\u884C\u4EE5\u786E\u4FDD\u5185\u5BB9\u6E32\u67D3\u5B8C\u6210\n setTimeout(equalizeSlideHeights, 100)\n }}\n onSlideChange={swiper => {\n setSwiperState({\n isBeginning: swiper.isBeginning,\n isEnd: swiper.isEnd,\n })\n }}\n className=\"!overflow-visible\"\n breakpoints={{\n 0: {\n spaceBetween: 12,\n slidesPerView: 1.2,\n },\n 768: {\n spaceBetween: 12,\n slidesPerView: products.length <= 2 ? 2 : 2.3,\n },\n 1024: {\n spaceBetween: 16,\n slidesPerView: Math.min(3, products.length),\n },\n }}\n >\n {products.map((product, index) => (\n <SwiperSlide\n key={product.shopify_id + '-' + product.sku || index}\n className=\"tablet:!max-w-[50%] overflow-hidden\"\n >\n <ProductCard\n product={product}\n className=\"box-border w-full max-w-full\"\n stockDisplayMode={stockDisplayMode}\n stockThresholdValue={stockThresholdValue}\n onLearnMore={onLearnMore}\n onShopNow={onShopNow}\n onAddToCart={onAddToCart}\n classNames={classNames}\n secondaryButtonText={secondaryButtonText}\n primaryButtonText={primaryButtonText}\n secondaryButtonFun={secondaryButtonFun}\n primaryButtonFun={primaryButtonFun}\n showOriginalPrice={showOriginalPrice}\n copy={copy}\n showTags={showTags}\n />\n </SwiperSlide>\n ))}\n </Swiper>\n\n {/* \u81EA\u5B9A\u4E49\u5BFC\u822A\u6309\u94AE */}\n <button\n className={cn(`${prevButtonClass} tablet:block absolute left-4 top-1/2 z-10 hidden -translate-y-1/2`, {\n 'tablet:hidden': products.length <= 2,\n 'laptop:hidden': products.length <= 3,\n })}\n aria-label={copy?.previousSlideLabel}\n disabled={swiperState.isBeginning}\n >\n <PrevIcon disabled={swiperState.isBeginning} />\n </button>\n <button\n className={cn(`${nextButtonClass} tablet:block absolute right-4 top-1/2 z-10 hidden -translate-y-1/2`, {\n 'tablet:hidden': products.length <= 2,\n 'laptop:hidden': products.length <= 3,\n })}\n aria-label={copy?.nextSlideLabel}\n disabled={swiperState.isEnd}\n >\n <NextIcon disabled={swiperState.isEnd} />\n </button>\n </div>\n </div>\n )\n})\n\nProductsList.displayName = 'ProductsList'\n\n/**\n * MediaShelf - \u5A92\u4F53\u8D27\u67B6\n *\n * @description \u80FD\u591F\u5B9E\u65F6\u663E\u793A\u5546\u54C1\u5E93\u5B58\u4FE1\u606F\u548C\u4F1A\u5458\u4EF7\u7684\u8D27\u67B6\uFF0C\u652F\u6301\u54CD\u5E94\u5F0F\u5E03\u5C40\u548C\u591A\u79CD\u914D\u7F6E\u9009\u9879\n */\nconst MediaShelf = React.forwardRef<HTMLDivElement, MediaShelfProps>(\n ({ className, data, onLearnMore, onShopNow, onAddToCart, classNames, ...props }, ref) => {\n const boxRef = React.useRef<HTMLDivElement>(null)\n\n useExposure(boxRef, {\n componentType,\n componentName,\n componentTitle: data.title,\n componentDescription: data.description,\n })\n\n React.useImperativeHandle(ref, () => boxRef.current as HTMLDivElement)\n\n // \u4ECE data \u4E2D\u89E3\u6784\u914D\u7F6E\u9879\uFF0C\u5E76\u8BBE\u7F6E\u9ED8\u8BA4\u503C\n const {\n theme = 'light',\n codeChannel,\n showMemberPrice = true,\n showDiscount = true,\n showTags = true,\n stockDisplayMode,\n stockThresholdValue,\n showOriginalPrice = true,\n secondaryButtonText,\n primaryButtonText,\n secondaryButtonFun,\n primaryButtonFun,\n isShowTab = true,\n copy,\n } = data\n\n // \u6784\u5EFA copy \u914D\u7F6E\uFF0C\u4F7F\u7528\u4F20\u5165\u7684 copy \u914D\u7F6E\n const finalCopy: CopyConfig = copy || {}\n\n // \u6784\u5EFA Context \u503C\n const contextValue: MediaShelfContextValue = {\n codeChannel,\n showMemberPrice,\n showDiscount,\n showTags,\n stockDisplayMode,\n stockThresholdValue,\n showOriginalPrice,\n onLearnMore,\n onShopNow,\n onAddToCart,\n classNames,\n secondaryButtonText,\n secondaryButtonFun,\n primaryButtonText,\n primaryButtonFun,\n copy: finalCopy,\n }\n\n // \u83B7\u53D6\u8981\u663E\u793A\u7684\u4EA7\u54C1\u6570\u636E\n const hasTabData = data.productsTab && data.productsTab.length > 0\n const shouldShowTab = isShowTab && hasTabData\n\n return (\n <MediaShelfContext.Provider value={contextValue}>\n <div\n ref={boxRef}\n className={cn(\n 'w-full',\n {\n 'aiui-dark': theme === 'dark',\n },\n className,\n classNames?.root\n )}\n {...props}\n >\n {/* \u6807\u9898\u533A\u57DF */}\n {data.title && (\n <Heading as=\"h2\" html={data.title} size={4} className={cn('text-info-primary mb-4', classNames?.title)} />\n )}\n {data.description && (\n <Text\n size={3}\n as=\"p\"\n html={data.description}\n className={cn('text-info-primary mb-6', classNames?.description)}\n />\n )}\n\n {/* \u4EA7\u54C1\u5C55\u793A\u533A\u57DF */}\n\n <Tabs defaultValue={data.productsTab?.[0]?.id} className=\"w-full\">\n {shouldShowTab && (\n <TabsList className=\"mb-6\">\n {data.productsTab?.map(tab => (\n <TabsTrigger key={'tab-' + tab.id} value={tab.id}>\n {tab.tab}\n </TabsTrigger>\n ))}\n </TabsList>\n )}\n {shouldShowTab ? (\n data.productsTab?.map(tab => (\n <TabsContent key={'tab-content-' + tab.id} value={tab.id}>\n <ProductsList products={tab.data} />\n </TabsContent>\n ))\n ) : (\n <ProductsList products={data.productsCard} />\n )}\n </Tabs>\n </div>\n </MediaShelfContext.Provider>\n )\n }\n)\n\nMediaShelf.displayName = 'MediaShelf'\n\n// \u521B\u5EFA\u590D\u5408\u7EC4\u4EF6\nconst MediaShelfWithProductCard = MediaShelf as MediaShelfComponent\nMediaShelfWithProductCard.ProductCard = ProductCard\n\nexport default MediaShelfWithProductCard\n"],
5
- "mappings": "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",
6
- "names": ["jsx", "jsxs", "React", "cn", "Text", "Heading", "Tabs", "TabsList", "TabsTrigger", "TabsContent", "Swiper", "SwiperSlide", "Navigation", "ProductCard", "useExposure", "componentType", "componentName", "PrevIcon", "disabled", "NextIcon", "MediaShelfContext", "useMediaShelfContext", "context", "ProductsList", "products", "className", "ref", "copy", "stockDisplayMode", "stockThresholdValue", "onLearnMore", "onShopNow", "onAddToCart", "classNames", "secondaryButtonText", "primaryButtonText", "secondaryButtonFun", "primaryButtonFun", "showOriginalPrice", "showTags", "id", "nextButtonClass", "prevButtonClass", "swiperState", "setSwiperState", "swiperRef", "equalizeSlideHeights", "swiper", "slide", "heights", "maxHeight", "handleResize", "product", "index", "MediaShelf", "data", "props", "boxRef", "theme", "codeChannel", "showMemberPrice", "showDiscount", "isShowTab", "contextValue", "hasTabData", "shouldShowTab", "tab", "MediaShelfWithProductCard", "MediaShelf_default"]
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { Text, Heading, Tabs, TabsList, TabsTrigger, TabsContent } from '../../components/index.js'\n\nimport { Swiper, SwiperSlide } from 'swiper/react'\nimport { Navigation } from 'swiper/modules'\n\n// Import Swiper styles\nimport 'swiper/css'\nimport 'swiper/css/navigation'\nimport type {\n ButtonFunctionType,\n CopyConfig,\n ProductCardData,\n ProductTab,\n StockDisplayMode,\n MediaShelfSemanticName,\n} from './types.js'\nimport ProductCard from './ProductCard.js'\nimport { useExposure } from '../../hooks/useExposure.js'\n\nconst componentType = 'shelf'\nconst componentName = 'media_shelf'\n\nconst PrevIcon = ({ disabled }: { disabled: boolean }) => (\n <svg\n width=\"56\"\n height=\"56\"\n viewBox=\"0 0 56 56\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"text-info-primary laptop:block lg-desktop:size-[56px] hidden size-[40px]\"\n >\n <path\n d=\"M0 28C0 43.464 12.536 56 28 56C43.464 56 56 43.464 56 28C56 12.536 43.464 0 28 0C12.536 0 0 12.536 0 28Z\"\n fill=\"currentColor\"\n fillOpacity={disabled ? '0.2' : '0.6'}\n />\n <path d=\"M31 22L25 28L31 34\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nconst NextIcon = ({ disabled }: { disabled: boolean }) => (\n <svg\n width=\"56\"\n height=\"56\"\n viewBox=\"0 0 56 56\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"text-info-primary laptop:block lg-desktop:size-[56px] hidden size-[40px]\"\n >\n <path\n d=\"M0 28C0 12.536 12.536 0 28 0C43.464 0 56 12.536 56 28C56 43.464 43.464 56 28 56C12.536 56 0 43.464 0 28Z\"\n fill=\"currentColor\"\n fillOpacity={disabled ? '0.2' : '0.6'}\n />\n <path d=\"M25 22L31 28L25 34\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\n/**\n * Code Channel \u914D\u7F6E - \u6298\u6263\u524D\u7F00\n */\nexport type CodeChannelConfig = string\n\n/**\n * MediaShelf Context \u914D\u7F6E\u63A5\u53E3\n */\nexport interface MediaShelfContextConfig {\n /** Code Channel \u914D\u7F6E - \u6298\u6263\u524D\u7F00 */\n codeChannel?: CodeChannelConfig\n /** \u662F\u5426\u5C55\u793A\u4F1A\u5458\u4EF7\u683C */\n showMemberPrice?: boolean\n /** \u662F\u5426\u5C55\u793A\u6298\u6263\u6807\u7B7E */\n showDiscount?: boolean\n /** \u662F\u5426\u5C55\u793A\u6807\u7B7E\u7CFB\u7EDF */\n showTags?: boolean\n /** \u5E93\u5B58\u5C55\u793A\u6A21\u5F0F */\n stockDisplayMode?: StockDisplayMode\n /** \u5E93\u5B58\u9608\u503C\uFF08\u5F53\u6A21\u5F0F\u4E3A below-quantity \u6216 below-percentage \u65F6\u4F7F\u7528\uFF09 */\n stockThresholdValue?: number\n /** \u662F\u5426\u5C55\u793A\u539F\u4EF7\uFF08\u5220\u9664\u7EBF\u4EF7\u683C\uFF09 */\n showOriginalPrice?: boolean\n /** \u7528\u6237\u72B6\u6001 */\n}\n\n/**\n * MediaShelf Context \u503C\u63A5\u53E3\n */\ninterface MediaShelfContextValue extends MediaShelfContextConfig {\n /** \u70B9\u51FB\u4E86\u89E3\u66F4\u591A\u56DE\u8C03 */\n onLearnMore?: (product: ProductCardData) => void\n /** \u70B9\u51FB\u7ACB\u5373\u8D2D\u4E70\u56DE\u8C03 */\n onShopNow?: (product: ProductCardData) => void\n /** \u70B9\u51FB\u52A0\u5165\u8D2D\u7269\u8F66\u56DE\u8C03 */\n onAddToCart?: (product: ProductCardData) => void\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: Partial<Record<MediaShelfSemanticName, string>>\n /** \u4E86\u89E3\u66F4\u591A\u6309\u94AE\u6587\u672C */\n secondaryButtonText?: string\n secondaryButtonFun?: ButtonFunctionType\n /** \u7ACB\u5373\u8D2D\u4E70\u6309\u94AE\u6587\u672C */\n primaryButtonText?: string\n primaryButtonFun?: ButtonFunctionType\n /** \u6587\u6848\u914D\u7F6E */\n copy: CopyConfig\n}\n\n/**\n * MediaShelf Context\n */\nconst MediaShelfContext = React.createContext<MediaShelfContextValue | null>(null)\n\n/**\n * \u4F7F\u7528 MediaShelf Context \u7684 Hook\n */\nexport const useMediaShelfContext = () => {\n const context = React.useContext(MediaShelfContext)\n if (!context) {\n throw new Error('useMediaShelfContext must be used within an MediaShelfProvider')\n }\n return context\n}\n\n/**\n * MediaShelf \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3\n */\nexport interface MediaShelfData {\n theme?: 'light' | 'dark'\n /** \u7EC4\u4EF6\u6807\u9898 */\n title?: string\n /** \u7EC4\u4EF6\u63CF\u8FF0 */\n description?: string\n /** \u5206\u7EC4\u4EA7\u54C1Tab\u5217\u8868 */\n productsTab?: ProductTab[]\n /** \u662F\u5426\u663E\u793A Tab\uFF08\u9ED8\u8BA4\uFF1Atrue\uFF09 */\n isShowTab?: boolean\n /** \u4E86\u89E3\u66F4\u591A\u6309\u94AE\u6587\u672C */\n secondaryButtonText?: string\n secondaryButtonFun: ButtonFunctionType\n /** \u7ACB\u5373\u8D2D\u4E70\u6309\u94AE\u6587\u672C */\n primaryButtonText?: string\n primaryButtonFun: ButtonFunctionType\n /** Code Channel \u914D\u7F6E - \u6298\u6263\u524D\u7F00 */\n codeChannel?: CodeChannelConfig\n /** \u662F\u5426\u5C55\u793A\u4F1A\u5458\u4EF7\u683C */\n showMemberPrice?: boolean\n /** \u662F\u5426\u5C55\u793A\u6298\u6263\u6807\u7B7E */\n showDiscount?: boolean\n /** \u662F\u5426\u5C55\u793A\u6807\u7B7E\u7CFB\u7EDF */\n showTags?: boolean\n /** \u5E93\u5B58\u5C55\u793A\u6A21\u5F0F */\n stockDisplayMode?: StockDisplayMode\n /** \u5E93\u5B58\u9608\u503C\uFF08\u5F53\u6A21\u5F0F\u4E3A below-quantity \u6216 below-percentage \u65F6\u4F7F\u7528\uFF09 */\n stockThresholdValue?: number\n /**\n * \u5E93\u5B58\u6587\u672C\u6A21\u677F\uFF0C\u652F\u6301 {count} \u5360\u4F4D\u7B26\n */\n stockDisplayText?: string\n /** \u662F\u5426\u5C55\u793A\u539F\u4EF7\uFF08\u5220\u9664\u7EBF\u4EF7\u683C\uFF09 */\n showOriginalPrice?: boolean\n /** \u6587\u6848\u914D\u7F6E */\n copy?: CopyConfig\n /**\n * \u4EA7\u54C1\u5217\u8868\uFF08\u5F53\u4E0D\u4F7F\u7528 Tab \u5206\u7EC4\u65F6\u53EF\u76F4\u63A5\u4F20\u5165\u4EA7\u54C1\u5217\u8868\uFF09\n */\n productsCard: ProductCardData[]\n}\n\nexport interface MediaShelfProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: MediaShelfData\n /** \u70B9\u51FB\u4E86\u89E3\u66F4\u591A\u56DE\u8C03 */\n onLearnMore?: (product: ProductCardData) => void\n /** \u70B9\u51FB\u7ACB\u5373\u8D2D\u4E70\u56DE\u8C03 */\n onShopNow?: (product: ProductCardData) => void\n /** \u70B9\u51FB\u52A0\u5165\u8D2D\u7269\u8F66\u56DE\u8C03 */\n onAddToCart?: (product: ProductCardData) => void\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: Partial<Record<MediaShelfSemanticName, string>>\n}\n\n/**\n * MediaShelf \u590D\u5408\u7EC4\u4EF6\u7C7B\u578B\u5B9A\u4E49\n */\nexport interface MediaShelfComponent extends React.ForwardRefExoticComponent<\n MediaShelfProps & React.RefAttributes<HTMLDivElement>\n> {\n /** \u72EC\u7ACB\u7684 ProductCard \u7EC4\u4EF6 */\n ProductCard: typeof ProductCard\n}\n\n/**\n * \u4EA7\u54C1\u5217\u8868\u7EC4\u4EF6 - \u4F7F\u7528 Swiper \u6A2A\u5411\u6ED1\u52A8\u5E03\u5C40\n */\nconst ProductsList = React.forwardRef<\n HTMLDivElement,\n {\n products: ProductCardData[]\n className?: string\n }\n>(({ products, className }, ref) => {\n const {\n copy,\n stockDisplayMode,\n stockThresholdValue,\n onLearnMore,\n onShopNow,\n onAddToCart,\n classNames,\n secondaryButtonText,\n primaryButtonText,\n secondaryButtonFun,\n primaryButtonFun,\n showOriginalPrice,\n showTags,\n } = useMediaShelfContext()\n // \u751F\u6210\u552F\u4E00 ID\uFF0C\u79FB\u9664\u7279\u6B8A\u5B57\u7B26\u4EE5\u786E\u4FDD\u53EF\u7528\u4E8E CSS \u9009\u62E9\u5668\n const id = React.useId().replace(/:/g, '')\n // \u9884\u5B9A\u4E49\u5BFC\u822A\u6309\u94AE\u9009\u62E9\u5668\uFF0C\u907F\u514D\u591A\u6B21\u62FC\u63A5\n const nextButtonClass = `swiper-button-next-custom-${id}`\n const prevButtonClass = `swiper-button-prev-custom-${id}`\n\n // Swiper \u5BFC\u822A\u72B6\u6001\n const [swiperState, setSwiperState] = React.useState({\n isBeginning: true,\n isEnd: false,\n })\n\n // Swiper \u5B9E\u4F8B\u5F15\u7528\n const swiperRef = React.useRef<any>(null)\n\n // \u8BA1\u7B97\u5E76\u8BBE\u7F6E\u6240\u6709 slide \u4E3A\u6700\u9AD8\u9AD8\u5EA6\n const equalizeSlideHeights = React.useCallback(() => {\n const swiper = swiperRef.current\n if (!swiper?.slides || swiper.slides.length === 0) return\n\n // \u5148\u91CD\u7F6E\u6240\u6709 slide \u9AD8\u5EA6\u4EE5\u83B7\u53D6\u771F\u5B9E\u5185\u5BB9\u9AD8\u5EA6\n swiper.slides.forEach((slide: HTMLElement) => {\n slide.style.height = 'auto'\n })\n\n // \u8BA1\u7B97\u6700\u5927\u9AD8\u5EA6\n // @ts-ignore\n const heights = Array.from(swiper.slides).map((slide: HTMLElement) => slide.scrollHeight)\n const maxHeight = Math.max(...heights)\n\n // \u8BBE\u7F6E\u6240\u6709 slide \u4E3A\u6700\u5927\u9AD8\u5EA6\n if (maxHeight > 0) {\n swiper.slides.forEach((slide: HTMLElement) => {\n slide.style.height = `${maxHeight}px`\n })\n }\n }, [])\n\n // \u76D1\u542C\u7A97\u53E3 resize \u91CD\u65B0\u8BA1\u7B97\u9AD8\u5EA6\n React.useEffect(() => {\n const handleResize = () => {\n // \u4F7F\u7528 requestAnimationFrame \u786E\u4FDD DOM \u66F4\u65B0\u5B8C\u6210\n requestAnimationFrame(equalizeSlideHeights)\n }\n\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [equalizeSlideHeights])\n\n if (products?.length === 0) {\n return null\n }\n\n return (\n <div ref={ref} className={className}>\n {/* Swiper \u6A2A\u5411\u6ED1\u52A8\u5E03\u5C40 */}\n <div className=\"relative\">\n <Swiper\n modules={[Navigation]}\n spaceBetween={16}\n slidesPerView=\"auto\"\n navigation={{\n nextEl: `.${nextButtonClass}`,\n prevEl: `.${prevButtonClass}`,\n }}\n onSwiper={swiper => {\n swiperRef.current = swiper\n setSwiperState({\n isBeginning: swiper.isBeginning,\n isEnd: swiper.isEnd,\n })\n // \u5EF6\u8FDF\u6267\u884C\u4EE5\u786E\u4FDD\u5185\u5BB9\u6E32\u67D3\u5B8C\u6210\n setTimeout(equalizeSlideHeights, 100)\n }}\n onSlideChange={swiper => {\n setSwiperState({\n isBeginning: swiper.isBeginning,\n isEnd: swiper.isEnd,\n })\n }}\n className=\"!overflow-visible\"\n breakpoints={{\n 0: {\n spaceBetween: 12,\n slidesPerView: 1.2,\n },\n 768: {\n spaceBetween: 12,\n slidesPerView: products.length <= 2 ? 2 : 2.3,\n },\n 1024: {\n spaceBetween: 16,\n slidesPerView: Math.min(3, products.length),\n },\n }}\n >\n {products.map((product, index) => (\n <SwiperSlide\n key={product.shopify_id + '-' + product.sku || index}\n className=\"tablet:!max-w-[50%] overflow-hidden\"\n >\n <ProductCard\n product={product}\n className=\"box-border w-full max-w-full\"\n stockDisplayMode={stockDisplayMode}\n stockThresholdValue={stockThresholdValue}\n onLearnMore={onLearnMore}\n onShopNow={onShopNow}\n onAddToCart={onAddToCart}\n classNames={classNames}\n secondaryButtonText={secondaryButtonText}\n primaryButtonText={primaryButtonText}\n secondaryButtonFun={secondaryButtonFun}\n primaryButtonFun={primaryButtonFun}\n showOriginalPrice={showOriginalPrice}\n copy={copy}\n showTags={showTags}\n />\n </SwiperSlide>\n ))}\n </Swiper>\n\n {/* \u81EA\u5B9A\u4E49\u5BFC\u822A\u6309\u94AE */}\n <button\n className={cn(`${prevButtonClass} tablet:block absolute left-4 top-1/2 z-10 hidden -translate-y-1/2`, {\n 'tablet:hidden': products.length <= 2,\n 'laptop:hidden': products.length <= 3,\n })}\n aria-label={copy?.previousSlideLabel}\n disabled={swiperState.isBeginning}\n >\n <PrevIcon disabled={swiperState.isBeginning} />\n </button>\n <button\n className={cn(`${nextButtonClass} tablet:block absolute right-4 top-1/2 z-10 hidden -translate-y-1/2`, {\n 'tablet:hidden': products.length <= 2,\n 'laptop:hidden': products.length <= 3,\n })}\n aria-label={copy?.nextSlideLabel}\n disabled={swiperState.isEnd}\n >\n <NextIcon disabled={swiperState.isEnd} />\n </button>\n </div>\n </div>\n )\n})\n\nProductsList.displayName = 'ProductsList'\n\n/**\n * MediaShelf - \u5A92\u4F53\u8D27\u67B6\n *\n * @description \u80FD\u591F\u5B9E\u65F6\u663E\u793A\u5546\u54C1\u5E93\u5B58\u4FE1\u606F\u548C\u4F1A\u5458\u4EF7\u7684\u8D27\u67B6\uFF0C\u652F\u6301\u54CD\u5E94\u5F0F\u5E03\u5C40\u548C\u591A\u79CD\u914D\u7F6E\u9009\u9879\n */\nconst MediaShelf = React.forwardRef<HTMLDivElement, MediaShelfProps>(\n ({ className, data, onLearnMore, onShopNow, onAddToCart, classNames, ...props }, ref) => {\n const boxRef = React.useRef<HTMLDivElement>(null)\n\n useExposure(boxRef, {\n componentType,\n componentName,\n componentTitle: data.title,\n componentDescription: data.description,\n })\n\n React.useImperativeHandle(ref, () => boxRef.current as HTMLDivElement)\n\n // \u4ECE data \u4E2D\u89E3\u6784\u914D\u7F6E\u9879\uFF0C\u5E76\u8BBE\u7F6E\u9ED8\u8BA4\u503C\n const {\n theme = 'light',\n codeChannel,\n showMemberPrice = true,\n showDiscount = true,\n showTags = true,\n stockDisplayMode,\n stockThresholdValue,\n showOriginalPrice = true,\n secondaryButtonText,\n primaryButtonText,\n secondaryButtonFun,\n primaryButtonFun,\n isShowTab = true,\n copy,\n } = data\n\n // \u6784\u5EFA copy \u914D\u7F6E\uFF0C\u4F7F\u7528\u4F20\u5165\u7684 copy \u914D\u7F6E\n const finalCopy: CopyConfig = copy || {}\n\n // \u6784\u5EFA Context \u503C\n const contextValue: MediaShelfContextValue = {\n codeChannel,\n showMemberPrice,\n showDiscount,\n showTags,\n stockDisplayMode,\n stockThresholdValue,\n showOriginalPrice,\n onLearnMore,\n onShopNow,\n onAddToCart,\n classNames,\n secondaryButtonText,\n secondaryButtonFun,\n primaryButtonText,\n primaryButtonFun,\n copy: finalCopy,\n }\n\n // \u83B7\u53D6\u8981\u663E\u793A\u7684\u4EA7\u54C1\u6570\u636E\n const hasTabData = data.productsTab && data.productsTab.length > 0\n const shouldShowTab = isShowTab && hasTabData\n\n return (\n <MediaShelfContext.Provider value={contextValue}>\n <div\n ref={boxRef}\n className={cn(\n 'w-full',\n {\n 'aiui-dark': theme === 'dark',\n },\n className,\n classNames?.root\n )}\n {...props}\n >\n {/* \u6807\u9898\u533A\u57DF */}\n {data.title && (\n <Heading as=\"h2\" html={data.title} size={4} className={cn('text-info-primary mb-4', classNames?.title)} />\n )}\n {data.description && (\n <Text\n size={3}\n as=\"p\"\n html={data.description}\n className={cn('text-info-primary mb-6', classNames?.description)}\n />\n )}\n\n {/* \u4EA7\u54C1\u5C55\u793A\u533A\u57DF */}\n\n <Tabs defaultValue={data.productsTab?.[0]?.id} className=\"w-full\">\n {shouldShowTab && (\n <TabsList className=\"mb-6\">\n {data.productsTab?.map(tab => (\n <TabsTrigger key={'tab-' + tab.id} value={tab.id}>\n {tab.tab}\n </TabsTrigger>\n ))}\n </TabsList>\n )}\n {shouldShowTab ? (\n data.productsTab?.map(tab => (\n <TabsContent key={'tab-content-' + tab.id} value={tab.id}>\n <ProductsList products={tab.data} />\n </TabsContent>\n ))\n ) : (\n <ProductsList products={data.productsCard} />\n )}\n </Tabs>\n </div>\n </MediaShelfContext.Provider>\n )\n }\n)\n\nMediaShelf.displayName = 'MediaShelf'\n\n// \u521B\u5EFA\u590D\u5408\u7EC4\u4EF6\nconst MediaShelfWithProductCard = MediaShelf as MediaShelfComponent\nMediaShelfWithProductCard.ProductCard = ProductCard\n\nconst MediaShelfWrapped = withLayout(MediaShelfWithProductCard)\n\nexport default MediaShelfWrapped\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "React", "cn", "withLayout", "Text", "Heading", "Tabs", "TabsList", "TabsTrigger", "TabsContent", "Swiper", "SwiperSlide", "Navigation", "ProductCard", "useExposure", "componentType", "componentName", "PrevIcon", "disabled", "NextIcon", "MediaShelfContext", "useMediaShelfContext", "context", "ProductsList", "products", "className", "ref", "copy", "stockDisplayMode", "stockThresholdValue", "onLearnMore", "onShopNow", "onAddToCart", "classNames", "secondaryButtonText", "primaryButtonText", "secondaryButtonFun", "primaryButtonFun", "showOriginalPrice", "showTags", "id", "nextButtonClass", "prevButtonClass", "swiperState", "setSwiperState", "swiperRef", "equalizeSlideHeights", "swiper", "slide", "heights", "maxHeight", "handleResize", "product", "index", "MediaShelf", "data", "props", "boxRef", "theme", "codeChannel", "showMemberPrice", "showDiscount", "isShowTab", "contextValue", "hasTabData", "shouldShowTab", "tab", "MediaShelfWithProductCard", "MediaShelfWrapped", "MediaShelf_default"]
7
7
  }
@@ -1,2 +1,4 @@
1
- declare const _default: any;
1
+ import React from 'react';
2
+ import type { MemberEquityProps } from './types.js';
3
+ declare const _default: React.ForwardRefExoticComponent<Omit<MemberEquityProps, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>>;
2
4
  export default _default;
@@ -1,4 +1,19 @@
1
- import type { MultiLayoutGraphicBlockProps } from './types';
2
- declare const _default: any;
1
+ import React from 'react';
2
+ import type { MultiLayoutGraphicBlockProps, Item } from './types';
3
+ declare const _default: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement> & {
4
+ onSecondaryButtonClick?: () => void;
5
+ onPrimaryButtonClick?: () => void;
6
+ data: {
7
+ shape?: import("../../types/props").Shape;
8
+ sectionTitle?: string;
9
+ groupByTab?: boolean;
10
+ items: ({
11
+ width?: "full" | "half" | "one-third";
12
+ } & Item)[];
13
+ carousel?: {
14
+ items: Item[];
15
+ };
16
+ };
17
+ } & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<HTMLDivElement>>;
3
18
  export default _default;
4
19
  export type { MultiLayoutGraphicBlockProps };
@@ -1,3 +1,4 @@
1
+ import type { NavigationSearchProps } from './types.js';
1
2
  export declare const canSearch: (target: any) => boolean;
2
- declare const _default: any;
3
+ declare const _default: import("react").ForwardRefExoticComponent<Omit<NavigationSearchProps & import("react").RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & import("react").RefAttributes<HTMLDivElement>>;
3
4
  export default _default;
@@ -44,5 +44,5 @@ export interface ProductCompareProps extends React.HTMLAttributes<HTMLElement> {
44
44
  theme?: Theme;
45
45
  };
46
46
  }
47
- declare const _default: any;
47
+ declare const _default: import("react").ForwardRefExoticComponent<Omit<ProductCompareProps, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & import("react").RefAttributes<unknown>>;
48
48
  export default _default;
@@ -1,2 +1,4 @@
1
- declare const _default: any;
1
+ import React from 'react';
2
+ import type { ProductHeroProps } from './types.js';
3
+ declare const _default: React.ForwardRefExoticComponent<Omit<ProductHeroProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<HTMLDivElement>>;
2
4
  export default _default;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { MediaDrawAreaProps } from './types.js';
3
+ export declare const MediaDrawArea: React.FC<MediaDrawAreaProps>;
4
+ export default MediaDrawArea;
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as t,jsxs as n}from"react/jsx-runtime";import"react";import{cn as r}from"../../helpers/index.js";import"./types.js";const i={tablet:"(min-width: 768px)",laptop:"(min-width: 1025px)",desktop:"(min-width: 1440px)",lgDesktop:"(min-width: 1920px)"};function b(e){return typeof e=="object"&&"default"in e}function f(e){return typeof e.src=="string"?e.src:e.src.default}const m=({media:e,className:a})=>{const s=e.alt||"Product Lottery";if(!b(e.src))return t("img",{src:e.src,alt:s,className:r("size-full object-contain",a),loading:"lazy"});const o=e.src;return n("picture",{children:[o.lgDesktop&&t("source",{media:i.lgDesktop,srcSet:o.lgDesktop}),o.desktop&&t("source",{media:i.desktop,srcSet:o.desktop}),o.laptop&&t("source",{media:i.laptop,srcSet:o.laptop}),o.tablet&&t("source",{media:i.tablet,srcSet:o.tablet}),t("img",{src:o.default,alt:s,className:r("size-full object-cover",a),loading:"lazy"})]})},g=({media:e,className:a})=>{const s=f(e);return t("video",{src:s,poster:e.poster,autoPlay:e.autoPlay??!0,muted:e.muted??!0,loop:e.loop??!0,playsInline:!0,className:r("size-full object-cover",a),"aria-label":e.alt||"Product Lottery Video"})},y={primary:r("bg-btn-primary text-btn-primary-foreground","shadow-lg"),secondary:r("bg-[#1D1D1F] text-white","shadow-lg hover:bg-[#1D1D1F]/90"),outline:r("border-2 border-white bg-transparent text-white","hover:bg-white/10")},p=({media:e,ctaButton:a,isDrawing:s=!1,isDisabled:o=!1,onClick:c,className:d})=>{const l=a?.text??"",u=a?.style||"primary";return n("div",{className:r("media-draw-area","size-full overflow-hidden",d),children:[t("div",{className:"absolute inset-0",children:e.type==="video"?t(g,{media:e}):t(m,{media:e})}),t("button",{type:"button",onClick:c,disabled:o||s,className:r("absolute inset-0 z-10 flex cursor-pointer items-end justify-center","tablet:pb-5 laptop:pb-6 desktop:pb-8 lg-desktop:pb-10 pb-4","disabled:cursor-not-allowed","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60 focus-visible:ring-offset-2"),"aria-label":s?"Drawing in progress...":l,"aria-busy":s,children:l&&n("span",{className:r("inline-flex items-center justify-center gap-2","rounded-btn px-6 py-2.5","text-sm font-semibold","laptop:px-8 laptop:py-3 laptop:text-base","desktop:px-10 desktop:py-3.5","transition-all duration-200","hover:scale-105 active:scale-95",y[u],s&&"pointer-events-none opacity-80",o&&"pointer-events-none opacity-50"),children:[s&&n("svg",{className:"size-4 animate-spin",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:[t("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round",className:"opacity-25"}),t("path",{d:"M4 12a8 8 0 018-8",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round",className:"opacity-75"})]}),l]})})]})};p.displayName="MediaDrawArea";var M=p;export{p as MediaDrawArea,M as default};
2
+ //# sourceMappingURL=MediaDrawArea.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/ProductLottery/MediaDrawArea.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport type { MediaDrawAreaProps, MediaConfig, ResponsiveMedia } from './types.js'\nimport { DEFAULT_CTA_BUTTON } from './types.js'\n\nconst BREAKPOINTS = {\n tablet: '(min-width: 768px)',\n laptop: '(min-width: 1025px)',\n desktop: '(min-width: 1440px)',\n lgDesktop: '(min-width: 1920px)',\n} as const\n\nfunction isResponsiveMedia(src: string | ResponsiveMedia): src is ResponsiveMedia {\n return typeof src === 'object' && 'default' in src\n}\n\nfunction getDefaultSrc(media: MediaConfig): string {\n if (typeof media.src === 'string') return media.src\n return media.src.default\n}\n\nconst ResponsiveImage: React.FC<{\n media: MediaConfig\n className?: string\n}> = ({ media, className }) => {\n const alt = media.alt || 'Product Lottery'\n\n if (!isResponsiveMedia(media.src)) {\n return <img src={media.src} alt={alt} className={cn('size-full object-contain', className)} loading=\"lazy\" />\n }\n\n const responsive = media.src\n\n return (\n <picture>\n {responsive.lgDesktop && <source media={BREAKPOINTS.lgDesktop} srcSet={responsive.lgDesktop} />}\n {responsive.desktop && <source media={BREAKPOINTS.desktop} srcSet={responsive.desktop} />}\n {responsive.laptop && <source media={BREAKPOINTS.laptop} srcSet={responsive.laptop} />}\n {responsive.tablet && <source media={BREAKPOINTS.tablet} srcSet={responsive.tablet} />}\n <img src={responsive.default} alt={alt} className={cn('size-full object-cover', className)} loading=\"lazy\" />\n </picture>\n )\n}\n\nconst VideoMedia: React.FC<{\n media: MediaConfig\n className?: string\n}> = ({ media, className }) => {\n const src = getDefaultSrc(media)\n\n return (\n <video\n src={src}\n poster={media.poster}\n autoPlay={media.autoPlay ?? true}\n muted={media.muted ?? true}\n loop={media.loop ?? true}\n playsInline\n className={cn('size-full object-cover', className)}\n aria-label={media.alt || 'Product Lottery Video'}\n />\n )\n}\n\nconst CTA_STYLE_MAP = {\n primary: cn('bg-btn-primary text-btn-primary-foreground', 'shadow-lg'),\n secondary: cn('bg-[#1D1D1F] text-white', 'shadow-lg hover:bg-[#1D1D1F]/90'),\n outline: cn('border-2 border-white bg-transparent text-white', 'hover:bg-white/10'),\n} as const\n\nexport const MediaDrawArea: React.FC<MediaDrawAreaProps> = ({\n media,\n ctaButton,\n isDrawing = false,\n isDisabled = false,\n onClick,\n className,\n}) => {\n const buttonText = ctaButton?.text ?? ''\n const buttonStyle = ctaButton?.style || 'primary'\n\n return (\n <div className={cn('media-draw-area', 'size-full overflow-hidden', className)}>\n {/* Media Layer */}\n <div className=\"absolute inset-0\">\n {media.type === 'video' ? <VideoMedia media={media} /> : <ResponsiveImage media={media} />}\n </div>\n\n {/* Clickable overlay \u2014 entire area triggers draw */}\n <button\n type=\"button\"\n onClick={onClick}\n disabled={isDisabled || isDrawing}\n className={cn(\n 'absolute inset-0 z-10 flex cursor-pointer items-end justify-center',\n 'tablet:pb-5 laptop:pb-6 desktop:pb-8 lg-desktop:pb-10 pb-4',\n 'disabled:cursor-not-allowed',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60 focus-visible:ring-offset-2'\n )}\n aria-label={isDrawing ? 'Drawing in progress...' : buttonText}\n aria-busy={isDrawing}\n >\n {/* CTA Button visual \u2014 hidden when no text configured */}\n {buttonText && (\n <span\n className={cn(\n 'inline-flex items-center justify-center gap-2',\n 'rounded-btn px-6 py-2.5',\n 'text-sm font-semibold',\n 'laptop:px-8 laptop:py-3 laptop:text-base',\n 'desktop:px-10 desktop:py-3.5',\n 'transition-all duration-200',\n 'hover:scale-105 active:scale-95',\n CTA_STYLE_MAP[buttonStyle],\n isDrawing && 'pointer-events-none opacity-80',\n isDisabled && 'pointer-events-none opacity-50'\n )}\n >\n {isDrawing && (\n <svg className=\"size-4 animate-spin\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n className=\"opacity-25\"\n />\n <path\n d=\"M4 12a8 8 0 018-8\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n className=\"opacity-75\"\n />\n </svg>\n )}\n {buttonText}\n </span>\n )}\n </button>\n </div>\n )\n}\n\nMediaDrawArea.displayName = 'MediaDrawArea'\n\nexport default MediaDrawArea\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "cn", "BREAKPOINTS", "isResponsiveMedia", "src", "getDefaultSrc", "media", "ResponsiveImage", "className", "alt", "responsive", "VideoMedia", "CTA_STYLE_MAP", "MediaDrawArea", "ctaButton", "isDrawing", "isDisabled", "onClick", "buttonText", "buttonStyle", "MediaDrawArea_default"]
7
+ }
@@ -0,0 +1,17 @@
1
+ import type { ProductLotteryProps, ProductLotteryHandle } from './types.js';
2
+ export declare const ProductLottery: import("react").ForwardRefExoticComponent<ProductLotteryProps & import("react").RefAttributes<ProductLotteryHandle>>;
3
+ declare const _default: import("react").ForwardRefExoticComponent<Omit<ProductLotteryProps & import("react").RefAttributes<ProductLotteryHandle>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & import("react").RefAttributes<ProductLotteryHandle>>;
4
+ export default _default;
5
+ export { WinnerModal } from '../LotteryShared/WinnerModal.js';
6
+ export { RulesModal } from '../LotteryShared/RulesModal.js';
7
+ export { MyRewardsModal } from '../LotteryShared/MyRewardsModal.js';
8
+ export { ErrorModal } from '../LotteryShared/ErrorModal.js';
9
+ export { ShareModal } from '../LotteryShared/ShareModal.js';
10
+ export { BaseModal } from '../LotteryShared/BaseModal.js';
11
+ export type { ProductLotteryProps, ProductLotteryHandle, MediaConfig, CtaButtonConfig, ResponsiveMedia, MediaDrawAreaProps, } from './types.js';
12
+ export type { Prize, ChanceMethod, ChanceMethodStatus, WinningInfo, PrizePoolProps, ChanceMethodsProps, WinnerModalProps, WinnerModalConfig, UserData, ShareModalConfig, SocialPlatform, SharePlatformConfig, } from '../LotteryShared/types.js';
13
+ export type { RulesModalProps, RuleItem } from '../LotteryShared/RulesModal.js';
14
+ export type { MyRewardsModalProps, Reward, RewardStatus } from '../LotteryShared/MyRewardsModal.js';
15
+ export type { ErrorModalProps } from '../LotteryShared/ErrorModal.js';
16
+ export type { ShareModalProps } from '../LotteryShared/ShareModal.js';
17
+ export type { BaseModalProps } from '../LotteryShared/BaseModal.js';
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as e,jsxs as n}from"react/jsx-runtime";import{useState as t,useCallback as P,useImperativeHandle as Ie,forwardRef as Le}from"react";import{cn as i}from"../../helpers/index.js";import{DEFAULT_CHANCE_TITLE as Ae}from"./types.js";import{DEFAULT_CHANCE_METHODS as De}from"../LotteryShared/types.js";import{Grid as Oe,GridItem as F}from"../../components/grid.js";import{MediaDrawArea as je}from"./MediaDrawArea.js";import{PrizePool as Be}from"../LotteryShared/PrizePool.js";import{ChanceMethods as Ue}from"../LotteryShared/ChanceMethods.js";import{WinnerModal as He}from"../LotteryShared/WinnerModal.js";import{RulesModal as Ge}from"../LotteryShared/RulesModal.js";import{MyRewardsModal as Fe}from"../LotteryShared/MyRewardsModal.js";import{ErrorModal as _}from"../LotteryShared/ErrorModal.js";import{ShareModal as _e}from"../LotteryShared/ShareModal.js";import{withLayout as Ke}from"../../shared/Styles.js";const K=Le(({prizes:T,media:Y,theme:o,ctaButton:$,chanceMethods:k=De,chanceTitle:J=Ae,chanceSubtitle:Q,chanceFooterNote:V,chanceMethodsText:M,mechanismType:R,inputConfig:X,winningInfos:Z=[],prizesTitle:q,onDrawStart:v,onDrawEnd:C,onDrawError:I,winnerModalConfig:s,rulesModalConfig:ee={},myRewardsModalConfig:te={},errorModalConfig:p={},shareModalConfig:m={},userData:d,loginPromptText:Ye="Please log in to participate",loginButtonText:$e="Log In",noChancesText:oe="You have no chances left",onLoginRequired:c,onCopyCode:re,opportunitiesText:L=["Number of draws remaining today:"],className:se},ae)=>{const{rulesData:N,rulesText:A="Rules"}=ee,{rewardsData:S,myRewardsText:D="My Rewards",codeText:le="CODE:",copyText:ie="COPY",copiedText:ne="COPIED",prizeText:pe="Prize time:"}=te,de=M?.completedText,ce=M?.usedText,f=d?.isLoggedIn??!1,O=d?.availableChances||0,j=k.length>0||R==="input",B=f&&O<=0,[u,E]=t(!1),[z,U]=t(null),[me,x]=t(!1),[fe,h]=t(!1),[ue,y]=t(!1),[xe,w]=t(!1),[he,b]=t(!1),[ye,g]=t(!1),[we,H]=t(""),[be,ge]=t(),[Te,Me]=t(),[Pe,ve]=t(),[Ce,Ne]=t(),[Se,Ee]=t(),[a,ze]=t();Ie(ae,()=>({showError:({message:r,title:l,confirmText:W})=>{H(r),ge(l),Me(W),w(!0)},hideError:()=>{w(!1)},showNoWin:r=>{ve(r?.title),Ne(r?.message),Ee(r?.confirmText),b(!0)},hideNoWin:()=>{b(!1)},showWinner:(r,l)=>{U(r),ze(l),x(!0)},hideWinner:()=>{x(!1)},showRules:()=>{h(!0)},hideRules:()=>{h(!1)},showRewards:()=>{y(!0)},hideRewards:()=>{y(!1)},showShare:()=>{g(!0)},hideShare:()=>{g(!1)},hideAllModals:()=>{x(!1),h(!1),y(!1),w(!1),b(!1),g(!1)}}),[]);const G=P(async()=>{if(!u){if(!d?.isLoggedIn){c?.();return}if(!(d.availableChances<=0)){E(!0);try{let r;v&&(r=await v());const l=T.find(W=>W.prizeKey===r)||T[0];U(l),E(!1),C?C(l):setTimeout(()=>{l.prizeKey==="try-again"?b(!0):x(!0)},300)}catch(r){E(!1),H(r.message||"An error occurred"),w(!0),I?.(r)}}}},[u,T,v,C,I,d,c]),We=P(()=>{if(!f){c?.();return}G()},[G,f,c]),ke=P(()=>{x(!1)},[]),Re=P(()=>{b(!1)},[]);return n("div",{className:i("product-lottery-container","w-full",o==="dark"?"aiui-dark":"",se),children:[n("div",{role:"status","aria-live":"polite","aria-atomic":"true",className:"sr-only",children:[u&&"Drawing in progress...",z&&!u&&`Prize won: ${z.name}`]}),n(Oe,{className:i("product-lottery-main","tablet:mb-4 mb-3"),children:[e(F,{span:j?7:12,className:i("media-section","relative flex w-full flex-1 items-center justify-center overflow-hidden","rounded-box","laptop:min-h-[288px] min-h-[240px]","lg-desktop:aspect-w-[964] lg-desktop:aspect-h-[480]","desktop:aspect-w-[759] desktop:aspect-h-[384]","laptop:aspect-w-[516] laptop:aspect-h-[288]","l-tablet:col-span-12","l-tablet:mb-3",o==="dark"?"bg-[#1E2024]":"bg-[#EAEAEC]"),children:n("div",{className:i("size-full px-[16px] pt-[16px]","lg-desktop:pb-[32px] lg-desktop:px-[32px]","desktop:pt-[24px] desktop:px-[24px]","laptop:pt-[16px] laptop:px-[16px]","tablet:px-[24px]","l-tablet:absolute l-tablet:top-0 l-tablet:inset-x-0 l-tablet:z-10"),children:[n("div",{className:"relative z-10 mb-2 flex max-h-[24px] w-full flex-wrap items-center justify-between gap-3",children:[e("div",{children:n("p",{className:"text-info-primary font-[700]",children:[L?.[0],e("span",{className:"ml-1 text-[#FF6B35]",children:O}),L?.[1]||""]})}),n("div",{className:"flex items-center gap-4",children:[N&&e("button",{onClick:()=>{if(!f){c?.();return}h(!0)},className:"cursor-pointer touch-manipulation",type:"button",children:e("span",{className:"text-info-primary font-[700] underline",children:A})}),S&&e("button",{onClick:()=>{if(!f){c?.();return}y(!0)},className:"cursor-pointer touch-manipulation whitespace-nowrap",type:"button",children:e("span",{className:"text-info-primary font-[700] underline",children:D})})]})]}),e(je,{theme:o,media:Y,ctaButton:$,isDrawing:u,isDisabled:B,onClick:We}),B&&e("div",{className:i("rounded-box absolute inset-0 z-20 flex items-center justify-center bg-black/60 backdrop-blur-sm","px-6 text-center"),children:e("div",{className:"flex flex-col items-center gap-4",children:e("p",{className:"lg-desktop:text-[24px] text-[18px] font-semibold text-white",children:oe})})})]})}),j&&e(F,{span:5,className:i("info-section","rounded-box","relative flex flex-col overflow-hidden","lg-desktop:aspect-w-[684] lg-desktop:aspect-h-[480]","desktop:aspect-w-[536] desktop:aspect-h-[384]","laptop:aspect-w-[364] laptop:aspect-h-[288]","l-tablet:min-h-[280px] laptop:max-h-[320px]","w-full","l-tablet:col-span-12",o==="dark"?"bg-[#1E2024]":"bg-[#EAEAEC]"),children:e(Ue,{theme:o,userData:d,methods:k,title:J,subtitle:Q,footerNote:V,onOpenShareModal:()=>g(!0),chanceBadgeText:M?.chanceBadgeText,completedText:de,usedText:ce,loadingText:M?.loadingText,mechanismType:R,inputConfig:X})})]}),e("div",{className:i("product-lottery-footer","rounded-box","flex flex-col overflow-hidden",o==="dark"?"bg-[#1E2024]":"bg-[#EAEAEC]"),children:e(Be,{theme:o,prizes:T,title:q,winningInfos:Z})}),e(He,{isOpen:me,prize:z,title:a?.title||s?.title,prizeTitle:a?.prizeTitle||s?.prizeTitle,prizeImage:a?.prizeImage||s?.prizeImage,prizeDescription:a?.prizeDescription||s?.prizeDescription,learnMoreUrl:a?.learnMoreUrl||s?.learnMoreUrl,learnMoreText:a?.learnMoreText||s?.learnMoreText,couponCode:a?.couponCode||s?.couponCode,expiresAt:a?.expiresAt||s?.expiresAt,couponDiscount:a?.couponDiscount||s?.couponDiscount,couponUnit:a?.couponUnit||s?.couponUnit,confirmText:a?.confirmText||s?.confirmText,onClose:ke,theme:o}),N&&e(Ge,{title:A,isOpen:fe,onClose:()=>h(!1),rules:N,theme:o}),S&&e(Fe,{isOpen:ue,onClose:()=>y(!1),rewards:S,onCopyCode:re,codeText:le,copyText:ie,copiedText:ne,prizeText:pe,theme:o,title:D}),e(_,{isOpen:xe,onClose:()=>w(!1),title:be||p?.title,message:we||p?.message,confirmText:Te||p?.confirmText,theme:o}),e(_,{isOpen:he,onClose:Re,title:Pe||p?.title,message:Ce||p?.message,confirmText:Se||p?.confirmText,theme:o}),e(_e,{isOpen:ye,onClose:()=>g(!1),title:m?.title,subtitle:m?.subtitle,note:m?.note,platforms:m?.platforms,onShareSuccess:m?.onShareSuccess,theme:o})]})});K.displayName="ProductLottery";var nt=Ke(K);import{WinnerModal as ct}from"../LotteryShared/WinnerModal.js";import{RulesModal as ft}from"../LotteryShared/RulesModal.js";import{MyRewardsModal as xt}from"../LotteryShared/MyRewardsModal.js";import{ErrorModal as yt}from"../LotteryShared/ErrorModal.js";import{ShareModal as bt}from"../LotteryShared/ShareModal.js";import{BaseModal as Tt}from"../LotteryShared/BaseModal.js";export{Tt as BaseModal,yt as ErrorModal,xt as MyRewardsModal,K as ProductLottery,ft as RulesModal,bt as ShareModal,ct as WinnerModal,nt as default};
2
+ //# sourceMappingURL=index.js.map