pixelize-design-library 2.4.2-beta.56 → 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 (354) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/COMPONENT-GOTCHAS.md +48 -20
  3. package/DESIGN-GUIDE.md +18 -1
  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/PickerPortal.d.ts +11 -0
  35. package/dist/Components/DatePicker/PickerPortal.js +26 -0
  36. package/dist/Components/DatePicker/RangeDatePicker.d.ts +1 -1
  37. package/dist/Components/DatePicker/RangeDatePicker.js +67 -32
  38. package/dist/Components/DatePicker/SingleDatePicker.js +49 -13
  39. package/dist/Components/DatePicker/TimeOnlyPicker.js +39 -4
  40. package/dist/Components/DetailSections/DetailSections.d.ts +4 -0
  41. package/dist/Components/DetailSections/DetailSections.js +112 -0
  42. package/dist/Components/DetailSections/DetailSectionsProps.d.ts +58 -0
  43. package/dist/Components/DetailSections/DetailSectionsProps.js +2 -0
  44. package/dist/Components/MediaGallery/MediaFrame.d.ts +31 -0
  45. package/dist/Components/MediaGallery/MediaFrame.js +55 -0
  46. package/dist/Components/MediaGallery/MediaGallery.d.ts +4 -0
  47. package/dist/Components/MediaGallery/MediaGallery.js +206 -0
  48. package/dist/Components/MediaGallery/MediaGalleryProps.d.ts +76 -0
  49. package/dist/Components/MediaGallery/MediaGalleryProps.js +20 -0
  50. package/dist/Components/MediaGallery/MediaLightbox.d.ts +4 -0
  51. package/dist/Components/MediaGallery/MediaLightbox.js +116 -0
  52. package/dist/Components/MediaGallery/MediaLightboxProps.d.ts +40 -0
  53. package/dist/Components/MediaGallery/MediaLightboxProps.js +15 -0
  54. package/dist/Components/MediaGallery/MediaThumb.d.ts +18 -0
  55. package/dist/Components/MediaGallery/MediaThumb.js +25 -0
  56. package/dist/Components/MediaGallery/glass.d.ts +31 -0
  57. package/dist/Components/MediaGallery/glass.js +47 -0
  58. package/dist/Components/MediaGallery/mediaGalleryModel.d.ts +22 -0
  59. package/dist/Components/MediaGallery/mediaGalleryModel.js +83 -0
  60. package/dist/Components/MediaGallery/motion.d.ts +5 -0
  61. package/dist/Components/MediaGallery/motion.js +12 -0
  62. package/dist/Components/MediaGallery/useMatchMedia.d.ts +2 -0
  63. package/dist/Components/MediaGallery/useMatchMedia.js +20 -0
  64. package/dist/Components/OffersList/OffersList.d.ts +4 -0
  65. package/dist/Components/OffersList/OffersList.js +83 -0
  66. package/dist/Components/OffersList/OffersListProps.d.ts +34 -0
  67. package/dist/Components/OffersList/OffersListProps.js +2 -0
  68. package/dist/Components/OptionChip/OptionChip.d.ts +4 -0
  69. package/dist/Components/OptionChip/OptionChip.js +97 -0
  70. package/dist/Components/OptionChip/OptionChipProps.d.ts +33 -0
  71. package/dist/Components/OptionChip/OptionChipProps.js +2 -0
  72. package/dist/Components/OptionChip/optionInk.d.ts +12 -0
  73. package/dist/Components/OptionChip/optionInk.js +25 -0
  74. package/dist/Components/OrderStatusTimeline/OrderStatusTimeline.d.ts +4 -0
  75. package/dist/Components/OrderStatusTimeline/OrderStatusTimeline.js +57 -0
  76. package/dist/Components/OrderStatusTimeline/OrderStatusTimelineProps.d.ts +29 -0
  77. package/dist/Components/OrderStatusTimeline/OrderStatusTimelineProps.js +2 -0
  78. package/dist/Components/OrderSummary/OrderSummary.d.ts +4 -0
  79. package/dist/Components/OrderSummary/OrderSummary.js +63 -0
  80. package/dist/Components/OrderSummary/OrderSummaryProps.d.ts +53 -0
  81. package/dist/Components/OrderSummary/OrderSummaryProps.js +2 -0
  82. package/dist/Components/PaymentOption/PaymentOption.d.ts +4 -0
  83. package/dist/Components/PaymentOption/PaymentOption.js +24 -0
  84. package/dist/Components/PaymentOption/PaymentOptionGroup.d.ts +4 -0
  85. package/dist/Components/PaymentOption/PaymentOptionGroup.js +7 -0
  86. package/dist/Components/PaymentOption/PaymentOptionProps.d.ts +32 -0
  87. package/dist/Components/PaymentOption/PaymentOptionProps.js +2 -0
  88. package/dist/Components/PincodeChecker/PincodeChecker.d.ts +4 -0
  89. package/dist/Components/PincodeChecker/PincodeChecker.js +175 -0
  90. package/dist/Components/PincodeChecker/PincodeCheckerProps.d.ts +57 -0
  91. package/dist/Components/PincodeChecker/PincodeCheckerProps.js +2 -0
  92. package/dist/Components/PriceBlock/PriceBlock.d.ts +4 -0
  93. package/dist/Components/PriceBlock/PriceBlock.js +41 -0
  94. package/dist/Components/PriceBlock/PriceBlockProps.d.ts +39 -0
  95. package/dist/Components/PriceBlock/PriceBlockProps.js +2 -0
  96. package/dist/Components/ProductBadges/ProductBadges.d.ts +4 -0
  97. package/dist/Components/ProductBadges/ProductBadges.js +61 -0
  98. package/dist/Components/ProductBadges/ProductBadgesProps.d.ts +18 -0
  99. package/dist/Components/ProductBadges/ProductBadgesProps.js +2 -0
  100. package/dist/Components/ProductCard/ProductCard.d.ts +3 -2
  101. package/dist/Components/ProductCard/ProductCard.js +103 -52
  102. package/dist/Components/ProductCard/ProductCardAction.d.ts +17 -0
  103. package/dist/Components/ProductCard/ProductCardAction.js +65 -0
  104. package/dist/Components/ProductCard/ProductCardGrid.d.ts +4 -0
  105. package/dist/Components/ProductCard/ProductCardGrid.js +20 -0
  106. package/dist/Components/ProductCard/ProductCardMedia.d.ts +18 -0
  107. package/dist/Components/ProductCard/ProductCardMedia.js +35 -0
  108. package/dist/Components/ProductCard/ProductCardProps.d.ts +138 -56
  109. package/dist/Components/ProductCard/ProductCardSkeleton.d.ts +4 -0
  110. package/dist/Components/ProductCard/ProductCardSkeleton.js +17 -0
  111. package/dist/Components/ProductCard/ProductCardSwatches.d.ts +15 -0
  112. package/dist/Components/ProductCard/ProductCardSwatches.js +37 -0
  113. package/dist/Components/ProductCard/QuickAddSheet.d.ts +4 -0
  114. package/dist/Components/ProductCard/QuickAddSheet.js +109 -0
  115. package/dist/Components/ProductCard/QuickAddSheetProps.d.ts +38 -0
  116. package/dist/Components/ProductCard/QuickAddSheetProps.js +2 -0
  117. package/dist/Components/ProductCard/cardLabels.d.ts +2 -0
  118. package/dist/Components/ProductCard/cardLabels.js +16 -0
  119. package/dist/Components/ProductCard/cardMetrics.d.ts +27 -0
  120. package/dist/Components/ProductCard/cardMetrics.js +55 -0
  121. package/dist/Components/ProductCard/productCardFixtures.d.ts +7 -0
  122. package/dist/Components/ProductCard/productCardFixtures.js +61 -0
  123. package/dist/Components/ProductCard/productCardModel.d.ts +22 -0
  124. package/dist/Components/ProductCard/productCardModel.js +79 -0
  125. package/dist/Components/ProductCard/useMinWidth.d.ts +2 -0
  126. package/dist/Components/ProductCard/useMinWidth.js +20 -0
  127. package/dist/Components/ProductDetails/ProductDetails.d.ts +3 -2
  128. package/dist/Components/ProductDetails/ProductDetails.js +209 -33
  129. package/dist/Components/ProductDetails/ProductDetailsProps.d.ts +143 -41
  130. package/dist/Components/ProductDetails/productDetailsModel.d.ts +14 -0
  131. package/dist/Components/ProductDetails/productDetailsModel.js +45 -0
  132. package/dist/Components/ProductDetails/useInViewport.d.ts +3 -0
  133. package/dist/Components/ProductDetails/useInViewport.js +18 -0
  134. package/dist/Components/QuantityStepper/QuantityStepper.d.ts +4 -0
  135. package/dist/Components/QuantityStepper/QuantityStepper.js +59 -0
  136. package/dist/Components/QuantityStepper/QuantityStepperProps.d.ts +24 -0
  137. package/dist/Components/QuantityStepper/QuantityStepperProps.js +2 -0
  138. package/dist/Components/Rating/Rating.d.ts +4 -0
  139. package/dist/Components/Rating/Rating.js +81 -0
  140. package/dist/Components/Rating/RatingProps.d.ts +27 -0
  141. package/dist/Components/Rating/RatingProps.js +2 -0
  142. package/dist/Components/ReviewList/ReviewList.d.ts +4 -0
  143. package/dist/Components/ReviewList/ReviewList.js +94 -0
  144. package/dist/Components/ReviewList/ReviewListProps.d.ts +68 -0
  145. package/dist/Components/ReviewList/ReviewListProps.js +2 -0
  146. package/dist/Components/ReviewSummary/ReviewSummary.d.ts +4 -0
  147. package/dist/Components/ReviewSummary/ReviewSummary.js +47 -0
  148. package/dist/Components/ReviewSummary/ReviewSummaryProps.d.ts +31 -0
  149. package/dist/Components/ReviewSummary/ReviewSummaryProps.js +2 -0
  150. package/dist/Components/SegmentedControl/SegmentedControl.d.ts +1 -1
  151. package/dist/Components/SegmentedControl/SegmentedControl.js +17 -5
  152. package/dist/Components/SegmentedControl/SegmentedControlProps.d.ts +6 -0
  153. package/dist/Components/SegmentedControl/segmentedInk.d.ts +2 -0
  154. package/dist/Components/SegmentedControl/segmentedInk.js +4 -1
  155. package/dist/Components/SegmentedControl/useSlidingPill.d.ts +2 -0
  156. package/dist/Components/SegmentedControl/useSlidingPill.js +6 -1
  157. package/dist/Components/SideBar/SecondaryBar.js +13 -8
  158. package/dist/Components/SideBar/SideBarProps.d.ts +3 -1
  159. package/dist/Components/SideBar/components/MenuItemBox.js +47 -10
  160. package/dist/Components/SideBar/components/MenuPopoverContent.js +4 -3
  161. package/dist/Components/SpecTable/SpecTable.d.ts +4 -0
  162. package/dist/Components/SpecTable/SpecTable.js +39 -0
  163. package/dist/Components/SpecTable/SpecTableProps.d.ts +25 -0
  164. package/dist/Components/SpecTable/SpecTableProps.js +2 -0
  165. package/dist/Components/Spinner/Spinner.d.ts +1 -1
  166. package/dist/Components/Spinner/Spinner.js +2 -2
  167. package/dist/Components/Spinner/SpinnerProps.d.ts +2 -0
  168. package/dist/Components/StageProgress/StepperStage.js +2 -1
  169. package/dist/Components/StatCard/StatCard.d.ts +1 -1
  170. package/dist/Components/StatCard/StatCard.js +2 -2
  171. package/dist/Components/StatCard/StatCardProps.d.ts +4 -0
  172. package/dist/Components/StickyBuyBar/StickyBuyBar.d.ts +3 -0
  173. package/dist/Components/StickyBuyBar/StickyBuyBar.js +85 -0
  174. package/dist/Components/StickyBuyBar/StickyBuyBarProps.d.ts +54 -0
  175. package/dist/Components/StickyBuyBar/StickyBuyBarProps.js +2 -0
  176. package/dist/Components/StockStatus/StockStatus.d.ts +4 -0
  177. package/dist/Components/StockStatus/StockStatus.js +31 -0
  178. package/dist/Components/StockStatus/StockStatusProps.d.ts +14 -0
  179. package/dist/Components/StockStatus/StockStatusProps.js +2 -0
  180. package/dist/Components/Table/Table.js +2 -1
  181. package/dist/Components/Table/TableProps.d.ts +5 -2
  182. package/dist/Components/Table/columnLabel.d.ts +6 -0
  183. package/dist/Components/Table/columnLabel.js +27 -0
  184. package/dist/Components/Table/components/TableBody.js +5 -1
  185. package/dist/Components/Table/components/TableHeader.js +3 -2
  186. package/dist/Components/Table/filters/ActiveFilters.js +2 -1
  187. package/dist/Components/Table/filters/TableFilters.js +2 -1
  188. package/dist/Components/Table/hooks/useTable.js +3 -2
  189. package/dist/Components/Table/settings/ManageColumns.js +4 -3
  190. package/dist/Components/Table/settings/TableSettings.js +2 -1
  191. package/dist/Components/TrustBadges/TrustBadges.d.ts +4 -0
  192. package/dist/Components/TrustBadges/TrustBadges.js +24 -0
  193. package/dist/Components/TrustBadges/TrustBadgesProps.d.ts +20 -0
  194. package/dist/Components/TrustBadges/TrustBadgesProps.js +2 -0
  195. package/dist/Components/VariantSelector/VariantSelector.d.ts +4 -0
  196. package/dist/Components/VariantSelector/VariantSelector.js +123 -0
  197. package/dist/Components/VariantSelector/VariantSelectorProps.d.ts +27 -0
  198. package/dist/Components/VariantSelector/VariantSelectorProps.js +2 -0
  199. package/dist/Components/VariantSelector/variantSelection.d.ts +6 -0
  200. package/dist/Components/VariantSelector/variantSelection.js +25 -0
  201. package/dist/Components/WishlistToggle/WishlistToggle.d.ts +4 -0
  202. package/dist/Components/WishlistToggle/WishlistToggle.js +65 -0
  203. package/dist/Components/WishlistToggle/WishlistToggleProps.d.ts +19 -0
  204. package/dist/Components/WishlistToggle/WishlistToggleProps.js +2 -0
  205. package/dist/Theme/assertPalette.d.ts +1 -1
  206. package/dist/Theme/assertPalette.js +1 -1
  207. package/dist/Theme/tokens/brands/index.js +2 -0
  208. package/dist/Theme/tokens/brands/zinc/palette.dark.d.ts +1 -0
  209. package/dist/Theme/tokens/builders/buildDarkPalette.js +2 -0
  210. package/dist/Theme/tokens/builders/index.d.ts +1 -0
  211. package/dist/Theme/tokens/builders/index.js +1 -0
  212. package/dist/Theme/tokens/builders/rechartsTheme.d.ts +56 -0
  213. package/dist/Theme/tokens/builders/rechartsTheme.js +43 -0
  214. package/dist/Theme/tokens/builders/star.d.ts +3 -0
  215. package/dist/Theme/tokens/builders/star.js +8 -0
  216. package/dist/Theme/tokens/types.d.ts +3 -1
  217. package/dist/Theme/useChartTheme.d.ts +4 -0
  218. package/dist/Theme/useChartTheme.js +12 -0
  219. package/dist/Utils/price.d.ts +16 -0
  220. package/dist/Utils/price.js +34 -0
  221. package/dist/esm/Components/AddressCard/AddressCard.js +20 -0
  222. package/dist/esm/Components/AddressCard/AddressCardGroup.js +5 -0
  223. package/dist/esm/Components/AddressCard/AddressCardProps.js +1 -0
  224. package/dist/esm/Components/BagBar/BagBar.js +27 -0
  225. package/dist/esm/Components/BagBar/BagBarProps.js +1 -0
  226. package/dist/esm/Components/CartItem/CartItem.js +55 -0
  227. package/dist/esm/Components/CartItem/CartItemProps.js +1 -0
  228. package/dist/esm/Components/CartItem/cartItemOptions.js +9 -0
  229. package/dist/esm/Components/CheckoutKit/selectable.js +112 -0
  230. package/dist/esm/Components/Commerce/commerceTypes.js +1 -0
  231. package/dist/esm/Components/Commerce/commerceVariants.js +41 -0
  232. package/dist/esm/Components/Commerce/index.js +2 -0
  233. package/dist/esm/Components/Commerce/useContainerWidth.js +21 -0
  234. package/dist/esm/Components/CouponField/CouponField.js +67 -0
  235. package/dist/esm/Components/CouponField/CouponFieldProps.js +1 -0
  236. package/dist/esm/Components/DatePicker/PickerPortal.js +21 -0
  237. package/dist/esm/Components/DatePicker/RangeDatePicker.js +34 -32
  238. package/dist/esm/Components/DatePicker/SingleDatePicker.js +16 -13
  239. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +6 -4
  240. package/dist/esm/Components/DetailSections/DetailSections.js +107 -0
  241. package/dist/esm/Components/DetailSections/DetailSectionsProps.js +1 -0
  242. package/dist/esm/Components/MediaGallery/MediaFrame.js +48 -0
  243. package/dist/esm/Components/MediaGallery/MediaGallery.js +201 -0
  244. package/dist/esm/Components/MediaGallery/MediaGalleryProps.js +17 -0
  245. package/dist/esm/Components/MediaGallery/MediaLightbox.js +78 -0
  246. package/dist/esm/Components/MediaGallery/MediaLightboxProps.js +12 -0
  247. package/dist/esm/Components/MediaGallery/MediaThumb.js +23 -0
  248. package/dist/esm/Components/MediaGallery/glass.js +42 -0
  249. package/dist/esm/Components/MediaGallery/mediaGalleryModel.js +71 -0
  250. package/dist/esm/Components/MediaGallery/motion.js +8 -0
  251. package/dist/esm/Components/MediaGallery/useMatchMedia.js +16 -0
  252. package/dist/esm/Components/OffersList/OffersList.js +81 -0
  253. package/dist/esm/Components/OffersList/OffersListProps.js +1 -0
  254. package/dist/esm/Components/OptionChip/OptionChip.js +95 -0
  255. package/dist/esm/Components/OptionChip/OptionChipProps.js +1 -0
  256. package/dist/esm/Components/OptionChip/optionInk.js +21 -0
  257. package/dist/esm/Components/OrderStatusTimeline/OrderStatusTimeline.js +55 -0
  258. package/dist/esm/Components/OrderStatusTimeline/OrderStatusTimelineProps.js +1 -0
  259. package/dist/esm/Components/OrderSummary/OrderSummary.js +58 -0
  260. package/dist/esm/Components/OrderSummary/OrderSummaryProps.js +1 -0
  261. package/dist/esm/Components/PaymentOption/PaymentOption.js +19 -0
  262. package/dist/esm/Components/PaymentOption/PaymentOptionGroup.js +5 -0
  263. package/dist/esm/Components/PaymentOption/PaymentOptionProps.js +1 -0
  264. package/dist/esm/Components/PincodeChecker/PincodeChecker.js +170 -0
  265. package/dist/esm/Components/PincodeChecker/PincodeCheckerProps.js +1 -0
  266. package/dist/esm/Components/PriceBlock/PriceBlock.js +39 -0
  267. package/dist/esm/Components/PriceBlock/PriceBlockProps.js +1 -0
  268. package/dist/esm/Components/ProductBadges/ProductBadges.js +59 -0
  269. package/dist/esm/Components/ProductBadges/ProductBadgesProps.js +1 -0
  270. package/dist/esm/Components/ProductCard/ProductCard.js +105 -54
  271. package/dist/esm/Components/ProductCard/ProductCardAction.js +60 -0
  272. package/dist/esm/Components/ProductCard/ProductCardGrid.js +18 -0
  273. package/dist/esm/Components/ProductCard/ProductCardMedia.js +33 -0
  274. package/dist/esm/Components/ProductCard/ProductCardSkeleton.js +12 -0
  275. package/dist/esm/Components/ProductCard/ProductCardSwatches.js +35 -0
  276. package/dist/esm/Components/ProductCard/QuickAddSheet.js +71 -0
  277. package/dist/esm/Components/ProductCard/QuickAddSheetProps.js +1 -0
  278. package/dist/esm/Components/ProductCard/cardLabels.js +13 -0
  279. package/dist/esm/Components/ProductCard/cardMetrics.js +52 -0
  280. package/dist/esm/Components/ProductCard/productCardFixtures.js +58 -0
  281. package/dist/esm/Components/ProductCard/productCardModel.js +65 -0
  282. package/dist/esm/Components/ProductCard/useMinWidth.js +16 -0
  283. package/dist/esm/Components/ProductDetails/ProductDetails.js +210 -34
  284. package/dist/esm/Components/ProductDetails/productDetailsModel.js +35 -0
  285. package/dist/esm/Components/ProductDetails/useInViewport.js +14 -0
  286. package/dist/esm/Components/QuantityStepper/QuantityStepper.js +57 -0
  287. package/dist/esm/Components/QuantityStepper/QuantityStepperProps.js +1 -0
  288. package/dist/esm/Components/Rating/Rating.js +79 -0
  289. package/dist/esm/Components/Rating/RatingProps.js +1 -0
  290. package/dist/esm/Components/ReviewList/ReviewList.js +89 -0
  291. package/dist/esm/Components/ReviewList/ReviewListProps.js +1 -0
  292. package/dist/esm/Components/ReviewSummary/ReviewSummary.js +42 -0
  293. package/dist/esm/Components/ReviewSummary/ReviewSummaryProps.js +1 -0
  294. package/dist/esm/Components/SegmentedControl/SegmentedControl.js +19 -7
  295. package/dist/esm/Components/SegmentedControl/segmentedInk.js +2 -0
  296. package/dist/esm/Components/SegmentedControl/useSlidingPill.js +6 -1
  297. package/dist/esm/Components/SideBar/SecondaryBar.js +14 -9
  298. package/dist/esm/Components/SideBar/components/MenuItemBox.js +14 -10
  299. package/dist/esm/Components/SideBar/components/MenuPopoverContent.js +4 -3
  300. package/dist/esm/Components/SpecTable/SpecTable.js +34 -0
  301. package/dist/esm/Components/SpecTable/SpecTableProps.js +1 -0
  302. package/dist/esm/Components/Spinner/Spinner.js +2 -2
  303. package/dist/esm/Components/StageProgress/StepperStage.js +2 -1
  304. package/dist/esm/Components/StatCard/StatCard.js +2 -2
  305. package/dist/esm/Components/StickyBuyBar/StickyBuyBar.js +80 -0
  306. package/dist/esm/Components/StickyBuyBar/StickyBuyBarProps.js +1 -0
  307. package/dist/esm/Components/StockStatus/StockStatus.js +29 -0
  308. package/dist/esm/Components/StockStatus/StockStatusProps.js +1 -0
  309. package/dist/esm/Components/Table/Table.js +2 -1
  310. package/dist/esm/Components/Table/columnLabel.js +21 -0
  311. package/dist/esm/Components/Table/components/TableBody.js +5 -1
  312. package/dist/esm/Components/Table/components/TableHeader.js +3 -2
  313. package/dist/esm/Components/Table/filters/ActiveFilters.js +2 -1
  314. package/dist/esm/Components/Table/filters/TableFilters.js +2 -1
  315. package/dist/esm/Components/Table/hooks/useTable.js +3 -2
  316. package/dist/esm/Components/Table/settings/ManageColumns.js +4 -3
  317. package/dist/esm/Components/Table/settings/TableSettings.js +2 -1
  318. package/dist/esm/Components/TrustBadges/TrustBadges.js +22 -0
  319. package/dist/esm/Components/TrustBadges/TrustBadgesProps.js +1 -0
  320. package/dist/esm/Components/VariantSelector/VariantSelector.js +118 -0
  321. package/dist/esm/Components/VariantSelector/VariantSelectorProps.js +1 -0
  322. package/dist/esm/Components/VariantSelector/variantSelection.js +19 -0
  323. package/dist/esm/Components/WishlistToggle/WishlistToggle.js +63 -0
  324. package/dist/esm/Components/WishlistToggle/WishlistToggleProps.js +1 -0
  325. package/dist/esm/Theme/assertPalette.js +1 -1
  326. package/dist/esm/Theme/tokens/brands/index.js +2 -0
  327. package/dist/esm/Theme/tokens/builders/buildDarkPalette.js +2 -0
  328. package/dist/esm/Theme/tokens/builders/index.js +1 -0
  329. package/dist/esm/Theme/tokens/builders/rechartsTheme.js +37 -0
  330. package/dist/esm/Theme/tokens/builders/star.js +4 -0
  331. package/dist/esm/Theme/useChartTheme.js +8 -0
  332. package/dist/esm/Utils/price.js +27 -0
  333. package/dist/esm/index.js +36 -0
  334. package/dist/index.d.ts +66 -0
  335. package/dist/index.js +86 -4
  336. package/package.json +1 -1
  337. package/dist/Components/ProductCard/ProductLabel.d.ts +0 -7
  338. package/dist/Components/ProductCard/ProductLabel.js +0 -20
  339. package/dist/Components/ProductCard/ProductPrice.d.ts +0 -10
  340. package/dist/Components/ProductCard/ProductPrice.js +0 -126
  341. package/dist/Components/ProductCard/ProductReview.d.ts +0 -8
  342. package/dist/Components/ProductCard/ProductReview.js +0 -30
  343. package/dist/Components/ProductCard/ProductTags.d.ts +0 -8
  344. package/dist/Components/ProductCard/ProductTags.js +0 -53
  345. package/dist/Components/ProductDetails/ProductDtlPrice.d.ts +0 -7
  346. package/dist/Components/ProductDetails/ProductDtlPrice.js +0 -24
  347. package/dist/Components/ProductDetails/ProductImageSlider.d.ts +0 -13
  348. package/dist/Components/ProductDetails/ProductImageSlider.js +0 -240
  349. package/dist/esm/Components/ProductCard/ProductLabel.js +0 -18
  350. package/dist/esm/Components/ProductCard/ProductPrice.js +0 -121
  351. package/dist/esm/Components/ProductCard/ProductReview.js +0 -28
  352. package/dist/esm/Components/ProductCard/ProductTags.js +0 -48
  353. package/dist/esm/Components/ProductDetails/ProductDtlPrice.js +0 -22
  354. package/dist/esm/Components/ProductDetails/ProductImageSlider.js +0 -204
