@anker-in/headless-ui 1.3.37 → 1.3.39-alpha.1784616869310

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 (405) hide show
  1. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.d.ts +11 -0
  2. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.js +2 -0
  3. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.js.map +7 -0
  4. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.d.ts +23 -0
  5. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.js +2 -0
  6. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.js.map +7 -0
  7. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/index.d.ts +40 -0
  8. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/index.js +2 -0
  9. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/index.js.map +7 -0
  10. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/types.d.ts +107 -0
  11. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/types.js +2 -0
  12. package/dist/cjs/biz-components/AccessoriesShelf/components/AccessoryShelf/types.js.map +7 -0
  13. package/dist/cjs/biz-components/AccessoriesShelf/components/MainProductArea/index.d.ts +22 -0
  14. package/dist/cjs/biz-components/AccessoriesShelf/components/MainProductArea/index.js +2 -0
  15. package/dist/cjs/biz-components/AccessoriesShelf/components/MainProductArea/index.js.map +7 -0
  16. package/dist/cjs/biz-components/AccessoriesShelf/components/PromoBanner/index.d.ts +10 -0
  17. package/dist/cjs/biz-components/AccessoriesShelf/components/PromoBanner/index.js +2 -0
  18. package/dist/cjs/biz-components/AccessoriesShelf/components/PromoBanner/index.js.map +7 -0
  19. package/dist/cjs/biz-components/AccessoriesShelf/components/SectionHeader/index.d.ts +9 -0
  20. package/dist/cjs/biz-components/AccessoriesShelf/components/SectionHeader/index.js +2 -0
  21. package/dist/cjs/biz-components/AccessoriesShelf/components/SectionHeader/index.js.map +7 -0
  22. package/dist/cjs/biz-components/AccessoriesShelf/index.d.ts +7 -0
  23. package/dist/cjs/biz-components/AccessoriesShelf/index.js +2 -0
  24. package/dist/cjs/biz-components/AccessoriesShelf/index.js.map +7 -0
  25. package/dist/cjs/biz-components/AccessoriesShelf/types.d.ts +16 -0
  26. package/dist/cjs/biz-components/AccessoriesShelf/types.js +2 -0
  27. package/dist/cjs/biz-components/AccessoriesShelf/types.js.map +7 -0
  28. package/dist/cjs/biz-components/CartDetail/CartGiftSection/CartGiftSection.d.ts +14 -0
  29. package/dist/cjs/biz-components/CartDetail/CartGiftSection/CartGiftSection.js +2 -0
  30. package/dist/cjs/biz-components/CartDetail/CartGiftSection/CartGiftSection.js.map +7 -0
  31. package/dist/cjs/biz-components/CartDetail/CartGiftSection/components/GiftConfirmDialog/GiftConfirmDialog.d.ts +11 -0
  32. package/dist/cjs/biz-components/CartDetail/CartGiftSection/components/GiftConfirmDialog/GiftConfirmDialog.js +2 -0
  33. package/dist/cjs/biz-components/CartDetail/CartGiftSection/components/GiftConfirmDialog/GiftConfirmDialog.js.map +7 -0
  34. package/dist/cjs/biz-components/CartDetail/CartGiftSection/components/GiftConfirmDialog/index.d.ts +2 -0
  35. package/dist/cjs/biz-components/CartDetail/CartGiftSection/components/GiftConfirmDialog/index.js +2 -0
  36. package/dist/cjs/biz-components/CartDetail/CartGiftSection/components/GiftConfirmDialog/index.js.map +7 -0
  37. package/dist/cjs/biz-components/CartDetail/CartGiftSection/components/GiftOptionRow/GiftOptionRow.d.ts +13 -0
  38. package/dist/cjs/biz-components/CartDetail/CartGiftSection/components/GiftOptionRow/GiftOptionRow.js +2 -0
  39. package/dist/cjs/biz-components/CartDetail/CartGiftSection/components/GiftOptionRow/GiftOptionRow.js.map +7 -0
  40. package/dist/cjs/biz-components/CartDetail/CartGiftSection/components/GiftOptionRow/index.d.ts +2 -0
  41. package/dist/cjs/biz-components/CartDetail/CartGiftSection/components/GiftOptionRow/index.js +2 -0
  42. package/dist/cjs/biz-components/CartDetail/CartGiftSection/components/GiftOptionRow/index.js.map +7 -0
  43. package/dist/cjs/biz-components/CartDetail/CartGiftSection/index.d.ts +2 -0
  44. package/dist/cjs/biz-components/CartDetail/CartGiftSection/index.js +2 -0
  45. package/dist/cjs/biz-components/CartDetail/CartGiftSection/index.js.map +7 -0
  46. package/dist/cjs/biz-components/CartDetail/CartItemRow/CartItemRow.d.ts +54 -0
  47. package/dist/cjs/biz-components/CartDetail/CartItemRow/CartItemRow.js +2 -0
  48. package/dist/cjs/biz-components/CartDetail/CartItemRow/CartItemRow.js.map +7 -0
  49. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/CartItemGiftShipping.d.ts +4 -0
  50. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/CartItemGiftShipping.js +2 -0
  51. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/CartItemGiftShipping.js.map +7 -0
  52. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/index.d.ts +2 -0
  53. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/index.js +2 -0
  54. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/index.js.map +7 -0
  55. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/types.d.ts +9 -0
  56. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/types.js +2 -0
  57. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/types.js.map +7 -0
  58. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemInfo/CartItemInfo.d.ts +11 -0
  59. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemInfo/CartItemInfo.js +2 -0
  60. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemInfo/CartItemInfo.js.map +7 -0
  61. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemInfo/index.d.ts +2 -0
  62. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemInfo/index.js +2 -0
  63. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemInfo/index.js.map +7 -0
  64. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemKsp/CartItemKsp.d.ts +12 -0
  65. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemKsp/CartItemKsp.js +2 -0
  66. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemKsp/CartItemKsp.js.map +7 -0
  67. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemKsp/index.d.ts +2 -0
  68. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemKsp/index.js +2 -0
  69. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemKsp/index.js.map +7 -0
  70. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/CartItemRemoveConfirm.d.ts +4 -0
  71. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/CartItemRemoveConfirm.js +2 -0
  72. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/CartItemRemoveConfirm.js.map +7 -0
  73. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/index.d.ts +2 -0
  74. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/index.js +2 -0
  75. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/index.js.map +7 -0
  76. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/types.d.ts +11 -0
  77. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/types.js +2 -0
  78. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/types.js.map +7 -0
  79. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemShipping/CartItemShipping.d.ts +8 -0
  80. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemShipping/CartItemShipping.js +2 -0
  81. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemShipping/CartItemShipping.js.map +7 -0
  82. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemShipping/index.d.ts +2 -0
  83. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemShipping/index.js +2 -0
  84. package/dist/cjs/biz-components/CartDetail/CartItemRow/components/CartItemShipping/index.js.map +7 -0
  85. package/dist/cjs/biz-components/CartDetail/CartItemRow/index.d.ts +2 -0
  86. package/dist/cjs/biz-components/CartDetail/CartItemRow/index.js +2 -0
  87. package/dist/cjs/biz-components/CartDetail/CartItemRow/index.js.map +7 -0
  88. package/dist/cjs/biz-components/CartDetail/CartPerksSection/CartPerksSection.d.ts +36 -0
  89. package/dist/cjs/biz-components/CartDetail/CartPerksSection/CartPerksSection.js +2 -0
  90. package/dist/cjs/biz-components/CartDetail/CartPerksSection/CartPerksSection.js.map +7 -0
  91. package/dist/cjs/biz-components/CartDetail/CartPerksSection/index.d.ts +2 -0
  92. package/dist/cjs/biz-components/CartDetail/CartPerksSection/index.js +2 -0
  93. package/dist/cjs/biz-components/CartDetail/CartPerksSection/index.js.map +7 -0
  94. package/dist/cjs/biz-components/CartDetail/CartPriceSummary/CartPriceSummary.d.ts +47 -0
  95. package/dist/cjs/biz-components/CartDetail/CartPriceSummary/CartPriceSummary.js +2 -0
  96. package/dist/cjs/biz-components/CartDetail/CartPriceSummary/CartPriceSummary.js.map +7 -0
  97. package/dist/cjs/biz-components/CartDetail/CartPriceSummary/index.d.ts +2 -0
  98. package/dist/cjs/biz-components/CartDetail/CartPriceSummary/index.js +2 -0
  99. package/dist/cjs/biz-components/CartDetail/CartPriceSummary/index.js.map +7 -0
  100. package/dist/cjs/biz-components/CartDetail/CartSummaryHeader/CartSummaryHeader.d.ts +26 -0
  101. package/dist/cjs/biz-components/CartDetail/CartSummaryHeader/CartSummaryHeader.js +2 -0
  102. package/dist/cjs/biz-components/CartDetail/CartSummaryHeader/CartSummaryHeader.js.map +7 -0
  103. package/dist/cjs/biz-components/CartDetail/CartSummaryHeader/index.d.ts +2 -0
  104. package/dist/cjs/biz-components/CartDetail/CartSummaryHeader/index.js +2 -0
  105. package/dist/cjs/biz-components/CartDetail/CartSummaryHeader/index.js.map +7 -0
  106. package/dist/cjs/biz-components/CartDetail/CartThirdParty/CartThirdParty.d.ts +10 -0
  107. package/dist/cjs/biz-components/CartDetail/CartThirdParty/CartThirdParty.js +2 -0
  108. package/dist/cjs/biz-components/CartDetail/CartThirdParty/CartThirdParty.js.map +7 -0
  109. package/dist/cjs/biz-components/CartDetail/CartThirdParty/index.d.ts +2 -0
  110. package/dist/cjs/biz-components/CartDetail/CartThirdParty/index.js +2 -0
  111. package/dist/cjs/biz-components/CartDetail/CartThirdParty/index.js.map +7 -0
  112. package/dist/cjs/biz-components/CartDetail/index.d.ts +16 -0
  113. package/dist/cjs/biz-components/CartDetail/index.js +2 -0
  114. package/dist/cjs/biz-components/CartDetail/index.js.map +7 -0
  115. package/dist/cjs/biz-components/CartDetail/types.d.ts +132 -0
  116. package/dist/cjs/biz-components/CartDetail/types.js +2 -0
  117. package/dist/cjs/biz-components/CartDetail/types.js.map +7 -0
  118. package/dist/cjs/biz-components/FeaturedBlogPosts/index.js +1 -1
  119. package/dist/cjs/biz-components/FeaturedBlogPosts/index.js.map +2 -2
  120. package/dist/cjs/biz-components/Ksp/index.d.ts +2 -0
  121. package/dist/cjs/biz-components/Ksp/index.js +1 -1
  122. package/dist/cjs/biz-components/Ksp/index.js.map +3 -3
  123. package/dist/cjs/biz-components/Listing/BizProductProvider.d.ts +13 -9
  124. package/dist/cjs/biz-components/Listing/BizProductProvider.js +1 -1
  125. package/dist/cjs/biz-components/Listing/BizProductProvider.js.map +3 -3
  126. package/dist/cjs/biz-components/Listing/components/CartActionButtons/index.d.ts +9 -1
  127. package/dist/cjs/biz-components/Listing/components/CartActionButtons/index.js +1 -1
  128. package/dist/cjs/biz-components/Listing/components/CartActionButtons/index.js.map +3 -3
  129. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.js +4 -4
  130. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.js.map +3 -3
  131. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBenefits/index.js +1 -1
  132. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBenefits/index.js.map +3 -3
  133. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.d.ts +1 -0
  134. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.js +1 -1
  135. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.js.map +3 -3
  136. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/types.d.ts +48 -0
  137. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/types.js +2 -0
  138. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/types.js.map +7 -0
  139. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductCoupon/index.d.ts +1 -1
  140. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductCoupon/index.js +1 -1
  141. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductCoupon/index.js.map +3 -3
  142. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.d.ts +0 -2
  143. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.js +1 -1
  144. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.js.map +4 -4
  145. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductFunctionFreeGift/index.d.ts +3 -0
  146. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductFunctionFreeGift/index.js +2 -0
  147. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductFunctionFreeGift/index.js.map +7 -0
  148. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductFunctionFreeGift/types.d.ts +115 -0
  149. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductFunctionFreeGift/types.js +2 -0
  150. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductFunctionFreeGift/types.js.map +7 -0
  151. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductSummary/index.js +1 -1
  152. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductSummary/index.js.map +3 -3
  153. package/dist/cjs/biz-components/Listing/components/PurchaseBar/ProductActions/index.js +1 -1
  154. package/dist/cjs/biz-components/Listing/components/PurchaseBar/ProductActions/index.js.map +3 -3
  155. package/dist/cjs/biz-components/Listing/components/index.d.ts +0 -1
  156. package/dist/cjs/biz-components/Listing/components/index.js +1 -1
  157. package/dist/cjs/biz-components/Listing/components/index.js.map +3 -3
  158. package/dist/cjs/biz-components/Listing/hooks/useBenefits.d.ts +8 -2
  159. package/dist/cjs/biz-components/Listing/hooks/useBenefits.js +1 -1
  160. package/dist/cjs/biz-components/Listing/hooks/useBenefits.js.map +3 -3
  161. package/dist/cjs/biz-components/Listing/types/product.d.ts +0 -21
  162. package/dist/cjs/biz-components/Listing/types/product.js +1 -1
  163. package/dist/cjs/biz-components/Listing/types/product.js.map +1 -1
  164. package/dist/cjs/biz-components/NotifyMeDialog/NotifyMeDialog.d.ts +7 -0
  165. package/dist/cjs/biz-components/NotifyMeDialog/NotifyMeDialog.js +2 -0
  166. package/dist/cjs/biz-components/NotifyMeDialog/NotifyMeDialog.js.map +7 -0
  167. package/dist/cjs/biz-components/NotifyMeDialog/index.d.ts +2 -0
  168. package/dist/cjs/biz-components/NotifyMeDialog/index.js +2 -0
  169. package/dist/cjs/biz-components/NotifyMeDialog/index.js.map +7 -0
  170. package/dist/cjs/biz-components/NotifyMeDialog/types.d.ts +111 -0
  171. package/dist/cjs/biz-components/NotifyMeDialog/types.js +2 -0
  172. package/dist/cjs/biz-components/NotifyMeDialog/types.js.map +7 -0
  173. package/dist/cjs/biz-components/ShelfDisplay/index.js +1 -1
  174. package/dist/cjs/biz-components/ShelfDisplay/index.js.map +3 -3
  175. package/dist/cjs/biz-components/ShelfDisplay/shelfDisplayItem.js +1 -1
  176. package/dist/cjs/biz-components/ShelfDisplay/shelfDisplayItem.js.map +2 -2
  177. package/dist/cjs/biz-components/index.d.ts +11 -3
  178. package/dist/cjs/biz-components/index.js +1 -1
  179. package/dist/cjs/biz-components/index.js.map +3 -3
  180. package/dist/cjs/components/breadcrumb.d.ts +12 -0
  181. package/dist/cjs/components/breadcrumb.js +2 -0
  182. package/dist/cjs/components/breadcrumb.js.map +7 -0
  183. package/dist/cjs/components/index.d.ts +2 -0
  184. package/dist/cjs/components/index.js +1 -1
  185. package/dist/cjs/components/index.js.map +3 -3
  186. package/dist/cjs/components/input-number.d.ts +22 -0
  187. package/dist/cjs/components/input-number.js +1 -1
  188. package/dist/cjs/components/input-number.js.map +3 -3
  189. package/dist/cjs/components/input.d.ts +5 -0
  190. package/dist/cjs/components/input.js +1 -1
  191. package/dist/cjs/components/input.js.map +3 -3
  192. package/dist/cjs/components/tabs.js +1 -1
  193. package/dist/cjs/components/tabs.js.map +3 -3
  194. package/dist/cjs/components/toast.d.ts +25 -0
  195. package/dist/cjs/components/toast.js +2 -0
  196. package/dist/cjs/components/toast.js.map +7 -0
  197. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.d.ts +11 -0
  198. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.js +2 -0
  199. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.js.map +7 -0
  200. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.d.ts +23 -0
  201. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.js +2 -0
  202. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.js.map +7 -0
  203. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/index.d.ts +40 -0
  204. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/index.js +2 -0
  205. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/index.js.map +7 -0
  206. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/types.d.ts +107 -0
  207. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/types.js +1 -0
  208. package/dist/esm/biz-components/AccessoriesShelf/components/AccessoryShelf/types.js.map +7 -0
  209. package/dist/esm/biz-components/AccessoriesShelf/components/MainProductArea/index.d.ts +22 -0
  210. package/dist/esm/biz-components/AccessoriesShelf/components/MainProductArea/index.js +2 -0
  211. package/dist/esm/biz-components/AccessoriesShelf/components/MainProductArea/index.js.map +7 -0
  212. package/dist/esm/biz-components/AccessoriesShelf/components/PromoBanner/index.d.ts +10 -0
  213. package/dist/esm/biz-components/AccessoriesShelf/components/PromoBanner/index.js +2 -0
  214. package/dist/esm/biz-components/AccessoriesShelf/components/PromoBanner/index.js.map +7 -0
  215. package/dist/esm/biz-components/AccessoriesShelf/components/SectionHeader/index.d.ts +9 -0
  216. package/dist/esm/biz-components/AccessoriesShelf/components/SectionHeader/index.js +2 -0
  217. package/dist/esm/biz-components/AccessoriesShelf/components/SectionHeader/index.js.map +7 -0
  218. package/dist/esm/biz-components/AccessoriesShelf/index.d.ts +7 -0
  219. package/dist/esm/biz-components/AccessoriesShelf/index.js +2 -0
  220. package/dist/esm/biz-components/AccessoriesShelf/index.js.map +7 -0
  221. package/dist/esm/biz-components/AccessoriesShelf/types.d.ts +16 -0
  222. package/dist/esm/biz-components/AccessoriesShelf/types.js +1 -0
  223. package/dist/esm/biz-components/AccessoriesShelf/types.js.map +7 -0
  224. package/dist/esm/biz-components/CartDetail/CartGiftSection/CartGiftSection.d.ts +14 -0
  225. package/dist/esm/biz-components/CartDetail/CartGiftSection/CartGiftSection.js +2 -0
  226. package/dist/esm/biz-components/CartDetail/CartGiftSection/CartGiftSection.js.map +7 -0
  227. package/dist/esm/biz-components/CartDetail/CartGiftSection/components/GiftConfirmDialog/GiftConfirmDialog.d.ts +11 -0
  228. package/dist/esm/biz-components/CartDetail/CartGiftSection/components/GiftConfirmDialog/GiftConfirmDialog.js +2 -0
  229. package/dist/esm/biz-components/CartDetail/CartGiftSection/components/GiftConfirmDialog/GiftConfirmDialog.js.map +7 -0
  230. package/dist/esm/biz-components/CartDetail/CartGiftSection/components/GiftConfirmDialog/index.d.ts +2 -0
  231. package/dist/esm/biz-components/CartDetail/CartGiftSection/components/GiftConfirmDialog/index.js +2 -0
  232. package/dist/esm/biz-components/CartDetail/CartGiftSection/components/GiftConfirmDialog/index.js.map +7 -0
  233. package/dist/esm/biz-components/CartDetail/CartGiftSection/components/GiftOptionRow/GiftOptionRow.d.ts +13 -0
  234. package/dist/esm/biz-components/CartDetail/CartGiftSection/components/GiftOptionRow/GiftOptionRow.js +2 -0
  235. package/dist/esm/biz-components/CartDetail/CartGiftSection/components/GiftOptionRow/GiftOptionRow.js.map +7 -0
  236. package/dist/esm/biz-components/CartDetail/CartGiftSection/components/GiftOptionRow/index.d.ts +2 -0
  237. package/dist/esm/biz-components/CartDetail/CartGiftSection/components/GiftOptionRow/index.js +2 -0
  238. package/dist/esm/biz-components/CartDetail/CartGiftSection/components/GiftOptionRow/index.js.map +7 -0
  239. package/dist/esm/biz-components/CartDetail/CartGiftSection/index.d.ts +2 -0
  240. package/dist/esm/biz-components/CartDetail/CartGiftSection/index.js +2 -0
  241. package/dist/esm/biz-components/CartDetail/CartGiftSection/index.js.map +7 -0
  242. package/dist/esm/biz-components/CartDetail/CartItemRow/CartItemRow.d.ts +54 -0
  243. package/dist/esm/biz-components/CartDetail/CartItemRow/CartItemRow.js +2 -0
  244. package/dist/esm/biz-components/CartDetail/CartItemRow/CartItemRow.js.map +7 -0
  245. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/CartItemGiftShipping.d.ts +4 -0
  246. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/CartItemGiftShipping.js +2 -0
  247. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/CartItemGiftShipping.js.map +7 -0
  248. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/index.d.ts +2 -0
  249. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/index.js +2 -0
  250. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/index.js.map +7 -0
  251. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/types.d.ts +9 -0
  252. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/types.js +1 -0
  253. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemGiftShipping/types.js.map +7 -0
  254. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemInfo/CartItemInfo.d.ts +11 -0
  255. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemInfo/CartItemInfo.js +2 -0
  256. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemInfo/CartItemInfo.js.map +7 -0
  257. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemInfo/index.d.ts +2 -0
  258. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemInfo/index.js +2 -0
  259. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemInfo/index.js.map +7 -0
  260. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemKsp/CartItemKsp.d.ts +12 -0
  261. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemKsp/CartItemKsp.js +2 -0
  262. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemKsp/CartItemKsp.js.map +7 -0
  263. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemKsp/index.d.ts +2 -0
  264. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemKsp/index.js +2 -0
  265. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemKsp/index.js.map +7 -0
  266. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/CartItemRemoveConfirm.d.ts +4 -0
  267. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/CartItemRemoveConfirm.js +2 -0
  268. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/CartItemRemoveConfirm.js.map +7 -0
  269. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/index.d.ts +2 -0
  270. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/index.js +2 -0
  271. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/index.js.map +7 -0
  272. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/types.d.ts +11 -0
  273. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/types.js +1 -0
  274. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemRemoveConfirm/types.js.map +7 -0
  275. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemShipping/CartItemShipping.d.ts +8 -0
  276. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemShipping/CartItemShipping.js +2 -0
  277. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemShipping/CartItemShipping.js.map +7 -0
  278. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemShipping/index.d.ts +2 -0
  279. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemShipping/index.js +2 -0
  280. package/dist/esm/biz-components/CartDetail/CartItemRow/components/CartItemShipping/index.js.map +7 -0
  281. package/dist/esm/biz-components/CartDetail/CartItemRow/index.d.ts +2 -0
  282. package/dist/esm/biz-components/CartDetail/CartItemRow/index.js +2 -0
  283. package/dist/esm/biz-components/CartDetail/CartItemRow/index.js.map +7 -0
  284. package/dist/esm/biz-components/CartDetail/CartPerksSection/CartPerksSection.d.ts +36 -0
  285. package/dist/esm/biz-components/CartDetail/CartPerksSection/CartPerksSection.js +2 -0
  286. package/dist/esm/biz-components/CartDetail/CartPerksSection/CartPerksSection.js.map +7 -0
  287. package/dist/esm/biz-components/CartDetail/CartPerksSection/index.d.ts +2 -0
  288. package/dist/esm/biz-components/CartDetail/CartPerksSection/index.js +2 -0
  289. package/dist/esm/biz-components/CartDetail/CartPerksSection/index.js.map +7 -0
  290. package/dist/esm/biz-components/CartDetail/CartPriceSummary/CartPriceSummary.d.ts +47 -0
  291. package/dist/esm/biz-components/CartDetail/CartPriceSummary/CartPriceSummary.js +2 -0
  292. package/dist/esm/biz-components/CartDetail/CartPriceSummary/CartPriceSummary.js.map +7 -0
  293. package/dist/esm/biz-components/CartDetail/CartPriceSummary/index.d.ts +2 -0
  294. package/dist/esm/biz-components/CartDetail/CartPriceSummary/index.js +2 -0
  295. package/dist/esm/biz-components/CartDetail/CartPriceSummary/index.js.map +7 -0
  296. package/dist/esm/biz-components/CartDetail/CartSummaryHeader/CartSummaryHeader.d.ts +26 -0
  297. package/dist/esm/biz-components/CartDetail/CartSummaryHeader/CartSummaryHeader.js +2 -0
  298. package/dist/esm/biz-components/CartDetail/CartSummaryHeader/CartSummaryHeader.js.map +7 -0
  299. package/dist/esm/biz-components/CartDetail/CartSummaryHeader/index.d.ts +2 -0
  300. package/dist/esm/biz-components/CartDetail/CartSummaryHeader/index.js +2 -0
  301. package/dist/esm/biz-components/CartDetail/CartSummaryHeader/index.js.map +7 -0
  302. package/dist/esm/biz-components/CartDetail/CartThirdParty/CartThirdParty.d.ts +10 -0
  303. package/dist/esm/biz-components/CartDetail/CartThirdParty/CartThirdParty.js +2 -0
  304. package/dist/esm/biz-components/CartDetail/CartThirdParty/CartThirdParty.js.map +7 -0
  305. package/dist/esm/biz-components/CartDetail/CartThirdParty/index.d.ts +2 -0
  306. package/dist/esm/biz-components/CartDetail/CartThirdParty/index.js +2 -0
  307. package/dist/esm/biz-components/CartDetail/CartThirdParty/index.js.map +7 -0
  308. package/dist/esm/biz-components/CartDetail/index.d.ts +16 -0
  309. package/dist/esm/biz-components/CartDetail/index.js +2 -0
  310. package/dist/esm/biz-components/CartDetail/index.js.map +7 -0
  311. package/dist/esm/biz-components/CartDetail/types.d.ts +132 -0
  312. package/dist/esm/biz-components/CartDetail/types.js +1 -0
  313. package/dist/esm/biz-components/CartDetail/types.js.map +7 -0
  314. package/dist/esm/biz-components/FeaturedBlogPosts/index.js +1 -1
  315. package/dist/esm/biz-components/FeaturedBlogPosts/index.js.map +2 -2
  316. package/dist/esm/biz-components/Ksp/index.d.ts +2 -0
  317. package/dist/esm/biz-components/Ksp/index.js +1 -1
  318. package/dist/esm/biz-components/Ksp/index.js.map +3 -3
  319. package/dist/esm/biz-components/Listing/BizProductProvider.d.ts +13 -9
  320. package/dist/esm/biz-components/Listing/BizProductProvider.js +1 -1
  321. package/dist/esm/biz-components/Listing/BizProductProvider.js.map +3 -3
  322. package/dist/esm/biz-components/Listing/components/CartActionButtons/index.d.ts +9 -1
  323. package/dist/esm/biz-components/Listing/components/CartActionButtons/index.js +1 -1
  324. package/dist/esm/biz-components/Listing/components/CartActionButtons/index.js.map +3 -3
  325. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.js +4 -4
  326. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/BenefitsTab.js.map +3 -3
  327. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBenefits/index.js +1 -1
  328. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBenefits/index.js.map +3 -3
  329. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.d.ts +1 -0
  330. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.js +1 -1
  331. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/index.js.map +3 -3
  332. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/types.d.ts +48 -0
  333. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/types.js +1 -0
  334. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductBundle/types.js.map +7 -0
  335. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductCoupon/index.d.ts +1 -1
  336. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductCoupon/index.js +1 -1
  337. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductCoupon/index.js.map +3 -3
  338. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.d.ts +0 -2
  339. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.js +1 -1
  340. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductExchangePurchase/index.js.map +3 -3
  341. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductFunctionFreeGift/index.d.ts +3 -0
  342. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductFunctionFreeGift/index.js +2 -0
  343. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductFunctionFreeGift/index.js.map +7 -0
  344. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductFunctionFreeGift/types.d.ts +115 -0
  345. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductFunctionFreeGift/types.js +1 -0
  346. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductFunctionFreeGift/types.js.map +7 -0
  347. package/dist/esm/biz-components/Listing/components/ProductCard/ProductSummary/index.js +1 -1
  348. package/dist/esm/biz-components/Listing/components/ProductCard/ProductSummary/index.js.map +3 -3
  349. package/dist/esm/biz-components/Listing/components/PurchaseBar/ProductActions/index.js +1 -1
  350. package/dist/esm/biz-components/Listing/components/PurchaseBar/ProductActions/index.js.map +3 -3
  351. package/dist/esm/biz-components/Listing/components/index.d.ts +0 -1
  352. package/dist/esm/biz-components/Listing/components/index.js +1 -1
  353. package/dist/esm/biz-components/Listing/components/index.js.map +2 -2
  354. package/dist/esm/biz-components/Listing/hooks/useBenefits.d.ts +8 -2
  355. package/dist/esm/biz-components/Listing/hooks/useBenefits.js +1 -1
  356. package/dist/esm/biz-components/Listing/hooks/useBenefits.js.map +3 -3
  357. package/dist/esm/biz-components/Listing/types/product.d.ts +0 -21
  358. package/dist/esm/biz-components/Listing/types/product.js.map +1 -1
  359. package/dist/esm/biz-components/NotifyMeDialog/NotifyMeDialog.d.ts +7 -0
  360. package/dist/esm/biz-components/NotifyMeDialog/NotifyMeDialog.js +2 -0
  361. package/dist/esm/biz-components/NotifyMeDialog/NotifyMeDialog.js.map +7 -0
  362. package/dist/esm/biz-components/NotifyMeDialog/index.d.ts +2 -0
  363. package/dist/esm/biz-components/NotifyMeDialog/index.js +2 -0
  364. package/dist/esm/biz-components/NotifyMeDialog/index.js.map +7 -0
  365. package/dist/esm/biz-components/NotifyMeDialog/types.d.ts +111 -0
  366. package/dist/esm/biz-components/NotifyMeDialog/types.js +1 -0
  367. package/dist/esm/biz-components/NotifyMeDialog/types.js.map +7 -0
  368. package/dist/esm/biz-components/ShelfDisplay/index.js +1 -1
  369. package/dist/esm/biz-components/ShelfDisplay/index.js.map +3 -3
  370. package/dist/esm/biz-components/ShelfDisplay/shelfDisplayItem.js +1 -1
  371. package/dist/esm/biz-components/ShelfDisplay/shelfDisplayItem.js.map +2 -2
  372. package/dist/esm/biz-components/index.d.ts +11 -3
  373. package/dist/esm/biz-components/index.js +1 -1
  374. package/dist/esm/biz-components/index.js.map +3 -3
  375. package/dist/esm/components/breadcrumb.d.ts +12 -0
  376. package/dist/esm/components/breadcrumb.js +2 -0
  377. package/dist/esm/components/breadcrumb.js.map +7 -0
  378. package/dist/esm/components/index.d.ts +2 -0
  379. package/dist/esm/components/index.js +1 -1
  380. package/dist/esm/components/index.js.map +3 -3
  381. package/dist/esm/components/input-number.d.ts +22 -0
  382. package/dist/esm/components/input-number.js +1 -1
  383. package/dist/esm/components/input-number.js.map +3 -3
  384. package/dist/esm/components/input.d.ts +5 -0
  385. package/dist/esm/components/input.js +1 -1
  386. package/dist/esm/components/input.js.map +3 -3
  387. package/dist/esm/components/tabs.js +1 -1
  388. package/dist/esm/components/tabs.js.map +3 -3
  389. package/dist/esm/components/toast.d.ts +25 -0
  390. package/dist/esm/components/toast.js +2 -0
  391. package/dist/esm/components/toast.js.map +7 -0
  392. package/package.json +1 -1
  393. package/style.css +338 -0
  394. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/index.d.ts +0 -2
  395. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/index.js +0 -2
  396. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/index.js.map +0 -7
  397. package/dist/cjs/biz-components/Listing/components/ProductCard/index.d.ts +0 -2
  398. package/dist/cjs/biz-components/Listing/components/ProductCard/index.js +0 -2
  399. package/dist/cjs/biz-components/Listing/components/ProductCard/index.js.map +0 -7
  400. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/index.d.ts +0 -2
  401. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/index.js +0 -2
  402. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/index.js.map +0 -7
  403. package/dist/esm/biz-components/Listing/components/ProductCard/index.d.ts +0 -2
  404. package/dist/esm/biz-components/Listing/components/ProductCard/index.js +0 -2
  405. package/dist/esm/biz-components/Listing/components/ProductCard/index.js.map +0 -7
