@anker-in/headless-ui 1.2.2 → 1.2.3-alpha.1778583232121

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 (323) hide show
  1. package/dist/cjs/biz-components/AccordionCards/index.js +1 -1
  2. package/dist/cjs/biz-components/AccordionCards/index.js.map +3 -3
  3. package/dist/cjs/biz-components/ActivityMechanism/index.js +1 -1
  4. package/dist/cjs/biz-components/ActivityMechanism/index.js.map +3 -3
  5. package/dist/cjs/biz-components/ActivitySchedule/index.js +1 -1
  6. package/dist/cjs/biz-components/ActivitySchedule/index.js.map +3 -3
  7. package/dist/cjs/biz-components/AiuiProvider/index.js +1 -1
  8. package/dist/cjs/biz-components/AiuiProvider/index.js.map +3 -3
  9. package/dist/cjs/biz-components/AnchorNavigation/index.js +1 -1
  10. package/dist/cjs/biz-components/AnchorNavigation/index.js.map +3 -3
  11. package/dist/cjs/biz-components/BrandCardLink/BrandCardLink.js +1 -1
  12. package/dist/cjs/biz-components/BrandCardLink/BrandCardLink.js.map +3 -3
  13. package/dist/cjs/biz-components/Category/SwiperCategory.js +1 -1
  14. package/dist/cjs/biz-components/Category/SwiperCategory.js.map +3 -3
  15. package/dist/cjs/biz-components/Category/index.js +1 -1
  16. package/dist/cjs/biz-components/Category/index.js.map +3 -3
  17. package/dist/cjs/biz-components/Evaluate/index.js +1 -1
  18. package/dist/cjs/biz-components/Evaluate/index.js.map +3 -3
  19. package/dist/cjs/biz-components/EventSchedule/index.js +1 -1
  20. package/dist/cjs/biz-components/EventSchedule/index.js.map +3 -3
  21. package/dist/cjs/biz-components/Faq/Faq.js +1 -1
  22. package/dist/cjs/biz-components/Faq/Faq.js.map +2 -2
  23. package/dist/cjs/biz-components/Faq/types.d.ts +0 -1
  24. package/dist/cjs/biz-components/Faq/types.js +1 -1
  25. package/dist/cjs/biz-components/Faq/types.js.map +1 -1
  26. package/dist/cjs/biz-components/FeatureCards/FeatureCards.js +1 -1
  27. package/dist/cjs/biz-components/FeatureCards/FeatureCards.js.map +3 -3
  28. package/dist/cjs/biz-components/GiftBox/index.js +1 -1
  29. package/dist/cjs/biz-components/GiftBox/index.js.map +2 -2
  30. package/dist/cjs/biz-components/GiftShelf/index.js +1 -1
  31. package/dist/cjs/biz-components/GiftShelf/index.js.map +3 -3
  32. package/dist/cjs/biz-components/GiftTierShelf/index.js +1 -1
  33. package/dist/cjs/biz-components/GiftTierShelf/index.js.map +3 -3
  34. package/dist/cjs/biz-components/Graphic/index.js +1 -1
  35. package/dist/cjs/biz-components/Graphic/index.js.map +2 -2
  36. package/dist/cjs/biz-components/GraphicOverlay/GraphicOverlay.js +1 -1
  37. package/dist/cjs/biz-components/GraphicOverlay/GraphicOverlay.js.map +3 -3
  38. package/dist/cjs/biz-components/HeaderNavigation/MobileTextLinksMenu.d.ts +12 -0
  39. package/dist/cjs/biz-components/HeaderNavigation/MobileTextLinksMenu.js +2 -0
  40. package/dist/cjs/biz-components/HeaderNavigation/MobileTextLinksMenu.js.map +7 -0
  41. package/dist/cjs/biz-components/HeaderNavigation/TextLinksDropdown.d.ts +10 -0
  42. package/dist/cjs/biz-components/HeaderNavigation/TextLinksDropdown.js +2 -0
  43. package/dist/cjs/biz-components/HeaderNavigation/TextLinksDropdown.js.map +7 -0
  44. package/dist/cjs/biz-components/HeaderNavigation/index.js +1 -1
  45. package/dist/cjs/biz-components/HeaderNavigation/index.js.map +3 -3
  46. package/dist/cjs/biz-components/HeaderNavigation/types.d.ts +8 -1
  47. package/dist/cjs/biz-components/HeaderNavigation/types.js +1 -1
  48. package/dist/cjs/biz-components/HeaderNavigation/types.js.map +2 -2
  49. package/dist/cjs/biz-components/HeaderNavigation/withCategory.d.ts +1 -0
  50. package/dist/cjs/biz-components/HeaderNavigation/withCategory.js +1 -1
  51. package/dist/cjs/biz-components/HeaderNavigation/withCategory.js.map +3 -3
  52. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js +1 -1
  53. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js.map +3 -3
  54. package/dist/cjs/biz-components/HeroBanner/HeroBannerCarousel.js +1 -1
  55. package/dist/cjs/biz-components/HeroBanner/HeroBannerCarousel.js.map +3 -3
  56. package/dist/cjs/biz-components/HeroBanner/types.d.ts +5 -0
  57. package/dist/cjs/biz-components/HeroBanner/types.js +1 -1
  58. package/dist/cjs/biz-components/HeroBanner/types.js.map +1 -1
  59. package/dist/cjs/biz-components/ImageOverlayShelf/ProductCard.js +1 -1
  60. package/dist/cjs/biz-components/ImageOverlayShelf/ProductCard.js.map +2 -2
  61. package/dist/cjs/biz-components/ImageWithText/ImageWithText.js +1 -1
  62. package/dist/cjs/biz-components/ImageWithText/ImageWithText.js.map +3 -3
  63. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductGallery/index.js +1 -1
  64. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductGallery/index.js.map +3 -3
  65. package/dist/cjs/biz-components/Listing/components/PurchaseBar/ProductActions/index.js +1 -1
  66. package/dist/cjs/biz-components/Listing/components/PurchaseBar/ProductActions/index.js.map +3 -3
  67. package/dist/cjs/biz-components/Listing/components/PurchaseBar/index.js +1 -1
  68. package/dist/cjs/biz-components/Listing/components/PurchaseBar/index.js.map +3 -3
  69. package/dist/cjs/biz-components/Listing/components/PurchaseBar/types.d.ts +2 -0
  70. package/dist/cjs/biz-components/Listing/components/PurchaseBar/types.js +1 -1
  71. package/dist/cjs/biz-components/Listing/components/PurchaseBar/types.js.map +1 -1
  72. package/dist/cjs/biz-components/LotteryShared/ErrorModal.d.ts +4 -0
  73. package/dist/cjs/biz-components/LotteryShared/ErrorModal.js.map +2 -2
  74. package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.d.ts +13 -13
  75. package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.js +1 -1
  76. package/dist/cjs/biz-components/LotteryShared/MyRewardsModal.js.map +3 -3
  77. package/dist/cjs/biz-components/LotteryShared/types.d.ts +9 -0
  78. package/dist/cjs/biz-components/LotteryShared/types.js.map +2 -2
  79. package/dist/cjs/biz-components/Marquee/Marquee.d.ts +11 -4
  80. package/dist/cjs/biz-components/Marquee/Marquee.js +1 -1
  81. package/dist/cjs/biz-components/Marquee/Marquee.js.map +3 -3
  82. package/dist/cjs/biz-components/Marquee/index.d.ts +1 -1
  83. package/dist/cjs/biz-components/Marquee/index.js +1 -1
  84. package/dist/cjs/biz-components/Marquee/index.js.map +2 -2
  85. package/dist/cjs/biz-components/Marquee/type.d.ts +22 -4
  86. package/dist/cjs/biz-components/Marquee/type.js +1 -1
  87. package/dist/cjs/biz-components/Marquee/type.js.map +1 -1
  88. package/dist/cjs/biz-components/Media/index.js +1 -1
  89. package/dist/cjs/biz-components/Media/index.js.map +2 -2
  90. package/dist/cjs/biz-components/MediaPlayerBase/index.js +1 -1
  91. package/dist/cjs/biz-components/MediaPlayerBase/index.js.map +3 -3
  92. package/dist/cjs/biz-components/MediaPlayerMulti/index.js +1 -1
  93. package/dist/cjs/biz-components/MediaPlayerMulti/index.js.map +3 -3
  94. package/dist/cjs/biz-components/MediaTextOverlay/MediaTextOverlay.d.ts +9 -0
  95. package/dist/cjs/biz-components/MediaTextOverlay/MediaTextOverlay.js +2 -0
  96. package/dist/cjs/biz-components/MediaTextOverlay/MediaTextOverlay.js.map +7 -0
  97. package/dist/cjs/biz-components/MediaTextOverlay/index.d.ts +2 -0
  98. package/dist/cjs/biz-components/MediaTextOverlay/index.js +2 -0
  99. package/dist/cjs/biz-components/MediaTextOverlay/index.js.map +7 -0
  100. package/dist/cjs/biz-components/MediaTextOverlay/types.d.ts +24 -0
  101. package/dist/cjs/biz-components/MediaTextOverlay/types.js +2 -0
  102. package/dist/cjs/biz-components/MediaTextOverlay/types.js.map +7 -0
  103. package/dist/cjs/biz-components/MemberEquity/index.js +2 -2
  104. package/dist/cjs/biz-components/MemberEquity/index.js.map +3 -3
  105. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js +1 -1
  106. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js.map +3 -3
  107. package/dist/cjs/biz-components/NavigationSearch/index.js +2 -2
  108. package/dist/cjs/biz-components/NavigationSearch/index.js.map +2 -2
  109. package/dist/cjs/biz-components/ProductHero/ProductHero.js +1 -1
  110. package/dist/cjs/biz-components/ProductHero/ProductHero.js.map +3 -3
  111. package/dist/cjs/biz-components/ProductLottery/types.d.ts +62 -5
  112. package/dist/cjs/biz-components/ProductLottery/types.js +1 -1
  113. package/dist/cjs/biz-components/ProductLottery/types.js.map +2 -2
  114. package/dist/cjs/biz-components/ProductNav/ProductNav.js +1 -1
  115. package/dist/cjs/biz-components/ProductNav/ProductNav.js.map +3 -3
  116. package/dist/cjs/biz-components/PromotionalBar/index.js +1 -1
  117. package/dist/cjs/biz-components/PromotionalBar/index.js.map +3 -3
  118. package/dist/cjs/biz-components/SecondaryBanner/SecondaryBannerCarousel.d.ts +1 -0
  119. package/dist/cjs/biz-components/SecondaryBanner/SecondaryBannerCarousel.js +1 -1
  120. package/dist/cjs/biz-components/SecondaryBanner/SecondaryBannerCarousel.js.map +3 -3
  121. package/dist/cjs/biz-components/SecondaryBanner/index.d.ts +9 -0
  122. package/dist/cjs/biz-components/SecondaryBanner/index.js +1 -1
  123. package/dist/cjs/biz-components/SecondaryBanner/index.js.map +3 -3
  124. package/dist/cjs/biz-components/ShelfDisplay/index.js +1 -1
  125. package/dist/cjs/biz-components/ShelfDisplay/index.js.map +2 -2
  126. package/dist/cjs/biz-components/ShelfDisplay/shelfDisplay.d.ts +1 -0
  127. package/dist/cjs/biz-components/ShelfDisplay/shelfDisplay.js +1 -1
  128. package/dist/cjs/biz-components/ShelfDisplay/shelfDisplay.js.map +1 -1
  129. package/dist/cjs/biz-components/ShelfDisplay/shelfDisplayItem.js +1 -1
  130. package/dist/cjs/biz-components/ShelfDisplay/shelfDisplayItem.js.map +3 -3
  131. package/dist/cjs/biz-components/Subscribe/index.js +1 -1
  132. package/dist/cjs/biz-components/Subscribe/index.js.map +2 -2
  133. package/dist/cjs/biz-components/SwiperBox/index.js +1 -1
  134. package/dist/cjs/biz-components/SwiperBox/index.js.map +3 -3
  135. package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.js +1 -1
  136. package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.js.map +3 -3
  137. package/dist/cjs/biz-components/Title/index.js +1 -1
  138. package/dist/cjs/biz-components/Title/index.js.map +3 -3
  139. package/dist/cjs/biz-components/WebPushPopup/index.d.ts +44 -0
  140. package/dist/cjs/biz-components/WebPushPopup/index.js +2 -0
  141. package/dist/cjs/biz-components/WebPushPopup/index.js.map +7 -0
  142. package/dist/cjs/biz-components/WheelLottery/index.js +1 -1
  143. package/dist/cjs/biz-components/WheelLottery/index.js.map +3 -3
  144. package/dist/cjs/biz-components/index.d.ts +6 -0
  145. package/dist/cjs/biz-components/index.js +1 -1
  146. package/dist/cjs/biz-components/index.js.map +3 -3
  147. package/dist/cjs/components/Countdown.js +1 -1
  148. package/dist/cjs/components/Countdown.js.map +3 -3
  149. package/dist/cjs/components/button.d.ts +4 -0
  150. package/dist/cjs/components/button.js +1 -1
  151. package/dist/cjs/components/button.js.map +3 -3
  152. package/dist/cjs/components/link.js +1 -1
  153. package/dist/cjs/components/link.js.map +2 -2
  154. package/dist/cjs/helpers/index.d.ts +1 -1
  155. package/dist/cjs/helpers/index.js +1 -1
  156. package/dist/cjs/helpers/index.js.map +2 -2
  157. package/dist/cjs/helpers/isLexicalEmpty.d.ts +5 -0
  158. package/dist/cjs/helpers/isLexicalEmpty.js +1 -1
  159. package/dist/cjs/helpers/isLexicalEmpty.js.map +3 -3
  160. package/dist/cjs/hooks/useEmarsysWebPush.d.ts +111 -0
  161. package/dist/cjs/hooks/useEmarsysWebPush.js +2 -0
  162. package/dist/cjs/hooks/useEmarsysWebPush.js.map +7 -0
  163. package/dist/cjs/hooks/useProductListTrack.d.ts +43 -0
  164. package/dist/cjs/hooks/useProductListTrack.js +2 -0
  165. package/dist/cjs/hooks/useProductListTrack.js.map +7 -0
  166. package/dist/esm/biz-components/AccordionCards/index.js +1 -1
  167. package/dist/esm/biz-components/AccordionCards/index.js.map +3 -3
  168. package/dist/esm/biz-components/ActivityMechanism/index.js +1 -1
  169. package/dist/esm/biz-components/ActivityMechanism/index.js.map +3 -3
  170. package/dist/esm/biz-components/ActivitySchedule/index.js +1 -1
  171. package/dist/esm/biz-components/ActivitySchedule/index.js.map +3 -3
  172. package/dist/esm/biz-components/AiuiProvider/index.js +1 -1
  173. package/dist/esm/biz-components/AiuiProvider/index.js.map +3 -3
  174. package/dist/esm/biz-components/AnchorNavigation/index.js +1 -1
  175. package/dist/esm/biz-components/AnchorNavigation/index.js.map +3 -3
  176. package/dist/esm/biz-components/BrandCardLink/BrandCardLink.js +1 -1
  177. package/dist/esm/biz-components/BrandCardLink/BrandCardLink.js.map +3 -3
  178. package/dist/esm/biz-components/Category/SwiperCategory.js +1 -1
  179. package/dist/esm/biz-components/Category/SwiperCategory.js.map +3 -3
  180. package/dist/esm/biz-components/Category/index.js +1 -1
  181. package/dist/esm/biz-components/Category/index.js.map +3 -3
  182. package/dist/esm/biz-components/Evaluate/index.js +1 -1
  183. package/dist/esm/biz-components/Evaluate/index.js.map +3 -3
  184. package/dist/esm/biz-components/EventSchedule/index.js +1 -1
  185. package/dist/esm/biz-components/EventSchedule/index.js.map +3 -3
  186. package/dist/esm/biz-components/Faq/Faq.js +1 -1
  187. package/dist/esm/biz-components/Faq/Faq.js.map +2 -2
  188. package/dist/esm/biz-components/Faq/types.d.ts +0 -1
  189. package/dist/esm/biz-components/FeatureCards/FeatureCards.js +1 -1
  190. package/dist/esm/biz-components/FeatureCards/FeatureCards.js.map +3 -3
  191. package/dist/esm/biz-components/GiftBox/index.js +1 -1
  192. package/dist/esm/biz-components/GiftBox/index.js.map +2 -2
  193. package/dist/esm/biz-components/GiftShelf/index.js +1 -1
  194. package/dist/esm/biz-components/GiftShelf/index.js.map +3 -3
  195. package/dist/esm/biz-components/GiftTierShelf/index.js +1 -1
  196. package/dist/esm/biz-components/GiftTierShelf/index.js.map +3 -3
  197. package/dist/esm/biz-components/Graphic/index.js +1 -1
  198. package/dist/esm/biz-components/Graphic/index.js.map +2 -2
  199. package/dist/esm/biz-components/GraphicOverlay/GraphicOverlay.js +1 -1
  200. package/dist/esm/biz-components/GraphicOverlay/GraphicOverlay.js.map +3 -3
  201. package/dist/esm/biz-components/HeaderNavigation/MobileTextLinksMenu.d.ts +12 -0
  202. package/dist/esm/biz-components/HeaderNavigation/MobileTextLinksMenu.js +2 -0
  203. package/dist/esm/biz-components/HeaderNavigation/MobileTextLinksMenu.js.map +7 -0
  204. package/dist/esm/biz-components/HeaderNavigation/TextLinksDropdown.d.ts +10 -0
  205. package/dist/esm/biz-components/HeaderNavigation/TextLinksDropdown.js +2 -0
  206. package/dist/esm/biz-components/HeaderNavigation/TextLinksDropdown.js.map +7 -0
  207. package/dist/esm/biz-components/HeaderNavigation/index.js +1 -1
  208. package/dist/esm/biz-components/HeaderNavigation/index.js.map +3 -3
  209. package/dist/esm/biz-components/HeaderNavigation/types.d.ts +8 -1
  210. package/dist/esm/biz-components/HeaderNavigation/types.js +1 -1
  211. package/dist/esm/biz-components/HeaderNavigation/types.js.map +2 -2
  212. package/dist/esm/biz-components/HeaderNavigation/withCategory.d.ts +1 -0
  213. package/dist/esm/biz-components/HeaderNavigation/withCategory.js +1 -1
  214. package/dist/esm/biz-components/HeaderNavigation/withCategory.js.map +3 -3
  215. package/dist/esm/biz-components/HeroBanner/HeroBanner.js +1 -1
  216. package/dist/esm/biz-components/HeroBanner/HeroBanner.js.map +3 -3
  217. package/dist/esm/biz-components/HeroBanner/HeroBannerCarousel.js +1 -1
  218. package/dist/esm/biz-components/HeroBanner/HeroBannerCarousel.js.map +3 -3
  219. package/dist/esm/biz-components/HeroBanner/types.d.ts +5 -0
  220. package/dist/esm/biz-components/ImageOverlayShelf/ProductCard.js +1 -1
  221. package/dist/esm/biz-components/ImageOverlayShelf/ProductCard.js.map +2 -2
  222. package/dist/esm/biz-components/ImageWithText/ImageWithText.js +1 -1
  223. package/dist/esm/biz-components/ImageWithText/ImageWithText.js.map +3 -3
  224. package/dist/esm/biz-components/Listing/components/ProductCard/ProductGallery/index.js +1 -1
  225. package/dist/esm/biz-components/Listing/components/ProductCard/ProductGallery/index.js.map +3 -3
  226. package/dist/esm/biz-components/Listing/components/PurchaseBar/ProductActions/index.js +1 -1
  227. package/dist/esm/biz-components/Listing/components/PurchaseBar/ProductActions/index.js.map +3 -3
  228. package/dist/esm/biz-components/Listing/components/PurchaseBar/index.js +1 -1
  229. package/dist/esm/biz-components/Listing/components/PurchaseBar/index.js.map +3 -3
  230. package/dist/esm/biz-components/Listing/components/PurchaseBar/types.d.ts +2 -0
  231. package/dist/esm/biz-components/LotteryShared/ErrorModal.d.ts +4 -0
  232. package/dist/esm/biz-components/LotteryShared/ErrorModal.js.map +2 -2
  233. package/dist/esm/biz-components/LotteryShared/MyRewardsModal.d.ts +13 -13
  234. package/dist/esm/biz-components/LotteryShared/MyRewardsModal.js +1 -1
  235. package/dist/esm/biz-components/LotteryShared/MyRewardsModal.js.map +3 -3
  236. package/dist/esm/biz-components/LotteryShared/types.d.ts +9 -0
  237. package/dist/esm/biz-components/LotteryShared/types.js.map +2 -2
  238. package/dist/esm/biz-components/Marquee/Marquee.d.ts +11 -4
  239. package/dist/esm/biz-components/Marquee/Marquee.js +1 -1
  240. package/dist/esm/biz-components/Marquee/Marquee.js.map +3 -3
  241. package/dist/esm/biz-components/Marquee/index.d.ts +1 -1
  242. package/dist/esm/biz-components/Marquee/index.js +1 -1
  243. package/dist/esm/biz-components/Marquee/index.js.map +3 -3
  244. package/dist/esm/biz-components/Marquee/type.d.ts +22 -4
  245. package/dist/esm/biz-components/Media/index.js +1 -1
  246. package/dist/esm/biz-components/Media/index.js.map +2 -2
  247. package/dist/esm/biz-components/MediaPlayerBase/index.js +1 -1
  248. package/dist/esm/biz-components/MediaPlayerBase/index.js.map +3 -3
  249. package/dist/esm/biz-components/MediaPlayerMulti/index.js +1 -1
  250. package/dist/esm/biz-components/MediaPlayerMulti/index.js.map +3 -3
  251. package/dist/esm/biz-components/MediaTextOverlay/MediaTextOverlay.d.ts +9 -0
  252. package/dist/esm/biz-components/MediaTextOverlay/MediaTextOverlay.js +2 -0
  253. package/dist/esm/biz-components/MediaTextOverlay/MediaTextOverlay.js.map +7 -0
  254. package/dist/esm/biz-components/MediaTextOverlay/index.d.ts +2 -0
  255. package/dist/esm/biz-components/MediaTextOverlay/index.js +2 -0
  256. package/dist/esm/biz-components/MediaTextOverlay/index.js.map +7 -0
  257. package/dist/esm/biz-components/MediaTextOverlay/types.d.ts +24 -0
  258. package/dist/esm/biz-components/MediaTextOverlay/types.js +1 -0
  259. package/dist/esm/biz-components/MediaTextOverlay/types.js.map +7 -0
  260. package/dist/esm/biz-components/MemberEquity/index.js +2 -2
  261. package/dist/esm/biz-components/MemberEquity/index.js.map +3 -3
  262. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js +1 -1
  263. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js.map +3 -3
  264. package/dist/esm/biz-components/NavigationSearch/index.js +2 -2
  265. package/dist/esm/biz-components/NavigationSearch/index.js.map +3 -3
  266. package/dist/esm/biz-components/ProductHero/ProductHero.js +1 -1
  267. package/dist/esm/biz-components/ProductHero/ProductHero.js.map +3 -3
  268. package/dist/esm/biz-components/ProductLottery/types.d.ts +62 -5
  269. package/dist/esm/biz-components/ProductLottery/types.js.map +2 -2
  270. package/dist/esm/biz-components/ProductNav/ProductNav.js +1 -1
  271. package/dist/esm/biz-components/ProductNav/ProductNav.js.map +3 -3
  272. package/dist/esm/biz-components/PromotionalBar/index.js +1 -1
  273. package/dist/esm/biz-components/PromotionalBar/index.js.map +3 -3
  274. package/dist/esm/biz-components/SecondaryBanner/SecondaryBannerCarousel.d.ts +1 -0
  275. package/dist/esm/biz-components/SecondaryBanner/SecondaryBannerCarousel.js +1 -1
  276. package/dist/esm/biz-components/SecondaryBanner/SecondaryBannerCarousel.js.map +3 -3
  277. package/dist/esm/biz-components/SecondaryBanner/index.d.ts +9 -0
  278. package/dist/esm/biz-components/SecondaryBanner/index.js +1 -1
  279. package/dist/esm/biz-components/SecondaryBanner/index.js.map +3 -3
  280. package/dist/esm/biz-components/ShelfDisplay/index.js +1 -1
  281. package/dist/esm/biz-components/ShelfDisplay/index.js.map +2 -2
  282. package/dist/esm/biz-components/ShelfDisplay/shelfDisplay.d.ts +1 -0
  283. package/dist/esm/biz-components/ShelfDisplay/shelfDisplay.js.map +1 -1
  284. package/dist/esm/biz-components/ShelfDisplay/shelfDisplayItem.js +1 -1
  285. package/dist/esm/biz-components/ShelfDisplay/shelfDisplayItem.js.map +3 -3
  286. package/dist/esm/biz-components/Subscribe/index.js +1 -1
  287. package/dist/esm/biz-components/Subscribe/index.js.map +2 -2
  288. package/dist/esm/biz-components/SwiperBox/index.js +1 -1
  289. package/dist/esm/biz-components/SwiperBox/index.js.map +3 -3
  290. package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.js +1 -1
  291. package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.js.map +3 -3
  292. package/dist/esm/biz-components/Title/index.js +1 -1
  293. package/dist/esm/biz-components/Title/index.js.map +3 -3
  294. package/dist/esm/biz-components/WebPushPopup/index.d.ts +44 -0
  295. package/dist/esm/biz-components/WebPushPopup/index.js +2 -0
  296. package/dist/esm/biz-components/WebPushPopup/index.js.map +7 -0
  297. package/dist/esm/biz-components/WheelLottery/index.js +1 -1
  298. package/dist/esm/biz-components/WheelLottery/index.js.map +2 -2
  299. package/dist/esm/biz-components/index.d.ts +6 -0
  300. package/dist/esm/biz-components/index.js +1 -1
  301. package/dist/esm/biz-components/index.js.map +3 -3
  302. package/dist/esm/components/Countdown.js +1 -1
  303. package/dist/esm/components/Countdown.js.map +3 -3
  304. package/dist/esm/components/button.d.ts +4 -0
  305. package/dist/esm/components/button.js +1 -1
  306. package/dist/esm/components/button.js.map +3 -3
  307. package/dist/esm/components/link.js +1 -1
  308. package/dist/esm/components/link.js.map +2 -2
  309. package/dist/esm/helpers/index.d.ts +1 -1
  310. package/dist/esm/helpers/index.js +1 -1
  311. package/dist/esm/helpers/index.js.map +3 -3
  312. package/dist/esm/helpers/isLexicalEmpty.d.ts +5 -0
  313. package/dist/esm/helpers/isLexicalEmpty.js +1 -1
  314. package/dist/esm/helpers/isLexicalEmpty.js.map +3 -3
  315. package/dist/esm/hooks/useEmarsysWebPush.d.ts +111 -0
  316. package/dist/esm/hooks/useEmarsysWebPush.js +2 -0
  317. package/dist/esm/hooks/useEmarsysWebPush.js.map +7 -0
  318. package/dist/esm/hooks/useProductListTrack.d.ts +43 -0
  319. package/dist/esm/hooks/useProductListTrack.js +2 -0
  320. package/dist/esm/hooks/useProductListTrack.js.map +7 -0
  321. package/package.json +1 -1
  322. package/style.css +143 -11
  323. package/tailwind.config.js +10 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/LotteryShared/MyRewardsModal.tsx"],