@@ -0,0 +1,22 @@
1
+ import type { ProductMedia } from "../Commerce/commerceTypes";
2
+ export type FrameKind = "image" | "video" | "embed";
3
+ export type Embed = {
4
+ provider: "youtube" | "vimeo";
5
+ id: string;
6
+ src: string;
7
+ poster?: string;
8
+ };
9
+ /** Only whitelisted ids reach an iframe `src`, so a product feed can never inject an arbitrary frame URL. */
10
+ export declare const parseEmbed: (url: string) => Embed | undefined;
11
+ export declare const frameKind: (media: ProductMedia) => FrameKind;
12
+ /** Still image to show for a frame before it plays, if the data offers one. */
13
+ export declare const framePoster: (media: ProductMedia) => string | undefined;
14
+ export declare const frameThumb: (media: ProductMedia) => string | undefined;
15
+ /** `activeMediaIds` order wins; unknown ids are dropped; an empty result falls back to every frame. */
16
+ export declare const resolveFrames: (media: ProductMedia[], activeMediaIds?: string[]) => ProductMedia[];
17
+ export declare const clampIndex: (index: number, count: number) => number;
18
+ /** Where a navigation key lands, or undefined when the key is not navigation. */
19
+ export declare const indexForKey: (key: string, index: number, count: number) => number | undefined;
20
+ /** Arrow keys belong to a focused video, iframe or field, never to the carousel. */
21
+ export declare const keyBelongsToTarget: (target: EventTarget | null) => boolean;
22
+ export declare const frameSignature: (frames: ProductMedia[]) => string;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.frameSignature = exports.keyBelongsToTarget = exports.indexForKey = exports.clampIndex = exports.resolveFrames = exports.frameThumb = exports.framePoster = exports.frameKind = exports.parseEmbed = void 0;
4
+ const YOUTUBE = [
5
+ /youtube\.com\/watch\?[^#]*v=([A-Za-z0-9_-]{6,})/i,
6
+ /youtube\.com\/(?:embed|shorts|live)\/([A-Za-z0-9_-]{6,})/i,
7
+ /youtu\.be\/([A-Za-z0-9_-]{6,})/i,
8
+ ];
9
+ const VIMEO = [/vimeo\.com\/(?:video\/)?(\d+)/i];
10
+ const firstMatch = (patterns, url) => {
11
+ for (const pattern of patterns) {
12
+ const found = pattern.exec(url);
13
+ if (found)
14
+ return found[1];
15
+ }
16
+ return undefined;
17
+ };
18
+ /** Only whitelisted ids reach an iframe `src`, so a product feed can never inject an arbitrary frame URL. */
19
+ const parseEmbed = (url) => {
20
+ const youtube = firstMatch(YOUTUBE, url);
21
+ if (youtube) {
22
+ return {
23
+ provider: "youtube",
24
+ id: youtube,
25
+ src: `https://www.youtube.com/embed/${youtube}?rel=0&autoplay=1`,
26
+ poster: `https://img.youtube.com/vi/${youtube}/hqdefault.jpg`,
27
+ };
28
+ }
29
+ const vimeo = firstMatch(VIMEO, url);
30
+ if (vimeo)
31
+ return { provider: "vimeo", id: vimeo, src: `https://player.vimeo.com/video/${vimeo}?autoplay=1` };
32
+ return undefined;
33
+ };
34
+ exports.parseEmbed = parseEmbed;
35
+ const frameKind = (media) => {
36
+ if (media.type !== "video")
37
+ return "image";
38
+ return (0, exports.parseEmbed)(media.src) ? "embed" : "video";
39
+ };
40
+ exports.frameKind = frameKind;
41
+ /** Still image to show for a frame before it plays, if the data offers one. */
42
+ const framePoster = (media) => {
43
+ var _a, _b;
44
+ if (media.type !== "video")
45
+ return media.src;
46
+ return (_a = media.poster) !== null && _a !== void 0 ? _a : (_b = (0, exports.parseEmbed)(media.src)) === null || _b === void 0 ? void 0 : _b.poster;
47
+ };
48
+ exports.framePoster = framePoster;
49
+ const frameThumb = (media) => { var _a; return (_a = media.thumb) !== null && _a !== void 0 ? _a : (media.type === "video" ? (0, exports.framePoster)(media) : media.src); };
50
+ exports.frameThumb = frameThumb;
51
+ /** `activeMediaIds` order wins; unknown ids are dropped; an empty result falls back to every frame. */
52
+ const resolveFrames = (media, activeMediaIds) => {
53
+ if (!activeMediaIds)
54
+ return media;
55
+ const byId = new Map(media.map((item) => [item.id, item]));
56
+ const picked = activeMediaIds.flatMap((id) => {
57
+ const found = byId.get(id);
58
+ return found ? [found] : [];
59
+ });
60
+ return picked.length > 0 ? picked : media;
61
+ };
62
+ exports.resolveFrames = resolveFrames;
63
+ const clampIndex = (index, count) => count <= 0 ? 0 : Math.min(Math.max(Math.trunc(index) || 0, 0), count - 1);
64
+ exports.clampIndex = clampIndex;
65
+ /** Where a navigation key lands, or undefined when the key is not navigation. */
66
+ const indexForKey = (key, index, count) => {
67
+ if (key === "ArrowLeft")
68
+ return (0, exports.clampIndex)(index - 1, count);
69
+ if (key === "ArrowRight")
70
+ return (0, exports.clampIndex)(index + 1, count);
71
+ if (key === "Home")
72
+ return 0;
73
+ if (key === "End")
74
+ return (0, exports.clampIndex)(count - 1, count);
75
+ return undefined;
76
+ };
77
+ exports.indexForKey = indexForKey;
78
+ const OWN_KEYS = "video, iframe, input, textarea, select, [contenteditable='true']";
79
+ /** Arrow keys belong to a focused video, iframe or field, never to the carousel. */
80
+ const keyBelongsToTarget = (target) => target instanceof Element && target.closest(OWN_KEYS) !== null;
81
+ exports.keyBelongsToTarget = keyBelongsToTarget;
82
+ const frameSignature = (frames) => frames.map((frame) => frame.id).join("|");
83
+ exports.frameSignature = frameSignature;
@@ -0,0 +1,5 @@
1
+ /** Frame change: one slide per gesture, `transform` only. */
2
+ export declare const SLIDE_MS = 320;
3
+ /** Colour-linked frame set swap and the lightbox frame change. */
4
+ export declare const CROSSFADE_MS = 160;
5
+ export declare const fadeIn: (ms?: number) => string;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fadeIn = exports.CROSSFADE_MS = exports.SLIDE_MS = void 0;
4
+ const react_1 = require("@emotion/react");
5
+ const motion_1 = require("../../Theme/tokens/primitives/motion");
6
+ /** Frame change: one slide per gesture, `transform` only. */
7
+ exports.SLIDE_MS = 320;
8
+ /** Colour-linked frame set swap and the lightbox frame change. */
9
+ exports.CROSSFADE_MS = 160;
10
+ const fade = (0, react_1.keyframes) `from { opacity: 0; } to { opacity: 1; }`;
11
+ const fadeIn = (ms = exports.CROSSFADE_MS) => `${fade} ${ms}ms ${motion_1.MOTION_EASE} both`;
12
+ exports.fadeIn = fadeIn;
@@ -0,0 +1,2 @@
1
+ /** `matches` for a media query, or `fallback` where matchMedia does not exist (SSR, jsdom). */
2
+ export declare const useMatchMedia: (query: string, fallback: boolean) => boolean;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useMatchMedia = void 0;
4
+ const react_1 = require("react");
5
+ const supported = () => typeof window !== "undefined" && typeof window.matchMedia === "function";
6
+ /** `matches` for a media query, or `fallback` where matchMedia does not exist (SSR, jsdom). */
7
+ const useMatchMedia = (query, fallback) => {
8
+ const [matches, setMatches] = (0, react_1.useState)(() => (supported() ? window.matchMedia(query).matches : fallback));
9
+ (0, react_1.useEffect)(() => {
10
+ if (!supported())
11
+ return undefined;
12
+ const list = window.matchMedia(query);
13
+ const onChange = () => setMatches(list.matches);
14
+ onChange();
15
+ list.addEventListener("change", onChange);
16
+ return () => list.removeEventListener("change", onChange);
17
+ }, [query]);
18
+ return matches;
19
+ };
20
+ exports.useMatchMedia = useMatchMedia;
@@ -0,0 +1,4 @@
1
+ import type { OffersListProps } from "./OffersListProps";
2
+ /** One collapsed tonal row ("Offers (3) · Best: ...") that opens into the full list with copy-code buttons; renders nothing for no offers. */
3
+ declare const OffersList: ({ offers, bestOfferId, isOpen, defaultOpen, onOpenChange, onCopy, labels, "data-testid": testId, }: OffersListProps) => import("react/jsx-runtime").JSX.Element | null;
4
+ export default OffersList;
@@ -0,0 +1,83 @@
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 focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
11
+ const COPIED_MS = 1600;
12
+ const DEFAULT_LABELS = {
13
+ summary: (count, best) => `Offers (${count}) · Best: ${best}`,
14
+ summaryCount: (count) => `Offers (${count})`,
15
+ copy: "Copy",
16
+ copied: "Copied",
17
+ copyCode: (code) => `Copy code ${code}`,
18
+ copiedMessage: (code) => `Code ${code} copied`,
19
+ };
20
+ const writeToClipboard = (code) => {
21
+ var _a;
22
+ try {
23
+ const pending = (_a = navigator.clipboard) === null || _a === void 0 ? void 0 : _a.writeText(code);
24
+ pending === null || pending === void 0 ? void 0 : pending.catch(() => undefined);
25
+ }
26
+ catch {
27
+ return;
28
+ }
29
+ };
30
+ /** One collapsed tonal row ("Offers (3) · Best: ...") that opens into the full list with copy-code buttons; renders nothing for no offers. */
31
+ const OffersList = ({ offers, bestOfferId, isOpen, defaultOpen = false, onOpenChange, onCopy, labels, "data-testid": testId, }) => {
32
+ var _a;
33
+ const { colors } = (0, useCustomTheme_1.useCustomTheme)();
34
+ const panelId = (0, react_1.useId)();
35
+ const [innerOpen, setInnerOpen] = (0, react_1.useState)(defaultOpen);
36
+ const [copiedId, setCopiedId] = (0, react_1.useState)(null);
37
+ const [message, setMessage] = (0, react_1.useState)("");
38
+ const timer = (0, react_1.useRef)();
39
+ const copy = { ...DEFAULT_LABELS, ...labels };
40
+ const open = isOpen !== null && isOpen !== void 0 ? isOpen : innerOpen;
41
+ (0, react_1.useEffect)(() => () => clearTimeout(timer.current), []);
42
+ if (offers.length === 0)
43
+ return null;
44
+ const best = (_a = offers.find((offer) => offer.id === bestOfferId)) !== null && _a !== void 0 ? _a : offers[0];
45
+ const summary = offers.length === 1
46
+ ? `${best.title} · ${best.detail}`
47
+ : best.title
48
+ ? copy.summary(offers.length, best.title)
49
+ : copy.summaryCount(offers.length);
50
+ const toggle = () => {
51
+ const next = !open;
52
+ if (isOpen === undefined)
53
+ setInnerOpen(next);
54
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(next);
55
+ };
56
+ const copyCode = (offer, code) => {
57
+ writeToClipboard(code);
58
+ setCopiedId(offer.id);
59
+ setMessage(copy.copiedMessage(code));
60
+ clearTimeout(timer.current);
61
+ timer.current = setTimeout(() => {
62
+ setCopiedId(null);
63
+ setMessage("");
64
+ }, COPIED_MS);
65
+ onCopy === null || onCopy === void 0 ? void 0 : onCopy(offer);
66
+ };
67
+ return ((0, jsx_runtime_1.jsxs)(react_2.Box, { bg: colors.background[100], borderRadius: "xl", overflow: "hidden", "data-testid": testId, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { as: "button", type: "button", w: "100%", minH: "3rem", px: 4, py: 3, align: "center", gap: 3, textAlign: "left", borderRadius: "xl", color: colors.header[900], "aria-expanded": open, "aria-controls": panelId, onClick: toggle, transition: (0, motion_1.transitionFor)(["background-color"]), _hover: { bg: colors.background[200] }, sx: { ...(0, focusRing_styles_1.focusVisibleStyles)(colors), ...(0, motion_2.reducedMotionSx)() }, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", "aria-hidden": true, display: "inline-flex", flexShrink: 0, color: colors.accentText, children: (0, jsx_runtime_1.jsx)(lucide_react_1.Tag, { size: 18 }) }), (0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", flex: "1", minW: 0, fontSize: "sm", fontWeight: 600, noOfLines: open ? undefined : 1, children: summary }), (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", "aria-hidden": true, display: "inline-flex", flexShrink: 0, color: colors.textMuted, transform: open ? "rotate(180deg)" : "rotate(0deg)", transition: (0, motion_1.transitionFor)(["transform"]), sx: (0, motion_2.reducedMotionSx)(), children: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: 18 }) })] }), (0, jsx_runtime_1.jsx)(react_2.Box, { id: panelId, hidden: !open, children: (0, jsx_runtime_1.jsx)(react_2.Box, { as: "ul", listStyleType: "none", m: 0, px: 4, pb: 2, children: offers.map((offer) => {
68
+ const copied = copiedId === offer.id;
69
+ const { code } = offer;
70
+ return ((0, jsx_runtime_1.jsxs)(react_2.Flex, { as: "li", position: "relative", align: "center", justify: "space-between", gap: 3, py: 3, sx: {
71
+ "&:not(:first-of-type)::before": {
72
+ content: '""',
73
+ position: "absolute",
74
+ top: 0,
75
+ left: 0,
76
+ right: 0,
77
+ height: "1px",
78
+ background: colors.background[200],
79
+ },
80
+ }, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { minW: 0, children: [(0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", fontWeight: 600, color: colors.header[900], children: offer.title }), (0, jsx_runtime_1.jsx)(react_2.Text, { mt: 0.5, fontSize: "sm", lineHeight: 1.45, color: colors.textMuted, children: offer.detail })] }), code ? ((0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: 1, flexShrink: 0, children: [(0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", px: 2.5, py: 1, borderRadius: "md", bg: colors.background[200], color: colors.header[900], fontSize: "xs", fontWeight: 700, letterSpacing: "0.06em", sx: { fontVariantNumeric: "tabular-nums" }, children: code }), (0, jsx_runtime_1.jsxs)(react_2.Flex, { as: "button", type: "button", align: "center", gap: 1.5, minH: "2.75rem", px: 3, borderRadius: "lg", fontSize: "sm", fontWeight: 600, color: colors.accentText, "aria-label": copied ? undefined : copy.copyCode(code), onClick: () => copyCode(offer, code), transition: (0, motion_1.transitionFor)(["background-color"]), _hover: { bg: colors.background[200] }, sx: { ...(0, focusRing_styles_1.focusVisibleStyles)(colors), ...(0, motion_2.reducedMotionSx)() }, children: [copied ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 16, "aria-hidden": true }) : null, (0, jsx_runtime_1.jsx)("span", { children: copied ? copy.copied : copy.copy })] })] })) : null] }, offer.id));
81
+ }) }) }), (0, jsx_runtime_1.jsx)(react_2.VisuallyHidden, { "aria-live": "polite", children: message })] }));
82
+ };
83
+ exports.default = OffersList;
@@ -0,0 +1,34 @@
1
+ /** One offer; `code` adds a copy button. */
2
+ export interface Offer {
3
+ id: string;
4
+ title: string;
5
+ detail: string;
6
+ code?: string;
7
+ }
8
+ /** Every string the list renders; override all of them for another language. */
9
+ export interface OffersListLabels {
10
+ /** Collapsed summary, given the offer count and the best offer's title. */
11
+ summary: (count: number, best: string) => string;
12
+ /** Collapsed summary when there is no best offer to name. */
13
+ summaryCount: (count: number) => string;
14
+ copy: string;
15
+ copied: string;
16
+ /** Accessible name of a copy button, given the code. */
17
+ copyCode: (code: string) => string;
18
+ /** Screen-reader announcement after a copy, given the code. */
19
+ copiedMessage: (code: string) => string;
20
+ }
21
+ /** One collapsed row ("Offers (3) · Best: ...") that opens into the full list with copy-code buttons; renders nothing for no offers. */
22
+ export interface OffersListProps {
23
+ offers: Offer[];
24
+ /** Offer named in the collapsed summary; defaults to the first. */
25
+ bestOfferId?: string;
26
+ /** Controlled open state; pair with `onOpenChange`. */
27
+ isOpen?: boolean;
28
+ defaultOpen?: boolean;
29
+ onOpenChange?: (open: boolean) => void;
30
+ /** Fires after a code is copied, with the offer. */
31
+ onCopy?: (offer: Offer) => void;
32
+ labels?: Partial<OffersListLabels>;
33
+ "data-testid"?: string;
34
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ import type { OptionChipProps } from "./OptionChipProps";
2
+ /** The one selectable option control: text chip, colour swatch, image tile or pack. Parent group supplies the radiogroup. */
3
+ declare const OptionChip: import("react").ForwardRefExoticComponent<OptionChipProps & import("react").RefAttributes<HTMLButtonElement>>;
4
+ export default OptionChip;
@@ -0,0 +1,97 @@
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 focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
11
+ const optionInk_1 = require("./optionInk");
12
+ const CHIP_HEIGHT = { md: "2.75rem", lg: "3.25rem" };
13
+ const PACK_HEIGHT = { md: "3.5rem", lg: "4rem" };
14
+ const DOT = { md: "1.75rem", lg: "2rem" };
15
+ const TILE = { md: { w: "4rem", h: "5rem" }, lg: { w: "4.5rem", h: "5.625rem" } };
16
+ const DIM_OPACITY = 0.5;
17
+ const band = (color, half) => `linear-gradient(to top right, transparent calc(50% - ${half}), ${color} calc(50% - ${half}), ${color} calc(50% + ${half}), transparent calc(50% + ${half}))`;
18
+ const strikeImage = (ink, halo) => `${band(ink, "0.5px")}, ${band(halo, "1.5px")}`;
19
+ const strikeLayer = (image) => ({
20
+ position: "absolute",
21
+ inset: 0,
22
+ borderRadius: "inherit",
23
+ pointerEvents: "none",
24
+ backgroundImage: image,
25
+ });
26
+ const CheckGrow = ({ selected }) => ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", "aria-hidden": true, display: "inline-flex", alignItems: "center", flexShrink: 0, overflow: "hidden", w: selected ? "1.125rem" : 0, opacity: selected ? 1 : 0, transition: (0, motion_1.transitionFor)(["width", "opacity"], "base"), sx: (0, motion_2.reducedMotionSx)(), children: (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 14, strokeWidth: 2.5 }) }));
27
+ const errorRing = (colors) => `inset 0 0 0 1px ${colors.semanticText.error}`;
28
+ /** The one selectable option control: text chip, colour swatch, image tile or pack. Parent group supplies the radiogroup. */
29
+ const OptionChip = (0, react_1.forwardRef)(function OptionChip({ label, selected = false, disabled = false, unavailable = false, invalid = false, variant = "chip", swatch, image, hint, showLabel = false, size = "md", fullWidth = false, onSelect, onFocus, tabIndex, "data-testid": testId, }, ref) {
30
+ const { colors } = (0, useCustomTheme_1.useCustomTheme)();
31
+ const { rest, selected: picked } = (0, optionInk_1.optionInk)(colors);
32
+ const tone = selected ? picked : rest;
33
+ const dimmed = unavailable || disabled;
34
+ const accessibleName = [label, hint, unavailable ? "unavailable" : null].filter(Boolean).join(", ");
35
+ const strikeBackground = strikeImage(colors.text[800], colors.background[50]);
36
+ const base = {
37
+ ref,
38
+ as: "button",
39
+ type: "button",
40
+ role: "radio",
41
+ "aria-checked": selected,
42
+ "aria-disabled": unavailable || undefined,
43
+ "aria-label": accessibleName,
44
+ "data-testid": testId,
45
+ disabled,
46
+ tabIndex,
47
+ onClick: () => onSelect === null || onSelect === void 0 ? void 0 : onSelect(),
48
+ onFocus: () => onFocus === null || onFocus === void 0 ? void 0 : onFocus(),
49
+ position: "relative",
50
+ flexShrink: 0,
51
+ cursor: disabled ? "not-allowed" : "pointer",
52
+ opacity: dimmed ? DIM_OPACITY : 1,
53
+ w: fullWidth ? "100%" : undefined,
54
+ transition: (0, motion_1.transitionFor)(["background-color", "color", "box-shadow", "border-color", "transform"]),
55
+ _active: dimmed ? undefined : { transform: "scale(0.97)" },
56
+ };
57
+ const motion = {
58
+ ...(0, focusRing_styles_1.focusVisibleStyles)(colors),
59
+ ...(0, motion_2.reducedMotionSx)({ "&:active": { transform: "none" } }),
60
+ };
61
+ if (variant === "swatch") {
62
+ const dot = DOT[size];
63
+ return ((0, jsx_runtime_1.jsxs)(react_2.Box, { ...base, display: "inline-flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: "0.25rem", minW: CHIP_HEIGHT[size], minH: CHIP_HEIGHT[size], borderRadius: "xl", bg: "transparent", color: colors.text[800], title: showLabel ? undefined : label, sx: {
64
+ ...motion,
65
+ "&:hover:not(:disabled) [data-ring]:not([data-selected])": { borderColor: colors.boxborder[500] },
66
+ }, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", "data-ring": true, "data-selected": selected ? "" : undefined, display: "inline-flex", p: "0.125rem", borderWidth: "2px", borderStyle: "solid", borderRadius: "full", borderColor: selected ? colors.header[900] : invalid ? colors.semanticText.error : "transparent", transition: (0, motion_1.transitionFor)(["border-color"]), sx: (0, motion_2.reducedMotionSx)(), children: (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", position: "relative", display: "block", boxSize: dot, borderRadius: "full", backgroundColor: swatch !== null && swatch !== void 0 ? swatch : colors.background[200], boxShadow: `inset 0 0 0 1px ${colors.boxborder[200]}`, sx: unavailable ? { "&::after": { content: '""', ...strikeLayer(strikeBackground) } } : undefined }) }), showLabel ? ((0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", fontSize: "xs", fontWeight: selected ? 600 : 500, color: selected ? colors.header[900] : rest.ink, lineHeight: "short", children: label })) : null] }));
67
+ }
68
+ if (variant === "image-tile") {
69
+ const tile = TILE[size];
70
+ return ((0, jsx_runtime_1.jsxs)(react_2.Box, { ...base, display: "inline-flex", flexDirection: "column", alignItems: "center", gap: "0.375rem", bg: "transparent", color: rest.ink, w: fullWidth ? "100%" : undefined, maxW: `calc(${tile.w} + 0.5rem)`, sx: motion, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "block", p: "0.125rem", borderWidth: "2px", borderStyle: "solid", borderRadius: "calc(0.75rem + 4px)", borderColor: selected ? colors.header[900] : invalid ? colors.semanticText.error : "transparent", transition: (0, motion_1.transitionFor)(["border-color"]), sx: (0, motion_2.reducedMotionSx)(), children: (0, jsx_runtime_1.jsxs)(react_2.Box, { as: "span", position: "relative", display: "block", w: tile.w, h: tile.h, borderRadius: "xl", overflow: "hidden", backgroundColor: swatch !== null && swatch !== void 0 ? swatch : colors.background[100], sx: unavailable ? { "&::after": { content: '""', ...strikeLayer(strikeBackground) } } : undefined, children: [image ? (0, jsx_runtime_1.jsx)(react_2.Box, { as: "img", src: image, alt: "", loading: "lazy", w: "100%", h: "100%", objectFit: "cover", display: "block" }) : null, (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", "aria-hidden": true, position: "absolute", top: "0.25rem", right: "0.25rem", display: "inline-flex", alignItems: "center", justifyContent: "center", boxSize: "1.125rem", borderRadius: "full", bg: picked.fill, color: picked.ink, opacity: selected ? 1 : 0, transform: selected ? "scale(1)" : "scale(0.6)", transition: (0, motion_1.transitionFor)(["opacity", "transform"], "base"), sx: (0, motion_2.reducedMotionSx)({ transform: "none" }), children: (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 12, strokeWidth: 3 }) })] }) }), (0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", maxW: "100%", fontSize: "xs", fontWeight: selected ? 600 : 500, lineHeight: "short", textAlign: "center", noOfLines: 2, wordBreak: "break-word", children: label }), hint ? ((0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", fontSize: "xs", lineHeight: "short", color: rest.hint, noOfLines: 1, children: hint })) : null] }));
71
+ }
72
+ const isPack = variant === "pack";
73
+ const surface = {
74
+ display: "inline-flex",
75
+ flexDirection: "column",
76
+ alignItems: "center",
77
+ justifyContent: "center",
78
+ minW: isPack ? "5.75rem" : "3.5rem",
79
+ h: isPack ? PACK_HEIGHT[size] : CHIP_HEIGHT[size],
80
+ px: isPack ? 3 : 4,
81
+ borderRadius: "xl",
82
+ bg: tone.fill,
83
+ color: tone.ink,
84
+ fontSize: size === "lg" ? "md" : "sm",
85
+ fontWeight: 600,
86
+ lineHeight: "short",
87
+ whiteSpace: "nowrap",
88
+ boxShadow: invalid && !selected ? errorRing(colors) : "none",
89
+ };
90
+ const content = ((0, jsx_runtime_1.jsxs)(react_2.Box, { as: "span", display: "inline-flex", alignItems: "center", children: [(0, jsx_runtime_1.jsx)(CheckGrow, { selected: selected }), (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", sx: { fontVariantNumeric: "tabular-nums" }, children: label })] }));
91
+ return ((0, jsx_runtime_1.jsxs)(react_2.Box, { ...base, ...surface, sx: {
92
+ ...motion,
93
+ "&:hover:not(:disabled):not([aria-checked=true])": unavailable ? undefined : { backgroundColor: tone.hoverFill },
94
+ ...(unavailable ? { "&::after": { content: '""', ...strikeLayer(band("currentColor", "0.5px")) } } : {}),
95
+ }, children: [content, isPack && hint ? ((0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", mt: "0.125rem", fontSize: "0.6875rem", fontWeight: 500, color: tone.hint, sx: { fontVariantNumeric: "tabular-nums" }, children: hint })) : null, !isPack && hint ? ((0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", position: "absolute", top: "-0.375rem", right: "-0.25rem", px: "0.375rem", py: "0.0625rem", borderRadius: "full", bg: colors.surfaceRaised, color: colors.text[800], fontSize: "0.625rem", fontWeight: 600, lineHeight: "1rem", boxShadow: `0 0 0 1px ${colors.boxborder[200]}`, pointerEvents: "none", children: hint })) : null] }));
96
+ });
97
+ exports.default = OptionChip;
@@ -0,0 +1,33 @@
1
+ /** Which control shape renders: a text chip, a colour dot, an image tile, or a label-plus-unit-price pack. */
2
+ export type OptionChipVariant = "chip" | "swatch" | "image-tile" | "pack";
3
+ /** md is a 44px hit; lg is 52px. */
4
+ export type OptionChipSize = "md" | "lg";
5
+ /** One selectable option. Renders role="radio"; the parent supplies the radiogroup and arrow keys. */
6
+ export interface OptionChipProps {
7
+ /** Visible text for chip, pack and image-tile; the accessible name for a swatch. */
8
+ label: string;
9
+ selected?: boolean;
10
+ /** Native disabled: dimmed, not focusable, onSelect never fires. */
11
+ disabled?: boolean;
12
+ /** Struck through and dimmed but still focusable and announced as unavailable; onSelect still fires so a parent can re-derive. */
13
+ unavailable?: boolean;
14
+ /** Draws a 1px error ring; use when the group needs a pick. */
15
+ invalid?: boolean;
16
+ variant?: OptionChipVariant;
17
+ /** Any CSS colour from product data; the one place a literal colour is allowed. */
18
+ swatch?: string;
19
+ /** Image source for an image-tile. */
20
+ image?: string;
21
+ /** Secondary text: a corner badge on a chip ("3 left"), a second line on a pack or tile. */
22
+ hint?: string;
23
+ /** Swatch only: print the colour name under the dot. */
24
+ showLabel?: boolean;
25
+ size?: OptionChipSize;
26
+ /** Stretch to the parent's width, for grid layouts. */
27
+ fullWidth?: boolean;
28
+ onSelect?: () => void;
29
+ onFocus?: () => void;
30
+ /** Roving tabindex from the parent group; omit for a standalone chip. */
31
+ tabIndex?: number;
32
+ "data-testid"?: string;
33
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import type { PaletteProps } from "../../Theme/tokens/types";
2
+ export type OptionInk = {
3
+ fill: string;
4
+ hoverFill: string;
5
+ ink: string;
6
+ hint: string;
7
+ };
8
+ /** Resting and selected fills for an option; selection is the neutral ink fill, never the brand. */
9
+ export declare const optionInk: (colors: PaletteProps) => {
10
+ rest: OptionInk;
11
+ selected: OptionInk;
12
+ };
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.optionInk = void 0;
4
+ const color_1 = require("../../Theme/tokens/builders/color");
5
+ const accentText_1 = require("../../Theme/tokens/builders/accentText");
6
+ const outlineRung_1 = require("../../Theme/tokens/builders/outlineRung");
7
+ /** Resting and selected fills for an option; selection is the neutral ink fill, never the brand. */
8
+ const optionInk = (colors) => {
9
+ const selectedFill = colors.header[900];
10
+ const selectedInk = (0, accentText_1.onFilled)(selectedFill, colors.white, colors.black);
11
+ const rest = {
12
+ fill: colors.background[300],
13
+ hoverFill: colors.background[400],
14
+ ink: colors.text[800],
15
+ hint: (0, outlineRung_1.liftToContrast)(colors.text[700], colors.background[400], accentText_1.AA_NORMAL_TEXT),
16
+ };
17
+ const selected = {
18
+ fill: selectedFill,
19
+ hoverFill: selectedFill,
20
+ ink: selectedInk,
21
+ hint: (0, outlineRung_1.liftToContrast)((0, color_1.mix)(selectedInk, selectedFill, 0.2), selectedFill, accentText_1.AA_NORMAL_TEXT),
22
+ };
23
+ return { rest, selected };
24
+ };
25
+ exports.optionInk = optionInk;
@@ -0,0 +1,4 @@
1
+ import type { OrderStatusTimelineProps } from "./OrderStatusTimelineProps";
2
+ /** Order tracking steps: filled check, ringed dot and hollow ring markers, each backed by spoken state text. */
3
+ declare const OrderStatusTimeline: ({ steps, orientation, labels, "aria-label": ariaLabel, "data-testid": testId, }: OrderStatusTimelineProps) => import("react/jsx-runtime").JSX.Element;
4
+ export default OrderStatusTimeline;
@@ -0,0 +1,57 @@
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 lucide_react_1 = require("lucide-react");
6
+ const useCustomTheme_1 = require("../../Theme/useCustomTheme");
7
+ const motion_1 = require("../../Theme/tokens/primitives/motion");
8
+ const motion_2 = require("../../Theme/chakra/motion");
9
+ const accentText_1 = require("../../Theme/tokens/builders/accentText");
10
+ const DEFAULT_LABELS = { done: "Completed", current: "In progress", upcoming: "Upcoming" };
11
+ const MARKER = "1.5rem";
12
+ const RULE = "2px";
13
+ const Marker = ({ state, colors }) => {
14
+ const ink = colors.header[900];
15
+ const base = {
16
+ as: "span",
17
+ "aria-hidden": true,
18
+ display: "inline-flex",
19
+ alignItems: "center",
20
+ justifyContent: "center",
21
+ boxSize: MARKER,
22
+ flexShrink: 0,
23
+ borderRadius: "full",
24
+ transition: (0, motion_1.transitionFor)(["background-color", "box-shadow"]),
25
+ sx: (0, motion_2.reducedMotionSx)(),
26
+ };
27
+ if (state === "done") {
28
+ return ((0, jsx_runtime_1.jsx)(react_1.Box, { ...base, bg: ink, color: (0, accentText_1.onFilled)(ink, colors.white, colors.black), children: (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 14, strokeWidth: 3 }) }));
29
+ }
30
+ if (state === "current") {
31
+ return ((0, jsx_runtime_1.jsx)(react_1.Box, { ...base, bg: "transparent", boxShadow: `inset 0 0 0 2px ${ink}`, children: (0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", boxSize: "0.5rem", borderRadius: "full", bg: ink }) }));
32
+ }
33
+ return (0, jsx_runtime_1.jsx)(react_1.Box, { ...base, bg: "transparent", boxShadow: `inset 0 0 0 1.5px ${colors.textMuted}` });
34
+ };
35
+ const StepText = ({ step, copy, align, colors, }) => {
36
+ const active = step.state !== "upcoming";
37
+ return ((0, jsx_runtime_1.jsxs)(react_1.Box, { textAlign: align, minW: 0, children: [(0, jsx_runtime_1.jsxs)(react_1.Text, { as: "span", display: "block", fontSize: "sm", fontWeight: active ? 700 : 500, lineHeight: 1.4, color: active ? colors.header[900] : colors.textMuted, children: [(0, jsx_runtime_1.jsxs)(react_1.VisuallyHidden, { children: [copy[step.state], ": "] }), step.label] }), step.date && ((0, jsx_runtime_1.jsx)(react_1.Text, { as: "span", display: "block", fontSize: "xs", lineHeight: 1.4, color: colors.textMuted, sx: { fontVariantNumeric: "tabular-nums" }, children: step.date })), step.detail && ((0, jsx_runtime_1.jsx)(react_1.Text, { as: "span", display: "block", fontSize: "xs", lineHeight: 1.4, color: colors.textMuted, children: step.detail }))] }));
38
+ };
39
+ /** Order tracking steps: filled check, ringed dot and hollow ring markers, each backed by spoken state text. */
40
+ const OrderStatusTimeline = ({ steps, orientation = "vertical", labels, "aria-label": ariaLabel = "Order status", "data-testid": testId, }) => {
41
+ const { colors } = (0, useCustomTheme_1.useCustomTheme)();
42
+ const copy = { ...DEFAULT_LABELS, ...labels };
43
+ const filledRule = colors.header[900];
44
+ const idleRule = colors.boxborder[300];
45
+ if (orientation === "horizontal") {
46
+ return ((0, jsx_runtime_1.jsx)(react_1.Box, { as: "ol", "aria-label": ariaLabel, display: "grid", gridTemplateColumns: `repeat(${steps.length}, minmax(0, 1fr))`, m: 0, p: 0, listStyleType: "none", "data-testid": testId, children: steps.map((step, i) => {
47
+ const before = i > 0 && steps[i - 1].state === "done";
48
+ const after = step.state === "done";
49
+ return ((0, jsx_runtime_1.jsxs)(react_1.Flex, { as: "li", direction: "column", align: "center", gap: 2, px: 1, "aria-current": step.state === "current" ? "step" : undefined, "data-state": step.state, children: [(0, jsx_runtime_1.jsxs)(react_1.Flex, { align: "center", w: "100%", children: [(0, jsx_runtime_1.jsx)(react_1.Box, { flex: 1, h: RULE, bg: i === 0 ? "transparent" : before ? filledRule : idleRule }), (0, jsx_runtime_1.jsx)(Marker, { state: step.state, colors: colors }), (0, jsx_runtime_1.jsx)(react_1.Box, { flex: 1, h: RULE, bg: i === steps.length - 1 ? "transparent" : after ? filledRule : idleRule })] }), (0, jsx_runtime_1.jsx)(StepText, { step: step, copy: copy, align: "center", colors: colors })] }, step.id));
50
+ }) }));
51
+ }
52
+ return ((0, jsx_runtime_1.jsx)(react_1.Box, { as: "ol", "aria-label": ariaLabel, m: 0, p: 0, listStyleType: "none", "data-testid": testId, children: steps.map((step, i) => {
53
+ const last = i === steps.length - 1;
54
+ return ((0, jsx_runtime_1.jsxs)(react_1.Flex, { as: "li", gap: 3, "aria-current": step.state === "current" ? "step" : undefined, "data-state": step.state, children: [(0, jsx_runtime_1.jsxs)(react_1.Flex, { direction: "column", align: "center", flexShrink: 0, children: [(0, jsx_runtime_1.jsx)(Marker, { state: step.state, colors: colors }), !last && (0, jsx_runtime_1.jsx)(react_1.Box, { flex: 1, w: RULE, minH: "1.5rem", my: 1, bg: step.state === "done" ? filledRule : idleRule })] }), (0, jsx_runtime_1.jsx)(react_1.Box, { pb: last ? 0 : 4, pt: "0.125rem", flex: 1, minW: 0, children: (0, jsx_runtime_1.jsx)(StepText, { step: step, copy: copy, align: "left", colors: colors }) })] }, step.id));
55
+ }) }));
56
+ };
57
+ exports.default = OrderStatusTimeline;
@@ -0,0 +1,29 @@
1
+ /** Where a step is: finished, happening now, or still ahead. */
2
+ export type OrderStepState = "done" | "current" | "upcoming";
3
+ /** One stage of an order, e.g. Placed, Packed, Shipped, Out for delivery, Delivered. */
4
+ export interface OrderStatusStep {
5
+ id: string;
6
+ label: string;
7
+ /** Muted line under the label, e.g. "Bengaluru hub". */
8
+ detail?: string;
9
+ /** Pre-formatted date or time, e.g. "Tue, 7 Oct"; for an upcoming step this is the expected date. */
10
+ date?: string;
11
+ state: OrderStepState;
12
+ }
13
+ /** Vertical for a track page, horizontal for a compact strip on the order-success screen. */
14
+ export type OrderStatusOrientation = "vertical" | "horizontal";
15
+ /** Words read out for each state, so status never rides on the marker alone. */
16
+ export interface OrderStatusTimelineLabels {
17
+ done: string;
18
+ current: string;
19
+ upcoming: string;
20
+ }
21
+ /** Order tracking steps as an ordered list; markers pair an icon shape with screen-reader text for each state. */
22
+ export interface OrderStatusTimelineProps {
23
+ steps: OrderStatusStep[];
24
+ orientation?: OrderStatusOrientation;
25
+ labels?: Partial<OrderStatusTimelineLabels>;
26
+ /** Accessible name of the list; defaults to "Order status". */
27
+ "aria-label"?: string;
28
+ "data-testid"?: string;
29
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ import type { OrderSummaryProps } from "./OrderSummaryProps";
2
+ /** Tonal price panel: label/amount rows, a large tabular total, a calm savings banner and free-delivery progress. */
3
+ declare const OrderSummary: ({ lines, total, savings, taxNote, freeShippingProgress, hideTitle, isLoading, currency, locale, labels, "data-testid": testId, }: OrderSummaryProps) => import("react/jsx-runtime").JSX.Element;
4
+ export default OrderSummary;