@@ -1,4 +1,6 @@
1
- import type { ProductVariant, FreeGift, Bundle } from '../types/product';
1
+ import type { ProductVariant, FreeGift } from '../types/product';
2
+ import type { ProductFunctionFreeGiftProps } from '../components/ProductCard/ProductDetail/ProductFunctionFreeGift/types.js';
3
+ import type { ProductBundleProps } from '../components/ProductCard/ProductDetail/ProductBundle/types.js';
2
4
  interface BenefitsParams {
3
5
  variant: ProductVariant;
4
6
  }
@@ -15,10 +17,14 @@ interface BenefitsResult {
15
17
  * 买赠
16
18
  */
17
19
  freeGift: BenefitItemConfig<FreeGift>;
20
+ /**
21
+ * function买赠
22
+ */
23
+ functionFreeGift: BenefitItemConfig<ProductFunctionFreeGiftProps>;
18
24
  /**
19
25
  * 捆绑折扣
20
26
  */
21
- bundle: BenefitItemConfig<Bundle>;
27
+ bundle: BenefitItemConfig<ProductBundleProps>;
22
28
  /**
23
29
  * 会员价
24
30
  */
@@ -1,2 +1,2 @@
1
- import{useBizProductContext as B}from"../BizProductProvider.js";import{checkItemAvailableForProduct as h}from"../utils/helper.js";import{useDiscountEnable as C}from"./useDiscountEnable.js";import{useAiuiContext as D}from"../../AiuiProvider/index.js";const P=({variant:e})=>{const{coupon:l,product:u,bundle:t,freeGift:s,memberFunctionResult:i,creditsRedemption:r,profile:m}=B(),{amount:f}=r??{},{trackingData:n}=D(),p=Math.max(i?.withCouponMemberTotalSave??0,i?.withoutCouponMaxMemberTotalSave??0),a=C({profile:m,variant:e,memberFunctionResult:i,coupon:l}),d=!!(n?.paidShipping&&e.requiresShipping&&!e?.metafields?.global?.presell&&!e?.metafields?.global?.HideShipping),c=n?.freeGift,g=c?.excludeProducts?.map(o=>typeof o=="object"&&"sku"in o?o.sku:o)??[],b=n?.levelDiscount&&h({product:u,variant:e,item:n?.levelDiscount});return{commonCoupon:{enable:a.showCommonCoupon&&!!l,config:l??{}},freeGift:{enable:!!s&&!!s?.giftList?.length,config:s},bundle:{enable:!!t&&!!t?.bundleList?.length&&Math.max(...t?.bundleList?.map(o=>o.savings??0)??[])>0,config:t},memberDiscount:{enable:a.showMemberDiscount,config:{amount:p,description:i?.labels?.[0]}},creditsRedemption:{enable:!!f&&f>0,config:{amount:f,label:n?.creditsRedemptionLabel}},paidShipping:{enable:d,config:{}},fullGift:{enable:!!(c&&!g.includes(e.sku)),config:c??{}},levelDiscount:{enable:!!b,config:n?.levelDiscount??{}}}};export{P as useBenefits};
1
+ import{useBizProductContext as P}from"../BizProductProvider.js";import{checkItemAvailableForProduct as C}from"../utils/helper.js";import{useDiscountEnable as h}from"./useDiscountEnable.js";import{useAiuiContext as G}from"../../AiuiProvider/index.js";const R=({variant:e})=>{const{coupon:i,product:a,bundle:c,freeGift:r,functionFreeGift:f,memberFunctionResult:t,creditsRedemption:m,profile:p}=P(),{amount:l}=m??{},{trackingData:o}=G(),d=Math.max(t?.withCouponMemberTotalSave??0,t?.withoutCouponMaxMemberTotalSave??0),u=h({profile:p,variant:e,memberFunctionResult:t,coupon:i}),g=!!(o?.paidShipping&&e.requiresShipping&&!e?.metafields?.global?.presell&&!e?.metafields?.global?.HideShipping),s=o?.freeGift,b=s?.excludeProducts?.map(n=>typeof n=="object"&&"sku"in n?n.sku:n)??[],B=o?.levelDiscount&&C({product:a,variant:e,item:o?.levelDiscount});return{commonCoupon:{enable:u.showCommonCoupon&&!!i,config:i??{}},freeGift:{enable:!!r&&!!r?.giftList?.length,config:r},functionFreeGift:{enable:!!f&&!!f?.giftItems?.length,config:f},bundle:{enable:!!c&&!!c?.bundleOptions?.length,config:c},memberDiscount:{enable:u.showMemberDiscount,config:{amount:d,description:t?.labels?.[0]}},creditsRedemption:{enable:!!l&&l>0,config:{amount:l,label:o?.creditsRedemptionLabel}},paidShipping:{enable:g,config:{}},fullGift:{enable:!!(s&&!b.includes(e.sku)),config:s??{}},levelDiscount:{enable:!!B,config:o?.levelDiscount??{}}}};export{R as useBenefits};
2
2
  //# sourceMappingURL=useBenefits.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/biz-components/Listing/hooks/useBenefits.ts"],
4
- "sourcesContent": ["import { useBizProductContext } from '../BizProductProvider.js'\nimport type { ProductVariant, FreeGift, Bundle } from '../types/product'\nimport { checkItemAvailableForProduct } from '../utils/helper.js'\nimport { useDiscountEnable } from './useDiscountEnable.js'\n\nimport { useAiuiContext } from '../../AiuiProvider/index.js'\n\ninterface BenefitsParams {\n variant: ProductVariant\n}\n\ninterface BenefitItemConfig<T extends Record<string, any> = Record<string, any>> {\n enable: boolean\n config?: T // \u539F\u59CB\u914D\u7F6E\n}\n\ninterface BenefitsResult {\n /**\n * \u901A\u7528\u4F18\u60E0\u5238\n */\n commonCoupon?: BenefitItemConfig\n /**\n * \u4E70\u8D60\n */\n freeGift: BenefitItemConfig<FreeGift>\n /**\n * \u6346\u7ED1\u6298\u6263\n */\n bundle: BenefitItemConfig<Bundle>\n /**\n * \u4F1A\u5458\u4EF7\n */\n memberDiscount: BenefitItemConfig\n /**\n * \u79EF\u5206\u62B5\u73B0\n */\n creditsRedemption: BenefitItemConfig\n /**\n * \u9AD8\u6807\u7269\u6D41\n */\n paidShipping: BenefitItemConfig\n\n /**\n * \u6EE1\u8D60\n */\n fullGift: BenefitItemConfig\n\n /**\n * \u6EE1\u51CF\u6298\u6263\n */\n levelDiscount: BenefitItemConfig\n}\n\n/**\n * \u5546\u54C1\u6743\u76CA\n * \u83B7\u53D6\u5F53\u524Dsku \u6240\u6709\u7684\u6743\u76CA\n * \u5305\u62EC \u901A\u7528\u4F18\u60E0\u5238\uFF0C\u4F1A\u5458\u4EF7\uFF0C\u6EE1\u51CF\uFF0C\u6346\u7ED1\u6298\u6263\uFF0C\u4E70\u8D60 \uFF0C\u6EE1\u8D60 \uFF0C\u79EF\u5206\u62B5\u73B0\n * @returns\n */\nexport const useBenefits = ({ variant }: BenefitsParams): BenefitsResult => {\n const { coupon, product, bundle, freeGift, memberFunctionResult, creditsRedemption, profile } = useBizProductContext()\n\n const { amount: creditsRedemptionAmount } = creditsRedemption ?? {}\n\n const { trackingData } = useAiuiContext()\n\n const total = Math.max(\n memberFunctionResult?.withCouponMemberTotalSave ?? 0,\n memberFunctionResult?.withoutCouponMaxMemberTotalSave ?? 0\n )\n\n const discountEnable = useDiscountEnable({ profile, variant, memberFunctionResult, coupon })\n\n // \u9AD8\u6807\u7269\u6D41\n const showPaidShipping = Boolean(\n trackingData?.paidShipping &&\n variant.requiresShipping &&\n !variant?.metafields?.global?.presell &&\n !variant?.metafields?.global?.HideShipping\n )\n\n // \u811A\u672C\u6EE1\u8D60\n const fullGift = trackingData?.freeGift\n const excludeProducts =\n fullGift?.excludeProducts?.map((item: any) => (typeof item === 'object' && 'sku' in item ? item.sku : item)) ?? []\n\n const showLevelDiscount =\n trackingData?.levelDiscount && checkItemAvailableForProduct({ product, variant, item: trackingData?.levelDiscount })\n\n return {\n commonCoupon: {\n enable: discountEnable.showCommonCoupon && Boolean(coupon),\n config: coupon ?? {},\n },\n freeGift: {\n enable: Boolean(freeGift) && !!freeGift?.giftList?.length,\n config: freeGift,\n },\n bundle: {\n enable:\n Boolean(bundle) &&\n !!bundle?.bundleList?.length &&\n Math.max(...(bundle?.bundleList?.map(item => item.savings ?? 0) ?? [])) > 0, // \u6709\u4F18\u60E0\u624D\u5C55\u793A\n config: bundle,\n },\n memberDiscount: {\n enable: discountEnable.showMemberDiscount,\n // enable: total > 0,\n config: {\n amount: total,\n description: memberFunctionResult?.labels?.[0],\n },\n },\n creditsRedemption: {\n enable: Boolean(creditsRedemptionAmount) && creditsRedemptionAmount! > 0,\n config: { amount: creditsRedemptionAmount, label: trackingData?.creditsRedemptionLabel },\n },\n paidShipping: {\n enable: showPaidShipping,\n config: {},\n },\n fullGift: {\n enable: Boolean(fullGift && !excludeProducts.includes(variant.sku)),\n config: fullGift ?? {},\n },\n levelDiscount: {\n enable: Boolean(showLevelDiscount),\n config: trackingData?.levelDiscount ?? {},\n },\n }\n}\n"],
5
- "mappings": "AAAA,OAAS,wBAAAA,MAA4B,2BAErC,OAAS,gCAAAC,MAAoC,qBAC7C,OAAS,qBAAAC,MAAyB,yBAElC,OAAS,kBAAAC,MAAsB,8BAsDxB,MAAMC,EAAc,CAAC,CAAE,QAAAC,CAAQ,IAAsC,CAC1E,KAAM,CAAE,OAAAC,EAAQ,QAAAC,EAAS,OAAAC,EAAQ,SAAAC,EAAU,qBAAAC,EAAsB,kBAAAC,EAAmB,QAAAC,CAAQ,EAAIZ,EAAqB,EAE/G,CAAE,OAAQa,CAAwB,EAAIF,GAAqB,CAAC,EAE5D,CAAE,aAAAG,CAAa,EAAIX,EAAe,EAElCY,EAAQ,KAAK,IACjBL,GAAsB,2BAA6B,EACnDA,GAAsB,iCAAmC,CAC3D,EAEMM,EAAiBd,EAAkB,CAAE,QAAAU,EAAS,QAAAP,EAAS,qBAAAK,EAAsB,OAAAJ,CAAO,CAAC,EAGrFW,EAAmB,GACvBH,GAAc,cACdT,EAAQ,kBACR,CAACA,GAAS,YAAY,QAAQ,SAC9B,CAACA,GAAS,YAAY,QAAQ,cAI1Ba,EAAWJ,GAAc,SACzBK,EACJD,GAAU,iBAAiB,IAAKE,GAAe,OAAOA,GAAS,UAAY,QAASA,EAAOA,EAAK,IAAMA,CAAK,GAAK,CAAC,EAE7GC,EACJP,GAAc,eAAiBb,EAA6B,CAAE,QAAAM,EAAS,QAAAF,EAAS,KAAMS,GAAc,aAAc,CAAC,EAErH,MAAO,CACL,aAAc,CACZ,OAAQE,EAAe,kBAAoB,EAAQV,EACnD,OAAQA,GAAU,CAAC,CACrB,EACA,SAAU,CACR,OAAQ,EAAQG,GAAa,CAAC,CAACA,GAAU,UAAU,OACnD,OAAQA,CACV,EACA,OAAQ,CACN,OACE,EAAQD,GACR,CAAC,CAACA,GAAQ,YAAY,QACtB,KAAK,IAAI,GAAIA,GAAQ,YAAY,IAAIY,GAAQA,EAAK,SAAW,CAAC,GAAK,CAAC,CAAE,EAAI,EAC5E,OAAQZ,CACV,EACA,eAAgB,CACd,OAAQQ,EAAe,mBAEvB,OAAQ,CACN,OAAQD,EACR,YAAaL,GAAsB,SAAS,CAAC,CAC/C,CACF,EACA,kBAAmB,CACjB,OAAQ,EAAQG,GAA4BA,EAA2B,EACvE,OAAQ,CAAE,OAAQA,EAAyB,MAAOC,GAAc,sBAAuB,CACzF,EACA,aAAc,CACZ,OAAQG,EACR,OAAQ,CAAC,CACX,EACA,SAAU,CACR,OAAQ,GAAQC,GAAY,CAACC,EAAgB,SAASd,EAAQ,GAAG,GACjE,OAAQa,GAAY,CAAC,CACvB,EACA,cAAe,CACb,OAAQ,EAAQG,EAChB,OAAQP,GAAc,eAAiB,CAAC,CAC1C,CACF,CACF",
6
- "names": ["useBizProductContext", "checkItemAvailableForProduct", "useDiscountEnable", "useAiuiContext", "useBenefits", "variant", "coupon", "product", "bundle", "freeGift", "memberFunctionResult", "creditsRedemption", "profile", "creditsRedemptionAmount", "trackingData", "total", "discountEnable", "showPaidShipping", "fullGift", "excludeProducts", "item", "showLevelDiscount"]
4
+ "sourcesContent": ["import { useBizProductContext } from '../BizProductProvider.js'\nimport type { ProductVariant, FreeGift } from '../types/product'\nimport { checkItemAvailableForProduct } from '../utils/helper.js'\nimport { useDiscountEnable } from './useDiscountEnable.js'\n\nimport { useAiuiContext } from '../../AiuiProvider/index.js'\nimport type { ProductFunctionFreeGiftProps } from '../components/ProductCard/ProductDetail/ProductFunctionFreeGift/types.js'\nimport type { ProductBundleProps } from '../components/ProductCard/ProductDetail/ProductBundle/types.js'\n\ninterface BenefitsParams {\n variant: ProductVariant\n}\n\ninterface BenefitItemConfig<T extends Record<string, any> = Record<string, any>> {\n enable: boolean\n config?: T // \u539F\u59CB\u914D\u7F6E\n}\n\ninterface BenefitsResult {\n /**\n * \u901A\u7528\u4F18\u60E0\u5238\n */\n commonCoupon?: BenefitItemConfig\n /**\n * \u4E70\u8D60\n */\n freeGift: BenefitItemConfig<FreeGift>\n /**\n * function\u4E70\u8D60\n */\n functionFreeGift: BenefitItemConfig<ProductFunctionFreeGiftProps>\n /**\n * \u6346\u7ED1\u6298\u6263\n */\n bundle: BenefitItemConfig<ProductBundleProps>\n /**\n * \u4F1A\u5458\u4EF7\n */\n memberDiscount: BenefitItemConfig\n /**\n * \u79EF\u5206\u62B5\u73B0\n */\n creditsRedemption: BenefitItemConfig\n /**\n * \u9AD8\u6807\u7269\u6D41\n */\n paidShipping: BenefitItemConfig\n\n /**\n * \u6EE1\u8D60\n */\n fullGift: BenefitItemConfig\n\n /**\n * \u6EE1\u51CF\u6298\u6263\n */\n levelDiscount: BenefitItemConfig\n}\n\n/**\n * \u5546\u54C1\u6743\u76CA\n * \u83B7\u53D6\u5F53\u524Dsku \u6240\u6709\u7684\u6743\u76CA\n * \u5305\u62EC \u901A\u7528\u4F18\u60E0\u5238\uFF0C\u4F1A\u5458\u4EF7\uFF0C\u6EE1\u51CF\uFF0C\u6346\u7ED1\u6298\u6263\uFF0C\u4E70\u8D60 \uFF0C\u6EE1\u8D60 \uFF0C\u79EF\u5206\u62B5\u73B0\n * @returns\n */\nexport const useBenefits = ({ variant }: BenefitsParams): BenefitsResult => {\n const { coupon, product, bundle, freeGift, functionFreeGift, memberFunctionResult, creditsRedemption, profile } = useBizProductContext()\n\n const { amount: creditsRedemptionAmount } = creditsRedemption ?? {}\n\n const { trackingData } = useAiuiContext()\n\n const total = Math.max(\n memberFunctionResult?.withCouponMemberTotalSave ?? 0,\n memberFunctionResult?.withoutCouponMaxMemberTotalSave ?? 0\n )\n\n const discountEnable = useDiscountEnable({ profile, variant, memberFunctionResult, coupon })\n\n // \u9AD8\u6807\u7269\u6D41\n const showPaidShipping = Boolean(\n trackingData?.paidShipping &&\n variant.requiresShipping &&\n !variant?.metafields?.global?.presell &&\n !variant?.metafields?.global?.HideShipping\n )\n\n // \u811A\u672C\u6EE1\u8D60\n const fullGift = trackingData?.freeGift\n const excludeProducts =\n fullGift?.excludeProducts?.map((item: any) => (typeof item === 'object' && 'sku' in item ? item.sku : item)) ?? []\n\n const showLevelDiscount =\n trackingData?.levelDiscount && checkItemAvailableForProduct({ product, variant, item: trackingData?.levelDiscount })\n\n return {\n commonCoupon: {\n enable: discountEnable.showCommonCoupon && Boolean(coupon),\n config: coupon ?? {},\n },\n freeGift: {\n enable: Boolean(freeGift) && !!freeGift?.giftList?.length,\n config: freeGift,\n },\n functionFreeGift: {\n enable: Boolean(functionFreeGift) && !!functionFreeGift?.giftItems?.length,\n config: functionFreeGift,\n },\n bundle: {\n enable: Boolean(bundle) && !!bundle?.bundleOptions?.length,\n // Math.max(...(bundle?.bundleOptions?.map(item => item.savings ?? 0) ?? [])) > 0, // \u6709\u4F18\u60E0\u624D\u5C55\u793A\n config: bundle,\n },\n memberDiscount: {\n enable: discountEnable.showMemberDiscount,\n // enable: total > 0,\n config: {\n amount: total,\n description: memberFunctionResult?.labels?.[0],\n },\n },\n creditsRedemption: {\n enable: Boolean(creditsRedemptionAmount) && creditsRedemptionAmount! > 0,\n config: { amount: creditsRedemptionAmount, label: trackingData?.creditsRedemptionLabel },\n },\n paidShipping: {\n enable: showPaidShipping,\n config: {},\n },\n fullGift: {\n enable: Boolean(fullGift && !excludeProducts.includes(variant.sku)),\n config: fullGift ?? {},\n },\n levelDiscount: {\n enable: Boolean(showLevelDiscount),\n config: trackingData?.levelDiscount ?? {},\n },\n }\n}\n"],
5
+ "mappings": "AAAA,OAAS,wBAAAA,MAA4B,2BAErC,OAAS,gCAAAC,MAAoC,qBAC7C,OAAS,qBAAAC,MAAyB,yBAElC,OAAS,kBAAAC,MAAsB,8BA4DxB,MAAMC,EAAc,CAAC,CAAE,QAAAC,CAAQ,IAAsC,CAC1E,KAAM,CAAE,OAAAC,EAAQ,QAAAC,EAAS,OAAAC,EAAQ,SAAAC,EAAU,iBAAAC,EAAkB,qBAAAC,EAAsB,kBAAAC,EAAmB,QAAAC,CAAQ,EAAIb,EAAqB,EAEjI,CAAE,OAAQc,CAAwB,EAAIF,GAAqB,CAAC,EAE5D,CAAE,aAAAG,CAAa,EAAIZ,EAAe,EAElCa,EAAQ,KAAK,IACjBL,GAAsB,2BAA6B,EACnDA,GAAsB,iCAAmC,CAC3D,EAEMM,EAAiBf,EAAkB,CAAE,QAAAW,EAAS,QAAAR,EAAS,qBAAAM,EAAsB,OAAAL,CAAO,CAAC,EAGrFY,EAAmB,GACvBH,GAAc,cACdV,EAAQ,kBACR,CAACA,GAAS,YAAY,QAAQ,SAC9B,CAACA,GAAS,YAAY,QAAQ,cAI1Bc,EAAWJ,GAAc,SACzBK,EACJD,GAAU,iBAAiB,IAAKE,GAAe,OAAOA,GAAS,UAAY,QAASA,EAAOA,EAAK,IAAMA,CAAK,GAAK,CAAC,EAE7GC,EACJP,GAAc,eAAiBd,EAA6B,CAAE,QAAAM,EAAS,QAAAF,EAAS,KAAMU,GAAc,aAAc,CAAC,EAErH,MAAO,CACL,aAAc,CACZ,OAAQE,EAAe,kBAAoB,EAAQX,EACnD,OAAQA,GAAU,CAAC,CACrB,EACA,SAAU,CACR,OAAQ,EAAQG,GAAa,CAAC,CAACA,GAAU,UAAU,OACnD,OAAQA,CACV,EACA,iBAAkB,CAChB,OAAQ,EAAQC,GAAqB,CAAC,CAACA,GAAkB,WAAW,OACpE,OAAQA,CACV,EACA,OAAQ,CACN,OAAQ,EAAQF,GAAW,CAAC,CAACA,GAAQ,eAAe,OAEpD,OAAQA,CACV,EACA,eAAgB,CACd,OAAQS,EAAe,mBAEvB,OAAQ,CACN,OAAQD,EACR,YAAaL,GAAsB,SAAS,CAAC,CAC/C,CACF,EACA,kBAAmB,CACjB,OAAQ,EAAQG,GAA4BA,EAA2B,EACvE,OAAQ,CAAE,OAAQA,EAAyB,MAAOC,GAAc,sBAAuB,CACzF,EACA,aAAc,CACZ,OAAQG,EACR,OAAQ,CAAC,CACX,EACA,SAAU,CACR,OAAQ,GAAQC,GAAY,CAACC,EAAgB,SAASf,EAAQ,GAAG,GACjE,OAAQc,GAAY,CAAC,CACvB,EACA,cAAe,CACb,OAAQ,EAAQG,EAChB,OAAQP,GAAc,eAAiB,CAAC,CAC1C,CACF,CACF",
6
+ "names": ["useBizProductContext", "checkItemAvailableForProduct", "useDiscountEnable", "useAiuiContext", "useBenefits", "variant", "coupon", "product", "bundle", "freeGift", "functionFreeGift", "memberFunctionResult", "creditsRedemption", "profile", "creditsRedemptionAmount", "trackingData", "total", "discountEnable", "showPaidShipping", "fullGift", "excludeProducts", "item", "showLevelDiscount"]
7
7
  }