4
- "sourcesContent": ["/**\n * MyRewardsModal - \u6211\u7684\u5956\u52B1\u5F39\u7A97\u7EC4\u4EF6\n *\n * \u5C55\u793A\u7528\u6237\u5DF2\u83B7\u5F97\u7684\u5956\u52B1\u5217\u8868\n *\n * @module MyRewardsModal\n * @date 2026-01-04\n */\n\n'use client'\n\nimport React, { useState, useRef, useEffect } from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { BaseModal } from './BaseModal.js'\n\nexport type RewardStatus = 'Available' | 'Expired' | 'Used'\n\nexport interface Reward {\n /**\n * \u5956\u52B1 ID\n */\n id: string\n\n /**\n * \u5956\u52B1\u540D\u79F0\n */\n name: string\n\n /**\n * \u4F18\u60E0\u7801\uFF08\u53EF\u9009\uFF09\n */\n code?: string\n\n /**\n * \u72B6\u6001\n */\n status: RewardStatus\n\n /**\n * \u5956\u52B1\u65F6\u95F4\n */\n prizeTime?: string\n\n /**\n * \u662F\u5426\u53EF\u590D\u5236\u7801\n */\n showCopyCode?: boolean\n\n /**\n * \u6BCF\u5956\u52B1\u53EF\u914D\u7F6E\u7684\u663E\u793A\u6587\u6848\uFF08\u8986\u76D6\u5168\u5C40 statusLabel \u6620\u5C04\uFF09\n * @optional\n */\n statusText?: string\n\n /** * \u662F\u5426\u53EF\u7528\n */\n available?: boolean\n}\n\nexport interface MyRewardsModalProps {\n /**\n * \u662F\u5426\u663E\u793A\u5F39\u7A97\n */\n isOpen: boolean\n\n /**\n * \u5173\u95ED\u5F39\u7A97\u56DE\u8C03\n */\n onClose: () => void\n\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"My Rewards\"\n */\n title?: string\n\n /**\n * \u5956\u52B1\u5217\u8868\n */\n rewards: Reward[]\n\n /**\n * \u590D\u5236\u7801\u70B9\u51FB\u56DE\u8C03\n */\n onCopyCode?: (code: string) => void\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n\n /**\n * \u4EE3\u7801\u6587\u672C\u524D\u7F00\n * @default \"CODE:\"\n */\n codeText?: string\n\n /**\n * \u590D\u5236\u6309\u94AE\u6587\u672C\n * @default \"COPY\"\n */\n copyText?: string\n\n /**\n * \u590D\u5236\u6210\u529F\u540E\u7684\u6309\u94AE\u6587\u672C\n * @default \"COPIED\"\n */\n copiedText?: string\n\n /**\n * \u5956\u52B1\u65F6\u95F4\u6587\u672C\u524D\u7F00\n * @default \"Prize time:\"\n */\n prizeText?: string\n\n /**\n * \u7A7A\u72B6\u6001\u6587\u6848\n * @default \"No rewards yet\"\n */\n emptyText?: string\n\n /**\n * \u590D\u5236\u5931\u8D25\u63D0\u793A\u6587\u6848\n * @optional\n */\n copyError?: string\n\n /**\n * \u53EF\u7528\u72B6\u6001\u6587\u6848\n * @default \"Available\"\n * @optional\n */\n availableText?: string\n\n /**\n * \u5DF2\u4F7F\u7528\u72B6\u6001\u6587\u6848\n * @default \"Used\"\n * @optional\n */\n usedStatusText?: string\n\n /**\n * \u5DF2\u8FC7\u671F\u72B6\u6001\u6587\u6848\n * @default \"Expired\"\n * @optional\n */\n expiredText?: string\n\n /**\n * \u672A\u77E5\u72B6\u6001\u6587\u6848\n * @optional\n */\n notFoundText?: string\n\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @default 'light'\n */\n theme?: 'light' | 'dark'\n}\n\n/**\n * MyRewardsModal \u6211\u7684\u5956\u52B1\u5F39\u7A97\u7EC4\u4EF6\n */\nexport const MyRewardsModal: React.FC<MyRewardsModalProps> = ({\n isOpen,\n onClose,\n title = 'My Rewards',\n rewards,\n onCopyCode,\n className,\n codeText = 'CODE:',\n copyText = 'COPY',\n copiedText = 'COPIED',\n prizeText = 'Prize time:',\n emptyText = 'No rewards yet',\n copyError,\n availableText = 'Available',\n usedStatusText = 'Used',\n expiredText = 'Expired',\n notFoundText,\n theme = 'light',\n}) => {\n const getStatusLabel = (status: RewardStatus): string => {\n switch (status) {\n case 'Available':\n return availableText\n case 'Used':\n return usedStatusText\n case 'Expired':\n return expiredText\n default:\n return notFoundText ?? (status as string)\n }\n }\n\n // \u8FFD\u8E2A\u6BCF\u4E2A\u5956\u52B1\u7684\u590D\u5236\u72B6\u6001\n const [copiedStates, setCopiedStates] = useState<Record<string, boolean>>({})\n const [copyErrorStates, setCopyErrorStates] = useState<Record<string, boolean>>({})\n const timersRef = useRef<Record<string, NodeJS.Timeout>>({})\n\n // \u6E05\u7406\u6240\u6709\u5B9A\u65F6\u5668\n useEffect(() => {\n return () => {\n Object.values(timersRef.current).forEach(timer => clearTimeout(timer))\n }\n }, [])\n\n // \u5904\u7406\u590D\u5236\u64CD\u4F5C\n const handleCopy = async (rewardId: string, code: string) => {\n // \u6E05\u9664\u8BE5\u5956\u52B1\u7684\u73B0\u6709\u5B9A\u65F6\u5668\n if (timersRef.current[rewardId]) {\n clearTimeout(timersRef.current[rewardId])\n }\n\n try {\n await navigator.clipboard.writeText(code)\n // \u8C03\u7528\u590D\u5236\u56DE\u8C03\n onCopyCode?.(code)\n\n // \u8BBE\u7F6E\u4E3A\u5DF2\u590D\u5236\u72B6\u6001\n setCopiedStates(prev => ({ ...prev, [rewardId]: true }))\n setCopyErrorStates(prev => ({ ...prev, [rewardId]: false }))\n\n // 3\u79D2\u540E\u6062\u590D\n timersRef.current[rewardId] = setTimeout(() => {\n setCopiedStates(prev => ({ ...prev, [rewardId]: false }))\n delete timersRef.current[rewardId]\n }, 3000)\n } catch {\n // \u590D\u5236\u5931\u8D25\uFF0C\u663E\u793A\u9519\u8BEF\u72B6\u6001\n setCopyErrorStates(prev => ({ ...prev, [rewardId]: true }))\n setCopiedStates(prev => ({ ...prev, [rewardId]: false }))\n\n // 3\u79D2\u540E\u6062\u590D\n timersRef.current[rewardId] = setTimeout(() => {\n setCopyErrorStates(prev => ({ ...prev, [rewardId]: false }))\n delete timersRef.current[rewardId]\n }, 3000)\n }\n }\n\n return (\n <BaseModal\n isOpen={isOpen}\n onClose={onClose}\n maxWidth=\"max-w-[480px] laptop:max-w-[520px]\"\n background=\"bg-white\"\n className={className}\n title={title}\n ariaLabelledBy=\"rewards-modal-title\"\n theme={theme}\n >\n <div className=\"laptop:px-8 laptop:pb-8 p-4\">\n {/* \u5956\u52B1\u5217\u8868 */}\n <div className=\"flex max-h-[584px] flex-col gap-2 overflow-y-auto\">\n {rewards.length === 0 ? (\n <p className=\"py-8 text-center text-[14px] text-gray-500\">{emptyText}</p>\n ) : (\n rewards.map(reward => (\n <div\n key={reward.id}\n className={cn(\n 'rounded-box',\n 'bg-container-secondary-0 relative flex-none overflow-hidden',\n 'px-4 py-6'\n )}\n >\n <div className=\"tablet:text-[16px] tablet:flex items-center justify-between gap-2 text-[14px] font-[700]\">\n <div className=\"flex-1\">\n <p\n className={cn(\n 'mb-1 font-[700]',\n reward?.available ? 'text-info-primary' : 'text-info-quaternary'\n )}\n >\n {reward.name}\n </p>\n {reward.code && (\n <div\n className={cn(\n 'flex items-center gap-2',\n reward?.available ? 'text-brand-0' : 'text-info-quaternary'\n )}\n >\n <p className=\"max-w-[200px] truncate\">\n {codeText} {reward.code}\n </p>\n {reward.showCopyCode && reward?.available && (\n <button onClick={() => handleCopy(reward.id, reward.code!)} className=\"underline\">\n {copyErrorStates[reward.id]\n ? (copyError ?? 'Copy failed')\n : copiedStates[reward.id]\n ? copiedText\n : copyText}\n </button>\n )}\n </div>\n )}\n </div>\n\n {reward.prizeTime && (\n <div className={cn('tablet:block text-info-quaternary flex gap-1 text-[14px] font-[700]')}>\n <p>{prizeText}</p>\n <p>{reward.prizeTime}</p>\n </div>\n )}\n\n {/* \u72B6\u6001\u6807\u7B7E */}\n <span\n className={cn(\n 'rounded-[0_8px] px-[6px] text-[14px] font-[700]',\n 'absolute right-0 top-0',\n reward?.available ? 'bg-brand-0 text-info-white' : 'bg-info-quaternary text-info-white'\n )}\n >\n {reward.statusText ?? getStatusLabel(reward.status)}\n </span>\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n </BaseModal>\n )\n}\n\nexport default MyRewardsModal\n"],
5
- "mappings": "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",
6
- "names": ["MyRewardsModal_exports", "__export", "MyRewardsModal", "MyRewardsModal_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_helpers", "import_BaseModal", "isOpen", "onClose", "title", "rewards", "onCopyCode", "className", "codeText", "copyText", "copiedText", "prizeText", "emptyText", "copyError", "availableText", "usedStatusText", "expiredText", "notFoundText", "theme", "getStatusLabel", "status", "copiedStates", "setCopiedStates", "copyErrorStates", "setCopyErrorStates", "timersRef", "timer", "handleCopy", "rewardId", "code", "prev", "reward"]
4
+ "sourcesContent": ["/**\n * MyRewardsModal - \u6211\u7684\u5956\u52B1\u5F39\u7A97\u7EC4\u4EF6\n *\n * \u5C55\u793A\u7528\u6237\u5DF2\u83B7\u5F97\u7684\u5956\u52B1\u5217\u8868\n *\n * @module MyRewardsModal\n * @date 2026-01-04\n */\n\n'use client'\n\nimport React, { useState, useRef, useEffect } from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { BaseModal } from './BaseModal.js'\n\nexport type RewardStatus = 'Available' | 'Expired' | 'Used'\n\nexport interface Reward {\n /**\n * \u5956\u52B1 ID\n */\n id: string\n\n /**\n * \u5956\u52B1\u540D\u79F0\n */\n name: string\n\n /**\n * \u4F18\u60E0\u7801\uFF08\u53EF\u9009\uFF09\n */\n code?: string\n\n /**\n * \u72B6\u6001\n */\n status: RewardStatus\n\n /**\n * \u5956\u52B1\u65F6\u95F4\n */\n prizeTime?: string\n\n /**\n * \u662F\u5426\u53EF\u590D\u5236\u7801\n */\n showCopyCode?: boolean\n\n /**\n * \u6BCF\u5956\u52B1\u53EF\u914D\u7F6E\u7684\u663E\u793A\u6587\u6848\uFF08\u8986\u76D6\u5168\u5C40 statusLabel \u6620\u5C04\uFF09\n * @optional\n */\n statusText?: string\n\n /** * \u662F\u5426\u53EF\u7528\n */\n available?: boolean\n}\n\nexport interface MyRewardsModalProps {\n /**\n * \u662F\u5426\u663E\u793A\u5F39\u7A97\n */\n isOpen: boolean\n\n /**\n * \u5173\u95ED\u5F39\u7A97\u56DE\u8C03\n */\n onClose: () => void\n\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"My Rewards\"\n */\n title?: string\n\n /**\n * \u5956\u52B1\u5217\u8868\n */\n rewards: Reward[]\n\n /**\n * \u590D\u5236\u7801\u70B9\u51FB\u56DE\u8C03\n */\n onCopyCode?: (code: string) => void\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n\n /**\n * \u4EE3\u7801\u6587\u672C\u524D\u7F00\n * @default \"CODE:\"\n */\n codeText?: string\n\n /**\n * \u590D\u5236\u6309\u94AE\u6587\u672C\n * @default \"COPY\"\n */\n copyText?: string\n\n /**\n * \u590D\u5236\u6210\u529F\u540E\u7684\u6309\u94AE\u6587\u672C\n * @default \"COPIED\"\n */\n copiedText?: string\n\n /**\n * \u5956\u52B1\u65F6\u95F4\u6587\u672C\u524D\u7F00\n * @default \"Prize time:\"\n */\n prizeText?: string\n\n /**\n * \u7A7A\u72B6\u6001\u6587\u6848\n * @default \"No rewards yet\"\n */\n emptyText?: string\n\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @default 'light'\n */\n theme?: 'light' | 'dark'\n\n /**\n * \u590D\u5236\u5931\u8D25\u63D0\u793A\u6587\u6848\uFF08\u6765\u81EA CMS myRewardsModalConfig.copyError\uFF09\n * @optional\n */\n copyError?: string\n\n /**\n * \u53EF\u7528\u72B6\u6001\u6807\u7B7E\u6587\u6848\uFF08\u6765\u81EA CMS myRewardsModalConfig.availableText\uFF09\n * @default 'Available'\n * @optional\n */\n availableText?: string\n\n /**\n * \u5DF2\u4F7F\u7528\u72B6\u6001\u6807\u7B7E\u6587\u6848\uFF08\u6765\u81EA CMS myRewardsModalConfig.usedStatusText\uFF09\n * @default 'Used'\n * @optional\n */\n usedStatusText?: string\n\n /**\n * \u5DF2\u8FC7\u671F\u72B6\u6001\u6807\u7B7E\u6587\u6848\uFF08\u6765\u81EA CMS myRewardsModalConfig.expiredText\uFF09\n * @default 'Expired'\n * @optional\n */\n expiredText?: string\n\n /**\n * \u672A\u627E\u5230\u72B6\u6001\u6807\u7B7E\u6587\u6848\uFF08\u6765\u81EA CMS myRewardsModalConfig.notFoundText\uFF09\n * @optional\n */\n notFoundText?: string\n}\n\n/**\n * MyRewardsModal \u6211\u7684\u5956\u52B1\u5F39\u7A97\u7EC4\u4EF6\n */\nexport const MyRewardsModal: React.FC<MyRewardsModalProps> = ({\n isOpen,\n onClose,\n title = 'My Rewards',\n rewards,\n onCopyCode,\n className,\n codeText = 'CODE:',\n copyText = 'COPY',\n copiedText = 'COPIED',\n prizeText = 'Prize time:',\n emptyText = 'No rewards yet',\n copyError,\n availableText = 'Available',\n usedStatusText = 'Used',\n expiredText = 'Expired',\n notFoundText,\n theme = 'light',\n}) => {\n // \u8FFD\u8E2A\u6BCF\u4E2A\u5956\u52B1\u7684\u590D\u5236\u72B6\u6001\n const [copiedStates, setCopiedStates] = useState<Record<string, boolean>>({})\n // \u8FFD\u8E2A\u590D\u5236\u5931\u8D25\u72B6\u6001\uFF0C\u7528\u4E8E\u663E\u793A copyError \u6587\u6848\n const [copyErrorStates, setCopyErrorStates] = useState<Record<string, boolean>>({})\n const timersRef = useRef<Record<string, NodeJS.Timeout>>({})\n\n // \u6E05\u7406\u6240\u6709\u5B9A\u65F6\u5668\n useEffect(() => {\n return () => {\n Object.values(timersRef.current).forEach(timer => clearTimeout(timer))\n }\n }, [])\n\n // \u5904\u7406\u590D\u5236\u64CD\u4F5C\n const handleCopy = async (rewardId: string, code: string) => {\n // \u6E05\u9664\u8BE5\u5956\u52B1\u7684\u73B0\u6709\u5B9A\u65F6\u5668\n if (timersRef.current[rewardId]) {\n clearTimeout(timersRef.current[rewardId])\n }\n\n try {\n await navigator.clipboard.writeText(code)\n // \u8C03\u7528\u590D\u5236\u56DE\u8C03\n onCopyCode?.(code)\n\n // \u8BBE\u7F6E\u4E3A\u5DF2\u590D\u5236\u72B6\u6001\n setCopiedStates(prev => ({ ...prev, [rewardId]: true }))\n setCopyErrorStates(prev => ({ ...prev, [rewardId]: false }))\n\n // 3\u79D2\u540E\u6062\u590D\n timersRef.current[rewardId] = setTimeout(() => {\n setCopiedStates(prev => ({ ...prev, [rewardId]: false }))\n delete timersRef.current[rewardId]\n }, 3000)\n } catch {\n // \u590D\u5236\u5931\u8D25\uFF0C\u663E\u793A\u9519\u8BEF\u72B6\u6001\n setCopyErrorStates(prev => ({ ...prev, [rewardId]: true }))\n setCopiedStates(prev => ({ ...prev, [rewardId]: false }))\n\n // 3\u79D2\u540E\u6062\u590D\n timersRef.current[rewardId] = setTimeout(() => {\n setCopyErrorStates(prev => ({ ...prev, [rewardId]: false }))\n delete timersRef.current[rewardId]\n }, 3000)\n }\n }\n\n // \u72B6\u6001\u6807\u7B7E\u6620\u5C04 - \u4F7F\u7528\u53EF\u914D\u7F6E\u6587\u6848\uFF0C\u9ED8\u8BA4\u56DE\u9000\u5230\u539F\u59CB status \u5B57\u7B26\u4E32\n const getStatusLabel = (status: RewardStatus): string => {\n switch (status) {\n case 'Available':\n return availableText ?? status\n case 'Used':\n return usedStatusText ?? status\n case 'Expired':\n return expiredText ?? status\n default:\n return notFoundText ?? (status as string)\n }\n }\n\n return (\n <BaseModal\n isOpen={isOpen}\n onClose={onClose}\n maxWidth=\"max-w-[480px] laptop:max-w-[520px]\"\n background=\"bg-white\"\n className={className}\n title={title}\n ariaLabelledBy=\"rewards-modal-title\"\n theme={theme}\n >\n <div className=\"laptop:px-8 laptop:pb-8 p-4\">\n {/* \u5956\u52B1\u5217\u8868 */}\n <div className=\"flex max-h-[584px] flex-col gap-2 overflow-y-auto\">\n {rewards.length === 0 ? (\n <p className=\"py-8 text-center text-[14px] text-gray-500\">{emptyText}</p>\n ) : (\n rewards.map(reward => (\n <div\n key={reward.id}\n className={cn(\n 'rounded-box',\n 'bg-container-secondary-0 relative flex-none overflow-hidden',\n 'px-4 py-6'\n )}\n >\n <div className=\"tablet:text-[16px] tablet:flex items-center justify-between gap-2 text-[14px] font-[700]\">\n <div className=\"flex-1\">\n <p\n className={cn(\n 'mb-1 font-[700]',\n reward?.available ? 'text-info-primary' : 'text-info-quaternary'\n )}\n >\n {reward.name}\n </p>\n {reward.code && (\n <div\n className={cn(\n 'flex items-center gap-2',\n reward?.available ? 'text-brand-0' : 'text-info-quaternary'\n )}\n >\n <p className=\"max-w-[200px] truncate\">\n {codeText} {reward.code}\n </p>\n {reward.showCopyCode && reward?.available && (\n <button onClick={() => handleCopy(reward.id, reward.code!)} className=\"underline\">\n {copyErrorStates[reward.id]\n ? (copyError ?? 'Copy failed')\n : copiedStates[reward.id]\n ? copiedText\n : copyText}\n </button>\n )}\n </div>\n )}\n </div>\n\n {reward.prizeTime && (\n <div className={cn('tablet:block text-info-quaternary flex gap-1 text-[14px] font-[700]')}>\n <p>{prizeText}</p>\n <p>{reward.prizeTime}</p>\n </div>\n )}\n\n {/* \u72B6\u6001\u6807\u7B7E */}\n <span\n className={cn(\n 'rounded-[0_8px] px-[6px] text-[14px] font-[700]',\n 'absolute right-0 top-0',\n reward?.available ? 'bg-brand-0 text-info-white' : 'bg-info-quaternary text-info-white'\n )}\n >\n {reward.statusText ?? getStatusLabel(reward.status)}\n </span>\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n </BaseModal>\n )\n}\n\nexport default MyRewardsModal\n"],
5
+ "mappings": "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",
6
+ "names": ["MyRewardsModal_exports", "__export", "MyRewardsModal", "MyRewardsModal_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_helpers", "import_BaseModal", "isOpen", "onClose", "title", "rewards", "onCopyCode", "className", "codeText", "copyText", "copiedText", "prizeText", "emptyText", "copyError", "availableText", "usedStatusText", "expiredText", "notFoundText", "theme", "copiedStates", "setCopiedStates", "copyErrorStates", "setCopyErrorStates", "timersRef", "timer", "handleCopy", "rewardId", "code", "prev", "getStatusLabel", "status", "reward"]
7
7
  }
