@anker-in/headless-ui 1.1.87 → 1.1.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/dist/cjs/biz-components/AccordionCards/index.d.ts +1 -1
  2. package/dist/cjs/biz-components/ActiveShelf/index.d.ts +1 -1
  3. package/dist/cjs/biz-components/ActivitySchedule/index.d.ts +1 -1
  4. package/dist/cjs/biz-components/AiuiProvider/index.d.ts +6 -0
  5. package/dist/cjs/biz-components/AiuiProvider/index.js +1 -1
  6. package/dist/cjs/biz-components/AiuiProvider/index.js.map +3 -3
  7. package/dist/cjs/biz-components/AnchorNavigation/index.d.ts +1 -1
  8. package/dist/cjs/biz-components/AplusDesc/index.d.ts +1 -1
  9. package/dist/cjs/biz-components/BrandCardLink/BrandCardLink.d.ts +1 -1
  10. package/dist/cjs/biz-components/BrandEquity/BrandEquity.d.ts +1 -1
  11. package/dist/cjs/biz-components/BrandEquity/BrandEquity.js +1 -1
  12. package/dist/cjs/biz-components/BrandEquity/BrandEquity.js.map +3 -3
  13. package/dist/cjs/biz-components/BrandEquity/types.d.ts +8 -0
  14. package/dist/cjs/biz-components/BrandEquity/types.js +1 -1
  15. package/dist/cjs/biz-components/BrandEquity/types.js.map +1 -1
  16. package/dist/cjs/biz-components/Category/index.d.ts +1 -1
  17. package/dist/cjs/biz-components/CreativeModule/index.d.ts +1 -1
  18. package/dist/cjs/biz-components/DownLoad/index.d.ts +1 -1
  19. package/dist/cjs/biz-components/Evaluate/index.d.ts +1 -1
  20. package/dist/cjs/biz-components/EventSchedule/index.d.ts +1 -1
  21. package/dist/cjs/biz-components/Faq/Faq.d.ts +1 -1
  22. package/dist/cjs/biz-components/Faq/Faq.js +1 -1
  23. package/dist/cjs/biz-components/Faq/Faq.js.map +2 -2
  24. package/dist/cjs/biz-components/Faq/types.d.ts +1 -0
  25. package/dist/cjs/biz-components/Faq/types.js +1 -1
  26. package/dist/cjs/biz-components/Faq/types.js.map +1 -1
  27. package/dist/cjs/biz-components/FeatureCards/FeatureCards.d.ts +1 -1
  28. package/dist/cjs/biz-components/FeatureShowcase/FeatureShowcase.d.ts +1 -1
  29. package/dist/cjs/biz-components/FeaturedBlogPosts/index.d.ts +1 -1
  30. package/dist/cjs/biz-components/Features/index.d.ts +1 -1
  31. package/dist/cjs/biz-components/FootCharger/index.d.ts +1 -1
  32. package/dist/cjs/biz-components/FooterNavigation/index.d.ts +1 -1
  33. package/dist/cjs/biz-components/GiftBox/index.d.ts +1 -1
  34. package/dist/cjs/biz-components/GiftShelf/index.d.ts +1 -1
  35. package/dist/cjs/biz-components/GiftTierShelf/index.d.ts +1 -1
  36. package/dist/cjs/biz-components/Graphic/index.d.ts +1 -1
  37. package/dist/cjs/biz-components/GraphicAttractionBlock/index.d.ts +1 -1
  38. package/dist/cjs/biz-components/GraphicMore/index.d.ts +1 -1
  39. package/dist/cjs/biz-components/GraphicOverlay/GraphicOverlay.d.ts +1 -1
  40. package/dist/cjs/biz-components/HeaderNavigation/index.d.ts +1 -1
  41. package/dist/cjs/biz-components/HeroBanner/HeroBanner.d.ts +21 -1
  42. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js +1 -1
  43. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js.map +3 -3
  44. package/dist/cjs/biz-components/HeroBanner/HeroBannerCarousel.d.ts +23 -0
  45. package/dist/cjs/biz-components/HeroBanner/HeroBannerCarousel.js +2 -0
  46. package/dist/cjs/biz-components/HeroBanner/HeroBannerCarousel.js.map +7 -0
  47. package/dist/cjs/biz-components/HeroBanner/index.d.ts +1 -0
  48. package/dist/cjs/biz-components/HeroBanner/index.js +1 -1
  49. package/dist/cjs/biz-components/HeroBanner/index.js.map +1 -1
  50. package/dist/cjs/biz-components/HeroBanner/types.d.ts +73 -0
  51. package/dist/cjs/biz-components/HeroBanner/types.js +1 -1
  52. package/dist/cjs/biz-components/HeroBanner/types.js.map +1 -1
  53. package/dist/cjs/biz-components/ImageOverlayShelf/index.d.ts +2 -2
  54. package/dist/cjs/biz-components/ImageOverlayShelf/index.js +1 -1
  55. package/dist/cjs/biz-components/ImageOverlayShelf/index.js.map +3 -3
  56. package/dist/cjs/biz-components/ImageTextFeature/ImageTextFeature.d.ts +1 -1
  57. package/dist/cjs/biz-components/ImageTextOverlay/index.d.ts +9 -0
  58. package/dist/cjs/biz-components/ImageTextOverlay/index.js +18 -0
  59. package/dist/cjs/biz-components/ImageTextOverlay/index.js.map +7 -0
  60. package/dist/cjs/biz-components/ImageTextOverlay/types.d.ts +58 -0
  61. package/dist/cjs/biz-components/ImageTextOverlay/types.js +2 -0
  62. package/dist/cjs/biz-components/ImageTextOverlay/types.js.map +7 -0
  63. package/dist/cjs/biz-components/ImageWithText/ImageWithText.d.ts +1 -1
  64. package/dist/cjs/biz-components/ImageWithText/ImageWithText.js +1 -1
  65. package/dist/cjs/biz-components/ImageWithText/ImageWithText.js.map +2 -2
  66. package/dist/cjs/biz-components/Ksp/index.d.ts +1 -1
  67. package/dist/cjs/biz-components/Listing/components/PaidShipping/index.d.ts +1 -1
  68. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.d.ts +1 -1
  69. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.d.ts +1 -1
  70. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.d.ts +1 -1
  71. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.d.ts +1 -1
  72. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.d.ts +1 -1
  73. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductOptions/index.d.ts +1 -1
  74. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductGallery/index.d.ts +1 -1
  75. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductPaidShipping/index.d.ts +1 -1
  76. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductSummary/index.d.ts +1 -1
  77. package/dist/cjs/biz-components/Listing/components/PurchaseBar/index.d.ts +1 -1
  78. package/dist/cjs/biz-components/LotteryShared/BaseModal.js +1 -1
  79. package/dist/cjs/biz-components/LotteryShared/BaseModal.js.map +2 -2
  80. package/dist/cjs/biz-components/LotteryShared/ChanceMethods.js +1 -1
  81. package/dist/cjs/biz-components/LotteryShared/ChanceMethods.js.map +3 -3
  82. package/dist/cjs/biz-components/LotteryShared/ErrorModal.js +1 -1
  83. package/dist/cjs/biz-components/LotteryShared/ErrorModal.js.map +2 -2
  84. package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.d.ts +33 -0
  85. package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.js +1 -1
  86. package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.js.map +3 -3
  87. package/dist/cjs/biz-components/LotteryShared/PrizePool.js +1 -1
  88. package/dist/cjs/biz-components/LotteryShared/PrizePool.js.map +3 -3
  89. package/dist/cjs/biz-components/LotteryShared/WinnerModal.d.ts +1 -1
  90. package/dist/cjs/biz-components/LotteryShared/WinnerModal.js +1 -1
  91. package/dist/cjs/biz-components/LotteryShared/WinnerModal.js.map +3 -3
  92. package/dist/cjs/biz-components/LotteryShared/types.d.ts +101 -0
  93. package/dist/cjs/biz-components/LotteryShared/types.js +1 -1
  94. package/dist/cjs/biz-components/LotteryShared/types.js.map +2 -2
  95. package/dist/cjs/biz-components/Marquee/Marquee.d.ts +2 -1
  96. package/dist/cjs/biz-components/Marquee/Marquee.js +1 -1
  97. package/dist/cjs/biz-components/Marquee/Marquee.js.map +3 -3
  98. package/dist/cjs/biz-components/MarqueeReview/index.d.ts +1 -1
  99. package/dist/cjs/biz-components/Media/index.d.ts +15 -3
  100. package/dist/cjs/biz-components/Media/index.js +1 -1
  101. package/dist/cjs/biz-components/Media/index.js.map +3 -3
  102. package/dist/cjs/biz-components/MediaEndorsement/index.d.ts +1 -1
  103. package/dist/cjs/biz-components/MediaEndorsement/index.js +2 -2
  104. package/dist/cjs/biz-components/MediaEndorsement/index.js.map +3 -3
  105. package/dist/cjs/biz-components/MediaPlayerBase/index.d.ts +1 -1
  106. package/dist/cjs/biz-components/MediaPlayerBase/index.js +1 -1
  107. package/dist/cjs/biz-components/MediaPlayerBase/index.js.map +3 -3
  108. package/dist/cjs/biz-components/MediaPlayerBase/types.d.ts +26 -0
  109. package/dist/cjs/biz-components/MediaPlayerBase/types.js +1 -1
  110. package/dist/cjs/biz-components/MediaPlayerBase/types.js.map +1 -1
  111. package/dist/cjs/biz-components/MediaPlayerMulti/index.d.ts +1 -1
  112. package/dist/cjs/biz-components/MediaPlayerSticky/index.d.ts +1 -1
  113. package/dist/cjs/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.d.ts +1 -1
  114. package/dist/cjs/biz-components/MediaSceneSwitcherV2/index.d.ts +1 -1
  115. package/dist/cjs/biz-components/MediaShelf/index.d.ts +1 -1
  116. package/dist/cjs/biz-components/MemberEquity/index.d.ts +1 -1
  117. package/dist/cjs/biz-components/MiniCart/index.js +1 -1
  118. package/dist/cjs/biz-components/MiniCart/index.js.map +2 -2
  119. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +1 -1
  120. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js +1 -1
  121. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js.map +2 -2
  122. package/dist/cjs/biz-components/NavigationSearch/index.d.ts +1 -1
  123. package/dist/cjs/biz-components/ProductCompare/index.d.ts +1 -1
  124. package/dist/cjs/biz-components/ProductHero/ProductHero.d.ts +1 -1
  125. package/dist/cjs/biz-components/ProductLottery/MediaDrawArea.js +1 -1
  126. package/dist/cjs/biz-components/ProductLottery/MediaDrawArea.js.map +3 -3
  127. package/dist/cjs/biz-components/ProductLottery/index.d.ts +3 -2
  128. package/dist/cjs/biz-components/ProductLottery/index.js +1 -1
  129. package/dist/cjs/biz-components/ProductLottery/index.js.map +3 -3
  130. package/dist/cjs/biz-components/ProductLottery/types.d.ts +75 -89
  131. package/dist/cjs/biz-components/ProductLottery/types.js +1 -1
  132. package/dist/cjs/biz-components/ProductLottery/types.js.map +2 -2
  133. package/dist/cjs/biz-components/ProductNav/ProductNav.d.ts +1 -1
  134. package/dist/cjs/biz-components/PromotionalBar/index.d.ts +3 -2
  135. package/dist/cjs/biz-components/PromotionalBar/index.js +1 -1
  136. package/dist/cjs/biz-components/PromotionalBar/index.js.map +3 -3
  137. package/dist/cjs/biz-components/SceneShelfV2/index.d.ts +113 -0
  138. package/dist/cjs/biz-components/SceneShelfV2/index.js +2 -0
  139. package/dist/cjs/biz-components/SceneShelfV2/index.js.map +7 -0
  140. package/dist/cjs/biz-components/SceneShelfV3/ProductCard.d.ts +89 -0
  141. package/dist/cjs/biz-components/SceneShelfV3/ProductCard.js +2 -0
  142. package/dist/cjs/biz-components/SceneShelfV3/ProductCard.js.map +7 -0
  143. package/dist/cjs/biz-components/SceneShelfV3/index.d.ts +79 -0
  144. package/dist/cjs/biz-components/SceneShelfV3/index.js +2 -0
  145. package/dist/cjs/biz-components/SceneShelfV3/index.js.map +7 -0
  146. package/dist/cjs/biz-components/SceneShelfV3/types.d.ts +19 -0
  147. package/dist/cjs/biz-components/SceneShelfV3/types.js +2 -0
  148. package/dist/cjs/biz-components/SceneShelfV3/types.js.map +7 -0
  149. package/dist/cjs/biz-components/SecondaryBanner/SecondaryBannerCarousel.d.ts +21 -0
  150. package/dist/cjs/biz-components/SecondaryBanner/SecondaryBannerCarousel.js +2 -0
  151. package/dist/cjs/biz-components/SecondaryBanner/SecondaryBannerCarousel.js.map +7 -0
  152. package/dist/cjs/biz-components/SecondaryBanner/index.d.ts +65 -1
  153. package/dist/cjs/biz-components/SecondaryBanner/index.js +1 -1
  154. package/dist/cjs/biz-components/SecondaryBanner/index.js.map +3 -3
  155. package/dist/cjs/biz-components/SelectStore/index.d.ts +1 -1
  156. package/dist/cjs/biz-components/ShelfDisplay/index.d.ts +1 -1
  157. package/dist/cjs/biz-components/Slogan/index.d.ts +1 -1
  158. package/dist/cjs/biz-components/Spacer/index.d.ts +1 -1
  159. package/dist/cjs/biz-components/Specs/index.d.ts +1 -1
  160. package/dist/cjs/biz-components/SpecsComparison/SpecsComparison.d.ts +1 -1
  161. package/dist/cjs/biz-components/TabWithImage/TabWithImage.d.ts +1 -1
  162. package/dist/cjs/biz-components/Tabs/Tabs.d.ts +1 -1
  163. package/dist/cjs/biz-components/TabsGroup/index.d.ts +1 -1
  164. package/dist/cjs/biz-components/TabsWithMedia/TabsWithMedia.d.ts +1 -1
  165. package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.d.ts +1 -1
  166. package/dist/cjs/biz-components/Title/index.d.ts +1 -1
  167. package/dist/cjs/biz-components/Title/index.js +1 -1
  168. package/dist/cjs/biz-components/Title/index.js.map +3 -3
  169. package/dist/cjs/biz-components/Title/types.d.ts +53 -1
  170. package/dist/cjs/biz-components/Title/types.js +1 -1
  171. package/dist/cjs/biz-components/Title/types.js.map +1 -1
  172. package/dist/cjs/biz-components/VideoFeature/VideoFeature.d.ts +1 -1
  173. package/dist/cjs/biz-components/WheelLottery/BaseModal.js +1 -1
  174. package/dist/cjs/biz-components/WheelLottery/BaseModal.js.map +2 -2
  175. package/dist/cjs/biz-components/WheelLottery/ErrorModal.js +1 -1
  176. package/dist/cjs/biz-components/WheelLottery/ErrorModal.js.map +2 -2
  177. package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.js +1 -1
  178. package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.js.map +2 -2
  179. package/dist/cjs/biz-components/WheelLottery/WinnerModal.js +1 -1
  180. package/dist/cjs/biz-components/WheelLottery/WinnerModal.js.map +2 -2
  181. package/dist/cjs/biz-components/WheelLottery/index.d.ts +2 -1
  182. package/dist/cjs/biz-components/WheelLottery/index.js +1 -1
  183. package/dist/cjs/biz-components/WheelLottery/index.js.map +3 -3
  184. package/dist/cjs/biz-components/WheelLottery/types.d.ts +6 -0
  185. package/dist/cjs/biz-components/WheelLottery/types.js.map +2 -2
  186. package/dist/cjs/biz-components/WhyChoose/WhyChoose.d.ts +1 -1
  187. package/dist/cjs/biz-components/index.d.ts +7 -0
  188. package/dist/cjs/biz-components/index.js +1 -1
  189. package/dist/cjs/biz-components/index.js.map +3 -3
  190. package/dist/cjs/hooks/useExposure.d.ts +4 -3
  191. package/dist/cjs/hooks/useExposure.js +1 -1
  192. package/dist/cjs/hooks/useExposure.js.map +3 -3
  193. package/dist/cjs/hooks/useGridRowCount.d.ts +16 -0
  194. package/dist/cjs/hooks/useGridRowCount.js +2 -0
  195. package/dist/cjs/hooks/useGridRowCount.js.map +7 -0
  196. package/dist/cjs/hooks/useViewItemList.d.ts +21 -0
  197. package/dist/cjs/hooks/useViewItemList.js +2 -0
  198. package/dist/cjs/hooks/useViewItemList.js.map +7 -0
  199. package/dist/cjs/index.d.ts +1 -0
  200. package/dist/cjs/index.js +1 -1
  201. package/dist/cjs/index.js.map +3 -3
  202. package/dist/cjs/shared/Styles.js +1 -1
  203. package/dist/cjs/shared/Styles.js.map +3 -3
  204. package/dist/cjs/shared/trackUrlRef.d.ts +9 -0
  205. package/dist/cjs/shared/trackUrlRef.js +1 -1
  206. package/dist/cjs/shared/trackUrlRef.js.map +3 -3
  207. package/dist/cjs/types/props.d.ts +18 -1
  208. package/dist/cjs/types/props.js +1 -1
  209. package/dist/cjs/types/props.js.map +1 -1
  210. package/dist/esm/biz-components/AccordionCards/index.d.ts +1 -1
  211. package/dist/esm/biz-components/ActiveShelf/index.d.ts +1 -1
  212. package/dist/esm/biz-components/ActivitySchedule/index.d.ts +1 -1
  213. package/dist/esm/biz-components/AiuiProvider/index.d.ts +6 -0
  214. package/dist/esm/biz-components/AiuiProvider/index.js +1 -1
  215. package/dist/esm/biz-components/AiuiProvider/index.js.map +3 -3
  216. package/dist/esm/biz-components/AnchorNavigation/index.d.ts +1 -1
  217. package/dist/esm/biz-components/AplusDesc/index.d.ts +1 -1
  218. package/dist/esm/biz-components/BrandCardLink/BrandCardLink.d.ts +1 -1
  219. package/dist/esm/biz-components/BrandEquity/BrandEquity.d.ts +1 -1
  220. package/dist/esm/biz-components/BrandEquity/BrandEquity.js +1 -1
  221. package/dist/esm/biz-components/BrandEquity/BrandEquity.js.map +3 -3
  222. package/dist/esm/biz-components/BrandEquity/types.d.ts +8 -0
  223. package/dist/esm/biz-components/Category/index.d.ts +1 -1
  224. package/dist/esm/biz-components/CreativeModule/index.d.ts +1 -1
  225. package/dist/esm/biz-components/DownLoad/index.d.ts +1 -1
  226. package/dist/esm/biz-components/Evaluate/index.d.ts +1 -1
  227. package/dist/esm/biz-components/EventSchedule/index.d.ts +1 -1
  228. package/dist/esm/biz-components/Faq/Faq.d.ts +1 -1
  229. package/dist/esm/biz-components/Faq/Faq.js +1 -1
  230. package/dist/esm/biz-components/Faq/Faq.js.map +2 -2
  231. package/dist/esm/biz-components/Faq/types.d.ts +1 -0
  232. package/dist/esm/biz-components/FeatureCards/FeatureCards.d.ts +1 -1
  233. package/dist/esm/biz-components/FeatureShowcase/FeatureShowcase.d.ts +1 -1
  234. package/dist/esm/biz-components/FeaturedBlogPosts/index.d.ts +1 -1
  235. package/dist/esm/biz-components/Features/index.d.ts +1 -1
  236. package/dist/esm/biz-components/FootCharger/index.d.ts +1 -1
  237. package/dist/esm/biz-components/FooterNavigation/index.d.ts +1 -1
  238. package/dist/esm/biz-components/GiftBox/index.d.ts +1 -1
  239. package/dist/esm/biz-components/GiftShelf/index.d.ts +1 -1
  240. package/dist/esm/biz-components/GiftTierShelf/index.d.ts +1 -1
  241. package/dist/esm/biz-components/Graphic/index.d.ts +1 -1
  242. package/dist/esm/biz-components/GraphicAttractionBlock/index.d.ts +1 -1
  243. package/dist/esm/biz-components/GraphicMore/index.d.ts +1 -1
  244. package/dist/esm/biz-components/GraphicOverlay/GraphicOverlay.d.ts +1 -1
  245. package/dist/esm/biz-components/HeaderNavigation/index.d.ts +1 -1
  246. package/dist/esm/biz-components/HeroBanner/HeroBanner.d.ts +21 -1
  247. package/dist/esm/biz-components/HeroBanner/HeroBanner.js +1 -1
  248. package/dist/esm/biz-components/HeroBanner/HeroBanner.js.map +3 -3
  249. package/dist/esm/biz-components/HeroBanner/HeroBannerCarousel.d.ts +23 -0
  250. package/dist/esm/biz-components/HeroBanner/HeroBannerCarousel.js +2 -0
  251. package/dist/esm/biz-components/HeroBanner/HeroBannerCarousel.js.map +7 -0
  252. package/dist/esm/biz-components/HeroBanner/index.d.ts +1 -0
  253. package/dist/esm/biz-components/HeroBanner/index.js +1 -1
  254. package/dist/esm/biz-components/HeroBanner/index.js.map +1 -1
  255. package/dist/esm/biz-components/HeroBanner/types.d.ts +73 -0
  256. package/dist/esm/biz-components/ImageOverlayShelf/index.d.ts +2 -2
  257. package/dist/esm/biz-components/ImageOverlayShelf/index.js +1 -1
  258. package/dist/esm/biz-components/ImageOverlayShelf/index.js.map +3 -3
  259. package/dist/esm/biz-components/ImageTextFeature/ImageTextFeature.d.ts +1 -1
  260. package/dist/esm/biz-components/ImageTextOverlay/index.d.ts +9 -0
  261. package/dist/esm/biz-components/ImageTextOverlay/index.js +18 -0
  262. package/dist/esm/biz-components/ImageTextOverlay/index.js.map +7 -0
  263. package/dist/esm/biz-components/ImageTextOverlay/types.d.ts +58 -0
  264. package/dist/esm/biz-components/ImageTextOverlay/types.js +1 -0
  265. package/dist/esm/biz-components/ImageTextOverlay/types.js.map +7 -0
  266. package/dist/esm/biz-components/ImageWithText/ImageWithText.d.ts +1 -1
  267. package/dist/esm/biz-components/ImageWithText/ImageWithText.js +1 -1
  268. package/dist/esm/biz-components/ImageWithText/ImageWithText.js.map +2 -2
  269. package/dist/esm/biz-components/Ksp/index.d.ts +1 -1
  270. package/dist/esm/biz-components/Listing/components/PaidShipping/index.d.ts +1 -1
  271. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.d.ts +1 -1
  272. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.d.ts +1 -1
  273. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.d.ts +1 -1
  274. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductFreeGift/index.d.ts +1 -1
  275. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.d.ts +1 -1
  276. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductOptions/index.d.ts +1 -1
  277. package/dist/esm/biz-components/Listing/components/ProductCard/ProductGallery/index.d.ts +1 -1
  278. package/dist/esm/biz-components/Listing/components/ProductCard/ProductPaidShipping/index.d.ts +1 -1
  279. package/dist/esm/biz-components/Listing/components/ProductCard/ProductSummary/index.d.ts +1 -1
  280. package/dist/esm/biz-components/Listing/components/PurchaseBar/index.d.ts +1 -1
  281. package/dist/esm/biz-components/LotteryShared/BaseModal.js +1 -1
  282. package/dist/esm/biz-components/LotteryShared/BaseModal.js.map +2 -2
  283. package/dist/esm/biz-components/LotteryShared/ChanceMethods.js +1 -1
  284. package/dist/esm/biz-components/LotteryShared/ChanceMethods.js.map +3 -3
  285. package/dist/esm/biz-components/LotteryShared/ErrorModal.js +1 -1
  286. package/dist/esm/biz-components/LotteryShared/ErrorModal.js.map +2 -2
  287. package/dist/esm/biz-components/LotteryShared/MyRewardsModal.d.ts +33 -0
  288. package/dist/esm/biz-components/LotteryShared/MyRewardsModal.js +1 -1
  289. package/dist/esm/biz-components/LotteryShared/MyRewardsModal.js.map +3 -3
  290. package/dist/esm/biz-components/LotteryShared/PrizePool.js +1 -1
  291. package/dist/esm/biz-components/LotteryShared/PrizePool.js.map +3 -3
  292. package/dist/esm/biz-components/LotteryShared/WinnerModal.d.ts +1 -1
  293. package/dist/esm/biz-components/LotteryShared/WinnerModal.js +1 -1
  294. package/dist/esm/biz-components/LotteryShared/WinnerModal.js.map +3 -3
  295. package/dist/esm/biz-components/LotteryShared/types.d.ts +101 -0
  296. package/dist/esm/biz-components/LotteryShared/types.js +1 -1
  297. package/dist/esm/biz-components/LotteryShared/types.js.map +2 -2
  298. package/dist/esm/biz-components/Marquee/Marquee.d.ts +2 -1
  299. package/dist/esm/biz-components/Marquee/Marquee.js +1 -1
  300. package/dist/esm/biz-components/Marquee/Marquee.js.map +2 -2
  301. package/dist/esm/biz-components/MarqueeReview/index.d.ts +1 -1
  302. package/dist/esm/biz-components/Media/index.d.ts +15 -3
  303. package/dist/esm/biz-components/Media/index.js +1 -1
  304. package/dist/esm/biz-components/Media/index.js.map +3 -3
  305. package/dist/esm/biz-components/MediaEndorsement/index.d.ts +1 -1
  306. package/dist/esm/biz-components/MediaEndorsement/index.js +2 -2
  307. package/dist/esm/biz-components/MediaEndorsement/index.js.map +3 -3
  308. package/dist/esm/biz-components/MediaPlayerBase/index.d.ts +1 -1
  309. package/dist/esm/biz-components/MediaPlayerBase/index.js +1 -1
  310. package/dist/esm/biz-components/MediaPlayerBase/index.js.map +3 -3
  311. package/dist/esm/biz-components/MediaPlayerBase/types.d.ts +26 -0
  312. package/dist/esm/biz-components/MediaPlayerMulti/index.d.ts +1 -1
  313. package/dist/esm/biz-components/MediaPlayerSticky/index.d.ts +1 -1
  314. package/dist/esm/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.d.ts +1 -1
  315. package/dist/esm/biz-components/MediaSceneSwitcherV2/index.d.ts +1 -1
  316. package/dist/esm/biz-components/MediaShelf/index.d.ts +1 -1
  317. package/dist/esm/biz-components/MemberEquity/index.d.ts +1 -1
  318. package/dist/esm/biz-components/MiniCart/index.js +1 -1
  319. package/dist/esm/biz-components/MiniCart/index.js.map +2 -2
  320. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +1 -1
  321. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js +1 -1
  322. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js.map +2 -2
  323. package/dist/esm/biz-components/NavigationSearch/index.d.ts +1 -1
  324. package/dist/esm/biz-components/ProductCompare/index.d.ts +1 -1
  325. package/dist/esm/biz-components/ProductHero/ProductHero.d.ts +1 -1
  326. package/dist/esm/biz-components/ProductLottery/MediaDrawArea.js +1 -1
  327. package/dist/esm/biz-components/ProductLottery/MediaDrawArea.js.map +3 -3
  328. package/dist/esm/biz-components/ProductLottery/index.d.ts +3 -2
  329. package/dist/esm/biz-components/ProductLottery/index.js +1 -1
  330. package/dist/esm/biz-components/ProductLottery/index.js.map +3 -3
  331. package/dist/esm/biz-components/ProductLottery/types.d.ts +75 -89
  332. package/dist/esm/biz-components/ProductLottery/types.js.map +2 -2
  333. package/dist/esm/biz-components/ProductNav/ProductNav.d.ts +1 -1
  334. package/dist/esm/biz-components/PromotionalBar/index.d.ts +3 -2
  335. package/dist/esm/biz-components/PromotionalBar/index.js +1 -1
  336. package/dist/esm/biz-components/PromotionalBar/index.js.map +3 -3
  337. package/dist/esm/biz-components/SceneShelfV2/index.d.ts +113 -0
  338. package/dist/esm/biz-components/SceneShelfV2/index.js +2 -0
  339. package/dist/esm/biz-components/SceneShelfV2/index.js.map +7 -0
  340. package/dist/esm/biz-components/SceneShelfV3/ProductCard.d.ts +89 -0
  341. package/dist/esm/biz-components/SceneShelfV3/ProductCard.js +2 -0
  342. package/dist/esm/biz-components/SceneShelfV3/ProductCard.js.map +7 -0
  343. package/dist/esm/biz-components/SceneShelfV3/index.d.ts +79 -0
  344. package/dist/esm/biz-components/SceneShelfV3/index.js +2 -0
  345. package/dist/esm/biz-components/SceneShelfV3/index.js.map +7 -0
  346. package/dist/esm/biz-components/SceneShelfV3/types.d.ts +19 -0
  347. package/dist/esm/biz-components/SceneShelfV3/types.js +1 -0
  348. package/dist/esm/biz-components/SceneShelfV3/types.js.map +7 -0
  349. package/dist/esm/biz-components/SecondaryBanner/SecondaryBannerCarousel.d.ts +21 -0
  350. package/dist/esm/biz-components/SecondaryBanner/SecondaryBannerCarousel.js +2 -0
  351. package/dist/esm/biz-components/SecondaryBanner/SecondaryBannerCarousel.js.map +7 -0
  352. package/dist/esm/biz-components/SecondaryBanner/index.d.ts +65 -1
  353. package/dist/esm/biz-components/SecondaryBanner/index.js +1 -1
  354. package/dist/esm/biz-components/SecondaryBanner/index.js.map +3 -3
  355. package/dist/esm/biz-components/SelectStore/index.d.ts +1 -1
  356. package/dist/esm/biz-components/ShelfDisplay/index.d.ts +1 -1
  357. package/dist/esm/biz-components/Slogan/index.d.ts +1 -1
  358. package/dist/esm/biz-components/Spacer/index.d.ts +1 -1
  359. package/dist/esm/biz-components/Specs/index.d.ts +1 -1
  360. package/dist/esm/biz-components/SpecsComparison/SpecsComparison.d.ts +1 -1
  361. package/dist/esm/biz-components/TabWithImage/TabWithImage.d.ts +1 -1
  362. package/dist/esm/biz-components/Tabs/Tabs.d.ts +1 -1
  363. package/dist/esm/biz-components/TabsGroup/index.d.ts +1 -1
  364. package/dist/esm/biz-components/TabsWithMedia/TabsWithMedia.d.ts +1 -1
  365. package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.d.ts +1 -1
  366. package/dist/esm/biz-components/Title/index.d.ts +1 -1
  367. package/dist/esm/biz-components/Title/index.js +1 -1
  368. package/dist/esm/biz-components/Title/index.js.map +3 -3
  369. package/dist/esm/biz-components/Title/types.d.ts +53 -1
  370. package/dist/esm/biz-components/VideoFeature/VideoFeature.d.ts +1 -1
  371. package/dist/esm/biz-components/WheelLottery/BaseModal.js +1 -1
  372. package/dist/esm/biz-components/WheelLottery/BaseModal.js.map +2 -2
  373. package/dist/esm/biz-components/WheelLottery/ErrorModal.js +1 -1
  374. package/dist/esm/biz-components/WheelLottery/ErrorModal.js.map +2 -2
  375. package/dist/esm/biz-components/WheelLottery/MyRewardsModal.js +1 -1
  376. package/dist/esm/biz-components/WheelLottery/MyRewardsModal.js.map +2 -2
  377. package/dist/esm/biz-components/WheelLottery/WinnerModal.js +1 -1
  378. package/dist/esm/biz-components/WheelLottery/WinnerModal.js.map +2 -2
  379. package/dist/esm/biz-components/WheelLottery/index.d.ts +2 -1
  380. package/dist/esm/biz-components/WheelLottery/index.js +1 -1
  381. package/dist/esm/biz-components/WheelLottery/index.js.map +3 -3
  382. package/dist/esm/biz-components/WheelLottery/types.d.ts +6 -0
  383. package/dist/esm/biz-components/WheelLottery/types.js.map +2 -2
  384. package/dist/esm/biz-components/WhyChoose/WhyChoose.d.ts +1 -1
  385. package/dist/esm/biz-components/index.d.ts +7 -0
  386. package/dist/esm/biz-components/index.js +1 -1
  387. package/dist/esm/biz-components/index.js.map +3 -3
  388. package/dist/esm/hooks/useExposure.d.ts +4 -3
  389. package/dist/esm/hooks/useExposure.js +1 -1
  390. package/dist/esm/hooks/useExposure.js.map +3 -3
  391. package/dist/esm/hooks/useGridRowCount.d.ts +16 -0
  392. package/dist/esm/hooks/useGridRowCount.js +2 -0
  393. package/dist/esm/hooks/useGridRowCount.js.map +7 -0
  394. package/dist/esm/hooks/useViewItemList.d.ts +21 -0
  395. package/dist/esm/hooks/useViewItemList.js +2 -0
  396. package/dist/esm/hooks/useViewItemList.js.map +7 -0
  397. package/dist/esm/index.d.ts +1 -0
  398. package/dist/esm/index.js +1 -1
  399. package/dist/esm/index.js.map +3 -3
  400. package/dist/esm/shared/Styles.js +1 -1
  401. package/dist/esm/shared/Styles.js.map +3 -3
  402. package/dist/esm/shared/trackUrlRef.d.ts +9 -0
  403. package/dist/esm/shared/trackUrlRef.js +1 -1
  404. package/dist/esm/shared/trackUrlRef.js.map +3 -3
  405. package/dist/esm/types/props.d.ts +18 -1
  406. package/dist/tokens/anker.css +2 -2
  407. package/dist/tokens/eufy.css +2 -2
  408. package/dist/tokens/eufyMake.css +2 -2
  409. package/dist/tokens/soundcore.css +2 -2
  410. package/package.json +1 -1
  411. package/style.css +215 -26
  412. package/tailwind.config.js +14 -2
