pixelize-design-library 2.4.2-beta.55 → 2.4.2-beta.57

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 (365) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/COMPONENT-GOTCHAS.md +50 -22
  3. package/DESIGN-GUIDE.md +19 -2
  4. package/dist/Components/AddressCard/AddressCard.d.ts +4 -0
  5. package/dist/Components/AddressCard/AddressCard.js +25 -0
  6. package/dist/Components/AddressCard/AddressCardGroup.d.ts +4 -0
  7. package/dist/Components/AddressCard/AddressCardGroup.js +7 -0
  8. package/dist/Components/AddressCard/AddressCardProps.d.ts +43 -0
  9. package/dist/Components/AddressCard/AddressCardProps.js +2 -0
  10. package/dist/Components/BagBar/BagBar.d.ts +4 -0
  11. package/dist/Components/BagBar/BagBar.js +32 -0
  12. package/dist/Components/BagBar/BagBarProps.d.ts +30 -0
  13. package/dist/Components/BagBar/BagBarProps.js +2 -0
  14. package/dist/Components/CartItem/CartItem.d.ts +4 -0
  15. package/dist/Components/CartItem/CartItem.js +60 -0
  16. package/dist/Components/CartItem/CartItemProps.d.ts +64 -0
  17. package/dist/Components/CartItem/CartItemProps.js +2 -0
  18. package/dist/Components/CartItem/cartItemOptions.d.ts +3 -0
  19. package/dist/Components/CartItem/cartItemOptions.js +13 -0
  20. package/dist/Components/CheckoutKit/selectable.d.ts +58 -0
  21. package/dist/Components/CheckoutKit/selectable.js +120 -0
  22. package/dist/Components/Commerce/commerceTypes.d.ts +52 -0
  23. package/dist/Components/Commerce/commerceTypes.js +2 -0
  24. package/dist/Components/Commerce/commerceVariants.d.ts +13 -0
  25. package/dist/Components/Commerce/commerceVariants.js +51 -0
  26. package/dist/Components/Commerce/index.d.ts +2 -0
  27. package/dist/Components/Commerce/index.js +18 -0
  28. package/dist/Components/Commerce/useContainerWidth.d.ts +3 -0
  29. package/dist/Components/Commerce/useContainerWidth.js +25 -0
  30. package/dist/Components/CouponField/CouponField.d.ts +4 -0
  31. package/dist/Components/CouponField/CouponField.js +72 -0
  32. package/dist/Components/CouponField/CouponFieldProps.d.ts +49 -0
  33. package/dist/Components/CouponField/CouponFieldProps.js +2 -0
  34. package/dist/Components/DatePicker/DatePickerProps.d.ts +1 -1
  35. package/dist/Components/DatePicker/PickerPortal.d.ts +11 -0
  36. package/dist/Components/DatePicker/PickerPortal.js +26 -0
  37. package/dist/Components/DatePicker/RangeDatePicker.d.ts +1 -1
  38. package/dist/Components/DatePicker/RangeDatePicker.js +67 -32
  39. package/dist/Components/DatePicker/SingleDatePicker.js +49 -13
  40. package/dist/Components/DatePicker/TimeOnlyPicker.js +39 -4
  41. package/dist/Components/DetailSections/DetailSections.d.ts +4 -0
  42. package/dist/Components/DetailSections/DetailSections.js +112 -0
  43. package/dist/Components/DetailSections/DetailSectionsProps.d.ts +58 -0
  44. package/dist/Components/DetailSections/DetailSectionsProps.js +2 -0
  45. package/dist/Components/Input/PhoneNumberInputProps.d.ts +1 -1
  46. package/dist/Components/MediaGallery/MediaFrame.d.ts +31 -0
  47. package/dist/Components/MediaGallery/MediaFrame.js +55 -0
  48. package/dist/Components/MediaGallery/MediaGallery.d.ts +4 -0
  49. package/dist/Components/MediaGallery/MediaGallery.js +206 -0
  50. package/dist/Components/MediaGallery/MediaGalleryProps.d.ts +76 -0
  51. package/dist/Components/MediaGallery/MediaGalleryProps.js +20 -0
  52. package/dist/Components/MediaGallery/MediaLightbox.d.ts +4 -0
  53. package/dist/Components/MediaGallery/MediaLightbox.js +116 -0
  54. package/dist/Components/MediaGallery/MediaLightboxProps.d.ts +40 -0
  55. package/dist/Components/MediaGallery/MediaLightboxProps.js +15 -0
  56. package/dist/Components/MediaGallery/MediaThumb.d.ts +18 -0
  57. package/dist/Components/MediaGallery/MediaThumb.js +25 -0
  58. package/dist/Components/MediaGallery/glass.d.ts +31 -0
  59. package/dist/Components/MediaGallery/glass.js +47 -0
  60. package/dist/Components/MediaGallery/mediaGalleryModel.d.ts +22 -0
  61. package/dist/Components/MediaGallery/mediaGalleryModel.js +83 -0
  62. package/dist/Components/MediaGallery/motion.d.ts +5 -0
  63. package/dist/Components/MediaGallery/motion.js +12 -0
  64. package/dist/Components/MediaGallery/useMatchMedia.d.ts +2 -0
  65. package/dist/Components/MediaGallery/useMatchMedia.js +20 -0
  66. package/dist/Components/MultiSelect/MultiSelectProps.d.ts +1 -1
  67. package/dist/Components/OffersList/OffersList.d.ts +4 -0
  68. package/dist/Components/OffersList/OffersList.js +83 -0
  69. package/dist/Components/OffersList/OffersListProps.d.ts +34 -0
  70. package/dist/Components/OffersList/OffersListProps.js +2 -0
  71. package/dist/Components/OptionChip/OptionChip.d.ts +4 -0
  72. package/dist/Components/OptionChip/OptionChip.js +97 -0
  73. package/dist/Components/OptionChip/OptionChipProps.d.ts +33 -0
  74. package/dist/Components/OptionChip/OptionChipProps.js +2 -0
  75. package/dist/Components/OptionChip/optionInk.d.ts +12 -0
  76. package/dist/Components/OptionChip/optionInk.js +25 -0
  77. package/dist/Components/OrderStatusTimeline/OrderStatusTimeline.d.ts +4 -0
  78. package/dist/Components/OrderStatusTimeline/OrderStatusTimeline.js +57 -0
  79. package/dist/Components/OrderStatusTimeline/OrderStatusTimelineProps.d.ts +29 -0
  80. package/dist/Components/OrderStatusTimeline/OrderStatusTimelineProps.js +2 -0
  81. package/dist/Components/OrderSummary/OrderSummary.d.ts +4 -0
  82. package/dist/Components/OrderSummary/OrderSummary.js +63 -0
  83. package/dist/Components/OrderSummary/OrderSummaryProps.d.ts +53 -0
  84. package/dist/Components/OrderSummary/OrderSummaryProps.js +2 -0
  85. package/dist/Components/PaymentOption/PaymentOption.d.ts +4 -0
  86. package/dist/Components/PaymentOption/PaymentOption.js +24 -0
  87. package/dist/Components/PaymentOption/PaymentOptionGroup.d.ts +4 -0
  88. package/dist/Components/PaymentOption/PaymentOptionGroup.js +7 -0
  89. package/dist/Components/PaymentOption/PaymentOptionProps.d.ts +32 -0
  90. package/dist/Components/PaymentOption/PaymentOptionProps.js +2 -0
  91. package/dist/Components/PinInput/PinInputProps.d.ts +1 -1
  92. package/dist/Components/PincodeChecker/PincodeChecker.d.ts +4 -0
  93. package/dist/Components/PincodeChecker/PincodeChecker.js +175 -0
  94. package/dist/Components/PincodeChecker/PincodeCheckerProps.d.ts +57 -0
  95. package/dist/Components/PincodeChecker/PincodeCheckerProps.js +2 -0
  96. package/dist/Components/PriceBlock/PriceBlock.d.ts +4 -0
  97. package/dist/Components/PriceBlock/PriceBlock.js +41 -0
  98. package/dist/Components/PriceBlock/PriceBlockProps.d.ts +39 -0
  99. package/dist/Components/PriceBlock/PriceBlockProps.js +2 -0
  100. package/dist/Components/ProductBadges/ProductBadges.d.ts +4 -0
  101. package/dist/Components/ProductBadges/ProductBadges.js +61 -0
  102. package/dist/Components/ProductBadges/ProductBadgesProps.d.ts +18 -0
  103. package/dist/Components/ProductBadges/ProductBadgesProps.js +2 -0
  104. package/dist/Components/ProductCard/ProductCard.d.ts +3 -2
  105. package/dist/Components/ProductCard/ProductCard.js +103 -52
  106. package/dist/Components/ProductCard/ProductCardAction.d.ts +17 -0
  107. package/dist/Components/ProductCard/ProductCardAction.js +65 -0
  108. package/dist/Components/ProductCard/ProductCardGrid.d.ts +4 -0
  109. package/dist/Components/ProductCard/ProductCardGrid.js +20 -0
  110. package/dist/Components/ProductCard/ProductCardMedia.d.ts +18 -0
  111. package/dist/Components/ProductCard/ProductCardMedia.js +35 -0
  112. package/dist/Components/ProductCard/ProductCardProps.d.ts +138 -56
  113. package/dist/Components/ProductCard/ProductCardSkeleton.d.ts +4 -0
  114. package/dist/Components/ProductCard/ProductCardSkeleton.js +17 -0
  115. package/dist/Components/ProductCard/ProductCardSwatches.d.ts +15 -0
  116. package/dist/Components/ProductCard/ProductCardSwatches.js +37 -0
  117. package/dist/Components/ProductCard/QuickAddSheet.d.ts +4 -0
  118. package/dist/Components/ProductCard/QuickAddSheet.js +109 -0
  119. package/dist/Components/ProductCard/QuickAddSheetProps.d.ts +38 -0
  120. package/dist/Components/ProductCard/QuickAddSheetProps.js +2 -0
  121. package/dist/Components/ProductCard/cardLabels.d.ts +2 -0
  122. package/dist/Components/ProductCard/cardLabels.js +16 -0
  123. package/dist/Components/ProductCard/cardMetrics.d.ts +27 -0
  124. package/dist/Components/ProductCard/cardMetrics.js +55 -0
  125. package/dist/Components/ProductCard/productCardFixtures.d.ts +7 -0
  126. package/dist/Components/ProductCard/productCardFixtures.js +61 -0
  127. package/dist/Components/ProductCard/productCardModel.d.ts +22 -0
  128. package/dist/Components/ProductCard/productCardModel.js +79 -0
  129. package/dist/Components/ProductCard/useMinWidth.d.ts +2 -0
  130. package/dist/Components/ProductCard/useMinWidth.js +20 -0
  131. package/dist/Components/ProductDetails/ProductDetails.d.ts +3 -2
  132. package/dist/Components/ProductDetails/ProductDetails.js +209 -33
  133. package/dist/Components/ProductDetails/ProductDetailsProps.d.ts +143 -41
  134. package/dist/Components/ProductDetails/productDetailsModel.d.ts +14 -0
  135. package/dist/Components/ProductDetails/productDetailsModel.js +45 -0
  136. package/dist/Components/ProductDetails/useInViewport.d.ts +3 -0
  137. package/dist/Components/ProductDetails/useInViewport.js +18 -0
  138. package/dist/Components/QuantityStepper/QuantityStepper.d.ts +4 -0
  139. package/dist/Components/QuantityStepper/QuantityStepper.js +59 -0
  140. package/dist/Components/QuantityStepper/QuantityStepperProps.d.ts +24 -0
  141. package/dist/Components/QuantityStepper/QuantityStepperProps.js +2 -0
  142. package/dist/Components/Rating/Rating.d.ts +4 -0
  143. package/dist/Components/Rating/Rating.js +81 -0
  144. package/dist/Components/Rating/RatingProps.d.ts +27 -0
  145. package/dist/Components/Rating/RatingProps.js +2 -0
  146. package/dist/Components/ReviewList/ReviewList.d.ts +4 -0
  147. package/dist/Components/ReviewList/ReviewList.js +94 -0
  148. package/dist/Components/ReviewList/ReviewListProps.d.ts +68 -0
  149. package/dist/Components/ReviewList/ReviewListProps.js +2 -0
  150. package/dist/Components/ReviewSummary/ReviewSummary.d.ts +4 -0
  151. package/dist/Components/ReviewSummary/ReviewSummary.js +47 -0
  152. package/dist/Components/ReviewSummary/ReviewSummaryProps.d.ts +31 -0
  153. package/dist/Components/ReviewSummary/ReviewSummaryProps.js +2 -0
  154. package/dist/Components/Search/SearchProps.d.ts +1 -1
  155. package/dist/Components/SearchSelect/SearchSelectProps.d.ts +1 -1
  156. package/dist/Components/SegmentedControl/SegmentedControl.d.ts +1 -1
  157. package/dist/Components/SegmentedControl/SegmentedControl.js +17 -5
  158. package/dist/Components/SegmentedControl/SegmentedControlProps.d.ts +6 -0
  159. package/dist/Components/SegmentedControl/segmentedInk.d.ts +2 -0
  160. package/dist/Components/SegmentedControl/segmentedInk.js +4 -1
  161. package/dist/Components/SegmentedControl/useSlidingPill.d.ts +2 -0
  162. package/dist/Components/SegmentedControl/useSlidingPill.js +6 -1
  163. package/dist/Components/Select/SelectProps.d.ts +1 -1
  164. package/dist/Components/SelectSearch/SelectSearchProps.d.ts +1 -1
  165. package/dist/Components/SelectV2/SelectV2Props.d.ts +1 -1
  166. package/dist/Components/SideBar/SecondaryBar.js +13 -8
  167. package/dist/Components/SideBar/SideBarProps.d.ts +3 -1
  168. package/dist/Components/SideBar/components/MenuItemBox.js +47 -10
  169. package/dist/Components/SideBar/components/MenuPopoverContent.js +4 -3
  170. package/dist/Components/SpecTable/SpecTable.d.ts +4 -0
  171. package/dist/Components/SpecTable/SpecTable.js +39 -0
  172. package/dist/Components/SpecTable/SpecTableProps.d.ts +25 -0
  173. package/dist/Components/SpecTable/SpecTableProps.js +2 -0
  174. package/dist/Components/Spinner/Spinner.d.ts +1 -1
  175. package/dist/Components/Spinner/Spinner.js +2 -2
  176. package/dist/Components/Spinner/SpinnerProps.d.ts +2 -0
  177. package/dist/Components/StageProgress/StepperStage.js +2 -1
  178. package/dist/Components/StatCard/StatCard.d.ts +1 -1
  179. package/dist/Components/StatCard/StatCard.js +2 -2
  180. package/dist/Components/StatCard/StatCardProps.d.ts +4 -0
  181. package/dist/Components/StickyBuyBar/StickyBuyBar.d.ts +3 -0
  182. package/dist/Components/StickyBuyBar/StickyBuyBar.js +85 -0
  183. package/dist/Components/StickyBuyBar/StickyBuyBarProps.d.ts +54 -0
  184. package/dist/Components/StickyBuyBar/StickyBuyBarProps.js +2 -0
  185. package/dist/Components/StockStatus/StockStatus.d.ts +4 -0
  186. package/dist/Components/StockStatus/StockStatus.js +31 -0
  187. package/dist/Components/StockStatus/StockStatusProps.d.ts +14 -0
  188. package/dist/Components/StockStatus/StockStatusProps.js +2 -0
  189. package/dist/Components/Table/Table.js +2 -1
  190. package/dist/Components/Table/TableProps.d.ts +5 -2
  191. package/dist/Components/Table/columnLabel.d.ts +6 -0
  192. package/dist/Components/Table/columnLabel.js +27 -0
  193. package/dist/Components/Table/components/TableBody.js +5 -1
  194. package/dist/Components/Table/components/TableHeader.js +3 -2
  195. package/dist/Components/Table/filters/ActiveFilters.js +2 -1
  196. package/dist/Components/Table/filters/TableFilters.js +2 -1
  197. package/dist/Components/Table/hooks/useTable.js +3 -2
  198. package/dist/Components/Table/settings/ManageColumns.js +4 -3
  199. package/dist/Components/Table/settings/TableSettings.js +2 -1
  200. package/dist/Components/TrustBadges/TrustBadges.d.ts +4 -0
  201. package/dist/Components/TrustBadges/TrustBadges.js +24 -0
  202. package/dist/Components/TrustBadges/TrustBadgesProps.d.ts +20 -0
  203. package/dist/Components/TrustBadges/TrustBadgesProps.js +2 -0
  204. package/dist/Components/VariantSelector/VariantSelector.d.ts +4 -0
  205. package/dist/Components/VariantSelector/VariantSelector.js +123 -0
  206. package/dist/Components/VariantSelector/VariantSelectorProps.d.ts +27 -0
  207. package/dist/Components/VariantSelector/VariantSelectorProps.js +2 -0
  208. package/dist/Components/VariantSelector/variantSelection.d.ts +6 -0
  209. package/dist/Components/VariantSelector/variantSelection.js +25 -0
  210. package/dist/Components/WishlistToggle/WishlistToggle.d.ts +4 -0
  211. package/dist/Components/WishlistToggle/WishlistToggle.js +65 -0
  212. package/dist/Components/WishlistToggle/WishlistToggleProps.d.ts +19 -0
  213. package/dist/Components/WishlistToggle/WishlistToggleProps.js +2 -0
  214. package/dist/Theme/assertPalette.d.ts +1 -1
  215. package/dist/Theme/assertPalette.js +1 -1
  216. package/dist/Theme/tokens/brands/index.js +2 -0
  217. package/dist/Theme/tokens/brands/zinc/palette.dark.d.ts +1 -0
  218. package/dist/Theme/tokens/builders/buildDarkPalette.js +2 -0
  219. package/dist/Theme/tokens/builders/index.d.ts +1 -0
  220. package/dist/Theme/tokens/builders/index.js +1 -0
  221. package/dist/Theme/tokens/builders/rechartsTheme.d.ts +56 -0
  222. package/dist/Theme/tokens/builders/rechartsTheme.js +43 -0
  223. package/dist/Theme/tokens/builders/star.d.ts +3 -0
  224. package/dist/Theme/tokens/builders/star.js +8 -0
  225. package/dist/Theme/tokens/primitives/controlSizes.js +1 -1
  226. package/dist/Theme/tokens/types.d.ts +3 -1
  227. package/dist/Theme/useChartTheme.d.ts +4 -0
  228. package/dist/Theme/useChartTheme.js +12 -0
  229. package/dist/Utils/price.d.ts +16 -0
  230. package/dist/Utils/price.js +34 -0
  231. package/dist/esm/Components/AddressCard/AddressCard.js +20 -0
  232. package/dist/esm/Components/AddressCard/AddressCardGroup.js +5 -0
  233. package/dist/esm/Components/AddressCard/AddressCardProps.js +1 -0
  234. package/dist/esm/Components/BagBar/BagBar.js +27 -0
  235. package/dist/esm/Components/BagBar/BagBarProps.js +1 -0
  236. package/dist/esm/Components/CartItem/CartItem.js +55 -0
  237. package/dist/esm/Components/CartItem/CartItemProps.js +1 -0
  238. package/dist/esm/Components/CartItem/cartItemOptions.js +9 -0
  239. package/dist/esm/Components/CheckoutKit/selectable.js +112 -0
  240. package/dist/esm/Components/Commerce/commerceTypes.js +1 -0
  241. package/dist/esm/Components/Commerce/commerceVariants.js +41 -0
  242. package/dist/esm/Components/Commerce/index.js +2 -0
  243. package/dist/esm/Components/Commerce/useContainerWidth.js +21 -0
  244. package/dist/esm/Components/CouponField/CouponField.js +67 -0
  245. package/dist/esm/Components/CouponField/CouponFieldProps.js +1 -0
  246. package/dist/esm/Components/DatePicker/PickerPortal.js +21 -0
  247. package/dist/esm/Components/DatePicker/RangeDatePicker.js +34 -32
  248. package/dist/esm/Components/DatePicker/SingleDatePicker.js +16 -13
  249. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +6 -4
  250. package/dist/esm/Components/DetailSections/DetailSections.js +107 -0
  251. package/dist/esm/Components/DetailSections/DetailSectionsProps.js +1 -0
  252. package/dist/esm/Components/MediaGallery/MediaFrame.js +48 -0
  253. package/dist/esm/Components/MediaGallery/MediaGallery.js +201 -0
  254. package/dist/esm/Components/MediaGallery/MediaGalleryProps.js +17 -0
  255. package/dist/esm/Components/MediaGallery/MediaLightbox.js +78 -0
  256. package/dist/esm/Components/MediaGallery/MediaLightboxProps.js +12 -0
  257. package/dist/esm/Components/MediaGallery/MediaThumb.js +23 -0
  258. package/dist/esm/Components/MediaGallery/glass.js +42 -0
  259. package/dist/esm/Components/MediaGallery/mediaGalleryModel.js +71 -0
  260. package/dist/esm/Components/MediaGallery/motion.js +8 -0
  261. package/dist/esm/Components/MediaGallery/useMatchMedia.js +16 -0
  262. package/dist/esm/Components/OffersList/OffersList.js +81 -0
  263. package/dist/esm/Components/OffersList/OffersListProps.js +1 -0
  264. package/dist/esm/Components/OptionChip/OptionChip.js +95 -0
  265. package/dist/esm/Components/OptionChip/OptionChipProps.js +1 -0
  266. package/dist/esm/Components/OptionChip/optionInk.js +21 -0
  267. package/dist/esm/Components/OrderStatusTimeline/OrderStatusTimeline.js +55 -0
  268. package/dist/esm/Components/OrderStatusTimeline/OrderStatusTimelineProps.js +1 -0
  269. package/dist/esm/Components/OrderSummary/OrderSummary.js +58 -0
  270. package/dist/esm/Components/OrderSummary/OrderSummaryProps.js +1 -0
  271. package/dist/esm/Components/PaymentOption/PaymentOption.js +19 -0
  272. package/dist/esm/Components/PaymentOption/PaymentOptionGroup.js +5 -0
  273. package/dist/esm/Components/PaymentOption/PaymentOptionProps.js +1 -0
  274. package/dist/esm/Components/PincodeChecker/PincodeChecker.js +170 -0
  275. package/dist/esm/Components/PincodeChecker/PincodeCheckerProps.js +1 -0
  276. package/dist/esm/Components/PriceBlock/PriceBlock.js +39 -0
  277. package/dist/esm/Components/PriceBlock/PriceBlockProps.js +1 -0
  278. package/dist/esm/Components/ProductBadges/ProductBadges.js +59 -0
  279. package/dist/esm/Components/ProductBadges/ProductBadgesProps.js +1 -0
  280. package/dist/esm/Components/ProductCard/ProductCard.js +105 -54
  281. package/dist/esm/Components/ProductCard/ProductCardAction.js +60 -0
  282. package/dist/esm/Components/ProductCard/ProductCardGrid.js +18 -0
  283. package/dist/esm/Components/ProductCard/ProductCardMedia.js +33 -0
  284. package/dist/esm/Components/ProductCard/ProductCardSkeleton.js +12 -0
  285. package/dist/esm/Components/ProductCard/ProductCardSwatches.js +35 -0
  286. package/dist/esm/Components/ProductCard/QuickAddSheet.js +71 -0
  287. package/dist/esm/Components/ProductCard/QuickAddSheetProps.js +1 -0
  288. package/dist/esm/Components/ProductCard/cardLabels.js +13 -0
  289. package/dist/esm/Components/ProductCard/cardMetrics.js +52 -0
  290. package/dist/esm/Components/ProductCard/productCardFixtures.js +58 -0
  291. package/dist/esm/Components/ProductCard/productCardModel.js +65 -0
  292. package/dist/esm/Components/ProductCard/useMinWidth.js +16 -0
  293. package/dist/esm/Components/ProductDetails/ProductDetails.js +210 -34
  294. package/dist/esm/Components/ProductDetails/productDetailsModel.js +35 -0
  295. package/dist/esm/Components/ProductDetails/useInViewport.js +14 -0
  296. package/dist/esm/Components/QuantityStepper/QuantityStepper.js +57 -0
  297. package/dist/esm/Components/QuantityStepper/QuantityStepperProps.js +1 -0
  298. package/dist/esm/Components/Rating/Rating.js +79 -0
  299. package/dist/esm/Components/Rating/RatingProps.js +1 -0
  300. package/dist/esm/Components/ReviewList/ReviewList.js +89 -0
  301. package/dist/esm/Components/ReviewList/ReviewListProps.js +1 -0
  302. package/dist/esm/Components/ReviewSummary/ReviewSummary.js +42 -0
  303. package/dist/esm/Components/ReviewSummary/ReviewSummaryProps.js +1 -0
  304. package/dist/esm/Components/SegmentedControl/SegmentedControl.js +19 -7
  305. package/dist/esm/Components/SegmentedControl/segmentedInk.js +2 -0
  306. package/dist/esm/Components/SegmentedControl/useSlidingPill.js +6 -1
  307. package/dist/esm/Components/SideBar/SecondaryBar.js +14 -9
  308. package/dist/esm/Components/SideBar/components/MenuItemBox.js +14 -10
  309. package/dist/esm/Components/SideBar/components/MenuPopoverContent.js +4 -3
  310. package/dist/esm/Components/SpecTable/SpecTable.js +34 -0
  311. package/dist/esm/Components/SpecTable/SpecTableProps.js +1 -0
  312. package/dist/esm/Components/Spinner/Spinner.js +2 -2
  313. package/dist/esm/Components/StageProgress/StepperStage.js +2 -1
  314. package/dist/esm/Components/StatCard/StatCard.js +2 -2
  315. package/dist/esm/Components/StickyBuyBar/StickyBuyBar.js +80 -0
  316. package/dist/esm/Components/StickyBuyBar/StickyBuyBarProps.js +1 -0
  317. package/dist/esm/Components/StockStatus/StockStatus.js +29 -0
  318. package/dist/esm/Components/StockStatus/StockStatusProps.js +1 -0
  319. package/dist/esm/Components/Table/Table.js +2 -1
  320. package/dist/esm/Components/Table/columnLabel.js +21 -0
  321. package/dist/esm/Components/Table/components/TableBody.js +5 -1
  322. package/dist/esm/Components/Table/components/TableHeader.js +3 -2
  323. package/dist/esm/Components/Table/filters/ActiveFilters.js +2 -1
  324. package/dist/esm/Components/Table/filters/TableFilters.js +2 -1
  325. package/dist/esm/Components/Table/hooks/useTable.js +3 -2
  326. package/dist/esm/Components/Table/settings/ManageColumns.js +4 -3
  327. package/dist/esm/Components/Table/settings/TableSettings.js +2 -1
  328. package/dist/esm/Components/TrustBadges/TrustBadges.js +22 -0
  329. package/dist/esm/Components/TrustBadges/TrustBadgesProps.js +1 -0
  330. package/dist/esm/Components/VariantSelector/VariantSelector.js +118 -0
  331. package/dist/esm/Components/VariantSelector/VariantSelectorProps.js +1 -0
  332. package/dist/esm/Components/VariantSelector/variantSelection.js +19 -0
  333. package/dist/esm/Components/WishlistToggle/WishlistToggle.js +63 -0
  334. package/dist/esm/Components/WishlistToggle/WishlistToggleProps.js +1 -0
  335. package/dist/esm/Theme/assertPalette.js +1 -1
  336. package/dist/esm/Theme/tokens/brands/index.js +2 -0
  337. package/dist/esm/Theme/tokens/builders/buildDarkPalette.js +2 -0
  338. package/dist/esm/Theme/tokens/builders/index.js +1 -0
  339. package/dist/esm/Theme/tokens/builders/rechartsTheme.js +37 -0
  340. package/dist/esm/Theme/tokens/builders/star.js +4 -0
  341. package/dist/esm/Theme/tokens/primitives/controlSizes.js +1 -1
  342. package/dist/esm/Theme/useChartTheme.js +8 -0
  343. package/dist/esm/Utils/price.js +27 -0
  344. package/dist/esm/index.js +36 -0
  345. package/dist/index.d.ts +66 -0
  346. package/dist/index.js +86 -4
  347. package/package.json +1 -1
  348. package/dist/Components/ProductCard/ProductLabel.d.ts +0 -7
  349. package/dist/Components/ProductCard/ProductLabel.js +0 -20
  350. package/dist/Components/ProductCard/ProductPrice.d.ts +0 -10
  351. package/dist/Components/ProductCard/ProductPrice.js +0 -126
  352. package/dist/Components/ProductCard/ProductReview.d.ts +0 -8
  353. package/dist/Components/ProductCard/ProductReview.js +0 -30
  354. package/dist/Components/ProductCard/ProductTags.d.ts +0 -8
  355. package/dist/Components/ProductCard/ProductTags.js +0 -53
  356. package/dist/Components/ProductDetails/ProductDtlPrice.d.ts +0 -7
  357. package/dist/Components/ProductDetails/ProductDtlPrice.js +0 -24
  358. package/dist/Components/ProductDetails/ProductImageSlider.d.ts +0 -13
  359. package/dist/Components/ProductDetails/ProductImageSlider.js +0 -240
  360. package/dist/esm/Components/ProductCard/ProductLabel.js +0 -18
  361. package/dist/esm/Components/ProductCard/ProductPrice.js +0 -121
  362. package/dist/esm/Components/ProductCard/ProductReview.js +0 -28
  363. package/dist/esm/Components/ProductCard/ProductTags.js +0 -48
  364. package/dist/esm/Components/ProductDetails/ProductDtlPrice.js +0 -22
  365. package/dist/esm/Components/ProductDetails/ProductImageSlider.js +0 -204
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("@chakra-ui/react");
5
+ const useCustomTheme_1 = require("../../Theme/useCustomTheme");
6
+ const accentText_1 = require("../../Theme/tokens/builders/accentText");
7
+ const filledSurface_1 = require("../../Theme/tokens/builders/filledSurface");
8
+ const scrim_1 = require("../../Theme/tokens/builders/scrim");
9
+ const statusTone_1 = require("../../Theme/tokens/builders/statusTone");
10
+ const scaleFor = (colors, tone) => {
11
+ switch (tone) {
12
+ case "accent":
13
+ return colors.primary;
14
+ case "neutral":
15
+ return colors.gray;
16
+ case "success":
17
+ return colors.semantic.success;
18
+ case "warning":
19
+ return colors.semantic.warning;
20
+ case "danger":
21
+ return colors.semantic.error;
22
+ case "info":
23
+ return colors.semantic.info;
24
+ }
25
+ };
26
+ const SIZE = {
27
+ sm: { h: "1.25rem", font: "0.6875rem", px: 1.5 },
28
+ md: { h: "1.5rem", font: "0.75rem", px: 2 },
29
+ };
30
+ const lookFor = (colors, tone, variant) => {
31
+ if (variant === "glass") {
32
+ const dot = tone === "inverse" || tone === "neutral" ? undefined : (0, filledSurface_1.resolveFilledSurface)(scaleFor(colors, tone), colors).fill;
33
+ return { bg: (0, scrim_1.overlayScrim)(colors), color: colors.white, dot };
34
+ }
35
+ if (tone === "inverse") {
36
+ return variant === "soft"
37
+ ? { bg: colors.background[100], color: colors.header[900] }
38
+ : { bg: colors.header[900], color: colors.background[50] };
39
+ }
40
+ const scale = scaleFor(colors, tone);
41
+ if (variant === "soft") {
42
+ const soft = (0, statusTone_1.resolveStatusTone)(scale, (0, accentText_1.isDarkCanvas)(colors.backgroundColor.main) ? "dark" : "light");
43
+ return { bg: soft.bg, color: soft.fg };
44
+ }
45
+ const filled = (0, filledSurface_1.resolveFilledSurface)(scale, colors);
46
+ return { bg: filled.fill, color: filled.color };
47
+ };
48
+ /** Stack of corner badges (sale, new, low stock…) built from `ProductBadge[]`; filled chips resolve ink per brand and mode. */
49
+ const ProductBadges = ({ badges, max = 2, size = "sm", variant = "solid", orientation = "vertical", "data-testid": testId, }) => {
50
+ const { colors } = (0, useCustomTheme_1.useCustomTheme)();
51
+ const shown = badges.slice(0, Math.max(0, max));
52
+ if (shown.length === 0)
53
+ return null;
54
+ const s = SIZE[size];
55
+ return ((0, jsx_runtime_1.jsx)(react_1.Flex, { as: "ul", role: "list", listStyleType: "none", m: 0, p: 0, direction: orientation === "vertical" ? "column" : "row", align: "flex-start", wrap: orientation === "vertical" ? "nowrap" : "wrap", gap: 1.5, maxW: "100%", "data-testid": testId, children: shown.map((badge, i) => {
56
+ var _a, _b;
57
+ const look = lookFor(colors, (_a = badge.tone) !== null && _a !== void 0 ? _a : "neutral", variant);
58
+ return ((0, jsx_runtime_1.jsxs)(react_1.Flex, { as: "li", "data-tone": (_b = badge.tone) !== null && _b !== void 0 ? _b : "neutral", "data-variant": variant, align: "center", gap: 1, h: s.h, px: s.px, maxW: "100%", borderRadius: "md", bg: look.bg, color: look.color, sx: variant === "glass" ? { backdropFilter: "blur(8px)", WebkitBackdropFilter: "blur(8px)" } : undefined, children: [look.dot && (0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", "aria-hidden": true, boxSize: "6px", flexShrink: 0, borderRadius: "full", bg: look.dot }), (0, jsx_runtime_1.jsx)(react_1.Text, { as: "span", fontSize: s.font, fontWeight: 600, lineHeight: 1, letterSpacing: "0.01em", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", sx: { fontVariantNumeric: "tabular-nums" }, children: badge.label })] }, `${badge.label}-${i}`));
59
+ }) }));
60
+ };
61
+ exports.default = ProductBadges;
@@ -0,0 +1,18 @@
1
+ import type { ProductBadge } from "../Commerce/commerceTypes";
2
+ /** Chip height: sm 20 px for compact cards, md 24 px for roomier cards and the product page. */
3
+ export type ProductBadgeSize = "sm" | "md";
4
+ /** solid: filled; soft: tinted; glass: translucent dark chip that stays legible over any photo. */
5
+ export type ProductBadgeVariant = "solid" | "soft" | "glass";
6
+ /** Stacking direction of the chips. */
7
+ export type ProductBadgesOrientation = "vertical" | "horizontal";
8
+ /** Corner badges for a product card or gallery; renders nothing for an empty list. */
9
+ export interface ProductBadgesProps {
10
+ /** Badges in priority order; the first `max` are shown, the rest are dropped. */
11
+ badges: ProductBadge[];
12
+ /** How many badges to show; a card carries at most two. */
13
+ max?: number;
14
+ size?: ProductBadgeSize;
15
+ variant?: ProductBadgeVariant;
16
+ orientation?: ProductBadgesOrientation;
17
+ "data-testid"?: string;
18
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,3 +1,4 @@
1
- import { ProductCardProps } from "./ProductCardProps";
2
- declare const ProductCard: ({ id, label, productImage, rating, reviews, tags, options, button, batch, onAddToCart, onNotifyMe, onClick, onOptionChange, addToCart, goToCart, OnGoToCart, size, notifyMe, isQtyEditable, displayRating, }: ProductCardProps) => import("react/jsx-runtime").JSX.Element;
1
+ import type { ProductCardProps } from "./ProductCardProps";
2
+ /** Chromeless product card: tonal media well, brand, title, rating, price and one action; the whole card is one link target. */
3
+ declare const ProductCard: (props: ProductCardProps) => import("react/jsx-runtime").JSX.Element;
3
4
  export default ProductCard;
@@ -6,62 +6,113 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const jsx_runtime_1 = require("react/jsx-runtime");
7
7
  const react_1 = require("react");
8
8
  const react_2 = require("@chakra-ui/react");
9
- const ProductTags_1 = __importDefault(require("./ProductTags"));
10
- const ProductPrice_1 = __importDefault(require("./ProductPrice"));
11
- const Button_1 = __importDefault(require("../Button/Button"));
12
- const ProductLabel_1 = __importDefault(require("./ProductLabel"));
13
- const useCustomTheme_1 = require("../../Theme/useCustomTheme");
14
9
  const lucide_react_1 = require("lucide-react");
15
- const ProductReview_1 = __importDefault(require("./ProductReview"));
16
- const ProductCard = ({ id, label, productImage, rating, reviews, tags, options, button, batch, onAddToCart, onNotifyMe, onClick, onOptionChange, addToCart, goToCart, OnGoToCart, size = "sm", notifyMe, isQtyEditable = false, displayRating = true, }) => {
17
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
18
- const [hover, setHover] = (0, react_1.useState)(false);
19
- const theme = (0, useCustomTheme_1.useCustomTheme)();
20
- const [selectedOption, setSelectedOption] = (0, react_1.useState)(options === null || options === void 0 ? void 0 : options[0]);
21
- const [qty, setQty] = (0, react_1.useState)(1);
22
- const handleOptionSelect = (option) => {
23
- setSelectedOption(option);
24
- onOptionChange === null || onOptionChange === void 0 ? void 0 : onOptionChange(option);
10
+ const useCustomTheme_1 = require("../../Theme/useCustomTheme");
11
+ const motion_1 = require("../../Theme/tokens/primitives/motion");
12
+ const motion_2 = require("../../Theme/chakra/motion");
13
+ const focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
14
+ const PriceBlock_1 = __importDefault(require("../PriceBlock/PriceBlock"));
15
+ const ProductBadges_1 = __importDefault(require("../ProductBadges/ProductBadges"));
16
+ const Rating_1 = __importDefault(require("../Rating/Rating"));
17
+ const StockStatus_1 = __importDefault(require("../StockStatus/StockStatus"));
18
+ const WishlistToggle_1 = __importDefault(require("../WishlistToggle/WishlistToggle"));
19
+ const optionInk_1 = require("../OptionChip/optionInk");
20
+ const cardLabels_1 = require("./cardLabels");
21
+ const cardMetrics_1 = require("./cardMetrics");
22
+ const productCardModel_1 = require("./productCardModel");
23
+ const ProductCardAction_1 = __importDefault(require("./ProductCardAction"));
24
+ const ProductCardMedia_1 = __importDefault(require("./ProductCardMedia"));
25
+ const ProductCardSkeleton_1 = __importDefault(require("./ProductCardSkeleton"));
26
+ const ProductCardSwatches_1 = __importDefault(require("./ProductCardSwatches"));
27
+ const QuickAddSheet_1 = __importDefault(require("./QuickAddSheet"));
28
+ const NO_AXES = [];
29
+ const NO_VARIANTS = [];
30
+ /** Chromeless product card: tonal media well, brand, title, rating, price and one action; the whole card is one link target. */
31
+ const ProductCard = (props) => {
32
+ var _a, _b;
33
+ const { title, brand, media, alt, price, mrp, unitPrice, rating, ratingCount, badges, axes = NO_AXES, variants = NO_VARIANTS, mediaIdsByOption, swatchLimit = productCardModel_1.DEFAULT_SWATCH_LIMIT, stock, outOfStock, href, linkAs, linkProps, onPress, layout = "grid", density = "comfortable", aspectRatio = "4/5", action: actionOverride, quantity, onQuantityChange, onAdd, quickAddPresentation, quickAddDrawerProps, onRemove, onNotify, wishlisted, onWishlistChange, selected = false, isLoading = false, mediaOverlay, meta, actions, labels, currency, locale, "data-testid": testId, } = props;
34
+ const { colors } = (0, useCustomTheme_1.useCustomTheme)();
35
+ const reduced = (0, motion_2.usePrefersReducedMotion)();
36
+ const titleId = (0, react_1.useId)();
37
+ const [sheetOpen, setSheetOpen] = (0, react_1.useState)(false);
38
+ const [picked, setPicked] = (0, react_1.useState)(null);
39
+ const [previewed, setPreviewed] = (0, react_1.useState)(null);
40
+ const [innerQuantity, setInnerQuantity] = (0, react_1.useState)(0);
41
+ const [pressed, setPressed] = (0, react_1.useState)(false);
42
+ if (isLoading)
43
+ return (0, jsx_runtime_1.jsx)(ProductCardSkeleton_1.default, { layout: layout, density: density, aspectRatio: aspectRatio, "data-testid": testId });
44
+ const copy = { ...cardLabels_1.DEFAULT_LABELS, ...labels };
45
+ const m = cardMetrics_1.DENSITY[density];
46
+ const horizontal = layout === "list";
47
+ const rail = layout === "rail";
48
+ const soldOut = (0, productCardModel_1.isSoldOut)(outOfStock, stock, variants);
49
+ const sole = (0, productCardModel_1.soleVariantOf)(axes, variants);
50
+ const action = (0, productCardModel_1.deriveAction)(actionOverride, soldOut, axes);
51
+ const left = soldOut ? undefined : (0, productCardModel_1.lowStockCount)(stock, sole);
52
+ const bagged = quantity !== null && quantity !== void 0 ? quantity : innerQuantity;
53
+ const maxQuantity = (() => {
54
+ const count = stock !== null && stock !== void 0 ? stock : sole === null || sole === void 0 ? void 0 : sole.stock;
55
+ return count !== undefined && count > 0 ? count : undefined;
56
+ })();
57
+ const swatchAxis = (0, productCardModel_1.swatchAxisOf)(axes);
58
+ const activeId = (_a = previewed !== null && previewed !== void 0 ? previewed : picked) !== null && _a !== void 0 ? _a : (_b = swatchAxis === null || swatchAxis === void 0 ? void 0 : swatchAxis.values[0]) === null || _b === void 0 ? void 0 : _b.id;
59
+ const frames = (0, productCardModel_1.framesFor)(media, mediaIdsByOption, swatchAxis === null || swatchAxis === void 0 ? void 0 : swatchAxis.id, activeId);
60
+ const priced = (0, productCardModel_1.variantsFor)(variants, swatchAxis === null || swatchAxis === void 0 ? void 0 : swatchAxis.id, picked !== null && picked !== void 0 ? picked : undefined);
61
+ const range = sole ? undefined : (0, productCardModel_1.rangeOf)(priced);
62
+ const soldOutValues = new Set(swatchAxis ? swatchAxis.values.filter((value) => (0, productCardModel_1.valueSoldOut)(variants, swatchAxis.id, value.id)).map((value) => value.id) : []);
63
+ const interactive = !!href || !!linkAs || !!onPress;
64
+ const LinkTag = href || linkAs ? (linkAs !== null && linkAs !== void 0 ? linkAs : "a") : "button";
65
+ const linkExtras = href || linkAs ? { href, ...linkProps } : { type: "button" };
66
+ const add = () => {
67
+ if (quantity === undefined)
68
+ setInnerQuantity(1);
69
+ onAdd === null || onAdd === void 0 ? void 0 : onAdd(sole === null || sole === void 0 ? void 0 : sole.id, 1);
25
70
  };
26
- const handleIncrement = (e) => {
27
- e.stopPropagation();
28
- if ((selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) && qty < selectedOption.stocks) {
29
- setQty((prev) => prev + 1);
30
- }
71
+ const press = () => {
72
+ if (action === "notify")
73
+ onNotify === null || onNotify === void 0 ? void 0 : onNotify();
74
+ else if (action === "options")
75
+ setSheetOpen(true);
76
+ else
77
+ add();
31
78
  };
32
- const handleDecrement = (e) => {
33
- e.stopPropagation();
34
- if (qty > 1) {
35
- setQty((prev) => prev - 1);
36
- }
79
+ const changeQuantity = (next) => {
80
+ if (quantity === undefined)
81
+ setInnerQuantity(next);
82
+ onQuantityChange === null || onQuantityChange === void 0 ? void 0 : onQuantityChange(next);
37
83
  };
38
- const sizeStyles = {
39
- xs: { cardWidth: "16.25rem", imgHeight: "11.25rem", padding: 3 },
40
- sm: { cardWidth: "18rem", imgHeight: "13rem", padding: 4 },
41
- md: { cardWidth: "20rem", imgHeight: "15rem", padding: 5 },
42
- lg: { cardWidth: "22rem", imgHeight: "17rem", padding: 6 },
84
+ const remove = () => {
85
+ changeQuantity(0);
86
+ onRemove === null || onRemove === void 0 ? void 0 : onRemove();
43
87
  };
44
- const { cardWidth, imgHeight, padding } = sizeStyles[size];
45
- const imageList = (_a = productImage === null || productImage === void 0 ? void 0 : productImage.filter((img) => img.isImage !== false)) !== null && _a !== void 0 ? _a : [];
46
- const isSizeType = (s) => s === "xs" || s === "sm" || s === "md" || s === "lg";
47
- const safeSize = isSizeType(size) ? size : "md";
48
- return ((0, jsx_runtime_1.jsxs)(react_2.Box, { borderWidth: "0.063rem", borderRadius: "lg", overflow: "hidden", w: "full", maxW: cardWidth, h: "full", display: "flex", flexDirection: "column", position: "relative", bg: theme.colors.background[50], boxShadow: "lg", children: [imageList.length > 0 && ((0, jsx_runtime_1.jsxs)(react_2.Box, { onMouseEnter: () => setHover(true), onMouseLeave: () => setHover(false), h: imgHeight, w: "full", overflow: "hidden", onClick: onClick, cursor: "pointer", children: [(0, jsx_runtime_1.jsx)(react_2.Image, { src: hover && ((_b = imageList === null || imageList === void 0 ? void 0 : imageList[1]) === null || _b === void 0 ? void 0 : _b.imageUrl) ? imageList[1].imageUrl : (_c = imageList === null || imageList === void 0 ? void 0 : imageList[0]) === null || _c === void 0 ? void 0 : _c.imageUrl, alt: label, w: "full", h: "full", transform: hover ? "scale(1.06)" : "scale(1)", transition: "transform 0.7s cubic-bezier(0.16, 1, 0.3, 1)" }), batch && ((0, jsx_runtime_1.jsx)(react_2.Badge, { colorScheme: batch.color || "green", position: "absolute", top: 2, right: 2, fontSize: {
49
- xs: "xs",
50
- sm: "sm",
51
- md: "md",
52
- lg: "lg",
53
- }[size], px: {
54
- xs: 1,
55
- sm: 2,
56
- md: 3,
57
- lg: 4,
58
- }[size], py: {
59
- xs: 0.5,
60
- sm: 1,
61
- md: 1.5,
62
- lg: 2,
63
- }[size], children: batch.label }))] })), (0, jsx_runtime_1.jsxs)(react_2.VStack, { spacing: 2, align: "start", p: padding, flex: "1", w: "full", children: [(0, jsx_runtime_1.jsx)(react_2.Box, { onClick: onClick, cursor: "pointer", children: (0, jsx_runtime_1.jsx)(ProductLabel_1.default, { label: label, size: size }) }), tags && (0, jsx_runtime_1.jsx)(ProductTags_1.default, { tags: tags, size: size }), options && ((0, jsx_runtime_1.jsx)(ProductPrice_1.default, { options: options, size: size, onSelect: handleOptionSelect, rightSlot: (displayRating && ((rating !== undefined && rating !== null) || (reviews !== undefined && reviews !== null)))
64
- ? (0, jsx_runtime_1.jsx)(ProductReview_1.default, { rating: rating, reviewCount: reviews })
65
- : undefined })), (0, jsx_runtime_1.jsxs)(react_2.VStack, { w: "full", align: "stretch", spacing: 2, mt: "auto", children: [typeof (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) === "number" && ((_d = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) !== null && _d !== void 0 ? _d : 0) <= 0 && ((0, jsx_runtime_1.jsx)(Button_1.default, { colorScheme: "gray", size: safeSize, width: "100%", isDisabled: true, children: "Out of Stock" })), addToCart && (((_e = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) !== null && _e !== void 0 ? _e : 1) > 0) && isQtyEditable && ((0, jsx_runtime_1.jsx)(react_2.HStack, { w: "full", justify: "space-between", children: (0, jsx_runtime_1.jsxs)(react_2.HStack, { children: [(0, jsx_runtime_1.jsx)(react_2.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Minus, { size: 16 }), "aria-label": "Decrease quantity", size: "xs", onClick: handleDecrement, isDisabled: qty <= 1, isRound: true, variant: "outline", colorScheme: "red" }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontWeight: "bold", w: 8, textAlign: "center", children: qty }), (0, jsx_runtime_1.jsx)(react_2.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 16 }), "aria-label": "Increase quantity", size: "xs", onClick: handleIncrement, isDisabled: qty >= ((_f = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) !== null && _f !== void 0 ? _f : 1), isRound: true, variant: "outline", colorScheme: "red" })] }) })), (button === null || button === void 0 ? void 0 : button.onClick) && ((0, jsx_runtime_1.jsx)(Button_1.default, { colorScheme: "red", size: safeSize, width: "100%", onClick: button === null || button === void 0 ? void 0 : button.onClick, children: (_g = button.label) !== null && _g !== void 0 ? _g : "Add to Cart" })), addToCart && (((_h = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) !== null && _h !== void 0 ? _h : 1) > 0) && ((0, jsx_runtime_1.jsx)(Button_1.default, { width: "100%", size: safeSize, onClick: () => (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.var_id) !== undefined && (onAddToCart === null || onAddToCart === void 0 ? void 0 : onAddToCart(id, selectedOption.var_id, qty)), colorScheme: "red", children: "Add to Cart" })), addToCart && (((_j = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) !== null && _j !== void 0 ? _j : 1) <= 0) && notifyMe && ((0, jsx_runtime_1.jsx)(Button_1.default, { width: "100%", size: safeSize, onClick: () => (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.var_id) !== undefined && (onNotifyMe === null || onNotifyMe === void 0 ? void 0 : onNotifyMe(id, selectedOption.var_id)), colorScheme: "red", variant: "outline", children: "Notify Me" })), goToCart && ((0, jsx_runtime_1.jsx)(Button_1.default, { width: "100%", size: safeSize, onClick: OnGoToCart, colorScheme: "red", children: "Go to Cart" }))] })] })] }));
88
+ const defaultControl = ((0, jsx_runtime_1.jsx)(ProductCardAction_1.default, { kind: action, title: title, labels: copy, placement: horizontal ? "inline" : "media", inset: m.actionInset, hoverBar: density === "spacious" && !horizontal, quantity: action === "notify" ? 0 : bagged, maxQuantity: maxQuantity, onPress: press, onQuantityChange: changeQuantity, onRemove: remove }));
89
+ const slotted = horizontal ? ((0, jsx_runtime_1.jsx)(react_2.Box, { "data-control": true, position: "relative", zIndex: 2, children: actions })) : ((0, jsx_runtime_1.jsx)(react_2.Box, { "data-control": true, position: "absolute", right: m.actionInset, bottom: m.actionInset, zIndex: 2, children: actions }));
90
+ const control = actions ? slotted : defaultControl;
91
+ const wishlist = ((0, jsx_runtime_1.jsx)(WishlistToggle_1.default, { variant: horizontal ? "soft" : "glass", size: "md", label: copy.save(title), selected: wishlisted, onSelectedChange: onWishlistChange }));
92
+ const hoverFrame = previewed === null ? frames[1] : undefined;
93
+ const pressable = interactive && !reduced;
94
+ const ink = (0, optionInk_1.optionInk)(colors).selected;
95
+ const metaLine = meta !== null && meta !== void 0 ? meta : (left !== undefined ? (0, jsx_runtime_1.jsx)(StockStatus_1.default, { status: "low-stock", count: left, size: "sm" }) : null);
96
+ return ((0, jsx_runtime_1.jsxs)(react_2.Box, { as: "article", "aria-labelledby": titleId, "data-testid": testId, "data-layout": layout, "data-density": density, "data-soldout": soldOut || undefined, "data-selected": selected || undefined, "data-pressed": pressed || undefined, onPointerDown: (event) => setPressed(!event.target.closest("[data-control]")), onPointerUp: () => setPressed(false), onPointerLeave: () => setPressed(false), onPointerCancel: () => setPressed(false), position: "relative", display: "flex", flexDirection: horizontal ? "row" : "column", gap: horizontal ? 3 : 0, flexGrow: rail ? 0 : 1, flexShrink: rail ? 0 : 1, w: rail ? m.railWidth : "100%", minW: 0, cursor: interactive ? "pointer" : "default", transition: (0, motion_1.transitionFor)(["transform"]), sx: {
97
+ ...(rail ? { scrollSnapAlign: "start" } : {}),
98
+ ...(0, motion_2.reducedMotionSx)(),
99
+ ...(pressable ? { "&[data-pressed]": { transform: "scale(0.98)" } } : {}),
100
+ [cardMetrics_1.FINE_POINTER]: {
101
+ "&:hover [data-hover-frame], &:focus-within [data-hover-frame]": { opacity: 1 },
102
+ "&:hover [data-bar], &:focus-within [data-bar]": { opacity: 1, transform: "none" },
103
+ ...(reduced ? {} : { "&:hover [data-primary]": { transform: "scale(1.03)" } }),
104
+ },
105
+ }, children: [(0, jsx_runtime_1.jsxs)(ProductCardMedia_1.default, { primary: frames[0], hover: hoverFrame, title: title, alt: alt, aspectRatio: aspectRatio, dimmed: soldOut, selected: selected, fallbackText: copy.imageUnavailable, width: horizontal ? m.listMedia : undefined, children: [!soldOut && badges && badges.length > 0 ? ((0, jsx_runtime_1.jsx)(react_2.Box, { position: "absolute", top: m.badgeInset, insetStart: m.badgeInset, zIndex: 2, maxW: "calc(100% - 3.5rem)", pointerEvents: "none", children: (0, jsx_runtime_1.jsx)(ProductBadges_1.default, { badges: badges, max: 2, size: "sm", variant: "solid" }) })) : null, !horizontal ? ((0, jsx_runtime_1.jsx)(react_2.Box, { "data-control": true, position: "absolute", top: m.wishlistInset, insetEnd: m.wishlistInset, zIndex: 2, children: wishlist })) : null, selected ? ((0, jsx_runtime_1.jsx)(react_2.Box, { "aria-hidden": true, position: "absolute", bottom: m.actionInset, insetStart: m.actionInset, zIndex: 2, display: "inline-flex", alignItems: "center", justifyContent: "center", boxSize: "1.5rem", borderRadius: "full", bg: ink.fill, color: ink.ink, children: (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 14, strokeWidth: 3 }) })) : null, mediaOverlay ? ((0, jsx_runtime_1.jsx)(react_2.Box, { position: "absolute", inset: 0, zIndex: 2, pointerEvents: "none", sx: { "& > *": { pointerEvents: "auto" } }, children: mediaOverlay })) : null, !horizontal ? control : null] }), (0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", flex: 1, minW: 0, gap: m.bodyGap, pt: horizontal ? 0 : m.bodyTop, children: [brand ? ((0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", fontSize: m.brand.size, lineHeight: `${m.brand.line}px`, fontWeight: 500, color: colors.textMuted, noOfLines: 1, children: brand })) : null, (0, jsx_runtime_1.jsx)(react_2.Text, { as: "h3", id: titleId, m: 0, fontSize: m.title.size, lineHeight: `${m.title.line}px`, fontWeight: 500, color: colors.header[900], noOfLines: cardMetrics_1.TITLE_LINES, minH: horizontal ? undefined : `${m.title.line * cardMetrics_1.TITLE_LINES}px`, children: interactive ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: LinkTag, ...linkExtras, "data-card-link": true, onClick: onPress, color: "inherit", textAlign: "start", textDecoration: "none", cursor: "pointer", sx: {
106
+ font: "inherit",
107
+ background: "none",
108
+ border: 0,
109
+ p: 0,
110
+ outline: "none",
111
+ "&::after": { content: '""', position: "absolute", inset: 0, zIndex: 1, borderRadius: cardMetrics_1.MEDIA_RADIUS },
112
+ "&:focus-visible::after": (0, focusRing_styles_1.focusVisibleRing)(colors),
113
+ }, children: title })) : (title) }), selected ? (0, jsx_runtime_1.jsx)(react_2.VisuallyHidden, { children: copy.selected }) : null, rating !== undefined && rating > 0 ? ((0, jsx_runtime_1.jsx)(Rating_1.default, { value: rating, count: ratingCount, size: "xs", compactCount: true })) : horizontal ? null : ((0, jsx_runtime_1.jsx)(react_2.Box, { minH: "1rem", "aria-hidden": true })), (0, jsx_runtime_1.jsx)(PriceBlock_1.default, { size: m.price, price: price, mrp: soldOut ? undefined : mrp, priceRange: range, unitPrice: unitPrice, currency: currency, locale: locale }), soldOut ? (0, jsx_runtime_1.jsx)(StockStatus_1.default, { status: "out-of-stock", message: copy.soldOut, size: "sm" }) : null, metaLine, swatchAxis && activeId ? ((0, jsx_runtime_1.jsx)(ProductCardSwatches_1.default, { axis: swatchAxis, limit: swatchLimit, dot: m.dot, activeId: activeId, soldOutIds: soldOutValues, labels: copy, onPreview: setPreviewed, onPick: setPicked })) : null, horizontal ? ((0, jsx_runtime_1.jsxs)(react_2.Flex, { "data-control": true, position: "relative", zIndex: 2, mt: "auto", pt: 2, align: "center", justify: "space-between", gap: 1, children: [wishlist, control] })) : null] }), action === "options" ? ((0, jsx_runtime_1.jsx)(QuickAddSheet_1.default, { isOpen: sheetOpen, onClose: () => setSheetOpen(false), title: title, brand: brand, media: frames[0], axes: axes, variants: variants, defaultSelection: swatchAxis && picked ? { [swatchAxis.id]: picked } : undefined, currency: currency, locale: locale, presentation: quickAddPresentation, drawerContentProps: quickAddDrawerProps, onConfirm: (variant, count) => {
114
+ onAdd === null || onAdd === void 0 ? void 0 : onAdd(variant.id, count);
115
+ setSheetOpen(false);
116
+ } })) : null] }));
66
117
  };