@@ -587,6 +587,15 @@ export interface ErrorModalConfig {
587
587
  }
588
588
  /**
589
589
  * 未中奖 / Try Again 弹窗配置(来自 CMS tryAgain group)
590
+ *
591
+ * @example
592
+ * ```tsx
593
+ * const tryAgainConfig: TryAgainConfig = {
594
+ * title: 'Better Luck Next Time!',
595
+ * message: "Don't give up! You still have more chances to win.",
596
+ * confirmText: 'Try Again'
597
+ * }
598
+ * ```
590
599
  */
591
600
  export interface TryAgainConfig {
592
601
  /** 未中奖弹窗标题 @optional */
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/LotteryShared/types.ts"],
4
- "sourcesContent": ["/**\n * \u62BD\u5956\u7EC4\u4EF6\u5171\u4EAB\u7C7B\u578B\u5B9A\u4E49\n *\n * \u5305\u542B\u6240\u6709\u62BD\u5956\u7EC4\u4EF6\uFF08WheelLottery, ProductLottery \u7B49\uFF09\u5171\u7528\u7684\u7C7B\u578B\u3001\u63A5\u53E3\u548C\u5E38\u91CF\u3002\n *\n * @module LotterySharedTypes\n * @date 2026-04-07\n */\n\nimport type { Theme, Img } from '../../types/props.js'\nimport type { SerializedEditorState, SerializedLexicalNode } from '@payloadcms/richtext-lexical/lexical'\n\n// Re-export Theme and Img for convenience\nexport type { Theme, Img }\n\n// ============================================================================\n// \u6838\u5FC3\u5B9E\u4F53\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u5956\u54C1\uFF08Prize\uFF09\n *\n * \u4EE3\u8868\u62BD\u5956\u6D3B\u52A8\u4E2D\u7684\u4E00\u4E2A\u5956\u54C1\uFF0C\u5305\u542B\u663E\u793A\u6240\u9700\u7684\u6240\u6709\u4FE1\u606F\u3002\n *\n * @example\n * ```tsx\n * const prize: Prize = {\n * prizeKey: 'prize-001',\n * name: 'Anker Prime Charger (100W, 3 Ports, GaN)',\n * image: { url: 'https://images.unsplash.com/photo-123', alt: 'Charger' },\n * rank: '1st',\n * price: '$79.99'\n * }\n * ```\n */\nexport interface Prize {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\uFF0C\u7528\u4E8E React key \u548C\u4E2D\u5956\u7ED3\u679C\u5339\u914D\n */\n prizeKey: string\n\n /**\n * \u5956\u54C1\u540D\u79F0\uFF0C\u663E\u793A\u5728\u8F6C\u76D8\u548C\u5956\u6C60\u4E2D\n * @maxLength 100\n */\n name: string\n\n /**\n * \u5956\u54C1\u56FE\u7247\u5BF9\u8C61\uFF0C\u5305\u542B url \u548C alt\n */\n image: Img\n\n /**\n * \u6392\u540D\u6807\u8BC6\uFF0C\u4EC5\u5728 Prize Pool \u4E2D\u663E\u793A\n * @optional\n */\n rank?: '1st' | '2nd' | '3rd'\n\n /**\n * \u4EF7\u683C\u6216\u6298\u6263\u4FE1\u606F\uFF0C\u663E\u793A\u5728\u5956\u6C60\u4E2D\n * @example \"$99.99\" | \"12% Off\"\n * @optional\n */\n price?: string\n\n /** \u5956\u54C1\u7EF4\u5EA6\u7684\u4E2D\u5956\u5F39\u7A97\u8986\u76D6\u914D\u7F6E\uFF1B\u672A\u914D\u7F6E\u65F6\u7531\u63A5\u5165\u5C42\u56DE\u9000\u5230\u5168\u5C40\u914D\u7F6E */\n winnerModalConfig?: {\n winnerNote?: string\n confirmText?: string\n confirmUrl?: string\n learnMoreUrl?: string\n learnMoreText?: string\n }\n}\n\n/**\n * \u4E2D\u5956\u4FE1\u606F\uFF08WinningInfo\uFF09\n *\n * \u4EE3\u8868\u4E00\u6761\u4E2D\u5956\u8BB0\u5F55\uFF0C\u7528\u4E8E\u5E95\u90E8\u6EDA\u52A8\u6761\u5C55\u793A\uFF0C\u8425\u9020\u6D3B\u52A8\u6C1B\u56F4\u3002\n *\n * @example\n * ```tsx\n * const winningInfo: WinningInfo = {\n * winningKey: 'win-001',\n * userName: 'Shuqi***',\n * prizeName: '12% Off Discount',\n * timestamp: 1702800000000\n * }\n * ```\n */\nexport interface WinningInfo {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\n */\n winningKey: string\n\n /**\n * \u7528\u6237\u540D\uFF08\u5DF2\u8131\u654F\uFF09\uFF0C\u5982 \"Shuqi***\"\n * @note \u5047\u8BBE\u4F20\u5165\u7684\u7528\u6237\u540D\u5DF2\u7ECF\u8FC7\u8131\u654F\u5904\u7406\uFF0C\u7EC4\u4EF6\u5185\u90E8\u4E0D\u518D\u5904\u7406\n */\n userName: string\n\n /**\n * \u4E2D\u5956\u5956\u54C1\u540D\u79F0\n */\n prizeName: string\n\n /**\n * \u4E2D\u5956\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n * @optional\n */\n timestamp?: number\n}\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u7C7B\u578B\n */\nexport type ChanceMethodType = 'share' | 'points' | 'refer' | string\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u72B6\u6001\n */\nexport type ChanceMethodStatus = 'pending' | 'completed' | 'used'\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\uFF08ChanceMethod\uFF09\n *\n * \u4EE3\u8868\u4E00\u79CD\u83B7\u53D6\u62BD\u5956\u673A\u4F1A\u7684\u65B9\u5F0F\uFF0C\u652F\u6301\u7075\u6D3B\u914D\u7F6E\uFF08\u5206\u4EAB\u3001\u79EF\u5206\u3001\u63A8\u8350\u7B49\uFF09\u3002\n *\n * @example\n * ```tsx\n * const chanceMethod: ChanceMethod = {\n * methodKey: 'share-001',\n * type: 'share',\n * title: 'Share on your socials',\n * description: 'Share this event on your social media',\n * buttonText: 'Redeem now',\n * onClick: () => console.log('Share clicked'),\n * disabled: false,\n * status: 'pending'\n * }\n * ```\n */\nexport interface ChanceMethod {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\n */\n methodKey: string\n\n /**\n * \u65B9\u5F0F\u7C7B\u578B\uFF0C\u652F\u6301\u9884\u5B9A\u4E49\u7C7B\u578B\uFF08'share', 'points', 'refer'\uFF09\u6216\u81EA\u5B9A\u4E49\u7C7B\u578B\n */\n type: ChanceMethodType\n\n /**\n * \u65B9\u5F0F\u6807\u9898\uFF0C\u5982 \"Share on your socials\"\n */\n title: string\n\n /**\n * \u8BE6\u7EC6\u8BF4\u660E\u6587\u5B57\n */\n description: string\n\n /**\n * \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 \"Redeem now\"\n * @default \"Redeem now\"\n * @optional\n */\n buttonText?: string\n\n completed?: string\n\n used?: string\n\n /**\n * \u672A\u767B\u5F55\u65F6\u70B9\u51FB GO \u6309\u94AE\u7684\u56DE\u8C03\n * @example\n * ```tsx\n * onLoginRequired={() => {\n * // \u6253\u5F00\u767B\u5F55\u5F39\u7A97\u6216\u8DF3\u8F6C\u767B\u5F55\u9875\n * router.push('/login')\n * }}\n * ```\n */\n onLoginRequired?: () => void\n\n /**\n * \u70B9\u51FB\u6309\u94AE\u65F6\u7684\u56DE\u8C03\u51FD\u6570\n * @note \u4E1A\u52A1\u903B\u8F91\uFF08\u5982\u79EF\u5206\u6263\u9664\u3001\u5206\u4EAB\u9A8C\u8BC1\uFF09\u7531\u7236\u7EC4\u4EF6\u5904\u7406\n */\n onClick: () => void\n\n /**\n * \u662F\u5426\u7981\u7528\u8BE5\u65B9\u5F0F\n * @default false\n * @optional\n */\n disabled?: boolean\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u7684\u72B6\u6001\n * - pending: \u672A\u5B8C\u6210\uFF08\u9ED8\u8BA4\u72B6\u6001\uFF09\n * - completed: \u5DF2\u5B8C\u6210/\u5DF2\u83B7\u5F97\n * - used: \u5DF2\u4F7F\u7528\n * @default \"pending\"\n * @optional\n */\n status?: ChanceMethodStatus\n\n /**\n * \u662F\u5426\u663E\u793A\u52A0\u8F7D\u72B6\u6001\n * @default false\n * @optional\n */\n loading?: boolean\n\n /**\n * \u662F\u5426\u5728\u70B9\u51FB\u65F6\u6253\u5F00\u5206\u4EAB\u5F39\u7A97\n * @default false\n * @optional\n */\n openShareModal?: boolean\n}\n\n/**\n * \u7528\u6237\u6570\u636E\uFF08UserData\uFF09\n *\n * \u4EE3\u8868\u5F53\u524D\u7528\u6237\u7684\u62BD\u5956\u76F8\u5173\u6570\u636E\n *\n * @example\n * ```tsx\n * const userData: UserData = {\n * isLoggedIn: true,\n * availableChances: 3,\n * wonPrizes: [\n * { id: 'prize-001', name: 'Charger', image: 'https://...', timestamp: 1702800000000 }\n * ]\n * }\n * ```\n */\nexport interface UserData {\n /**\n * \u7528\u6237\u662F\u5426\u5DF2\u767B\u5F55\n */\n isLoggedIn: boolean\n\n /**\n * \u5F53\u524D\u53EF\u4F7F\u7528\u7684\u62BD\u5956\u6B21\u6570\n * @default 0\n */\n availableChances: number\n\n /**\n * \u603B\u673A\u4F1A\u6570\uFF08\u7528\u4E8E\u663E\u793A\u8FDB\u5EA6\uFF0C\u4F8B\u5982 \"3/5\"\uFF09\n * @default undefined\n * @optional\n */\n totalChances?: number\n\n /**\n * \u5DF2\u83B7\u5F97\u7684\u5956\u54C1\u5217\u8868\n * @optional\n */\n wonPrizes?: Array<Prize & { timestamp?: number }>\n\n /** * \u7528\u6237\u7535\u5B50\u90AE\u7BB1\uFF08\u53EF\u9009\uFF0C\u7528\u4E8E\u53D1\u9001\u4E2D\u5956\u901A\u77E5\u7B49\uFF09\n * @optional\n */\n email?: string\n\n /**\n * \u673A\u4F1A\u6570\u636E\u662F\u5426\u6B63\u5728\u52A0\u8F7D\u4E2D\n * @optional\n */\n isChancesLoading?: boolean\n}\n\n/**\n * \u7F13\u52A8\u51FD\u6570\u7C7B\u578B\n */\nexport type EasingFunction = 'ease-out' | 'ease-in-out' | 'linear'\n\n// ============================================================================\n// \u516C\u5171\u6587\u6848\u914D\u7F6E\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u590D\u5236\u64CD\u4F5C\u76F8\u5173\u6587\u6848\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n * \u7528\u4E8E\u6240\u6709\u5305\u542B\u590D\u5236\u529F\u80FD\u7684\u7EC4\u4EF6\n */\nexport interface CopyTextConfig {\n /**\n * \u590D\u5236\u6309\u94AE\u6587\u672C\n * @default \"COPY\"\n */\n copyText?: string\n\n /**\n * \u590D\u5236\u6210\u529F\u540E\u7684\u6309\u94AE\u6587\u672C\n * @default \"COPIED\"\n */\n copiedText?: string\n}\n\n/**\n * \u4F18\u60E0\u7801\u76F8\u5173\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n * \u7528\u4E8E\u6240\u6709\u5C55\u793A\u4F18\u60E0\u7801\u7684\u7EC4\u4EF6\n */\nexport interface CouponConfig {\n /**\n * \u4EE3\u7801\u6587\u672C\u524D\u7F00\n * @default \"CODE:\"\n */\n codeText?: string\n\n /**\n * \u4F18\u60E0\u7801\n */\n couponCode?: string\n\n /**\n * \u4F18\u60E0\u7801\u8FC7\u671F\u65F6\u95F4\n */\n expiresAt?: string\n\n /**\n * \u6709\u6548\u671F\u6807\u7B7E\u6587\u6848\n * @default \"Valid until:\"\n */\n expiresAtLabel?: string\n\n /**\n * \u4F18\u60E0\u5238\u6298\u6263\u6587\u672C\uFF08\u4F8B\u5982 \"20%\"\uFF09\n */\n couponDiscount?: string\n\n /**\n * \u4F18\u60E0\u5238\u5355\u4F4D\u6587\u672C\n * @default \"Off\"\n */\n couponUnit?: string\n}\n\n/**\n * \u5956\u52B1\u65F6\u95F4\u6587\u6848\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n */\nexport interface PrizeTimeTextConfig {\n /**\n * \u5956\u52B1\u65F6\u95F4\u6587\u672C\u524D\u7F00\n * @default \"Prize time:\"\n */\n prizeText?: string\n}\n\n/**\n * \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08WinnerModalConfig\uFF09\n *\n * \u7528\u4E8E\u914D\u7F6E\u4E2D\u5956\u5F39\u7A97\u7684\u5C55\u793A\u5185\u5BB9\uFF0C\u901A\u5E38\u7531\u62BD\u5956\u63A5\u53E3\u8FD4\u56DE\u63D0\u4F9B\n *\n * @example\n * ```tsx\n * const winnerModalConfig: WinnerModalConfig = {\n * title: 'Congratulations!',\n * prizeTitle: 'Anker Prime Charger',\n * prizeImage: 'https://...',\n * prizeDescription: 'High-speed charging for all your devices',\n * learnMoreUrl: 'https://...',\n * learnMoreText: 'View Details',\n * couponCode: 'ANKER2024',\n * expiresAt: '2024-12-31',\n * couponDiscount: '20%',\n * couponUnit: 'Off',\n * confirmText: 'Claim Now'\n * }\n * ```\n */\nexport interface WinnerModalConfig extends CopyTextConfig, CouponConfig, PrizeTimeTextConfig {\n /**\n * \u4E2D\u5956\u5F39\u7A97\u6807\u9898\n * @default \"You Have Won\"\n * @optional\n */\n title?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u6807\u9898\uFF08\u4F18\u5148\u7EA7\u9AD8\u4E8E prize.name\uFF09\n * @optional\n */\n prizeTitle?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u56FE\u7247 URL\uFF08\u4F18\u5148\u7EA7\u9AD8\u4E8E prize.image\uFF09\n * @optional\n */\n prizeImage?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u8BE6\u60C5\u63CF\u8FF0\n * @deprecated \u8BED\u4E49\u4E0D\u660E\u786E\uFF0C\u8BF7\u6539\u7528 `winnerNote`\uFF08code/copy \u4E0B\u65B9\u4E13\u7528\u8BF4\u660E\u6587\u5B57\uFF09\n * @optional\n */\n prizeDescription?: string\n\n /**\n * code/copy \u533A\u57DF\u6B63\u4E0B\u65B9\u7684\u4E13\u7528\u8BF4\u660E\u6587\u5B57\u3002\n * \u4EC5\u5728\u660E\u786E\u914D\u7F6E\u65F6\u5C55\u793A\uFF1B\u672A\u914D\u7F6E\u65F6\u4E0D\u6E32\u67D3\u4EFB\u4F55\u5185\u5BB9\u3002\n * \u4F18\u5148\u7EA7\u9AD8\u4E8E `prizeDescription`\u3002\n * @optional\n */\n winnerNote?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97 Learn More \u94FE\u63A5\n * @optional\n */\n learnMoreUrl?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97 Learn More \u6309\u94AE\u6587\u672C\n * @default \"Learn More\"\n * @optional\n */\n learnMoreText?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u786E\u8BA4\u6309\u94AE\u6587\u672C\n * @default \"Okay, Got It\"\n * @optional\n */\n confirmText?: string\n\n /** \u786E\u8BA4\u6309\u94AE\u8DF3\u8F6C\u94FE\u63A5\uFF0C\u914D\u7F6E\u540E\u70B9\u51FB\u6309\u94AE\u5C06\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00\u6B64\u94FE\u63A5 @optional */\n confirmUrl?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u6848\u522B\u540D\uFF08\u6765\u81EA CMS winningInfos.confirmButton\uFF0C\u7B49\u540C\u4E8E confirmText\uFF09\n * \u5F53\u540C\u65F6\u63D0\u4F9B\u65F6\uFF0CconfirmButton \u4F18\u5148\u7EA7\u9AD8\u4E8E confirmText\n * @optional\n */\n confirmButton?: string\n}\n\n/**\n * Rules \u5F39\u7A97\u914D\u7F6E\n *\n * @example\n * ```tsx\n * rulesModalConfig={{\n * rulesData: [\n * { item: '$100 instead of $200, 10 tickets/day.' },\n * { item: '$100 for $120, 50 tickets/day.' }\n * ],\n * rulesText: 'Game Rules',\n * rulesTitle: 'Activity Rules'\n * }}\n * ```\n */\nexport interface RulesModalConfig {\n /**\n * \u89C4\u5219\u6570\u636E\u5217\u8868\n * @optional\n */\n rulesData?: Array<{\n /**\n * \u89C4\u5219\u9879\u5185\u5BB9\n */\n item: string\n }>\n\n /**\n * Rules \u6309\u94AE\u6587\u672C\n * @default \"Rules\"\n * @optional\n */\n rulesText?: string\n\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Rules\"\n * @optional\n */\n rulesTitle?: string\n}\n\n/**\n * ProductLottery \u9876\u680F\u53F3\u4FA7\u8DF3\u8F6C\u6309\u94AE\u914D\u7F6E\n */\nexport interface ActionButtonConfig {\n /**\n * \u6309\u94AE\u6587\u672C\uFF1B\u4E3A\u7A7A\u65F6\u4E0D\u5C55\u793A\n */\n text?: string\n\n /**\n * \u8DF3\u8F6C\u94FE\u63A5\uFF1B\u4E3A\u7A7A\u65F6\u4E0D\u5C55\u793A\n */\n url?: string\n}\n\n/**\n * My Rewards \u5F39\u7A97\u914D\u7F6E\n *\n * @example\n * ```tsx\n * myRewardsModalConfig={{\n * rewardsData: [\n * {\n * id: '1',\n * name: 'Anker Charger',\n * code: 'ANKER2024',\n * status: 'Available',\n * prizeTime: '2024-01-01',\n * showCopyCode: true\n * }\n * ],\n * myRewardsText: 'My Prizes',\n * codeText: 'CODE:',\n * copyText: 'COPY',\n * prizeText: 'Prize time:',\n * emptyText: 'No rewards yet'\n * }}\n * ```\n */\nexport interface MyRewardsModalConfig extends CopyTextConfig, PrizeTimeTextConfig {\n /**\n * \u5956\u52B1\u6570\u636E\u5217\u8868\n * @optional\n */\n rewardsData?: Array<{\n /**\n * \u5956\u52B1 ID\n */\n id: string\n /**\n * \u5956\u52B1\u540D\u79F0\n */\n name: string\n /**\n * \u4F18\u60E0\u7801\uFF08\u53EF\u9009\uFF09\n */\n code?: string\n /**\n * \u72B6\u6001\n */\n status: 'Available' | 'Expired' | 'Used'\n /**\n * \u5956\u52B1\u65F6\u95F4\n */\n prizeTime?: string\n /**\n * \u662F\u5426\u53EF\u590D\u5236\u7801\n */\n showCopyCode?: boolean\n /**\n * \u6BCF\u5956\u52B1\u53EF\u914D\u7F6E\u7684\u663E\u793A\u6587\u6848\uFF08\u8986\u76D6\u5168\u5C40 status label \u6620\u5C04\uFF09\n * @optional\n */\n statusText?: string\n\n /**\n * \u662F\u5426\u53EF\u7528\uFF08\u7528\u4E8E\u63A7\u5236\u989C\u8272\u548C\u590D\u5236\u6309\u94AE\u72B6\u6001\uFF09\n * @optional\n */\n available?: boolean\n }>\n\n /**\n * My Rewards \u6309\u94AE\u6587\u672C\n * @default \"My Rewards\"\n * @optional\n */\n myRewardsText?: string\n\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"My Rewards\"\n * @optional\n */\n myRewardsTitle?: string\n\n /**\n * \u4EE3\u7801\u6587\u672C\u524D\u7F00\n * @default \"CODE:\"\n * @optional\n */\n codeText?: string\n\n /**\n * \u7A7A\u72B6\u6001\u63D0\u793A\u6587\u672C\n * @default \"No rewards yet\"\n * @optional\n */\n emptyText?: string\n\n /**\n * \u590D\u5236\u5931\u8D25\u63D0\u793A\u6587\u6848\n * @optional\n */\n copyError?: string\n\n /**\n * \u53EF\u7528\u72B6\u6001\u6587\u6848\n * @default \"Available\"\n * @optional\n */\n availableText?: string\n\n /**\n * \u5DF2\u4F7F\u7528\u72B6\u6001\u6587\u6848\n * @default \"Used\"\n * @optional\n */\n usedStatusText?: string\n\n /**\n * \u5DF2\u8FC7\u671F\u72B6\u6001\u6587\u6848\n * @default \"Expired\"\n * @optional\n */\n expiredText?: string\n\n /**\n * \u672A\u77E5\u72B6\u6001\u6587\u6848\n * @optional\n */\n notFoundText?: string\n}\n\n/**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\n * @example\n * ```tsx\n * errorModalConfig={{\n * title: 'Oops!',\n * message: 'Something went wrong during the lottery process.',\n * confirmText: 'OK, I get'\n * }}\n * ```\n */\nexport interface ErrorModalConfig {\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Oops!\"\n * @optional\n */\n title?: string\n /**\n * \u9519\u8BEF\u6D88\u606F\u5185\u5BB9\n * @default \"Something went wrong during the lottery process.\"\n * @optional\n */\n message?: string\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u672C\n * @default \"OK, I get\"\n * @optional\n */\n confirmText?: string\n /** \u5151\u6362\u5931\u8D25\u65F6\u663E\u793A\u7684\u5F39\u7A97\u6807\u9898\uFF08\u6765\u81EA CMS error.exchangeFailedTitle\uFF09 @optional */\n exchangeFailedTitle?: string\n /** \u5151\u6362\u5931\u8D25\u65F6\u663E\u793A\u7684\u9519\u8BEF\u6D88\u606F\uFF08\u6765\u81EA CMS error.exchangeFailedMessage\uFF09 @optional */\n exchangeFailedMessage?: string\n}\n\n/**\n * \u672A\u4E2D\u5956 / Try Again \u5F39\u7A97\u914D\u7F6E\uFF08\u6765\u81EA CMS tryAgain group\uFF09\n */\nexport interface TryAgainConfig {\n /** \u672A\u4E2D\u5956\u5F39\u7A97\u6807\u9898 @optional */\n title?: string\n /** \u672A\u4E2D\u5956\u5F39\u7A97\u6D88\u606F\u5185\u5BB9 @optional */\n message?: string\n /** \u786E\u8BA4\u6309\u94AE\u6587\u6848 @optional */\n confirmText?: string\n}\n\n/**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08CMS: error group\uFF09\n */\nexport interface ErrorConfig {\n title?: string\n defaultMessage?: string\n confirmButton?: string\n exchangeFailedTitle?: string\n exchangeFailedMessage?: string\n}\n\n/**\n * \u793E\u4EA4\u5E73\u53F0\u7C7B\u578B\n */\nexport type SocialPlatform = 'facebook' | 'twitter' | 'instagram' | 'linkedin' | 'tiktok' | 'youtube'\n\n/**\n * \u793E\u4EA4\u5E73\u53F0\u914D\u7F6E\n */\nexport interface SharePlatformConfig {\n /**\n * \u5E73\u53F0\u7C7B\u578B\n */\n platform: SocialPlatform\n\n /**\n * \u5E73\u53F0\u540D\u79F0\n */\n name: string\n\n /**\n * \u5206\u4EAB URL\uFF08\u53EF\u9009\uFF0C\u5982\u679C\u63D0\u4F9B\u5219\u76F4\u63A5\u8DF3\u8F6C\uFF09\n */\n url?: string\n\n /**\n * \u70B9\u51FB\u56DE\u8C03\uFF08\u5982\u679C\u63D0\u4F9B url \u5219\u6B64\u56DE\u8C03\u4F1A\u5728\u8DF3\u8F6C\u524D\u6267\u884C\uFF09\n */\n onClick?: () => void\n\n /**\n * \u662F\u5426\u7981\u7528\n */\n disabled?: boolean\n}\n\n/**\n * \u5206\u4EAB\u5F39\u7A97\u914D\u7F6E\n */\nexport interface ShareModalConfig {\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Share to Get More Chances\"\n */\n title?: string\n\n /**\n * \u526F\u6807\u9898/\u5F15\u5BFC\u6587\u6848\n * @default \"Share to Play Again Keep Trying! You Could Still Win Big!\"\n */\n subtitle?: string\n\n /**\n * \u5E95\u90E8\u63D0\u793A\u6587\u6848\n * @default \"Note: Maximum of 3 times per participant.\"\n */\n note?: string\n\n /**\n * \u793E\u4EA4\u5E73\u53F0\u914D\u7F6E\u5217\u8868\n */\n platforms?: SharePlatformConfig[]\n\n /**\n * \u5206\u4EAB\u6210\u529F\u56DE\u8C03\n */\n onShareSuccess?: (platform: SocialPlatform) => void\n}\n\n// ============================================================================\n// \u5B50\u7EC4\u4EF6 Props \u63A5\u53E3\n// ============================================================================\n\n/**\n * PrizePool \u5956\u54C1\u6C60\u7EC4\u4EF6 Props\n */\nexport interface PrizePoolProps {\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @optional\n */\n theme?: Theme\n\n /**\n * \u5956\u54C1\u5217\u8868(\u901A\u5E38\u662F\u5168\u90E8 8 \u4E2A\u5956\u54C1)\n */\n prizes: Prize[]\n\n /**\n * \u6807\u9898\u6587\u672C\n * @default \"Prize Pool\"\n */\n title?: string\n\n /**\n * \u4E2D\u5956\u4EBA\u540D\u5355\u6570\u636E\n * @optional\n */\n winningInfos?: WinningInfo[]\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n\n /**\n * \u4E2D\u5956\u6EDA\u52A8 Ticker \u6587\u6848\u6A21\u677F\n * \u652F\u6301\u53D8\u91CF\uFF1A{{name}} \u83B7\u5956\u8005\u6635\u79F0\uFF0C{{prize}} \u5956\u54C1\u540D\u79F0\n * @default \"{{name}} just won {{prize}}!\"\n * @optional\n */\n winnerNameTemplate?: string\n}\n\n/** \u6D3B\u52A8\u673A\u5236\u6A21\u5F0F */\nexport type ChanceMechanismType = 'methods' | 'input'\n\n/** \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u4EC5 mechanismType='input' \u65F6\u4F7F\u7528\uFF09 */\nexport interface ChanceInputConfig {\n /** \u8F93\u5165\u6846\u5360\u4F4D\u6587\u672C @default \"Enter your order number\" */\n placeholder?: string\n /** \u63D0\u4EA4\u6309\u94AE\u6587\u6848 @default \"Spin and Win\" */\n submitText?: string\n /** \u8F93\u5165\u503C\u63D0\u4EA4\u56DE\u8C03 */\n onSubmit?: (value: string) => void | Promise<void>\n /** \u662F\u5426\u6B63\u5728\u63D0\u4EA4 */\n isSubmitting?: boolean\n /** \u8F93\u5165\u6846\u7C7B\u578B @default \"text\" */\n inputType?: 'text' | 'email' | 'number'\n /** \u9A8C\u8BC1\u6B63\u5219 (\u53EF\u9009) */\n validationPattern?: string\n /** \u9A8C\u8BC1\u5931\u8D25\u63D0\u793A\u6587\u6848 */\n validationErrorText?: string\n /** \u8F93\u5165\u6846\u9ED8\u8BA4\u503C\uFF08\u5982\u767B\u5F55\u7528\u6237 email\uFF0C\u652F\u6301\u5F02\u6B65\u586B\u5145\uFF09 @optional */\n defaultValue?: string\n\n /** \u63A5\u5165\u65B9\u6309\u9700\u7981\u7528\u8F93\u5165\u6846\u5185\u5BB9\u66F4\u6539 */\n disabled?: boolean\n\n /** \u662F\u5426\u7981\u6B62\u6D4F\u89C8\u5668\u81EA\u52A8\u586B\u5145\uFF08\u5C24\u5176\u662F email \u81EA\u52A8\u586B\u5145\uFF09 */\n disableAutofill?: boolean\n\n /** \u534F\u8BAE\u544A\u77E5\u5BCC\u6587\u672C\uFF1B\u914D\u7F6E\u65F6\u624D\u5C55\u793A\u534F\u8BAE\u52FE\u9009 UI */\n agreementNotice?: string | SerializedEditorState<SerializedLexicalNode>\n\n /** \u534F\u8BAE\u672A\u52FE\u9009\u65F6\u7684\u63D0\u793A\u6587\u6848\uFF1B\u914D\u7F6E\u534F\u8BAE\u540E\u70B9\u51FB\u63D0\u4EA4\u4F46\u672A\u52FE\u9009\u65F6\u5C55\u793A */\n agreementWarningText?: string\n\n /** \u8F93\u5165\u6A21\u5F0F\u63D0\u4EA4\u6309\u94AE\u70B9\u51FB\u57CB\u70B9\uFF1Adata-headless-type-name */\n submitTrackTypeName?: string\n\n /** \u8F93\u5165\u6A21\u5F0F\u63D0\u4EA4\u6309\u94AE\u70B9\u51FB\u57CB\u70B9\uFF1Adata-headless-title-desc-button */\n submitTrackTitleDescButton?: string\n}\n\n/**\n * ChanceMethods \u83B7\u53D6\u673A\u4F1A\u7EC4\u4EF6 Props\n */\nexport interface ChanceMethodsProps {\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @optional\n */\n theme?: Theme\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u5217\u8868\n */\n methods: ChanceMethod[]\n\n /**\n * \u6807\u9898\u6587\u672C\n * @default \"Want more chances to win?\"\n */\n title?: string\n\n /**\n * \u526F\u6807\u9898(\u53EF\u9009)\n */\n subtitle?: string\n\n /**\n * \u5E95\u90E8\u63D0\u793A\u6587\u672C(\u53EF\u9009)\n */\n footerNote?: string\n\n /**\n * \u767B\u5F55\u7528\u6237\u6570\u636E\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n userData?: UserData\n\n /**\n * \u6253\u5F00\u5206\u4EAB\u5F39\u7A97\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n onOpenShareModal?: () => void\n\n /**\n * \u5FBD\u7AE0\u6587\u6848\n * @default \"Chance +1\"\n */\n chanceBadgeText?: string\n\n /**\n * \u5DF2\u5B8C\u6210\u72B6\u6001\u6587\u6848\n * @default \"Completed\"\n */\n completedText?: string\n\n /**\n * \u5DF2\u4F7F\u7528\u72B6\u6001\u6587\u6848\n * @default \"Used\"\n */\n usedText?: string\n\n /**\n * \u52A0\u8F7D\u4E2D\u6587\u6848\n * @default \"Loading...\"\n */\n loadingText?: string\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n\n /** \u6D3B\u52A8\u673A\u5236\u6A21\u5F0F @default 'methods' */\n mechanismType?: ChanceMechanismType\n /** \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u4EC5 mechanismType='input' \u65F6\u4F7F\u7528\uFF09 */\n inputConfig?: ChanceInputConfig\n\n /** \u534F\u8BAE\u662F\u5426\u5DF2\u52FE\u9009\uFF08\u4F9B\u5916\u5C42\u7EDF\u4E00\u63A7\u5236\u5DE6\u53F3\u4E24\u4FA7\u62BD\u5956\u5165\u53E3\uFF09 */\n isAgreementChecked?: boolean\n\n /** \u534F\u8BAE\u52FE\u9009\u72B6\u6001\u53D8\u66F4\u56DE\u8C03 */\n onAgreementCheckedChange?: (checked: boolean) => void\n\n /** \u5916\u5C42\u6CE8\u5165\u7684\u534F\u8BAE\u63D0\u793A\u6587\u6848\uFF08\u7528\u4E8E\u7EDF\u4E00\u62E6\u622A\u5DE6\u53F3\u4E24\u4FA7\u62BD\u5956\u5165\u53E3\u65F6\u5C55\u793A\u5728\u6309\u94AE\u4E0B\u65B9\uFF09 */\n agreementErrorText?: string\n}\n\n/**\n * WinnerModal \u4E2D\u5956\u5F39\u7A97\u7EC4\u4EF6 Props\n */\nexport interface WinnerModalProps extends CopyTextConfig, CouponConfig, PrizeTimeTextConfig {\n /**\n * \u662F\u5426\u663E\u793A\u5F39\u7A97\n */\n isOpen: boolean\n\n /**\n * \u4E2D\u5956\u5956\u54C1\u4FE1\u606F\n */\n prize: Prize | null\n\n /**\n * \u5F39\u7A97\u6807\u9898\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"You Have Won\"\uFF09\n */\n title?: string\n\n /**\n * \u5956\u54C1\u6807\u9898\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u4F7F\u7528 prize.name\uFF09\n */\n prizeTitle?: string\n\n /**\n * \u5956\u54C1\u56FE\u7247 URL\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u4F7F\u7528 prize.image\uFF09\n */\n prizeImage?: string\n\n /**\n * \u5956\u54C1\u8BE6\u60C5\u63CF\u8FF0\uFF08\u53EF\u9009\uFF09\n * @deprecated \u8BED\u4E49\u4E0D\u660E\u786E\uFF0C\u8BF7\u6539\u7528 `winnerNote`\uFF08code/copy \u4E0B\u65B9\u4E13\u7528\u8BF4\u660E\u6587\u5B57\uFF09\n */\n prizeDescription?: string\n\n /**\n * code/copy \u533A\u57DF\u6B63\u4E0B\u65B9\u7684\u4E13\u7528\u8BF4\u660E\u6587\u5B57\u3002\n * \u4EC5\u5728\u660E\u786E\u914D\u7F6E\u65F6\u5C55\u793A\uFF1B\u672A\u914D\u7F6E\u65F6\u4E0D\u6E32\u67D3\u4EFB\u4F55\u5185\u5BB9\u3002\n * \u4F18\u5148\u7EA7\u9AD8\u4E8E `prizeDescription`\u3002\n * @optional\n */\n winnerNote?: string\n\n /**\n * Learn More \u94FE\u63A5\uFF08\u53EF\u9009\uFF09\n */\n learnMoreUrl?: string\n\n /**\n * Learn More \u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"Learn More\"\uFF09\n */\n learnMoreText?: string\n\n /**\n * \u590D\u5236\u7801\u70B9\u51FB\u56DE\u8C03\n */\n onCopyCode?: (code: string) => void\n\n /**\n * \u5173\u95ED\u5F39\u7A97\u56DE\u8C03\n */\n onClose: () => void\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"Okay, Got It\"\uFF09\n */\n confirmText?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u6848\u522B\u540D\uFF08\u6765\u81EA CMS winningInfos.confirmButton\uFF0C\u7B49\u540C\u4E8E confirmText\uFF09\n * \u5F53\u540C\u65F6\u63D0\u4F9B\u65F6\uFF0CconfirmButton \u4F18\u5148\u7EA7\u9AD8\u4E8E confirmText\n * @optional\n */\n confirmButton?: string\n\n /** \u786E\u8BA4\u6309\u94AE\u8DF3\u8F6C\u94FE\u63A5 @optional */\n confirmUrl?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u70B9\u51FB\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n */\n onConfirm?: () => void\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u914D\u7F6E\n// ============================================================================\n\n/**\n * \u9ED8\u8BA4\u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\uFF083\u79CD\uFF09\n * @note \u7236\u7EC4\u4EF6\u9700\u8981\u8986\u76D6 onClick \u56DE\u8C03\u4EE5\u5B9E\u73B0\u5177\u4F53\u4E1A\u52A1\u903B\u8F91\n */\nexport const DEFAULT_CHANCE_METHODS: ChanceMethod[] = [\n {\n methodKey: 'default-share',\n type: 'share',\n title: 'Share on your socials',\n description: 'Share this event on your social media',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n {\n methodKey: 'default-points',\n type: 'points',\n title: 'Spend 100 points',\n description: 'Use your reward points to get a chance',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n {\n methodKey: 'default-refer',\n type: 'refer',\n title: 'Refer a friend',\n description: 'Invite your friends to join',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n]\n\n// ============================================================================\n// \u7C7B\u578B\u5B88\u536B\n// ============================================================================\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 Prize \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 Prize\n */\nexport function isPrize(value: unknown): value is Prize {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'prizeKey' in value &&\n 'name' in value &&\n 'image' in value &&\n typeof (value as Prize).prizeKey === 'string' &&\n typeof (value as Prize).name === 'string' &&\n typeof (value as Prize).image === 'object'\n )\n}\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 ChanceMethod \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 ChanceMethod\n */\nexport function isChanceMethod(value: unknown): value is ChanceMethod {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'methodKey' in value &&\n 'type' in value &&\n 'title' in value &&\n 'description' in value &&\n 'onClick' in value &&\n typeof (value as ChanceMethod).methodKey === 'string' &&\n typeof (value as ChanceMethod).type === 'string' &&\n typeof (value as ChanceMethod).title === 'string' &&\n typeof (value as ChanceMethod).description === 'string' &&\n typeof (value as ChanceMethod).onClick === 'function'\n )\n}\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 WinningInfo \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 WinningInfo\n */\nexport function isWinningInfo(value: unknown): value is WinningInfo {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'winningKey' in value &&\n 'userName' in value &&\n 'prizeName' in value &&\n typeof (value as WinningInfo).winningKey === 'string' &&\n typeof (value as WinningInfo).userName === 'string' &&\n typeof (value as WinningInfo).prizeName === 'string'\n )\n}\n\n// ============================================================================\n// \u5BFC\u51FA\u7C7B\u578B\u522B\u540D\uFF08\u7528\u4E8E\u7B80\u5316\u4F7F\u7528\uFF09\n// ============================================================================\n\n/**\n * \u62BD\u5956\u56DE\u8C03\u51FD\u6570\u7C7B\u578B\n */\nexport type OnSpinEndCallback = (prize: Prize) => void\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u70B9\u51FB\u56DE\u8C03\u51FD\u6570\u7C7B\u578B\n */\nexport type OnChanceMethodClick = () => void\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,EAAA,mBAAAC,EAAA,YAAAC,EAAA,kBAAAC,IAAA,eAAAC,EAAAN,GAkgCO,MAAME,EAAyC,CACpD,CACE,UAAW,gBACX,KAAM,QACN,MAAO,wBACP,YAAa,wCACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,EACA,CACE,UAAW,iBACX,KAAM,SACN,MAAO,mBACP,YAAa,yCACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,EACA,CACE,UAAW,gBACX,KAAM,QACN,MAAO,iBACP,YAAa,8BACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,CACF,EAWO,SAASE,EAAQG,EAAgC,CACtD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,aAAcA,GACd,SAAUA,GACV,UAAWA,GACX,OAAQA,EAAgB,UAAa,UACrC,OAAQA,EAAgB,MAAS,UACjC,OAAQA,EAAgB,OAAU,QAEtC,CAOO,SAASJ,EAAeI,EAAuC,CACpE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,cAAeA,GACf,SAAUA,GACV,UAAWA,GACX,gBAAiBA,GACjB,YAAaA,GACb,OAAQA,EAAuB,WAAc,UAC7C,OAAQA,EAAuB,MAAS,UACxC,OAAQA,EAAuB,OAAU,UACzC,OAAQA,EAAuB,aAAgB,UAC/C,OAAQA,EAAuB,SAAY,UAE/C,CAOO,SAASF,EAAcE,EAAsC,CAClE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,eAAgBA,GAChB,aAAcA,GACd,cAAeA,GACf,OAAQA,EAAsB,YAAe,UAC7C,OAAQA,EAAsB,UAAa,UAC3C,OAAQA,EAAsB,WAAc,QAEhD",
4
+ "sourcesContent": ["/**\n * \u62BD\u5956\u7EC4\u4EF6\u5171\u4EAB\u7C7B\u578B\u5B9A\u4E49\n *\n * \u5305\u542B\u6240\u6709\u62BD\u5956\u7EC4\u4EF6\uFF08WheelLottery, ProductLottery \u7B49\uFF09\u5171\u7528\u7684\u7C7B\u578B\u3001\u63A5\u53E3\u548C\u5E38\u91CF\u3002\n *\n * @module LotterySharedTypes\n * @date 2026-04-07\n */\n\nimport type { Theme, Img } from '../../types/props.js'\nimport type { SerializedEditorState, SerializedLexicalNode } from '@payloadcms/richtext-lexical/lexical'\n\n// Re-export Theme and Img for convenience\nexport type { Theme, Img }\n\n// ============================================================================\n// \u6838\u5FC3\u5B9E\u4F53\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u5956\u54C1\uFF08Prize\uFF09\n *\n * \u4EE3\u8868\u62BD\u5956\u6D3B\u52A8\u4E2D\u7684\u4E00\u4E2A\u5956\u54C1\uFF0C\u5305\u542B\u663E\u793A\u6240\u9700\u7684\u6240\u6709\u4FE1\u606F\u3002\n *\n * @example\n * ```tsx\n * const prize: Prize = {\n * prizeKey: 'prize-001',\n * name: 'Anker Prime Charger (100W, 3 Ports, GaN)',\n * image: { url: 'https://images.unsplash.com/photo-123', alt: 'Charger' },\n * rank: '1st',\n * price: '$79.99'\n * }\n * ```\n */\nexport interface Prize {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\uFF0C\u7528\u4E8E React key \u548C\u4E2D\u5956\u7ED3\u679C\u5339\u914D\n */\n prizeKey: string\n\n /**\n * \u5956\u54C1\u540D\u79F0\uFF0C\u663E\u793A\u5728\u8F6C\u76D8\u548C\u5956\u6C60\u4E2D\n * @maxLength 100\n */\n name: string\n\n /**\n * \u5956\u54C1\u56FE\u7247\u5BF9\u8C61\uFF0C\u5305\u542B url \u548C alt\n */\n image: Img\n\n /**\n * \u6392\u540D\u6807\u8BC6\uFF0C\u4EC5\u5728 Prize Pool \u4E2D\u663E\u793A\n * @optional\n */\n rank?: '1st' | '2nd' | '3rd'\n\n /**\n * \u4EF7\u683C\u6216\u6298\u6263\u4FE1\u606F\uFF0C\u663E\u793A\u5728\u5956\u6C60\u4E2D\n * @example \"$99.99\" | \"12% Off\"\n * @optional\n */\n price?: string\n\n /** \u5956\u54C1\u7EF4\u5EA6\u7684\u4E2D\u5956\u5F39\u7A97\u8986\u76D6\u914D\u7F6E\uFF1B\u672A\u914D\u7F6E\u65F6\u7531\u63A5\u5165\u5C42\u56DE\u9000\u5230\u5168\u5C40\u914D\u7F6E */\n winnerModalConfig?: {\n winnerNote?: string\n confirmText?: string\n confirmUrl?: string\n learnMoreUrl?: string\n learnMoreText?: string\n }\n}\n\n/**\n * \u4E2D\u5956\u4FE1\u606F\uFF08WinningInfo\uFF09\n *\n * \u4EE3\u8868\u4E00\u6761\u4E2D\u5956\u8BB0\u5F55\uFF0C\u7528\u4E8E\u5E95\u90E8\u6EDA\u52A8\u6761\u5C55\u793A\uFF0C\u8425\u9020\u6D3B\u52A8\u6C1B\u56F4\u3002\n *\n * @example\n * ```tsx\n * const winningInfo: WinningInfo = {\n * winningKey: 'win-001',\n * userName: 'Shuqi***',\n * prizeName: '12% Off Discount',\n * timestamp: 1702800000000\n * }\n * ```\n */\nexport interface WinningInfo {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\n */\n winningKey: string\n\n /**\n * \u7528\u6237\u540D\uFF08\u5DF2\u8131\u654F\uFF09\uFF0C\u5982 \"Shuqi***\"\n * @note \u5047\u8BBE\u4F20\u5165\u7684\u7528\u6237\u540D\u5DF2\u7ECF\u8FC7\u8131\u654F\u5904\u7406\uFF0C\u7EC4\u4EF6\u5185\u90E8\u4E0D\u518D\u5904\u7406\n */\n userName: string\n\n /**\n * \u4E2D\u5956\u5956\u54C1\u540D\u79F0\n */\n prizeName: string\n\n /**\n * \u4E2D\u5956\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n * @optional\n */\n timestamp?: number\n}\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u7C7B\u578B\n */\nexport type ChanceMethodType = 'share' | 'points' | 'refer' | string\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u72B6\u6001\n */\nexport type ChanceMethodStatus = 'pending' | 'completed' | 'used'\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\uFF08ChanceMethod\uFF09\n *\n * \u4EE3\u8868\u4E00\u79CD\u83B7\u53D6\u62BD\u5956\u673A\u4F1A\u7684\u65B9\u5F0F\uFF0C\u652F\u6301\u7075\u6D3B\u914D\u7F6E\uFF08\u5206\u4EAB\u3001\u79EF\u5206\u3001\u63A8\u8350\u7B49\uFF09\u3002\n *\n * @example\n * ```tsx\n * const chanceMethod: ChanceMethod = {\n * methodKey: 'share-001',\n * type: 'share',\n * title: 'Share on your socials',\n * description: 'Share this event on your social media',\n * buttonText: 'Redeem now',\n * onClick: () => console.log('Share clicked'),\n * disabled: false,\n * status: 'pending'\n * }\n * ```\n */\nexport interface ChanceMethod {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\n */\n methodKey: string\n\n /**\n * \u65B9\u5F0F\u7C7B\u578B\uFF0C\u652F\u6301\u9884\u5B9A\u4E49\u7C7B\u578B\uFF08'share', 'points', 'refer'\uFF09\u6216\u81EA\u5B9A\u4E49\u7C7B\u578B\n */\n type: ChanceMethodType\n\n /**\n * \u65B9\u5F0F\u6807\u9898\uFF0C\u5982 \"Share on your socials\"\n */\n title: string\n\n /**\n * \u8BE6\u7EC6\u8BF4\u660E\u6587\u5B57\n */\n description: string\n\n /**\n * \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 \"Redeem now\"\n * @default \"Redeem now\"\n * @optional\n */\n buttonText?: string\n\n completed?: string\n\n used?: string\n\n /**\n * \u672A\u767B\u5F55\u65F6\u70B9\u51FB GO \u6309\u94AE\u7684\u56DE\u8C03\n * @example\n * ```tsx\n * onLoginRequired={() => {\n * // \u6253\u5F00\u767B\u5F55\u5F39\u7A97\u6216\u8DF3\u8F6C\u767B\u5F55\u9875\n * router.push('/login')\n * }}\n * ```\n */\n onLoginRequired?: () => void\n\n /**\n * \u70B9\u51FB\u6309\u94AE\u65F6\u7684\u56DE\u8C03\u51FD\u6570\n * @note \u4E1A\u52A1\u903B\u8F91\uFF08\u5982\u79EF\u5206\u6263\u9664\u3001\u5206\u4EAB\u9A8C\u8BC1\uFF09\u7531\u7236\u7EC4\u4EF6\u5904\u7406\n */\n onClick: () => void\n\n /**\n * \u662F\u5426\u7981\u7528\u8BE5\u65B9\u5F0F\n * @default false\n * @optional\n */\n disabled?: boolean\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u7684\u72B6\u6001\n * - pending: \u672A\u5B8C\u6210\uFF08\u9ED8\u8BA4\u72B6\u6001\uFF09\n * - completed: \u5DF2\u5B8C\u6210/\u5DF2\u83B7\u5F97\n * - used: \u5DF2\u4F7F\u7528\n * @default \"pending\"\n * @optional\n */\n status?: ChanceMethodStatus\n\n /**\n * \u662F\u5426\u663E\u793A\u52A0\u8F7D\u72B6\u6001\n * @default false\n * @optional\n */\n loading?: boolean\n\n /**\n * \u662F\u5426\u5728\u70B9\u51FB\u65F6\u6253\u5F00\u5206\u4EAB\u5F39\u7A97\n * @default false\n * @optional\n */\n openShareModal?: boolean\n}\n\n/**\n * \u7528\u6237\u6570\u636E\uFF08UserData\uFF09\n *\n * \u4EE3\u8868\u5F53\u524D\u7528\u6237\u7684\u62BD\u5956\u76F8\u5173\u6570\u636E\n *\n * @example\n * ```tsx\n * const userData: UserData = {\n * isLoggedIn: true,\n * availableChances: 3,\n * wonPrizes: [\n * { id: 'prize-001', name: 'Charger', image: 'https://...', timestamp: 1702800000000 }\n * ]\n * }\n * ```\n */\nexport interface UserData {\n /**\n * \u7528\u6237\u662F\u5426\u5DF2\u767B\u5F55\n */\n isLoggedIn: boolean\n\n /**\n * \u5F53\u524D\u53EF\u4F7F\u7528\u7684\u62BD\u5956\u6B21\u6570\n * @default 0\n */\n availableChances: number\n\n /**\n * \u603B\u673A\u4F1A\u6570\uFF08\u7528\u4E8E\u663E\u793A\u8FDB\u5EA6\uFF0C\u4F8B\u5982 \"3/5\"\uFF09\n * @default undefined\n * @optional\n */\n totalChances?: number\n\n /**\n * \u5DF2\u83B7\u5F97\u7684\u5956\u54C1\u5217\u8868\n * @optional\n */\n wonPrizes?: Array<Prize & { timestamp?: number }>\n\n /** * \u7528\u6237\u7535\u5B50\u90AE\u7BB1\uFF08\u53EF\u9009\uFF0C\u7528\u4E8E\u53D1\u9001\u4E2D\u5956\u901A\u77E5\u7B49\uFF09\n * @optional\n */\n email?: string\n\n /**\n * \u673A\u4F1A\u6570\u636E\u662F\u5426\u6B63\u5728\u52A0\u8F7D\u4E2D\n * @optional\n */\n isChancesLoading?: boolean\n}\n\n/**\n * \u7F13\u52A8\u51FD\u6570\u7C7B\u578B\n */\nexport type EasingFunction = 'ease-out' | 'ease-in-out' | 'linear'\n\n// ============================================================================\n// \u516C\u5171\u6587\u6848\u914D\u7F6E\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u590D\u5236\u64CD\u4F5C\u76F8\u5173\u6587\u6848\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n * \u7528\u4E8E\u6240\u6709\u5305\u542B\u590D\u5236\u529F\u80FD\u7684\u7EC4\u4EF6\n */\nexport interface CopyTextConfig {\n /**\n * \u590D\u5236\u6309\u94AE\u6587\u672C\n * @default \"COPY\"\n */\n copyText?: string\n\n /**\n * \u590D\u5236\u6210\u529F\u540E\u7684\u6309\u94AE\u6587\u672C\n * @default \"COPIED\"\n */\n copiedText?: string\n}\n\n/**\n * \u4F18\u60E0\u7801\u76F8\u5173\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n * \u7528\u4E8E\u6240\u6709\u5C55\u793A\u4F18\u60E0\u7801\u7684\u7EC4\u4EF6\n */\nexport interface CouponConfig {\n /**\n * \u4EE3\u7801\u6587\u672C\u524D\u7F00\n * @default \"CODE:\"\n */\n codeText?: string\n\n /**\n * \u4F18\u60E0\u7801\n */\n couponCode?: string\n\n /**\n * \u4F18\u60E0\u7801\u8FC7\u671F\u65F6\u95F4\n */\n expiresAt?: string\n\n /**\n * \u6709\u6548\u671F\u6807\u7B7E\u6587\u6848\n * @default \"Valid until:\"\n */\n expiresAtLabel?: string\n\n /**\n * \u4F18\u60E0\u5238\u6298\u6263\u6587\u672C\uFF08\u4F8B\u5982 \"20%\"\uFF09\n */\n couponDiscount?: string\n\n /**\n * \u4F18\u60E0\u5238\u5355\u4F4D\u6587\u672C\n * @default \"Off\"\n */\n couponUnit?: string\n}\n\n/**\n * \u5956\u52B1\u65F6\u95F4\u6587\u6848\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n */\nexport interface PrizeTimeTextConfig {\n /**\n * \u5956\u52B1\u65F6\u95F4\u6587\u672C\u524D\u7F00\n * @default \"Prize time:\"\n */\n prizeText?: string\n}\n\n/**\n * \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08WinnerModalConfig\uFF09\n *\n * \u7528\u4E8E\u914D\u7F6E\u4E2D\u5956\u5F39\u7A97\u7684\u5C55\u793A\u5185\u5BB9\uFF0C\u901A\u5E38\u7531\u62BD\u5956\u63A5\u53E3\u8FD4\u56DE\u63D0\u4F9B\n *\n * @example\n * ```tsx\n * const winnerModalConfig: WinnerModalConfig = {\n * title: 'Congratulations!',\n * prizeTitle: 'Anker Prime Charger',\n * prizeImage: 'https://...',\n * prizeDescription: 'High-speed charging for all your devices',\n * learnMoreUrl: 'https://...',\n * learnMoreText: 'View Details',\n * couponCode: 'ANKER2024',\n * expiresAt: '2024-12-31',\n * couponDiscount: '20%',\n * couponUnit: 'Off',\n * confirmText: 'Claim Now'\n * }\n * ```\n */\nexport interface WinnerModalConfig extends CopyTextConfig, CouponConfig, PrizeTimeTextConfig {\n /**\n * \u4E2D\u5956\u5F39\u7A97\u6807\u9898\n * @default \"You Have Won\"\n * @optional\n */\n title?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u6807\u9898\uFF08\u4F18\u5148\u7EA7\u9AD8\u4E8E prize.name\uFF09\n * @optional\n */\n prizeTitle?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u56FE\u7247 URL\uFF08\u4F18\u5148\u7EA7\u9AD8\u4E8E prize.image\uFF09\n * @optional\n */\n prizeImage?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u8BE6\u60C5\u63CF\u8FF0\n * @deprecated \u8BED\u4E49\u4E0D\u660E\u786E\uFF0C\u8BF7\u6539\u7528 `winnerNote`\uFF08code/copy \u4E0B\u65B9\u4E13\u7528\u8BF4\u660E\u6587\u5B57\uFF09\n * @optional\n */\n prizeDescription?: string\n\n /**\n * code/copy \u533A\u57DF\u6B63\u4E0B\u65B9\u7684\u4E13\u7528\u8BF4\u660E\u6587\u5B57\u3002\n * \u4EC5\u5728\u660E\u786E\u914D\u7F6E\u65F6\u5C55\u793A\uFF1B\u672A\u914D\u7F6E\u65F6\u4E0D\u6E32\u67D3\u4EFB\u4F55\u5185\u5BB9\u3002\n * \u4F18\u5148\u7EA7\u9AD8\u4E8E `prizeDescription`\u3002\n * @optional\n */\n winnerNote?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97 Learn More \u94FE\u63A5\n * @optional\n */\n learnMoreUrl?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97 Learn More \u6309\u94AE\u6587\u672C\n * @default \"Learn More\"\n * @optional\n */\n learnMoreText?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u786E\u8BA4\u6309\u94AE\u6587\u672C\n * @default \"Okay, Got It\"\n * @optional\n */\n confirmText?: string\n\n /** \u786E\u8BA4\u6309\u94AE\u8DF3\u8F6C\u94FE\u63A5\uFF0C\u914D\u7F6E\u540E\u70B9\u51FB\u6309\u94AE\u5C06\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00\u6B64\u94FE\u63A5 @optional */\n confirmUrl?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u6848\u522B\u540D\uFF08\u6765\u81EA CMS winningInfos.confirmButton\uFF0C\u7B49\u540C\u4E8E confirmText\uFF09\n * \u5F53\u540C\u65F6\u63D0\u4F9B\u65F6\uFF0CconfirmButton \u4F18\u5148\u7EA7\u9AD8\u4E8E confirmText\n * @optional\n */\n confirmButton?: string\n}\n\n/**\n * Rules \u5F39\u7A97\u914D\u7F6E\n *\n * @example\n * ```tsx\n * rulesModalConfig={{\n * rulesData: [\n * { item: '$100 instead of $200, 10 tickets/day.' },\n * { item: '$100 for $120, 50 tickets/day.' }\n * ],\n * rulesText: 'Game Rules',\n * rulesTitle: 'Activity Rules'\n * }}\n * ```\n */\nexport interface RulesModalConfig {\n /**\n * \u89C4\u5219\u6570\u636E\u5217\u8868\n * @optional\n */\n rulesData?: Array<{\n /**\n * \u89C4\u5219\u9879\u5185\u5BB9\n */\n item: string\n }>\n\n /**\n * Rules \u6309\u94AE\u6587\u672C\n * @default \"Rules\"\n * @optional\n */\n rulesText?: string\n\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Rules\"\n * @optional\n */\n rulesTitle?: string\n}\n\n/**\n * ProductLottery \u9876\u680F\u53F3\u4FA7\u8DF3\u8F6C\u6309\u94AE\u914D\u7F6E\n */\nexport interface ActionButtonConfig {\n /**\n * \u6309\u94AE\u6587\u672C\uFF1B\u4E3A\u7A7A\u65F6\u4E0D\u5C55\u793A\n */\n text?: string\n\n /**\n * \u8DF3\u8F6C\u94FE\u63A5\uFF1B\u4E3A\u7A7A\u65F6\u4E0D\u5C55\u793A\n */\n url?: string\n}\n\n/**\n * My Rewards \u5F39\u7A97\u914D\u7F6E\n *\n * @example\n * ```tsx\n * myRewardsModalConfig={{\n * rewardsData: [\n * {\n * id: '1',\n * name: 'Anker Charger',\n * code: 'ANKER2024',\n * status: 'Available',\n * prizeTime: '2024-01-01',\n * showCopyCode: true\n * }\n * ],\n * myRewardsText: 'My Prizes',\n * codeText: 'CODE:',\n * copyText: 'COPY',\n * prizeText: 'Prize time:',\n * emptyText: 'No rewards yet'\n * }}\n * ```\n */\nexport interface MyRewardsModalConfig extends CopyTextConfig, PrizeTimeTextConfig {\n /**\n * \u5956\u52B1\u6570\u636E\u5217\u8868\n * @optional\n */\n rewardsData?: Array<{\n /**\n * \u5956\u52B1 ID\n */\n id: string\n /**\n * \u5956\u52B1\u540D\u79F0\n */\n name: string\n /**\n * \u4F18\u60E0\u7801\uFF08\u53EF\u9009\uFF09\n */\n code?: string\n /**\n * \u72B6\u6001\n */\n status: 'Available' | 'Expired' | 'Used'\n /**\n * \u5956\u52B1\u65F6\u95F4\n */\n prizeTime?: string\n /**\n * \u662F\u5426\u53EF\u590D\u5236\u7801\n */\n showCopyCode?: boolean\n /**\n * \u6BCF\u5956\u52B1\u53EF\u914D\u7F6E\u7684\u663E\u793A\u6587\u6848\uFF08\u8986\u76D6\u5168\u5C40 status label \u6620\u5C04\uFF09\n * @optional\n */\n statusText?: string\n\n /**\n * \u662F\u5426\u53EF\u7528\uFF08\u7528\u4E8E\u63A7\u5236\u989C\u8272\u548C\u590D\u5236\u6309\u94AE\u72B6\u6001\uFF09\n * @optional\n */\n available?: boolean\n }>\n\n /**\n * My Rewards \u6309\u94AE\u6587\u672C\n * @default \"My Rewards\"\n * @optional\n */\n myRewardsText?: string\n\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"My Rewards\"\n * @optional\n */\n myRewardsTitle?: string\n\n /**\n * \u4EE3\u7801\u6587\u672C\u524D\u7F00\n * @default \"CODE:\"\n * @optional\n */\n codeText?: string\n\n /**\n * \u7A7A\u72B6\u6001\u63D0\u793A\u6587\u672C\n * @default \"No rewards yet\"\n * @optional\n */\n emptyText?: string\n\n /**\n * \u590D\u5236\u5931\u8D25\u63D0\u793A\u6587\u6848\n * @optional\n */\n copyError?: string\n\n /**\n * \u53EF\u7528\u72B6\u6001\u6587\u6848\n * @default \"Available\"\n * @optional\n */\n availableText?: string\n\n /**\n * \u5DF2\u4F7F\u7528\u72B6\u6001\u6587\u6848\n * @default \"Used\"\n * @optional\n */\n usedStatusText?: string\n\n /**\n * \u5DF2\u8FC7\u671F\u72B6\u6001\u6587\u6848\n * @default \"Expired\"\n * @optional\n */\n expiredText?: string\n\n /**\n * \u672A\u77E5\u72B6\u6001\u6587\u6848\n * @optional\n */\n notFoundText?: string\n}\n\n/**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\n * @example\n * ```tsx\n * errorModalConfig={{\n * title: 'Oops!',\n * message: 'Something went wrong during the lottery process.',\n * confirmText: 'OK, I get'\n * }}\n * ```\n */\nexport interface ErrorModalConfig {\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Oops!\"\n * @optional\n */\n title?: string\n /**\n * \u9519\u8BEF\u6D88\u606F\u5185\u5BB9\n * @default \"Something went wrong during the lottery process.\"\n * @optional\n */\n message?: string\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u672C\n * @default \"OK, I get\"\n * @optional\n */\n confirmText?: string\n /** \u5151\u6362\u5931\u8D25\u65F6\u663E\u793A\u7684\u5F39\u7A97\u6807\u9898\uFF08\u6765\u81EA CMS error.exchangeFailedTitle\uFF09 @optional */\n exchangeFailedTitle?: string\n /** \u5151\u6362\u5931\u8D25\u65F6\u663E\u793A\u7684\u9519\u8BEF\u6D88\u606F\uFF08\u6765\u81EA CMS error.exchangeFailedMessage\uFF09 @optional */\n exchangeFailedMessage?: string\n}\n\n/**\n * \u672A\u4E2D\u5956 / Try Again \u5F39\u7A97\u914D\u7F6E\uFF08\u6765\u81EA CMS tryAgain group\uFF09\n *\n * @example\n * ```tsx\n * const tryAgainConfig: TryAgainConfig = {\n * title: 'Better Luck Next Time!',\n * message: \"Don't give up! You still have more chances to win.\",\n * confirmText: 'Try Again'\n * }\n * ```\n */\nexport interface TryAgainConfig {\n /** \u672A\u4E2D\u5956\u5F39\u7A97\u6807\u9898 @optional */\n title?: string\n /** \u672A\u4E2D\u5956\u5F39\u7A97\u6D88\u606F\u5185\u5BB9 @optional */\n message?: string\n /** \u786E\u8BA4\u6309\u94AE\u6587\u6848 @optional */\n confirmText?: string\n}\n\n/**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08CMS: error group\uFF09\n */\nexport interface ErrorConfig {\n title?: string\n defaultMessage?: string\n confirmButton?: string\n exchangeFailedTitle?: string\n exchangeFailedMessage?: string\n}\n\n/**\n * \u793E\u4EA4\u5E73\u53F0\u7C7B\u578B\n */\nexport type SocialPlatform = 'facebook' | 'twitter' | 'instagram' | 'linkedin' | 'tiktok' | 'youtube'\n\n/**\n * \u793E\u4EA4\u5E73\u53F0\u914D\u7F6E\n */\nexport interface SharePlatformConfig {\n /**\n * \u5E73\u53F0\u7C7B\u578B\n */\n platform: SocialPlatform\n\n /**\n * \u5E73\u53F0\u540D\u79F0\n */\n name: string\n\n /**\n * \u5206\u4EAB URL\uFF08\u53EF\u9009\uFF0C\u5982\u679C\u63D0\u4F9B\u5219\u76F4\u63A5\u8DF3\u8F6C\uFF09\n */\n url?: string\n\n /**\n * \u70B9\u51FB\u56DE\u8C03\uFF08\u5982\u679C\u63D0\u4F9B url \u5219\u6B64\u56DE\u8C03\u4F1A\u5728\u8DF3\u8F6C\u524D\u6267\u884C\uFF09\n */\n onClick?: () => void\n\n /**\n * \u662F\u5426\u7981\u7528\n */\n disabled?: boolean\n}\n\n/**\n * \u5206\u4EAB\u5F39\u7A97\u914D\u7F6E\n */\nexport interface ShareModalConfig {\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Share to Get More Chances\"\n */\n title?: string\n\n /**\n * \u526F\u6807\u9898/\u5F15\u5BFC\u6587\u6848\n * @default \"Share to Play Again Keep Trying! You Could Still Win Big!\"\n */\n subtitle?: string\n\n /**\n * \u5E95\u90E8\u63D0\u793A\u6587\u6848\n * @default \"Note: Maximum of 3 times per participant.\"\n */\n note?: string\n\n /**\n * \u793E\u4EA4\u5E73\u53F0\u914D\u7F6E\u5217\u8868\n */\n platforms?: SharePlatformConfig[]\n\n /**\n * \u5206\u4EAB\u6210\u529F\u56DE\u8C03\n */\n onShareSuccess?: (platform: SocialPlatform) => void\n}\n\n// ============================================================================\n// \u5B50\u7EC4\u4EF6 Props \u63A5\u53E3\n// ============================================================================\n\n/**\n * PrizePool \u5956\u54C1\u6C60\u7EC4\u4EF6 Props\n */\nexport interface PrizePoolProps {\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @optional\n */\n theme?: Theme\n\n /**\n * \u5956\u54C1\u5217\u8868(\u901A\u5E38\u662F\u5168\u90E8 8 \u4E2A\u5956\u54C1)\n */\n prizes: Prize[]\n\n /**\n * \u6807\u9898\u6587\u672C\n * @default \"Prize Pool\"\n */\n title?: string\n\n /**\n * \u4E2D\u5956\u4EBA\u540D\u5355\u6570\u636E\n * @optional\n */\n winningInfos?: WinningInfo[]\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n\n /**\n * \u4E2D\u5956\u6EDA\u52A8 Ticker \u6587\u6848\u6A21\u677F\n * \u652F\u6301\u53D8\u91CF\uFF1A{{name}} \u83B7\u5956\u8005\u6635\u79F0\uFF0C{{prize}} \u5956\u54C1\u540D\u79F0\n * @default \"{{name}} just won {{prize}}!\"\n * @optional\n */\n winnerNameTemplate?: string\n}\n\n/** \u6D3B\u52A8\u673A\u5236\u6A21\u5F0F */\nexport type ChanceMechanismType = 'methods' | 'input'\n\n/** \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u4EC5 mechanismType='input' \u65F6\u4F7F\u7528\uFF09 */\nexport interface ChanceInputConfig {\n /** \u8F93\u5165\u6846\u5360\u4F4D\u6587\u672C @default \"Enter your order number\" */\n placeholder?: string\n /** \u63D0\u4EA4\u6309\u94AE\u6587\u6848 @default \"Spin and Win\" */\n submitText?: string\n /** \u8F93\u5165\u503C\u63D0\u4EA4\u56DE\u8C03 */\n onSubmit?: (value: string) => void | Promise<void>\n /** \u662F\u5426\u6B63\u5728\u63D0\u4EA4 */\n isSubmitting?: boolean\n /** \u8F93\u5165\u6846\u7C7B\u578B @default \"text\" */\n inputType?: 'text' | 'email' | 'number'\n /** \u9A8C\u8BC1\u6B63\u5219 (\u53EF\u9009) */\n validationPattern?: string\n /** \u9A8C\u8BC1\u5931\u8D25\u63D0\u793A\u6587\u6848 */\n validationErrorText?: string\n /** \u8F93\u5165\u6846\u9ED8\u8BA4\u503C\uFF08\u5982\u767B\u5F55\u7528\u6237 email\uFF0C\u652F\u6301\u5F02\u6B65\u586B\u5145\uFF09 @optional */\n defaultValue?: string\n\n /** \u63A5\u5165\u65B9\u6309\u9700\u7981\u7528\u8F93\u5165\u6846\u5185\u5BB9\u66F4\u6539 */\n disabled?: boolean\n\n /** \u662F\u5426\u7981\u6B62\u6D4F\u89C8\u5668\u81EA\u52A8\u586B\u5145\uFF08\u5C24\u5176\u662F email \u81EA\u52A8\u586B\u5145\uFF09 */\n disableAutofill?: boolean\n\n /** \u534F\u8BAE\u544A\u77E5\u5BCC\u6587\u672C\uFF1B\u914D\u7F6E\u65F6\u624D\u5C55\u793A\u534F\u8BAE\u52FE\u9009 UI */\n agreementNotice?: string | SerializedEditorState<SerializedLexicalNode>\n\n /** \u534F\u8BAE\u672A\u52FE\u9009\u65F6\u7684\u63D0\u793A\u6587\u6848\uFF1B\u914D\u7F6E\u534F\u8BAE\u540E\u70B9\u51FB\u63D0\u4EA4\u4F46\u672A\u52FE\u9009\u65F6\u5C55\u793A */\n agreementWarningText?: string\n\n /** \u8F93\u5165\u6A21\u5F0F\u63D0\u4EA4\u6309\u94AE\u70B9\u51FB\u57CB\u70B9\uFF1Adata-headless-type-name */\n submitTrackTypeName?: string\n\n /** \u8F93\u5165\u6A21\u5F0F\u63D0\u4EA4\u6309\u94AE\u70B9\u51FB\u57CB\u70B9\uFF1Adata-headless-title-desc-button */\n submitTrackTitleDescButton?: string\n}\n\n/**\n * ChanceMethods \u83B7\u53D6\u673A\u4F1A\u7EC4\u4EF6 Props\n */\nexport interface ChanceMethodsProps {\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @optional\n */\n theme?: Theme\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u5217\u8868\n */\n methods: ChanceMethod[]\n\n /**\n * \u6807\u9898\u6587\u672C\n * @default \"Want more chances to win?\"\n */\n title?: string\n\n /**\n * \u526F\u6807\u9898(\u53EF\u9009)\n */\n subtitle?: string\n\n /**\n * \u5E95\u90E8\u63D0\u793A\u6587\u672C(\u53EF\u9009)\n */\n footerNote?: string\n\n /**\n * \u767B\u5F55\u7528\u6237\u6570\u636E\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n userData?: UserData\n\n /**\n * \u6253\u5F00\u5206\u4EAB\u5F39\u7A97\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n onOpenShareModal?: () => void\n\n /**\n * \u5FBD\u7AE0\u6587\u6848\n * @default \"Chance +1\"\n */\n chanceBadgeText?: string\n\n /**\n * \u5DF2\u5B8C\u6210\u72B6\u6001\u6587\u6848\n * @default \"Completed\"\n */\n completedText?: string\n\n /**\n * \u5DF2\u4F7F\u7528\u72B6\u6001\u6587\u6848\n * @default \"Used\"\n */\n usedText?: string\n\n /**\n * \u52A0\u8F7D\u4E2D\u6587\u6848\n * @default \"Loading...\"\n */\n loadingText?: string\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n\n /** \u6D3B\u52A8\u673A\u5236\u6A21\u5F0F @default 'methods' */\n mechanismType?: ChanceMechanismType\n /** \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u4EC5 mechanismType='input' \u65F6\u4F7F\u7528\uFF09 */\n inputConfig?: ChanceInputConfig\n\n /** \u534F\u8BAE\u662F\u5426\u5DF2\u52FE\u9009\uFF08\u4F9B\u5916\u5C42\u7EDF\u4E00\u63A7\u5236\u5DE6\u53F3\u4E24\u4FA7\u62BD\u5956\u5165\u53E3\uFF09 */\n isAgreementChecked?: boolean\n\n /** \u534F\u8BAE\u52FE\u9009\u72B6\u6001\u53D8\u66F4\u56DE\u8C03 */\n onAgreementCheckedChange?: (checked: boolean) => void\n\n /** \u5916\u5C42\u6CE8\u5165\u7684\u534F\u8BAE\u63D0\u793A\u6587\u6848\uFF08\u7528\u4E8E\u7EDF\u4E00\u62E6\u622A\u5DE6\u53F3\u4E24\u4FA7\u62BD\u5956\u5165\u53E3\u65F6\u5C55\u793A\u5728\u6309\u94AE\u4E0B\u65B9\uFF09 */\n agreementErrorText?: string\n}\n\n/**\n * WinnerModal \u4E2D\u5956\u5F39\u7A97\u7EC4\u4EF6 Props\n */\nexport interface WinnerModalProps extends CopyTextConfig, CouponConfig, PrizeTimeTextConfig {\n /**\n * \u662F\u5426\u663E\u793A\u5F39\u7A97\n */\n isOpen: boolean\n\n /**\n * \u4E2D\u5956\u5956\u54C1\u4FE1\u606F\n */\n prize: Prize | null\n\n /**\n * \u5F39\u7A97\u6807\u9898\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"You Have Won\"\uFF09\n */\n title?: string\n\n /**\n * \u5956\u54C1\u6807\u9898\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u4F7F\u7528 prize.name\uFF09\n */\n prizeTitle?: string\n\n /**\n * \u5956\u54C1\u56FE\u7247 URL\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u4F7F\u7528 prize.image\uFF09\n */\n prizeImage?: string\n\n /**\n * \u5956\u54C1\u8BE6\u60C5\u63CF\u8FF0\uFF08\u53EF\u9009\uFF09\n * @deprecated \u8BED\u4E49\u4E0D\u660E\u786E\uFF0C\u8BF7\u6539\u7528 `winnerNote`\uFF08code/copy \u4E0B\u65B9\u4E13\u7528\u8BF4\u660E\u6587\u5B57\uFF09\n */\n prizeDescription?: string\n\n /**\n * code/copy \u533A\u57DF\u6B63\u4E0B\u65B9\u7684\u4E13\u7528\u8BF4\u660E\u6587\u5B57\u3002\n * \u4EC5\u5728\u660E\u786E\u914D\u7F6E\u65F6\u5C55\u793A\uFF1B\u672A\u914D\u7F6E\u65F6\u4E0D\u6E32\u67D3\u4EFB\u4F55\u5185\u5BB9\u3002\n * \u4F18\u5148\u7EA7\u9AD8\u4E8E `prizeDescription`\u3002\n * @optional\n */\n winnerNote?: string\n\n /**\n * Learn More \u94FE\u63A5\uFF08\u53EF\u9009\uFF09\n */\n learnMoreUrl?: string\n\n /**\n * Learn More \u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"Learn More\"\uFF09\n */\n learnMoreText?: string\n\n /**\n * \u590D\u5236\u7801\u70B9\u51FB\u56DE\u8C03\n */\n onCopyCode?: (code: string) => void\n\n /**\n * \u5173\u95ED\u5F39\u7A97\u56DE\u8C03\n */\n onClose: () => void\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"Okay, Got It\"\uFF09\n */\n confirmText?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u6848\u522B\u540D\uFF08\u6765\u81EA CMS winningInfos.confirmButton\uFF0C\u7B49\u540C\u4E8E confirmText\uFF09\n * \u5F53\u540C\u65F6\u63D0\u4F9B\u65F6\uFF0CconfirmButton \u4F18\u5148\u7EA7\u9AD8\u4E8E confirmText\n * @optional\n */\n confirmButton?: string\n\n /** \u786E\u8BA4\u6309\u94AE\u8DF3\u8F6C\u94FE\u63A5 @optional */\n confirmUrl?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u70B9\u51FB\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n */\n onConfirm?: () => void\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u914D\u7F6E\n// ============================================================================\n\n/**\n * \u9ED8\u8BA4\u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\uFF083\u79CD\uFF09\n * @note \u7236\u7EC4\u4EF6\u9700\u8981\u8986\u76D6 onClick \u56DE\u8C03\u4EE5\u5B9E\u73B0\u5177\u4F53\u4E1A\u52A1\u903B\u8F91\n */\nexport const DEFAULT_CHANCE_METHODS: ChanceMethod[] = [\n {\n methodKey: 'default-share',\n type: 'share',\n title: 'Share on your socials',\n description: 'Share this event on your social media',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n {\n methodKey: 'default-points',\n type: 'points',\n title: 'Spend 100 points',\n description: 'Use your reward points to get a chance',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n {\n methodKey: 'default-refer',\n type: 'refer',\n title: 'Refer a friend',\n description: 'Invite your friends to join',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n]\n\n// ============================================================================\n// \u7C7B\u578B\u5B88\u536B\n// ============================================================================\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 Prize \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 Prize\n */\nexport function isPrize(value: unknown): value is Prize {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'prizeKey' in value &&\n 'name' in value &&\n 'image' in value &&\n typeof (value as Prize).prizeKey === 'string' &&\n typeof (value as Prize).name === 'string' &&\n typeof (value as Prize).image === 'object'\n )\n}\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 ChanceMethod \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 ChanceMethod\n */\nexport function isChanceMethod(value: unknown): value is ChanceMethod {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'methodKey' in value &&\n 'type' in value &&\n 'title' in value &&\n 'description' in value &&\n 'onClick' in value &&\n typeof (value as ChanceMethod).methodKey === 'string' &&\n typeof (value as ChanceMethod).type === 'string' &&\n typeof (value as ChanceMethod).title === 'string' &&\n typeof (value as ChanceMethod).description === 'string' &&\n typeof (value as ChanceMethod).onClick === 'function'\n )\n}\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 WinningInfo \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 WinningInfo\n */\nexport function isWinningInfo(value: unknown): value is WinningInfo {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'winningKey' in value &&\n 'userName' in value &&\n 'prizeName' in value &&\n typeof (value as WinningInfo).winningKey === 'string' &&\n typeof (value as WinningInfo).userName === 'string' &&\n typeof (value as WinningInfo).prizeName === 'string'\n )\n}\n\n// ============================================================================\n// \u5BFC\u51FA\u7C7B\u578B\u522B\u540D\uFF08\u7528\u4E8E\u7B80\u5316\u4F7F\u7528\uFF09\n// ============================================================================\n\n/**\n * \u62BD\u5956\u56DE\u8C03\u51FD\u6570\u7C7B\u578B\n */\nexport type OnSpinEndCallback = (prize: Prize) => void\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u70B9\u51FB\u56DE\u8C03\u51FD\u6570\u7C7B\u578B\n */\nexport type OnChanceMethodClick = () => void\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,EAAA,mBAAAC,EAAA,YAAAC,EAAA,kBAAAC,IAAA,eAAAC,EAAAN,GA2gCO,MAAME,EAAyC,CACpD,CACE,UAAW,gBACX,KAAM,QACN,MAAO,wBACP,YAAa,wCACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,EACA,CACE,UAAW,iBACX,KAAM,SACN,MAAO,mBACP,YAAa,yCACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,EACA,CACE,UAAW,gBACX,KAAM,QACN,MAAO,iBACP,YAAa,8BACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,CACF,EAWO,SAASE,EAAQG,EAAgC,CACtD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,aAAcA,GACd,SAAUA,GACV,UAAWA,GACX,OAAQA,EAAgB,UAAa,UACrC,OAAQA,EAAgB,MAAS,UACjC,OAAQA,EAAgB,OAAU,QAEtC,CAOO,SAASJ,EAAeI,EAAuC,CACpE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,cAAeA,GACf,SAAUA,GACV,UAAWA,GACX,gBAAiBA,GACjB,YAAaA,GACb,OAAQA,EAAuB,WAAc,UAC7C,OAAQA,EAAuB,MAAS,UACxC,OAAQA,EAAuB,OAAU,UACzC,OAAQA,EAAuB,aAAgB,UAC/C,OAAQA,EAAuB,SAAY,UAE/C,CAOO,SAASF,EAAcE,EAAsC,CAClE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,eAAgBA,GAChB,aAAcA,GACd,cAAeA,GACf,OAAQA,EAAsB,YAAe,UAC7C,OAAQA,EAAsB,UAAa,UAC3C,OAAQA,EAAsB,WAAc,QAEhD",
6
6
  "names": ["types_exports", "__export", "DEFAULT_CHANCE_METHODS", "isChanceMethod", "isPrize", "isWinningInfo", "__toCommonJS", "value"]
7
7
  }
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
- import type { MarqueeProps, MarqueeItemProps, MarqueeImageContentProps, MarqueeTextContentProps } from './type.js';
3
- import { type SwiperRef } from 'swiper/react';
2
+ import type { MarqueeProps, MarqueeItemProps, MarqueeImageContentProps, MarqueeTextContentProps, MarqueeIconAndTextContentProps, MarqueePictureContentProps } from './type.js';
4
3
  import 'swiper/css';
5
4
  declare const MarqueeItem: {
6
5
  ({ data, configuration }: MarqueeItemProps): import("react/jsx-runtime").JSX.Element;
@@ -11,8 +10,16 @@ declare const MarqueeImageContent: {
11
10
  displayName: string;
12
11
  };
13
12
  declare const MarqueeTextContent: React.ForwardRefExoticComponent<MarqueeTextContentProps & React.RefAttributes<HTMLDivElement>>;
14
- declare const _default: React.ForwardRefExoticComponent<Omit<MarqueeProps & React.RefAttributes<SwiperRef>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
13
+ declare const MarqueeIconAndTextContent: {
14
+ ({ icon, text, iconClassName, textClassName }: MarqueeIconAndTextContentProps): import("react/jsx-runtime").JSX.Element;
15
+ displayName: string;
16
+ };
17
+ declare const MarqueePictureContent: {
18
+ ({ pictureImage, pictureClassName }: MarqueePictureContentProps): import("react/jsx-runtime").JSX.Element;
19
+ displayName: string;
20
+ };
21
+ declare const _default: React.ForwardRefExoticComponent<Omit<MarqueeProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../shared/Styles.js").StylesProps> & import("../../shared/Styles.js").StylesProps & import("../WheelLottery/index.js").ContainerProps & React.RefAttributes<unknown>> & {
15
22
  readonly $$typeof: symbol;
16
23
  };
17
24
  export default _default;
18
- export { MarqueeItem, MarqueeImageContent, MarqueeTextContent };
25
+ export { MarqueeItem, MarqueeImageContent, MarqueeTextContent, MarqueeIconAndTextContent, MarqueePictureContent };
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var N=Object.create;var i=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var v=(e,t)=>{for(var a in t)i(e,a,{get:t[a],enumerable:!0})},w=(e,t,a,p)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of S(t))!g.call(e,o)&&o!==a&&i(e,o,{get:()=>t[o],enumerable:!(p=C(t,o))||p.enumerable});return e};var I=(e,t,a)=>(a=e!=null?N(R(e)):{},w(t||!e||!e.__esModule?i(a,"default",{value:e,enumerable:!0}):a,e)),P=e=>w(i({},"__esModule",{value:!0}),e);var k={};v(k,{MarqueeImageContent:()=>l,MarqueeItem:()=>m,MarqueeTextContent:()=>u,default:()=>b});module.exports=P(k);var r=require("react/jsx-runtime"),s=I(require("react")),c=require("../../components/index.js"),n=require("../../helpers/utils.js"),x=require("../../shared/Styles.js"),f=require("swiper/react"),D=require("swiper/css"),M=require("swiper/modules"),y=require("../../hooks/useExposure.js");const T="image",h="marquee",d=s.default.forwardRef(({data:e,className:t},a)=>{const p=(0,s.useRef)(null);return(0,s.useImperativeHandle)(a,()=>p.current),(0,y.useExposure)(p,{componentType:T,componentName:h}),(0,r.jsx)(f.Swiper,{direction:"horizontal",className:(0,n.cn)("laptop:h-[80px] h-[48px] w-full items-center [&_.swiper-slide]:!w-auto [&_.swiper-wrapper]:!ease-linear",t),ref:p,id:"Marquee"+e?.key,modules:[M.Autoplay],autoplay:{delay:1,disableOnInteraction:!1,reverseDirection:e?.reverseDirection},loop:!0,allowTouchMove:!1,centeredSlides:!0,slidesPerView:"auto",speed:e?.speed||3e3,breakpoints:{0:{spaceBetween:"24px"},1025:{spaceBetween:"64px"}},children:e?.items?.map((o,q)=>(0,r.jsx)(f.SwiperSlide,{children:(0,r.jsx)(m,{data:o})},o?.id+"SwiperSlide"+q))})});d.displayName="Marquee";const m=({data:e,configuration:t})=>(0,r.jsxs)(r.Fragment,{children:[e.type==="image"&&(0,r.jsx)(l,{image:e?.image,imageClassName:t?.imageClassName}),e.type==="text"&&(0,r.jsx)(u,{text:e?.text,textClassName:t?.textClassName})]});m.displayName="MarqueeItem";const l=({image:e,imageClassName:t})=>(0,r.jsx)("div",{className:"laptop:w-[120px] h-full w-[72px] shrink-0",children:(0,r.jsx)(c.Picture,{source:e?.url,alt:e?.alt||"",imgClassName:(0,n.cn)("object-cover",t)})});l.displayName="MarqueeImageContent";const u=s.default.forwardRef(({text:e,textClassName:t},a)=>(0,r.jsx)(c.Text,{as:"div",ref:a,html:e,className:(0,n.cn)("text-lines-2 flex size-full items-center justify-center font-medium leading-[1.2]",t)}));u.displayName="MarqueeTextContent";var b=(0,x.withLayout)(d);
1
+ "use strict";"use client";var E=Object.create;var v=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,A=Object.prototype.hasOwnProperty;var D=(e,t)=>{for(var a in t)v(e,a,{get:t[a],enumerable:!0})},y=(e,t,a,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of H(t))!A.call(e,l)&&l!==a&&v(e,l,{get:()=>t[l],enumerable:!(o=L(t,l))||o.enumerable});return e};var W=(e,t,a)=>(a=e!=null?E(j(e)):{},y(t||!e||!e.__esModule?v(a,"default",{value:e,enumerable:!0}):a,e)),$=e=>y(v({},"__esModule",{value:!0}),e);var B={};D(B,{MarqueeIconAndTextContent:()=>N,MarqueeImageContent:()=>M,MarqueeItem:()=>d,MarqueePictureContent:()=>h,MarqueeTextContent:()=>C,default:()=>_});module.exports=$(B);var s=require("react/jsx-runtime"),r=W(require("react")),m=require("../../components/index.js"),i=require("../../helpers/utils.js"),k=require("../../shared/Styles.js"),G=require("swiper/css"),P=require("../../hooks/useExposure.js");const O="image",S="marquee",g=r.default.forwardRef(({data:{items:e=[],speed:t=3e3,reverseDirection:a=!1,key:o}={},className:l},T)=>{const c=(0,r.useRef)(null),q=(0,r.useRef)(null);(0,r.useImperativeHandle)(T,()=>c.current),(0,P.useExposure)(c,{componentType:O,componentName:S});const w=`${t*5}ms`,x="clamp(24px, 4vw, 64px)",[I,R]=(0,r.useState)(2);return(0,r.useLayoutEffect)(()=>{const n=q.current;if(!n)return;const p=()=>{const f=n.offsetWidth;if(f===0)return;const b=window.innerWidth,z=Math.ceil(b/f);R(Math.max(2,z))};p(),c.current?.style.setProperty("--track-width",`${n.offsetWidth}px`);const u=new ResizeObserver(()=>{p(),c.current?.style.setProperty("--track-width",`${n.offsetWidth}px`)});return u.observe(n),()=>u.disconnect()},[e]),(0,s.jsx)("div",{ref:c,id:o?`Marquee-${o}`:void 0,className:(0,i.cn)("w-full",l),children:(0,s.jsxs)("div",{className:(0,i.cn)("flex h-full w-max items-center",a?"animate-marquee-reverse":"animate-marquee"),style:{"--marquee-duration":w},children:[(0,s.jsx)("div",{ref:q,className:"flex h-full shrink-0 items-center",style:{gap:x,paddingRight:x},children:e.map((n,p)=>(0,s.jsx)("div",{className:"shrink-0",children:(0,s.jsx)(d,{data:n})},(n?.id??"")+"-orig-"+p))}),Array.from({length:I}).map((n,p)=>(0,s.jsx)("div",{className:"flex h-full shrink-0 items-center",style:{gap:x,paddingRight:x},"aria-hidden":"true",children:e.map((u,f)=>(0,s.jsx)("div",{className:"shrink-0",children:(0,s.jsx)(d,{data:u})},(u?.id??"")+"-copy-"+p+"-"+f))},`copy-group-${p}`))]})})});g.displayName="Marquee";const d=({data:e,configuration:t})=>(0,s.jsxs)(s.Fragment,{children:[e.type==="image"&&(0,s.jsx)(M,{image:e?.image,imageClassName:t?.imageClassName}),e.type==="text"&&(0,s.jsx)(C,{text:e?.text,textClassName:t?.textClassName}),e.type==="iconAndText"&&(0,s.jsx)(N,{icon:e?.iconImage,text:e?.iconText,iconClassName:t?.iconClassName,textClassName:t?.textClassName}),e.type==="picture"&&(0,s.jsx)(h,{pictureImage:e?.pictureImage,pictureClassName:t?.pictureClassName})]});d.displayName="MarqueeItem";const M=({image:e,imageClassName:t})=>(0,s.jsx)("div",{className:"laptop:w-[120px] h-full w-[72px] shrink-0",children:(0,s.jsx)(m.Picture,{source:e?.url,alt:e?.alt||"",imgClassName:(0,i.cn)("object-cover",t)})});M.displayName="MarqueeImageContent";const C=r.default.forwardRef(({text:e,textClassName:t},a)=>(0,s.jsx)(m.Text,{as:"div",ref:a,html:e,className:(0,i.cn)("text-lines-2 flex size-full items-center justify-center font-bold leading-[1.2]",t)}));C.displayName="MarqueeTextContent";const N=({icon:e,text:t,iconClassName:a,textClassName:o})=>(0,s.jsxs)("div",{className:"laptop:h-[72px] laptop:gap-2 flex h-[48px] items-center gap-1",children:[e&&(0,s.jsx)("img",{src:e?.url,alt:e?.alt||"",className:(0,i.cn)("desktop:size-6 size-5 shrink-0 object-contain",a)}),t&&(0,s.jsx)(m.Text,{as:"div",html:t,className:(0,i.cn)("laptop:text-[16px] lg-desktop::text-[18px] flex h-full items-center text-[14px] ",o)})]});N.displayName="MarqueeIconAndTextContent";const h=({pictureImage:e,pictureClassName:t})=>(0,s.jsx)("div",{className:"lg-desktop:size-[128px] desktop:size-[112px] laptop:size-[96px] tablet:size-[72px] size-[72px] shrink-0",children:(0,s.jsx)(m.Picture,{source:e?.url,alt:e?.alt||"",className:"w-full",imgClassName:(0,i.cn)("object-contain",t)})});h.displayName="MarqueePictureContent";var _=(0,k.withLayout)(g);
2
2
  //# sourceMappingURL=Marquee.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/Marquee/Marquee.tsx"],