@@ -0,0 +1,79 @@
1
+ import * as React from 'react';
2
+ import { type PromotionalBarProps } from '../PromotionalBar/index.js';
3
+ import { ProductCard, type ProductCardData, type SceneShelfV3SemanticName, type StockDisplayMode } from './ProductCard.js';
4
+ import type { ButtonFunctionType, CopyConfig } from './types.js';
5
+ /**
6
+ * 场景 Tab 数据接口(匹配 mock.json.sceneTabs 结构)
7
+ */
8
+ export interface ProductTab {
9
+ /** Tab 唯一 ID */
10
+ id: string;
11
+ /** Tab 标签文本 */
12
+ label: string;
13
+ /** 产品列表 */
14
+ products: ProductCardData[];
15
+ /** 资源块(如 PromotionalBar) */
16
+ resourceBlocks?: Array<PromotionalBarProps['data'] & {
17
+ blockType: string;
18
+ display: 'visible' | 'hidden';
19
+ }>;
20
+ }
21
+ /**
22
+ * SceneShelfV3 数据接口(直接匹配 mock.json 结构)
23
+ */
24
+ export interface SceneShelfV3Data {
25
+ /** 组件实例 ID */
26
+ id: string;
27
+ /** 主题 */
28
+ theme?: 'light' | 'dark';
29
+ /** 显示状态 */
30
+ display?: 'visible' | 'hidden';
31
+ /** 组件类型标识 */
32
+ blockType: 'ipc-scene-shelf-v3';
33
+ /** 场景 Tab 列表(每个 Tab 包含产品和 resourceBlocks) */
34
+ sceneTabs: ProductTab[];
35
+ copy?: CopyConfig;
36
+ /** 是否显示标签 */
37
+ showTags?: boolean;
38
+ /** 查看更多限制数 */
39
+ viewMoreLimit?: number;
40
+ /** 主按钮文本 */
41
+ primaryButtonText?: string;
42
+ /** 主按钮功能 */
43
+ primaryButtonFun?: ButtonFunctionType;
44
+ /** 次按钮文本 */
45
+ secondaryButtonText?: string;
46
+ /** 次按钮功能 */
47
+ secondaryButtonFun?: ButtonFunctionType;
48
+ /** 组件标题(可选,非 mock 必需) */
49
+ title?: string;
50
+ /** 组件描述(可选,非 mock 必需) */
51
+ description?: string;
52
+ /** 库存展示模式(可选) */
53
+ stockDisplayMode?: StockDisplayMode;
54
+ /** 库存阈值(可选) */
55
+ stockThresholdValue?: number;
56
+ /** 是否显示原价(可选) */
57
+ showOriginalPrice?: boolean;
58
+ }
59
+ export interface SceneShelfV3Props extends React.HTMLAttributes<HTMLDivElement> {
60
+ /** 业务数据 */
61
+ data: SceneShelfV3Data;
62
+ /** 点击了解更多回调 */
63
+ onLearnMore?: (link: string) => void;
64
+ /** 点击立即购买回调 */
65
+ onShopNow?: (product: ProductCardData) => void;
66
+ /** 点击加入购物车回调 */
67
+ onAddToCart?: (product: ProductCardData) => void;
68
+ /** 语义化类名 */
69
+ classNames?: Partial<Record<SceneShelfV3SemanticName, string>>;
70
+ }
71
+ export interface SceneShelfV3Component extends React.ForwardRefExoticComponent<SceneShelfV3Props & React.RefAttributes<HTMLDivElement>> {
72
+ ProductCard: typeof ProductCard;
73
+ }
74
+ declare const _default: React.ForwardRefExoticComponent<Omit<SceneShelfV3Props & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
75
+ readonly $$typeof: symbol;
76
+ ProductCard: typeof ProductCard;
77
+ };
78
+ export default _default;
79
+ export type { StockDisplayMode, SceneShelfV3SemanticName, ProductCardData };
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var j=Object.create;var k=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,Q=Object.prototype.hasOwnProperty;var U=(e,t)=>{for(var r in t)k(e,r,{get:t[r],enumerable:!0})},R=(e,t,r,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of J(t))!Q.call(e,s)&&s!==r&&k(e,s,{get:()=>t[s],enumerable:!(u=q(t,s))||u.enumerable});return e};var F=(e,t,r)=>(r=e!=null?j(K(e)):{},R(t||!e||!e.__esModule?k(r,"default",{value:e,enumerable:!0}):r,e)),X=e=>R(k({},"__esModule",{value:!0}),e);var te={};U(te,{default:()=>ee});module.exports=X(te);var o=require("react/jsx-runtime"),y=F(require("react")),c=require("../../helpers/index.js"),i=require("../../components/index.js"),G=F(require("../PromotionalBar/index.js")),A=require("../../hooks/useExposure.js"),O=require("../../hooks/useViewItemList.js"),z=require("../../hooks/useGridRowCount.js"),I=require("../AiuiProvider/index.js"),N=require("./ProductCard.js"),W=require("../../shared/Styles.js");const Y="shelf",Z="Scene_Shelf_3_Products";function $({products:e,copy:t,showTags:r,stockDisplayMode:u,stockThresholdValue:s,onLearnMore:d,onShopNow:x,onAddToCart:C,classNames:l,secondaryButtonText:v,secondaryButtonFun:h,primaryButtonText:m,primaryButtonFun:B,showOriginalPrice:w,viewMoreLimit:g,theme:D="light",locale:M="us",tabName:T=""}){const[f,L]=y.useState(!1),S=y.useRef(null);(0,O.useViewItemList)(S,{componentType:Y,componentName:Z,itemListName:"Scene_Shelf_3_Products",items:e.map((n,p)=>({item_id:n.sku??"",item_name:n.title,item_variant:n.id??"",price:n.currentPrice,index:p})),tabName:T});const b=(0,z.useGridRowCount)({rows:g??0,mobileCols:2,tabletCols:3,desktopCols:4});if(!e?.length)return null;const P=g!==void 0&&g>0&&e.length>b,V=P&&!f?e.slice(0,b):e,a=()=>{L(n=>!n)};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{ref:S,className:(0,c.cn)("lg-desktop:gap-4 tablet:grid-cols-3 text-info-primary laptop:grid-cols-3 desktop:grid-cols-4 laptop:gap-3 grid grid-cols-2 gap-3",l?.productGrid),children:V.map((n,p)=>(0,o.jsx)(N.ProductCard,{product:n,showTags:r,stockDisplayMode:u,stockThresholdValue:s,onLearnMore:d,onShopNow:x,onAddToCart:C,classNames:l,secondaryButtonText:v,secondaryButtonFun:h,primaryButtonText:m,primaryButtonFun:B,showOriginalPrice:w,copy:t,theme:D,locale:M,index:p,tabName:T},n.sku||p))}),P&&(0,o.jsx)("div",{className:(0,c.cn)("laptop:mt-4 mt-3 flex justify-center",l?.viewMore),children:(0,o.jsxs)("button",{onClick:a,className:"text-info-primary hover:text-brand-0 lg-desktop:text-[16px] flex items-center gap-2 text-[14px] font-bold transition-colors","aria-expanded":f,children:[f?t?.viewLessLabel:t?.viewMoreLabel,(0,o.jsx)("svg",{className:(0,c.cn)("size-4 transition-transform",f&&"rotate-180"),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,o.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})})]})}const E=y.memo($);E.displayName="SceneShelfV3.ProductsGrid";const _=y.forwardRef(({className:e,data:t,onLearnMore:r,onShopNow:u,onAddToCart:s,classNames:d,...x},C)=>{const l=y.useRef(null),{locale:v="us"}=(0,I.useAiuiContext)();(0,A.useExposure)(l,{componentType:"image",componentName:"scene_shelf_banner"}),y.useImperativeHandle(C,()=>l.current);const{theme:h="light",sceneTabs:m=[],showTags:B=!0,stockDisplayMode:w,stockThresholdValue:g,showOriginalPrice:D=!0,secondaryButtonText:M,primaryButtonText:T,secondaryButtonFun:f="learnMore",primaryButtonFun:L="buyNow",copy:S,viewMoreLimit:b}=t,P=m.length>1,V={copy:S,showTags:B,stockDisplayMode:w,stockThresholdValue:g,onLearnMore:r,onShopNow:u,onAddToCart:s,classNames:d,secondaryButtonText:M,secondaryButtonFun:f,primaryButtonText:T,primaryButtonFun:L,showOriginalPrice:D,viewMoreLimit:b,theme:h,locale:v};return(0,o.jsxs)("div",{ref:l,className:(0,c.cn)("w-full",{"aiui-dark":h==="dark"},e,d?.root),style:{"--progress-track-bg":h==="dark"?"rgba(255, 255, 255, 0.2)":"rgba(0, 0, 0, 0.2)"},...x,children:[t.title&&(0,o.jsx)(i.Heading,{as:"h2",html:t.title,size:4,className:(0,c.cn)("text-info-primary mb-4",d?.title)}),t.description&&(0,o.jsx)(i.Text,{size:3,as:"p",html:t.description,className:(0,c.cn)("text-info-primary mb-6",d?.description)}),(0,o.jsxs)(i.Tabs,{defaultValue:m[0]?.id,className:"w-full",children:[P&&(0,o.jsx)(i.TabsList,{className:(0,c.cn)("mb-6",d?.tabsList),children:m.map(a=>(0,o.jsx)(i.TabsTrigger,{value:a.id,children:a.label},a.id))}),m.map(a=>{const n=a.resourceBlocks?.find(p=>p.blockType==="PromotionalBar"&&p.display==="visible");return(0,o.jsxs)(i.TabsContent,{value:a.id,children:[n&&(0,o.jsx)(G.default,{data:n,className:(0,c.cn)("laptop:mb-4 mb-3",d?.promotionalBar)}),(0,o.jsx)(E,{products:a.products,...V,tabName:a.label})]},a.id)})]})]})});_.displayName="SceneShelfV3";const H=_;H.ProductCard=N.ProductCard;var ee=(0,W.withLayout)(H);
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/SceneShelfV3/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'\nimport PromotionalBar, { type PromotionalBarProps } from '../PromotionalBar/index.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { useViewItemList } from '../../hooks/useViewItemList.js'\nimport { useGridRowCount } from '../../hooks/useGridRowCount.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport {\n ProductCard,\n type ProductCardData,\n type SceneShelfV3SemanticName,\n type StockDisplayMode,\n} from './ProductCard.js'\nimport type { ButtonFunctionType, CopyConfig } from './types.js'\nimport { withLayout } from '../../shared/Styles.js'\n\nconst componentType = 'shelf'\nconst componentName = 'Scene_Shelf_3_Products'\n\n/**\n * \u573A\u666F Tab \u6570\u636E\u63A5\u53E3\uFF08\u5339\u914D mock.json.sceneTabs \u7ED3\u6784\uFF09\n */\nexport interface ProductTab {\n /** Tab \u552F\u4E00 ID */\n id: string\n /** Tab \u6807\u7B7E\u6587\u672C */\n label: string\n /** \u4EA7\u54C1\u5217\u8868 */\n products: ProductCardData[]\n /** \u8D44\u6E90\u5757\uFF08\u5982 PromotionalBar\uFF09 */\n resourceBlocks?: Array<PromotionalBarProps['data'] & { blockType: string; display: 'visible' | 'hidden' }>\n}\n\n/**\n * SceneShelfV3 \u6570\u636E\u63A5\u53E3\uFF08\u76F4\u63A5\u5339\u914D mock.json \u7ED3\u6784\uFF09\n */\nexport interface SceneShelfV3Data {\n // ===== \u9876\u5C42\u914D\u7F6E\u5B57\u6BB5 =====\n /** \u7EC4\u4EF6\u5B9E\u4F8B ID */\n id: string\n /** \u4E3B\u9898 */\n theme?: 'light' | 'dark'\n /** \u663E\u793A\u72B6\u6001 */\n display?: 'visible' | 'hidden'\n /** \u7EC4\u4EF6\u7C7B\u578B\u6807\u8BC6 */\n blockType: 'ipc-scene-shelf-v3'\n\n // ===== \u573A\u666F Tab \u5217\u8868 =====\n /** \u573A\u666F Tab \u5217\u8868\uFF08\u6BCF\u4E2A Tab \u5305\u542B\u4EA7\u54C1\u548C resourceBlocks\uFF09 */\n sceneTabs: ProductTab[]\n\n // ===== \u6587\u6848\u914D\u7F6E =====\n copy?: CopyConfig\n\n // ===== \u663E\u793A\u914D\u7F6E =====\n /** \u662F\u5426\u663E\u793A\u6807\u7B7E */\n showTags?: boolean\n /** \u67E5\u770B\u66F4\u591A\u9650\u5236\u6570 */\n viewMoreLimit?: number\n\n // ===== \u6309\u94AE\u914D\u7F6E =====\n /** \u4E3B\u6309\u94AE\u6587\u672C */\n primaryButtonText?: string\n /** \u4E3B\u6309\u94AE\u529F\u80FD */\n primaryButtonFun?: ButtonFunctionType\n /** \u6B21\u6309\u94AE\u6587\u672C */\n secondaryButtonText?: string\n /** \u6B21\u6309\u94AE\u529F\u80FD */\n secondaryButtonFun?: ButtonFunctionType\n\n // ===== \u53EF\u9009\u5B57\u6BB5\uFF08\u7EC4\u4EF6\u5185\u90E8\u53EF\u80FD\u4F7F\u7528\uFF09 =====\n /** \u7EC4\u4EF6\u6807\u9898\uFF08\u53EF\u9009\uFF0C\u975E mock \u5FC5\u9700\uFF09 */\n title?: string\n /** \u7EC4\u4EF6\u63CF\u8FF0\uFF08\u53EF\u9009\uFF0C\u975E mock \u5FC5\u9700\uFF09 */\n description?: string\n /** \u5E93\u5B58\u5C55\u793A\u6A21\u5F0F\uFF08\u53EF\u9009\uFF09 */\n stockDisplayMode?: StockDisplayMode\n /** \u5E93\u5B58\u9608\u503C\uFF08\u53EF\u9009\uFF09 */\n stockThresholdValue?: number\n /** \u662F\u5426\u663E\u793A\u539F\u4EF7\uFF08\u53EF\u9009\uFF09 */\n showOriginalPrice?: boolean\n}\n\nexport interface SceneShelfV3Props extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: SceneShelfV3Data\n /** \u70B9\u51FB\u4E86\u89E3\u66F4\u591A\u56DE\u8C03 */\n onLearnMore?: (link: string) => 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<SceneShelfV3SemanticName, string>>\n}\n\nexport interface SceneShelfV3Component extends React.ForwardRefExoticComponent<\n SceneShelfV3Props & React.RefAttributes<HTMLDivElement>\n> {\n ProductCard: typeof ProductCard\n}\n\n/**\n * \u4EA7\u54C1\u7F51\u683C\u7EC4\u4EF6 Props\n */\ninterface ProductsGridProps {\n products: ProductCardData[]\n copy?: CopyConfig\n showTags?: boolean\n stockDisplayMode?: StockDisplayMode\n stockThresholdValue?: number\n onLearnMore?: (link: string) => void\n onShopNow?: (product: ProductCardData) => void\n onAddToCart?: (product: ProductCardData) => void\n classNames?: Partial<Record<SceneShelfV3SemanticName, string>>\n secondaryButtonText?: string\n secondaryButtonFun?: ButtonFunctionType\n primaryButtonText?: string\n primaryButtonFun?: ButtonFunctionType\n showOriginalPrice?: boolean\n viewMoreLimit?: number\n theme?: 'light' | 'dark'\n locale?: string\n tabName?: string\n}\n\n/**\n * \u4EA7\u54C1\u7F51\u683C\u7EC4\u4EF6 - \u4EC5\u652F\u6301\u5E73\u94FA\u7F51\u683C\u5E03\u5C40\uFF08\u65E0\u8F6E\u64AD\uFF09\n */\nfunction ProductsGridComponent({\n products,\n copy,\n showTags,\n stockDisplayMode,\n stockThresholdValue,\n onLearnMore,\n onShopNow,\n onAddToCart,\n classNames,\n secondaryButtonText,\n secondaryButtonFun,\n primaryButtonText,\n primaryButtonFun,\n showOriginalPrice,\n viewMoreLimit,\n theme = 'light',\n locale = 'us',\n tabName = '',\n}: ProductsGridProps) {\n const [isExpanded, setIsExpanded] = React.useState(false)\n const productWrapperRef = React.useRef<HTMLDivElement>(null)\n\n useViewItemList(productWrapperRef, {\n componentType,\n componentName,\n itemListName: 'Scene_Shelf_3_Products',\n items: products.map((item, index) => ({\n item_id: item.sku ?? '',\n item_name: item.title,\n item_variant: item.id ?? '',\n price: item.currentPrice,\n index: index,\n })),\n tabName,\n })\n\n const visibleLimit = useGridRowCount({\n rows: viewMoreLimit ?? 0,\n mobileCols: 2,\n tabletCols: 3,\n desktopCols: 4,\n })\n\n if (!products?.length) return null\n\n const shouldShowViewMore = viewMoreLimit !== undefined && viewMoreLimit > 0 && products.length > visibleLimit\n\n const displayedProducts = shouldShowViewMore && !isExpanded ? products.slice(0, visibleLimit) : products\n\n // \u5207\u6362\u5C55\u5F00\u72B6\u6001\n const toggleExpanded = () => {\n setIsExpanded(prev => !prev)\n }\n\n return (\n <>\n <div\n ref={productWrapperRef}\n className={cn(\n 'lg-desktop:gap-4 tablet:grid-cols-3 text-info-primary laptop:grid-cols-3 desktop:grid-cols-4 laptop:gap-3 grid grid-cols-2 gap-3',\n classNames?.productGrid\n )}\n >\n {displayedProducts.map((product, index) => (\n <ProductCard\n key={product.sku || index}\n product={product}\n showTags={showTags}\n stockDisplayMode={stockDisplayMode}\n stockThresholdValue={stockThresholdValue}\n onLearnMore={onLearnMore}\n onShopNow={onShopNow}\n onAddToCart={onAddToCart}\n classNames={classNames}\n secondaryButtonText={secondaryButtonText}\n secondaryButtonFun={secondaryButtonFun}\n primaryButtonText={primaryButtonText}\n primaryButtonFun={primaryButtonFun}\n showOriginalPrice={showOriginalPrice}\n copy={copy}\n theme={theme}\n locale={locale}\n index={index}\n tabName={tabName}\n />\n ))}\n </div>\n\n {/* \u67E5\u770B\u66F4\u591A\u6309\u94AE */}\n {shouldShowViewMore && (\n <div className={cn('laptop:mt-4 mt-3 flex justify-center', classNames?.viewMore)}>\n <button\n onClick={toggleExpanded}\n className=\"text-info-primary hover:text-brand-0 lg-desktop:text-[16px] flex items-center gap-2 text-[14px] font-bold transition-colors\"\n aria-expanded={isExpanded}\n >\n {isExpanded ? copy?.viewLessLabel : copy?.viewMoreLabel}\n <svg\n className={cn('size-4 transition-transform', isExpanded && 'rotate-180')}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n </div>\n )}\n </>\n )\n}\n\nconst ProductsGrid = React.memo(ProductsGridComponent)\nProductsGrid.displayName = 'SceneShelfV3.ProductsGrid'\n\n/**\n * SceneShelfV3 - \u573A\u666F\u63A8\u8350\u8D27\u67B6 V3\n *\n * @description \u5E73\u94FA\u7F51\u683C\u5E03\u5C40\u7684\u8D27\u67B6\u7EC4\u4EF6\uFF0C\u652F\u6301 Tab \u5206\u7EC4\u3001\u6BCF\u4E2A Tab \u72EC\u7ACB\u914D\u7F6E PromotionalBar \u548C\u67E5\u770B\u66F4\u591A\u529F\u80FD\n */\nconst SceneShelfV3 = React.forwardRef<HTMLDivElement, SceneShelfV3Props>(\n ({ className, data, onLearnMore, onShopNow, onAddToCart, classNames, ...props }, ref) => {\n const boxRef = React.useRef<HTMLDivElement>(null)\n const { locale = 'us' } = useAiuiContext()\n\n useExposure(boxRef, {\n componentType: 'image',\n componentName: 'scene_shelf_banner',\n })\n\n React.useImperativeHandle(ref, () => boxRef.current as HTMLDivElement)\n\n const {\n theme = 'light',\n sceneTabs = [],\n showTags = true,\n stockDisplayMode,\n stockThresholdValue,\n showOriginalPrice = true,\n secondaryButtonText,\n primaryButtonText,\n secondaryButtonFun = 'learnMore',\n primaryButtonFun = 'buyNow',\n copy,\n viewMoreLimit,\n } = data\n\n // \u5224\u65AD\u662F\u5426\u663E\u793A Tab\uFF08\u591A\u4E8E 1 \u4E2A Tab \u65F6\u663E\u793A\uFF09\n const shouldShowTab = sceneTabs.length > 1\n\n const gridProps: Omit<ProductsGridProps, 'products'> = {\n copy,\n showTags,\n stockDisplayMode,\n stockThresholdValue,\n onLearnMore,\n onShopNow,\n onAddToCart,\n classNames,\n secondaryButtonText,\n secondaryButtonFun,\n primaryButtonText,\n primaryButtonFun,\n showOriginalPrice,\n viewMoreLimit,\n theme,\n locale,\n }\n\n return (\n <div\n ref={boxRef}\n className={cn('w-full', { 'aiui-dark': theme === 'dark' }, className, classNames?.root)}\n style={\n {\n '--progress-track-bg': theme === 'dark' ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.2)',\n } as React.CSSProperties\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 <Tabs defaultValue={sceneTabs[0]?.id} className=\"w-full\">\n {/* Tab \u5217\u8868 */}\n {shouldShowTab && (\n <TabsList className={cn('mb-6', classNames?.tabsList)}>\n {sceneTabs.map(tab => (\n <TabsTrigger key={tab.id} value={tab.id}>\n {tab.label}\n </TabsTrigger>\n ))}\n </TabsList>\n )}\n\n {/* \u4EA7\u54C1\u5185\u5BB9\u533A\u57DF */}\n {sceneTabs.map(tab => {\n // \u4ECE resourceBlocks \u4E2D\u63D0\u53D6 PromotionalBar \u6570\u636E\n const promotionalBarBlock: any = tab.resourceBlocks?.find(\n block => block.blockType === 'PromotionalBar' && block.display === 'visible'\n )\n\n return (\n <TabsContent key={tab.id} value={tab.id}>\n {/* \u6BCF\u4E2A Tab \u72EC\u7ACB\u7684 PromotionalBar\uFF08\u53EF\u9009\uFF09 */}\n {promotionalBarBlock && (\n <PromotionalBar\n data={promotionalBarBlock}\n className={cn('laptop:mb-4 mb-3', classNames?.promotionalBar)}\n />\n )}\n <ProductsGrid products={tab.products} {...gridProps} tabName={tab.label} />\n </TabsContent>\n )\n })}\n </Tabs>\n </div>\n )\n }\n)\n\nSceneShelfV3.displayName = 'SceneShelfV3'\n\n// \u521B\u5EFA\u590D\u5408\u7EC4\u4EF6\nconst SceneShelfV3WithProductCard = SceneShelfV3 as SceneShelfV3Component\nSceneShelfV3WithProductCard.ProductCard = ProductCard\n\nexport default withLayout(SceneShelfV3WithProductCard)\nexport type { StockDisplayMode, SceneShelfV3SemanticName, ProductCardData }\n"],
5
+ "mappings": "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",
6
+ "names": ["SceneShelfV3_exports", "__export", "SceneShelfV3_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_components", "import_PromotionalBar", "import_useExposure", "import_useViewItemList", "import_useGridRowCount", "import_AiuiProvider", "import_ProductCard", "import_Styles", "componentType", "componentName", "ProductsGridComponent", "products", "copy", "showTags", "stockDisplayMode", "stockThresholdValue", "onLearnMore", "onShopNow", "onAddToCart", "classNames", "secondaryButtonText", "secondaryButtonFun", "primaryButtonText", "primaryButtonFun", "showOriginalPrice", "viewMoreLimit", "theme", "locale", "tabName", "isExpanded", "setIsExpanded", "productWrapperRef", "item", "index", "visibleLimit", "shouldShowViewMore", "displayedProducts", "toggleExpanded", "prev", "product", "ProductsGrid", "SceneShelfV3", "className", "data", "props", "ref", "boxRef", "sceneTabs", "shouldShowTab", "gridProps", "tab", "promotionalBarBlock", "block", "PromotionalBar", "SceneShelfV3WithProductCard"]
7
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 按钮功能类型
3
+ */
4
+ export type ButtonFunctionType = 'buyNow' | 'addCart' | 'learnMore';
5
+ /**
6
+ * SceneShelfV3 文案配置
7
+ */
8
+ export interface CopyConfig {
9
+ /** 售罄标签文本 */
10
+ outOfStockLabel?: string;
11
+ /** 库存紧张文本(超卖时使用) */
12
+ limitedStock?: string;
13
+ /** 库存显示文案模板,支持 {count} 占位符 */
14
+ stockDisplayText?: string;
15
+ /** 查看更多按钮文本 */
16
+ viewMoreLabel?: string;
17
+ /** 收起按钮文本 */
18
+ viewLessLabel?: string;
19
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var r=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var l=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of a(t))!g.call(e,i)&&i!==n&&r(e,i,{get:()=>t[i],enumerable:!(o=s(t,i))||o.enumerable});return e};var p=e=>l(r({},"__esModule",{value:!0}),e);var c={};module.exports=p(c);
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/SceneShelfV3/types.ts"],
4
+ "sourcesContent": ["/**\n * \u6309\u94AE\u529F\u80FD\u7C7B\u578B\n */\nexport type ButtonFunctionType = 'buyNow' | 'addCart' | 'learnMore'\n\n/**\n * SceneShelfV3 \u6587\u6848\u914D\u7F6E\n */\nexport interface CopyConfig {\n /** \u552E\u7F44\u6807\u7B7E\u6587\u672C */\n outOfStockLabel?: string\n /** \u5E93\u5B58\u7D27\u5F20\u6587\u672C\uFF08\u8D85\u5356\u65F6\u4F7F\u7528\uFF09 */\n limitedStock?: string\n /** \u5E93\u5B58\u663E\u793A\u6587\u6848\u6A21\u677F\uFF0C\u652F\u6301 {count} \u5360\u4F4D\u7B26 */\n stockDisplayText?: string\n /** \u67E5\u770B\u66F4\u591A\u6309\u94AE\u6587\u672C */\n viewMoreLabel?: string\n /** \u6536\u8D77\u6309\u94AE\u6587\u672C */\n viewLessLabel?: string\n}\n"],
5
+ "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
+ "names": ["types_exports", "__toCommonJS"]
7
+ }
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import type { SecondaryBannerData, SecondaryBannerSemanticName, JumpOptions } from './index.js';
3
+ import 'swiper/css';
4
+ import 'swiper/css/navigation';
5
+ import 'swiper/css/pagination';
6
+ interface SecondaryBannerCarouselProps extends React.HTMLAttributes<HTMLElement> {
7
+ data: SecondaryBannerData;
8
+ classNames?: Partial<Record<SecondaryBannerSemanticName, string>>;
9
+ jumpOptions?: JumpOptions;
10
+ }
11
+ /**
12
+ * SecondaryBannerCarousel — arrows-only Navigation Swiper wrapping SecondaryBanner slides.
13
+ *
14
+ * Architecture:
15
+ * - DECISION-A007: Navigation only, loop=false, slidesPerView=1
16
+ * - DECISION-A005: isActive pass-through to SecondaryBanner; querySelectorAll for video pause
17
+ * - DECISION-008: SecondaryBanner.isActive => autoPlay={isActive ?? true}
18
+ * - DECISION-A006: arrow buttons at z-[20], above any overlay
19
+ */
20
+ declare const SecondaryBannerCarousel: React.ForwardRefExoticComponent<SecondaryBannerCarouselProps & React.RefAttributes<HTMLElement>>;
21
+ export default SecondaryBannerCarousel;
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var M=Object.create;var u=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty;var E=(t,n)=>{for(var r in n)u(t,r,{get:n[r],enumerable:!0})},v=(t,n,r,c)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of O(n))!D.call(t,i)&&i!==r&&u(t,i,{get:()=>n[i],enumerable:!(c=A(n,i))||c.enumerable});return t};var S=(t,n,r)=>(r=t!=null?M(P(t)):{},v(n||!t||!t.__esModule?u(r,"default",{value:t,enumerable:!0}):r,t)),H=t=>v(u({},"__esModule",{value:!0}),t);var W={};E(W,{default:()=>J});module.exports=H(W);var e=require("react/jsx-runtime"),a=S(require("react")),m=require("swiper/react"),o=require("swiper/modules"),C=require("../../helpers/index.js"),_=S(require("./index.js")),V=require("swiper/css"),$=require("swiper/css/navigation"),G=require("swiper/css/pagination");const I=()=>(0,e.jsxs)("svg",{width:"40",height:"40",viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[(0,e.jsx)("circle",{cx:"20",cy:"20",r:"20",fill:"currentColor",fillOpacity:"0.2"}),(0,e.jsx)("path",{d:"M23 13L16 20L23 27",stroke:"white",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]}),z=()=>(0,e.jsxs)("svg",{width:"40",height:"40",viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[(0,e.jsx)("circle",{cx:"20",cy:"20",r:"20",fill:"currentColor",fillOpacity:"0.2"}),(0,e.jsx)("path",{d:"M17 13L24 20L17 27",stroke:"white",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]}),x=a.default.forwardRef(({data:t,className:n,classNames:r,jumpOptions:c,...i},k)=>{const w=t.items||[],d=t.carousel,b=(0,a.useRef)(null),[q,L]=(0,a.useState)(0),y=(0,a.useRef)(w.map(()=>a.default.createRef())),N=(d?.showArrows??!0)&&w.length>1,h=d?.showDots??!0,f=d?.autoplaySeconds,B=f!==void 0?[o.Navigation,o.Pagination,o.Autoplay]:[o.Navigation,o.Pagination],R=f!==void 0?{delay:f*1e3,disableOnInteraction:!1}:!1,T=(0,a.useCallback)(l=>{const s=l.realIndex;y.current.forEach((p,j)=>{j!==s&&p.current&&p.current.querySelectorAll("video").forEach(g=>{g.pause(),g.currentTime=0})}),L(s)},[]);return(0,e.jsxs)("section",{ref:k,className:(0,C.cn)("secondary-banner-carousel relative w-full overflow-hidden",n),...i,children:[(0,e.jsx)(m.Swiper,{onSwiper:l=>b.current=l,onSlideChange:T,modules:B,slidesPerView:1,loop:d?.loop??!0,initialSlide:0,allowTouchMove:!0,autoplay:R,pagination:h?{clickable:!0,el:".secondary-banner-pagination",renderBullet:(l,s)=>`<span class="${s} banner-dot"></span>`}:!1,children:w.map((l,s)=>(0,e.jsx)(m.SwiperSlide,{children:({isActive:p})=>(0,e.jsx)("div",{ref:y.current[s],children:(0,e.jsx)(_.default,{data:l,isActive:p,classNames:r,jumpOptions:c})})},s))}),N&&(0,e.jsxs)("div",{className:"pointer-events-none absolute inset-0 z-20 flex items-center justify-between px-4",children:[(0,e.jsx)("button",{type:"button",className:"tablet:flex pointer-events-auto hidden items-center justify-center",onClick:()=>b.current?.slidePrev(),"aria-label":"Previous banner",children:(0,e.jsx)(I,{})}),(0,e.jsx)("button",{type:"button",className:"tablet:flex pointer-events-auto hidden items-center justify-center",onClick:()=>b.current?.slideNext(),"aria-label":"Next banner",children:(0,e.jsx)(z,{})})]}),h&&(0,e.jsx)("div",{className:"secondary-banner-pagination swiper-pagination tablet:bottom-6 absolute bottom-5 left-1/2 z-20 flex -translate-x-1/2 items-center justify-center gap-2 [&_.banner-dot.swiper-pagination-bullet-active]:h-2 [&_.banner-dot.swiper-pagination-bullet-active]:w-8 [&_.banner-dot.swiper-pagination-bullet-active]:rounded-full [&_.banner-dot.swiper-pagination-bullet-active]:bg-[#080A0F] [&_.banner-dot]:size-2 [&_.banner-dot]:rounded-full [&_.banner-dot]:bg-[#767880] [&_.banner-dot]:transition-all [&_.banner-dot]:duration-300 [&_.banner-dot]:ease-out [&_.swiper-pagination-bullet]:m-0 [&_.swiper-pagination-bullet]:shrink-0 [&_.swiper-pagination-bullet]:opacity-100"})]})});x.displayName="SecondaryBannerCarousel";var J=x;
2
+ //# sourceMappingURL=SecondaryBannerCarousel.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/SecondaryBanner/SecondaryBannerCarousel.tsx"],
4
+ "sourcesContent": ["'use client'\nimport React, { useRef, useCallback, useState } from 'react'\nimport { Swiper, SwiperSlide } from 'swiper/react'\nimport { Navigation, Pagination, Autoplay } from 'swiper/modules'\nimport type { Swiper as SwiperType } from 'swiper'\nimport { cn } from '../../helpers/index.js'\nimport SecondaryBanner from './index.js'\nimport type { SecondaryBannerData, SecondaryBannerSemanticName, JumpOptions } from './index.js'\n\nimport 'swiper/css'\nimport 'swiper/css/navigation'\nimport 'swiper/css/pagination'\n\n// \u2500\u2500 Arrow icons \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst ChevronLeft = () => (\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <path d=\"M23 13L16 20L23 27\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nconst ChevronRight = () => (\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <path d=\"M17 13L24 20L17 27\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\n// \u2500\u2500 Props \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface SecondaryBannerCarouselProps extends React.HTMLAttributes<HTMLElement> {\n data: SecondaryBannerData\n classNames?: Partial<Record<SecondaryBannerSemanticName, string>>\n jumpOptions?: JumpOptions\n}\n\n/**\n * SecondaryBannerCarousel \u2014 arrows-only Navigation Swiper wrapping SecondaryBanner slides.\n *\n * Architecture:\n * - DECISION-A007: Navigation only, loop=false, slidesPerView=1\n * - DECISION-A005: isActive pass-through to SecondaryBanner; querySelectorAll for video pause\n * - DECISION-008: SecondaryBanner.isActive => autoPlay={isActive ?? true}\n * - DECISION-A006: arrow buttons at z-[20], above any overlay\n */\nconst SecondaryBannerCarousel = React.forwardRef<HTMLElement, SecondaryBannerCarouselProps>(\n ({ data, className, classNames, jumpOptions, ...rest }, ref) => {\n const items = data.items || []\n const carousel = data.carousel\n\n const swiperRef = useRef<SwiperType | null>(null)\n const [_activeIndex, setActiveIndex] = useState(0)\n\n // Slide container refs for imperative video pause via querySelectorAll (DECISION-A005)\n // Used as defense-in-depth; isActive prop is the primary control mechanism.\n const slideContainerRefs = useRef<React.RefObject<HTMLDivElement>[]>(\n items.map(() => React.createRef<HTMLDivElement>())\n )\n\n // Arrow visibility formula \u2014 DECISION-011\n const showArrowControls = (carousel?.showArrows ?? true) && items.length > 1\n\n // Pagination dots visibility formula \u2014 DECISION-006\n const showDots = carousel?.showDots ?? true\n\n // Autoplay module configuration \u2014 DECISION-006\n const autoplaySeconds = carousel?.autoplaySeconds\n const swiperModules = autoplaySeconds !== undefined ? [Navigation, Pagination, Autoplay] : [Navigation, Pagination]\n const autoplayConfig =\n autoplaySeconds !== undefined ? { delay: autoplaySeconds * 1000, disableOnInteraction: false } : false\n\n // Slide transition handler \u2014 pause inactive slide videos via querySelectorAll (DECISION-A005)\n const handleSlideChange = useCallback((swiper: SwiperType) => {\n const newIndex = swiper.realIndex\n // Defense-in-depth: imperatively pause videos in inactive slides\n slideContainerRefs.current.forEach((cRef, i) => {\n if (i !== newIndex && cRef.current) {\n cRef.current.querySelectorAll('video').forEach(v => {\n v.pause()\n v.currentTime = 0\n })\n }\n })\n setActiveIndex(newIndex)\n }, [])\n\n return (\n <section\n ref={ref}\n className={cn('secondary-banner-carousel relative w-full overflow-hidden', className)}\n {...rest}\n >\n <Swiper\n onSwiper={s => (swiperRef.current = s)}\n onSlideChange={handleSlideChange}\n modules={swiperModules}\n slidesPerView={1}\n loop={carousel?.loop ?? true}\n initialSlide={0}\n allowTouchMove={true}\n autoplay={autoplayConfig}\n pagination={\n showDots\n ? {\n clickable: true,\n el: '.secondary-banner-pagination',\n renderBullet: (_index: number, className: string) => `<span class=\"${className} banner-dot\"></span>`,\n }\n : false\n }\n >\n {items.map((slideData, index) => (\n <SwiperSlide key={index}>\n {({ isActive }) => (\n <div ref={slideContainerRefs.current[index]}>\n <SecondaryBanner\n data={slideData}\n isActive={isActive}\n classNames={classNames}\n jumpOptions={jumpOptions}\n />\n </div>\n )}\n </SwiperSlide>\n ))}\n </Swiper>\n\n {/* Arrow navigation \u2014 z-[20] for consistency with HeroBannerCarousel \u2014 DECISION-A006 */}\n {showArrowControls && (\n <div className=\"pointer-events-none absolute inset-0 z-20 flex items-center justify-between px-4\">\n <button\n type=\"button\"\n className=\"tablet:flex pointer-events-auto hidden items-center justify-center\"\n onClick={() => swiperRef.current?.slidePrev()}\n aria-label=\"Previous banner\"\n >\n <ChevronLeft />\n </button>\n <button\n type=\"button\"\n className=\"tablet:flex pointer-events-auto hidden items-center justify-center\"\n onClick={() => swiperRef.current?.slideNext()}\n aria-label=\"Next banner\"\n >\n <ChevronRight />\n </button>\n </div>\n )}\n\n {/* Pagination dots \u2014 visible on all devices */}\n {showDots && (\n <div className=\"secondary-banner-pagination swiper-pagination tablet:bottom-6 absolute bottom-5 left-1/2 z-20 flex -translate-x-1/2 items-center justify-center gap-2 [&_.banner-dot.swiper-pagination-bullet-active]:h-2 [&_.banner-dot.swiper-pagination-bullet-active]:w-8 [&_.banner-dot.swiper-pagination-bullet-active]:rounded-full [&_.banner-dot.swiper-pagination-bullet-active]:bg-[#080A0F] [&_.banner-dot]:size-2 [&_.banner-dot]:rounded-full [&_.banner-dot]:bg-[#767880] [&_.banner-dot]:transition-all [&_.banner-dot]:duration-300 [&_.banner-dot]:ease-out [&_.swiper-pagination-bullet]:m-0 [&_.swiper-pagination-bullet]:shrink-0 [&_.swiper-pagination-bullet]:opacity-100\" />\n )}\n </section>\n )\n }\n)\n\nSecondaryBannerCarousel.displayName = 'SecondaryBannerCarousel'\n\nexport default SecondaryBannerCarousel\n"],
5
+ "mappings": "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",
6
+ "names": ["SecondaryBannerCarousel_exports", "__export", "SecondaryBannerCarousel_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_modules", "import_helpers", "import_index", "import_css", "import_navigation", "import_pagination", "ChevronLeft", "ChevronRight", "SecondaryBannerCarousel", "React", "data", "className", "classNames", "jumpOptions", "rest", "ref", "items", "carousel", "swiperRef", "_activeIndex", "setActiveIndex", "slideContainerRefs", "showArrowControls", "showDots", "autoplaySeconds", "swiperModules", "autoplayConfig", "handleSlideChange", "swiper", "newIndex", "cRef", "i", "v", "s", "_index", "slideData", "index", "isActive", "SecondaryBanner"]
7
+ }
@@ -2,6 +2,53 @@ import * as React from 'react';
2
2
  import type { Media as MediaType, Theme } from '../../types/props.js';
3
3
  import type { ButtonProps } from '../../components/button.js';
4
4
  export type SecondaryBannerSemanticName = 'root' | 'title' | 'superTitle' | 'subtitle' | 'content' | 'buttonGroup' | 'primaryButton' | 'secondaryButton';
5
+ /**
6
+ * Carousel navigation configuration for SecondaryBanner. v1: arrows only.
7
+ * autoplay, dots, and progress are intentionally EXCLUDED from v1.
8
+ */
9
+ export interface SecondaryBannerCarouselConfig {
10
+ /**
11
+ * Show prev/next arrow navigation controls.
12
+ * Only used when data.items has 2+ slides.
13
+ * @default true
14
+ */
15
+ showArrows?: boolean;
16
+ showDots?: boolean;
17
+ loop?: boolean;
18
+ autoplaySeconds?: number;
19
+ }
20
+ /**
21
+ * Per-slide data for SecondaryBanner carousel mode.
22
+ * All fields optional (mirrors SecondaryBannerData permissiveness).
23
+ */
24
+ export interface SecondaryBannerSlideData {
25
+ title?: string;
26
+ titleTag?: 'h1' | 'h2';
27
+ superTitle?: string;
28
+ subtitle?: string;
29
+ size?: 'sm' | 'base' | 'lg' | 'xlg';
30
+ pcImage?: MediaType;
31
+ padImage?: MediaType;
32
+ mobileImage?: MediaType;
33
+ isVideoLoop?: boolean;
34
+ endDate?: string;
35
+ endDate_tz?: string;
36
+ dateFormat?: string;
37
+ primaryButton?: {
38
+ text: string;
39
+ link?: string;
40
+ onClick?: () => void;
41
+ } & Omit<ButtonProps, 'children'>;
42
+ secondaryButton?: {
43
+ text: string;
44
+ link?: string;
45
+ onClick?: () => void;
46
+ } & Omit<ButtonProps, 'children'>;
47
+ iconArray?: Array<{
48
+ pcImage: MediaType;
49
+ }>;
50
+ theme?: Theme;
51
+ }
5
52
  /**
6
53
  * jump.js 配置选项
7
54
  */
@@ -76,6 +123,16 @@ export interface SecondaryBannerData {
76
123
  pcImage: MediaType;
77
124
  }>;
78
125
  theme?: Theme;
126
+ /**
127
+ * Carousel slide items. When present and non-empty, activates carousel mode.
128
+ * Single-banner mode is used when absent or empty (DECISION-002).
129
+ */
130
+ items?: SecondaryBannerSlideData[];
131
+ /**
132
+ * Carousel navigation configuration.
133
+ * Only meaningful when data.items is present and has 2+ items.
134
+ */
135
+ carousel?: SecondaryBannerCarouselConfig;
79
136
  }
80
137
  export interface SecondaryBannerProps extends React.HTMLAttributes<HTMLElement> {
81
138
  /** 业务数据 */
@@ -86,8 +143,15 @@ export interface SecondaryBannerProps extends React.HTMLAttributes<HTMLElement>
86
143
  * @default { duration: 500, offset: 0 }
87
144
  */
88
145
  jumpOptions?: JumpOptions;
146
+ /**
147
+ * Whether this banner is the active slide in a carousel.
148
+ * Controls video autoPlay: autoPlay={isActive ?? true}.
149
+ * When absent (legacy single-banner), defaults to true (DECISION-008).
150
+ * @default true
151
+ */
152
+ isActive?: boolean;
89
153
  }
90
- declare const _default: React.ForwardRefExoticComponent<Omit<SecondaryBannerProps & React.RefAttributes<HTMLElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {
154
+ declare const _default: React.ForwardRefExoticComponent<Omit<SecondaryBannerProps & React.RefAttributes<HTMLElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
91
155
  readonly $$typeof: symbol;
92
156
  };
93
157
  export default _default;
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var W=Object.create;var u=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var _=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var G=(a,e)=>{for(var t in e)u(a,t,{get:e[t],enumerable:!0})},I=(a,e,t,m)=>{if(e&&typeof e=="object"||typeof e=="function")for(let p of F(e))!q.call(a,p)&&p!==t&&u(a,p,{get:()=>e[p],enumerable:!(m=$(e,p))||m.enumerable});return a};var y=(a,e,t)=>(t=a!=null?W(_(a)):{},I(e||!a||!a.__esModule?u(t,"default",{value:a,enumerable:!0}):t,a)),K=a=>I(u({},"__esModule",{value:!0}),a);var X={};G(X,{default:()=>U});module.exports=K(X);var n=require("react/jsx-runtime"),z=y(require("react")),N=require("class-variance-authority"),x=y(require("jump.js")),o=require("../../helpers/index.js"),i=require("../../components/index.js"),S=y(require("../Media/index.js")),C=require("../AiuiProvider/index.js"),D=require("../../shared/Styles.js");const Q=(0,N.cva)("text-info-primary relative w-full",{variants:{size:{sm:"tablet:aspect-[768/480] laptop:aspect-[1024/400] desktop:aspect-[1440/384] lg-desktop:aspect-[1920/480] aspect-[390/480]",base:"tablet:aspect-[768/660] laptop:aspect-[1024/432] desktop:aspect-[1440/576] lg-desktop:aspect-[1920/720] aspect-[390/660]",lg:"tablet:aspect-[768/660] laptop:aspect-[1024/520] desktop:aspect-[1440/700] lg-desktop:aspect-[1920/930] aspect-[390/660]",xlg:"tablet:aspect-[768/660] laptop:aspect-[1024/520] desktop:aspect-[1440/700] lg-desktop:aspect-[1920/930] aspect-[390/660] overflow-visible"}},defaultVariants:{size:"base"}}),M=z.forwardRef(({className:a,classNames:e={},data:t,jumpOptions:m={},...p},L)=>{const{pcImage:O,padImage:P,mobileImage:j,isVideoLoop:w=!0,endDate:k,endDate_tz:A,dateFormat:H,size:b="base",iconArray:g,theme:E="light",primaryButton:s,secondaryButton:r,title:J,titleTag:R="h1"}=t,{locale:v="us"}=(0,C.useAiuiContext)(),h={...{duration:500,offset:0},...m},f=z.useId(),d=J?`${f}-title`:void 0,B=t.subtitle?`${f}-subtitle`:void 0,T=t.superTitle?`${f}-super-title`:void 0,V=[T,B].filter(Boolean).join(" ")||void 0;return(0,n.jsxs)("section",{ref:L,role:"banner","aria-labelledby":d,"aria-describedby":V,className:(0,o.cn)({"aiui-dark":E==="dark"},Q({size:b}),a,e?.root),...p,children:[(0,n.jsx)(S.default,{pcImage:O,padImage:P,mobileImage:j,className:(0,o.cn)("absolute inset-0 size-full object-cover",{"h-fit":b==="xlg"}),imgClassName:"object-cover",videoClassName:"object-cover",muted:!0,loop:w,playsInline:!0,autoPlay:!0}),(0,n.jsxs)("div",{className:(0,o.cn)("banner-content laptop:top-1/2 laptop:-translate-y-1/2 tablet:px-[32px] laptop:px-[64px] lg-desktop:px-[calc(50%-832px)] absolute top-12 z-10 flex flex-col items-start justify-center px-[16px] text-left",e?.content),children:[(0,n.jsxs)("div",{className:"banner-inner-title desktop:gap-2 flex flex-col items-start gap-1",children:[t.superTitle&&(0,n.jsx)(i.Text,{as:"p",size:2,id:T,className:(0,o.cn)("banner-super-title desktop:text-[16px] lg-desktop:text-[18px]",e?.superTitle),html:t.superTitle}),t.title&&(0,n.jsx)(i.Heading,{as:R,size:["xlg","lg"].includes(b)?5:4,id:d,className:(0,o.cn)("banner-title ",e?.title),html:t.title}),t.subtitle&&(0,n.jsx)(i.Text,{as:"p",size:3,id:B,className:(0,o.cn)("banner-subtitle desktop:text-[16px] lg-desktop:text-[18px]",e?.subtitle),html:t.subtitle})]}),k&&(0,n.jsx)("div",{className:"banner-countdown",children:(0,n.jsx)(i.Countdown,{endDate:k,endDate_tz:A,dateFormat:H,variant:"spacious",className:"lg-desktop:mt-8 mt-6"})}),(0,n.jsxs)("div",{className:(0,o.cn)("banner-cta-group lg-desktop:mt-[32px] lg-desktop:gap-3 mt-6 flex gap-2",e?.buttonGroup),children:[r?.text&&(0,n.jsx)(i.Button,{variant:"secondary",onClick:c=>{if(r.link?.startsWith("#")){c.preventDefault();const l=document.querySelector(r.link);l&&(0,x.default)(l,h)}r.onClick?.()},className:(0,o.cn)("",e?.secondaryButton),"aria-describedby":d,...r.link&&!r.link.startsWith("#")?{as:"a",href:(0,o.getLocalizedPath)(r.link,v)}:{},children:r.text}),s?.text&&(0,n.jsx)(i.Button,{onClick:c=>{if(s.link?.startsWith("#")){c.preventDefault();const l=document.querySelector(s.link);l&&(0,x.default)(l,h)}s.onClick?.()},className:(0,o.cn)("",e?.primaryButton),"aria-describedby":d,...s.link&&!s.link.startsWith("#")?{as:"a",href:(0,o.getLocalizedPath)(s.link,v)}:{},children:s.text})]}),Array.isArray(g)&&g.length>0&&(0,n.jsx)("div",{className:"banner-icons desktop:mt-3 lg-desktop:mt-4 mt-2 flex items-center gap-2",role:"group","aria-label":"brand icons",children:g.map((c,l)=>c.pcImage?(0,n.jsx)(i.Picture,{source:c.pcImage.url,alt:c.pcImage.alt||`icon ${l+1}`,role:"img",className:"laptop:h-auto h-[48px] max-w-none",imgClassName:"h-full"},l):null)})]})]})});M.displayName="SecondaryBanner";var U=(0,D.withLayout)(M);
1
+ "use strict";"use client";var _=Object.create;var u=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var G=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty;var Q=(a,e)=>{for(var t in e)u(a,t,{get:e[t],enumerable:!0})},C=(a,e,t,m)=>{if(e&&typeof e=="object"||typeof e=="function")for(let p of q(e))!K.call(a,p)&&p!==t&&u(a,p,{get:()=>e[p],enumerable:!(m=$(e,p))||m.enumerable});return a};var g=(a,e,t)=>(t=a!=null?_(G(a)):{},C(e||!a||!a.__esModule?u(t,"default",{value:a,enumerable:!0}):t,a)),U=a=>C(u({},"__esModule",{value:!0}),a);var Z={};Q(Z,{default:()=>Y});module.exports=U(Z);var n=require("react/jsx-runtime"),M=g(require("react")),D=require("class-variance-authority"),x=g(require("jump.js")),o=require("../../helpers/index.js"),i=require("../../components/index.js"),N=require("../../shared/Styles.js"),A=g(require("../Media/index.js")),L=require("../AiuiProvider/index.js"),O=g(require("./SecondaryBannerCarousel.js"));const X=(0,D.cva)("text-info-primary relative w-full",{variants:{size:{sm:"tablet:aspect-[768/480] laptop:aspect-[1024/400] desktop:aspect-[1440/384] lg-desktop:aspect-[1920/480] aspect-[390/480]",base:"tablet:aspect-[768/660] laptop:aspect-[1024/432] desktop:aspect-[1440/576] lg-desktop:aspect-[1920/720] aspect-[390/660]",lg:"tablet:aspect-[768/660] laptop:aspect-[1024/520] desktop:aspect-[1440/700] lg-desktop:aspect-[1920/930] aspect-[390/660]",xlg:"tablet:aspect-[768/660] laptop:aspect-[1024/520] desktop:aspect-[1440/700] lg-desktop:aspect-[1920/930] aspect-[390/660] overflow-visible"}},defaultVariants:{size:"base"}}),z=M.forwardRef(({className:a,classNames:e={},data:t,jumpOptions:m={},isActive:p,...k},h)=>{const{pcImage:P,padImage:w,mobileImage:j,isVideoLoop:H=!0,endDate:B,endDate_tz:E,dateFormat:J,size:b="base",iconArray:y,theme:R="light",primaryButton:r,secondaryButton:s,title:V,titleTag:F="h1"}=t,{locale:v="us"}=(0,L.useAiuiContext)(),T={...{duration:500,offset:0},...m},f=M.useId(),d=V?`${f}-title`:void 0,I=t.subtitle?`${f}-subtitle`:void 0,S=t.superTitle?`${f}-super-title`:void 0,W=[S,I].filter(Boolean).join(" ")||void 0;return t.items&&t.items.length>0?(0,n.jsx)(O.default,{data:t,className:a,classNames:e,jumpOptions:m,ref:h,...k}):(0,n.jsxs)("section",{ref:h,role:"banner","aria-labelledby":d,"aria-describedby":W,className:(0,o.cn)({"aiui-dark":R==="dark"},X({size:b}),a,e?.root),...k,children:[(0,n.jsx)(A.default,{pcImage:P,padImage:w,mobileImage:j,className:(0,o.cn)("absolute inset-0 size-full object-cover",{"h-fit":b==="xlg"}),imgClassName:"object-cover",videoClassName:"object-cover",muted:!0,loop:H,playsInline:!0,autoPlay:p??!0}),(0,n.jsxs)("div",{className:(0,o.cn)("banner-content laptop:top-1/2 laptop:-translate-y-1/2 tablet:px-[32px] laptop:px-[64px] lg-desktop:px-[calc(50%-832px)] absolute top-12 z-10 flex flex-col items-start justify-center px-[16px] text-left",e?.content),children:[(0,n.jsxs)("div",{className:"banner-inner-title desktop:gap-2 flex flex-col items-start gap-1",children:[t.superTitle&&(0,n.jsx)(i.Text,{as:"p",size:2,id:S,className:(0,o.cn)("banner-super-title desktop:text-[16px] lg-desktop:text-[18px]",e?.superTitle),html:t.superTitle}),t.title&&(0,n.jsx)(i.Heading,{as:F,size:["xlg","lg"].includes(b)?5:4,id:d,className:(0,o.cn)("banner-title ",e?.title),html:t.title}),t.subtitle&&(0,n.jsx)(i.Text,{as:"p",size:3,id:I,className:(0,o.cn)("banner-subtitle desktop:text-[16px] lg-desktop:text-[18px]",e?.subtitle),html:t.subtitle})]}),B&&(0,n.jsx)("div",{className:"banner-countdown",children:(0,n.jsx)(i.Countdown,{endDate:B,endDate_tz:E,dateFormat:J,variant:"spacious",className:"lg-desktop:mt-8 mt-6"})}),(0,n.jsxs)("div",{className:(0,o.cn)("banner-cta-group lg-desktop:mt-[32px] lg-desktop:gap-3 mt-6 flex gap-2",e?.buttonGroup),children:[s?.text&&(0,n.jsx)(i.Button,{variant:"secondary",onClick:c=>{if(s.link?.startsWith("#")){c.preventDefault();const l=document.querySelector(s.link);l&&(0,x.default)(l,T)}s.onClick?.()},className:(0,o.cn)("",e?.secondaryButton),"aria-describedby":d,...s.link&&!s.link.startsWith("#")?{as:"a",href:(0,o.getLocalizedPath)(s.link,v)}:{},children:s.text}),r?.text&&(0,n.jsx)(i.Button,{onClick:c=>{if(r.link?.startsWith("#")){c.preventDefault();const l=document.querySelector(r.link);l&&(0,x.default)(l,T)}r.onClick?.()},className:(0,o.cn)("",e?.primaryButton),"aria-describedby":d,...r.link&&!r.link.startsWith("#")?{as:"a",href:(0,o.getLocalizedPath)(r.link,v)}:{},children:r.text})]}),Array.isArray(y)&&y.length>0&&(0,n.jsx)("div",{className:"banner-icons desktop:mt-3 lg-desktop:mt-4 mt-2 flex items-center gap-2",role:"group","aria-label":"brand icons",children:y.map((c,l)=>c.pcImage?(0,n.jsx)(i.Picture,{source:c.pcImage.url,alt:c.pcImage.alt||`icon ${l+1}`,role:"img",className:"laptop:h-auto h-[48px] max-w-none",imgClassName:"h-full"},l):null)})]})]})});z.displayName="SecondaryBanner";var Y=(0,N.withLayout)(z);
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/SecondaryBanner/index.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cva } from 'class-variance-authority'\nimport jump from 'jump.js'\nimport { cn, getLocalizedPath } from '../../helpers/index.js'\nimport type { Media as MediaType, Theme } from '../../types/props.js'\nimport { Text, Button, Heading, Picture, Countdown } from '../../components/index.js'\nimport Media from '../Media/index.js'\nimport type { ButtonProps } from '../../components/button.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport { withLayout } from '../../shared/Styles.js'\n\nexport type SecondaryBannerSemanticName =\n | 'root'\n | 'title'\n | 'superTitle'\n | 'subtitle'\n | 'content'\n | 'buttonGroup'\n | 'primaryButton'\n | 'secondaryButton'\n\n/**\n * jump.js \u914D\u7F6E\u9009\u9879\n */\nexport interface JumpOptions {\n /** \u52A8\u753B\u6301\u7EED\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09 @default 500 */\n duration?: number\n /** \u504F\u79FB\u91CF\uFF08\u50CF\u7D20\uFF09 @default 0 */\n offset?: number\n /** \u52A8\u753B\u5B8C\u6210\u56DE\u8C03 */\n callback?: () => void\n /** \u7F13\u52A8\u51FD\u6570 */\n easing?: (t: number, b: number, c: number, d: number) => number\n /** \u662F\u5426\u8003\u8651 a11y @default false */\n a11y?: boolean\n}\n\nconst secondaryBannerVariants = cva(\n // \u57FA\u7840\u6837\u5F0F\n 'text-info-primary relative w-full',\n {\n variants: {\n size: {\n sm: 'tablet:aspect-[768/480] laptop:aspect-[1024/400] desktop:aspect-[1440/384] lg-desktop:aspect-[1920/480] aspect-[390/480]',\n base: 'tablet:aspect-[768/660] laptop:aspect-[1024/432] desktop:aspect-[1440/576] lg-desktop:aspect-[1920/720] aspect-[390/660]',\n lg: 'tablet:aspect-[768/660] laptop:aspect-[1024/520] desktop:aspect-[1440/700] lg-desktop:aspect-[1920/930] aspect-[390/660]',\n xlg: 'tablet:aspect-[768/660] laptop:aspect-[1024/520] desktop:aspect-[1440/700] lg-desktop:aspect-[1920/930] aspect-[390/660] overflow-visible',\n },\n },\n defaultVariants: {\n size: 'base',\n },\n }\n)\n\n/**\n * SecondaryBanner \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3\n */\nexport interface SecondaryBannerData {\n /** \u4E3B\u6807\u9898*/\n title?: string\n /**\n * \u4E3B\u6807\u9898\u6807\u7B7E\n * @default 'h1'\n */\n titleTag?: 'h1' | 'h2'\n /**\n * \u4E0A\u6807\u9898/\u5F15\u5BFC\u6807\u9898\n * \u901A\u5E38\u7528\u4E8E\u5206\u7C7B\u3001\u5F15\u5BFC\u6027\u6587\u5B57\n */\n superTitle?: string\n /**\n * \u526F\u6807\u9898/\u63CF\u8FF0\u6587\u5B57\n * \u901A\u5E38\u7528\u4E8E\u8865\u5145\u8BF4\u660E\u3001\u8BE6\u7EC6\u63CF\u8FF0\n */\n subtitle?: string\n /**\n * \u5C3A\u5BF8:\n * sm: \u5C0F\u5C3A\u5BF8\u7528\u4E8E\u7B5B\u9009\u9875\u9762\n * base: \u57FA\u7840\u5C3A\u5BF8\u7528\u4E8E\n * lg: \u5927\u5C3A\u5BF8\u7528\u4E8E\u4E13\u9898\u9875\n * xlg: \u6D3B\u52A8\u9875\uFF08\u901A\u680F\uFF09\n */\n size?: 'sm' | 'base' | 'lg' | 'xlg'\n pcImage?: MediaType\n padImage?: MediaType\n mobileImage?: MediaType\n /** \u89C6\u9891\u662F\u5426\u5FAA\u73AF\u64AD\u653E */\n isVideoLoop?: boolean\n /** \u7ED3\u675F\u65F6\u95F4\uFF08ISO \u5B57\u7B26\u4E32\uFF09 */\n endDate?: string\n /** \u7ED3\u675F\u65F6\u95F4\u65F6\u533A\uFF08\u5982: America/Los_Angeles\uFF09 */\n endDate_tz?: string\n /**\n * \u65F6\u95F4\u683C\u5F0F\u5316\u914D\u7F6E\uFF08JSON \u5B57\u7B26\u4E32\uFF09\n * {\"day\":\"\u65E5\",\"hour\":\"\u65F6\",\"minute\":\"\u5206\",\"second\":\"\u79D2\"}\n */\n dateFormat?: string\n\n /** \u4E3B\u6309\u94AE\u914D\u7F6E */\n primaryButton?: {\n text: string\n link?: string\n onClick?: () => void\n } & Omit<ButtonProps, 'children'>\n /** \u6B21\u7EA7\u6309\u94AE\u914D\u7F6E */\n secondaryButton?: {\n text: string\n link?: string\n onClick?: () => void\n } & Omit<ButtonProps, 'children'>\n\n iconArray?: Array<{ pcImage: MediaType }>\n theme?: Theme\n}\n\nexport interface SecondaryBannerProps extends React.HTMLAttributes<HTMLElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: SecondaryBannerData\n classNames?: Partial<Record<SecondaryBannerSemanticName, string>>\n /**\n * \u951A\u70B9\u8DF3\u8F6C\u914D\u7F6E\uFF08\u7528\u4E8E # \u5F00\u5934\u7684\u94FE\u63A5\uFF09\n * @default { duration: 500, offset: 0 }\n */\n jumpOptions?: JumpOptions\n}\n\n/**\n * SecondaryBanner - \u6B21\u7EA7\u6A2A\u5E45banner\n *\n * @description \u662F\u6307\u7528\u6237\u8FDB\u5165\u4E8C\u7EA7\u9875\u9762\u540E\uFF0C\u65E0\u9700\u6EDA\u52A8\u9875\u9762\u5C31\u80FD\u5728\u7B2C\u4E00\u5C4F\uFF08\u5373\"\u9996\u5C4F\"\uFF09\u770B\u5230\u7684\u3001\u901A\u5E38\u6A2A\u8DE8\u6574\u4E2A\u6D4F\u89C8\u5668\u7A97\u53E3\u5BBD\u5EA6\u7684\u6838\u5FC3\u89C6\u89C9\u533A\u57DF\u3002\n */\nconst SecondaryBanner = React.forwardRef<HTMLElement, SecondaryBannerProps>(\n ({ className, classNames = {}, data, jumpOptions = {}, ...props }, ref) => {\n const {\n pcImage,\n padImage,\n mobileImage,\n isVideoLoop = true,\n endDate,\n endDate_tz,\n dateFormat,\n size = 'base',\n iconArray: icons,\n theme = 'light',\n primaryButton,\n secondaryButton,\n title,\n titleTag = 'h1',\n } = data\n\n const { locale = 'us' } = useAiuiContext()\n\n // \u9ED8\u8BA4 jump \u914D\u7F6E\n const defaultJumpOptions: JumpOptions = { duration: 500, offset: 0 }\n const mergedJumpOptions = { ...defaultJumpOptions, ...jumpOptions }\n\n // \u751F\u6210\u552F\u4E00ID\u7528\u4E8E\u53EF\u8BBF\u95EE\u6027\n const bannerId = React.useId()\n const titleId = title ? `${bannerId}-title` : undefined\n const subtitleId = data.subtitle ? `${bannerId}-subtitle` : undefined\n const superTitleId = data.superTitle ? `${bannerId}-super-title` : undefined\n\n // \u6784\u5EFAaria-describedby\n const describedBy = [superTitleId, subtitleId].filter(Boolean).join(' ') || undefined\n\n return (\n <section\n ref={ref}\n role=\"banner\"\n aria-labelledby={titleId}\n aria-describedby={describedBy}\n className={cn(\n {\n 'aiui-dark': theme === 'dark',\n },\n secondaryBannerVariants({ size: size }),\n className,\n classNames?.root\n )}\n {...props}\n >\n <Media\n pcImage={pcImage}\n padImage={padImage}\n mobileImage={mobileImage}\n className={cn('absolute inset-0 size-full object-cover', {\n 'h-fit': size === 'xlg',\n })}\n imgClassName=\"object-cover\"\n videoClassName=\"object-cover\"\n muted={true}\n loop={isVideoLoop}\n playsInline={true}\n autoPlay={true}\n />\n <div\n className={cn(\n 'banner-content laptop:top-1/2 laptop:-translate-y-1/2 tablet:px-[32px] laptop:px-[64px] lg-desktop:px-[calc(50%-832px)] absolute top-12 z-10 flex flex-col items-start justify-center px-[16px] text-left',\n classNames?.content\n )}\n >\n <div className=\"banner-inner-title desktop:gap-2 flex flex-col items-start gap-1\">\n {data.superTitle && (\n <Text\n as=\"p\"\n size={2}\n id={superTitleId}\n className={cn('banner-super-title desktop:text-[16px] lg-desktop:text-[18px]', classNames?.superTitle)}\n html={data.superTitle}\n />\n )}\n\n {data.title && (\n <Heading\n as={titleTag}\n size={['xlg', 'lg'].includes(size) ? 5 : 4}\n id={titleId}\n className={cn('banner-title ', classNames?.title)}\n html={data.title}\n />\n )}\n\n {data.subtitle && (\n <Text\n as=\"p\"\n size={3}\n id={subtitleId}\n className={cn('banner-subtitle desktop:text-[16px] lg-desktop:text-[18px]', classNames?.subtitle)}\n html={data.subtitle}\n />\n )}\n </div>\n\n {endDate && (\n <div className=\"banner-countdown\">\n <Countdown\n endDate={endDate}\n endDate_tz={endDate_tz}\n dateFormat={dateFormat}\n variant=\"spacious\"\n className=\"lg-desktop:mt-8 mt-6\"\n />\n </div>\n )}\n\n <div\n className={cn(\n 'banner-cta-group lg-desktop:mt-[32px] lg-desktop:gap-3 mt-6 flex gap-2',\n classNames?.buttonGroup\n )}\n >\n {secondaryButton?.text && (\n <Button\n variant=\"secondary\"\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n if (secondaryButton.link?.startsWith('#')) {\n e.preventDefault()\n const element = document.querySelector(secondaryButton.link)\n if (element) {\n jump(element as HTMLElement, mergedJumpOptions)\n }\n }\n secondaryButton.onClick?.()\n }}\n className={cn('', classNames?.secondaryButton)}\n aria-describedby={titleId}\n {...(secondaryButton.link && !secondaryButton.link.startsWith('#')\n ? { as: 'a', href: getLocalizedPath(secondaryButton.link, locale) }\n : {})}\n >\n {secondaryButton.text}\n </Button>\n )}\n {primaryButton?.text && (\n <Button\n onClick={e => {\n if (primaryButton.link?.startsWith('#')) {\n e.preventDefault()\n const element = document.querySelector(primaryButton.link)\n if (element) {\n jump(element as HTMLElement, mergedJumpOptions)\n }\n }\n primaryButton.onClick?.()\n }}\n className={cn('', classNames?.primaryButton)}\n aria-describedby={titleId}\n {...(primaryButton.link && !primaryButton.link.startsWith('#')\n ? { as: 'a', href: getLocalizedPath(primaryButton.link, locale) }\n : {})}\n >\n {primaryButton.text}\n </Button>\n )}\n </div>\n\n {Array.isArray(icons) && icons.length > 0 && (\n <div\n className=\"banner-icons desktop:mt-3 lg-desktop:mt-4 mt-2 flex items-center gap-2\"\n role=\"group\"\n aria-label=\"brand icons\"\n >\n {icons.map((icon, index) =>\n icon.pcImage ? (\n <Picture\n key={index}\n source={icon.pcImage.url}\n alt={icon.pcImage.alt || `icon ${index + 1}`}\n role=\"img\"\n className=\"laptop:h-auto h-[48px] max-w-none\"\n imgClassName=\"h-full\"\n />\n ) : null\n )}\n </div>\n )}\n </div>\n </section>\n )\n }\n)\n\nSecondaryBanner.displayName = 'SecondaryBanner'\nexport default withLayout(SecondaryBanner)\n"],
5
- "mappings": "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",
6
- "names": ["SecondaryBanner_exports", "__export", "SecondaryBanner_default", "__toCommonJS", "import_jsx_runtime", "React", "import_class_variance_authority", "import_jump", "import_helpers", "import_components", "import_Media", "import_AiuiProvider", "import_Styles", "secondaryBannerVariants", "SecondaryBanner", "className", "classNames", "data", "jumpOptions", "props", "ref", "pcImage", "padImage", "mobileImage", "isVideoLoop", "endDate", "endDate_tz", "dateFormat", "size", "icons", "theme", "primaryButton", "secondaryButton", "title", "titleTag", "locale", "mergedJumpOptions", "bannerId", "titleId", "subtitleId", "superTitleId", "describedBy", "Media", "e", "element", "jump", "icon", "index"]
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cva } from 'class-variance-authority'\nimport jump from 'jump.js'\nimport { cn, getLocalizedPath } from '../../helpers/index.js'\nimport type { Media as MediaType, Theme } from '../../types/props.js'\nimport { Text, Button, Heading, Picture, Countdown } from '../../components/index.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport Media from '../Media/index.js'\nimport type { ButtonProps } from '../../components/button.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\n// Task 15: static import (no require()) for carousel delegation (DECISION-002)\nimport SecondaryBannerCarouselImpl from './SecondaryBannerCarousel.js'\n\nexport type SecondaryBannerSemanticName =\n | 'root'\n | 'title'\n | 'superTitle'\n | 'subtitle'\n | 'content'\n | 'buttonGroup'\n | 'primaryButton'\n | 'secondaryButton'\n\n/**\n * Carousel navigation configuration for SecondaryBanner. v1: arrows only.\n * autoplay, dots, and progress are intentionally EXCLUDED from v1.\n */\nexport interface SecondaryBannerCarouselConfig {\n /**\n * Show prev/next arrow navigation controls.\n * Only used when data.items has 2+ slides.\n * @default true\n */\n showArrows?: boolean\n showDots?: boolean\n loop?: boolean\n autoplaySeconds?: number\n}\n\n/**\n * Per-slide data for SecondaryBanner carousel mode.\n * All fields optional (mirrors SecondaryBannerData permissiveness).\n */\nexport interface SecondaryBannerSlideData {\n title?: string\n titleTag?: 'h1' | 'h2'\n superTitle?: string\n subtitle?: string\n size?: 'sm' | 'base' | 'lg' | 'xlg'\n pcImage?: MediaType\n padImage?: MediaType\n mobileImage?: MediaType\n isVideoLoop?: boolean\n endDate?: string\n endDate_tz?: string\n dateFormat?: string\n primaryButton?: {\n text: string\n link?: string\n onClick?: () => void\n } & Omit<ButtonProps, 'children'>\n secondaryButton?: {\n text: string\n link?: string\n onClick?: () => void\n } & Omit<ButtonProps, 'children'>\n iconArray?: Array<{ pcImage: MediaType }>\n theme?: Theme\n}\n/**\n * jump.js \u914D\u7F6E\u9009\u9879\n */\nexport interface JumpOptions {\n /** \u52A8\u753B\u6301\u7EED\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09 @default 500 */\n duration?: number\n /** \u504F\u79FB\u91CF\uFF08\u50CF\u7D20\uFF09 @default 0 */\n offset?: number\n /** \u52A8\u753B\u5B8C\u6210\u56DE\u8C03 */\n callback?: () => void\n /** \u7F13\u52A8\u51FD\u6570 */\n easing?: (t: number, b: number, c: number, d: number) => number\n /** \u662F\u5426\u8003\u8651 a11y @default false */\n a11y?: boolean\n}\n\nconst secondaryBannerVariants = cva(\n // \u57FA\u7840\u6837\u5F0F\n 'text-info-primary relative w-full',\n {\n variants: {\n size: {\n sm: 'tablet:aspect-[768/480] laptop:aspect-[1024/400] desktop:aspect-[1440/384] lg-desktop:aspect-[1920/480] aspect-[390/480]',\n base: 'tablet:aspect-[768/660] laptop:aspect-[1024/432] desktop:aspect-[1440/576] lg-desktop:aspect-[1920/720] aspect-[390/660]',\n lg: 'tablet:aspect-[768/660] laptop:aspect-[1024/520] desktop:aspect-[1440/700] lg-desktop:aspect-[1920/930] aspect-[390/660]',\n xlg: 'tablet:aspect-[768/660] laptop:aspect-[1024/520] desktop:aspect-[1440/700] lg-desktop:aspect-[1920/930] aspect-[390/660] overflow-visible',\n },\n },\n defaultVariants: {\n size: 'base',\n },\n }\n)\n\n/**\n * SecondaryBanner \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3\n */\nexport interface SecondaryBannerData {\n /** \u4E3B\u6807\u9898*/\n title?: string\n /**\n * \u4E3B\u6807\u9898\u6807\u7B7E\n * @default 'h1'\n */\n titleTag?: 'h1' | 'h2'\n /**\n * \u4E0A\u6807\u9898/\u5F15\u5BFC\u6807\u9898\n * \u901A\u5E38\u7528\u4E8E\u5206\u7C7B\u3001\u5F15\u5BFC\u6027\u6587\u5B57\n */\n superTitle?: string\n /**\n * \u526F\u6807\u9898/\u63CF\u8FF0\u6587\u5B57\n * \u901A\u5E38\u7528\u4E8E\u8865\u5145\u8BF4\u660E\u3001\u8BE6\u7EC6\u63CF\u8FF0\n */\n subtitle?: string\n /**\n * \u5C3A\u5BF8:\n * sm: \u5C0F\u5C3A\u5BF8\u7528\u4E8E\u7B5B\u9009\u9875\u9762\n * base: \u57FA\u7840\u5C3A\u5BF8\u7528\u4E8E\n * lg: \u5927\u5C3A\u5BF8\u7528\u4E8E\u4E13\u9898\u9875\n * xlg: \u6D3B\u52A8\u9875\uFF08\u901A\u680F\uFF09\n */\n size?: 'sm' | 'base' | 'lg' | 'xlg'\n pcImage?: MediaType\n padImage?: MediaType\n mobileImage?: MediaType\n /** \u89C6\u9891\u662F\u5426\u5FAA\u73AF\u64AD\u653E */\n isVideoLoop?: boolean\n /** \u7ED3\u675F\u65F6\u95F4\uFF08ISO \u5B57\u7B26\u4E32\uFF09 */\n endDate?: string\n /** \u7ED3\u675F\u65F6\u95F4\u65F6\u533A\uFF08\u5982: America/Los_Angeles\uFF09 */\n endDate_tz?: string\n /**\n * \u65F6\u95F4\u683C\u5F0F\u5316\u914D\u7F6E\uFF08JSON \u5B57\u7B26\u4E32\uFF09\n * {\"day\":\"\u65E5\",\"hour\":\"\u65F6\",\"minute\":\"\u5206\",\"second\":\"\u79D2\"}\n */\n dateFormat?: string\n\n /** \u4E3B\u6309\u94AE\u914D\u7F6E */\n primaryButton?: {\n text: string\n link?: string\n onClick?: () => void\n } & Omit<ButtonProps, 'children'>\n /** \u6B21\u7EA7\u6309\u94AE\u914D\u7F6E */\n secondaryButton?: {\n text: string\n link?: string\n onClick?: () => void\n } & Omit<ButtonProps, 'children'>\n\n iconArray?: Array<{ pcImage: MediaType }>\n theme?: Theme\n /**\n * Carousel slide items. When present and non-empty, activates carousel mode.\n * Single-banner mode is used when absent or empty (DECISION-002).\n */\n items?: SecondaryBannerSlideData[]\n /**\n * Carousel navigation configuration.\n * Only meaningful when data.items is present and has 2+ items.\n */\n carousel?: SecondaryBannerCarouselConfig\n}\n\nexport interface SecondaryBannerProps extends React.HTMLAttributes<HTMLElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: SecondaryBannerData\n classNames?: Partial<Record<SecondaryBannerSemanticName, string>>\n /**\n * \u951A\u70B9\u8DF3\u8F6C\u914D\u7F6E\uFF08\u7528\u4E8E # \u5F00\u5934\u7684\u94FE\u63A5\uFF09\n * @default { duration: 500, offset: 0 }\n */\n jumpOptions?: JumpOptions\n /**\n * Whether this banner is the active slide in a carousel.\n * Controls video autoPlay: autoPlay={isActive ?? true}.\n * When absent (legacy single-banner), defaults to true (DECISION-008).\n * @default true\n */\n isActive?: boolean\n}\n\n/**\n * SecondaryBanner - \u6B21\u7EA7\u6A2A\u5E45banner\n *\n * @description \u662F\u6307\u7528\u6237\u8FDB\u5165\u4E8C\u7EA7\u9875\u9762\u540E\uFF0C\u65E0\u9700\u6EDA\u52A8\u9875\u9762\u5C31\u80FD\u5728\u7B2C\u4E00\u5C4F\uFF08\u5373\"\u9996\u5C4F\"\uFF09\u770B\u5230\u7684\u3001\u901A\u5E38\u6A2A\u8DE8\u6574\u4E2A\u6D4F\u89C8\u5668\u7A97\u53E3\u5BBD\u5EA6\u7684\u6838\u5FC3\u89C6\u89C9\u533A\u57DF\u3002\n */\nconst SecondaryBanner = React.forwardRef<HTMLElement, SecondaryBannerProps>(\n ({ className, classNames = {}, data, jumpOptions = {}, isActive, ...props }, ref) => {\n const {\n pcImage,\n padImage,\n mobileImage,\n isVideoLoop = true,\n endDate,\n endDate_tz,\n dateFormat,\n size = 'base',\n iconArray: icons,\n theme = 'light',\n primaryButton,\n secondaryButton,\n title,\n titleTag = 'h1',\n } = data\n\n // Hooks must be called unconditionally before any early return (React rules)\n const { locale = 'us' } = useAiuiContext()\n\n const defaultJumpOptions: JumpOptions = { duration: 500, offset: 0 }\n const mergedJumpOptions = { ...defaultJumpOptions, ...jumpOptions }\n\n const bannerId = React.useId()\n const titleId = title ? `${bannerId}-title` : undefined\n const subtitleId = data.subtitle ? `${bannerId}-subtitle` : undefined\n const superTitleId = data.superTitle ? `${bannerId}-super-title` : undefined\n const describedBy = [superTitleId, subtitleId].filter(Boolean).join(' ') || undefined\n\n // Task 15: Carousel mode early return AFTER all hooks (DECISION-002 / DECISION-A008)\n if (data.items && data.items.length > 0) {\n return (\n <SecondaryBannerCarouselImpl\n data={data}\n className={className}\n classNames={classNames}\n jumpOptions={jumpOptions}\n ref={ref}\n {...props}\n />\n )\n }\n\n return (\n <section\n ref={ref}\n role=\"banner\"\n aria-labelledby={titleId}\n aria-describedby={describedBy}\n className={cn(\n {\n 'aiui-dark': theme === 'dark',\n },\n secondaryBannerVariants({ size: size }),\n className,\n classNames?.root\n )}\n {...props}\n >\n <Media\n pcImage={pcImage}\n padImage={padImage}\n mobileImage={mobileImage}\n className={cn('absolute inset-0 size-full object-cover', {\n 'h-fit': size === 'xlg',\n })}\n imgClassName=\"object-cover\"\n videoClassName=\"object-cover\"\n muted={true}\n loop={isVideoLoop}\n playsInline={true}\n autoPlay={isActive ?? true}\n />\n <div\n className={cn(\n 'banner-content laptop:top-1/2 laptop:-translate-y-1/2 tablet:px-[32px] laptop:px-[64px] lg-desktop:px-[calc(50%-832px)] absolute top-12 z-10 flex flex-col items-start justify-center px-[16px] text-left',\n classNames?.content\n )}\n >\n <div className=\"banner-inner-title desktop:gap-2 flex flex-col items-start gap-1\">\n {data.superTitle && (\n <Text\n as=\"p\"\n size={2}\n id={superTitleId}\n className={cn('banner-super-title desktop:text-[16px] lg-desktop:text-[18px]', classNames?.superTitle)}\n html={data.superTitle}\n />\n )}\n\n {data.title && (\n <Heading\n as={titleTag}\n size={['xlg', 'lg'].includes(size) ? 5 : 4}\n id={titleId}\n className={cn('banner-title ', classNames?.title)}\n html={data.title}\n />\n )}\n\n {data.subtitle && (\n <Text\n as=\"p\"\n size={3}\n id={subtitleId}\n className={cn('banner-subtitle desktop:text-[16px] lg-desktop:text-[18px]', classNames?.subtitle)}\n html={data.subtitle}\n />\n )}\n </div>\n\n {endDate && (\n <div className=\"banner-countdown\">\n <Countdown\n endDate={endDate}\n endDate_tz={endDate_tz}\n dateFormat={dateFormat}\n variant=\"spacious\"\n className=\"lg-desktop:mt-8 mt-6\"\n />\n </div>\n )}\n\n <div\n className={cn(\n 'banner-cta-group lg-desktop:mt-[32px] lg-desktop:gap-3 mt-6 flex gap-2',\n classNames?.buttonGroup\n )}\n >\n {secondaryButton?.text && (\n <Button\n variant=\"secondary\"\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n if (secondaryButton.link?.startsWith('#')) {\n e.preventDefault()\n const element = document.querySelector(secondaryButton.link)\n if (element) {\n jump(element as HTMLElement, mergedJumpOptions)\n }\n }\n secondaryButton.onClick?.()\n }}\n className={cn('', classNames?.secondaryButton)}\n aria-describedby={titleId}\n {...(secondaryButton.link && !secondaryButton.link.startsWith('#')\n ? { as: 'a', href: getLocalizedPath(secondaryButton.link, locale) }\n : {})}\n >\n {secondaryButton.text}\n </Button>\n )}\n {primaryButton?.text && (\n <Button\n onClick={e => {\n if (primaryButton.link?.startsWith('#')) {\n e.preventDefault()\n const element = document.querySelector(primaryButton.link)\n if (element) {\n jump(element as HTMLElement, mergedJumpOptions)\n }\n }\n primaryButton.onClick?.()\n }}\n className={cn('', classNames?.primaryButton)}\n aria-describedby={titleId}\n {...(primaryButton.link && !primaryButton.link.startsWith('#')\n ? { as: 'a', href: getLocalizedPath(primaryButton.link, locale) }\n : {})}\n >\n {primaryButton.text}\n </Button>\n )}\n </div>\n\n {Array.isArray(icons) && icons.length > 0 && (\n <div\n className=\"banner-icons desktop:mt-3 lg-desktop:mt-4 mt-2 flex items-center gap-2\"\n role=\"group\"\n aria-label=\"brand icons\"\n >\n {icons.map((icon, index) =>\n icon.pcImage ? (\n <Picture\n key={index}\n source={icon.pcImage.url}\n alt={icon.pcImage.alt || `icon ${index + 1}`}\n role=\"img\"\n className=\"laptop:h-auto h-[48px] max-w-none\"\n imgClassName=\"h-full\"\n />\n ) : null\n )}\n </div>\n )}\n </div>\n </section>\n )\n }\n)\n\nSecondaryBanner.displayName = 'SecondaryBanner'\nexport default withLayout(SecondaryBanner)\n"],
5
+ "mappings": "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",
6
+ "names": ["SecondaryBanner_exports", "__export", "SecondaryBanner_default", "__toCommonJS", "import_jsx_runtime", "React", "import_class_variance_authority", "import_jump", "import_helpers", "import_components", "import_Styles", "import_Media", "import_AiuiProvider", "import_SecondaryBannerCarousel", "secondaryBannerVariants", "SecondaryBanner", "className", "classNames", "data", "jumpOptions", "isActive", "props", "ref", "pcImage", "padImage", "mobileImage", "isVideoLoop", "endDate", "endDate_tz", "dateFormat", "size", "icons", "theme", "primaryButton", "secondaryButton", "title", "titleTag", "locale", "mergedJumpOptions", "bannerId", "titleId", "subtitleId", "superTitleId", "describedBy", "SecondaryBannerCarouselImpl", "Media", "e", "element", "jump", "icon", "index"]
7
7
  }