@@ -118,24 +118,3 @@ export type FreeGift = {
118
118
  showCoupon: boolean;
119
119
  [key: string]: any;
120
120
  };
121
- export type BundleListItem = {
122
- id: string;
123
- price: number;
124
- comparePrice: number;
125
- savings: number;
126
- variants: {
127
- price: number;
128
- quantity: number;
129
- label: string;
130
- variant: ProductVariant;
131
- }[];
132
- };
133
- export type Bundle = {
134
- title: string;
135
- soldOutLabel: string;
136
- youSaveText: string;
137
- showCoupon: boolean;
138
- bundleList: BundleListItem[];
139
- showAtListing: boolean;
140
- [key: string]: any;
141
- };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/biz-components/Listing/types/product.ts"],
4
- "sourcesContent": ["import type {\n CurrencyCode,\n Image,\n Media,\n Product as ShopifyProduct,\n ProductVariant as ShopifyProductVariant,\n} from './graphql'\nimport { DiscountType } from '../const.js'\n\nexport type ProductPrice = {\n amount: number\n currencyCode: CurrencyCode\n}\n\nexport type ProductOption = {\n __typename?: 'MultipleChoiceOption'\n id: string\n name: string\n values: ProductOptionValues[]\n}\n\nexport type ProductOptionValues = {\n label: string\n hexColors?: string[]\n}\n\nexport type ProductVariant = {\n id: string | number\n options: ProductOption[]\n sku: string\n metafields?: Record<string, any>\n price: ProductPrice\n product: Product\n coupons: VariantCoupon[]\n weight?: number\n payload?: any\n} & Omit<ShopifyProductVariant, 'options' | 'metafields' | 'price'>\n\nexport type Product = {\n path?: string\n images: Image[]\n media: ProductMedia[]\n variants: ProductVariant[]\n price: ProductPrice\n options: ProductOption[]\n metafields?: { [key: string]: any }\n slug: string\n payload?: any\n} & Omit<ShopifyProduct, 'metafields' | 'images' | 'variants' | 'price' | 'options' | 'media'>\n\nexport type GetProductBody = {\n handles: string\n locale?: string\n}\n\nexport type ProductTypes = {\n product: Product\n getBody: GetProductBody\n}\n\nexport type GetAllProductPathsOperation<T extends ProductTypes = ProductTypes> = {\n data: { products: Pick<T['product'], 'path'>[] }\n variables: { first?: number }\n}\n\nexport type GetAllProductsOperation<T extends ProductTypes = ProductTypes> = {\n data: { products: T['product'][] }\n variables: {\n relevance?: 'featured' | 'best_selling' | 'newest'\n ids?: string[]\n first?: number\n }\n}\n\nexport type GetProductOperation<T extends ProductTypes = ProductTypes> = {\n data: { product?: T['product'] }\n variables: { path: string; slug?: never } | { path?: never; slug: string }\n}\n\nexport type Options = Record<string, string>\n\nexport type ProductMedia = Media & {\n sources?: {\n url: string\n altText: string\n }[]\n image?: {\n url: string\n altText: string\n }\n}\n\nexport type VariantCoupon = {\n title: string\n starts_at: string // ISO 8601 \u65E5\u671F\u5B57\u7B26\u4E32\n ends_at: string | null // ISO 8601 \u65E5\u671F\u5B57\u7B26\u4E32\u6216 null\n variant_shopify_id: number\n value_type: DiscountType\n value: string // \u8D1F\u6570\u7684\u767E\u5206\u6BD4\u503C\n currency: string\n fixed_value: string // \u56FA\u5B9A\u503C\n value_style: string // \u5E26\u6709\u8D27\u5E01\u7B26\u53F7\u7684\u503C\n variant_price4wscode: number\n discount_type: string // \u5047\u8BBE discount_type \u662F\u4E00\u4E2A\u5B57\u7B26\u4E32\n amazon_deal: boolean\n cdi_id: number\n cdi_updated_at: string // ISO 8601 \u65E5\u671F\u5B57\u7B26\u4E32\n}\n\nexport type ScriptDiscount = {\n type: DiscountType\n excludeSkus: string[]\n discount: number\n}\n\nexport type FreeGift = {\n title: string\n note: string\n soldOutLabel: string\n freeLabel: string\n giftList: ProductVariant[]\n count: number\n showCoupon: boolean\n [key: string]: any\n}\n\nexport type BundleListItem = {\n id: string\n price: number\n comparePrice: number\n savings: number\n variants: {\n price: number\n quantity: number\n label: string\n variant: ProductVariant\n }[]\n}\n\nexport type Bundle = {\n title: string\n soldOutLabel: string\n youSaveText: string\n showCoupon: boolean\n bundleList: BundleListItem[]\n showAtListing: boolean\n [key: string]: any\n}\n"],
4
+ "sourcesContent": ["import type {\n CurrencyCode,\n Image,\n Media,\n Product as ShopifyProduct,\n ProductVariant as ShopifyProductVariant,\n} from './graphql'\nimport { DiscountType } from '../const.js'\n\nexport type ProductPrice = {\n amount: number\n currencyCode: CurrencyCode\n}\n\nexport type ProductOption = {\n __typename?: 'MultipleChoiceOption'\n id: string\n name: string\n values: ProductOptionValues[]\n}\n\nexport type ProductOptionValues = {\n label: string\n hexColors?: string[]\n}\n\nexport type ProductVariant = {\n id: string | number\n options: ProductOption[]\n sku: string\n metafields?: Record<string, any>\n price: ProductPrice\n product: Product\n coupons: VariantCoupon[]\n weight?: number\n payload?: any\n} & Omit<ShopifyProductVariant, 'options' | 'metafields' | 'price'>\n\nexport type Product = {\n path?: string\n images: Image[]\n media: ProductMedia[]\n variants: ProductVariant[]\n price: ProductPrice\n options: ProductOption[]\n metafields?: { [key: string]: any }\n slug: string\n payload?: any\n} & Omit<ShopifyProduct, 'metafields' | 'images' | 'variants' | 'price' | 'options' | 'media'>\n\nexport type GetProductBody = {\n handles: string\n locale?: string\n}\n\nexport type ProductTypes = {\n product: Product\n getBody: GetProductBody\n}\n\nexport type GetAllProductPathsOperation<T extends ProductTypes = ProductTypes> = {\n data: { products: Pick<T['product'], 'path'>[] }\n variables: { first?: number }\n}\n\nexport type GetAllProductsOperation<T extends ProductTypes = ProductTypes> = {\n data: { products: T['product'][] }\n variables: {\n relevance?: 'featured' | 'best_selling' | 'newest'\n ids?: string[]\n first?: number\n }\n}\n\nexport type GetProductOperation<T extends ProductTypes = ProductTypes> = {\n data: { product?: T['product'] }\n variables: { path: string; slug?: never } | { path?: never; slug: string }\n}\n\nexport type Options = Record<string, string>\n\nexport type ProductMedia = Media & {\n sources?: {\n url: string\n altText: string\n }[]\n image?: {\n url: string\n altText: string\n }\n}\n\nexport type VariantCoupon = {\n title: string\n starts_at: string // ISO 8601 \u65E5\u671F\u5B57\u7B26\u4E32\n ends_at: string | null // ISO 8601 \u65E5\u671F\u5B57\u7B26\u4E32\u6216 null\n variant_shopify_id: number\n value_type: DiscountType\n value: string // \u8D1F\u6570\u7684\u767E\u5206\u6BD4\u503C\n currency: string\n fixed_value: string // \u56FA\u5B9A\u503C\n value_style: string // \u5E26\u6709\u8D27\u5E01\u7B26\u53F7\u7684\u503C\n variant_price4wscode: number\n discount_type: string // \u5047\u8BBE discount_type \u662F\u4E00\u4E2A\u5B57\u7B26\u4E32\n amazon_deal: boolean\n cdi_id: number\n cdi_updated_at: string // ISO 8601 \u65E5\u671F\u5B57\u7B26\u4E32\n}\n\nexport type ScriptDiscount = {\n type: DiscountType\n excludeSkus: string[]\n discount: number\n}\n\nexport type FreeGift = {\n title: string\n note: string\n soldOutLabel: string\n freeLabel: string\n giftList: ProductVariant[]\n count: number\n showCoupon: boolean\n [key: string]: any\n}\n\n// export type BundleListItem = {\n// id: string\n// price: number\n// comparePrice: number\n// savings: number\n// variants: {\n// price: number\n// quantity: number\n// label: string\n// variant: ProductVariant\n// }[]\n// }\n\n// export type Bundle = {\n// title: string\n// soldOutLabel: string\n// youSaveText: string\n// showCoupon: boolean\n// bundleList: BundleListItem[]\n// showAtListing: boolean\n// [key: string]: any\n// }\n"],
5
5
  "mappings": "AAOA,MAA6B",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,7 @@