4
- "sourcesContent": ["'use client'\nimport React, { useImperativeHandle, useRef, type RefObject } from 'react'\nimport { Picture, Text } from '../../components/index.js'\nimport { cn } from '../../helpers/utils.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport type { MarqueeProps, MarqueeItemProps, MarqueeImageContentProps, MarqueeTextContentProps } from './type.js'\n\nimport { Swiper, SwiperSlide, type SwiperRef } from 'swiper/react'\nimport 'swiper/css'\nimport { Autoplay } from 'swiper/modules'\nimport { useExposure } from '../../hooks/useExposure.js'\n\nconst componentType = 'image'\nconst componentName = 'marquee'\n\nconst Marquee = React.forwardRef<SwiperRef, MarqueeProps>(({ data, className }, ref) => {\n const innerRef = useRef<SwiperRef>(null)\n useImperativeHandle(ref, () => innerRef.current as SwiperRef)\n\n useExposure(innerRef as unknown as RefObject<HTMLDivElement>, {\n componentType: componentType,\n componentName: componentName,\n })\n\n return (\n <Swiper\n direction=\"horizontal\"\n className={cn(\n 'laptop:h-[80px] h-[48px] w-full items-center [&_.swiper-slide]:!w-auto [&_.swiper-wrapper]:!ease-linear',\n className\n )}\n ref={innerRef}\n id={'Marquee' + data?.key}\n modules={[Autoplay]}\n autoplay={{\n delay: 1,\n disableOnInteraction: false,\n reverseDirection: data?.reverseDirection,\n }}\n loop={true}\n allowTouchMove={false}\n centeredSlides\n slidesPerView=\"auto\"\n speed={data?.speed || 3000}\n breakpoints={{\n 0: {\n spaceBetween: '24px',\n },\n 1025: {\n spaceBetween: '64px',\n },\n }}\n >\n {data?.items?.map((item, index) => (\n <SwiperSlide key={item?.id + 'SwiperSlide' + index}>\n <MarqueeItem data={item} />\n </SwiperSlide>\n ))}\n </Swiper>\n )\n})\nMarquee.displayName = 'Marquee'\n\nconst MarqueeItem = ({ data, configuration }: MarqueeItemProps) => {\n return (\n <>\n {data.type === 'image' && (\n <MarqueeImageContent image={data?.image} imageClassName={configuration?.imageClassName} />\n )}\n {data.type === 'text' && <MarqueeTextContent text={data?.text} textClassName={configuration?.textClassName} />}\n </>\n )\n}\n\nMarqueeItem.displayName = 'MarqueeItem'\n\nconst MarqueeImageContent = ({ image, imageClassName }: MarqueeImageContentProps) => {\n return (\n <div className=\"laptop:w-[120px] h-full w-[72px] shrink-0\">\n <Picture source={image?.url} alt={image?.alt || ''} imgClassName={cn('object-cover', imageClassName)} />\n </div>\n )\n}\n\nMarqueeImageContent.displayName = 'MarqueeImageContent'\n\nconst MarqueeTextContent = React.forwardRef<HTMLDivElement, MarqueeTextContentProps>(({ text, textClassName }, ref) => {\n return (\n <Text\n as=\"div\"\n ref={ref}\n html={text}\n className={cn('text-lines-2 flex size-full items-center justify-center font-medium leading-[1.2]', textClassName)}\n />\n )\n})\n\nMarqueeTextContent.displayName = 'MarqueeTextContent'\n\nexport default withLayout(Marquee)\nexport { MarqueeItem, MarqueeImageContent, MarqueeTextContent }\n"],
5
- "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,EAAA,gBAAAC,EAAA,uBAAAC,EAAA,YAAAC,IAAA,eAAAC,EAAAN,GAuDU,IAAAO,EAAA,6BAtDVC,EAAmE,oBACnEC,EAA8B,qCAC9BC,EAAmB,kCACnBC,EAA2B,kCAG3BH,EAAoD,wBACpDI,EAAO,sBACPC,EAAyB,0BACzBC,EAA4B,sCAE5B,MAAMC,EAAgB,QAChBC,EAAgB,UAEhBC,EAAU,EAAAC,QAAM,WAAoC,CAAC,CAAE,KAAAC,EAAM,UAAAC,CAAU,EAAGC,IAAQ,CACtF,MAAMC,KAAW,UAAkB,IAAI,EACvC,gCAAoBD,EAAK,IAAMC,EAAS,OAAoB,KAE5D,eAAYA,EAAkD,CAC5D,cAAeP,EACf,cAAeC,CACjB,CAAC,KAGC,OAAC,UACC,UAAU,aACV,aAAW,MACT,0GACAI,CACF,EACA,IAAKE,EACL,GAAI,UAAYH,GAAM,IACtB,QAAS,CAAC,UAAQ,EAClB,SAAU,CACR,MAAO,EACP,qBAAsB,GACtB,iBAAkBA,GAAM,gBAC1B,EACA,KAAM,GACN,eAAgB,GAChB,eAAc,GACd,cAAc,OACd,MAAOA,GAAM,OAAS,IACtB,YAAa,CACX,EAAG,CACD,aAAc,MAChB,EACA,KAAM,CACJ,aAAc,MAChB,CACF,EAEC,SAAAA,GAAM,OAAO,IAAI,CAACI,EAAMC,OACvB,OAAC,eACC,mBAACrB,EAAA,CAAY,KAAMoB,EAAM,GADTA,GAAM,GAAK,cAAgBC,CAE7C,CACD,EACH,CAEJ,CAAC,EACDP,EAAQ,YAAc,UAEtB,MAAMd,EAAc,CAAC,CAAE,KAAAgB,EAAM,cAAAM,CAAc,OAEvC,oBACG,UAAAN,EAAK,OAAS,YACb,OAACjB,EAAA,CAAoB,MAAOiB,GAAM,MAAO,eAAgBM,GAAe,eAAgB,EAEzFN,EAAK,OAAS,WAAU,OAACf,EAAA,CAAmB,KAAMe,GAAM,KAAM,cAAeM,GAAe,cAAe,GAC9G,EAIJtB,EAAY,YAAc,cAE1B,MAAMD,EAAsB,CAAC,CAAE,MAAAwB,EAAO,eAAAC,CAAe,OAEjD,OAAC,OAAI,UAAU,4CACb,mBAAC,WAAQ,OAAQD,GAAO,IAAK,IAAKA,GAAO,KAAO,GAAI,gBAAc,MAAG,eAAgBC,CAAc,EAAG,EACxG,EAIJzB,EAAoB,YAAc,sBAElC,MAAME,EAAqB,EAAAc,QAAM,WAAoD,CAAC,CAAE,KAAAU,EAAM,cAAAC,CAAc,EAAGR,OAE3G,OAAC,QACC,GAAG,MACH,IAAKA,EACL,KAAMO,EACN,aAAW,MAAG,oFAAqFC,CAAa,EAClH,CAEH,EAEDzB,EAAmB,YAAc,qBAEjC,IAAOC,KAAQ,cAAWY,CAAO",
6
- "names": ["Marquee_exports", "__export", "MarqueeImageContent", "MarqueeItem", "MarqueeTextContent", "Marquee_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_components", "import_utils", "import_Styles", "import_css", "import_modules", "import_useExposure", "componentType", "componentName", "Marquee", "React", "data", "className", "ref", "innerRef", "item", "index", "configuration", "image", "imageClassName", "text", "textClassName"]
4
+ "sourcesContent": ["'use client'\nimport React, { useRef, useImperativeHandle, useLayoutEffect, useState, type RefObject } from 'react'\nimport { Picture, Text } from '../../components/index.js'\nimport { cn } from '../../helpers/utils.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport type {\n MarqueeProps,\n MarqueeItemProps,\n MarqueeImageContentProps,\n MarqueeTextContentProps,\n MarqueeIconAndTextContentProps,\n MarqueePictureContentProps,\n} from './type.js'\n\nimport 'swiper/css'\n\nimport { useExposure } from '../../hooks/useExposure.js'\n\nconst componentType = 'image'\nconst componentName = 'marquee'\n\nconst Marquee = React.forwardRef<HTMLDivElement, MarqueeProps>(\n ({ data: { items = [], speed = 3000, reverseDirection = false, key: dataKey } = {}, className }, ref) => {\n const innerRef = useRef<HTMLDivElement>(null)\n const trackRef = useRef<HTMLDivElement>(null)\n\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement)\n\n useExposure(innerRef as unknown as RefObject<HTMLDivElement>, {\n componentType,\n componentName,\n })\n\n const duration = `${speed * 5}ms`\n const gap = 'clamp(24px, 4vw, 64px)'\n\n const [copies, setCopies] = useState(2)\n\n useLayoutEffect(() => {\n const track = trackRef.current\n if (!track) return\n\n const calcCopies = () => {\n const trackWidth = track.offsetWidth\n if (trackWidth === 0) return\n const viewportWidth = window.innerWidth\n const minCopies = Math.ceil(viewportWidth / trackWidth)\n setCopies(Math.max(2, minCopies))\n }\n\n calcCopies()\n innerRef.current?.style.setProperty('--track-width', `${track.offsetWidth}px`)\n\n const ro = new ResizeObserver(() => {\n calcCopies()\n innerRef.current?.style.setProperty('--track-width', `${track.offsetWidth}px`)\n })\n ro.observe(track)\n return () => ro.disconnect()\n }, [items])\n\n return (\n <div ref={innerRef} id={dataKey ? `Marquee-${dataKey}` : undefined} className={cn('w-full', className)}>\n <div\n className={cn(\n 'flex h-full w-max items-center',\n reverseDirection ? 'animate-marquee-reverse' : 'animate-marquee'\n )}\n style={{ '--marquee-duration': duration } as React.CSSProperties}\n >\n {/* \u539F\u59CB\u8F68\u9053\uFF1A\u7528 ref \u6D4B\u91CF\u771F\u5B9E\u5BBD\u5EA6 */}\n <div ref={trackRef} className=\"flex h-full shrink-0 items-center\" style={{ gap, paddingRight: gap }}>\n {items.map((item, index) => (\n <div key={(item?.id ?? '') + '-orig-' + index} className=\"shrink-0\">\n <MarqueeItem data={item} />\n </div>\n ))}\n </div>\n\n {Array.from({ length: copies }).map((_, copyIndex) => (\n <div\n key={`copy-group-${copyIndex}`}\n className=\"flex h-full shrink-0 items-center\"\n style={{ gap, paddingRight: gap }}\n aria-hidden=\"true\"\n >\n {items.map((item, index) => (\n <div key={(item?.id ?? '') + '-copy-' + copyIndex + '-' + index} className=\"shrink-0\">\n <MarqueeItem data={item} />\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n )\n }\n)\n\nMarquee.displayName = 'Marquee'\n\n// \u2500\u2500\u2500 Sub-components \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 MarqueeItem = ({ data, configuration }: MarqueeItemProps) => {\n return (\n <>\n {data.type === 'image' && (\n <MarqueeImageContent image={data?.image} imageClassName={configuration?.imageClassName} />\n )}\n {data.type === 'text' && <MarqueeTextContent text={data?.text} textClassName={configuration?.textClassName} />}\n {data.type === 'iconAndText' && (\n <MarqueeIconAndTextContent\n icon={data?.iconImage}\n text={data?.iconText}\n iconClassName={configuration?.iconClassName}\n textClassName={configuration?.textClassName}\n />\n )}\n {data.type === 'picture' && (\n <MarqueePictureContent pictureImage={data?.pictureImage} pictureClassName={configuration?.pictureClassName} />\n )}\n </>\n )\n}\n\nMarqueeItem.displayName = 'MarqueeItem'\n\nconst MarqueeImageContent = ({ image, imageClassName }: MarqueeImageContentProps) => {\n return (\n <div className=\"laptop:w-[120px] h-full w-[72px] shrink-0\">\n <Picture source={image?.url} alt={image?.alt || ''} imgClassName={cn('object-cover', imageClassName)} />\n </div>\n )\n}\n\nMarqueeImageContent.displayName = 'MarqueeImageContent'\n\nconst MarqueeTextContent = React.forwardRef<HTMLDivElement, MarqueeTextContentProps>(({ text, textClassName }, ref) => {\n return (\n <Text\n as=\"div\"\n ref={ref}\n html={text}\n className={cn('text-lines-2 flex size-full items-center justify-center font-bold leading-[1.2]', textClassName)}\n />\n )\n})\n\nMarqueeTextContent.displayName = 'MarqueeTextContent'\n\nconst MarqueeIconAndTextContent = ({ icon, text, iconClassName, textClassName }: MarqueeIconAndTextContentProps) => {\n return (\n <div className=\"laptop:h-[72px] laptop:gap-2 flex h-[48px] items-center gap-1\">\n {icon && (\n <img\n src={icon?.url}\n alt={icon?.alt || ''}\n className={cn('desktop:size-6 size-5 shrink-0 object-contain', iconClassName)}\n />\n )}\n {text && (\n <Text\n as=\"div\"\n html={text}\n className={cn(\n 'laptop:text-[16px] lg-desktop::text-[18px] flex h-full items-center text-[14px] ',\n textClassName\n )}\n />\n )}\n </div>\n )\n}\n\nMarqueeIconAndTextContent.displayName = 'MarqueeIconAndTextContent'\n\nconst MarqueePictureContent = ({ pictureImage, pictureClassName }: MarqueePictureContentProps) => {\n return (\n <div className=\"lg-desktop:size-[128px] desktop:size-[112px] laptop:size-[96px] tablet:size-[72px] size-[72px] shrink-0\">\n <Picture\n source={pictureImage?.url}\n alt={pictureImage?.alt || ''}\n className=\"w-full\"\n imgClassName={cn('object-contain', pictureClassName)}\n />\n </div>\n )\n}\n\nMarqueePictureContent.displayName = 'MarqueePictureContent'\n\nexport default withLayout(Marquee)\nexport { MarqueeItem, MarqueeImageContent, MarqueeTextContent, MarqueeIconAndTextContent, MarqueePictureContent }\n"],
5
+ "mappings": "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",
6
+ "names": ["Marquee_exports", "__export", "MarqueeIconAndTextContent", "MarqueeImageContent", "MarqueeItem", "MarqueePictureContent", "MarqueeTextContent", "Marquee_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_components", "import_utils", "import_Styles", "import_css", "import_useExposure", "componentType", "componentName", "Marquee", "React", "items", "speed", "reverseDirection", "dataKey", "className", "ref", "innerRef", "trackRef", "duration", "gap", "copies", "setCopies", "track", "calcCopies", "trackWidth", "viewportWidth", "minCopies", "ro", "item", "index", "_", "copyIndex", "data", "configuration", "image", "imageClassName", "text", "textClassName", "icon", "iconClassName", "pictureImage", "pictureClassName"]
7
7
  }