@@ -13,5 +13,5 @@ interface SelectStoreType extends React.HTMLAttributes<HTMLDivElement> {
13
13
  list: SelectStoreDataType[];
14
14
  };
15
15
  }
16
- declare const _default: React.ForwardRefExoticComponent<Omit<SelectStoreType, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {};
16
+ declare const _default: React.ForwardRefExoticComponent<Omit<SelectStoreType, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {};
17
17
  export default _default;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { ShelfDisplayProps } from './shelfDisplay.js';
3
- declare const _default: React.ForwardRefExoticComponent<Omit<ShelfDisplayProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {
3
+ declare const _default: React.ForwardRefExoticComponent<Omit<ShelfDisplayProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
4
4
  readonly $$typeof: symbol;
5
5
  };
6
6
  export default _default;
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import type { SloganProps } from './types.js';
3
3
  export declare const componentType = "copy";
4
4
  export declare const componentName = "brand_slogan";
5
- declare const _default: React.ForwardRefExoticComponent<Omit<SloganProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {
5
+ declare const _default: React.ForwardRefExoticComponent<Omit<SloganProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
6
6
  readonly $$typeof: symbol;
7
7
  };
8
8
  export default _default;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { SpacerProps } from './types.js';
3
- declare const _default: React.ForwardRefExoticComponent<Omit<SpacerProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {
3
+ declare const _default: React.ForwardRefExoticComponent<Omit<SpacerProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
4
4
  readonly $$typeof: symbol;
5
5
  };