1
+ import type { NotifyMeDialogProps } from './types.js';
2
+ declare const NotifyMeDialog: {
3
+ ({ open, onOpenChange, copy, classNames, checkboxes, subscriptionMeta, onSubmit, }: NotifyMeDialogProps): import("react/jsx-runtime").JSX.Element;
4
+ displayName: string;
5
+ };
6
+ export default NotifyMeDialog;
7
+ export type { NotifyMeDialogProps };
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as t,jsxs as n}from"react/jsx-runtime";import{useCallback as y,useEffect as ae,useState as f}from"react";import{Button as L,Text as c,Dialog as oe,DialogContent as le,DialogHeader as re,DialogTitle as ie,DialogDescription as se,Input as ne,Checkbox as me,Heading as z}from"../../components/index.js";import{cn as s}from"../../helpers/index.js";import*as ce from"react";import{useExposure as de}from"../../hooks/useExposure.js";const H="copy",I="NotifyMeDialog",pe=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,R=({open:P,onOpenChange:v,copy:$,classNames:r,checkboxes:i=[],subscriptionMeta:D,onSubmit:N})=>{const{title:T,subTitle:k,emailLabel:j="Email address",emailPlaceholder:q="your@email.com",submitBtnText:A="Notify Me",errorEmpty:F,errorInvalidEmail:G,errorCheckboxRequired:W,errorSubmit:E="Something went wrong. Please try again.",errorSubmitDetail:X,successTitle:J,successDesc:w,successBtnText:C}=$,S=ce.useRef(null);de(S,{componentType:H,componentName:I,componentTitle:T,componentDescription:k});const[x,M]=f(""),[g,_]=f(()=>i.map(()=>!1)),[d,u]=f("idle"),[K,h]=f(()=>i.map(()=>!1)),[o,p]=f("idle"),[B,b]=f(null),Q=B?X?.find(e=>e.code===B)?.message??E:E,U=o!=="loading"&&o!=="success",V=y(e=>{_(l=>{const a=[...l];return a[e]=!a[e],a}),h(l=>{const a=[...l];return a[e]=!1,a}),d!=="idle"&&u("idle"),o==="error-submit"&&(p("idle"),b(null))},[d,o]),Y=y(e=>{M(e.target.value),d!=="idle"&&u("idle"),h(l=>l.some(Boolean)?l.map(()=>!1):l),o==="error-submit"&&(p("idle"),b(null))},[d,o]),Z=y(async()=>{let e=!1;x.trim()?pe.test(x.trim())?u("idle"):(u("error-format"),e=!0):(u("error-empty"),e=!0);const l=i.map((a,m)=>a.label&&a.required&&!g[m]?(e=!0,!0):!1);if(h(l),!e){p("loading");try{const a=i.map((m,te)=>m.checkbox_id!==void 0?{checkbox_id:m.checkbox_id,checked:g[te]}:null).filter(m=>m!==null);await N({email:x.trim(),checkedItems:a,meta:D}),p("success")}catch(a){const m=a&&typeof a=="object"&&"code"in a?String(a.code):null;b(m),p("error-submit")}}},[x,i,g,D,N]);ae(()=>{if(o!=="error-submit")return;const e=setTimeout(()=>{p("idle"),b(null)},3e3);return()=>clearTimeout(e)},[o]);const O=y(e=>{e||(M(""),_(i.map(()=>!1)),u("idle"),h(i.map(()=>!1)),p("idle"),b(null)),v(e)},[i,v]),ee=i.some(e=>e.label);return t(oe,{open:P,onOpenChange:O,children:n(le,{ref:S,"aria-describedby":"notify-me-content",className:s("laptop:max-w-[480px] laptop:[&_.dialog-close-icon]:size-6 laptop:gap-8 rounded-box laptop:p-8 max-h-[90vh] w-[calc(100%-32px)] gap-6 overflow-y-auto bg-white p-6 [&_.dialog-close-icon]:size-5",r?.root),children:[o!=="success"&&n(re,{className:s(r?.header),children:[t(ie,{children:t(z,{as:"h2",size:2,className:s("text-info-primary text-center font-bold",r?.title),children:T})}),k&&t(se,{asChild:!0,children:t(c,{as:"p",className:s("text-info-primary laptop:text-base mt-1 text-center text-sm",r?.subTitle),children:k})})]}),o==="success"?n("div",{className:s("flex flex-col items-center text-center",r?.successText),children:[t("div",{className:"flex size-20 items-center justify-center",children:n("svg",{xmlns:"http://www.w3.org/2000/svg",width:"80",height:"80",viewBox:"0 0 80 80",fill:"none",children:[t("circle",{cx:"40",cy:"40",r:"35",fill:"#30D158"}),t("path",{d:"M23.3333 38.3333L36.6666 50L56.6666 30",stroke:"white",strokeWidth:"6.66667",strokeLinecap:"round",strokeLinejoin:"round"})]})}),n("div",{className:"mt-4",children:[t(z,{as:"h3",size:2,className:"text-info-primary font-bold",children:J}),w&&t(c,{as:"p",className:"text-info-primary laptop:text-base mt-1 text-sm",children:w})]}),C&&t(L,{variant:"primary",size:"lg",onClick:()=>v(!1),className:"laptop:mt-8 mt-6 w-full",children:C})]}):n("div",{className:"flex flex-col gap-4",children:[n("div",{className:r?.emailInput,children:[t(c,{as:"label",htmlFor:"notify-me-email",className:"text-info-primary laptop:text-base mb-2 block text-sm",children:j}),t(ne,{id:"notify-me-email",type:"email",placeholder:q,value:x,onChange:Y,disabled:o==="loading",className:s("placeholder:text-info-tertiary text-info-primary laptop:h-[54px] laptop:text-base laptop:p-4 border-lines-1 h-[44px] w-full bg-white p-3 text-sm font-bold placeholder:font-bold focus-visible:!outline-none",d!=="idle"&&"border-error-0")}),d==="error-empty"&&t(c,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:F}),d==="error-format"&&t(c,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:G})]}),ee&&t("div",{className:s("laptop:gap-4 flex flex-col gap-2",r?.checkboxes),children:i.map((e,l)=>e.label?n("div",{children:[n("label",{className:s("text-info-tertiary flex cursor-pointer items-start gap-2",r?.checkboxItem),children:[t(me,{checked:g[l],onCheckedChange:()=>V(l),"data-headless-type-name":`${H}#${I}`,"data-headless-title-desc-button":`''#''#${e.label}`,"data-headless-nav-position":"''#1",disabled:o==="loading",className:"border-info-secondary data-[state=checked]:bg-info-secondary mt-0.5 shrink-0"}),t(c,{as:"span",className:"text-info-tertiary laptop:text-base [&_a]:text-brand-0 text-sm leading-snug [&_a]:underline",html:e.label})]}),K[l]&&t(c,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:W})]},l):null)}),t(L,{variant:"primary",size:"lg",loading:o==="loading",disabled:!U,onClick:Z,className:s("w-full",r?.submitBtn),children:A}),o==="error-submit"&&t(c,{as:"p",className:s("text-error-0 laptop:text-base text-sm",r?.errorText),children:Q})]})]})})};R.displayName="NotifyMeDialog";var ge=R;export{ge as default};
2
+ //# sourceMappingURL=NotifyMeDialog.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/NotifyMeDialog/NotifyMeDialog.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport { useCallback, useEffect, useState } from 'react'\nimport {\n Button,\n Text,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n Input,\n Checkbox,\n Heading,\n} from '../../components/index.js'\nimport { cn } from '../../helpers/index.js'\nimport type { NotifyMeDialogProps } from './types.js'\nimport * as React from 'react'\nimport { useExposure } from '../../hooks/useExposure.js'\n\nconst componentType = 'copy'\nconst componentName = 'NotifyMeDialog'\n\ntype EmailState = 'idle' | 'error-empty' | 'error-format'\ntype SubmitState = 'idle' | 'loading' | 'success' | 'error-submit'\n\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nconst NotifyMeDialog = ({\n open,\n onOpenChange,\n copy,\n classNames,\n checkboxes = [],\n subscriptionMeta,\n onSubmit,\n}: NotifyMeDialogProps) => {\n const {\n title,\n subTitle,\n emailLabel = 'Email address',\n emailPlaceholder = 'your@email.com',\n submitBtnText = 'Notify Me',\n errorEmpty,\n errorInvalidEmail,\n errorCheckboxRequired,\n errorSubmit = 'Something went wrong. Please try again.',\n errorSubmitDetail,\n successTitle,\n successDesc,\n successBtnText,\n } = copy\n\n const notifyMeDialogRef = React.useRef<HTMLDivElement>(null)\n useExposure(notifyMeDialogRef, {\n componentType,\n componentName,\n componentTitle: title,\n componentDescription: subTitle,\n })\n\n const [email, setEmail] = useState('')\n const [checkedStates, setCheckedStates] = useState<boolean[]>(() => checkboxes.map(() => false))\n const [emailState, setEmailState] = useState<EmailState>('idle')\n const [checkboxErrors, setCheckboxErrors] = useState<boolean[]>(() => checkboxes.map(() => false))\n const [submitState, setSubmitState] = useState<SubmitState>('idle')\n const [errorCode, setErrorCode] = useState<string | null>(null)\n\n // \u6839\u636E\u9519\u8BEF\u7801\u5339\u914D\u5BF9\u5E94\u6587\u6848\uFF0C\u672A\u5339\u914D\u5230\u5219\u56DE\u9000\u5230 errorSubmit\n const resolvedErrorMessage = errorCode\n ? (errorSubmitDetail?.find(d => d.code === errorCode)?.message ?? errorSubmit)\n : errorSubmit\n\n // \u662F\u5426\u53EF\u4EE5\u70B9\u51FB\u63D0\u4EA4\uFF08loading/success \u65F6\u7981\u7528\uFF09\n const canSubmit = submitState !== 'loading' && submitState !== 'success'\n\n // checkbox \u72B6\u6001\u53D8\u5316\n const updateCheckedState = useCallback(\n (index: number) => {\n setCheckedStates(prev => {\n const next = [...prev]\n next[index] = !next[index]\n return next\n })\n // \u6E05\u9664\u5F53\u524D checkbox \u7684\u9519\u8BEF\u72B6\u6001\n setCheckboxErrors(prev => {\n const next = [...prev]\n next[index] = false\n return next\n })\n // \u6E05\u9664\u90AE\u7BB1\u9519\u8BEF\u548C\u63D0\u4EA4\u9519\u8BEF\n if (emailState !== 'idle') setEmailState('idle')\n if (submitState === 'error-submit') {\n setSubmitState('idle')\n setErrorCode(null)\n }\n },\n [emailState, submitState]\n )\n\n // \u90AE\u7BB1\u8F93\u5165\u53D8\u5316\n const handleEmailChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setEmail(e.target.value)\n if (emailState !== 'idle') setEmailState('idle')\n setCheckboxErrors(prev => (prev.some(Boolean) ? prev.map(() => false) : prev))\n if (submitState === 'error-submit') {\n setSubmitState('idle')\n setErrorCode(null)\n }\n },\n [emailState, submitState]\n )\n\n /**\n * \u5BA2\u6237\u7AEF onSubmit \u8C03\u7528\u793A\u4F8B\n *\n * \u63A5\u53E3\u5931\u8D25\u65F6\u9700 throw { code } \u4EE5\u4FBF\u7EC4\u4EF6\u6309 errorSubmitDetail \u5339\u914D\u5BF9\u5E94\u63D0\u793A\u6587\u6848\uFF0C\n * code \u4E3A number \u7C7B\u578B\u65F6\u7EC4\u4EF6\u4F1A\u81EA\u52A8\u8F6C\u4E3A string \u8FDB\u884C\u5339\u914D\u3002\n *\n * @example\n * const handleNotifyMeSubmit = useCallback(\n * async (params) => {\n * const { email, checkedItems, meta } = params\n * const res = await fetch('/api/multipass/shopifyservices/product_arrival_notices', {\n * method: 'POST',\n * headers: {\n * 'Content-Type': 'application/json',\n * 'current-language': locale,\n * },\n * body: JSON.stringify({\n * email,\n * locale,\n * sku: variant.sku,\n * shop: shop.primaryDomain?.host,\n * }),\n * })\n * if (res.ok) {\n * if (checkedItems?.some?.((item) => item.checked && item.checkbox_id === 'subscribe')) {\n * subscribe({ email, dealsType: 'outStockNotify_subscribe_emails' })\n * }\n * } else {\n * throw { code: res.status }\n * }\n * },\n * [locale, variant.sku, shop.primaryDomain?.host, subscribe],\n * )\n */\n // \u70B9\u51FB\u63D0\u4EA4\n const handleSubmit = useCallback(async () => {\n let hasError = false\n\n // \u6821\u9A8C\u90AE\u7BB1\u975E\u7A7A\n if (!email.trim()) {\n setEmailState('error-empty')\n hasError = true\n } else if (!EMAIL_REGEX.test(email.trim())) {\n setEmailState('error-format')\n hasError = true\n } else {\n setEmailState('idle')\n }\n\n // \u6821\u9A8C required checkbox\n const newCheckboxErrors = checkboxes.map((cb, i) => {\n if (cb.label && cb.required && !checkedStates[i]) {\n hasError = true\n return true\n }\n return false\n })\n setCheckboxErrors(newCheckboxErrors)\n\n if (hasError) return\n\n setSubmitState('loading')\n try {\n const checkedItems = checkboxes\n .map((cb, i) =>\n cb.checkbox_id !== undefined ? { checkbox_id: cb.checkbox_id!, checked: checkedStates[i] } : null\n )\n .filter((item): item is { checkbox_id: string; checked: boolean } => item !== null)\n await onSubmit({ email: email.trim(), checkedItems, meta: subscriptionMeta })\n setSubmitState('success')\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err ? String((err as Record<string, unknown>).code) : null\n setErrorCode(code)\n setSubmitState('error-submit')\n }\n }, [email, checkboxes, checkedStates, subscriptionMeta, onSubmit])\n\n // error-submit 3s \u540E\u81EA\u52A8\u6D88\u5931\n useEffect(() => {\n if (submitState !== 'error-submit') return\n const timer = setTimeout(() => {\n setSubmitState('idle')\n setErrorCode(null)\n }, 3000)\n return () => clearTimeout(timer)\n }, [submitState])\n\n // \u5173\u95ED\u5F39\u7A97\u65F6\u91CD\u7F6E\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n if (!isOpen) {\n setEmail('')\n setCheckedStates(checkboxes.map(() => false))\n setEmailState('idle')\n setCheckboxErrors(checkboxes.map(() => false))\n setSubmitState('idle')\n setErrorCode(null)\n }\n onOpenChange(isOpen)\n },\n [checkboxes, onOpenChange]\n )\n\n const hasCheckboxes = checkboxes.some(cb => cb.label)\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogContent\n ref={notifyMeDialogRef}\n aria-describedby=\"notify-me-content\"\n className={cn(\n 'laptop:max-w-[480px] laptop:[&_.dialog-close-icon]:size-6 laptop:gap-8 rounded-box laptop:p-8 max-h-[90vh] w-[calc(100%-32px)] gap-6 overflow-y-auto bg-white p-6 [&_.dialog-close-icon]:size-5',\n classNames?.root\n )}\n >\n {submitState !== 'success' && (\n <DialogHeader className={cn(classNames?.header)}>\n <DialogTitle>\n <Heading as=\"h2\" size={2} className={cn('text-info-primary text-center font-bold', classNames?.title)}>\n {title}\n </Heading>\n </DialogTitle>\n {subTitle && (\n <DialogDescription asChild>\n <Text\n as=\"p\"\n className={cn('text-info-primary laptop:text-base mt-1 text-center text-sm', classNames?.subTitle)}\n >\n {subTitle}\n </Text>\n </DialogDescription>\n )}\n </DialogHeader>\n )}\n\n {submitState === 'success' ? (\n <div className={cn('flex flex-col items-center text-center', classNames?.successText)}>\n {/* \u6210\u529F\u56FE\u6807 */}\n <div className=\"flex size-20 items-center justify-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" fill=\"none\">\n <circle cx=\"40\" cy=\"40\" r=\"35\" fill=\"#30D158\" />\n <path\n d=\"M23.3333 38.3333L36.6666 50L56.6666 30\"\n stroke=\"white\"\n strokeWidth=\"6.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <div className=\"mt-4\">\n {/* \u6807\u9898 */}\n <Heading as=\"h3\" size={2} className=\"text-info-primary font-bold\">\n {successTitle}\n </Heading>\n {/* \u526F\u6587\u6848 */}\n {successDesc && (\n <Text as=\"p\" className=\"text-info-primary laptop:text-base mt-1 text-sm\">\n {successDesc}\n </Text>\n )}\n </div>\n {/* \u786E\u8BA4\u6309\u94AE */}\n {successBtnText && (\n <Button\n variant=\"primary\"\n size=\"lg\"\n onClick={() => onOpenChange(false)}\n className=\"laptop:mt-8 mt-6 w-full\"\n >\n {successBtnText}\n </Button>\n )}\n </div>\n ) : (\n <div className=\"flex flex-col gap-4\">\n {/* \u90AE\u7BB1\u8F93\u5165\u6846 */}\n <div className={classNames?.emailInput}>\n <Text\n as=\"label\"\n htmlFor=\"notify-me-email\"\n className=\"text-info-primary laptop:text-base mb-2 block text-sm\"\n >\n {emailLabel}\n </Text>\n <Input\n id=\"notify-me-email\"\n type=\"email\"\n placeholder={emailPlaceholder}\n value={email}\n onChange={handleEmailChange}\n disabled={submitState === 'loading'}\n className={cn(\n 'placeholder:text-info-tertiary text-info-primary laptop:h-[54px] laptop:text-base laptop:p-4 border-lines-1 h-[44px] w-full bg-white p-3 text-sm font-bold placeholder:font-bold focus-visible:!outline-none',\n emailState !== 'idle' && 'border-error-0'\n )}\n />\n {emailState === 'error-empty' && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorEmpty}\n </Text>\n )}\n {emailState === 'error-format' && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorInvalidEmail}\n </Text>\n )}\n </div>\n\n {/* Checkboxes \u5217\u8868 */}\n {hasCheckboxes && (\n <div className={cn('laptop:gap-4 flex flex-col gap-2', classNames?.checkboxes)}>\n {checkboxes.map((cb, i) => {\n if (!cb.label) return null\n return (\n <div key={i}>\n <label\n className={cn(\n 'text-info-tertiary flex cursor-pointer items-start gap-2',\n classNames?.checkboxItem\n )}\n >\n <Checkbox\n checked={checkedStates[i]}\n onCheckedChange={() => updateCheckedState(i)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`''#''#${cb.label}`}\n data-headless-nav-position={`''#1`}\n disabled={submitState === 'loading'}\n className=\"border-info-secondary data-[state=checked]:bg-info-secondary mt-0.5 shrink-0\"\n />\n <Text\n as=\"span\"\n className=\"text-info-tertiary laptop:text-base [&_a]:text-brand-0 text-sm leading-snug [&_a]:underline\"\n html={cb.label}\n />\n </label>\n {checkboxErrors[i] && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorCheckboxRequired}\n </Text>\n )}\n </div>\n )\n })}\n </div>\n )}\n\n {/* \u63D0\u4EA4\u6309\u94AE */}\n <Button\n variant=\"primary\"\n size=\"lg\"\n loading={submitState === 'loading'}\n disabled={!canSubmit}\n onClick={handleSubmit}\n className={cn('w-full', classNames?.submitBtn)}\n >\n {submitBtnText}\n </Button>\n\n {/* \u63D0\u4EA4\u9519\u8BEF\uFF08\u5F39\u7A97\u6700\u5E95\u90E8\uFF09 */}\n {submitState === 'error-submit' && (\n <Text as=\"p\" className={cn('text-error-0 laptop:text-base text-sm', classNames?.errorText)}>\n {resolvedErrorMessage}\n </Text>\n )}\n </div>\n )}\n </DialogContent>\n </Dialog>\n )\n}\n\nNotifyMeDialog.displayName = 'NotifyMeDialog'\n\nexport default NotifyMeDialog\nexport type { NotifyMeDialogProps }\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "useCallback", "useEffect", "useState", "Button", "Text", "Dialog", "DialogContent", "DialogHeader", "DialogTitle", "DialogDescription", "Input", "Checkbox", "Heading", "cn", "React", "useExposure", "componentType", "componentName", "EMAIL_REGEX", "NotifyMeDialog", "open", "onOpenChange", "copy", "classNames", "checkboxes", "subscriptionMeta", "onSubmit", "title", "subTitle", "emailLabel", "emailPlaceholder", "submitBtnText", "errorEmpty", "errorInvalidEmail", "errorCheckboxRequired", "errorSubmit", "errorSubmitDetail", "successTitle", "successDesc", "successBtnText", "notifyMeDialogRef", "email", "setEmail", "checkedStates", "setCheckedStates", "emailState", "setEmailState", "checkboxErrors", "setCheckboxErrors", "submitState", "setSubmitState", "errorCode", "setErrorCode", "resolvedErrorMessage", "d", "canSubmit", "updateCheckedState", "index", "prev", "next", "handleEmailChange", "handleSubmit", "hasError", "newCheckboxErrors", "cb", "i", "checkedItems", "item", "err", "code", "timer", "handleOpenChange", "isOpen", "hasCheckboxes", "NotifyMeDialog_default"]
7
+ }
@@ -0,0 +1,2 @@
1
+ export { default as NotifyMeDialog } from './NotifyMeDialog.js';
2
+ export type { NotifyMeDialogProps, NotifyMeDialogCopy, NotifyMeDialogSemanticName, CheckboxConfig, ErrorDetail, SubscribeFormData, SubscriptionMeta, } from './types.js';
@@ -0,0 +1,2 @@
1
+ import{default as i}from"./NotifyMeDialog.js";export{i as NotifyMeDialog};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/NotifyMeDialog/index.tsx"],
4
+ "sourcesContent": ["export { default as NotifyMeDialog } from './NotifyMeDialog.js'\nexport type {\n NotifyMeDialogProps,\n NotifyMeDialogCopy,\n NotifyMeDialogSemanticName,\n CheckboxConfig,\n ErrorDetail,\n SubscribeFormData,\n SubscriptionMeta,\n} from './types.js'\n"],
5
+ "mappings": "AAAA,OAAoB,WAAXA,MAAiC",
6
+ "names": ["default"]
7
+ }
@@ -0,0 +1,111 @@
1
+ /**
2
+ * CheckboxConfig - 勾选框配置
3
+ *
4
+ * 每项独立控制展示与提交限制,顺序按数组顺序渲染。
5
+ * label 有值时展示该项,无值时跳过不渲染。
6
+ */
7
+ export interface CheckboxConfig {
8
+ /** checkbox 名称标识,用于提交时识别选中了哪些项 */
9
+ checkbox_id: string;
10
+ /** checkbox 旁展示的文案;为空或不传则不渲染该 checkbox */
11
+ label: string;
12
+ /** 是否必须勾选才能提交;true 时未勾选则按钮 disabled;默认 false */
13
+ required?: boolean;
14
+ }
15
+ /**
16
+ * SubscriptionMeta - 订阅元数据
17
+ *
18
+ * 区分 OOS 到货通知和活动订阅两种模式,确保提交时携带正确的业务参数。
19
+ */
20
+ export type SubscriptionMeta = {
21
+ /** 固定值,标识 OOS 到货通知 */
22
+ mode: 'oos';
23
+ } | {
24
+ /** 固定值,标识活动订阅 */
25
+ mode: 'activity';
26
+ /** 活动标识,由业务层从 activeNotifyInfo 配置中读取 */
27
+ dealsType: string;
28
+ };
29
+ /**
30
+ * ErrorDetail - 按错误码映射错误提示
31
+ *
32
+ * 支持消费方根据接口返回的错误码配置不同的提示文案。
33
+ * code 匹配时显示对应 message;未匹配到则回退到 errorSubmit。
34
+ */
35
+ export interface ErrorDetail {
36
+ /** 错误码,如 "422"、"500" */
37
+ code: string;
38
+ /** 该错误码对应的提示文案 */
39
+ message: string;
40
+ }
41
+ /**
42
+ * NotifyMeDialogCopy - 文案配置
43
+ *
44
+ * 将弹窗内所有可配置文案集中到一个对象中,
45
+ * 方便从 CMS / 多语言配置层一次性传入。
46
+ */
47
+ export interface NotifyMeDialogCopy {
48
+ /** 弹窗主标题,如 "Email me when available" */
49
+ title: string;
50
+ /** 弹窗副标题;为空时不渲染 */
51
+ subTitle?: string;
52
+ /** 邮箱输入框占位文案 */
53
+ emailPlaceholder?: string;
54
+ /** 提交按钮文案 */
55
+ submitBtnText?: string;
56
+ /** 邮箱输入框标签文案,默认 "Email address" */
57
+ emailLabel?: string;
58
+ /** 邮箱输入框为空时的错误提示 */
59
+ errorEmpty: string;
60
+ /** 邮箱格式不合法时的错误提示 */
61
+ errorInvalidEmail: string;
62
+ /** 必选 checkbox 未勾选时的提示文案 */
63
+ errorCheckboxRequired: string;
64
+ /** 接口调用失败时的默认错误提示,当 errorSubmitDetail 中未匹配到对应 code 时使用 */
65
+ errorSubmit?: string;
66
+ /** 按错误码映射的错误提示,code 匹配到时显示对应 message;未传入或不匹配时回退到 errorSubmit */
67
+ errorSubmitDetail?: ErrorDetail[];
68
+ /** 提交成功后的主标题 */
69
+ successTitle: string;
70
+ /** 提交成功后的副文案;为空时不渲染 */
71
+ successDesc?: string;
72
+ /** 提交成功后的按钮文案;为空时不渲染按钮 */
73
+ successBtnText?: string;
74
+ }
75
+ /**
76
+ * NotifyMeDialogSemanticName - 组件语义化区域名
77
+ *
78
+ * 用于 classNames prop,按语义区域自定义样式。
79
+ * 未传入的 key 使用组件默认样式。
80
+ */
81
+ export type NotifyMeDialogSemanticName = 'root' | 'header' | 'title' | 'subTitle' | 'emailInput' | 'checkboxes' | 'checkboxItem' | 'submitBtn' | 'errorText' | 'successText';
82
+ /**
83
+ * SubscribeFormData - 提交时暴露的完整表单数据
84
+ */
85
+ export interface SubscribeFormData {
86
+ /** 用户输入的邮箱 */
87
+ email: string;
88
+ /** 各 checkbox 的状态列表,仅包含配置了 name 的项 */
89
+ checkedItems: {
90
+ checkbox_id: string;
91
+ checked: boolean;
92
+ }[];
93
+ /** 订阅元数据 */
94
+ meta: SubscriptionMeta;
95
+ }
96
+ export interface NotifyMeDialogProps {
97
+ /** 是否打开弹窗 */
98
+ open: boolean;
99
+ /** 关闭弹窗回调 */
100
+ onOpenChange: (open: boolean) => void;
101
+ /** 文案配置 */
102
+ copy: NotifyMeDialogCopy;
103
+ /** 各区域自定义样式 */
104
+ classNames?: Partial<Record<NotifyMeDialogSemanticName, string>>;
105
+ /** 勾选框列表,支持配置多个;每项 label 有值时展示,无值时跳过 */
106
+ checkboxes?: CheckboxConfig[];
107
+ /** 订阅元数据,区分 OOS / 活动两种模式 */
108
+ subscriptionMeta: SubscriptionMeta;
109
+ /** 提交回调,接收完整表单数据,业务层决定调哪个接口 */
110
+ onSubmit: (data: SubscribeFormData) => Promise<void>;
111
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as l,jsxs as Se}from"react/jsx-runtime";import ie,{useState as L,useEffect as b,useRef as y,useImperativeHandle as oe,useId as le}from"react";import{cn as ce}from"../../helpers/utils.js";import{Tabs as me,TabsList as fe,TabsTrigger as pe}from"../../components/tabs.js";import ue from"../Title/index.js";import de from"../SwiperBox/index.js";import{withLayout as he}from"../../shared/Styles.js";import{gaTrack as V}from"../../shared/track.js";import{useMediaQuery as ge}from"react-responsive";import{useRollout as _e}from"../../hooks/useRollout.js";import{ShelfDisplayWrapItem as we,ShelfDisplayHorizontalItem as be}from"./shelfDisplayItem.js";const ye="image",Te="product_shelf",ve=f=>f==null?"default":String(f).replace(/[^a-zA-Z0-9_-]/g,"")||"default",B=ie.forwardRef(({key:f,data:p,event:E,buildData:T,breakpoints:N,className:z="",recommendedData:i,target:A="_self",metafields:q,isDisplayGudgments:v=!1,isDisplayBackImage:$=!1,renderOriginalPrice:O,renderPriceLabel:K,renderPrice:Q,onAddCart:W,onBuyNow:Z,onLearnMore:j,formatPrice:F,...G},J)=>{const{productsTab:a=[],productsCard:S=[],title:k,isShowTab:u=!0,tabShape:U="square",isShowTag:X=!1,isShowOriginalPrice:Y=!0,isShowRecommendedCard:I=!1,...ee}=p,[d,R]=L(""),[r,g]=L([]),D=y(!1),_=y(!1),x=y(null),te=le(),se=ge({query:"(max-width: 768px)"}),[ne,M]=_e({threshold:0}),h=r?.length<=1&&v,c=!se&&r?.length<=2&&v,w=e=>{switch(e){case 1440:return c?r?.length:4;case 1024:return c?r?.length:3;default:return c?r?.length:2.3}},P=()=>{V({event:"ga4Event",event_name:"view_item_list",event_parameters:{page_group:"Home Page",item_list_name:"Home_Page_Bundle",items:i?.map((e,s)=>{const n=e?.variants?.find(t=>t?.sku===e?.sku)||e?.variants?.[0];return{item_id:e?.sku||n?.sku,item_name:e?.name,item_variant:n?.name,price:n?.price,index:s+1}})}})},m=(e,s)=>{if(s){const o=i?.map?.(n=>({...n,isShowRecommended:!0}));g(o?.length?o||[]:[])}else if(Array.isArray(e)){const n=e?.map?.(t=>{const H=T?.products?.find(re=>re?.handle===t?.handle);if(H)return{sku:t.sku,isShowRecommended:!1,custom_name:t.custom_name,custom_description:t.custom_description,custom_image:t.custom_image,custom_theme:t.custom_theme,custom_primary_link:t?.custom_primary_link||"",custom_secondary_link:t?.custom_secondary_link||"",custom_bg_image:t?.custom_bg_image||"",...H}})?.filter(t=>t);g(n?.length?n||[]:[])}else g([])};oe(J,()=>x.current),b(()=>{M&&i?.length&&!D.current&&(D.current=!0,P())},[M,i]),b(()=>{if(!_.current){if(!_.current&&i?.length&&(_.current=!0),u){const e=a?.find(s=>s?.tab===d)||a?.[0];R(e?.tab||""),m(e?.data||[],e?.isShowRecommendedTab);return}m(S,I)}},[i]),b(()=>{if(u){const e=a?.find(s=>s?.tab===d)||a?.[0];m(e?.data||[],e?.isShowRecommendedTab);return}m(S,I)},[T]);const ae=ve(d),C=`${te}-${ae}`;return Se("div",{ref:x,...G,className:ce("shelf-display-wrap text-info-primary w-full",z,{"aiui-dark":p?.theme==="dark"}),children:[k&&l(ue,{data:{title:k}}),u&&a?.length>0&&l(me,{value:d,onValueChange:e=>{const s=a?.find(o=>o?.tab===e);if(s){if(R(e),m(s.data||[],s.isShowRecommendedTab),!s.isShowRecommendedTab){V({event:"ga4Event",event_name:"component_click",event_parameters:{page_group:"Home Page",component_type:ye,component_name:Te,component_title:p?.title,component_position:1,navigation:e}});return}P()}},shape:U==="rounded"?"rounded":"square",children:l(fe,{children:a.map(e=>l(pe,{value:e?.tab,children:e?.tab||""},e?.id||e?.tab))})}),l("div",{ref:ne,className:"tablet:min-h-[393px] laptop:min-h-[425px] desktop:min-h-[405px] lg-desktop:min-h-[409px]",children:l(de,{data:{list:r,configuration:{...ee,event:E,isShowTag:X,isShowOriginalPrice:Y,target:A,metafields:q,itemLength:r?.length,isDisplayBackImage:$,renderOriginalPrice:O,renderPriceLabel:K,renderPrice:Q,onAddCart:W,onBuyNow:Z,onLearnMore:j,formatPrice:F}},id:C,className:`${u?"mt-6":""} shelf-display-swiper-box !overflow-visible`,itemClassName:c?"flex-1":"",Slide:c?be:we,breakpoints:N||{0:{spaceBetween:12,freeMode:!1,slidesPerView:1},374:{spaceBetween:12,freeMode:!1,slidesPerView:h?1:1.2},768:{spaceBetween:h?0:16,freeMode:!1,slidesPerView:w()},1024:{spaceBetween:h?0:16,freeMode:!1,slidesPerView:w(1024)},1440:{spaceBetween:h?0:16,freeMode:!1,slidesPerView:w(1440)}}},C)})]})});B.displayName="ShelfDisplay";var Ve=he(B);export{Ve as default};
1
+ "use client";import{jsx as i,jsxs as z}from"react/jsx-runtime";import re,{useState as ie,useEffect as H,useRef as L,useImperativeHandle as ae,useId as le,useMemo as b,useCallback as ce}from"react";import{cn as me}from"../../helpers/utils.js";import{Tabs as pe,TabsList as ue,TabsTrigger as fe,TabsContent as de}from"../../components/tabs.js";import he from"../Title/index.js";import _e from"../SwiperBox/index.js";import{withLayout as ge}from"../../shared/Styles.js";import{gaTrack as C}from"../../shared/track.js";import{useMediaQuery as be}from"react-responsive";import{useRollout as we}from"../../hooks/useRollout.js";import{ShelfDisplayWrapItem as ye,ShelfDisplayHorizontalItem as ve}from"./shelfDisplayItem.js";const ke="image",Se="product_shelf",E=a=>a==null?"default":String(a).replace(/[^a-zA-Z0-9_-]/g,"")||"default";function w(a){return a.trim().replace(/\s+/g,"-")}const N=re.forwardRef(({key:a,data:p,event:q,buildData:u,breakpoints:$,className:I="",recommendedData:o,target:O="_self",metafields:A,isDisplayGudgments:c=!1,isDisplayBackImage:Q=!1,renderOriginalPrice:W,renderPriceLabel:Z,renderPrice:j,onAddCart:F,onBuyNow:J,onLearnMore:K,formatPrice:U,...X},Y)=>{const{productsTab:r=[],productsCard:y=[],title:v,isShowTab:m=!0,tabShape:G="square",isShowTag:ee=!1,isShowOriginalPrice:ne=!0,isShowRecommendedCard:k=!1,...se}=p,[f,S]=ie(""),T=L(!1),x=L(null),te=le(),h=be({query:"(max-width: 768px)"}),[D,R]=we({threshold:0}),oe=E(te),M=ce(e=>e.isShowRecommendedTab?o?.map(n=>({...n,isShowRecommended:!0}))||[]:e.data?.map(n=>{const s=u?.products?.find(t=>t?.handle===n?.handle);if(s)return{sku:n.sku,isShowRecommended:!1,custom_name:n.custom_name,custom_description:n.custom_description,custom_image:n.custom_image,custom_theme:n.custom_theme,custom_primary_link:n?.custom_primary_link||"",custom_secondary_link:n?.custom_secondary_link||"",custom_bg_image:n?.custom_bg_image||"",...s}}).filter(Boolean)||[],[u,o]),d=b(()=>r.map(e=>({...e,resolvedData:M(e)})),[r,M]),_=b(()=>k?o?.map(e=>({...e,isShowRecommended:!0}))||[]:y?.map(e=>{const n=u?.products?.find(s=>s?.handle===e?.handle);if(n)return{sku:e.sku,isShowRecommended:!1,custom_name:e.custom_name,custom_description:e.custom_description,custom_image:e.custom_image,custom_theme:e.custom_theme,custom_primary_link:e?.custom_primary_link||"",custom_secondary_link:e?.custom_secondary_link||"",custom_bg_image:e?.custom_bg_image||"",...n}}).filter(Boolean)||[],[y,u,o,k]),B=b(()=>m?d.find(n=>w(n?.tab)===w(f))?.resolvedData||d[0]?.resolvedData||[]:_,[m,d,f,_]),Te=B?.length<=1&&c,xe=!h&&B?.length<=2&&c,g=(e,n)=>{const s=!h&&e?.length<=2&&c;switch(n){case 1440:return s?e?.length:4;case 1024:return s?e?.length:3;default:return s?e?.length:2.3}},P=()=>{C({event:"ga4Event",event_name:"view_item_list",event_parameters:{page_group:"Home Page",item_list_name:"Home_Page_Bundle",items:o?.map((e,n)=>{const t=e?.variants?.find(l=>l?.sku===e?.sku)||e?.variants?.[0];return{item_id:e?.sku||t?.sku,item_name:e?.name,item_variant:t?.name,price:t?.price,index:n+1}})}})};ae(Y,()=>x.current),H(()=>{R&&o?.length&&!T.current&&(T.current=!0,P())},[R,o]),H(()=>{m&&r?.length>0&&!f&&S(r[0]?.tab||"")},[]);const V=(e,n)=>{const s=`${oe}-${E(n)}`,t=!h&&e?.length<=2&&c,l=e?.length<=1&&c;return i(_e,{data:{list:e,configuration:{...se,event:q,isShowTag:ee,isShowOriginalPrice:ne,target:O,metafields:A,itemLength:e?.length,isDisplayBackImage:Q,renderOriginalPrice:W,renderPriceLabel:Z,renderPrice:j,onAddCart:F,onBuyNow:J,onLearnMore:K,formatPrice:U}},id:s,className:`${m?"mt-6":""} shelf-display-swiper-box !overflow-visible`,itemClassName:t?"flex-1":"",Slide:t?ve:ye,breakpoints:$||{0:{spaceBetween:12,freeMode:!1,slidesPerView:1},374:{spaceBetween:12,freeMode:!1,slidesPerView:l?1:1.2},768:{spaceBetween:l?0:16,freeMode:!1,slidesPerView:g(e)},1024:{spaceBetween:l?0:16,freeMode:!1,slidesPerView:g(e,1024)},1440:{spaceBetween:l?0:16,freeMode:!1,slidesPerView:g(e,1440)}}},s)};return z("div",{ref:x,...X,className:me("shelf-display-wrap text-info-primary w-full",I,{"aiui-dark":p?.theme==="dark"}),children:[v&&i(he,{data:{title:v}}),m&&r?.length>0?z(pe,{value:f,onValueChange:e=>{const n=r?.find(s=>w(s?.tab)===e);if(n){if(S(e),!n.isShowRecommendedTab){C({event:"ga4Event",event_name:"component_click",event_parameters:{page_group:"Home Page",component_type:ke,component_name:Se,component_title:p?.title,component_position:1,navigation:e}});return}P()}},shape:G==="rounded"?"rounded":"square",children:[i(ue,{children:r.map(e=>i(fe,{value:e?.tab,children:e?.tab||""},e?.id||e?.tab))}),d.map(e=>i(de,{value:e?.tab,children:i("div",{ref:D,className:"tablet:min-h-[393px] laptop:min-h-[425px] desktop:min-h-[405px] lg-desktop:min-h-[409px]",children:V(e.resolvedData||[],e?.tab||"")})},e?.id||e?.tab))]}):i("div",{ref:D,className:"tablet:min-h-[393px] laptop:min-h-[425px] desktop:min-h-[405px] lg-desktop:min-h-[409px]",children:V(_,"card")})]})});N.displayName="ShelfDisplay";var Ne=ge(N);export{Ne as default};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/ShelfDisplay/index.tsx"],
4
- "sourcesContent": ["'use client'\nimport React, { useState, useEffect, useRef, useImperativeHandle, useId } from 'react'\nimport { cn } from '../../helpers/utils.js'\nimport { Tabs, TabsList, TabsTrigger } from '../../components/tabs.js'\nimport Title from '../Title/index.js'\nimport SwiperBox from '../SwiperBox/index.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { gaTrack } from '../../shared/track.js'\nimport { useMediaQuery } from 'react-responsive'\nimport { useRollout } from '../../hooks/useRollout.js'\nimport { ShelfDisplayWrapItem, ShelfDisplayHorizontalItem } from './shelfDisplayItem.js'\nimport type { ShelfDisplayProps, ShelfDisplayItem } from './shelfDisplay.js'\n\nconst componentType = 'image'\nconst componentName = 'product_shelf'\n\nconst sanitizeCssSelector = (value?: string | number) => {\n if (value === undefined || value === null) return 'default'\n const sanitized = String(value).replace(/[^a-zA-Z0-9_-]/g, '')\n return sanitized || 'default'\n}\n\nconst ShelfDisplay = React.forwardRef<HTMLDivElement, ShelfDisplayProps>(\n (\n {\n key,\n data,\n event,\n buildData,\n breakpoints,\n className = '',\n recommendedData,\n target = '_self',\n metafields,\n isDisplayGudgments = false,\n isDisplayBackImage = false,\n renderOriginalPrice,\n renderPriceLabel,\n renderPrice,\n onAddCart,\n onBuyNow,\n onLearnMore,\n formatPrice,\n ...rest\n },\n ref\n ) => {\n const {\n productsTab = [],\n productsCard = [],\n title,\n isShowTab = true,\n tabShape = 'square',\n isShowTag = false,\n isShowOriginalPrice = true,\n isShowRecommendedCard = false,\n ...other\n } = data\n\n const [tabId, setTabId] = useState<string>('')\n const [currentItems, setCurrentItems] = useState<ShelfDisplayItem[]>([])\n\n const isView = useRef<boolean>(false)\n const isRecommend = useRef<boolean>(false)\n const innerRef = useRef<HTMLDivElement>(null)\n const instanceId = useId()\n\n const isMobile = useMediaQuery({ query: '(max-width: 768px)' })\n const [viewRef, inView] = useRollout<HTMLDivElement>({ threshold: 0 })\n\n const isOnce = currentItems?.length <= 1 && isDisplayGudgments\n const isShowGudgments = !isMobile && currentItems?.length <= 2 && isDisplayGudgments\n\n const showItemLength = (size?: number) => {\n switch (size) {\n case 1440:\n return isShowGudgments ? currentItems?.length : 4\n case 1024:\n return isShowGudgments ? currentItems?.length : 3\n default:\n return isShowGudgments ? currentItems?.length : 2.3\n }\n }\n\n const gackViewEvent = () => {\n gaTrack({\n event: 'ga4Event',\n event_name: 'view_item_list',\n event_parameters: {\n page_group: 'Home Page',\n item_list_name: 'Home_Page_Bundle',\n items: recommendedData?.map((item, index) => {\n const findData = item?.variants?.find((v: any) => v?.sku === item?.sku)\n const variant = findData || item?.variants?.[0]\n return {\n item_id: item?.sku || variant?.sku,\n item_name: item?.name,\n item_variant: variant?.name,\n price: variant?.price,\n index: index + 1,\n }\n }),\n },\n })\n }\n\n const handleCurrentTab = (currentData: ShelfDisplayItem[], flag: boolean) => {\n if (flag) {\n const newCurrentData = recommendedData?.map?.(item => {\n return {\n ...item,\n isShowRecommended: true,\n }\n })\n setCurrentItems(newCurrentData?.length ? newCurrentData || [] : [])\n } else {\n const isArray = Array.isArray(currentData)\n if (isArray) {\n const newCurrentData = currentData\n ?.map?.(item => {\n const findData = buildData?.products?.find(params => params?.handle === item?.handle)\n if (findData) {\n return {\n sku: item.sku,\n isShowRecommended: false,\n custom_name: item.custom_name,\n custom_description: item.custom_description,\n custom_image: item.custom_image,\n custom_theme: item.custom_theme,\n custom_primary_link: item?.custom_primary_link || '',\n custom_secondary_link: item?.custom_secondary_link || '',\n custom_bg_image: item?.custom_bg_image || '',\n ...findData,\n }\n }\n })\n ?.filter(item => item)\n setCurrentItems(newCurrentData?.length ? newCurrentData || [] : [])\n } else {\n setCurrentItems([])\n }\n }\n }\n\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement)\n\n useEffect(() => {\n if (inView && recommendedData?.length && !isView.current) {\n isView.current = true\n gackViewEvent()\n }\n }, [inView, recommendedData])\n\n // \u7B97\u6CD5\u6570\u636E\u4F1A\u7A0D\u5FAE\u5EF6\u8FDF\uFF0C\u6240\u4EE5\u9700\u76D1\u542CrecommendedData\uFF0C\u4E3A\u4E86\u9632\u6B62\u5728\u6709\u7B97\u6CD5\u6570\u636E\u4E14\u5BF9\u9ED8\u8BA4\u6E32\u67D3\u7B2C\u4E00\u4E2A\u540E\u53CD\u590D\u89E6\u53D1\uFF0C\u7528isRecommend\u5173\u95ED\n useEffect(() => {\n if (isRecommend.current) return\n if (!isRecommend.current && recommendedData?.length) {\n isRecommend.current = true\n }\n if (isShowTab) {\n const currentTab = productsTab?.find(item => item?.tab === tabId) || productsTab?.[0]\n setTabId(currentTab?.tab || '')\n handleCurrentTab(currentTab?.data || [], currentTab?.isShowRecommendedTab)\n return\n }\n handleCurrentTab(productsCard, isShowRecommendedCard)\n }, [recommendedData])\n\n useEffect(() => {\n if (isShowTab) {\n const currentTab = productsTab?.find(item => item?.tab === tabId) || productsTab?.[0]\n handleCurrentTab(currentTab?.data || [], currentTab?.isShowRecommendedTab)\n return\n }\n handleCurrentTab(productsCard, isShowRecommendedCard)\n // buildData \u66F4\u65B0\u65F6\u9700\u8981\u91CD\u65B0\u8BA1\u7B97\u5F53\u524D\u5217\u8868\n }, [buildData])\n\n const safeTabKey = sanitizeCssSelector(tabId)\n const swiperInstanceId = `${instanceId}-${safeTabKey}`\n\n return (\n <div\n ref={innerRef}\n {...rest}\n className={cn('shelf-display-wrap text-info-primary w-full', className, {\n 'aiui-dark': data?.theme === 'dark',\n })}\n >\n {title && <Title data={{ title: title }} />}\n {isShowTab && productsTab?.length > 0 && (\n <Tabs\n value={tabId}\n onValueChange={value => {\n const currentTab = productsTab?.find(item => item?.tab === value)\n if (currentTab) {\n setTabId(value)\n handleCurrentTab(currentTab.data || [], currentTab.isShowRecommendedTab)\n if (!currentTab.isShowRecommendedTab) {\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_click',\n event_parameters: {\n page_group: 'Home Page',\n component_type: componentType,\n component_name: componentName,\n component_title: data?.title,\n component_position: 1,\n navigation: value,\n },\n })\n return\n }\n gackViewEvent()\n }\n }}\n shape={tabShape === 'rounded' ? 'rounded' : 'square'}\n >\n <TabsList>\n {productsTab.map(item => (\n <TabsTrigger key={item?.id || item?.tab} value={item?.tab}>\n {item?.tab || ''}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n )}\n <div\n ref={viewRef as any}\n className=\"tablet:min-h-[393px] laptop:min-h-[425px] desktop:min-h-[405px] lg-desktop:min-h-[409px]\"\n >\n <SwiperBox\n key={swiperInstanceId}\n data={{\n list: currentItems,\n configuration: {\n ...other,\n event: event,\n isShowTag,\n isShowOriginalPrice,\n target: target,\n metafields: metafields,\n itemLength: currentItems?.length,\n isDisplayBackImage: isDisplayBackImage,\n renderOriginalPrice,\n renderPriceLabel,\n renderPrice,\n onAddCart,\n onBuyNow,\n onLearnMore,\n formatPrice,\n },\n }}\n id={swiperInstanceId}\n className={`${isShowTab ? 'mt-6' : ''} shelf-display-swiper-box !overflow-visible`}\n itemClassName={isShowGudgments ? 'flex-1' : ''}\n Slide={isShowGudgments ? ShelfDisplayHorizontalItem : ShelfDisplayWrapItem}\n breakpoints={\n breakpoints || {\n 0: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: 1,\n },\n 374: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: isOnce ? 1 : 1.2,\n },\n 768: {\n spaceBetween: isOnce ? 0 : 16,\n freeMode: false,\n slidesPerView: showItemLength(),\n },\n 1024: {\n spaceBetween: isOnce ? 0 : 16,\n freeMode: false,\n slidesPerView: showItemLength(1024),\n },\n 1440: {\n spaceBetween: isOnce ? 0 : 16,\n freeMode: false,\n slidesPerView: showItemLength(1440),\n },\n }\n }\n />\n </div>\n </div>\n )\n }\n)\n\nShelfDisplay.displayName = 'ShelfDisplay'\nexport default withLayout(ShelfDisplay)\n"],
5
- "mappings": "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",
6
- "names": ["jsx", "jsxs", "React", "useState", "useEffect", "useRef", "useImperativeHandle", "useId", "cn", "Tabs", "TabsList", "TabsTrigger", "Title", "SwiperBox", "withLayout", "gaTrack", "useMediaQuery", "useRollout", "ShelfDisplayWrapItem", "ShelfDisplayHorizontalItem", "componentType", "componentName", "sanitizeCssSelector", "value", "ShelfDisplay", "key", "data", "event", "buildData", "breakpoints", "className", "recommendedData", "target", "metafields", "isDisplayGudgments", "isDisplayBackImage", "renderOriginalPrice", "renderPriceLabel", "renderPrice", "onAddCart", "onBuyNow", "onLearnMore", "formatPrice", "rest", "ref", "productsTab", "productsCard", "title", "isShowTab", "tabShape", "isShowTag", "isShowOriginalPrice", "isShowRecommendedCard", "other", "tabId", "setTabId", "currentItems", "setCurrentItems", "isView", "isRecommend", "innerRef", "instanceId", "isMobile", "viewRef", "inView", "isOnce", "isShowGudgments", "showItemLength", "size", "gackViewEvent", "item", "index", "variant", "v", "handleCurrentTab", "currentData", "flag", "newCurrentData", "findData", "params", "currentTab", "safeTabKey", "swiperInstanceId", "ShelfDisplay_default"]
4
+ "sourcesContent": ["'use client'\nimport React, { useState, useEffect, useRef, useImperativeHandle, useId, useMemo, useCallback } from 'react'\nimport { cn } from '../../helpers/utils.js'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../../components/tabs.js'\nimport Title from '../Title/index.js'\nimport SwiperBox from '../SwiperBox/index.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { gaTrack } from '../../shared/track.js'\nimport { useMediaQuery } from 'react-responsive'\nimport { useRollout } from '../../hooks/useRollout.js'\nimport { ShelfDisplayWrapItem, ShelfDisplayHorizontalItem } from './shelfDisplayItem.js'\nimport type { ShelfDisplayProps, ShelfDisplayItem } from './shelfDisplay.js'\n\nconst componentType = 'image'\nconst componentName = 'product_shelf'\n\nconst sanitizeCssSelector = (value?: string | number) => {\n if (value === undefined || value === null) return 'default'\n const sanitized = String(value).replace(/[^a-zA-Z0-9_-]/g, '')\n return sanitized || 'default'\n}\n\nfunction sanitizeTabValue(value: string): string {\n return value.trim().replace(/\\s+/g, '-')\n}\n\nconst ShelfDisplay = React.forwardRef<HTMLDivElement, ShelfDisplayProps>(\n (\n {\n key,\n data,\n event,\n buildData,\n breakpoints,\n className = '',\n recommendedData,\n target = '_self',\n metafields,\n isDisplayGudgments = false,\n isDisplayBackImage = false,\n renderOriginalPrice,\n renderPriceLabel,\n renderPrice,\n onAddCart,\n onBuyNow,\n onLearnMore,\n formatPrice,\n ...rest\n },\n ref\n ) => {\n const {\n productsTab = [],\n productsCard = [],\n title,\n isShowTab = true,\n tabShape = 'square',\n isShowTag = false,\n isShowOriginalPrice = true,\n isShowRecommendedCard = false,\n ...other\n } = data\n\n const [tabId, setTabId] = useState<string>('')\n\n const isView = useRef<boolean>(false)\n const innerRef = useRef<HTMLDivElement>(null)\n const instanceId = useId()\n\n const isMobile = useMediaQuery({ query: '(max-width: 768px)' })\n const [viewRef, inView] = useRollout<HTMLDivElement>({ threshold: 0 })\n\n const safeInstanceId = sanitizeCssSelector(instanceId)\n\n const resolveTabData = useCallback(\n (tabItem: any) => {\n if (tabItem.isShowRecommendedTab) {\n return recommendedData?.map((item: any) => ({ ...item, isShowRecommended: true })) || []\n }\n return (\n tabItem.data\n ?.map((dataItem: ShelfDisplayItem) => {\n const findData = buildData?.products?.find((params: any) => params?.handle === dataItem?.handle)\n if (findData) {\n return {\n sku: dataItem.sku,\n isShowRecommended: false,\n custom_name: dataItem.custom_name,\n custom_description: dataItem.custom_description,\n custom_image: dataItem.custom_image,\n custom_theme: dataItem.custom_theme,\n custom_primary_link: dataItem?.custom_primary_link || '',\n custom_secondary_link: dataItem?.custom_secondary_link || '',\n custom_bg_image: dataItem?.custom_bg_image || '',\n ...findData,\n }\n }\n })\n .filter(Boolean) || []\n )\n },\n [buildData, recommendedData]\n )\n\n const resolvedTabs = useMemo(() => {\n return productsTab.map(item => ({ ...item, resolvedData: resolveTabData(item) }))\n }, [productsTab, resolveTabData])\n\n const cardItems = useMemo(() => {\n if (isShowRecommendedCard) {\n return recommendedData?.map((item: any) => ({ ...item, isShowRecommended: true })) || []\n }\n return (\n productsCard\n ?.map((dataItem: ShelfDisplayItem) => {\n const findData = buildData?.products?.find((params: any) => params?.handle === dataItem?.handle)\n if (findData) {\n return {\n sku: dataItem.sku,\n isShowRecommended: false,\n custom_name: dataItem.custom_name,\n custom_description: dataItem.custom_description,\n custom_image: dataItem.custom_image,\n custom_theme: dataItem.custom_theme,\n custom_primary_link: dataItem?.custom_primary_link || '',\n custom_secondary_link: dataItem?.custom_secondary_link || '',\n custom_bg_image: dataItem?.custom_bg_image || '',\n ...findData,\n }\n }\n })\n .filter(Boolean) || []\n )\n }, [productsCard, buildData, recommendedData, isShowRecommendedCard])\n\n const currentItems = useMemo(() => {\n if (!isShowTab) return cardItems\n const tab = resolvedTabs.find(item => sanitizeTabValue(item?.tab) === sanitizeTabValue(tabId))\n return tab?.resolvedData || resolvedTabs[0]?.resolvedData || []\n }, [isShowTab, resolvedTabs, tabId, cardItems])\n\n const isOnce = currentItems?.length <= 1 && isDisplayGudgments\n const isShowGudgments = !isMobile && currentItems?.length <= 2 && isDisplayGudgments\n\n const showItemLength = (items: ShelfDisplayItem[], size?: number) => {\n const showGudgments = !isMobile && items?.length <= 2 && isDisplayGudgments\n switch (size) {\n case 1440:\n return showGudgments ? items?.length : 4\n case 1024:\n return showGudgments ? items?.length : 3\n default:\n return showGudgments ? items?.length : 2.3\n }\n }\n\n const gackViewEvent = () => {\n gaTrack({\n event: 'ga4Event',\n event_name: 'view_item_list',\n event_parameters: {\n page_group: 'Home Page',\n item_list_name: 'Home_Page_Bundle',\n items: recommendedData?.map((item, index) => {\n const findData = item?.variants?.find((v: any) => v?.sku === item?.sku)\n const variant = findData || item?.variants?.[0]\n return {\n item_id: item?.sku || variant?.sku,\n item_name: item?.name,\n item_variant: variant?.name,\n price: variant?.price,\n index: index + 1,\n }\n }),\n },\n })\n }\n\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement)\n\n useEffect(() => {\n if (inView && recommendedData?.length && !isView.current) {\n isView.current = true\n gackViewEvent()\n }\n }, [inView, recommendedData])\n\n useEffect(() => {\n if (isShowTab && productsTab?.length > 0 && !tabId) {\n setTabId(productsTab[0]?.tab || '')\n }\n }, [])\n\n const renderSwiperBox = (items: ShelfDisplayItem[], tabKey: string) => {\n const swipperId = `${safeInstanceId}-${sanitizeCssSelector(tabKey)}`\n const showGudgments = !isMobile && items?.length <= 2 && isDisplayGudgments\n const once = items?.length <= 1 && isDisplayGudgments\n\n return (\n <SwiperBox\n key={swipperId}\n data={{\n list: items,\n configuration: {\n ...other,\n event: event,\n isShowTag,\n isShowOriginalPrice,\n target: target,\n metafields: metafields,\n itemLength: items?.length,\n isDisplayBackImage: isDisplayBackImage,\n renderOriginalPrice,\n renderPriceLabel,\n renderPrice,\n onAddCart,\n onBuyNow,\n onLearnMore,\n formatPrice,\n },\n }}\n id={swipperId}\n className={`${isShowTab ? 'mt-6' : ''} shelf-display-swiper-box !overflow-visible`}\n itemClassName={showGudgments ? 'flex-1' : ''}\n Slide={showGudgments ? ShelfDisplayHorizontalItem : ShelfDisplayWrapItem}\n breakpoints={\n breakpoints || {\n 0: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: 1,\n },\n 374: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: once ? 1 : 1.2,\n },\n 768: {\n spaceBetween: once ? 0 : 16,\n freeMode: false,\n slidesPerView: showItemLength(items),\n },\n 1024: {\n spaceBetween: once ? 0 : 16,\n freeMode: false,\n slidesPerView: showItemLength(items, 1024),\n },\n 1440: {\n spaceBetween: once ? 0 : 16,\n freeMode: false,\n slidesPerView: showItemLength(items, 1440),\n },\n }\n }\n />\n )\n }\n\n return (\n <div\n ref={innerRef}\n {...rest}\n className={cn('shelf-display-wrap text-info-primary w-full', className, {\n 'aiui-dark': data?.theme === 'dark',\n })}\n >\n {title && <Title data={{ title: title }} />}\n {isShowTab && productsTab?.length > 0 ? (\n <Tabs\n value={tabId}\n onValueChange={value => {\n const currentTab = productsTab?.find(item => sanitizeTabValue(item?.tab) === value)\n if (currentTab) {\n setTabId(value)\n if (!currentTab.isShowRecommendedTab) {\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_click',\n event_parameters: {\n page_group: 'Home Page',\n component_type: componentType,\n component_name: componentName,\n component_title: data?.title,\n component_position: 1,\n navigation: value,\n },\n })\n return\n }\n gackViewEvent()\n }\n }}\n shape={tabShape === 'rounded' ? 'rounded' : 'square'}\n >\n <TabsList>\n {productsTab.map(item => (\n <TabsTrigger key={item?.id || item?.tab} value={item?.tab}>\n {item?.tab || ''}\n </TabsTrigger>\n ))}\n </TabsList>\n {resolvedTabs.map(item => (\n <TabsContent key={item?.id || item?.tab} value={item?.tab}>\n <div\n ref={viewRef as any}\n className=\"tablet:min-h-[393px] laptop:min-h-[425px] desktop:min-h-[405px] lg-desktop:min-h-[409px]\"\n >\n {renderSwiperBox(item.resolvedData || [], item?.tab || '')}\n </div>\n </TabsContent>\n ))}\n </Tabs>\n ) : (\n <div\n ref={viewRef as any}\n className=\"tablet:min-h-[393px] laptop:min-h-[425px] desktop:min-h-[405px] lg-desktop:min-h-[409px]\"\n >\n {renderSwiperBox(cardItems, 'card')}\n </div>\n )}\n </div>\n )\n }\n)\n\nShelfDisplay.displayName = 'ShelfDisplay'\nexport default withLayout(ShelfDisplay)\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "React", "useState", "useEffect", "useRef", "useImperativeHandle", "useId", "useMemo", "useCallback", "cn", "Tabs", "TabsList", "TabsTrigger", "TabsContent", "Title", "SwiperBox", "withLayout", "gaTrack", "useMediaQuery", "useRollout", "ShelfDisplayWrapItem", "ShelfDisplayHorizontalItem", "componentType", "componentName", "sanitizeCssSelector", "value", "sanitizeTabValue", "ShelfDisplay", "key", "data", "event", "buildData", "breakpoints", "className", "recommendedData", "target", "metafields", "isDisplayGudgments", "isDisplayBackImage", "renderOriginalPrice", "renderPriceLabel", "renderPrice", "onAddCart", "onBuyNow", "onLearnMore", "formatPrice", "rest", "ref", "productsTab", "productsCard", "title", "isShowTab", "tabShape", "isShowTag", "isShowOriginalPrice", "isShowRecommendedCard", "other", "tabId", "setTabId", "isView", "innerRef", "instanceId", "isMobile", "viewRef", "inView", "safeInstanceId", "resolveTabData", "tabItem", "item", "dataItem", "findData", "params", "resolvedTabs", "cardItems", "currentItems", "isOnce", "isShowGudgments", "showItemLength", "items", "size", "showGudgments", "gackViewEvent", "index", "variant", "v", "renderSwiperBox", "tabKey", "swipperId", "once", "currentTab", "ShelfDisplay_default"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Fragment as ge,jsx as i,jsxs as b}from"react/jsx-runtime";import{useAiuiContext as ve}from"../AiuiProvider/index.js";import{formatVariantPrice as be}from"./shelfDisplay.js";import he from"../../components/picture.js";import xe from"../../components/badge.js";import{cn as v}from"../../helpers/utils.js";import{Text as ke}from"../../components/text.js";import ie from"../../components/button.js";import{gaTrack as we}from"../../shared/track.js";import{trackUrlRef as _e}from"../../shared/trackUrlRef.js";import{Heading as Se}from"../../components/heading.js";import{useExposure as Ne}from"../../hooks/useExposure.js";import{useRef as Te,useEffect as Be,useMemo as oe,useState as B}from"react";const ne="image",le="product_shelf",ae=999999999e-2,Ce=e=>{const t=e?.sku,C=e?.variants,P=C?.find(L=>L?.sku===t),W=P?.image?.url||C?.[0]?.image?.url||"",U=P?.image?.altText||C?.[0]?.image?.altText||e?.custom_name||e?.title||"";return{imageUrl:W,altText:U}},ze=({data:e,configuration:t})=>{const{isDisplayBackImage:C=!1,itemShape:P,metafields:W,isTopTag:U=!1,isShowTag:L,isShowOriginalPrice:Q,isShowShortTitle:ce=!1,formatPrice:$,renderOriginalPrice:z,renderPriceLabel:X,renderPrice:y}=t||{},{locale:_="es",copyWriting:me,currencyDisplay:Y}=ve(),{discounts:Z,discountsCopy:H}=W||{},E=Te(null),[R,ee]=B([]),[V,pe]=B(""),[te,c]=B(!1),[q,se]=B(!1),D=(s,r,o,l)=>{const{primaryFun:p,onAddCart:d,onBuyNow:g,onLearnMore:K,event:ye}=t||{};if(p){if(p==="AddCart"&&d)return d(s,r+1,o,l);if(p==="BuyNow"&&g)return g(s,r+1,o,l);if(p==="LearnMore"&&K)return K(s,r+1,o,l)}ye?.primaryButton?.(s,r+1,o,l)},de=(s,r,o,l)=>{const{secondaryFun:p,onAddCart:d,onBuyNow:g,onLearnMore:K,event:ye}=t||{};if(p){if(p==="AddCart"&&d)return d(s,r+1,o,l);if(p==="BuyNow"&&g)return g(s,r+1,o,l);if(p==="LearnMore"&&K)return K(s,r+1,o,l)}ye?.secondaryButton?.(s,r+1,o,l)},m=oe(()=>{const s=e?.variants||[];if(s.length)return e?.sku?s?.find?.(r=>r?.sku===e?.sku)||s[0]:s?.[0]},[e?.sku,e?.variants]),u=m?.id?.split?.("/")||[],G=u?.[u?.length-1],S=!m?.availableForSale||m?.price?.amount===ae||m?.price===ae,h=m?.coupons?.[0],N=!!(Q&&h),T=e?.price?.currencyCode||"USD",k=oe(()=>be({locale:_,amount:N?h?.variant_price4wscode:m?.price,baseAmount:N?m?.price:0,currencyCode:T,currencyDisplay:Y,customFormatPrice:$}),[T,_,N,h?.variant_price4wscode,m,$]),{price:x,basePrice:I,discount:w,discountAmount:f}=k,{imageUrl:A,altText:F}=Ce(e),M=e?.custom_name||e?.title,J=ce&&m?.metafields?.infos?.page_short_title||M,j=e?.custom_description||e?.description,ue=()=>{if(h?.value_type==="fixed_amount"){const s=f||"",r=s.match(/^(.*?)(\d[\d.,]*)(.*)$/);if(r){const[,o,l,p]=r;let d=l;return l.endsWith(".00")?d=l.replace(/\.00$/,""):l.endsWith(",00")&&(d=l.replace(/,00$/,"")),`${o}${d}${p}`}return s}return w||""};Be(()=>{let s=[];if(w||f){const o=`${ue()} ${Z?.off||H?.off||""}`;pe(o),s.push(o)}const r=e?.tags?.filter?.(o=>o?.startsWith?.("CLtag"))?.map?.(o=>o?.replace?.("CLtag:",""))?.slice?.(0,w?1:2);ee(s.concat(r))},[e?.tags,w,f,Z?.off,H?.off]),Ne(E,{componentType:ne,componentName:le,componentTitle:M,componentDescription:j,position:t?.index+1});const fe=async()=>{if(!te&&!e?.custom_primary_link){c(!0);try{await D(e,t?.index,t,h)}finally{c(!1)}}},O=async()=>{if(!q&&!e?.custom_secondary_link){se(!0);try{await de(e,t?.index,t,h)}finally{se(!1)}}},re=()=>b(ge,{children:[L&&R?.length>0?i("div",{className:"mb-1 box-border flex h-8 flex-wrap gap-1 overflow-hidden",children:R?.map?.((s,r)=>i(xe,{className:"shelf-items-tag",variant:"fill",children:s},r))}):null,J?i(Se,{as:"h3",title:J||"",size:2,className:"shelf-display-product-title lg-desktop:h-[58px] text-info-primary line-clamp-2 h-12",html:J||""}):null,i(ke,{size:2,className:"lg-desktop:text-lg desktop:h-[24px] lg-desktop:h-[28px] desktop:text-base shelf-display-product-description text-info-primary line-clamp-1 h-[20px] text-sm",html:j||""}),i("div",{className:"mb-2 mt-4 flex items-center",children:y?y(e,{price:x,basePrice:I,discount:w,discountAmount:f,variant:m,coupon:h,isSoldOut:S}):S?i("div",{className:"tablet:text-2xl text-info-primary text-xl font-bold",children:me?.soldOutText}):b(ge,{children:[i("div",{className:"final-price tablet:text-xl text-info-primary text-xl font-bold",children:m?.availableForSale&&x||""}),z?z(e,{price:x,basePrice:I,discount:w,discountAmount:f}):I&&i("div",{className:"origin-price tablet:text-xl text-info-secondary ml-1 text-lg font-bold line-through",children:m?.availableForSale&&I||""})]})}),!y&&X?.(e,m),b("div",{className:v("shelf-flex-button-group","lg-desktop:gap-3 flex items-center gap-2",t.direction==="vertical"?"flex-col":""),children:[t?.secondaryButton?i(ie,{disabled:S&&t?.secondaryFun!=="LearnMore",variant:"secondary",href:e?.custom_secondary_link,as:e?.custom_secondary_link?"a":"button",onClick:O,loading:q,className:t.direction==="vertical"?"w-full":"",children:t?.secondaryButton||""}):null,t?.primaryButton?i(ie,{disabled:S&&t?.primaryFun!=="LearnMore",variant:"primary",href:e?.custom_primary_link,as:e?.custom_primary_link?"a":"button",onClick:fe,loading:te,className:t.direction==="vertical"?"w-full":"",children:t?.primaryButton||""}):null]})]}),n=e?.custom_bg_image,a=e?.custom_theme;return i("div",{ref:E,className:v("box-border w-full cursor-pointer overflow-hidden duration-300","rounded-box","lg-desktop:aspect-w-[404] lg-desktop:aspect-h-[480] desktop:aspect-w-[316] desktop:aspect-h-[384]","laptop:aspect-w-[288] laptop:aspect-h-[360] aspect-w-[296] aspect-h-[360] relative","md-tablet:h-[360px] shelf-display-item",n?"bg-cover bg-center bg-no-repeat":"bg-background tablet:hover:bg-info-white",{"aiui-dark":a==="dark"}),style:n?{backgroundImage:`url(${n})`}:void 0,children:C?i("div",{className:"absolute inset-0 box-border overflow-hidden",children:b("div",{className:"relative inset-0 size-full",children:[i(he,{source:A,alt:F,className:v("flex h-full justify-center object-cover [&_img]:w-auto",{"opacity-0":n})}),i("div",{className:"desktop:p-6 absolute inset-x-0 bottom-0 box-border overflow-hidden p-4",children:re()})]})}):b("div",{className:"desktop:p-6 absolute inset-0 box-border flex flex-col justify-between overflow-hidden p-4",children:[V&&U&&i(xe,{className:"shelf-prices-tag absolute left-4 top-4 z-10",variant:"fill",children:V||""}),i("div",{className:v("lg-desktop:h-[195px] shelf-display-item-image relative mb-2 inline-block h-[140px] w-full flex-1 overflow-hidden",{"opacity-0":n}),children:i("a",{"aria-label":M,target:t?.target,href:_e(`${_==="us"||!_?"":`/${_}`}/products/${e?.handle}?variant=${G}`,`${ne}_${le}`),onClick:()=>{we({event:"ga4Event",event_name:"select_item",event_parameters:{page_group:"Home Page",item_list_name:"Home_Page_Bundle",items:[{item_id:e?.sku||m?.sku,item_name:e?.name,item_variant:m?.name,price:m?.price,index:t?.index+1}]}})},children:i(he,{source:A,alt:F,className:"flex h-full justify-center object-cover [&_img]:w-auto"})})}),re()]})},e?.id||e?.handle)},He=({data:e,configuration:t})=>{const{itemShape:C,itemLength:P,metafields:W,isShowShortTitle:U,formatPrice:L,renderOriginalPrice:Q,renderPriceLabel:ce,renderPrice:$}=t||{},{discounts:z,discountsCopy:X}=W||{},{locale:y="us",copyWriting:_,currencyDisplay:me}=ve(),[Y,Z]=B([]),H=Te(null),[E,R]=B(!1),[ee,V]=B(!1),pe=(n,a,s,r)=>{const{primaryFun:o,onAddCart:l,onBuyNow:p,onLearnMore:d,event:g}=t||{};if(o){if(o==="AddCart"&&l)return l(n,a+1,s,r);if(o==="BuyNow"&&p)return p(n,a+1,s,r);if(o==="LearnMore"&&d)return d(n,a+1,s,r)}g?.primaryButton?.(n,a+1,s,r)},te=(n,a,s,r)=>{const{secondaryFun:o,onAddCart:l,onBuyNow:p,onLearnMore:d,event:g}=t||{};if(o){if(o==="AddCart"&&l)return l(n,a+1,s,r);if(o==="BuyNow"&&p)return p(n,a+1,s,r);if(o==="LearnMore"&&d)return d(n,a+1,s,r)}g?.secondaryButton?.(n,a+1,s,r)},c=oe(()=>{const n=e?.variants||[];if(n.length)return e?.sku&&n.find(a=>a?.sku===e?.sku)||n[0]},[e?.sku,e?.variants]),q=c?.id?.split?.("/")||[],se=q?.[q?.length-1],D=!c?.availableForSale||c?.price?.amount===ae||c?.price===ae,de=t?.isShowTag,m=t?.isShowOriginalPrice,u=c?.coupons?.[0],G=!!(m&&u),S=e?.price?.currencyCode||"USD",h=oe(()=>be({locale:y,amount:G?u?.variant_price4wscode:c?.price,baseAmount:G?c?.price:0,currencyCode:S,currencyDisplay:me,customFormatPrice:L}),[S,y,G,u?.variant_price4wscode,c,L]),{price:N,basePrice:T,discount:k,discountAmount:x}=h,{imageUrl:I,altText:w}=Ce(e),f=e?.custom_name||e?.title,A=U&&c?.metafields?.infos?.page_short_title||f,F=e?.custom_description||e?.description;Ne(H,{componentType:ne,componentName:le,componentTitle:f,componentDescription:F,position:t?.index+1});const M=async()=>{if(!E&&!e?.custom_primary_link){R(!0);try{await pe(e,t?.index,t,u)}finally{R(!1)}}},J=async()=>{if(!ee&&!e?.custom_secondary_link){V(!0);try{await te(e,t?.index,t,u)}finally{V(!1)}}},j=()=>P>=2?{boxItem:"lg-desktop:max-w-[401px] desktop:max-w-[292px] max-w-full",imgItem:"m-tablet:m-auto lg-desktop:max-w-[330px] lg-desktop:max-h-[330px] desktop:max-w-[260px] desktop:max-h-[260px] max-w-[138px] max-h-[138px]",wrap:"lg-desktop:aspect-w-[824] lg-desktop:aspect-h-[480] desktop:aspect-w-[648] desktop:aspect-h-[380] laptop:aspect-w-[440] laptop:aspect-h-[356] tablet:aspect-w-[346] tablet:aspect-h-[360] md-tablet:w-full"}:{boxItem:"lg-desktop:max-w-[401px] desktop:max-w-[292px] laptop:max-w-[289px] max-w-[262px]",imgItem:"md-tablet:m-auto lg-desktop:max-w-[450px] lg-desktop:max-h-[450px] desktop:max-w-[332px] desktop:max-h-[332px] max-w-[312px] max-h-[312px]",wrap:"lg-desktop:aspect-w-[1664] lg-desktop:aspect-h-[480] desktop:aspect-w-[1312] desktop:aspect-h-[380] laptop:aspect-w-[896] laptop:aspect-h-[356] tablet:aspect-w-[704] tablet:aspect-h-[360] md-tablet:w-full"},ue=()=>P>=2?"flex flex-col justify-between desktop:gap-12 desktop:flex-row desktop:justify-center desktop:items-center":"flex justify-center items-center gap-6 md-tablet:flex-col",fe=()=>{if(u?.value_type==="fixed_amount"){const n=x||"",a=n.match(/^(.*?)(\d[\d.,]*)(.*)$/);if(a){const[,s,r,o]=a;let l=r;return r.endsWith(".00")?l=r.replace(/\.00$/,""):r.endsWith(",00")&&(l=r.replace(/,00$/,"")),`${s}${l}${o}`}return n}return k||""};Be(()=>{let n=[];if(k||x){const s=`${fe()} ${z?.off||X?.off||""}`;n.push(s)}const a=e?.tags?.filter?.(s=>s?.startsWith?.("CLtag"))?.map?.(s=>s?.replace?.("CLtag:",""))?.slice?.(0,k?1:2);Z(n.concat(a))},[e?.tags,k,x,z?.off,X?.off]);const O=e?.custom_bg_image,re=e?.custom_theme;return i("div",{ref:H,className:v(j().wrap,"rounded-box","shelf-display-item","duration-300","md-tablet:h-[360px] relative box-border w-full cursor-pointer overflow-hidden",O?"bg-cover bg-center bg-no-repeat":"bg-container-secondary-1 tablet:hover:bg-info-white",{"aiui-dark":re==="dark"}),style:O?{backgroundImage:`url(${O})`}:void 0,children:b("div",{className:v(ue(),"desktop:p-6 absolute inset-0 box-border overflow-hidden p-4"),children:[i("div",{className:v(j().imgItem,"desktop:mb-0 relative mb-1 overflow-hidden",{"opacity-0":O}),children:i("a",{"aria-label":f,target:t?.target,href:_e(`${y==="us"||!y?"":`/${y}`}/products/${e?.handle}?variant=${se}`,`${ne}_${le}`),onClick:()=>{we({event:"ga4Event",event_name:"select_item",event_parameters:{page_group:"Home Page",item_list_name:"Home_Page_Bundle",items:[{item_id:e?.sku||c?.sku,item_name:e?.name,item_variant:c?.name,price:c?.price,index:t?.index+1}]}})},children:i(he,{source:I,alt:w,className:"flex h-full justify-center object-cover [&_img]:w-auto"})})}),b("div",{className:v("flex flex-col items-start justify-center",j().boxItem),children:[de&&i("div",{className:"mb-1 box-border flex h-8 flex-wrap gap-1 overflow-hidden",children:Y?.length>0&&Y?.map?.((n,a)=>i(xe,{className:"shelf-items-tag",variant:"fill",children:n},a))}),A?i(Se,{as:"h3",title:A||"",size:2,className:"shelf-display-product-title lg-desktop:h-[58px] text-info-primary mb-1 line-clamp-2 h-[48px]",html:A||""}):null,F?i(ke,{size:2,className:"lg-desktop:text-lg lg-desktop:h-[26px] desktop:text-base desktop:h-6 shelf-display-product-description text-info-primary line-clamp-1 h-5 text-sm",html:F||""}):null,i("div",{className:"mb-2 mt-5 flex items-center",children:$?$(e,{price:N,basePrice:T,discount:k,discountAmount:x,variant:c,coupon:u,isSoldOut:D}):D?i("div",{className:"tablet:text-2xl text-info-primary text-xl font-bold",children:_?.soldOutText}):b(ge,{children:[i("div",{className:"final-price tablet:text-xl text-info-primary text-xl font-bold",children:c?.availableForSale&&N||""}),Q?Q(e,{price:N,basePrice:T,discount:k,discountAmount:x}):T&&i("div",{className:"origin-price tablet:text-xl text-info-secondary ml-1 text-lg font-bold line-through",children:c?.availableForSale&&T||""})]})}),!$&&ce?.(e,c),b("div",{className:v("shelf-flex-button-group","lg-desktop:gap-3 flex items-center gap-2",t.direction==="vertical"?"flex-col":""),children:[t?.secondaryButton?i(ie,{disabled:D&&t?.secondaryFun!=="LearnMore",variant:"secondary",href:e?.custom_secondary_link,as:e?.custom_secondary_link?"a":"button",onClick:J,loading:ee,className:t.direction==="vertical"?"w-full":"",children:t?.secondaryButton||""}):null,t?.primaryButton?i(ie,{disabled:D&&t?.primaryFun!=="LearnMore",variant:"primary",href:e?.custom_primary_link,as:e?.custom_primary_link?"a":"button",onClick:M,loading:E,className:t.direction==="vertical"?"w-full":"",children:t?.primaryButton||""}):null]})]})]})},e?.id||e?.handle)};export{He as ShelfDisplayHorizontalItem,ze as ShelfDisplayWrapItem,Ce as getProductImage};
1
+ import{Fragment as ge,jsx as i,jsxs as b}from"react/jsx-runtime";import{useAiuiContext as ve}from"../AiuiProvider/index.js";import{formatVariantPrice as be}from"./shelfDisplay.js";import he from"../../components/picture.js";import xe from"../../components/badge.js";import{cn as v}from"../../helpers/utils.js";import{Text as ke}from"../../components/text.js";import ie from"../../components/button.js";import{gaTrack as we}from"../../shared/track.js";import{trackUrlRef as _e}from"../../shared/trackUrlRef.js";import{Heading as Se}from"../../components/heading.js";import{useExposure as Ne}from"../../hooks/useExposure.js";import{useRef as Te,useEffect as Be,useMemo as oe,useState as B}from"react";const ne="image",le="product_shelf",ae=999999999e-2,Ce=e=>{const t=e?.sku,C=e?.variants,P=C?.find(L=>L?.sku===t),W=P?.image?.url||C?.[0]?.image?.url||"",U=P?.image?.altText||C?.[0]?.image?.altText||e?.custom_name||e?.title||"";return{imageUrl:W,altText:U}},ze=({data:e,configuration:t})=>{const{isDisplayBackImage:C=!1,itemShape:P,metafields:W,isTopTag:U=!1,isShowTag:L,isShowOriginalPrice:Q,isShowShortTitle:ce=!1,formatPrice:$,renderOriginalPrice:z,renderPriceLabel:X,renderPrice:y}=t||{},{locale:_="es",copyWriting:me,currencyDisplay:Y}=ve(),{discounts:Z,discountsCopy:H}=W||{},E=Te(null),[R,ee]=B([]),[V,pe]=B(""),[te,c]=B(!1),[q,se]=B(!1),D=(s,r,o,l)=>{const{primaryFun:p,onAddCart:d,onBuyNow:g,onLearnMore:K,event:ye}=t||{};if(p){if(p==="AddCart"&&d)return d(s,r+1,o,l);if(p==="BuyNow"&&g)return g(s,r+1,o,l);if(p==="LearnMore"&&K)return K(s,r+1,o,l)}ye?.primaryButton?.(s,r+1,o,l)},de=(s,r,o,l)=>{const{secondaryFun:p,onAddCart:d,onBuyNow:g,onLearnMore:K,event:ye}=t||{};if(p){if(p==="AddCart"&&d)return d(s,r+1,o,l);if(p==="BuyNow"&&g)return g(s,r+1,o,l);if(p==="LearnMore"&&K)return K(s,r+1,o,l)}ye?.secondaryButton?.(s,r+1,o,l)},m=oe(()=>{const s=e?.variants||[];if(s.length)return e?.sku?s?.find?.(r=>r?.sku===e?.sku)||s[0]:s?.[0]},[e?.sku,e?.variants]),u=m?.id?.split?.("/")||[],G=u?.[u?.length-1],S=!m?.availableForSale||m?.price?.amount===ae||m?.price===ae,h=m?.coupons?.[0],N=!!(Q&&h),T=e?.price?.currencyCode||"USD",k=oe(()=>be({locale:_,amount:N?h?.variant_price4wscode:m?.price,baseAmount:N?m?.price:0,currencyCode:T,currencyDisplay:Y,customFormatPrice:$}),[T,_,N,h?.variant_price4wscode,m,$]),{price:x,basePrice:I,discount:w,discountAmount:f}=k,{imageUrl:A,altText:F}=Ce(e),M=e?.custom_name||e?.title,J=ce&&m?.metafields?.infos?.page_short_title||M,j=e?.custom_description||e?.description,ue=()=>{if(h?.value_type==="fixed_amount"){const s=f||"",r=s.match(/^(.*?)(\d[\d.,]*)(.*)$/);if(r){const[,o,l,p]=r;let d=l;return l.endsWith(".00")?d=l.replace(/\.00$/,""):l.endsWith(",00")&&(d=l.replace(/,00$/,"")),`${o}${d}${p}`}return s}return w||""};Be(()=>{let s=[];if(w||f){const o=`${ue()} ${Z?.off||H?.off||""}`;pe(o),s.push(o)}const r=e?.tags?.filter?.(o=>o?.startsWith?.("CLtag"))?.map?.(o=>o?.replace?.("CLtag:",""))?.slice?.(0,w?1:2)||[];ee(s.concat(r))},[e?.tags,w,f,Z?.off,H?.off]),Ne(E,{componentType:ne,componentName:le,componentTitle:M,componentDescription:j,position:t?.index+1});const fe=async()=>{if(!te&&!e?.custom_primary_link){c(!0);try{await D(e,t?.index,t,h)}finally{c(!1)}}},O=async()=>{if(!q&&!e?.custom_secondary_link){se(!0);try{await de(e,t?.index,t,h)}finally{se(!1)}}},re=()=>b(ge,{children:[L&&R?.length>0?i("div",{className:"mb-1 box-border flex h-8 flex-wrap gap-1 overflow-hidden",children:R?.map?.((s,r)=>i(xe,{className:"shelf-items-tag",variant:"fill",children:s},r))}):null,J?i(Se,{as:"h3",title:J||"",size:2,className:"shelf-display-product-title lg-desktop:h-[58px] text-info-primary line-clamp-2 h-12",html:J||""}):null,i(ke,{size:2,className:"lg-desktop:text-lg desktop:h-[24px] lg-desktop:h-[28px] desktop:text-base shelf-display-product-description text-info-primary line-clamp-1 h-[20px] text-sm",html:j||""}),i("div",{className:"mb-2 mt-4 flex items-center",children:y?y(e,{price:x,basePrice:I,discount:w,discountAmount:f,variant:m,coupon:h,isSoldOut:S}):S?i("div",{className:"tablet:text-2xl text-info-primary text-xl font-bold",children:me?.soldOutText}):b(ge,{children:[i("div",{className:"final-price tablet:text-xl text-info-primary text-xl font-bold",children:m?.availableForSale&&x||""}),z?z(e,{price:x,basePrice:I,discount:w,discountAmount:f}):I&&i("div",{className:"origin-price tablet:text-xl text-info-secondary ml-1 text-lg font-bold line-through",children:m?.availableForSale&&I||""})]})}),!y&&X?.(e,m),b("div",{className:v("shelf-flex-button-group","lg-desktop:gap-3 flex items-center gap-2",t.direction==="vertical"?"flex-col":""),children:[t?.secondaryButton?i(ie,{disabled:S&&t?.secondaryFun!=="LearnMore",variant:"secondary",href:e?.custom_secondary_link,as:e?.custom_secondary_link?"a":"button",onClick:O,loading:q,className:t.direction==="vertical"?"w-full":"",children:t?.secondaryButton||""}):null,t?.primaryButton?i(ie,{disabled:S&&t?.primaryFun!=="LearnMore",variant:"primary",href:e?.custom_primary_link,as:e?.custom_primary_link?"a":"button",onClick:fe,loading:te,className:t.direction==="vertical"?"w-full":"",children:t?.primaryButton||""}):null]})]}),n=e?.custom_bg_image,a=e?.custom_theme;return i("div",{ref:E,className:v("box-border w-full cursor-pointer overflow-hidden duration-300","rounded-box","lg-desktop:aspect-w-[404] lg-desktop:aspect-h-[480] desktop:aspect-w-[316] desktop:aspect-h-[384]","laptop:aspect-w-[288] laptop:aspect-h-[360] aspect-w-[296] aspect-h-[360] relative","md-tablet:h-[360px] shelf-display-item",n?"bg-cover bg-center bg-no-repeat":"bg-background tablet:hover:bg-info-white",{"aiui-dark":a==="dark"}),style:n?{backgroundImage:`url(${n})`}:void 0,children:C?i("div",{className:"absolute inset-0 box-border overflow-hidden",children:b("div",{className:"relative inset-0 size-full",children:[i(he,{source:A,alt:F,className:v("flex h-full justify-center object-cover [&_img]:w-auto",{"opacity-0":n})}),i("div",{className:"desktop:p-6 absolute inset-x-0 bottom-0 box-border overflow-hidden p-4",children:re()})]})}):b("div",{className:"desktop:p-6 absolute inset-0 box-border flex flex-col justify-between overflow-hidden p-4",children:[V&&U&&i(xe,{className:"shelf-prices-tag absolute left-4 top-4 z-10",variant:"fill",children:V||""}),i("div",{className:v("lg-desktop:h-[195px] shelf-display-item-image relative mb-2 inline-block h-[140px] w-full flex-1 overflow-hidden",{"opacity-0":n}),children:i("a",{"aria-label":M,target:t?.target,href:_e(`${_==="us"||!_?"":`/${_}`}/products/${e?.handle}?variant=${G}`,`${ne}_${le}`),onClick:()=>{we({event:"ga4Event",event_name:"select_item",event_parameters:{page_group:"Home Page",item_list_name:"Home_Page_Bundle",items:[{item_id:e?.sku||m?.sku,item_name:e?.name,item_variant:m?.name,price:m?.price,index:t?.index+1}]}})},children:i(he,{source:A,alt:F,className:"flex h-full justify-center object-cover [&_img]:w-auto"})})}),re()]})},e?.id||e?.handle)},He=({data:e,configuration:t})=>{const{itemShape:C,itemLength:P,metafields:W,isShowShortTitle:U,formatPrice:L,renderOriginalPrice:Q,renderPriceLabel:ce,renderPrice:$}=t||{},{discounts:z,discountsCopy:X}=W||{},{locale:y="us",copyWriting:_,currencyDisplay:me}=ve(),[Y,Z]=B([]),H=Te(null),[E,R]=B(!1),[ee,V]=B(!1),pe=(n,a,s,r)=>{const{primaryFun:o,onAddCart:l,onBuyNow:p,onLearnMore:d,event:g}=t||{};if(o){if(o==="AddCart"&&l)return l(n,a+1,s,r);if(o==="BuyNow"&&p)return p(n,a+1,s,r);if(o==="LearnMore"&&d)return d(n,a+1,s,r)}g?.primaryButton?.(n,a+1,s,r)},te=(n,a,s,r)=>{const{secondaryFun:o,onAddCart:l,onBuyNow:p,onLearnMore:d,event:g}=t||{};if(o){if(o==="AddCart"&&l)return l(n,a+1,s,r);if(o==="BuyNow"&&p)return p(n,a+1,s,r);if(o==="LearnMore"&&d)return d(n,a+1,s,r)}g?.secondaryButton?.(n,a+1,s,r)},c=oe(()=>{const n=e?.variants||[];if(n.length)return e?.sku&&n.find(a=>a?.sku===e?.sku)||n[0]},[e?.sku,e?.variants]),q=c?.id?.split?.("/")||[],se=q?.[q?.length-1],D=!c?.availableForSale||c?.price?.amount===ae||c?.price===ae,de=t?.isShowTag,m=t?.isShowOriginalPrice,u=c?.coupons?.[0],G=!!(m&&u),S=e?.price?.currencyCode||"USD",h=oe(()=>be({locale:y,amount:G?u?.variant_price4wscode:c?.price,baseAmount:G?c?.price:0,currencyCode:S,currencyDisplay:me,customFormatPrice:L}),[S,y,G,u?.variant_price4wscode,c,L]),{price:N,basePrice:T,discount:k,discountAmount:x}=h,{imageUrl:I,altText:w}=Ce(e),f=e?.custom_name||e?.title,A=U&&c?.metafields?.infos?.page_short_title||f,F=e?.custom_description||e?.description;Ne(H,{componentType:ne,componentName:le,componentTitle:f,componentDescription:F,position:t?.index+1});const M=async()=>{if(!E&&!e?.custom_primary_link){R(!0);try{await pe(e,t?.index,t,u)}finally{R(!1)}}},J=async()=>{if(!ee&&!e?.custom_secondary_link){V(!0);try{await te(e,t?.index,t,u)}finally{V(!1)}}},j=()=>P>=2?{boxItem:"lg-desktop:max-w-[401px] desktop:max-w-[292px] max-w-full",imgItem:"m-tablet:m-auto lg-desktop:max-w-[330px] lg-desktop:max-h-[330px] desktop:max-w-[260px] desktop:max-h-[260px] max-w-[138px] max-h-[138px]",wrap:"lg-desktop:aspect-w-[824] lg-desktop:aspect-h-[480] desktop:aspect-w-[648] desktop:aspect-h-[380] laptop:aspect-w-[440] laptop:aspect-h-[356] tablet:aspect-w-[346] tablet:aspect-h-[360] md-tablet:w-full"}:{boxItem:"lg-desktop:max-w-[401px] desktop:max-w-[292px] laptop:max-w-[289px] max-w-[262px]",imgItem:"md-tablet:m-auto lg-desktop:max-w-[450px] lg-desktop:max-h-[450px] desktop:max-w-[332px] desktop:max-h-[332px] max-w-[312px] max-h-[312px]",wrap:"lg-desktop:aspect-w-[1664] lg-desktop:aspect-h-[480] desktop:aspect-w-[1312] desktop:aspect-h-[380] laptop:aspect-w-[896] laptop:aspect-h-[356] tablet:aspect-w-[704] tablet:aspect-h-[360] md-tablet:w-full"},ue=()=>P>=2?"flex flex-col justify-between desktop:gap-12 desktop:flex-row desktop:justify-center desktop:items-center":"flex justify-center items-center gap-6 md-tablet:flex-col",fe=()=>{if(u?.value_type==="fixed_amount"){const n=x||"",a=n.match(/^(.*?)(\d[\d.,]*)(.*)$/);if(a){const[,s,r,o]=a;let l=r;return r.endsWith(".00")?l=r.replace(/\.00$/,""):r.endsWith(",00")&&(l=r.replace(/,00$/,"")),`${s}${l}${o}`}return n}return k||""};Be(()=>{let n=[];if(k||x){const s=`${fe()} ${z?.off||X?.off||""}`;n.push(s)}const a=e?.tags?.filter?.(s=>s?.startsWith?.("CLtag"))?.map?.(s=>s?.replace?.("CLtag:",""))?.slice?.(0,k?1:2)||[];Z(n.concat(a))},[e?.tags,k,x,z?.off,X?.off]);const O=e?.custom_bg_image,re=e?.custom_theme;return i("div",{ref:H,className:v(j().wrap,"rounded-box","shelf-display-item","duration-300","md-tablet:h-[360px] relative box-border w-full cursor-pointer overflow-hidden",O?"bg-cover bg-center bg-no-repeat":"bg-container-secondary-1 tablet:hover:bg-info-white",{"aiui-dark":re==="dark"}),style:O?{backgroundImage:`url(${O})`}:void 0,children:b("div",{className:v(ue(),"desktop:p-6 absolute inset-0 box-border overflow-hidden p-4"),children:[i("div",{className:v(j().imgItem,"desktop:mb-0 relative mb-1 overflow-hidden",{"opacity-0":O}),children:i("a",{"aria-label":f,target:t?.target,href:_e(`${y==="us"||!y?"":`/${y}`}/products/${e?.handle}?variant=${se}`,`${ne}_${le}`),onClick:()=>{we({event:"ga4Event",event_name:"select_item",event_parameters:{page_group:"Home Page",item_list_name:"Home_Page_Bundle",items:[{item_id:e?.sku||c?.sku,item_name:e?.name,item_variant:c?.name,price:c?.price,index:t?.index+1}]}})},children:i(he,{source:I,alt:w,className:"flex h-full justify-center object-cover [&_img]:w-auto"})})}),b("div",{className:v("flex flex-col items-start justify-center",j().boxItem),children:[de&&i("div",{className:"mb-1 box-border flex h-8 flex-wrap gap-1 overflow-hidden",children:Y?.length>0&&Y?.map?.((n,a)=>i(xe,{className:"shelf-items-tag",variant:"fill",children:n},a))}),A?i(Se,{as:"h3",title:A||"",size:2,className:"shelf-display-product-title lg-desktop:h-[58px] text-info-primary mb-1 line-clamp-2 h-[48px]",html:A||""}):null,F?i(ke,{size:2,className:"lg-desktop:text-lg lg-desktop:h-[26px] desktop:text-base desktop:h-6 shelf-display-product-description text-info-primary line-clamp-1 h-5 text-sm",html:F||""}):null,i("div",{className:"mb-2 mt-5 flex items-center",children:$?$(e,{price:N,basePrice:T,discount:k,discountAmount:x,variant:c,coupon:u,isSoldOut:D}):D?i("div",{className:"tablet:text-2xl text-info-primary text-xl font-bold",children:_?.soldOutText}):b(ge,{children:[i("div",{className:"final-price tablet:text-xl text-info-primary text-xl font-bold",children:c?.availableForSale&&N||""}),Q?Q(e,{price:N,basePrice:T,discount:k,discountAmount:x}):T&&i("div",{className:"origin-price tablet:text-xl text-info-secondary ml-1 text-lg font-bold line-through",children:c?.availableForSale&&T||""})]})}),!$&&ce?.(e,c),b("div",{className:v("shelf-flex-button-group","lg-desktop:gap-3 flex items-center gap-2",t.direction==="vertical"?"flex-col":""),children:[t?.secondaryButton?i(ie,{disabled:D&&t?.secondaryFun!=="LearnMore",variant:"secondary",href:e?.custom_secondary_link,as:e?.custom_secondary_link?"a":"button",onClick:J,loading:ee,className:t.direction==="vertical"?"w-full":"",children:t?.secondaryButton||""}):null,t?.primaryButton?i(ie,{disabled:D&&t?.primaryFun!=="LearnMore",variant:"primary",href:e?.custom_primary_link,as:e?.custom_primary_link?"a":"button",onClick:M,loading:E,className:t.direction==="vertical"?"w-full":"",children:t?.primaryButton||""}):null]})]})]})},e?.id||e?.handle)};export{He as ShelfDisplayHorizontalItem,ze as ShelfDisplayWrapItem,Ce as getProductImage};
2
2
  //# sourceMappingURL=shelfDisplayItem.js.map