@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
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/toast.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../helpers/index.js'\n\nconst toastVariants = cva(\n 'bg-container-secondary-1 text-info-primary pointer-events-none fixed left-1/2 top-1/2 z-[9999] flex w-max -translate-x-1/2 select-none items-center gap-[4px] rounded-[8px] p-[16px] text-[18px] font-bold leading-[1.4] tracking-[-0.36px] drop-shadow-[0px_8px_12px_rgba(0,0,0,0.2)] transition-all duration-300 ease-in-out data-[state=closed]:-translate-y-2 data-[state=open]:translate-y-0 data-[state=closed]:opacity-0 data-[state=open]:opacity-100',\n {\n variants: {\n variant: {\n success: '',\n warning: '',\n countdown: '',\n },\n },\n defaultVariants: {\n variant: 'success',\n },\n }\n)\n\nconst CheckIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <circle cx=\"12\" cy=\"12\" r=\"10.5\" className=\"fill-success-0\" />\n <g transform=\"translate(6, 8)\">\n <path d=\"M1 3.5L5 7L11 1\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n </svg>\n)\n\nconst WarningIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <circle cx=\"12\" cy=\"12\" r=\"10.5\" className=\"fill-error-0\" />\n <g transform=\"translate(10.65, 6)\">\n <path\n d=\"M1.35 9.28C2.1 9.28 2.7 9.88 2.7 10.63C2.7 11.37 2.1 11.98 1.35 11.98C0.6 11.98 0 11.37 0 10.63C0 9.88 0.6 9.28 1.35 9.28ZM1.35 0C1.97 0 2.47 0.5 2.47 1.13V7.13C2.47 7.75 1.97 8.25 1.35 8.25C0.73 8.25 0.22 7.75 0.22 7.13V1.13C0.22 0.5 0.73 0 1.35 0Z\"\n fill=\"white\"\n />\n </g>\n </svg>\n)\n\nconst ClockIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <circle cx=\"12\" cy=\"12\" r=\"10.5\" className=\"fill-warning-0\" />\n <g transform=\"translate(8, 7)\">\n <path d=\"M4 0V5L7 8\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n </svg>\n)\n\nexport interface ToastProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof toastVariants> {\n open?: boolean\n message: string\n duration?: number\n seconds?: number\n onClose?: () => void\n}\n\nconst Toast = React.forwardRef<HTMLDivElement, ToastProps>(\n ({ className, variant, open = false, message, duration = 2500, seconds, onClose, ...props }, ref) => {\n const [mounted, setMounted] = React.useState(false)\n const [remaining, setRemaining] = React.useState(seconds ?? 0)\n\n React.useEffect(() => {\n if (open) {\n setMounted(true)\n if (variant === 'countdown' && seconds != null) {\n setRemaining(seconds)\n }\n } else {\n const timer = setTimeout(() => setMounted(false), 300)\n return () => clearTimeout(timer)\n }\n }, [open, variant, seconds])\n\n React.useEffect(() => {\n if (!open || !mounted) return\n if (variant === 'countdown') {\n if (remaining <= 0) {\n onClose?.()\n return\n }\n const timer = setTimeout(() => setRemaining(r => r - 1), 1000)\n return () => clearTimeout(timer)\n }\n const timer = setTimeout(() => onClose?.(), duration)\n return () => clearTimeout(timer)\n }, [open, mounted, variant, duration, remaining, onClose])\n\n if (!mounted) return null\n\n const icon = variant === 'warning' ? <WarningIcon /> : variant === 'countdown' ? <ClockIcon /> : <CheckIcon />\n\n const displayMessage = variant === 'countdown' ? message.replace(/\\{seconds\\}/g, String(remaining)) : message\n\n return (\n <div\n ref={ref}\n className={cn(toastVariants({ variant }), className)}\n data-state={open ? 'open' : 'closed'}\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n {...props}\n >\n {icon}\n <span>{displayMessage}</span>\n </div>\n )\n }\n)\nToast.displayName = 'Toast'\n\nexport interface UseToastOptions {\n variant?: ToastProps['variant']\n message: string\n duration?: number\n seconds?: number\n}\n\nfunction useToast() {\n const [open, setOpen] = React.useState(false)\n const [options, setOptions] = React.useState<UseToastOptions>({ message: '' })\n\n const showToast = React.useCallback((opts: UseToastOptions) => {\n setOptions(opts)\n setOpen(true)\n }, [])\n\n const handleClose = React.useCallback(() => {\n setOpen(false)\n }, [])\n\n const toastProps: ToastProps = {\n open,\n variant: options.variant,\n message: options.message,\n duration: options.duration,\n seconds: options.seconds,\n onClose: handleClose,\n }\n\n return { toastProps, showToast }\n}\n\nexport { Toast, toastVariants, useToast }\nexport default Toast\n"],
5
+ "mappings": "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",
6
+ "names": ["toast_exports", "__export", "Toast", "toast_default", "toastVariants", "useToast", "__toCommonJS", "import_jsx_runtime", "React", "import_class_variance_authority", "import_helpers", "CheckIcon", "WarningIcon", "ClockIcon", "className", "variant", "open", "message", "duration", "seconds", "onClose", "props", "ref", "mounted", "setMounted", "remaining", "setRemaining", "timer", "r", "icon", "displayMessage", "setOpen", "options", "setOptions", "showToast", "opts", "handleClose"]
7
+ }
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ export interface ProductGridProps {
3
+ children: React.ReactNode;
4
+ maxVisible?: number;
5
+ showMoreText?: string;
6
+ showLessText?: string;
7
+ animated?: boolean;
8
+ className?: string;
9
+ }
10
+ declare const AccessoriesProductGrid: React.ForwardRefExoticComponent<ProductGridProps & React.RefAttributes<HTMLDivElement>>;
11
+ export default AccessoriesProductGrid;
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as e,jsxs as c}from"react/jsx-runtime";import*as r from"react";import{cn as i}from"../../../../helpers/index.js";const v=({className:t})=>e("svg",{xmlns:"http://www.w3.org/2000/svg",className:t,width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",children:e("path",{d:"M17.2929 8.29302C17.6834 7.90249 18.3164 7.90249 18.707 8.29302C19.0975 8.68354 19.0975 9.31655 18.707 9.70708L12.707 15.7071C12.3164 16.0976 11.6834 16.0976 11.2929 15.7071L5.29289 9.70708C4.90237 9.31655 4.90237 8.68354 5.29289 8.29302C5.68342 7.90249 6.31643 7.90249 6.70696 8.29302L11.9999 13.586L17.2929 8.29302Z",fill:"currentColor"})}),n=r.forwardRef(({children:t,maxVisible:a=8,showMoreText:d="Show more",showLessText:m="Show less",animated:g=!0,className:p},f)=>{const[s,u]=r.useState(!1),o=r.Children.toArray(t),l=o.length>a,h=l&&!s?o.slice(0,a):o;return c("div",{ref:f,className:i("flex flex-col gap-6",p),children:[e("div",{className:i("tablet:grid-cols-2 laptop:grid-cols-3 desktop:grid-cols-4 grid grid-cols-1 gap-4",g&&"transition-all duration-500 ease-in-out"),children:h}),l&&c("div",{className:"hover:text-brand-0 text-info-primary flex items-center justify-center",children:[e("button",{className:"tablet:text-base text-sm font-bold",onClick:()=>u(x=>!x),children:s?m:d}),e(v,{className:i("tablet:size-5 size-4",s&&"rotate-180")})]})]})});n.displayName="AccessoriesProductGrid";var b=n;export{b as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/biz-components/AccessoriesShelf/components/AccessoriesProductGrid/index.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../../../helpers/index.js'\n\nexport interface ProductGridProps {\n children: React.ReactNode\n maxVisible?: number\n showMoreText?: string\n showLessText?: string\n animated?: boolean\n className?: string\n}\n\nconst DownIcon = ({ className }: { className?: string }) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M17.2929 8.29302C17.6834 7.90249 18.3164 7.90249 18.707 8.29302C19.0975 8.68354 19.0975 9.31655 18.707 9.70708L12.707 15.7071C12.3164 16.0976 11.6834 16.0976 11.2929 15.7071L5.29289 9.70708C4.90237 9.31655 4.90237 8.68354 5.29289 8.29302C5.68342 7.90249 6.31643 7.90249 6.70696 8.29302L11.9999 13.586L17.2929 8.29302Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\nconst AccessoriesProductGrid = React.forwardRef<HTMLDivElement, ProductGridProps>(\n (\n { children, maxVisible = 8, showMoreText = 'Show more', showLessText = 'Show less', animated = true, className },\n ref\n ) => {\n const [expanded, setExpanded] = React.useState(false)\n const items = React.Children.toArray(children)\n const hasMore = items.length > maxVisible\n const visibleItems = hasMore && !expanded ? items.slice(0, maxVisible) : items\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-6', className)}>\n <div\n className={cn(\n 'tablet:grid-cols-2 laptop:grid-cols-3 desktop:grid-cols-4 grid grid-cols-1 gap-4',\n animated && 'transition-all duration-500 ease-in-out'\n )}\n >\n {visibleItems}\n </div>\n {hasMore && (\n <div className=\"hover:text-brand-0 text-info-primary flex items-center justify-center\">\n <button className=\"tablet:text-base text-sm font-bold\" onClick={() => setExpanded(prev => !prev)}>\n {expanded ? showLessText : showMoreText}\n </button>\n <DownIcon className={cn('tablet:size-5 size-4', expanded && 'rotate-180')} />\n </div>\n )}\n </div>\n )\n }\n)\n\nAccessoriesProductGrid.displayName = 'AccessoriesProductGrid'\n\nexport default AccessoriesProductGrid\n"],
5
+ "mappings": "aAwBM,cAAAA,EA6BI,QAAAC,MA7BJ,oBAtBN,UAAYC,MAAW,QACvB,OAAS,MAAAC,MAAU,+BAWnB,MAAMC,EAAW,CAAC,CAAE,UAAAC,CAAU,IAE1BL,EAAC,OACC,MAAM,6BACN,UAAWK,EACX,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OAEL,SAAAL,EAAC,QACC,EAAE,gUACF,KAAK,eACP,EACF,EAIEM,EAAyBJ,EAAM,WACnC,CACE,CAAE,SAAAK,EAAU,WAAAC,EAAa,EAAG,aAAAC,EAAe,YAAa,aAAAC,EAAe,YAAa,SAAAC,EAAW,GAAM,UAAAN,CAAU,EAC/GO,IACG,CACH,KAAM,CAACC,EAAUC,CAAW,EAAIZ,EAAM,SAAS,EAAK,EAC9Ca,EAAQb,EAAM,SAAS,QAAQK,CAAQ,EACvCS,EAAUD,EAAM,OAASP,EACzBS,EAAeD,GAAW,CAACH,EAAWE,EAAM,MAAM,EAAGP,CAAU,EAAIO,EAEzE,OACEd,EAAC,OAAI,IAAKW,EAAK,UAAWT,EAAG,sBAAuBE,CAAS,EAC3D,UAAAL,EAAC,OACC,UAAWG,EACT,mFACAQ,GAAY,yCACd,EAEC,SAAAM,EACH,EACCD,GACCf,EAAC,OAAI,UAAU,wEACb,UAAAD,EAAC,UAAO,UAAU,qCAAqC,QAAS,IAAMc,EAAYI,GAAQ,CAACA,CAAI,EAC5F,SAAAL,EAAWH,EAAeD,EAC7B,EACAT,EAACI,EAAA,CAAS,UAAWD,EAAG,uBAAwBU,GAAY,YAAY,EAAG,GAC7E,GAEJ,CAEJ,CACF,EAEAP,EAAuB,YAAc,yBAErC,IAAOa,EAAQb",
6
+ "names": ["jsx", "jsxs", "React", "cn", "DownIcon", "className", "AccessoriesProductGrid", "children", "maxVisible", "showMoreText", "showLessText", "animated", "ref", "expanded", "setExpanded", "items", "hasMore", "visibleItems", "prev", "AccessoriesProductGrid_default"]
7
+ }
@@ -0,0 +1,23 @@
1
+ import * as React from 'react';
2
+ import type { AccessoryProductCardProps, AccessoryProductData, AccessoryCardSemanticName, AccessoryCopyConfig } from './types.js';
3
+ export type { AccessoryProductCardProps, AccessoryProductData, AccessoryCardSemanticName, AccessoryCopyConfig };
4
+ /**
5
+ * AccessoryProductCard - 配件卡片(UI 组件)
6
+ *
7
+ * 组件职责(UI 层):
8
+ * - 渲染产品图(1:1 object-contain)
9
+ * - 渲染标题、描述、tags
10
+ * - 渲染现价 + 原价(删除线)+ 会员价(下方小字)
11
+ * - 渲染加购按钮及 Add / Added(n) / Unavailable 状态
12
+ * - Hover 效果(卡片背景变白 + 阴影,PC 端)
13
+ * - Loading 状态展示
14
+ *
15
+ * 业务职责(业务端负责):
16
+ * - 获取产品数据、计算价格
17
+ * - 维护 addedQuantity、isLoading 状态
18
+ * - 实现 onAddToCart 逻辑(调用购物车 API)
19
+ * - 库存检查后将 quantityAvailable 传入
20
+ */
21
+ declare const AccessoryProductCard: React.ForwardRefExoticComponent<AccessoryProductCardProps & React.RefAttributes<HTMLDivElement>>;
22
+ export { AccessoryProductCard };
23
+ export default AccessoryProductCard;
@@ -0,0 +1,2 @@
1
+ "use client";import{Fragment as j,jsx as a,jsxs as l}from"react/jsx-runtime";import*as p from"react";import{cn as i}from"../../../../helpers/index.js";import{Badge as R,Card as q,CardContent as E,Picture as O,Text as s,Heading as U,Button as _}from"../../../../components/index.js";const b=p.forwardRef(({product:e,addedQuantity:m=0,maxQuantity:k,isLoading:g=!1,showTags:C=!0,showOriginalPrice:h=!1,showDiscountPrice:f=!0,showMemberPrice:A=!0,onProductClick:c,onAddToCart:L,className:N,classNames:t,copy:r},T)=>{const u=k??e.quantityAvailable??void 0,o=!e.availableForSale,w=!o&&u!=null&&m>=u,S=o||w,y=m>0,B=r?.addLabel??"Add",M=r?.addedLabel??"in Cart",$=r?.unavailableLabel??"Unavailable",z=r?.memberPriceLabel??"Member price",D=r?.plusMemberPriceLabel??"Plus member price",v=o?$:y?`${m} ${M}`:B,F=e.memberPriceType==="plus-member"?D:z,d=e.custom_name||e.name,x=e.custom_description||e.description,H=e.image;return a(q,{ref:T,className:i("rounded-card desktop:p-6 group flex flex-col border-none p-4","bg-container-primary transition-colors duration-200","hover:bg-white",y&&"bg-white",N,t?.root),children:l(E,{className:"flex flex-1 flex-col gap-3 p-0",children:[a("a",{onClick:c?()=>c(e):void 0,href:!c&&e.listingLink?e.listingLink:void 0,rel:"noreferrer",className:i("tablet:size-[196px] mx-auto block size-[138px] overflow-hidden",c||e.listingLink?"cursor-pointer":"cursor-default",t?.image),"aria-label":d,children:a(O,{source:H,alt:d,className:"aspect-square w-full mix-blend-multiply",imgClassName:"w-full h-full object-contain"})}),l("div",{className:"flex flex-1 flex-col gap-4",children:[C&&e.tags&&e.tags.length>0&&a("div",{className:i("flex flex-wrap items-center gap-1",t?.tags),children:e.tags.map((n,P)=>n?.label?a(R,{size:"sm",variant:n.variant||"outline",promotionalType:n.promotionalType,children:n.label},P):p.isValidElement(n)&&a(p.Fragment,{children:n},P))}),l("div",{className:"flex flex-col gap-1",children:[a(U,{as:"h2",className:i("lg-desktop:text-[18px] text-info-primary line-clamp-3 text-[16px] font-bold leading-[1.2] tracking-[-0.64px]",t?.title),children:d}),x&&a(s,{as:"p",className:i("lg-desktop:text-[18px] text-info-bold line-clamp-2 text-[14px] font-bold leading-[1.4] tracking-[-0.28px]",t?.description),children:x})]}),l("div",{className:i("mt-auto flex flex-col gap-2",t?.priceArea),children:[l("div",{children:[a("div",{className:"flex flex-wrap items-baseline gap-1",children:o?a(s,{as:"p",className:i("lg-desktop:text-[24px] text-info-tertiary text-[20px] font-bold leading-[1.2] tracking-[-0.8px]",t?.currentPrice),children:r?.outOfStockLabel??"Sold Out"}):l(j,{children:[a(s,{as:"p",className:i("lg-desktop:text-[24px] text-info-primary text-[20px] font-bold leading-[1.2] tracking-[-0.8px]",t?.currentPrice),children:e.price}),f&&e.discountPrice&&a(s,{as:"p",className:i("text-brand-0 lg-desktop:text-[24px] text-[20px] font-bold leading-tight tracking-[-0.32px]",t?.discountPrice),children:e.discountPrice}),(!f||!e.discountPrice)&&h&&e.originalPrice&&a(s,{as:"p",className:i("text-info-tertiary lg-desktop:text-[24px] text-[20px] font-bold leading-tight tracking-[-0.32px] line-through",t?.originalPrice),children:e.originalPrice})]})}),A&&!o&&e.memberPriceNote&&l(s,{as:"p",className:i("lg-desktop:text-[18px] text-marketing-1 text-[14px] font-bold leading-tight tracking-[-0.24px]",t?.memberPriceNote),children:[F," ",a("span",{className:"text-marketing-1",children:e.memberPriceNote})]})]}),a("div",{className:i(t?.buttonGroup),children:a(_,{variant:"primary",size:"lg",loading:g,disabled:S&&!g,onClick:()=>L?.(e),className:i("w-full",t?.addButton),"data-headless-type-name":"AccessoryShelf#ProductCard","data-headless-sku":e.sku,"data-headless-title-desc-button":`${d}#${x??""}#${v}`,children:v})})]})]})]})})});b.displayName="AccessoryShelf.ProductCard";var V=b;export{b as AccessoryProductCard,V as default};
2
+ //# sourceMappingURL=ProductCard.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/biz-components/AccessoriesShelf/components/AccessoryShelf/ProductCard.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../../../helpers/index.js'\nimport { Badge, Card, CardContent, Picture, Text, Heading, Button } from '../../../../components/index.js'\nimport type {\n AccessoryProductCardProps,\n AccessoryProductData,\n AccessoryCardSemanticName,\n AccessoryCopyConfig,\n} from './types.js'\n\nexport type { AccessoryProductCardProps, AccessoryProductData, AccessoryCardSemanticName, AccessoryCopyConfig }\n\n/**\n * AccessoryProductCard - \u914D\u4EF6\u5361\u7247\uFF08UI \u7EC4\u4EF6\uFF09\n *\n * \u7EC4\u4EF6\u804C\u8D23\uFF08UI \u5C42\uFF09\uFF1A\n * - \u6E32\u67D3\u4EA7\u54C1\u56FE\uFF081:1 object-contain\uFF09\n * - \u6E32\u67D3\u6807\u9898\u3001\u63CF\u8FF0\u3001tags\n * - \u6E32\u67D3\u73B0\u4EF7 + \u539F\u4EF7\uFF08\u5220\u9664\u7EBF\uFF09+ \u4F1A\u5458\u4EF7\uFF08\u4E0B\u65B9\u5C0F\u5B57\uFF09\n * - \u6E32\u67D3\u52A0\u8D2D\u6309\u94AE\u53CA Add / Added(n) / Unavailable \u72B6\u6001\n * - Hover \u6548\u679C\uFF08\u5361\u7247\u80CC\u666F\u53D8\u767D + \u9634\u5F71\uFF0CPC \u7AEF\uFF09\n * - Loading \u72B6\u6001\u5C55\u793A\n *\n * \u4E1A\u52A1\u804C\u8D23\uFF08\u4E1A\u52A1\u7AEF\u8D1F\u8D23\uFF09\uFF1A\n * - \u83B7\u53D6\u4EA7\u54C1\u6570\u636E\u3001\u8BA1\u7B97\u4EF7\u683C\n * - \u7EF4\u62A4 addedQuantity\u3001isLoading \u72B6\u6001\n * - \u5B9E\u73B0 onAddToCart \u903B\u8F91\uFF08\u8C03\u7528\u8D2D\u7269\u8F66 API\uFF09\n * - \u5E93\u5B58\u68C0\u67E5\u540E\u5C06 quantityAvailable \u4F20\u5165\n */\nconst AccessoryProductCard = React.forwardRef<HTMLDivElement, AccessoryProductCardProps>(\n (\n {\n product,\n addedQuantity = 0,\n maxQuantity,\n isLoading = false,\n showTags = true,\n showOriginalPrice = false,\n showDiscountPrice = true,\n showMemberPrice = true,\n onProductClick,\n onAddToCart,\n className,\n classNames,\n copy,\n },\n ref\n ) => {\n // \u5E93\u5B58\u9650\u5236\uFF1A\u4F18\u5148\u53D6 maxQuantity\uFF0C\u5176\u6B21\u53D6 product.quantityAvailable\n const resolvedMax = maxQuantity ?? product.quantityAvailable ?? undefined\n const isUnavailable = !product.availableForSale\n const isAtLimit = !isUnavailable && resolvedMax != null && addedQuantity >= resolvedMax\n const isDisabled = isUnavailable || isAtLimit\n const isAdded = addedQuantity > 0\n\n // \u6587\u6848\n const addLabel = copy?.addLabel ?? 'Add'\n const addedLabel = copy?.addedLabel ?? 'in Cart'\n const unavailableLabel = copy?.unavailableLabel ?? 'Unavailable'\n const memberPriceLabel = copy?.memberPriceLabel ?? 'Member price'\n const plusMemberPriceLabel = copy?.plusMemberPriceLabel ?? 'Plus member price'\n\n const buttonLabel = isUnavailable ? unavailableLabel : isAdded ? `${addedQuantity} ${addedLabel}` : addLabel\n\n const memberLabel = product.memberPriceType === 'plus-member' ? plusMemberPriceLabel : memberPriceLabel\n\n const displayTitle = product.custom_name || product.name\n const displayDescription = product.custom_description || product.description\n const displayImage = product.image\n\n return (\n <Card\n ref={ref}\n className={cn(\n 'rounded-card desktop:p-6 group flex flex-col border-none p-4',\n 'bg-container-primary transition-colors duration-200',\n 'hover:bg-white',\n isAdded && 'bg-white',\n className,\n classNames?.root\n )}\n >\n <CardContent className=\"flex flex-1 flex-col gap-3 p-0\">\n {/* \u4EA7\u54C1\u56FE 1:1 */}\n <a\n onClick={onProductClick ? () => onProductClick(product) : undefined}\n href={!onProductClick && product.listingLink ? product.listingLink : undefined}\n rel=\"noreferrer\"\n className={cn(\n 'tablet:size-[196px] mx-auto block size-[138px] overflow-hidden',\n onProductClick || product.listingLink ? 'cursor-pointer' : 'cursor-default',\n classNames?.image\n )}\n aria-label={displayTitle}\n >\n <Picture\n source={displayImage}\n alt={displayTitle}\n className=\"aspect-square w-full mix-blend-multiply\"\n imgClassName=\"w-full h-full object-contain\"\n />\n </a>\n\n {/* \u5185\u5BB9\u533A */}\n <div className=\"flex flex-1 flex-col gap-4\">\n {/* Tags */}\n {showTags && product.tags && product.tags.length > 0 && (\n <div className={cn('flex flex-wrap items-center gap-1', classNames?.tags)}>\n {product.tags.map((tag: any, index) =>\n (tag as any)?.label ? (\n <Badge\n key={index}\n size=\"sm\"\n variant={(tag.variant as any) || 'outline'}\n promotionalType={tag.promotionalType}\n >\n {tag.label}\n </Badge>\n ) : (\n React.isValidElement(tag) && <React.Fragment key={index}>{tag}</React.Fragment>\n )\n )}\n </div>\n )}\n\n {/* \u6807\u9898 + \u63CF\u8FF0 */}\n <div className=\"flex flex-col gap-1\">\n <Heading\n as=\"h2\"\n className={cn(\n 'lg-desktop:text-[18px] text-info-primary line-clamp-3 text-[16px] font-bold leading-[1.2] tracking-[-0.64px]',\n classNames?.title\n )}\n >\n {displayTitle}\n </Heading>\n {displayDescription && (\n <Text\n as=\"p\"\n className={cn(\n 'lg-desktop:text-[18px] text-info-bold line-clamp-2 text-[14px] font-bold leading-[1.4] tracking-[-0.28px]',\n classNames?.description\n )}\n >\n {displayDescription}\n </Text>\n )}\n </div>\n\n {/* \u4EF7\u683C + \u6309\u94AE */}\n <div className={cn('mt-auto flex flex-col gap-2', classNames?.priceArea)}>\n <div>\n {/* \u73B0\u4EF7 + \u539F\u4EF7\uFF08\u5220\u9664\u7EBF\uFF09 */}\n <div className=\"flex flex-wrap items-baseline gap-1\">\n {isUnavailable ? (\n <Text\n as=\"p\"\n className={cn(\n 'lg-desktop:text-[24px] text-info-tertiary text-[20px] font-bold leading-[1.2] tracking-[-0.8px]',\n classNames?.currentPrice\n )}\n >\n {copy?.outOfStockLabel ?? 'Sold Out'}\n </Text>\n ) : (\n <>\n <Text\n as=\"p\"\n className={cn(\n 'lg-desktop:text-[24px] text-info-primary text-[20px] font-bold leading-[1.2] tracking-[-0.8px]',\n classNames?.currentPrice\n )}\n >\n {product.price}\n </Text>\n {showDiscountPrice && product.discountPrice && (\n <Text\n as=\"p\"\n className={cn(\n 'text-brand-0 lg-desktop:text-[24px] text-[20px] font-bold leading-tight tracking-[-0.32px]',\n classNames?.discountPrice\n )}\n >\n {product.discountPrice}\n </Text>\n )}\n {(!showDiscountPrice || !product.discountPrice) && showOriginalPrice && product.originalPrice && (\n <Text\n as=\"p\"\n className={cn(\n 'text-info-tertiary lg-desktop:text-[24px] text-[20px] font-bold leading-tight tracking-[-0.32px] line-through',\n classNames?.originalPrice\n )}\n >\n {product.originalPrice}\n </Text>\n )}\n </>\n )}\n </div>\n\n {/* \u4F1A\u5458\u4EF7\u5C0F\u5B57 */}\n {showMemberPrice && !isUnavailable && product.memberPriceNote && (\n <Text\n as=\"p\"\n className={cn(\n 'lg-desktop:text-[18px] text-marketing-1 text-[14px] font-bold leading-tight tracking-[-0.24px]',\n classNames?.memberPriceNote\n )}\n >\n {memberLabel} <span className=\"text-marketing-1\">{product.memberPriceNote}</span>\n </Text>\n )}\n </div>\n\n {/* \u52A0\u8D2D\u6309\u94AE\uFF08\u5355\u4E00\uFF09 */}\n <div className={cn(classNames?.buttonGroup)}>\n <Button\n variant=\"primary\"\n size=\"lg\"\n loading={isLoading}\n disabled={isDisabled && !isLoading}\n onClick={() => onAddToCart?.(product)}\n className={cn('w-full', classNames?.addButton)}\n data-headless-type-name=\"AccessoryShelf#ProductCard\"\n data-headless-sku={product.sku}\n data-headless-title-desc-button={`${displayTitle}#${displayDescription ?? ''}#${buttonLabel}`}\n >\n {buttonLabel}\n </Button>\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n )\n }\n)\n\nAccessoryProductCard.displayName = 'AccessoryShelf.ProductCard'\n\nexport { AccessoryProductCard }\nexport default AccessoryProductCard\n"],
5
+ "mappings": "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",
6
+ "names": ["Fragment", "jsx", "jsxs", "React", "cn", "Badge", "Card", "CardContent", "Picture", "Text", "Heading", "Button", "AccessoryProductCard", "product", "addedQuantity", "maxQuantity", "isLoading", "showTags", "showOriginalPrice", "showDiscountPrice", "showMemberPrice", "onProductClick", "onAddToCart", "className", "classNames", "copy", "ref", "resolvedMax", "isUnavailable", "isAtLimit", "isDisabled", "isAdded", "addLabel", "addedLabel", "unavailableLabel", "memberPriceLabel", "plusMemberPriceLabel", "buttonLabel", "memberLabel", "displayTitle", "displayDescription", "displayImage", "tag", "index", "ProductCard_default"]
7
+ }
@@ -0,0 +1,40 @@
1
+ import * as React from 'react';
2
+ import AccessoryProductCard from './ProductCard.js';
3
+ import type { AccessoryProductData, AccessoryCardSemanticName, AccessoryCopyConfig } from './types.js';
4
+ export type { AccessoryProductData, AccessoryCardSemanticName, AccessoryCopyConfig };
5
+ export type { AccessoryProductCardProps } from './ProductCard.js';
6
+ export interface AccessoryShelfProps extends React.HTMLAttributes<HTMLDivElement> {
7
+ /**
8
+ * 产品卡片区域 — 业务端自行组合布局容器 + AccessoryShelf.ProductCard
9
+ *
10
+ * @example 搭配 AccessoriesProductGrid
11
+ * ```tsx
12
+ * <AccessoryShelf data={{ title: 'Add-ons' }}>
13
+ * <AccessoriesProductGrid maxVisible={8} showMoreText="Show more" showLessText="Show less">
14
+ * {products.map(p => (
15
+ * <AccessoryShelf.ProductCard
16
+ * key={p.sku}
17
+ * product={p}
18
+ * addedQuantity={quantities[p.sku]}
19
+ * isLoading={loadingSkus.has(p.sku)}
20
+ * onAddToCart={handleAddToCart}
21
+ * />
22
+ * ))}
23
+ * </AccessoriesProductGrid>
24
+ * </AccessoryShelf>
25
+ * ```
26
+ */
27
+ children: React.ReactNode;
28
+ /** 语义化类名覆盖(仅 root/title/description 有效) */
29
+ classNames?: Partial<Record<'root' | 'title' | 'description', string>>;
30
+ }
31
+ export interface AccessoryShelfComponent extends React.ForwardRefExoticComponent<AccessoryShelfProps & React.RefAttributes<HTMLDivElement>> {
32
+ /** 配件卡片子组件,业务端在 children 中直接使用 */
33
+ ProductCard: typeof AccessoryProductCard;
34
+ }
35
+ export { AccessoryProductCard };
36
+ declare const _default: React.ForwardRefExoticComponent<Omit<AccessoryShelfProps & React.RefAttributes<HTMLDivElement>, "container" | keyof import("../../../../shared/Styles.js").StylesProps> & import("../../../../shared/Styles.js").StylesProps & import("../../../index.js").ContainerProps & React.RefAttributes<unknown>> & {
37
+ readonly $$typeof: symbol;
38
+ ProductCard: typeof AccessoryProductCard;
39
+ };
40
+ export default _default;
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as l}from"react/jsx-runtime";import*as e from"react";import{cn as f}from"../../../../helpers/index.js";import{withLayout as p}from"../../../../shared/Styles.js";import o from"./ProductCard.js";const t=e.forwardRef(({className:s,children:a,classNames:d,...i},n)=>{const r=e.useRef(null);return e.useImperativeHandle(n,()=>r.current),l("div",{ref:r,className:f("w-full",s,d?.root),...i,children:a})});t.displayName="AccessoryShelf";const c=t;c.ProductCard=o;var A=p(c);export{o as AccessoryProductCard,A as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/biz-components/AccessoriesShelf/components/AccessoryShelf/index.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../../../helpers/index.js'\nimport { withLayout } from '../../../../shared/Styles.js'\nimport AccessoryProductCard from './ProductCard.js'\nimport type { AccessoryProductData, AccessoryCardSemanticName, AccessoryCopyConfig } from './types.js'\n\nexport type { AccessoryProductData, AccessoryCardSemanticName, AccessoryCopyConfig }\nexport type { AccessoryProductCardProps } from './ProductCard.js'\n\nexport interface AccessoryShelfProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * \u4EA7\u54C1\u5361\u7247\u533A\u57DF \u2014 \u4E1A\u52A1\u7AEF\u81EA\u884C\u7EC4\u5408\u5E03\u5C40\u5BB9\u5668 + AccessoryShelf.ProductCard\n *\n * @example \u642D\u914D AccessoriesProductGrid\n * ```tsx\n * <AccessoryShelf data={{ title: 'Add-ons' }}>\n * <AccessoriesProductGrid maxVisible={8} showMoreText=\"Show more\" showLessText=\"Show less\">\n * {products.map(p => (\n * <AccessoryShelf.ProductCard\n * key={p.sku}\n * product={p}\n * addedQuantity={quantities[p.sku]}\n * isLoading={loadingSkus.has(p.sku)}\n * onAddToCart={handleAddToCart}\n * />\n * ))}\n * </AccessoriesProductGrid>\n * </AccessoryShelf>\n * ```\n */\n children: React.ReactNode\n /** \u8BED\u4E49\u5316\u7C7B\u540D\u8986\u76D6\uFF08\u4EC5 root/title/description \u6709\u6548\uFF09 */\n classNames?: Partial<Record<'root' | 'title' | 'description', string>>\n}\n\nexport interface AccessoryShelfComponent extends React.ForwardRefExoticComponent<\n AccessoryShelfProps & React.RefAttributes<HTMLDivElement>\n> {\n /** \u914D\u4EF6\u5361\u7247\u5B50\u7EC4\u4EF6\uFF0C\u4E1A\u52A1\u7AEF\u5728 children \u4E2D\u76F4\u63A5\u4F7F\u7528 */\n ProductCard: typeof AccessoryProductCard\n}\n\nconst AccessoryShelf = React.forwardRef<HTMLDivElement, AccessoryShelfProps>(\n ({ className, children, classNames, ...props }, ref) => {\n const boxRef = React.useRef<HTMLDivElement>(null)\n\n React.useImperativeHandle(ref, () => boxRef.current as HTMLDivElement)\n\n return (\n <div ref={boxRef} className={cn('w-full', className, classNames?.root)} {...props}>\n {children}\n </div>\n )\n }\n)\n\nAccessoryShelf.displayName = 'AccessoryShelf'\n\n// \u590D\u5408\u7EC4\u4EF6\uFF1AAccessoryShelf.ProductCard \u53EF\u76F4\u63A5\u4F7F\u7528\nconst AccessoryShelfWithProductCard = AccessoryShelf as AccessoryShelfComponent\nAccessoryShelfWithProductCard.ProductCard = AccessoryProductCard\n\nexport { AccessoryProductCard }\nexport default withLayout(AccessoryShelfWithProductCard)\n"],
5
+ "mappings": "aAmDM,cAAAA,MAAA,oBAjDN,UAAYC,MAAW,QACvB,OAAS,MAAAC,MAAU,+BACnB,OAAS,cAAAC,MAAkB,+BAC3B,OAAOC,MAA0B,mBAuCjC,MAAMC,EAAiBJ,EAAM,WAC3B,CAAC,CAAE,UAAAK,EAAW,SAAAC,EAAU,WAAAC,EAAY,GAAGC,CAAM,EAAGC,IAAQ,CACtD,MAAMC,EAASV,EAAM,OAAuB,IAAI,EAEhD,OAAAA,EAAM,oBAAoBS,EAAK,IAAMC,EAAO,OAAyB,EAGnEX,EAAC,OAAI,IAAKW,EAAQ,UAAWT,EAAG,SAAUI,EAAWE,GAAY,IAAI,EAAI,GAAGC,EACzE,SAAAF,EACH,CAEJ,CACF,EAEAF,EAAe,YAAc,iBAG7B,MAAMO,EAAgCP,EACtCO,EAA8B,YAAcR,EAG5C,IAAOS,EAAQV,EAAWS,CAA6B",
6
+ "names": ["jsx", "React", "cn", "withLayout", "AccessoryProductCard", "AccessoryShelf", "className", "children", "classNames", "props", "ref", "boxRef", "AccessoryShelfWithProductCard", "AccessoryShelf_default"]
7
+ }
@@ -0,0 +1,107 @@
1
+ import type React from 'react';
2
+ import type { BadgeProps } from '../../../../components/badge.js';
3
+ /**
4
+ * 语义化类名
5
+ */
6
+ export type AccessoryCardSemanticName = 'root' | 'image' | 'tags' | 'title' | 'description' | 'priceArea' | 'currentPrice' | 'originalPrice' | 'discountPrice' | 'memberPriceNote' | 'buttonGroup' | 'addButton';
7
+ /**
8
+ * 文案配置
9
+ */
10
+ export interface AccessoryCopyConfig {
11
+ /** 售罄文案,默认 "Sold Out" */
12
+ outOfStockLabel?: string;
13
+ /** 加购按钮文案,默认 "Add" */
14
+ addLabel?: string;
15
+ /** 已加购按钮文案前缀,默认 "Added",最终显示为 "Added (n)" */
16
+ addedLabel?: string;
17
+ /** 不可用按钮文案,默认 "Unavailable" */
18
+ unavailableLabel?: string;
19
+ /** 会员价标签文本,默认 "Member price" */
20
+ memberPriceLabel?: string;
21
+ /** Plus 会员价标签文本,默认 "Plus member price" */
22
+ plusMemberPriceLabel?: string;
23
+ }
24
+ /**
25
+ * 产品数据接口(UI 层,价格已格式化为字符串)
26
+ * 业务端负责从 API 获取并转换后传入
27
+ */
28
+ export interface AccessoryProductData {
29
+ /** SKU 唯一标识 */
30
+ sku: string;
31
+ /** 产品名称 */
32
+ name: string;
33
+ /** 产品主图 URL */
34
+ image: string;
35
+ /** 自定义图片 URL(覆盖 image) */
36
+ custom_image?: string;
37
+ /** 产品 handle */
38
+ handle: string;
39
+ /** Shopify ID */
40
+ shopify_id?: string;
41
+ /** 产品链接 */
42
+ listingLink?: string;
43
+ /** 自定义名称(覆盖 name) */
44
+ custom_name?: string;
45
+ /** 自定义描述(覆盖 description) */
46
+ custom_description?: string;
47
+ /** 产品描述 */
48
+ description?: string;
49
+ /** 现价(已格式化,如 "$49.99") */
50
+ price: string;
51
+ /** 原价(已格式化,有则显示删除线),优先级低于 discountPrice */
52
+ originalPrice?: string;
53
+ /** 折扣金额(已格式化,如 "-$10.00"),显示在现价旁边,品牌色、无删除线 */
54
+ discountPrice?: string;
55
+ /**
56
+ * 会员价提示(已格式化,如 "$42.49")
57
+ * 显示在现价下方小字,配合 memberPriceType 决定标签颜色
58
+ */
59
+ memberPriceNote?: string;
60
+ /** 会员价类型,决定标签文案和颜色 */
61
+ memberPriceType?: 'member' | 'plus-member';
62
+ /** 是否可售 */
63
+ availableForSale: boolean;
64
+ /**
65
+ * 可用库存上限(用于限制加购数量)
66
+ * 业务端从库存 API 获取后传入,组件只用于判断是否达到上限
67
+ */
68
+ quantityAvailable?: number | null;
69
+ /** tags 列表 */
70
+ tags?: Array<{
71
+ label: string;
72
+ variant: BadgeProps['variant'];
73
+ promotionalType?: BadgeProps['promotionalType'];
74
+ } | React.ReactNode>;
75
+ }
76
+ /**
77
+ * AccessoryProductCard Props
78
+ * 所有业务状态(addedQuantity、isLoading 等)由业务端维护并传入
79
+ */
80
+ export interface AccessoryProductCardProps {
81
+ /** 产品数据 */
82
+ product: AccessoryProductData;
83
+ /** 已加购数量(业务端维护) */
84
+ addedQuantity?: number;
85
+ /** 最大可加购数量(undefined 则不限制) */
86
+ maxQuantity?: number;
87
+ /** 加购 loading 状态(业务端维护) */
88
+ isLoading?: boolean;
89
+ /** 是否显示 tags */
90
+ showTags?: boolean;
91
+ /** 是否显示原价(删除线) */
92
+ showOriginalPrice?: boolean;
93
+ /** 是否显示折扣金额(品牌色,无删除线,优先级高于 showOriginalPrice) */
94
+ showDiscountPrice?: boolean;
95
+ /** 是否显示会员价小字 */
96
+ showMemberPrice?: boolean;
97
+ /** 点击产品图/标题回调(不传则降级为 listingLink href) */
98
+ onProductClick?: (product: AccessoryProductData) => void;
99
+ /** 点击加购按钮回调 */
100
+ onAddToCart?: (product: AccessoryProductData) => void;
101
+ /** 样式类名 */
102
+ className?: string;
103
+ /** 语义化类名覆盖 */
104
+ classNames?: Partial<Record<AccessoryCardSemanticName, string>>;
105
+ /** 文案配置 */
106
+ copy?: AccessoryCopyConfig;
107
+ }
@@ -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
+ }
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ import type { AccessoryProductData } from '../AccessoryShelf/types.js';
3
+ export interface MainProductAreaProps {
4
+ productTitle: string;
5
+ variantImage?: {
6
+ url: string;
7
+ altText?: string | null;
8
+ } | null;
9
+ paramList?: {
10
+ label: string;
11
+ value: string;
12
+ }[];
13
+ addedItems?: AccessoryProductData[];
14
+ priceSlot?: React.ReactNode;
15
+ actionSlot?: React.ReactNode;
16
+ onItemQuantityChange?: (item: AccessoryProductData, qty: number) => void;
17
+ onItemRemove?: (item: AccessoryProductData) => void;
18
+ addedItemQuantities?: Record<string, number>;
19
+ className?: string;
20
+ }
21
+ declare const MainProductArea: React.ForwardRefExoticComponent<MainProductAreaProps & React.RefAttributes<HTMLDivElement>>;
22
+ export default MainProductArea;
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as o from"react";import{cn as z}from"../../../../helpers/index.js";import T from"../../../../components/input-number.js";import{Dialog as j,DialogContent as S,DialogHeader as H,DialogTitle as M,DialogFooter as F}from"../../../../components/dialog.js";import b from"../../../../components/button.js";import{Text as x,Heading as y,Picture as Q}from"../../../../components/index.js";const q=({item:n,quantity:r,onQuantityChange:s,onRemoveClick:i})=>{const c=m=>{m<1?i():s(m)};return t("div",{className:"flex items-center gap-3",children:[e("div",{className:"size-[80px] shrink-0 overflow-hidden rounded-md mix-blend-multiply",children:e("img",{src:n.image??"",alt:n.name,className:"size-full object-contain"})}),t("div",{className:"tablet:gap-2 flex w-full flex-col gap-2",children:[t("div",{className:"tablet:flex-row tablet:justify-between flex w-full min-w-0 flex-1 flex-col gap-1",children:[e(y,{size:2,className:"text-info-primary tablet:text-base line-clamp-2 text-[14px] font-bold leading-[1.2] tracking-[-0.28px]",children:n.name}),t("div",{className:"flex items-center gap-1",children:[e(x,{as:"span",className:"text-info-primary tablet:text-base text-[14px] font-bold leading-tight tracking-[-0.28px]",children:n.price}),e(x,{as:"span",className:"text-info-tertiary text-[14px] font-bold leading-tight tracking-[-0.28px] line-through",children:n.originalPrice})]})]}),t("div",{className:"flex shrink-0 flex-row justify-between",children:[e(T,{classNames:{root:"border-lines border-[1px] rounded-lg",inputWrapper:"mx-0 tablet:w-[40px] size-[28px] tablet:h-[32px]",input:"border-none",button:"border-none size-[28px] tablet:size-8"},value:r,min:0,onChange:c}),e("button",{onClick:i,className:"text-info-tertiary tablet:text-base text-[14px] font-bold leading-tight tracking-[-0.28px] underline",children:"Remove"})]})]})]})},N=o.forwardRef(({productTitle:n,variantImage:r,paramList:s,addedItems:i=[],priceSlot:c,actionSlot:m,onItemQuantityChange:h,onItemRemove:k,addedItemQuantities:d,className:w},R)=>{const[D,g]=o.useState(()=>d??{}),[u,p]=o.useState(null);o.useEffect(()=>{d&&g(d)},[d]);const P=(a,l)=>{g(f=>({...f,[a.sku]:l})),h?.(a,l)},C=()=>{if(!u)return;const a=i.find(l=>l.sku===u);p(null),a&&k?.(a)},A=i.find(a=>a.sku===u),v=a=>a.map(l=>e(q,{item:l,quantity:D[l.sku]??1,onQuantityChange:f=>P(l,f),onRemoveClick:()=>p(l.sku)},l.sku));return t("div",{ref:R,className:z("rounded-card",w),children:[t("div",{className:"tablet:gap-16 tablet:items-center flex items-start gap-2",children:[e("div",{className:"tablet:size-[216px] size-[80px] shrink-0 overflow-hidden mix-blend-multiply",children:e(Q,{source:r?.url,alt:r?.altText??n,className:"size-full",imgClassName:"object-cover h-full"})}),t("div",{className:"flex-1",children:[t("div",{className:"tablet:flex-row flex min-w-0 flex-col items-center justify-between gap-4",children:[t("div",{className:"flex w-full min-w-0 flex-1 flex-col gap-1",children:[e(y,{as:"h1",size:2,className:"text-info-primary tracking-[-0.8px]",html:n}),s&&s.length>0&&e(x,{as:"p",className:"lg-desktop:text-[16px] text-info-tertiary text-[14px] font-bold leading-[1.4] tracking-[-0.28px]",children:s.map((a,l)=>t(o.Fragment,{children:[l>0&&" \xB7 ",a.label,": ",a.value]},l))})]}),t("div",{className:"tablet:justify-end tablet:flex-row tablet:items-center flex w-full flex-1 shrink-0 flex-col items-start gap-2",children:[c&&e("div",{className:"flex flex-col gap-1",children:c}),m]})]}),i.length>0&&t("div",{className:"tablet:block hidden",children:[e("div",{className:"bg-lines-1 my-6 h-px"}),e("div",{className:"flex flex-col gap-4",children:v(i)})]})]})]}),i.length>0&&t("div",{className:"tablet:hidden",children:[e("div",{className:"bg-lines-1 my-8 h-px"}),e("div",{className:"flex flex-col gap-4",children:v(i)})]}),e(j,{open:!!u,onOpenChange:a=>!a&&p(null),children:t(S,{className:"max-w-sm",children:[e(H,{children:e(M,{children:"Remove item?"})}),t(x,{as:"p",className:"text-info-tertiary text-[14px] leading-[1.4]",children:["Are you sure you want to remove ",e("span",{className:"text-info-primary",children:A?.name})," from your cart?"]}),t(F,{className:"gap-2",children:[e(b,{variant:"secondary",size:"base",onClick:()=>p(null),children:"Cancel"}),e(b,{variant:"primary",size:"base",onClick:C,children:"Remove"})]})]})})]})});N.displayName="MainProductArea";var G=N;export{G as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/biz-components/AccessoriesShelf/components/MainProductArea/index.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../../../helpers/index.js'\nimport InputNumber, { type InputNumberProps } from '../../../../components/input-number.js'\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '../../../../components/dialog.js'\nimport Button from '../../../../components/button.js'\nimport { Text, Heading, Picture } from '../../../../components/index.js'\nimport type { AccessoryProductData } from '../AccessoryShelf/types.js'\n\nexport interface MainProductAreaProps {\n productTitle: string\n variantImage?: { url: string; altText?: string | null } | null\n paramList?: { label: string; value: string }[]\n addedItems?: AccessoryProductData[]\n priceSlot?: React.ReactNode\n actionSlot?: React.ReactNode\n onItemQuantityChange?: (item: AccessoryProductData, qty: number) => void\n onItemRemove?: (item: AccessoryProductData) => void\n addedItemQuantities?: Record<string, number>\n className?: string\n}\n\nconst AddedItemRow = ({\n item,\n quantity,\n onQuantityChange,\n onRemoveClick,\n}: {\n item: AccessoryProductData\n quantity: number\n onQuantityChange: (qty: number) => void\n onRemoveClick: () => void\n}) => {\n const handleQuantityChange = (qty: number) => {\n if (qty < 1) {\n onRemoveClick()\n } else {\n onQuantityChange(qty)\n }\n }\n\n return (\n <div className=\"flex items-center gap-3\">\n <div className=\"size-[80px] shrink-0 overflow-hidden rounded-md mix-blend-multiply\">\n <img src={item.image ?? ''} alt={item.name} className=\"size-full object-contain\" />\n </div>\n <div className=\"tablet:gap-2 flex w-full flex-col gap-2\">\n <div className=\"tablet:flex-row tablet:justify-between flex w-full min-w-0 flex-1 flex-col gap-1\">\n <Heading\n size={2}\n className=\"text-info-primary tablet:text-base line-clamp-2 text-[14px] font-bold leading-[1.2] tracking-[-0.28px]\"\n >\n {item.name}\n </Heading>\n <div className=\"flex items-center gap-1\">\n <Text\n as=\"span\"\n className=\"text-info-primary tablet:text-base text-[14px] font-bold leading-tight tracking-[-0.28px]\"\n >\n {item.price}\n </Text>\n <Text\n as=\"span\"\n className=\"text-info-tertiary text-[14px] font-bold leading-tight tracking-[-0.28px] line-through\"\n >\n {item.originalPrice}\n </Text>\n </div>\n </div>\n <div className=\"flex shrink-0 flex-row justify-between\">\n <InputNumber\n classNames={{\n root: 'border-lines border-[1px] rounded-lg',\n inputWrapper: 'mx-0 tablet:w-[40px] size-[28px] tablet:h-[32px]',\n input: 'border-none',\n button: 'border-none size-[28px] tablet:size-8',\n }}\n value={quantity}\n min={0}\n onChange={handleQuantityChange as InputNumberProps['onChange']}\n />\n <button\n onClick={onRemoveClick}\n className=\"text-info-tertiary tablet:text-base text-[14px] font-bold leading-tight tracking-[-0.28px] underline\"\n >\n Remove\n </button>\n </div>\n </div>\n </div>\n )\n}\n\nconst MainProductArea = React.forwardRef<HTMLDivElement, MainProductAreaProps>(\n (\n {\n productTitle,\n variantImage,\n paramList,\n addedItems = [],\n priceSlot,\n actionSlot,\n onItemQuantityChange,\n onItemRemove,\n addedItemQuantities,\n className,\n },\n ref\n ) => {\n const [quantities, setQuantities] = React.useState<Record<string, number>>(() => addedItemQuantities ?? {})\n const [pendingRemoveSku, setPendingRemoveSku] = React.useState<string | null>(null)\n\n React.useEffect(() => {\n if (addedItemQuantities) {\n setQuantities(addedItemQuantities)\n }\n }, [addedItemQuantities])\n\n const handleQuantityChange = (item: AccessoryProductData, qty: number) => {\n setQuantities(prev => ({ ...prev, [item.sku]: qty }))\n onItemQuantityChange?.(item, qty)\n }\n\n const handleRemoveConfirm = () => {\n if (!pendingRemoveSku) return\n const item = addedItems.find(i => i.sku === pendingRemoveSku)\n setPendingRemoveSku(null)\n if (item) onItemRemove?.(item)\n }\n\n const pendingRemoveItem = addedItems.find(i => i.sku === pendingRemoveSku)\n\n const renderItems = (items: AccessoryProductData[]) =>\n items.map(item => (\n <AddedItemRow\n key={item.sku}\n item={item}\n quantity={quantities[item.sku] ?? 1}\n onQuantityChange={qty => handleQuantityChange(item, qty)}\n onRemoveClick={() => setPendingRemoveSku(item.sku)}\n />\n ))\n\n return (\n <div ref={ref} className={cn('rounded-card', className)}>\n <div className=\"tablet:gap-16 tablet:items-center flex items-start gap-2\">\n <div className=\"tablet:size-[216px] size-[80px] shrink-0 overflow-hidden mix-blend-multiply\">\n <Picture\n source={variantImage?.url}\n alt={variantImage?.altText ?? productTitle}\n className=\"size-full\"\n imgClassName=\"object-cover h-full\"\n />\n </div>\n\n <div className=\"flex-1\">\n <div className=\"tablet:flex-row flex min-w-0 flex-col items-center justify-between gap-4\">\n <div className=\"flex w-full min-w-0 flex-1 flex-col gap-1\">\n <Heading as=\"h1\" size={2} className=\"text-info-primary tracking-[-0.8px]\" html={productTitle} />\n {paramList && paramList.length > 0 && (\n <Text\n as=\"p\"\n className=\"lg-desktop:text-[16px] text-info-tertiary text-[14px] font-bold leading-[1.4] tracking-[-0.28px]\"\n >\n {paramList.map((p, i) => (\n <React.Fragment key={i}>\n {i > 0 && ' \u00B7 '}\n {p.label}: {p.value}\n </React.Fragment>\n ))}\n </Text>\n )}\n </div>\n <div className=\"tablet:justify-end tablet:flex-row tablet:items-center flex w-full flex-1 shrink-0 flex-col items-start gap-2\">\n {priceSlot && <div className=\"flex flex-col gap-1\">{priceSlot}</div>}\n {actionSlot}\n </div>\n </div>\n\n {addedItems.length > 0 && (\n <div className=\"tablet:block hidden\">\n <div className=\"bg-lines-1 my-6 h-px\" />\n <div className=\"flex flex-col gap-4\">{renderItems(addedItems)}</div>\n </div>\n )}\n </div>\n </div>\n\n {addedItems.length > 0 && (\n <div className=\"tablet:hidden\">\n <div className=\"bg-lines-1 my-8 h-px\" />\n <div className=\"flex flex-col gap-4\">{renderItems(addedItems)}</div>\n </div>\n )}\n\n <Dialog open={!!pendingRemoveSku} onOpenChange={open => !open && setPendingRemoveSku(null)}>\n <DialogContent className=\"max-w-sm\">\n <DialogHeader>\n <DialogTitle>Remove item?</DialogTitle>\n </DialogHeader>\n <Text as=\"p\" className=\"text-info-tertiary text-[14px] leading-[1.4]\">\n Are you sure you want to remove <span className=\"text-info-primary\">{pendingRemoveItem?.name}</span> from\n your cart?\n </Text>\n <DialogFooter className=\"gap-2\">\n <Button variant=\"secondary\" size=\"base\" onClick={() => setPendingRemoveSku(null)}>\n Cancel\n </Button>\n <Button variant=\"primary\" size=\"base\" onClick={handleRemoveConfirm}>\n Remove\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n )\n }\n)\n\nMainProductArea.displayName = 'MainProductArea'\n\nexport default MainProductArea\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "React", "cn", "InputNumber", "Dialog", "DialogContent", "DialogHeader", "DialogTitle", "DialogFooter", "Button", "Text", "Heading", "Picture", "AddedItemRow", "item", "quantity", "onQuantityChange", "onRemoveClick", "handleQuantityChange", "qty", "MainProductArea", "productTitle", "variantImage", "paramList", "addedItems", "priceSlot", "actionSlot", "onItemQuantityChange", "onItemRemove", "addedItemQuantities", "className", "ref", "quantities", "setQuantities", "pendingRemoveSku", "setPendingRemoveSku", "prev", "handleRemoveConfirm", "i", "pendingRemoveItem", "renderItems", "items", "p", "open", "MainProductArea_default"]
7
+ }
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ import type { UserType, BannerConfig, BannerAction } from '../../types.js';
3
+ export interface PromoBannerProps {
4
+ userType: UserType;
5
+ configs: Partial<Record<UserType, BannerConfig | null>>;
6
+ onAction?: (action: BannerAction) => void;
7
+ className?: string;
8
+ }
9
+ declare const PromoBanner: React.ForwardRefExoticComponent<PromoBannerProps & React.RefAttributes<HTMLDivElement>>;
10
+ export default PromoBanner;
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as C from"react";import{cn as g}from"../../../../helpers/index.js";import{Text as m}from"../../../../components/index.js";const u=()=>t("svg",{xmlns:"http://www.w3.org/2000/svg",width:"28",height:"24",viewBox:"0 0 28 24",fill:"none",children:[e("path",{d:"M20.3194 0C21.1834 0 21.9923 0.429768 22.479 1.14948L27.5462 8.64391C28.2476 9.68126 28.125 11.0736 27.254 11.9707L16.6544 22.8856C15.2122 24.3702 12.8426 24.3716 11.3981 22.8891L0.748688 11.9602C-0.114133 11.0747 -0.24628 9.7017 0.430898 8.66496L5.31604 1.18456C5.79941 0.444636 6.62004 0 7.49882 0H20.3194Z",fill:"#005D8E"}),e("path",{d:"M19.0076 8.33664C19.4627 7.88876 20.2013 7.88756 20.6574 8.3344C21.1132 8.78154 21.1144 9.50728 20.6596 9.95535L14.8762 15.6466C14.3983 16.1168 13.6232 16.118 13.1443 15.6488L7.34264 9.95759C6.88678 9.51045 6.88556 8.78471 7.34036 8.33664C7.79546 7.88876 8.53413 7.88756 8.99017 8.3344L14.008 13.2555L19.0076 8.33664Z",fill:"white"})]}),x=()=>t("svg",{xmlns:"http://www.w3.org/2000/svg",width:"28",height:"24",viewBox:"0 0 28 24",fill:"none",children:[e("path",{d:"M20.3194 0C21.1834 0 21.9923 0.429768 22.479 1.14948L27.5462 8.64391C28.2476 9.68126 28.125 11.0736 27.254 11.9707L16.6544 22.8856C15.2122 24.3702 12.8426 24.3716 11.3981 22.8891L0.748688 11.9602C-0.114133 11.0747 -0.24628 9.7017 0.430898 8.66496L5.31604 1.18456C5.79941 0.444636 6.62004 0 7.49882 0H20.3194Z",fill:"url(#paint0_linear_5861_8479)"}),e("path",{d:"M19.0076 8.33664C19.4627 7.88876 20.2013 7.88756 20.6574 8.3344C21.1132 8.78154 21.1144 9.50728 20.6596 9.95535L14.8762 15.6466C14.3983 16.1168 13.6232 16.118 13.1443 15.6488L7.34264 9.95759C6.88678 9.51045 6.88556 8.78471 7.34036 8.33664C7.79546 7.88876 8.53413 7.88756 8.99017 8.3344L14.008 13.2555L19.0076 8.33664Z",fill:"url(#paint1_linear_5861_8479)"}),t("defs",{children:[t("linearGradient",{id:"paint0_linear_5861_8479",x1:"-0.341464",y1:"1.07126e-06",x2:"30.68",y2:"4.66513",gradientUnits:"userSpaceOnUse",children:[e("stop",{stopColor:"#6E6754"}),e("stop",{offset:"1",stopColor:"#070708"})]}),t("linearGradient",{id:"paint1_linear_5861_8479",x1:"6.82927",y1:"8",x2:"21.9228",y2:"11.4047",gradientUnits:"userSpaceOnUse",children:[e("stop",{stopColor:"#FFF5E0"}),e("stop",{offset:"1",stopColor:"#E8C08A"})]})]})]}),h={guest:"bg-[#E1F8FE]",member:"bg-[#FFF1E1]","plus-member":"bg-[#FFF1E1]"},s=C.forwardRef(({userType:r,configs:l,onAction:d,className:p},c)=>{const n=l[r];if(!n?.text)return null;const a=()=>{n.action&&d?.(n.action)},o=!!n.action,f=n.backgroundColor?void 0:h[r];return e("div",{ref:c,role:o?"button":void 0,tabIndex:o?0:void 0,onClick:o?a:void 0,onKeyDown:o?i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),a())}:void 0,className:g("rounded-card flex items-center justify-center px-6 py-4","lg-desktop:text-[16px] text-[14px] font-bold leading-[1.4] tracking-[-0.28px]",f,o&&"cursor-pointer",p),style:n.backgroundColor?{backgroundColor:n.backgroundColor}:void 0,children:t("div",{className:"flex items-center gap-1",children:[r==="guest"?e(u,{}):e(x,{}),e(m,{html:n.text,as:"div",className:"[&_a]:text-brand-0 flex items-center gap-1 [&_a]:underline"})]})})});s.displayName="PromoBanner";var y=s;export{y as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/biz-components/AccessoriesShelf/components/PromoBanner/index.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../../../helpers/index.js'\nimport type { UserType, BannerConfig, BannerAction } from '../../types.js'\nimport { Text } from '../../../../components/index.js'\n\nexport interface PromoBannerProps {\n userType: UserType\n configs: Partial<Record<UserType, BannerConfig | null>>\n onAction?: (action: BannerAction) => void\n className?: string\n}\n\nconst GuestPromotionalIcon = () => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"24\" viewBox=\"0 0 28 24\" fill=\"none\">\n <path\n d=\"M20.3194 0C21.1834 0 21.9923 0.429768 22.479 1.14948L27.5462 8.64391C28.2476 9.68126 28.125 11.0736 27.254 11.9707L16.6544 22.8856C15.2122 24.3702 12.8426 24.3716 11.3981 22.8891L0.748688 11.9602C-0.114133 11.0747 -0.24628 9.7017 0.430898 8.66496L5.31604 1.18456C5.79941 0.444636 6.62004 0 7.49882 0H20.3194Z\"\n fill=\"#005D8E\"\n />\n <path\n d=\"M19.0076 8.33664C19.4627 7.88876 20.2013 7.88756 20.6574 8.3344C21.1132 8.78154 21.1144 9.50728 20.6596 9.95535L14.8762 15.6466C14.3983 16.1168 13.6232 16.118 13.1443 15.6488L7.34264 9.95759C6.88678 9.51045 6.88556 8.78471 7.34036 8.33664C7.79546 7.88876 8.53413 7.88756 8.99017 8.3344L14.008 13.2555L19.0076 8.33664Z\"\n fill=\"white\"\n />\n </svg>\n )\n}\n\nconst MemberPromotionalIcon = () => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"24\" viewBox=\"0 0 28 24\" fill=\"none\">\n <path\n d=\"M20.3194 0C21.1834 0 21.9923 0.429768 22.479 1.14948L27.5462 8.64391C28.2476 9.68126 28.125 11.0736 27.254 11.9707L16.6544 22.8856C15.2122 24.3702 12.8426 24.3716 11.3981 22.8891L0.748688 11.9602C-0.114133 11.0747 -0.24628 9.7017 0.430898 8.66496L5.31604 1.18456C5.79941 0.444636 6.62004 0 7.49882 0H20.3194Z\"\n fill=\"url(#paint0_linear_5861_8479)\"\n />\n <path\n d=\"M19.0076 8.33664C19.4627 7.88876 20.2013 7.88756 20.6574 8.3344C21.1132 8.78154 21.1144 9.50728 20.6596 9.95535L14.8762 15.6466C14.3983 16.1168 13.6232 16.118 13.1443 15.6488L7.34264 9.95759C6.88678 9.51045 6.88556 8.78471 7.34036 8.33664C7.79546 7.88876 8.53413 7.88756 8.99017 8.3344L14.008 13.2555L19.0076 8.33664Z\"\n fill=\"url(#paint1_linear_5861_8479)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_5861_8479\"\n x1=\"-0.341464\"\n y1=\"1.07126e-06\"\n x2=\"30.68\"\n y2=\"4.66513\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#6E6754\" />\n <stop offset=\"1\" stopColor=\"#070708\" />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_5861_8479\"\n x1=\"6.82927\"\n y1=\"8\"\n x2=\"21.9228\"\n y2=\"11.4047\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FFF5E0\" />\n <stop offset=\"1\" stopColor=\"#E8C08A\" />\n </linearGradient>\n </defs>\n </svg>\n )\n}\n\nconst BANNER_BG: Record<UserType, string> = {\n guest: 'bg-[#E1F8FE]',\n member: 'bg-[#FFF1E1]',\n 'plus-member': 'bg-[#FFF1E1]',\n}\n\nconst PromoBanner = React.forwardRef<HTMLDivElement, PromoBannerProps>(\n ({ userType, configs, onAction, className }, ref) => {\n const config = configs[userType]\n if (!config?.text) return null\n\n const handleClick = () => {\n if (config.action) onAction?.(config.action)\n }\n\n const hasClickBehavior = !!config.action\n const bgColor = config.backgroundColor ? undefined : BANNER_BG[userType]\n\n return (\n <div\n ref={ref}\n role={hasClickBehavior ? 'button' : undefined}\n tabIndex={hasClickBehavior ? 0 : undefined}\n onClick={hasClickBehavior ? handleClick : undefined}\n onKeyDown={\n hasClickBehavior\n ? e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }\n : undefined\n }\n className={cn(\n 'rounded-card flex items-center justify-center px-6 py-4',\n 'lg-desktop:text-[16px] text-[14px] font-bold leading-[1.4] tracking-[-0.28px]',\n bgColor,\n hasClickBehavior && 'cursor-pointer',\n className\n )}\n style={config.backgroundColor ? { backgroundColor: config.backgroundColor } : undefined}\n >\n <div className=\"flex items-center gap-1\">\n {userType === 'guest' ? <GuestPromotionalIcon /> : <MemberPromotionalIcon />}\n <Text html={config.text} as=\"div\" className=\"[&_a]:text-brand-0 flex items-center gap-1 [&_a]:underline\" />\n </div>\n </div>\n )\n }\n)\n\nPromoBanner.displayName = 'PromoBanner'\n\nexport default PromoBanner\n"],
5
+ "mappings": "aAgBI,OACE,OAAAA,EADF,QAAAC,MAAA,oBAdJ,UAAYC,MAAW,QACvB,OAAS,MAAAC,MAAU,+BAEnB,OAAS,QAAAC,MAAY,kCASrB,MAAMC,EAAuB,IAEzBJ,EAAC,OAAI,MAAM,6BAA6B,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OACtF,UAAAD,EAAC,QACC,EAAE,uTACF,KAAK,UACP,EACAA,EAAC,QACC,EAAE,gUACF,KAAK,QACP,GACF,EAIEM,EAAwB,IAE1BL,EAAC,OAAI,MAAM,6BAA6B,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OACtF,UAAAD,EAAC,QACC,EAAE,uTACF,KAAK,gCACP,EACAA,EAAC,QACC,EAAE,gUACF,KAAK,gCACP,EACAC,EAAC,QACC,UAAAA,EAAC,kBACC,GAAG,0BACH,GAAG,YACH,GAAG,cACH,GAAG,QACH,GAAG,UACH,cAAc,iBAEd,UAAAD,EAAC,QAAK,UAAU,UAAU,EAC1BA,EAAC,QAAK,OAAO,IAAI,UAAU,UAAU,GACvC,EACAC,EAAC,kBACC,GAAG,0BACH,GAAG,UACH,GAAG,IACH,GAAG,UACH,GAAG,UACH,cAAc,iBAEd,UAAAD,EAAC,QAAK,UAAU,UAAU,EAC1BA,EAAC,QAAK,OAAO,IAAI,UAAU,UAAU,GACvC,GACF,GACF,EAIEO,EAAsC,CAC1C,MAAO,eACP,OAAQ,eACR,cAAe,cACjB,EAEMC,EAAcN,EAAM,WACxB,CAAC,CAAE,SAAAO,EAAU,QAAAC,EAAS,SAAAC,EAAU,UAAAC,CAAU,EAAGC,IAAQ,CACnD,MAAMC,EAASJ,EAAQD,CAAQ,EAC/B,GAAI,CAACK,GAAQ,KAAM,OAAO,KAE1B,MAAMC,EAAc,IAAM,CACpBD,EAAO,QAAQH,IAAWG,EAAO,MAAM,CAC7C,EAEME,EAAmB,CAAC,CAACF,EAAO,OAC5BG,EAAUH,EAAO,gBAAkB,OAAYP,EAAUE,CAAQ,EAEvE,OACET,EAAC,OACC,IAAKa,EACL,KAAMG,EAAmB,SAAW,OACpC,SAAUA,EAAmB,EAAI,OACjC,QAASA,EAAmBD,EAAc,OAC1C,UACEC,EACIE,GAAK,EACCA,EAAE,MAAQ,SAAWA,EAAE,MAAQ,OACjCA,EAAE,eAAe,EACjBH,EAAY,EAEhB,EACA,OAEN,UAAWZ,EACT,0DACA,gFACAc,EACAD,GAAoB,iBACpBJ,CACF,EACA,MAAOE,EAAO,gBAAkB,CAAE,gBAAiBA,EAAO,eAAgB,EAAI,OAE9E,SAAAb,EAAC,OAAI,UAAU,0BACZ,UAAAQ,IAAa,QAAUT,EAACK,EAAA,EAAqB,EAAKL,EAACM,EAAA,EAAsB,EAC1EN,EAACI,EAAA,CAAK,KAAMU,EAAO,KAAM,GAAG,MAAM,UAAU,6DAA6D,GAC3G,EACF,CAEJ,CACF,EAEAN,EAAY,YAAc,cAE1B,IAAOW,EAAQX",
6
+ "names": ["jsx", "jsxs", "React", "cn", "Text", "GuestPromotionalIcon", "MemberPromotionalIcon", "BANNER_BG", "PromoBanner", "userType", "configs", "onAction", "className", "ref", "config", "handleClick", "hasClickBehavior", "bgColor", "e", "PromoBanner_default"]
7
+ }
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ export interface SectionHeaderProps {
3
+ title: string;
4
+ subtitle?: string;
5
+ selectionNote?: string;
6
+ className?: string;
7
+ }
8
+ declare const SectionHeader: React.ForwardRefExoticComponent<SectionHeaderProps & React.RefAttributes<HTMLDivElement>>;
9
+ export default SectionHeader;
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as e,jsxs as s}from"react/jsx-runtime";import*as p from"react";import{cn as x}from"../../../../helpers/index.js";import{Text as i,Heading as m}from"../../../../components/index.js";const r=p.forwardRef(({title:l,subtitle:t,selectionNote:a,className:n},o)=>s("div",{ref:o,className:x("tablet:flex-row tablet:items-end flex flex-col justify-between gap-6",n),children:[s("div",{className:"flex min-w-0 flex-1 flex-col gap-2",children:[e(m,{html:l,size:4,className:"text-info-primary"}),t&&e(i,{as:"p",html:t,className:"lg-desktop:text-[16px] text-info-primary text-[14px] font-bold leading-[1.4] tracking-[-0.28px]"})]}),a&&e(i,{as:"p",html:a,className:"lg-desktop:text-[16px] [&_span]:text-brand-0 text-info-primary shrink-0 whitespace-nowrap text-[14px] font-bold leading-[1.4] tracking-[-0.28px]"})]}));r.displayName="SectionHeader";var c=r;export{c as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/biz-components/AccessoriesShelf/components/SectionHeader/index.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../../../helpers/index.js'\nimport { Text, Heading } from '../../../../components/index.js'\n\nexport interface SectionHeaderProps {\n title: string\n subtitle?: string\n selectionNote?: string\n className?: string\n}\n\nconst SectionHeader = React.forwardRef<HTMLDivElement, SectionHeaderProps>(\n ({ title, subtitle, selectionNote, className }, ref) => {\n return (\n <div ref={ref} className={cn('tablet:flex-row tablet:items-end flex flex-col justify-between gap-6', className)}>\n <div className=\"flex min-w-0 flex-1 flex-col gap-2\">\n <Heading html={title} size={4} className=\"text-info-primary\" />\n {subtitle && (\n <Text\n as=\"p\"\n html={subtitle}\n className=\"lg-desktop:text-[16px] text-info-primary text-[14px] font-bold leading-[1.4] tracking-[-0.28px]\"\n />\n )}\n </div>\n {selectionNote && (\n <Text\n as=\"p\"\n html={selectionNote}\n className=\"lg-desktop:text-[16px] [&_span]:text-brand-0 text-info-primary shrink-0 whitespace-nowrap text-[14px] font-bold leading-[1.4] tracking-[-0.28px]\"\n />\n )}\n </div>\n )\n }\n)\n\nSectionHeader.displayName = 'SectionHeader'\n\nexport default SectionHeader\n"],
5
+ "mappings": "aAiBQ,OACE,OAAAA,EADF,QAAAC,MAAA,oBAfR,UAAYC,MAAW,QACvB,OAAS,MAAAC,MAAU,+BACnB,OAAS,QAAAC,EAAM,WAAAC,MAAe,kCAS9B,MAAMC,EAAgBJ,EAAM,WAC1B,CAAC,CAAE,MAAAK,EAAO,SAAAC,EAAU,cAAAC,EAAe,UAAAC,CAAU,EAAGC,IAE5CV,EAAC,OAAI,IAAKU,EAAK,UAAWR,EAAG,uEAAwEO,CAAS,EAC5G,UAAAT,EAAC,OAAI,UAAU,qCACb,UAAAD,EAACK,EAAA,CAAQ,KAAME,EAAO,KAAM,EAAG,UAAU,oBAAoB,EAC5DC,GACCR,EAACI,EAAA,CACC,GAAG,IACH,KAAMI,EACN,UAAU,kGACZ,GAEJ,EACCC,GACCT,EAACI,EAAA,CACC,GAAG,IACH,KAAMK,EACN,UAAU,mJACZ,GAEJ,CAGN,EAEAH,EAAc,YAAc,gBAE5B,IAAOM,EAAQN",
6
+ "names": ["jsx", "jsxs", "React", "cn", "Text", "Heading", "SectionHeader", "title", "subtitle", "selectionNote", "className", "ref", "SectionHeader_default"]
7
+ }
@@ -0,0 +1,7 @@
1
+ import MainProductArea from './components/MainProductArea/index.js';
2
+ import PromoBanner from './components/PromoBanner/index.js';
3
+ import SectionHeader from './components/SectionHeader/index.js';
4
+ import AccessoriesProductGrid from './components/AccessoriesProductGrid/index.js';
5
+ import type { UserType, BannerConfig, BannerAction } from './types.js';
6
+ export { AccessoriesProductGrid, SectionHeader, PromoBanner, MainProductArea };
7
+ export type { UserType, BannerConfig, BannerAction };
@@ -0,0 +1,2 @@
1
+ import r from"./components/MainProductArea/index.js";import o from"./components/PromoBanner/index.js";import e from"./components/SectionHeader/index.js";import n from"./components/AccessoriesProductGrid/index.js";export{n as AccessoriesProductGrid,r as MainProductArea,o as PromoBanner,e as SectionHeader};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/AccessoriesShelf/index.tsx"],
4
+ "sourcesContent": ["// 'use client'\n\nimport MainProductArea from './components/MainProductArea/index.js'\nimport PromoBanner from './components/PromoBanner/index.js'\nimport SectionHeader from './components/SectionHeader/index.js'\nimport AccessoriesProductGrid from './components/AccessoriesProductGrid/index.js'\nimport type { UserType, BannerConfig, BannerAction } from './types.js'\n\nexport { AccessoriesProductGrid, SectionHeader, PromoBanner, MainProductArea }\nexport type { UserType, BannerConfig, BannerAction }\n"],
5
+ "mappings": "AAEA,OAAOA,MAAqB,wCAC5B,OAAOC,MAAiB,oCACxB,OAAOC,MAAmB,sCAC1B,OAAOC,MAA4B",
6
+ "names": ["MainProductArea", "PromoBanner", "SectionHeader", "AccessoriesProductGrid"]
7
+ }
@@ -0,0 +1,16 @@
1
+ export type UserType = 'guest' | 'member' | 'plus-member';
2
+ export type PriceStyleType = 1 | 2 | 3 | 4 | 5 | 6;
3
+ export type BannerAction = {
4
+ type: 'link';
5
+ url: string;
6
+ } | {
7
+ type: 'modal';
8
+ } | {
9
+ type: 'addToCart';
10
+ skuId: string;
11
+ };
12
+ export interface BannerConfig {
13
+ text: string;
14
+ backgroundColor?: string;
15
+ action?: BannerAction;
16
+ }
@@ -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
+ }
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import type { GiftSlotConfig, GiftConfirmDialogCopy, GiftOptionRowCopy } from '../types.js';
3
+ export interface CartGiftSectionProps {
4
+ slots: GiftSlotConfig[];
5
+ selectedGiftSkus: string[];
6
+ disabled?: boolean;
7
+ onChange?: (newSkus: string[]) => void;
8
+ onGiftRemoveSku?: (sku: string) => void;
9
+ copy?: GiftConfirmDialogCopy & GiftOptionRowCopy;
10
+ className?: string;
11
+ classNames?: Partial<Record<'root' | 'slotWrap' | 'slotTitle' | 'slotSubtitle' | 'reminder' | 'optionList', string>>;
12
+ }
13
+ declare const CartGiftSection: React.ForwardRefExoticComponent<CartGiftSectionProps & React.RefAttributes<HTMLDivElement>>;
14
+ export default CartGiftSection;
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as C,jsxs as _}from"react/jsx-runtime";import*as l from"react";import{cn as G}from"../../../helpers/index.js";import{DEFAULT_CART_COPY as E}from"../index.js";import A from"./components/GiftOptionRow/index.js";import W from"../CartItemRow/components/CartItemRemoveConfirm/index.js";const h=l.forwardRef(({slots:d,selectedGiftSkus:k,disabled:g=!1,onChange:s,onGiftRemoveSku:y,copy:R,className:O,classNames:v={}},P)=>{const[u,p]=l.useState(null),[c,w]=l.useState(null),[n,m]=l.useState(k);l.useEffect(()=>{m(k)},[k]);const T=l.useCallback((e,i,a)=>{if(g)return;const r=a.mode??"radio",t=a.options.map(o=>o.sku);if(r==="radio"){if(!i){p(e);return}const o=n.find(f=>t.includes(f));if(o){w({oldSku:o,newSku:e});return}const S=[...n.filter(f=>!t.includes(f)),e];m(S),s?.(S);return}if(i){const o=a.maxSelectable,S=n.filter(N=>t.includes(N));if(o!=null&&S.length>=o)return;const f=[...n,e];m(f),s?.(f)}else p(e)},[g,n,s]),L=l.useCallback(()=>{if(!u)return;const e=n.filter(i=>i!==u);m(e),s?.(e),y?.(u),p(null)},[u,n,s,y]),b=l.useCallback(()=>{p(null)},[]),D=l.useCallback(()=>{if(!c)return;const{newSku:e}=c,i=d.find(t=>t.options.some(o=>o.sku===e));if(!i)return;const a=i.options.map(t=>t.sku),r=[...n.filter(t=>!a.includes(t)),e];m(r),s?.(r),w(null)},[c,n,d,s]),x=l.useCallback(()=>{w(null)},[]);return d.length===0?null:_("div",{ref:P,className:G("cart-gift-section-root flex flex-col gap-4",g&&"pointer-events-none opacity-50",O,v.root),children:[d.map((e,i)=>{const a=e.mode??"radio";return C("div",{className:G("cart-gift-section-slot flex flex-col gap-3 rounded-md",v.slotWrap),children:C("div",{className:G("cart-gift-section-option-list flex flex-col gap-2",v.optionList),role:"group","aria-label":`Gift slot ${i+1}`,children:e.options.map(r=>{const t=n.includes(r.sku);return C(A,{option:r,selected:t,mode:a,copy:R,onCheckedChange:o=>T(r.sku,o,e)},r.sku)})})},i)}),C(W,{open:u!==null||c!==null,copy:{removeConfirmText:R?.removeGiftConfirm??E.removeConfirmText},onConfirm:c?D:L,onCancel:c?x:b,onClose:c?x:b})]})});h.displayName="CartGiftSection";var Y=h;export{Y as default};
2
+ //# sourceMappingURL=CartGiftSection.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/biz-components/CartDetail/CartGiftSection/CartGiftSection.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../../helpers/index.js'\nimport type { GiftSlotConfig, GiftOption, GiftConfirmDialogCopy, GiftOptionRowCopy } from '../types.js'\nimport { DEFAULT_CART_COPY } from '../index.js'\nimport GiftOptionRow from './components/GiftOptionRow/index.js'\n// import GiftConfirmDialog from './components/GiftConfirmDialog/index.js'\nimport CartItemRemoveConfirm from '../CartItemRow/components/CartItemRemoveConfirm/index.js'\n\nexport interface CartGiftSectionProps {\n slots: GiftSlotConfig[]\n selectedGiftSkus: string[]\n disabled?: boolean\n onChange?: (newSkus: string[]) => void\n onGiftRemoveSku?: (sku: string) => void\n copy?: GiftConfirmDialogCopy & GiftOptionRowCopy\n className?: string\n classNames?: Partial<Record<'root' | 'slotWrap' | 'slotTitle' | 'slotSubtitle' | 'reminder' | 'optionList', string>>\n}\n\n// interface PendingAction {\n// newIds: string[]\n// message: string\n// }\n\nconst CartGiftSection = React.forwardRef<HTMLDivElement, CartGiftSectionProps>(\n ({ slots, selectedGiftSkus, disabled = false, onChange, onGiftRemoveSku, copy, className, classNames = {} }, ref) => {\n // const [pendingAction, setPendingAction] = React.useState<PendingAction | null>(null)\n const [pendingRemoveSku, setPendingRemoveSku] = React.useState<string | null>(null)\n const [pendingSwitch, setPendingSwitch] = React.useState<{ oldSku: string; newSku: string } | null>(null)\n\n const [localSkus, setLocalSkus] = React.useState<string[]>(selectedGiftSkus)\n\n React.useEffect(() => {\n setLocalSkus(selectedGiftSkus)\n }, [selectedGiftSkus])\n\n const handleCheckedChange = React.useCallback(\n (optionSku: string, checked: boolean, slot: GiftSlotConfig) => {\n if (disabled) return\n\n const mode = slot.mode ?? 'radio'\n const slotSkus = slot.options.map(o => o.sku)\n\n if (mode === 'radio') {\n if (!checked) {\n setPendingRemoveSku(optionSku)\n return\n }\n const currentSlotSelected = localSkus.find(s => slotSkus.includes(s))\n if (currentSlotSelected) {\n setPendingSwitch({ oldSku: currentSlotSelected, newSku: optionSku })\n return\n }\n const newSkus = [...localSkus.filter(s => !slotSkus.includes(s)), optionSku]\n setLocalSkus(newSkus)\n onChange?.(newSkus)\n return\n }\n\n if (checked) {\n const maxSelectable = slot.maxSelectable\n const currentSlotSelected = localSkus.filter(s => slotSkus.includes(s))\n if (maxSelectable != null && currentSlotSelected.length >= maxSelectable) {\n return\n }\n const newSkus = [...localSkus, optionSku]\n setLocalSkus(newSkus)\n onChange?.(newSkus)\n } else {\n setPendingRemoveSku(optionSku)\n }\n },\n [disabled, localSkus, onChange]\n )\n\n const handleRemoveConfirm = React.useCallback(() => {\n if (!pendingRemoveSku) return\n const newSkus = localSkus.filter(s => s !== pendingRemoveSku)\n setLocalSkus(newSkus)\n onChange?.(newSkus)\n onGiftRemoveSku?.(pendingRemoveSku)\n setPendingRemoveSku(null)\n }, [pendingRemoveSku, localSkus, onChange, onGiftRemoveSku])\n\n const handleRemoveCancel = React.useCallback(() => {\n setPendingRemoveSku(null)\n }, [])\n\n const handleSwitchConfirm = React.useCallback(() => {\n if (!pendingSwitch) return\n const { newSku } = pendingSwitch\n const slot = slots.find(s => s.options.some(o => o.sku === newSku))\n if (!slot) return\n const slotSkus = slot.options.map(o => o.sku)\n const newSkus = [...localSkus.filter(s => !slotSkus.includes(s)), newSku]\n setLocalSkus(newSkus)\n onChange?.(newSkus)\n setPendingSwitch(null)\n }, [pendingSwitch, localSkus, slots, onChange])\n\n const handleSwitchCancel = React.useCallback(() => {\n setPendingSwitch(null)\n }, [])\n\n // const handleDialogConfirm = React.useCallback(() => {\n // if (!pendingAction) return\n // onChange?.(pendingAction.newIds)\n // setPendingAction(null)\n // }, [pendingAction, onChange])\n\n // const handleDialogCancel = React.useCallback(() => {\n // setPendingAction(null)\n // }, [])\n\n if (slots.length === 0) {\n return null\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'cart-gift-section-root flex flex-col gap-4',\n disabled && 'pointer-events-none opacity-50',\n className,\n classNames.root\n )}\n >\n {slots.map((slot, slotIndex) => {\n const mode = slot.mode ?? 'radio'\n\n return (\n <div\n key={slotIndex}\n className={cn('cart-gift-section-slot flex flex-col gap-3 rounded-md', classNames.slotWrap)}\n >\n <div\n className={cn('cart-gift-section-option-list flex flex-col gap-2', classNames.optionList)}\n role=\"group\"\n aria-label={`Gift slot ${slotIndex + 1}`}\n >\n {slot.options.map((option: GiftOption) => {\n const optionSelected = localSkus.includes(option.sku)\n\n return (\n <GiftOptionRow\n key={option.sku}\n option={option}\n selected={optionSelected}\n mode={mode}\n copy={copy}\n onCheckedChange={checked => handleCheckedChange(option.sku, checked, slot)}\n />\n )\n })}\n </div>\n </div>\n )\n })}\n\n {/* <GiftConfirmDialog\n open={pendingAction !== null}\n message={pendingAction?.message ?? ''}\n copy={copy}\n onConfirm={handleDialogConfirm}\n onCancel={handleDialogCancel}\n /> */}\n\n <CartItemRemoveConfirm\n open={pendingRemoveSku !== null || pendingSwitch !== null}\n copy={{\n removeConfirmText: copy?.removeGiftConfirm ?? DEFAULT_CART_COPY.removeConfirmText,\n }}\n onConfirm={pendingSwitch ? handleSwitchConfirm : handleRemoveConfirm}\n onCancel={pendingSwitch ? handleSwitchCancel : handleRemoveCancel}\n onClose={pendingSwitch ? handleSwitchCancel : handleRemoveCancel}\n />\n </div>\n )\n }\n)\n\nCartGiftSection.displayName = 'CartGiftSection'\n\nexport default CartGiftSection\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "React", "cn", "DEFAULT_CART_COPY", "GiftOptionRow", "CartItemRemoveConfirm", "CartGiftSection", "slots", "selectedGiftSkus", "disabled", "onChange", "onGiftRemoveSku", "copy", "className", "classNames", "ref", "pendingRemoveSku", "setPendingRemoveSku", "pendingSwitch", "setPendingSwitch", "localSkus", "setLocalSkus", "handleCheckedChange", "optionSku", "checked", "slot", "mode", "slotSkus", "currentSlotSelected", "s", "newSkus", "maxSelectable", "handleRemoveConfirm", "handleRemoveCancel", "handleSwitchConfirm", "newSku", "o", "handleSwitchCancel", "slotIndex", "option", "optionSelected", "CartGiftSection_default"]
7
+ }