6
6
  export default _default;
@@ -5,7 +5,7 @@ export interface SpecsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, '
5
5
  onChange?: (product: any, index: number) => void;
6
6
  onSecondaryChange?: (data: any) => void;
7
7
  }
8
- declare const _default: React.ForwardRefExoticComponent<Omit<SpecsProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {
8
+ declare const _default: React.ForwardRefExoticComponent<Omit<SpecsProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
9
9
  readonly $$typeof: symbol;
10
10
  };
11
11
  export default _default;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { SpecsComparisonProps } from './types.js';
3
- declare const _default: React.ForwardRefExoticComponent<Omit<SpecsComparisonProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {
3
+ declare const _default: React.ForwardRefExoticComponent<Omit<SpecsComparisonProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
4
4
  readonly $$typeof: symbol;
5
5
  };
6
6
  export default _default;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { TabWithImageProps } from './types.js';
3
- declare const _default: React.ForwardRefExoticComponent<Omit<TabWithImageProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {
3
+ declare const _default: React.ForwardRefExoticComponent<Omit<TabWithImageProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
4
4
  readonly $$typeof: symbol;
5
5
  };
6
6
  export default _default;
@@ -1,6 +1,6 @@
1
1
  import type { TabsProps } from './types.js';
2
2
  import React from 'react';