@@ -1,2 +1,2 @@
1
1
  export { default } from './Marquee.js';
2
- export { MarqueeItem, MarqueeImageContent, MarqueeTextContent } from './Marquee.js';
2
+ export { MarqueeItem, MarqueeImageContent, MarqueeTextContent, MarqueeIconAndTextContent, MarqueePictureContent, } from './Marquee.js';
@@ -1,2 +1,2 @@
1
- "use strict";var q=Object.create;var m=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var p=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var I=(e,t)=>{for(var r in t)m(e,r,{get:t[r],enumerable:!0})},u=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of M(t))!C.call(e,a)&&a!==r&&m(e,a,{get:()=>t[a],enumerable:!(n=x(t,a))||n.enumerable});return e};var d=(e,t,r)=>(r=e!=null?q(p(e)):{},u(t||!e||!e.__esModule?m(r,"default",{value:e,enumerable:!0}):r,e)),g=e=>u(m({},"__esModule",{value:!0}),e);var l={};I(l,{MarqueeImageContent:()=>o.MarqueeImageContent,MarqueeItem:()=>o.MarqueeItem,MarqueeTextContent:()=>o.MarqueeTextContent,default:()=>f.default});module.exports=g(l);var f=d(require("./Marquee.js")),o=require("./Marquee.js");
1
+ "use strict";var m=Object.create;var a=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var c=(e,t)=>{for(var r in t)a(e,r,{get:t[r],enumerable:!0})},q=(e,t,r,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of C(t))!I.call(e,o)&&o!==r&&a(e,o,{get:()=>t[o],enumerable:!(u=x(t,o))||u.enumerable});return e};var d=(e,t,r)=>(r=e!=null?m(f(e)):{},q(t||!e||!e.__esModule?a(r,"default",{value:e,enumerable:!0}):r,e)),p=e=>q(a({},"__esModule",{value:!0}),e);var T={};c(T,{MarqueeIconAndTextContent:()=>n.MarqueeIconAndTextContent,MarqueeImageContent:()=>n.MarqueeImageContent,MarqueeItem:()=>n.MarqueeItem,MarqueePictureContent:()=>n.MarqueePictureContent,MarqueeTextContent:()=>n.MarqueeTextContent,default:()=>M.default});module.exports=p(T);var M=d(require("./Marquee.js")),n=require("./Marquee.js");
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/Marquee/index.ts"],
4
- "sourcesContent": ["export { default } from './Marquee.js'\nexport { MarqueeItem, MarqueeImageContent, MarqueeTextContent } from './Marquee.js'\n"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gKAAAE,EAAAF,GAAA,IAAAG,EAAwB,2BACxBA,EAAqE",
4
+ "sourcesContent": ["export { default } from './Marquee.js'\nexport {\n MarqueeItem,\n MarqueeImageContent,\n MarqueeTextContent,\n MarqueeIconAndTextContent,\n MarqueePictureContent,\n} from './Marquee.js'\n"],
5
+ "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4QAAAE,EAAAF,GAAA,IAAAG,EAAwB,2BACxBA,EAMO",
6
6
  "names": ["Marquee_exports", "__export", "__toCommonJS", "import_Marquee"]
7
7
  }