67
118
  exports.default = ProductCard;
@@ -0,0 +1,17 @@
1
+ import type { ProductCardAction as ActionKind, ProductCardLabels } from "./ProductCardProps";
2
+ type ProductCardActionProps = {
3
+ kind: ActionKind;
4
+ title: string;
5
+ labels: ProductCardLabels;
6
+ placement: "media" | "inline";
7
+ inset: string;
8
+ hoverBar: boolean;
9
+ quantity: number;
10
+ maxQuantity?: number;
11
+ onPress: () => void;
12
+ onQuantityChange: (quantity: number) => void;
13
+ onRemove: () => void;
14
+ };
15
+ /** The card's one control: glass circle (or hover bar), notify pill, or the stepper it morphs into. */
16
+ declare const ProductCardAction: ({ kind, title, labels, placement, inset, hoverBar, quantity, maxQuantity, onPress, onQuantityChange, onRemove, }: ProductCardActionProps) => import("react/jsx-runtime").JSX.Element;
17
+ export default ProductCardAction;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("@chakra-ui/react");
8
+ const react_2 = require("@emotion/react");
9
+ const lucide_react_1 = require("lucide-react");
10
+ const useCustomTheme_1 = require("../../Theme/useCustomTheme");
11
+ const motion_1 = require("../../Theme/tokens/primitives/motion");
12
+ const scrim_1 = require("../../Theme/tokens/builders/scrim");
13
+ const motion_2 = require("../../Theme/chakra/motion");
14
+ const focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
15
+ const QuantityStepper_1 = __importDefault(require("../QuantityStepper/QuantityStepper"));
16
+ const cardMetrics_1 = require("./cardMetrics");
17
+ const morphIn = (0, react_2.keyframes) `
18
+ 0% { opacity: 0; transform: scale(0.85); }
19
+ 100% { opacity: 1; transform: scale(1); }
20
+ `;
21
+ const DISC = "2.25rem";
22
+ const BAR_HEIGHT = "2.5rem";
23
+ /** The card's one control: glass circle (or hover bar), notify pill, or the stepper it morphs into. */
24
+ const ProductCardAction = ({ kind, title, labels, placement, inset, hoverBar, quantity, maxQuantity, onPress, onQuantityChange, onRemove, }) => {
25
+ const { colors } = (0, useCustomTheme_1.useCustomTheme)();
26
+ const reduced = (0, motion_2.usePrefersReducedMotion)();
27
+ const onMedia = placement === "media";
28
+ const place = onMedia
29
+ ? { position: "absolute", right: inset, bottom: inset, zIndex: 2 }
30
+ : { position: "relative", zIndex: 2 };
31
+ if (quantity > 0) {
32
+ return ((0, jsx_runtime_1.jsx)(react_1.Box, { "data-control": true, "data-stepper": true, ...place, display: "inline-flex", borderRadius: "full", bg: onMedia ? colors.surfaceRaised : colors.transparent, boxShadow: onMedia ? "sm" : "none", animation: reduced ? undefined : `${morphIn} 200ms ${motion_1.MOTION_EASE}`, children: (0, jsx_runtime_1.jsx)(QuantityStepper_1.default, { size: "sm", value: quantity, min: 1, max: maxQuantity, removable: true, itemLabel: title, onValueChange: onQuantityChange, onRemove: onRemove }) }));
33
+ }
34
+ const isNotify = kind === "notify";
35
+ const name = isNotify ? labels.notifyMeFor(title) : kind === "options" ? labels.chooseOptions(title) : labels.addToBag(title);
36
+ const barText = kind === "options" ? labels.chooseOptionsText : labels.addToBagText;
37
+ const bar = onMedia && hoverBar && !isNotify;
38
+ const look = onMedia
39
+ ? { bg: (0, scrim_1.overlayScrim)(colors), hoverBg: (0, scrim_1.overlayScrim)(colors), color: colors.white }
40
+ : { bg: colors.background[100], hoverBg: colors.background[200], color: colors.header[900] };
41
+ return ((0, jsx_runtime_1.jsxs)(react_1.Box, { as: "button", type: "button", "data-control": true, "data-bar": bar || undefined, "data-action": kind, "aria-label": name, onClick: onPress, ...place, display: "inline-flex", alignItems: "center", justifyContent: "center", gap: 1.5, h: DISC, minW: DISC, px: isNotify ? 3 : 0, borderRadius: "full", bg: look.bg, color: look.color, cursor: "pointer", transition: (0, motion_1.transitionFor)(["background-color", "opacity", "transform"], "base"), _hover: { bg: look.hoverBg }, _active: reduced ? undefined : { transform: "scale(0.9)" }, sx: {
42
+ outline: "none",
43
+ ...(onMedia ? { backdropFilter: "blur(8px)", WebkitBackdropFilter: "blur(8px)" } : {}),
44
+ ...(0, focusRing_styles_1.focusVisibleStyles)(colors),
45
+ ...(0, motion_2.reducedMotionSx)({ "&:active": { transform: "none" } }),
46
+ "&::before": { content: '""', position: "absolute", inset: "-0.25rem" },
47
+ "& [data-label]": { display: isNotify ? "inline" : "none" },
48
+ ...(bar
49
+ ? {
50
+ [cardMetrics_1.FINE_POINTER]: {
51
+ left: inset,
52
+ right: "auto",
53
+ width: `calc(100% - 2 * ${inset})`,
54
+ height: BAR_HEIGHT,
55
+ borderRadius: "lg",
56
+ opacity: 0,
57
+ transform: reduced ? "none" : "translateY(0.5rem)",
58
+ "& [data-label]": { display: "inline" },
59
+ "&:focus-visible": { opacity: 1, transform: "none" },
60
+ },
61
+ }
62
+ : {}),
63
+ }, children: [isNotify ? (0, jsx_runtime_1.jsx)(lucide_react_1.Bell, { size: 16, "aria-hidden": true }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 18, strokeWidth: 2.25, "aria-hidden": true }), (0, jsx_runtime_1.jsx)(react_1.Text, { as: "span", "data-label": true, fontSize: "0.8125rem", fontWeight: 600, lineHeight: 1, whiteSpace: "nowrap", children: isNotify ? labels.notifyMe : barText })] }));
64
+ };
65
+ exports.default = ProductCardAction;
@@ -0,0 +1,4 @@
1
+ import type { ProductCardGridProps } from "./ProductCardProps";
2
+ /** List of cards on one grid: 12 px columns and 24 px rows on a phone, 24 and 32 from lg (override with `gap`), rows level in height. */
3
+ declare const ProductCardGrid: ({ children, columns, gap, columnGap, rowGap, "aria-label": ariaLabel, "data-testid": testId }: ProductCardGridProps) => import("react/jsx-runtime").JSX.Element;
4
+ export default ProductCardGrid;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("react");
5
+ const react_2 = require("@chakra-ui/react");
6
+ const DEFAULT_COLUMNS = { base: 2, sm: 2, md: 3, lg: 4, xl: 5 };
7
+ const template = (columns) => `repeat(${columns}, minmax(0, 1fr))`;
8
+ /** List of cards on one grid: 12 px columns and 24 px rows on a phone, 24 and 32 from lg (override with `gap`), rows level in height. */
9
+ const ProductCardGrid = ({ children, columns, gap, columnGap, rowGap, "aria-label": ariaLabel, "data-testid": testId }) => {
10
+ var _a, _b;
11
+ const cols = { ...DEFAULT_COLUMNS, ...columns };
12
+ return ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "ul", role: "list", "aria-label": ariaLabel, "data-testid": testId, listStyleType: "none", m: 0, p: 0, display: "grid", alignItems: "stretch", columnGap: (_a = columnGap !== null && columnGap !== void 0 ? columnGap : gap) !== null && _a !== void 0 ? _a : { base: "0.75rem", lg: "1.5rem" }, rowGap: (_b = rowGap !== null && rowGap !== void 0 ? rowGap : gap) !== null && _b !== void 0 ? _b : { base: "1.5rem", lg: "2rem" }, gridTemplateColumns: {
13
+ base: template(cols.base),
14
+ sm: template(cols.sm),
15
+ md: template(cols.md),
16
+ lg: template(cols.lg),
17
+ xl: template(cols.xl),
18
+ }, children: react_1.Children.toArray(children).map((child, index) => ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "li", display: "flex", minW: 0, children: (0, jsx_runtime_1.jsx)(react_2.Box, { display: "flex", flexDirection: "column", flex: 1, minW: 0, children: child }) }, index))) }));
19
+ };
20
+ exports.default = ProductCardGrid;
@@ -0,0 +1,18 @@
1
+ import { type ReactNode } from "react";
2
+ import type { ProductMedia } from "../Commerce/commerceTypes";
3
+ import type { ProductCardAspectRatio } from "./ProductCardProps";
4
+ type ProductCardMediaProps = {
5
+ primary: ProductMedia | undefined;
6
+ hover: ProductMedia | undefined;
7
+ title: string;
8
+ alt?: string;
9
+ aspectRatio: ProductCardAspectRatio;
10
+ dimmed: boolean;
11
+ selected: boolean;
12
+ fallbackText: string;
13
+ width?: string;
14
+ children?: ReactNode;
15
+ };
16
+ /** Tonal media well: cover-fitted primary frame, optional hover frame, broken-image tile; overlays are children. */
17
+ declare const ProductCardMedia: ({ primary, hover, title, alt, aspectRatio, dimmed, selected, fallbackText, width, children, }: ProductCardMediaProps) => import("react/jsx-runtime").JSX.Element;
18
+ export default ProductCardMedia;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("react");
5
+ const react_2 = require("@chakra-ui/react");
6
+ const lucide_react_1 = require("lucide-react");
7
+ const useCustomTheme_1 = require("../../Theme/useCustomTheme");
8
+ const motion_1 = require("../../Theme/tokens/primitives/motion");
9
+ const motion_2 = require("../../Theme/chakra/motion");
10
+ const cardMetrics_1 = require("./cardMetrics");
11
+ const DIMMED_OPACITY = 0.6;
12
+ const Frame = ({ src, alt, fallbackText, quiet = false }) => {
13
+ const { colors } = (0, useCustomTheme_1.useCustomTheme)();
14
+ const ref = (0, react_1.useRef)(null);
15
+ const [loaded, setLoaded] = (0, react_1.useState)(false);
16
+ const [failed, setFailed] = (0, react_1.useState)(src === "");
17
+ (0, react_1.useEffect)(() => {
18
+ const el = ref.current;
19
+ if (el && el.complete && el.naturalWidth > 0)
20
+ setLoaded(true);
21
+ }, []);
22
+ if (failed) {
23
+ if (quiet)
24
+ return null;
25
+ return ((0, jsx_runtime_1.jsxs)(react_2.Box, { role: "img", "aria-label": alt, position: "absolute", inset: 0, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: 1.5, color: colors.textMuted, bg: colors.background[100], children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ImageOff, { size: 24, "aria-hidden": true }), fallbackText ? ((0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", fontSize: "xs", fontWeight: 500, children: fallbackText })) : null] }));
26
+ }
27
+ return ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "img", ref: ref, src: src, alt: alt, loading: "lazy", decoding: "async", draggable: false, onLoad: () => setLoaded(true), onError: () => setFailed(true), position: "absolute", inset: 0, w: "100%", h: "100%", objectFit: "cover", display: "block", opacity: loaded ? 1 : 0, transition: (0, motion_1.transitionFor)(["opacity"]), sx: (0, motion_2.reducedMotionSx)() }));
28
+ };
29
+ /** Tonal media well: cover-fitted primary frame, optional hover frame, broken-image tile; overlays are children. */
30
+ const ProductCardMedia = ({ primary, hover, title, alt, aspectRatio, dimmed, selected, fallbackText, width, children, }) => {
31
+ var _a, _b;
32
+ const { colors } = (0, useCustomTheme_1.useCustomTheme)();
33
+ return ((0, jsx_runtime_1.jsxs)(react_2.Box, { "data-media": true, "data-ratio": aspectRatio, position: "relative", flexShrink: 0, w: width !== null && width !== void 0 ? width : "100%", sx: { aspectRatio: cardMetrics_1.CSS_RATIO[aspectRatio] }, borderRadius: cardMetrics_1.MEDIA_RADIUS, overflow: "hidden", bg: colors.background[100], boxShadow: selected ? `0 0 0 2px ${colors.header[900]}` : "none", transition: (0, motion_1.transitionFor)(["box-shadow"]), children: [(0, jsx_runtime_1.jsx)(react_2.Box, { "data-primary": true, position: "absolute", inset: 0, opacity: dimmed ? DIMMED_OPACITY : 1, transition: (0, motion_1.transitionFor)(["transform", "opacity"], "base"), sx: (0, motion_2.reducedMotionSx)(), children: primary ? ((0, jsx_runtime_1.jsx)(Frame, { src: primary.src, alt: (_b = (_a = primary.alt) !== null && _a !== void 0 ? _a : alt) !== null && _b !== void 0 ? _b : title, fallbackText: fallbackText }, primary.src)) : ((0, jsx_runtime_1.jsx)(Frame, { src: "", alt: alt !== null && alt !== void 0 ? alt : title, fallbackText: fallbackText }, "none")) }), hover ? ((0, jsx_runtime_1.jsx)(react_2.Box, { "data-hover-frame": true, "aria-hidden": true, position: "absolute", inset: 0, opacity: 0, pointerEvents: "none", transition: (0, motion_1.transitionFor)(["opacity"], "base"), sx: (0, motion_2.reducedMotionSx)(), children: (0, jsx_runtime_1.jsx)(Frame, { src: hover.src, alt: "", quiet: true }, hover.src) })) : null, children] }));
34
+ };
35
+ exports.default = ProductCardMedia;