3
- declare const _default: React.ForwardRefExoticComponent<Omit<TabsProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {
3
+ declare const _default: React.ForwardRefExoticComponent<Omit<TabsProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
4
4
  readonly $$typeof: symbol;
5
5
  };
6
6
  export default _default;
@@ -1,6 +1,6 @@
1
1
  import type { TabsGroupProps } from './types.js';
2
2
  import React from 'react';
3
- declare const _default: React.ForwardRefExoticComponent<Omit<TabsGroupProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {
3
+ declare const _default: React.ForwardRefExoticComponent<Omit<TabsGroupProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
4
4
  readonly $$typeof: symbol;
5
5
  };
6
6
  export default _default;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { TabsWithMediaProps } from './types.js';
3
- declare const _default: React.ForwardRefExoticComponent<Omit<TabsWithMediaProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {
3
+ declare const _default: React.ForwardRefExoticComponent<Omit<TabsWithMediaProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
4
4
  readonly $$typeof: symbol;
5
5
  };
6
6
  export default _default;
@@ -4,7 +4,7 @@ import 'swiper/css';
4
4
  import 'swiper/css/navigation';
5
5
  import 'swiper/css/pagination';
6
6
  import 'swiper/css/effect-coverflow';
7
- declare const _default: React.ForwardRefExoticComponent<Omit<ThreeDCarouselProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {
7
+ declare const _default: React.ForwardRefExoticComponent<Omit<ThreeDCarouselProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
8
8
  readonly $$typeof: symbol;
9
9
  };
10
10
  export default _default;
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import type { TitlePropsBase } from './types.js';
3
3
  export interface TitleProps extends TitlePropsBase, Omit<React.HTMLAttributes<HTMLDivElement>, 'className' | 'title'> {
4
4
  }
5
- declare const _default: React.ForwardRefExoticComponent<Omit<TitleProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../../shared/Styles.js").ContainerProps & React.RefAttributes<unknown>> & {
5
+ declare const _default: React.ForwardRefExoticComponent<Omit<TitleProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
6
6
  readonly $$typeof: symbol;
7
7
  };
8
8
  export default _default;