@@ -2,9 +2,11 @@ import type { Img } from '../../types/props.js';
2
2
  interface MarqueeProps {
3
3
  data: {
4
4
  key?: string;
5
- /** 是否反向 */
5
+ /** 是否反向滚动 */
6
6
  reverseDirection?: boolean;
7
- /** 速度 */
7
+ /**
8
+ * 一轮动画时长(ms)。数值越小滚动越快,默认 8000(即 8s 完成一轮)
9
+ */
8
10
  speed?: number;
9
11
  /** 跑马灯内容 */
10
12
  items: any[];
@@ -13,13 +15,19 @@ interface MarqueeProps {
13
15
  }
14
16
  interface MarqueeItemProps {
15
17
  data: {
16
- type: 'image' | 'text';
18
+ id?: string;
19
+ type: 'image' | 'text' | 'iconAndText' | 'picture';
17
20
  image?: Img;
18
21
  text?: string;
22
+ iconImage?: Img;
23
+ iconText?: string;
24
+ pictureImage?: Img;
19
25
  };
20
26
  configuration?: {
21
27
  imageClassName?: string;
22
28
  textClassName?: string;
29
+ iconClassName?: string;
30
+ pictureClassName?: string;
23
31
  };
24
32
  }
25
33
  interface MarqueeImageContentProps {
@@ -30,4 +38,14 @@ interface MarqueeTextContentProps {
30
38
  text?: string;
31
39
  textClassName?: string;
32
40
  }
33
- export type { MarqueeProps, MarqueeItemProps, MarqueeImageContentProps, MarqueeTextContentProps };
41
+ interface MarqueeIconAndTextContentProps {
42
+ icon?: Img;
43
+ text?: string;
44
+ iconClassName?: string;
45
+ textClassName?: string;
46
+ }
47
+ interface MarqueePictureContentProps {
48
+ pictureImage?: Img;
49
+ pictureClassName?: string;
50
+ }
51
+ export type { MarqueeProps, MarqueeItemProps, MarqueeImageContentProps, MarqueeTextContentProps, MarqueeIconAndTextContentProps, MarqueePictureContentProps, };
@@ -1,2 +1,2 @@
1
- "use strict";var s=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var o=Object.prototype.hasOwnProperty;var g=(t,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of m(e))!o.call(t,r)&&r!==n&&s(t,r,{get:()=>e[r],enumerable:!(a=i(e,r))||a.enumerable});return t};var p=t=>g(s({},"__esModule",{value:!0}),t);var u={};module.exports=p(u);
1
+ "use strict";var n=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var o=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var m=(t,e,s,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of o(e))!g.call(t,r)&&r!==s&&n(t,r,{get:()=>e[r],enumerable:!(a=i(e,r))||a.enumerable});return t};var p=t=>m(n({},"__esModule",{value:!0}),t);var c={};module.exports=p(c);
2
2
  //# sourceMappingURL=type.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/Marquee/type.ts"],
4
- "sourcesContent": ["import type { Img } from '../../types/props.js'\n\ninterface MarqueeProps {\n data: {\n key?: string\n /** \u662F\u5426\u53CD\u5411 */\n reverseDirection?: boolean\n /** \u901F\u5EA6 */\n speed?: number\n /** \u8DD1\u9A6C\u706F\u5185\u5BB9 */\n items: any[]\n }\n className?: string\n}\n\ninterface MarqueeItemProps {\n data: {\n type: 'image' | 'text'\n image?: Img\n text?: string\n }\n configuration?: {\n imageClassName?: string\n textClassName?: string\n }\n}\n\ninterface MarqueeImageContentProps {\n image?: Img\n imageClassName?: string\n}\n\ninterface MarqueeTextContentProps {\n text?: string\n textClassName?: string\n}\n\nexport type { MarqueeProps, MarqueeItemProps, MarqueeImageContentProps, MarqueeTextContentProps }\n"],
4
+ "sourcesContent": ["import type { Img } from '../../types/props.js'\n\ninterface MarqueeProps {\n data: {\n key?: string\n /** \u662F\u5426\u53CD\u5411\u6EDA\u52A8 */\n reverseDirection?: boolean\n /**\n * \u4E00\u8F6E\u52A8\u753B\u65F6\u957F\uFF08ms\uFF09\u3002\u6570\u503C\u8D8A\u5C0F\u6EDA\u52A8\u8D8A\u5FEB\uFF0C\u9ED8\u8BA4 8000\uFF08\u5373 8s \u5B8C\u6210\u4E00\u8F6E\uFF09\n */\n speed?: number\n /** \u8DD1\u9A6C\u706F\u5185\u5BB9 */\n items: any[]\n }\n className?: string\n}\n\ninterface MarqueeItemProps {\n data: {\n id?: string\n type: 'image' | 'text' | 'iconAndText' | 'picture'\n image?: Img\n text?: string\n iconImage?: Img\n iconText?: string\n pictureImage?: Img\n }\n configuration?: {\n imageClassName?: string\n textClassName?: string\n iconClassName?: string\n pictureClassName?: string\n }\n}\n\ninterface MarqueeImageContentProps {\n image?: Img\n imageClassName?: string\n}\n\ninterface MarqueeTextContentProps {\n text?: string\n textClassName?: string\n}\n\ninterface MarqueeIconAndTextContentProps {\n icon?: Img\n text?: string\n iconClassName?: string\n textClassName?: string\n}\n\ninterface MarqueePictureContentProps {\n pictureImage?: Img\n pictureClassName?: string\n}\n\nexport type {\n MarqueeProps,\n MarqueeItemProps,\n MarqueeImageContentProps,\n MarqueeTextContentProps,\n MarqueeIconAndTextContentProps,\n MarqueePictureContentProps,\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["type_exports", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var B=Object.create;var n=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var Q=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var J=(e,i)=>{for(var o in i)n(e,o,{get:i[o],enumerable:!0})},c=(e,i,o,t)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of Q(i))!G.call(e,r)&&r!==o&&n(e,r,{get:()=>i[r],enumerable:!(t=O(i,r))||t.enumerable});return e};var K=(e,i,o)=>(o=e!=null?B(F(e)):{},c(i||!e||!e.__esModule?n(o,"default",{value:e,enumerable:!0}):o,e)),U=e=>c(n({},"__esModule",{value:!0}),e);var X={};J(X,{default:()=>W});module.exports=U(X);var d=require("react/jsx-runtime"),y=K(require("react")),s=require("react-responsive"),f=require("../../components/index.js"),a=require("../../helpers/index.js");const p=y.default.forwardRef(({pcImage:e,desktopImage:i,laptopImage:o,padImage:t,mobileImage:r,className:m,videoClassName:M,imgClassName:v,muted:T=!0,loop:P=!0,playsInline:x=!0,autoPlay:b=!0,poster:w,videoRef:N,onVideoPlay:h,onVideoPause:R,onVideoEnded:q,...E},L)=>{const Y=(0,s.useMediaQuery)({query:"(max-width: 767px)"}),V=(0,s.useMediaQuery)({query:"(min-width: 768px)"}),j=(0,s.useMediaQuery)({query:"(min-width: 1025px)"}),H=(0,s.useMediaQuery)({query:"(min-width: 1440px)"}),$=(0,s.useMediaQuery)({query:"(min-width: 1920px)"}),z=[e,i,o,t,r].some(A=>A?.mimeType==="video/mp4"),u=$?e:H?i:j?o:V?t:r,l=u||e||i||o||t||r,C=l?.mimeType==="video/mp4"?l.url:void 0,D=w||(l?.mimeType!=="video/mp4"?l?.url:void 0),S=[r?.url&&`${r.url} 768`,t?.url&&`${t.url} 1025`,o?.url&&`${o.url} 1440`,i?.url&&`${i.url} 1920`,e?.url].filter(Boolean).reverse().join(" , ");return(0,d.jsx)("div",{ref:L,className:(0,a.cn)("media-wrapper",m),...E,children:z?(0,d.jsx)("video",{ref:N,src:C,poster:D,className:(0,a.cn)("size-full object-cover",M),muted:T,loop:P,playsInline:x,autoPlay:b,"aria-label":u?.alt||"",onPlay:h,onPause:R,onEnded:q}):(0,d.jsx)(f.Picture,{className:"size-full",imgClassName:(0,a.cn)("size-full object-cover",v),alt:e?.alt||i?.alt||o?.alt||t?.alt||r?.alt||"",source:S})})});p.displayName="Media";var W=p;
1
+ "use strict";"use client";var B=Object.create;var n=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var Q=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var J=(e,i)=>{for(var o in i)n(e,o,{get:i[o],enumerable:!0})},c=(e,i,o,t)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of Q(i))!G.call(e,r)&&r!==o&&n(e,r,{get:()=>i[r],enumerable:!(t=O(i,r))||t.enumerable});return e};var K=(e,i,o)=>(o=e!=null?B(F(e)):{},c(i||!e||!e.__esModule?n(o,"default",{value:e,enumerable:!0}):o,e)),U=e=>c(n({},"__esModule",{value:!0}),e);var X={};J(X,{default:()=>W});module.exports=U(X);var d=require("react/jsx-runtime"),y=K(require("react")),s=require("react-responsive"),m=require("../../components/index.js"),a=require("../../helpers/index.js");const p=y.default.forwardRef(({pcImage:e,desktopImage:i,laptopImage:o,padImage:t,mobileImage:r,className:f,videoClassName:M,imgClassName:v,muted:x=!0,loop:T=!0,playsInline:P=!0,autoPlay:w=!0,poster:h,videoRef:b,onVideoPlay:N,onVideoPause:R,onVideoEnded:q,...E},L)=>{const Y=(0,s.useMediaQuery)({query:"(max-width: 767px)"}),V=(0,s.useMediaQuery)({query:"(min-width: 768px) and (max-width: 1024px)"}),j=(0,s.useMediaQuery)({query:"(min-width: 1025px) and (max-width: 1439px)"}),H=(0,s.useMediaQuery)({query:"(min-width: 1440px) and (max-width: 1919px)"}),$=(0,s.useMediaQuery)({query:"(min-width: 1920px)"}),z=[e,i,o,t,r].some(A=>A?.mimeType==="video/mp4"),u=$?e:H?i:j?o:V?t:r,l=u||e||i||o||t||r,C=l?.mimeType==="video/mp4"?l.url:void 0,D=h||(l?.mimeType!=="video/mp4"?l?.url:void 0),S=[r?.url&&`${r.url} 768`,t?.url&&`${t.url} 1025`,o?.url&&`${o.url} 1440`,i?.url&&`${i.url} 1920`,e?.url].filter(Boolean).reverse().join(" , ");return(0,d.jsx)("div",{ref:L,className:(0,a.cn)("media-wrapper",f),...E,children:z?(0,d.jsx)("video",{ref:b,src:C,poster:D,className:(0,a.cn)("size-full object-cover",M),muted:x,loop:T,playsInline:P,autoPlay:w,"aria-label":u?.alt||"",onPlay:N,onPause:R,onEnded:q}):(0,d.jsx)(m.Picture,{className:"size-full",imgClassName:(0,a.cn)("size-full object-cover",v),alt:e?.alt||i?.alt||o?.alt||t?.alt||r?.alt||"",source:S})})});p.displayName="Media";var W=p;
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/Media/index.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport React from 'react'\nimport { useMediaQuery } from 'react-responsive'\nimport { Picture } from '../../components/index.js'\nimport type { Media as MediaType } from '../../types/props.js'\nimport { cn } from '../../helpers/index.js'\n\nexport interface MediaProps extends React.HTMLAttributes<HTMLDivElement> {\n /** PC\u7AEF\u5A92\u4F53\uFF08\u22651920px\uFF09 */\n pcImage?: MediaType\n /** \u5927\u684C\u9762\u5A92\u4F53\uFF08\u22651440px\uFF09 */\n desktopImage?: MediaType\n /** \u5C0F\u684C\u9762\u5A92\u4F53\uFF08\u22651025px\uFF09 */\n laptopImage?: MediaType\n /** \u5E73\u677F\u7AEF\u5A92\u4F53\uFF08\u2265768px\uFF09 */\n padImage?: MediaType\n /** \u79FB\u52A8\u7AEF\u5A92\u4F53\uFF08<768px\uFF09 */\n mobileImage?: MediaType\n /** \u89C6\u9891\u7C7B\u540D */\n videoClassName?: string\n /** \u56FE\u7247\u7C7B\u540D */\n imgClassName?: string\n /** \u662F\u5426\u9759\u97F3\u64AD\u653E\uFF08\u4EC5\u89C6\u9891\uFF09 */\n muted?: boolean\n /** \u662F\u5426\u5FAA\u73AF\u64AD\u653E\uFF08\u4EC5\u89C6\u9891\uFF09 */\n loop?: boolean\n /** \u662F\u5426\u5185\u8054\u64AD\u653E\uFF08\u4EC5\u89C6\u9891\uFF09 */\n playsInline?: boolean\n /** \u662F\u5426\u81EA\u52A8\u64AD\u653E\uFF08\u4EC5\u89C6\u9891\uFF09 */\n autoPlay?: boolean\n /** \u89C6\u9891\u9884\u89C8\u56FE */\n poster?: string\n /** \u89C6\u9891 ref\uFF08\u7528\u4E8E\u5916\u90E8\u63A7\u5236\u64AD\u653E/\u6682\u505C\uFF09 */\n videoRef?: React.RefObject<HTMLVideoElement>\n /** \u89C6\u9891\u64AD\u653E\u56DE\u8C03 */\n onVideoPlay?: () => void\n /** \u89C6\u9891\u6682\u505C\u56DE\u8C03 */\n onVideoPause?: () => void\n /** \u89C6\u9891\u7ED3\u675F\u56DE\u8C03 */\n onVideoEnded?: () => void\n}\n\n/**\n * Media - \u667A\u80FD\u5A92\u4F53\u7EC4\u4EF6\n *\n * @description \u6839\u636E\u5A92\u4F53\u7C7B\u578B\u81EA\u52A8\u9009\u62E9\u4F7F\u7528 video \u6807\u7B7E\u6216 Picture \u7EC4\u4EF6\n * \u652F\u6301\u54CD\u5E94\u5F0F\u5A92\u4F53\u6E90\uFF0C\u5982\u679C\u4EFB\u610F\u5A92\u4F53\u7C7B\u578B\u662F\u89C6\u9891\uFF0C\u5219\u4F7F\u7528 video \u6807\u7B7E\u6E32\u67D3\n */\nconst Media = React.forwardRef<HTMLDivElement, MediaProps>(\n (\n {\n pcImage,\n desktopImage,\n laptopImage,\n padImage,\n mobileImage,\n className,\n videoClassName,\n imgClassName,\n muted = true,\n loop = true,\n playsInline = true,\n autoPlay = true,\n poster,\n videoRef,\n onVideoPlay,\n onVideoPause,\n onVideoEnded,\n ...props\n },\n ref\n ) => {\n const isMobile = useMediaQuery({ query: '(max-width: 767px)' })\n const isPad = useMediaQuery({ query: '(min-width: 768px)' })\n const isLaptop = useMediaQuery({ query: '(min-width: 1025px)' })\n const isDesktop = useMediaQuery({ query: '(min-width: 1440px)' })\n const isPc = useMediaQuery({ query: '(min-width: 1920px)' })\n\n const allImages = [pcImage, desktopImage, laptopImage, padImage, mobileImage]\n const hasVideo = allImages.some(media => media?.mimeType === 'video/mp4')\n\n const currentMedia = isPc\n ? pcImage\n : isDesktop\n ? desktopImage\n : isLaptop\n ? laptopImage\n : isPad\n ? padImage\n : mobileImage\n\n const fallbackMedia = currentMedia || pcImage || desktopImage || laptopImage || padImage || mobileImage\n\n const videoSrc = fallbackMedia?.mimeType === 'video/mp4' ? fallbackMedia.url : undefined\n const imagePoster = poster || (fallbackMedia?.mimeType !== 'video/mp4' ? fallbackMedia?.url : undefined)\n\n const pictureSource = [\n mobileImage?.url && `${mobileImage.url} 768`,\n padImage?.url && `${padImage.url} 1025`,\n laptopImage?.url && `${laptopImage.url} 1440`,\n desktopImage?.url && `${desktopImage.url} 1920`,\n pcImage?.url,\n ]\n .filter(Boolean)\n .reverse()\n .join(' , ')\n\n return (\n <div ref={ref} className={cn('media-wrapper', className)} {...props}>\n {hasVideo ? (\n <video\n ref={videoRef}\n src={videoSrc}\n poster={imagePoster}\n className={cn('size-full object-cover', videoClassName)}\n muted={muted}\n loop={loop}\n playsInline={playsInline}\n autoPlay={autoPlay}\n aria-label={currentMedia?.alt || ''}\n onPlay={onVideoPlay}\n onPause={onVideoPause}\n onEnded={onVideoEnded}\n />\n ) : (\n <Picture\n className=\"size-full\"\n imgClassName={cn('size-full object-cover', imgClassName)}\n alt={pcImage?.alt || desktopImage?.alt || laptopImage?.alt || padImage?.alt || mobileImage?.alt || ''}\n source={pictureSource}\n />\n )}\n </div>\n )\n }\n)\n\nMedia.displayName = 'Media'\n\nexport default Media\n"],
5
- "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GA+GU,IAAAI,EAAA,6BA7GVC,EAAkB,oBAClBC,EAA8B,4BAC9BC,EAAwB,qCAExBC,EAAmB,kCA2CnB,MAAMC,EAAQ,EAAAC,QAAM,WAClB,CACE,CACE,QAAAC,EACA,aAAAC,EACA,YAAAC,EACA,SAAAC,EACA,YAAAC,EACA,UAAAC,EACA,eAAAC,EACA,aAAAC,EACA,MAAAC,EAAQ,GACR,KAAAC,EAAO,GACP,YAAAC,EAAc,GACd,SAAAC,EAAW,GACX,OAAAC,EACA,SAAAC,EACA,YAAAC,EACA,aAAAC,EACA,aAAAC,EACA,GAAGC,CACL,EACAC,IACG,CACH,MAAMC,KAAW,iBAAc,CAAE,MAAO,oBAAqB,CAAC,EACxDC,KAAQ,iBAAc,CAAE,MAAO,oBAAqB,CAAC,EACrDC,KAAW,iBAAc,CAAE,MAAO,qBAAsB,CAAC,EACzDC,KAAY,iBAAc,CAAE,MAAO,qBAAsB,CAAC,EAC1DC,KAAO,iBAAc,CAAE,MAAO,qBAAsB,CAAC,EAGrDC,EADY,CAACxB,EAASC,EAAcC,EAAaC,EAAUC,CAAW,EACjD,KAAKqB,GAASA,GAAO,WAAa,WAAW,EAElEC,EAAeH,EACjBvB,EACAsB,EACErB,EACAoB,EACEnB,EACAkB,EACEjB,EACAC,EAEJuB,EAAgBD,GAAgB1B,GAAWC,GAAgBC,GAAeC,GAAYC,EAEtFwB,EAAWD,GAAe,WAAa,YAAcA,EAAc,IAAM,OACzEE,EAAcjB,IAAWe,GAAe,WAAa,YAAcA,GAAe,IAAM,QAExFG,EAAgB,CACpB1B,GAAa,KAAO,GAAGA,EAAY,GAAG,OACtCD,GAAU,KAAO,GAAGA,EAAS,GAAG,QAChCD,GAAa,KAAO,GAAGA,EAAY,GAAG,QACtCD,GAAc,KAAO,GAAGA,EAAa,GAAG,QACxCD,GAAS,GACX,EACG,OAAO,OAAO,EACd,QAAQ,EACR,KAAK,KAAK,EAEb,SACE,OAAC,OAAI,IAAKkB,EAAK,aAAW,MAAG,gBAAiBb,CAAS,EAAI,GAAGY,EAC3D,SAAAO,KACC,OAAC,SACC,IAAKX,EACL,IAAKe,EACL,OAAQC,EACR,aAAW,MAAG,yBAA0BvB,CAAc,EACtD,MAAOE,EACP,KAAMC,EACN,YAAaC,EACb,SAAUC,EACV,aAAYe,GAAc,KAAO,GACjC,OAAQZ,EACR,QAASC,EACT,QAASC,EACX,KAEA,OAAC,WACC,UAAU,YACV,gBAAc,MAAG,yBAA0BT,CAAY,EACvD,IAAKP,GAAS,KAAOC,GAAc,KAAOC,GAAa,KAAOC,GAAU,KAAOC,GAAa,KAAO,GACnG,OAAQ0B,EACV,EAEJ,CAEJ,CACF,EAEAhC,EAAM,YAAc,QAEpB,IAAOP,EAAQO",
4
+ "sourcesContent": ["'use client'\n\nimport React from 'react'\nimport { useMediaQuery } from 'react-responsive'\nimport { Picture } from '../../components/index.js'\nimport type { Media as MediaType } from '../../types/props.js'\nimport { cn } from '../../helpers/index.js'\n\nexport interface MediaProps extends React.HTMLAttributes<HTMLDivElement> {\n /** PC\u7AEF\u5A92\u4F53\uFF08\u22651920px\uFF09 */\n pcImage?: MediaType\n /** \u5927\u684C\u9762\u5A92\u4F53\uFF08\u22651440px\uFF09 */\n desktopImage?: MediaType\n /** \u5C0F\u684C\u9762\u5A92\u4F53\uFF08\u22651025px\uFF09 */\n laptopImage?: MediaType\n /** \u5E73\u677F\u7AEF\u5A92\u4F53\uFF08\u2265768px\uFF09 */\n padImage?: MediaType\n /** \u79FB\u52A8\u7AEF\u5A92\u4F53\uFF08<768px\uFF09 */\n mobileImage?: MediaType\n /** \u89C6\u9891\u7C7B\u540D */\n videoClassName?: string\n /** \u56FE\u7247\u7C7B\u540D */\n imgClassName?: string\n /** \u662F\u5426\u9759\u97F3\u64AD\u653E\uFF08\u4EC5\u89C6\u9891\uFF09 */\n muted?: boolean\n /** \u662F\u5426\u5FAA\u73AF\u64AD\u653E\uFF08\u4EC5\u89C6\u9891\uFF09 */\n loop?: boolean\n /** \u662F\u5426\u5185\u8054\u64AD\u653E\uFF08\u4EC5\u89C6\u9891\uFF09 */\n playsInline?: boolean\n /** \u662F\u5426\u81EA\u52A8\u64AD\u653E\uFF08\u4EC5\u89C6\u9891\uFF09 */\n autoPlay?: boolean\n /** \u89C6\u9891\u9884\u89C8\u56FE */\n poster?: string\n /** \u89C6\u9891 ref\uFF08\u7528\u4E8E\u5916\u90E8\u63A7\u5236\u64AD\u653E/\u6682\u505C\uFF09 */\n videoRef?: React.RefObject<HTMLVideoElement>\n /** \u89C6\u9891\u64AD\u653E\u56DE\u8C03 */\n onVideoPlay?: () => void\n /** \u89C6\u9891\u6682\u505C\u56DE\u8C03 */\n onVideoPause?: () => void\n /** \u89C6\u9891\u7ED3\u675F\u56DE\u8C03 */\n onVideoEnded?: () => void\n}\n\n/**\n * Media - \u667A\u80FD\u5A92\u4F53\u7EC4\u4EF6\n *\n * @description \u6839\u636E\u5A92\u4F53\u7C7B\u578B\u81EA\u52A8\u9009\u62E9\u4F7F\u7528 video \u6807\u7B7E\u6216 Picture \u7EC4\u4EF6\n * \u652F\u6301\u54CD\u5E94\u5F0F\u5A92\u4F53\u6E90\uFF0C\u5982\u679C\u4EFB\u610F\u5A92\u4F53\u7C7B\u578B\u662F\u89C6\u9891\uFF0C\u5219\u4F7F\u7528 video \u6807\u7B7E\u6E32\u67D3\n */\nconst Media = React.forwardRef<HTMLDivElement, MediaProps>(\n (\n {\n pcImage,\n desktopImage,\n laptopImage,\n padImage,\n mobileImage,\n className,\n videoClassName,\n imgClassName,\n muted = true,\n loop = true,\n playsInline = true,\n autoPlay = true,\n poster,\n videoRef,\n onVideoPlay,\n onVideoPause,\n onVideoEnded,\n ...props\n },\n ref\n ) => {\n const isMobile = useMediaQuery({ query: '(max-width: 767px)' })\n const isPad = useMediaQuery({ query: '(min-width: 768px) and (max-width: 1024px)' })\n const isLaptop = useMediaQuery({ query: '(min-width: 1025px) and (max-width: 1439px)' })\n const isDesktop = useMediaQuery({ query: '(min-width: 1440px) and (max-width: 1919px)' })\n const isPc = useMediaQuery({ query: '(min-width: 1920px)' })\n\n const allImages = [pcImage, desktopImage, laptopImage, padImage, mobileImage]\n const hasVideo = allImages.some(media => media?.mimeType === 'video/mp4')\n\n const currentMedia = isPc\n ? pcImage\n : isDesktop\n ? desktopImage\n : isLaptop\n ? laptopImage\n : isPad\n ? padImage\n : mobileImage\n\n const fallbackMedia = currentMedia || pcImage || desktopImage || laptopImage || padImage || mobileImage\n\n const videoSrc = fallbackMedia?.mimeType === 'video/mp4' ? fallbackMedia.url : undefined\n const imagePoster = poster || (fallbackMedia?.mimeType !== 'video/mp4' ? fallbackMedia?.url : undefined)\n\n const pictureSource = [\n mobileImage?.url && `${mobileImage.url} 768`,\n padImage?.url && `${padImage.url} 1025`,\n laptopImage?.url && `${laptopImage.url} 1440`,\n desktopImage?.url && `${desktopImage.url} 1920`,\n pcImage?.url,\n ]\n .filter(Boolean)\n .reverse()\n .join(' , ')\n\n return (\n <div ref={ref} className={cn('media-wrapper', className)} {...props}>\n {hasVideo ? (\n <video\n ref={videoRef}\n src={videoSrc}\n poster={imagePoster}\n className={cn('size-full object-cover', videoClassName)}\n muted={muted}\n loop={loop}\n playsInline={playsInline}\n autoPlay={autoPlay}\n aria-label={currentMedia?.alt || ''}\n onPlay={onVideoPlay}\n onPause={onVideoPause}\n onEnded={onVideoEnded}\n />\n ) : (\n <Picture\n className=\"size-full\"\n imgClassName={cn('size-full object-cover', imgClassName)}\n alt={pcImage?.alt || desktopImage?.alt || laptopImage?.alt || padImage?.alt || mobileImage?.alt || ''}\n source={pictureSource}\n />\n )}\n </div>\n )\n }\n)\n\nMedia.displayName = 'Media'\n\nexport default Media\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GA+GU,IAAAI,EAAA,6BA7GVC,EAAkB,oBAClBC,EAA8B,4BAC9BC,EAAwB,qCAExBC,EAAmB,kCA2CnB,MAAMC,EAAQ,EAAAC,QAAM,WAClB,CACE,CACE,QAAAC,EACA,aAAAC,EACA,YAAAC,EACA,SAAAC,EACA,YAAAC,EACA,UAAAC,EACA,eAAAC,EACA,aAAAC,EACA,MAAAC,EAAQ,GACR,KAAAC,EAAO,GACP,YAAAC,EAAc,GACd,SAAAC,EAAW,GACX,OAAAC,EACA,SAAAC,EACA,YAAAC,EACA,aAAAC,EACA,aAAAC,EACA,GAAGC,CACL,EACAC,IACG,CACH,MAAMC,KAAW,iBAAc,CAAE,MAAO,oBAAqB,CAAC,EACxDC,KAAQ,iBAAc,CAAE,MAAO,4CAA6C,CAAC,EAC7EC,KAAW,iBAAc,CAAE,MAAO,6CAA8C,CAAC,EACjFC,KAAY,iBAAc,CAAE,MAAO,6CAA8C,CAAC,EAClFC,KAAO,iBAAc,CAAE,MAAO,qBAAsB,CAAC,EAGrDC,EADY,CAACxB,EAASC,EAAcC,EAAaC,EAAUC,CAAW,EACjD,KAAKqB,GAASA,GAAO,WAAa,WAAW,EAElEC,EAAeH,EACjBvB,EACAsB,EACErB,EACAoB,EACEnB,EACAkB,EACEjB,EACAC,EAEJuB,EAAgBD,GAAgB1B,GAAWC,GAAgBC,GAAeC,GAAYC,EAEtFwB,EAAWD,GAAe,WAAa,YAAcA,EAAc,IAAM,OACzEE,EAAcjB,IAAWe,GAAe,WAAa,YAAcA,GAAe,IAAM,QAExFG,EAAgB,CACpB1B,GAAa,KAAO,GAAGA,EAAY,GAAG,OACtCD,GAAU,KAAO,GAAGA,EAAS,GAAG,QAChCD,GAAa,KAAO,GAAGA,EAAY,GAAG,QACtCD,GAAc,KAAO,GAAGA,EAAa,GAAG,QACxCD,GAAS,GACX,EACG,OAAO,OAAO,EACd,QAAQ,EACR,KAAK,KAAK,EAEb,SACE,OAAC,OAAI,IAAKkB,EAAK,aAAW,MAAG,gBAAiBb,CAAS,EAAI,GAAGY,EAC3D,SAAAO,KACC,OAAC,SACC,IAAKX,EACL,IAAKe,EACL,OAAQC,EACR,aAAW,MAAG,yBAA0BvB,CAAc,EACtD,MAAOE,EACP,KAAMC,EACN,YAAaC,EACb,SAAUC,EACV,aAAYe,GAAc,KAAO,GACjC,OAAQZ,EACR,QAASC,EACT,QAASC,EACX,KAEA,OAAC,WACC,UAAU,YACV,gBAAc,MAAG,yBAA0BT,CAAY,EACvD,IAAKP,GAAS,KAAOC,GAAc,KAAOC,GAAa,KAAOC,GAAU,KAAOC,GAAa,KAAO,GACnG,OAAQ0B,EACV,EAEJ,CAEJ,CACF,EAEAhC,EAAM,YAAc,QAEpB,IAAOP,EAAQO",
6
6
  "names": ["Media_exports", "__export", "Media_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_react_responsive", "import_components", "import_helpers", "Media", "React", "pcImage", "desktopImage", "laptopImage", "padImage", "mobileImage", "className", "videoClassName", "imgClassName", "muted", "loop", "playsInline", "autoPlay", "poster", "videoRef", "onVideoPlay", "onVideoPause", "onVideoEnded", "props", "ref", "isMobile", "isPad", "isLaptop", "isDesktop", "isPc", "hasVideo", "media", "currentMedia", "fallbackMedia", "videoSrc", "imagePoster", "pictureSource"]
7
7
  }