@shopify/hydrogen-react 2026.4.1 → 2026.4.2

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 (595) hide show
  1. package/dist/browser-dev/AddToCartButton.mjs +60 -71
  2. package/dist/browser-dev/AddToCartButton.mjs.map +1 -1
  3. package/dist/browser-dev/BaseButton.mjs +20 -26
  4. package/dist/browser-dev/BaseButton.mjs.map +1 -1
  5. package/dist/browser-dev/BuyNowButton.mjs +40 -45
  6. package/dist/browser-dev/BuyNowButton.mjs.map +1 -1
  7. package/dist/browser-dev/CartCheckoutButton.mjs +28 -23
  8. package/dist/browser-dev/CartCheckoutButton.mjs.map +1 -1
  9. package/dist/browser-dev/CartCost.mjs +26 -22
  10. package/dist/browser-dev/CartCost.mjs.map +1 -1
  11. package/dist/browser-dev/CartLineProvider.mjs +23 -18
  12. package/dist/browser-dev/CartLineProvider.mjs.map +1 -1
  13. package/dist/browser-dev/CartLineQuantity.mjs +18 -9
  14. package/dist/browser-dev/CartLineQuantity.mjs.map +1 -1
  15. package/dist/browser-dev/CartLineQuantityAdjustButton.mjs +48 -45
  16. package/dist/browser-dev/CartLineQuantityAdjustButton.mjs.map +1 -1
  17. package/dist/browser-dev/CartProvider.mjs +315 -385
  18. package/dist/browser-dev/CartProvider.mjs.map +1 -1
  19. package/dist/browser-dev/ExternalVideo.mjs +35 -47
  20. package/dist/browser-dev/ExternalVideo.mjs.map +1 -1
  21. package/dist/browser-dev/Image.mjs +335 -340
  22. package/dist/browser-dev/Image.mjs.map +1 -1
  23. package/dist/browser-dev/MediaFile.mjs +39 -61
  24. package/dist/browser-dev/MediaFile.mjs.map +1 -1
  25. package/dist/browser-dev/ModelViewer.mjs +115 -139
  26. package/dist/browser-dev/ModelViewer.mjs.map +1 -1
  27. package/dist/browser-dev/Money.mjs +53 -39
  28. package/dist/browser-dev/Money.mjs.map +1 -1
  29. package/dist/browser-dev/ProductPrice.mjs +44 -61
  30. package/dist/browser-dev/ProductPrice.mjs.map +1 -1
  31. package/dist/browser-dev/ProductProvider.mjs +147 -179
  32. package/dist/browser-dev/ProductProvider.mjs.map +1 -1
  33. package/dist/browser-dev/RichText.components.mjs +36 -46
  34. package/dist/browser-dev/RichText.components.mjs.map +1 -1
  35. package/dist/browser-dev/RichText.mjs +111 -154
  36. package/dist/browser-dev/RichText.mjs.map +1 -1
  37. package/dist/browser-dev/ShopPayButton.mjs +53 -81
  38. package/dist/browser-dev/ShopPayButton.mjs.map +1 -1
  39. package/dist/browser-dev/ShopifyProvider.mjs +71 -84
  40. package/dist/browser-dev/ShopifyProvider.mjs.map +1 -1
  41. package/dist/browser-dev/Video.mjs +35 -52
  42. package/dist/browser-dev/Video.mjs.map +1 -1
  43. package/dist/browser-dev/analytics-constants.mjs +41 -43
  44. package/dist/browser-dev/analytics-constants.mjs.map +1 -1
  45. package/dist/browser-dev/analytics-schema-custom-storefront-customer-tracking.mjs +127 -214
  46. package/dist/browser-dev/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
  47. package/dist/browser-dev/analytics-schema-trekkie-storefront-page-view.mjs +39 -50
  48. package/dist/browser-dev/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
  49. package/dist/browser-dev/analytics-utils.mjs +78 -56
  50. package/dist/browser-dev/analytics-utils.mjs.map +1 -1
  51. package/dist/browser-dev/analytics.mjs +112 -155
  52. package/dist/browser-dev/analytics.mjs.map +1 -1
  53. package/dist/browser-dev/cart-constants.mjs +11 -15
  54. package/dist/browser-dev/cart-constants.mjs.map +1 -1
  55. package/dist/browser-dev/cart-hooks.mjs +42 -57
  56. package/dist/browser-dev/cart-hooks.mjs.map +1 -1
  57. package/dist/browser-dev/cart-queries.mjs +28 -66
  58. package/dist/browser-dev/cart-queries.mjs.map +1 -1
  59. package/dist/browser-dev/codegen.helpers.mjs +31 -20
  60. package/dist/browser-dev/codegen.helpers.mjs.map +1 -1
  61. package/dist/browser-dev/cookies-utils.mjs +44 -42
  62. package/dist/browser-dev/cookies-utils.mjs.map +1 -1
  63. package/dist/browser-dev/flatten-connection.mjs +23 -29
  64. package/dist/browser-dev/flatten-connection.mjs.map +1 -1
  65. package/dist/browser-dev/getProductOptions.mjs +248 -226
  66. package/dist/browser-dev/getProductOptions.mjs.map +1 -1
  67. package/dist/browser-dev/index.mjs +15 -70
  68. package/dist/browser-dev/load-script.mjs +38 -49
  69. package/dist/browser-dev/load-script.mjs.map +1 -1
  70. package/dist/browser-dev/node_modules/.pnpm/@xstate_fsm@2.0.0/node_modules/@xstate/fsm/es/index.mjs +175 -123
  71. package/dist/browser-dev/node_modules/.pnpm/@xstate_fsm@2.0.0/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
  72. package/dist/browser-dev/optionValueDecoder.mjs +104 -86
  73. package/dist/browser-dev/optionValueDecoder.mjs.map +1 -1
  74. package/dist/browser-dev/packages/hydrogen-react/package.mjs +6 -0
  75. package/dist/browser-dev/packages/hydrogen-react/package.mjs.map +1 -0
  76. package/dist/browser-dev/parse-metafield.mjs +122 -134
  77. package/dist/browser-dev/parse-metafield.mjs.map +1 -1
  78. package/dist/browser-dev/storefront-api-constants.mjs +6 -5
  79. package/dist/browser-dev/storefront-api-constants.mjs.map +1 -1
  80. package/dist/browser-dev/storefront-client.mjs +62 -102
  81. package/dist/browser-dev/storefront-client.mjs.map +1 -1
  82. package/dist/browser-dev/tracking-utils.mjs +68 -88
  83. package/dist/browser-dev/tracking-utils.mjs.map +1 -1
  84. package/dist/browser-dev/useCartAPIStateMachine.mjs +188 -346
  85. package/dist/browser-dev/useCartAPIStateMachine.mjs.map +1 -1
  86. package/dist/browser-dev/useCartActions.mjs +197 -172
  87. package/dist/browser-dev/useCartActions.mjs.map +1 -1
  88. package/dist/browser-dev/useMachine.mjs +50 -62
  89. package/dist/browser-dev/useMachine.mjs.map +1 -1
  90. package/dist/browser-dev/useMoney.mjs +176 -154
  91. package/dist/browser-dev/useMoney.mjs.map +1 -1
  92. package/dist/browser-dev/useSelectedOptionInUrlParam.mjs +17 -27
  93. package/dist/browser-dev/useSelectedOptionInUrlParam.mjs.map +1 -1
  94. package/dist/browser-dev/useShopifyCookies.mjs +123 -138
  95. package/dist/browser-dev/useShopifyCookies.mjs.map +1 -1
  96. package/dist/browser-prod/AddToCartButton.mjs +60 -71
  97. package/dist/browser-prod/AddToCartButton.mjs.map +1 -1
  98. package/dist/browser-prod/BaseButton.mjs +20 -26
  99. package/dist/browser-prod/BaseButton.mjs.map +1 -1
  100. package/dist/browser-prod/BuyNowButton.mjs +40 -45
  101. package/dist/browser-prod/BuyNowButton.mjs.map +1 -1
  102. package/dist/browser-prod/CartCheckoutButton.mjs +28 -23
  103. package/dist/browser-prod/CartCheckoutButton.mjs.map +1 -1
  104. package/dist/browser-prod/CartCost.mjs +26 -22
  105. package/dist/browser-prod/CartCost.mjs.map +1 -1
  106. package/dist/browser-prod/CartLineProvider.mjs +23 -18
  107. package/dist/browser-prod/CartLineProvider.mjs.map +1 -1
  108. package/dist/browser-prod/CartLineQuantity.mjs +18 -9
  109. package/dist/browser-prod/CartLineQuantity.mjs.map +1 -1
  110. package/dist/browser-prod/CartLineQuantityAdjustButton.mjs +48 -45
  111. package/dist/browser-prod/CartLineQuantityAdjustButton.mjs.map +1 -1
  112. package/dist/browser-prod/CartProvider.mjs +315 -385
  113. package/dist/browser-prod/CartProvider.mjs.map +1 -1
  114. package/dist/browser-prod/ExternalVideo.mjs +35 -47
  115. package/dist/browser-prod/ExternalVideo.mjs.map +1 -1
  116. package/dist/browser-prod/Image.mjs +326 -325
  117. package/dist/browser-prod/Image.mjs.map +1 -1
  118. package/dist/browser-prod/MediaFile.mjs +44 -63
  119. package/dist/browser-prod/MediaFile.mjs.map +1 -1
  120. package/dist/browser-prod/ModelViewer.mjs +117 -135
  121. package/dist/browser-prod/ModelViewer.mjs.map +1 -1
  122. package/dist/browser-prod/Money.mjs +53 -39
  123. package/dist/browser-prod/Money.mjs.map +1 -1
  124. package/dist/browser-prod/ProductPrice.mjs +44 -61
  125. package/dist/browser-prod/ProductPrice.mjs.map +1 -1
  126. package/dist/browser-prod/ProductProvider.mjs +147 -179
  127. package/dist/browser-prod/ProductProvider.mjs.map +1 -1
  128. package/dist/browser-prod/RichText.components.mjs +36 -46
  129. package/dist/browser-prod/RichText.components.mjs.map +1 -1
  130. package/dist/browser-prod/RichText.mjs +111 -154
  131. package/dist/browser-prod/RichText.mjs.map +1 -1
  132. package/dist/browser-prod/ShopPayButton.mjs +53 -81
  133. package/dist/browser-prod/ShopPayButton.mjs.map +1 -1
  134. package/dist/browser-prod/ShopifyProvider.mjs +71 -84
  135. package/dist/browser-prod/ShopifyProvider.mjs.map +1 -1
  136. package/dist/browser-prod/Video.mjs +35 -52
  137. package/dist/browser-prod/Video.mjs.map +1 -1
  138. package/dist/browser-prod/analytics-constants.mjs +41 -43
  139. package/dist/browser-prod/analytics-constants.mjs.map +1 -1
  140. package/dist/browser-prod/analytics-schema-custom-storefront-customer-tracking.mjs +127 -214
  141. package/dist/browser-prod/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
  142. package/dist/browser-prod/analytics-schema-trekkie-storefront-page-view.mjs +39 -50
  143. package/dist/browser-prod/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
  144. package/dist/browser-prod/analytics-utils.mjs +78 -56
  145. package/dist/browser-prod/analytics-utils.mjs.map +1 -1
  146. package/dist/browser-prod/analytics.mjs +111 -153
  147. package/dist/browser-prod/analytics.mjs.map +1 -1
  148. package/dist/browser-prod/cart-constants.mjs +11 -15
  149. package/dist/browser-prod/cart-constants.mjs.map +1 -1
  150. package/dist/browser-prod/cart-hooks.mjs +42 -57
  151. package/dist/browser-prod/cart-hooks.mjs.map +1 -1
  152. package/dist/browser-prod/cart-queries.mjs +28 -66
  153. package/dist/browser-prod/cart-queries.mjs.map +1 -1
  154. package/dist/browser-prod/codegen.helpers.mjs +31 -20
  155. package/dist/browser-prod/codegen.helpers.mjs.map +1 -1
  156. package/dist/browser-prod/cookies-utils.mjs +44 -42
  157. package/dist/browser-prod/cookies-utils.mjs.map +1 -1
  158. package/dist/browser-prod/flatten-connection.mjs +23 -25
  159. package/dist/browser-prod/flatten-connection.mjs.map +1 -1
  160. package/dist/browser-prod/getProductOptions.mjs +248 -226
  161. package/dist/browser-prod/getProductOptions.mjs.map +1 -1
  162. package/dist/browser-prod/index.mjs +15 -70
  163. package/dist/browser-prod/load-script.mjs +38 -49
  164. package/dist/browser-prod/load-script.mjs.map +1 -1
  165. package/dist/browser-prod/node_modules/.pnpm/@xstate_fsm@2.0.0/node_modules/@xstate/fsm/es/index.mjs +175 -123
  166. package/dist/browser-prod/node_modules/.pnpm/@xstate_fsm@2.0.0/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
  167. package/dist/browser-prod/optionValueDecoder.mjs +104 -86
  168. package/dist/browser-prod/optionValueDecoder.mjs.map +1 -1
  169. package/dist/browser-prod/packages/hydrogen-react/package.mjs +6 -0
  170. package/dist/browser-prod/packages/hydrogen-react/package.mjs.map +1 -0
  171. package/dist/browser-prod/parse-metafield.mjs +134 -146
  172. package/dist/browser-prod/parse-metafield.mjs.map +1 -1
  173. package/dist/browser-prod/storefront-api-constants.mjs +6 -5
  174. package/dist/browser-prod/storefront-api-constants.mjs.map +1 -1
  175. package/dist/browser-prod/storefront-client.mjs +56 -84
  176. package/dist/browser-prod/storefront-client.mjs.map +1 -1
  177. package/dist/browser-prod/tracking-utils.mjs +68 -88
  178. package/dist/browser-prod/tracking-utils.mjs.map +1 -1
  179. package/dist/browser-prod/useCartAPIStateMachine.mjs +188 -346
  180. package/dist/browser-prod/useCartAPIStateMachine.mjs.map +1 -1
  181. package/dist/browser-prod/useCartActions.mjs +197 -172
  182. package/dist/browser-prod/useCartActions.mjs.map +1 -1
  183. package/dist/browser-prod/useMachine.mjs +50 -62
  184. package/dist/browser-prod/useMachine.mjs.map +1 -1
  185. package/dist/browser-prod/useMoney.mjs +176 -154
  186. package/dist/browser-prod/useMoney.mjs.map +1 -1
  187. package/dist/browser-prod/useSelectedOptionInUrlParam.mjs +17 -27
  188. package/dist/browser-prod/useSelectedOptionInUrlParam.mjs.map +1 -1
  189. package/dist/browser-prod/useShopifyCookies.mjs +123 -138
  190. package/dist/browser-prod/useShopifyCookies.mjs.map +1 -1
  191. package/dist/node-dev/AddToCartButton.js +64 -73
  192. package/dist/node-dev/AddToCartButton.js.map +1 -1
  193. package/dist/node-dev/AddToCartButton.mjs +60 -71
  194. package/dist/node-dev/AddToCartButton.mjs.map +1 -1
  195. package/dist/node-dev/BaseButton.js +21 -26
  196. package/dist/node-dev/BaseButton.js.map +1 -1
  197. package/dist/node-dev/BaseButton.mjs +20 -26
  198. package/dist/node-dev/BaseButton.mjs.map +1 -1
  199. package/dist/node-dev/BuyNowButton.js +42 -46
  200. package/dist/node-dev/BuyNowButton.js.map +1 -1
  201. package/dist/node-dev/BuyNowButton.mjs +40 -45
  202. package/dist/node-dev/BuyNowButton.mjs.map +1 -1
  203. package/dist/node-dev/CartCheckoutButton.js +30 -24
  204. package/dist/node-dev/CartCheckoutButton.js.map +1 -1
  205. package/dist/node-dev/CartCheckoutButton.mjs +28 -23
  206. package/dist/node-dev/CartCheckoutButton.mjs.map +1 -1
  207. package/dist/node-dev/CartCost.js +27 -22
  208. package/dist/node-dev/CartCost.js.map +1 -1
  209. package/dist/node-dev/CartCost.mjs +26 -22
  210. package/dist/node-dev/CartCost.mjs.map +1 -1
  211. package/dist/node-dev/CartLineProvider.js +24 -17
  212. package/dist/node-dev/CartLineProvider.js.map +1 -1
  213. package/dist/node-dev/CartLineProvider.mjs +23 -18
  214. package/dist/node-dev/CartLineProvider.mjs.map +1 -1
  215. package/dist/node-dev/CartLineQuantity.js +19 -9
  216. package/dist/node-dev/CartLineQuantity.js.map +1 -1
  217. package/dist/node-dev/CartLineQuantity.mjs +18 -9
  218. package/dist/node-dev/CartLineQuantity.mjs.map +1 -1
  219. package/dist/node-dev/CartLineQuantityAdjustButton.js +50 -46
  220. package/dist/node-dev/CartLineQuantityAdjustButton.js.map +1 -1
  221. package/dist/node-dev/CartLineQuantityAdjustButton.mjs +48 -45
  222. package/dist/node-dev/CartLineQuantityAdjustButton.mjs.map +1 -1
  223. package/dist/node-dev/CartProvider.js +317 -385
  224. package/dist/node-dev/CartProvider.js.map +1 -1
  225. package/dist/node-dev/CartProvider.mjs +315 -385
  226. package/dist/node-dev/CartProvider.mjs.map +1 -1
  227. package/dist/node-dev/ExternalVideo.js +36 -47
  228. package/dist/node-dev/ExternalVideo.js.map +1 -1
  229. package/dist/node-dev/ExternalVideo.mjs +35 -47
  230. package/dist/node-dev/ExternalVideo.mjs.map +1 -1
  231. package/dist/node-dev/Image.js +337 -355
  232. package/dist/node-dev/Image.js.map +1 -1
  233. package/dist/node-dev/Image.mjs +335 -340
  234. package/dist/node-dev/Image.mjs.map +1 -1
  235. package/dist/node-dev/MediaFile.js +42 -63
  236. package/dist/node-dev/MediaFile.js.map +1 -1
  237. package/dist/node-dev/MediaFile.mjs +39 -61
  238. package/dist/node-dev/MediaFile.mjs.map +1 -1
  239. package/dist/node-dev/ModelViewer.js +116 -139
  240. package/dist/node-dev/ModelViewer.js.map +1 -1
  241. package/dist/node-dev/ModelViewer.mjs +115 -139
  242. package/dist/node-dev/ModelViewer.mjs.map +1 -1
  243. package/dist/node-dev/Money.js +54 -39
  244. package/dist/node-dev/Money.js.map +1 -1
  245. package/dist/node-dev/Money.mjs +53 -39
  246. package/dist/node-dev/Money.mjs.map +1 -1
  247. package/dist/node-dev/ProductPrice.js +45 -61
  248. package/dist/node-dev/ProductPrice.js.map +1 -1
  249. package/dist/node-dev/ProductPrice.mjs +44 -61
  250. package/dist/node-dev/ProductPrice.mjs.map +1 -1
  251. package/dist/node-dev/ProductProvider.js +148 -178
  252. package/dist/node-dev/ProductProvider.js.map +1 -1
  253. package/dist/node-dev/ProductProvider.mjs +147 -179
  254. package/dist/node-dev/ProductProvider.mjs.map +1 -1
  255. package/dist/node-dev/RichText.components.js +37 -46
  256. package/dist/node-dev/RichText.components.js.map +1 -1
  257. package/dist/node-dev/RichText.components.mjs +36 -46
  258. package/dist/node-dev/RichText.components.mjs.map +1 -1
  259. package/dist/node-dev/RichText.js +112 -154
  260. package/dist/node-dev/RichText.js.map +1 -1
  261. package/dist/node-dev/RichText.mjs +111 -154
  262. package/dist/node-dev/RichText.mjs.map +1 -1
  263. package/dist/node-dev/ShopPayButton.js +54 -81
  264. package/dist/node-dev/ShopPayButton.js.map +1 -1
  265. package/dist/node-dev/ShopPayButton.mjs +53 -81
  266. package/dist/node-dev/ShopPayButton.mjs.map +1 -1
  267. package/dist/node-dev/ShopifyProvider.js +73 -83
  268. package/dist/node-dev/ShopifyProvider.js.map +1 -1
  269. package/dist/node-dev/ShopifyProvider.mjs +71 -84
  270. package/dist/node-dev/ShopifyProvider.mjs.map +1 -1
  271. package/dist/node-dev/Video.js +36 -52
  272. package/dist/node-dev/Video.js.map +1 -1
  273. package/dist/node-dev/Video.mjs +35 -52
  274. package/dist/node-dev/Video.mjs.map +1 -1
  275. package/dist/node-dev/_virtual/_rolldown/runtime.js +23 -0
  276. package/dist/node-dev/analytics-constants.js +40 -39
  277. package/dist/node-dev/analytics-constants.js.map +1 -1
  278. package/dist/node-dev/analytics-constants.mjs +41 -43
  279. package/dist/node-dev/analytics-constants.mjs.map +1 -1
  280. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.js +128 -210
  281. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.js.map +1 -1
  282. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.mjs +127 -214
  283. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
  284. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.js +40 -51
  285. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.js.map +1 -1
  286. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.mjs +39 -50
  287. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
  288. package/dist/node-dev/analytics-utils.js +77 -52
  289. package/dist/node-dev/analytics-utils.js.map +1 -1
  290. package/dist/node-dev/analytics-utils.mjs +78 -56
  291. package/dist/node-dev/analytics-utils.mjs.map +1 -1
  292. package/dist/node-dev/analytics.js +114 -156
  293. package/dist/node-dev/analytics.js.map +1 -1
  294. package/dist/node-dev/analytics.mjs +112 -155
  295. package/dist/node-dev/analytics.mjs.map +1 -1
  296. package/dist/node-dev/cart-constants.js +10 -9
  297. package/dist/node-dev/cart-constants.js.map +1 -1
  298. package/dist/node-dev/cart-constants.mjs +11 -15
  299. package/dist/node-dev/cart-constants.mjs.map +1 -1
  300. package/dist/node-dev/cart-hooks.js +43 -57
  301. package/dist/node-dev/cart-hooks.js.map +1 -1
  302. package/dist/node-dev/cart-hooks.mjs +42 -57
  303. package/dist/node-dev/cart-hooks.mjs.map +1 -1
  304. package/dist/node-dev/cart-queries.js +27 -56
  305. package/dist/node-dev/cart-queries.js.map +1 -1
  306. package/dist/node-dev/cart-queries.mjs +28 -66
  307. package/dist/node-dev/cart-queries.mjs.map +1 -1
  308. package/dist/node-dev/codegen.helpers.js +30 -18
  309. package/dist/node-dev/codegen.helpers.js.map +1 -1
  310. package/dist/node-dev/codegen.helpers.mjs +31 -20
  311. package/dist/node-dev/codegen.helpers.mjs.map +1 -1
  312. package/dist/node-dev/cookies-utils.js +45 -42
  313. package/dist/node-dev/cookies-utils.js.map +1 -1
  314. package/dist/node-dev/cookies-utils.mjs +44 -42
  315. package/dist/node-dev/cookies-utils.mjs.map +1 -1
  316. package/dist/node-dev/flatten-connection.js +22 -28
  317. package/dist/node-dev/flatten-connection.js.map +1 -1
  318. package/dist/node-dev/flatten-connection.mjs +23 -29
  319. package/dist/node-dev/flatten-connection.mjs.map +1 -1
  320. package/dist/node-dev/getProductOptions.js +248 -224
  321. package/dist/node-dev/getProductOptions.js.map +1 -1
  322. package/dist/node-dev/getProductOptions.mjs +248 -226
  323. package/dist/node-dev/getProductOptions.mjs.map +1 -1
  324. package/dist/node-dev/index.js +88 -90
  325. package/dist/node-dev/index.mjs +15 -70
  326. package/dist/node-dev/load-script.js +38 -48
  327. package/dist/node-dev/load-script.js.map +1 -1
  328. package/dist/node-dev/load-script.mjs +38 -49
  329. package/dist/node-dev/load-script.mjs.map +1 -1
  330. package/dist/node-dev/node_modules/.pnpm/@xstate_fsm@2.0.0/node_modules/@xstate/fsm/es/index.js +185 -124
  331. package/dist/node-dev/node_modules/.pnpm/@xstate_fsm@2.0.0/node_modules/@xstate/fsm/es/index.js.map +1 -1
  332. package/dist/node-dev/node_modules/.pnpm/@xstate_fsm@2.0.0/node_modules/@xstate/fsm/es/index.mjs +175 -123
  333. package/dist/node-dev/node_modules/.pnpm/@xstate_fsm@2.0.0/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
  334. package/dist/node-dev/optionValueDecoder.js +103 -84
  335. package/dist/node-dev/optionValueDecoder.js.map +1 -1
  336. package/dist/node-dev/optionValueDecoder.mjs +104 -86
  337. package/dist/node-dev/optionValueDecoder.mjs.map +1 -1
  338. package/dist/node-dev/packages/hydrogen-react/package.js +6 -0
  339. package/dist/node-dev/packages/hydrogen-react/package.js.map +1 -0
  340. package/dist/node-dev/packages/hydrogen-react/package.mjs +6 -0
  341. package/dist/node-dev/packages/hydrogen-react/package.mjs.map +1 -0
  342. package/dist/node-dev/parse-metafield.js +122 -134
  343. package/dist/node-dev/parse-metafield.js.map +1 -1
  344. package/dist/node-dev/parse-metafield.mjs +122 -134
  345. package/dist/node-dev/parse-metafield.mjs.map +1 -1
  346. package/dist/node-dev/storefront-api-constants.js +5 -4
  347. package/dist/node-dev/storefront-api-constants.js.map +1 -1
  348. package/dist/node-dev/storefront-api-constants.mjs +6 -5
  349. package/dist/node-dev/storefront-api-constants.mjs.map +1 -1
  350. package/dist/node-dev/storefront-client.js +62 -101
  351. package/dist/node-dev/storefront-client.js.map +1 -1
  352. package/dist/node-dev/storefront-client.mjs +62 -102
  353. package/dist/node-dev/storefront-client.mjs.map +1 -1
  354. package/dist/node-dev/tracking-utils.js +67 -85
  355. package/dist/node-dev/tracking-utils.js.map +1 -1
  356. package/dist/node-dev/tracking-utils.mjs +68 -88
  357. package/dist/node-dev/tracking-utils.mjs.map +1 -1
  358. package/dist/node-dev/useCartAPIStateMachine.js +192 -349
  359. package/dist/node-dev/useCartAPIStateMachine.js.map +1 -1
  360. package/dist/node-dev/useCartAPIStateMachine.mjs +188 -346
  361. package/dist/node-dev/useCartAPIStateMachine.mjs.map +1 -1
  362. package/dist/node-dev/useCartActions.js +198 -172
  363. package/dist/node-dev/useCartActions.js.map +1 -1
  364. package/dist/node-dev/useCartActions.mjs +197 -172
  365. package/dist/node-dev/useCartActions.mjs.map +1 -1
  366. package/dist/node-dev/useMachine.js +50 -61
  367. package/dist/node-dev/useMachine.js.map +1 -1
  368. package/dist/node-dev/useMachine.mjs +50 -62
  369. package/dist/node-dev/useMachine.mjs.map +1 -1
  370. package/dist/node-dev/useMoney.js +177 -154
  371. package/dist/node-dev/useMoney.js.map +1 -1
  372. package/dist/node-dev/useMoney.mjs +176 -154
  373. package/dist/node-dev/useMoney.mjs.map +1 -1
  374. package/dist/node-dev/useSelectedOptionInUrlParam.js +18 -27
  375. package/dist/node-dev/useSelectedOptionInUrlParam.js.map +1 -1
  376. package/dist/node-dev/useSelectedOptionInUrlParam.mjs +17 -27
  377. package/dist/node-dev/useSelectedOptionInUrlParam.mjs.map +1 -1
  378. package/dist/node-dev/useShopifyCookies.js +124 -138
  379. package/dist/node-dev/useShopifyCookies.js.map +1 -1
  380. package/dist/node-dev/useShopifyCookies.mjs +123 -138
  381. package/dist/node-dev/useShopifyCookies.mjs.map +1 -1
  382. package/dist/node-prod/AddToCartButton.js +64 -73
  383. package/dist/node-prod/AddToCartButton.js.map +1 -1
  384. package/dist/node-prod/AddToCartButton.mjs +60 -71
  385. package/dist/node-prod/AddToCartButton.mjs.map +1 -1
  386. package/dist/node-prod/BaseButton.js +21 -26
  387. package/dist/node-prod/BaseButton.js.map +1 -1
  388. package/dist/node-prod/BaseButton.mjs +20 -26
  389. package/dist/node-prod/BaseButton.mjs.map +1 -1
  390. package/dist/node-prod/BuyNowButton.js +42 -46
  391. package/dist/node-prod/BuyNowButton.js.map +1 -1
  392. package/dist/node-prod/BuyNowButton.mjs +40 -45
  393. package/dist/node-prod/BuyNowButton.mjs.map +1 -1
  394. package/dist/node-prod/CartCheckoutButton.js +30 -24
  395. package/dist/node-prod/CartCheckoutButton.js.map +1 -1
  396. package/dist/node-prod/CartCheckoutButton.mjs +28 -23
  397. package/dist/node-prod/CartCheckoutButton.mjs.map +1 -1
  398. package/dist/node-prod/CartCost.js +27 -22
  399. package/dist/node-prod/CartCost.js.map +1 -1
  400. package/dist/node-prod/CartCost.mjs +26 -22
  401. package/dist/node-prod/CartCost.mjs.map +1 -1
  402. package/dist/node-prod/CartLineProvider.js +24 -17
  403. package/dist/node-prod/CartLineProvider.js.map +1 -1
  404. package/dist/node-prod/CartLineProvider.mjs +23 -18
  405. package/dist/node-prod/CartLineProvider.mjs.map +1 -1
  406. package/dist/node-prod/CartLineQuantity.js +19 -9
  407. package/dist/node-prod/CartLineQuantity.js.map +1 -1
  408. package/dist/node-prod/CartLineQuantity.mjs +18 -9
  409. package/dist/node-prod/CartLineQuantity.mjs.map +1 -1
  410. package/dist/node-prod/CartLineQuantityAdjustButton.js +50 -46
  411. package/dist/node-prod/CartLineQuantityAdjustButton.js.map +1 -1
  412. package/dist/node-prod/CartLineQuantityAdjustButton.mjs +48 -45
  413. package/dist/node-prod/CartLineQuantityAdjustButton.mjs.map +1 -1
  414. package/dist/node-prod/CartProvider.js +317 -385
  415. package/dist/node-prod/CartProvider.js.map +1 -1
  416. package/dist/node-prod/CartProvider.mjs +315 -385
  417. package/dist/node-prod/CartProvider.mjs.map +1 -1
  418. package/dist/node-prod/ExternalVideo.js +36 -47
  419. package/dist/node-prod/ExternalVideo.js.map +1 -1
  420. package/dist/node-prod/ExternalVideo.mjs +35 -47
  421. package/dist/node-prod/ExternalVideo.mjs.map +1 -1
  422. package/dist/node-prod/Image.js +328 -340
  423. package/dist/node-prod/Image.js.map +1 -1
  424. package/dist/node-prod/Image.mjs +326 -325
  425. package/dist/node-prod/Image.mjs.map +1 -1
  426. package/dist/node-prod/MediaFile.js +47 -65
  427. package/dist/node-prod/MediaFile.js.map +1 -1
  428. package/dist/node-prod/MediaFile.mjs +44 -63
  429. package/dist/node-prod/MediaFile.mjs.map +1 -1
  430. package/dist/node-prod/ModelViewer.js +118 -135
  431. package/dist/node-prod/ModelViewer.js.map +1 -1
  432. package/dist/node-prod/ModelViewer.mjs +117 -135
  433. package/dist/node-prod/ModelViewer.mjs.map +1 -1
  434. package/dist/node-prod/Money.js +54 -39
  435. package/dist/node-prod/Money.js.map +1 -1
  436. package/dist/node-prod/Money.mjs +53 -39
  437. package/dist/node-prod/Money.mjs.map +1 -1
  438. package/dist/node-prod/ProductPrice.js +45 -61
  439. package/dist/node-prod/ProductPrice.js.map +1 -1
  440. package/dist/node-prod/ProductPrice.mjs +44 -61
  441. package/dist/node-prod/ProductPrice.mjs.map +1 -1
  442. package/dist/node-prod/ProductProvider.js +148 -178
  443. package/dist/node-prod/ProductProvider.js.map +1 -1
  444. package/dist/node-prod/ProductProvider.mjs +147 -179
  445. package/dist/node-prod/ProductProvider.mjs.map +1 -1
  446. package/dist/node-prod/RichText.components.js +37 -46
  447. package/dist/node-prod/RichText.components.js.map +1 -1
  448. package/dist/node-prod/RichText.components.mjs +36 -46
  449. package/dist/node-prod/RichText.components.mjs.map +1 -1
  450. package/dist/node-prod/RichText.js +112 -154
  451. package/dist/node-prod/RichText.js.map +1 -1
  452. package/dist/node-prod/RichText.mjs +111 -154
  453. package/dist/node-prod/RichText.mjs.map +1 -1
  454. package/dist/node-prod/ShopPayButton.js +54 -81
  455. package/dist/node-prod/ShopPayButton.js.map +1 -1
  456. package/dist/node-prod/ShopPayButton.mjs +53 -81
  457. package/dist/node-prod/ShopPayButton.mjs.map +1 -1
  458. package/dist/node-prod/ShopifyProvider.js +73 -83
  459. package/dist/node-prod/ShopifyProvider.js.map +1 -1
  460. package/dist/node-prod/ShopifyProvider.mjs +71 -84
  461. package/dist/node-prod/ShopifyProvider.mjs.map +1 -1
  462. package/dist/node-prod/Video.js +36 -52
  463. package/dist/node-prod/Video.js.map +1 -1
  464. package/dist/node-prod/Video.mjs +35 -52
  465. package/dist/node-prod/Video.mjs.map +1 -1
  466. package/dist/node-prod/_virtual/_rolldown/runtime.js +23 -0
  467. package/dist/node-prod/analytics-constants.js +40 -39
  468. package/dist/node-prod/analytics-constants.js.map +1 -1
  469. package/dist/node-prod/analytics-constants.mjs +41 -43
  470. package/dist/node-prod/analytics-constants.mjs.map +1 -1
  471. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.js +128 -210
  472. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.js.map +1 -1
  473. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.mjs +127 -214
  474. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
  475. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.js +40 -51
  476. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.js.map +1 -1
  477. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.mjs +39 -50
  478. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
  479. package/dist/node-prod/analytics-utils.js +77 -52
  480. package/dist/node-prod/analytics-utils.js.map +1 -1
  481. package/dist/node-prod/analytics-utils.mjs +78 -56
  482. package/dist/node-prod/analytics-utils.mjs.map +1 -1
  483. package/dist/node-prod/analytics.js +113 -154
  484. package/dist/node-prod/analytics.js.map +1 -1
  485. package/dist/node-prod/analytics.mjs +111 -153
  486. package/dist/node-prod/analytics.mjs.map +1 -1
  487. package/dist/node-prod/cart-constants.js +10 -9
  488. package/dist/node-prod/cart-constants.js.map +1 -1
  489. package/dist/node-prod/cart-constants.mjs +11 -15
  490. package/dist/node-prod/cart-constants.mjs.map +1 -1
  491. package/dist/node-prod/cart-hooks.js +43 -57
  492. package/dist/node-prod/cart-hooks.js.map +1 -1
  493. package/dist/node-prod/cart-hooks.mjs +42 -57
  494. package/dist/node-prod/cart-hooks.mjs.map +1 -1
  495. package/dist/node-prod/cart-queries.js +27 -56
  496. package/dist/node-prod/cart-queries.js.map +1 -1
  497. package/dist/node-prod/cart-queries.mjs +28 -66
  498. package/dist/node-prod/cart-queries.mjs.map +1 -1
  499. package/dist/node-prod/codegen.helpers.js +30 -18
  500. package/dist/node-prod/codegen.helpers.js.map +1 -1
  501. package/dist/node-prod/codegen.helpers.mjs +31 -20
  502. package/dist/node-prod/codegen.helpers.mjs.map +1 -1
  503. package/dist/node-prod/cookies-utils.js +45 -42
  504. package/dist/node-prod/cookies-utils.js.map +1 -1
  505. package/dist/node-prod/cookies-utils.mjs +44 -42
  506. package/dist/node-prod/cookies-utils.mjs.map +1 -1
  507. package/dist/node-prod/flatten-connection.js +22 -24
  508. package/dist/node-prod/flatten-connection.js.map +1 -1
  509. package/dist/node-prod/flatten-connection.mjs +23 -25
  510. package/dist/node-prod/flatten-connection.mjs.map +1 -1
  511. package/dist/node-prod/getProductOptions.js +248 -224
  512. package/dist/node-prod/getProductOptions.js.map +1 -1
  513. package/dist/node-prod/getProductOptions.mjs +248 -226
  514. package/dist/node-prod/getProductOptions.mjs.map +1 -1
  515. package/dist/node-prod/index.js +88 -90
  516. package/dist/node-prod/index.mjs +15 -70
  517. package/dist/node-prod/load-script.js +38 -48
  518. package/dist/node-prod/load-script.js.map +1 -1
  519. package/dist/node-prod/load-script.mjs +38 -49
  520. package/dist/node-prod/load-script.mjs.map +1 -1
  521. package/dist/node-prod/node_modules/.pnpm/@xstate_fsm@2.0.0/node_modules/@xstate/fsm/es/index.js +185 -124
  522. package/dist/node-prod/node_modules/.pnpm/@xstate_fsm@2.0.0/node_modules/@xstate/fsm/es/index.js.map +1 -1
  523. package/dist/node-prod/node_modules/.pnpm/@xstate_fsm@2.0.0/node_modules/@xstate/fsm/es/index.mjs +175 -123
  524. package/dist/node-prod/node_modules/.pnpm/@xstate_fsm@2.0.0/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
  525. package/dist/node-prod/optionValueDecoder.js +103 -84
  526. package/dist/node-prod/optionValueDecoder.js.map +1 -1
  527. package/dist/node-prod/optionValueDecoder.mjs +104 -86
  528. package/dist/node-prod/optionValueDecoder.mjs.map +1 -1
  529. package/dist/node-prod/packages/hydrogen-react/package.js +6 -0
  530. package/dist/node-prod/packages/hydrogen-react/package.js.map +1 -0
  531. package/dist/node-prod/packages/hydrogen-react/package.mjs +6 -0
  532. package/dist/node-prod/packages/hydrogen-react/package.mjs.map +1 -0
  533. package/dist/node-prod/parse-metafield.js +134 -146
  534. package/dist/node-prod/parse-metafield.js.map +1 -1
  535. package/dist/node-prod/parse-metafield.mjs +134 -146
  536. package/dist/node-prod/parse-metafield.mjs.map +1 -1
  537. package/dist/node-prod/storefront-api-constants.js +5 -4
  538. package/dist/node-prod/storefront-api-constants.js.map +1 -1
  539. package/dist/node-prod/storefront-api-constants.mjs +6 -5
  540. package/dist/node-prod/storefront-api-constants.mjs.map +1 -1
  541. package/dist/node-prod/storefront-client.js +56 -83
  542. package/dist/node-prod/storefront-client.js.map +1 -1
  543. package/dist/node-prod/storefront-client.mjs +56 -84
  544. package/dist/node-prod/storefront-client.mjs.map +1 -1
  545. package/dist/node-prod/tracking-utils.js +67 -85
  546. package/dist/node-prod/tracking-utils.js.map +1 -1
  547. package/dist/node-prod/tracking-utils.mjs +68 -88
  548. package/dist/node-prod/tracking-utils.mjs.map +1 -1
  549. package/dist/node-prod/useCartAPIStateMachine.js +192 -349
  550. package/dist/node-prod/useCartAPIStateMachine.js.map +1 -1
  551. package/dist/node-prod/useCartAPIStateMachine.mjs +188 -346
  552. package/dist/node-prod/useCartAPIStateMachine.mjs.map +1 -1
  553. package/dist/node-prod/useCartActions.js +198 -172
  554. package/dist/node-prod/useCartActions.js.map +1 -1
  555. package/dist/node-prod/useCartActions.mjs +197 -172
  556. package/dist/node-prod/useCartActions.mjs.map +1 -1
  557. package/dist/node-prod/useMachine.js +50 -61
  558. package/dist/node-prod/useMachine.js.map +1 -1
  559. package/dist/node-prod/useMachine.mjs +50 -62
  560. package/dist/node-prod/useMachine.mjs.map +1 -1
  561. package/dist/node-prod/useMoney.js +177 -154
  562. package/dist/node-prod/useMoney.js.map +1 -1
  563. package/dist/node-prod/useMoney.mjs +176 -154
  564. package/dist/node-prod/useMoney.mjs.map +1 -1
  565. package/dist/node-prod/useSelectedOptionInUrlParam.js +18 -27
  566. package/dist/node-prod/useSelectedOptionInUrlParam.js.map +1 -1
  567. package/dist/node-prod/useSelectedOptionInUrlParam.mjs +17 -27
  568. package/dist/node-prod/useSelectedOptionInUrlParam.mjs.map +1 -1
  569. package/dist/node-prod/useShopifyCookies.js +124 -138
  570. package/dist/node-prod/useShopifyCookies.js.map +1 -1
  571. package/dist/node-prod/useShopifyCookies.mjs +123 -138
  572. package/dist/node-prod/useShopifyCookies.mjs.map +1 -1
  573. package/dist/umd/hydrogen-react.dev.js +3930 -4418
  574. package/dist/umd/hydrogen-react.dev.js.map +1 -1
  575. package/dist/umd/hydrogen-react.prod.js +35 -49
  576. package/dist/umd/hydrogen-react.prod.js.map +1 -1
  577. package/package.json +5 -5
  578. package/dist/browser-dev/index.mjs.map +0 -1
  579. package/dist/browser-dev/packages/hydrogen-react/package.json.mjs +0 -5
  580. package/dist/browser-dev/packages/hydrogen-react/package.json.mjs.map +0 -1
  581. package/dist/browser-prod/index.mjs.map +0 -1
  582. package/dist/browser-prod/packages/hydrogen-react/package.json.mjs +0 -5
  583. package/dist/browser-prod/packages/hydrogen-react/package.json.mjs.map +0 -1
  584. package/dist/node-dev/index.js.map +0 -1
  585. package/dist/node-dev/index.mjs.map +0 -1
  586. package/dist/node-dev/packages/hydrogen-react/package.json.js +0 -5
  587. package/dist/node-dev/packages/hydrogen-react/package.json.js.map +0 -1
  588. package/dist/node-dev/packages/hydrogen-react/package.json.mjs +0 -5
  589. package/dist/node-dev/packages/hydrogen-react/package.json.mjs.map +0 -1
  590. package/dist/node-prod/index.js.map +0 -1
  591. package/dist/node-prod/index.mjs.map +0 -1
  592. package/dist/node-prod/packages/hydrogen-react/package.json.js +0 -5
  593. package/dist/node-prod/packages/hydrogen-react/package.json.js.map +0 -1
  594. package/dist/node-prod/packages/hydrogen-react/package.json.mjs +0 -5
  595. package/dist/node-prod/packages/hydrogen-react/package.json.mjs.map +0 -1
@@ -1,6 +1,10 @@
1
- import { jsx } from "react/jsx-runtime";
2
1
  import * as React from "react";
3
- const IMAGE_FRAGMENT = `#graphql
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/Image.tsx
4
+ /**
5
+ * A Storefront API GraphQL fragment that can be used to query for an image.
6
+ */
7
+ var IMAGE_FRAGMENT = `#graphql
4
8
  fragment Image on Image {
5
9
  altText
6
10
  url
@@ -8,359 +12,350 @@ const IMAGE_FRAGMENT = `#graphql
8
12
  height
9
13
  }
10
14
  `;
11
- const Image = React.forwardRef(
12
- ({
13
- alt,
14
- aspectRatio,
15
- crop = "center",
16
- data,
17
- decoding = "async",
18
- height = "auto",
19
- loader = shopifyLoader,
20
- loading = "lazy",
21
- sizes,
22
- src,
23
- srcSetOptions = {
24
- intervals: 15,
25
- startingWidth: 200,
26
- incrementSize: 200,
27
- placeholderWidth: 100
28
- },
29
- width = "100%",
30
- ...passthroughProps
31
- }, ref) => {
32
- const normalizedData = React.useMemo(() => {
33
- const dataWidth = (data == null ? void 0 : data.width) && (data == null ? void 0 : data.height) ? data == null ? void 0 : data.width : void 0;
34
- const dataHeight = (data == null ? void 0 : data.width) && (data == null ? void 0 : data.height) ? data == null ? void 0 : data.height : void 0;
35
- return {
36
- width: dataWidth,
37
- height: dataHeight,
38
- unitsMatch: Boolean(unitsMatch(dataWidth, dataHeight))
39
- };
40
- }, [data]);
41
- const normalizedProps = React.useMemo(() => {
42
- const nWidthProp = width || "100%";
43
- const widthParts = getUnitValueParts(nWidthProp.toString());
44
- const nWidth = `${widthParts.number}${widthParts.unit}`;
45
- const autoHeight = height === void 0 || height === null;
46
- const heightParts = autoHeight ? null : getUnitValueParts(height.toString());
47
- const fixedHeight = heightParts ? `${heightParts.number}${heightParts.unit}` : "";
48
- const nHeight = autoHeight ? "auto" : fixedHeight;
49
- const nSrc = src || (data == null ? void 0 : data.url);
50
- if (!nSrc) {
51
- console.warn(
52
- `No src or data.url provided to Image component.`,
53
- (passthroughProps == null ? void 0 : passthroughProps.key) || ""
54
- );
55
- }
56
- const nAlt = (data == null ? void 0 : data.altText) && !alt ? data == null ? void 0 : data.altText : alt || "";
57
- const nAspectRatio = aspectRatio ? aspectRatio : normalizedData.unitsMatch ? [
58
- getNormalizedFixedUnit(normalizedData.width),
59
- getNormalizedFixedUnit(normalizedData.height)
60
- ].join("/") : void 0;
61
- return {
62
- width: nWidth,
63
- height: nHeight,
64
- src: nSrc,
65
- alt: nAlt,
66
- aspectRatio: nAspectRatio
67
- };
68
- }, [
69
- width,
70
- height,
71
- src,
72
- data,
73
- alt,
74
- aspectRatio,
75
- normalizedData,
76
- passthroughProps == null ? void 0 : passthroughProps.key
77
- ]);
78
- const { intervals, startingWidth, incrementSize, placeholderWidth } = srcSetOptions;
79
- const imageWidths = React.useMemo(() => {
80
- return generateImageWidths(
81
- width,
82
- intervals,
83
- startingWidth,
84
- incrementSize
85
- );
86
- }, [width, intervals, startingWidth, incrementSize]);
87
- const fixedWidth = isFixedWidth(normalizedProps.width);
88
- if (!sizes && !fixedWidth) {
89
- console.warn(
90
- [
91
- "No sizes prop provided to Image component,",
92
- "you may be loading unnecessarily large images.",
93
- `Image used is ${src || (data == null ? void 0 : data.url) || (passthroughProps == null ? void 0 : passthroughProps.key) || "unknown"}`
94
- ].join(" ")
95
- );
96
- }
97
- if (fixedWidth) {
98
- return /* @__PURE__ */ jsx(
99
- FixedWidthImage,
100
- {
101
- aspectRatio,
102
- crop,
103
- decoding,
104
- height,
105
- imageWidths,
106
- loader,
107
- loading,
108
- normalizedProps,
109
- passthroughProps,
110
- ref,
111
- width,
112
- data
113
- }
114
- );
115
- } else {
116
- return /* @__PURE__ */ jsx(
117
- FluidImage,
118
- {
119
- aspectRatio,
120
- crop,
121
- decoding,
122
- imageWidths,
123
- loader,
124
- loading,
125
- normalizedProps,
126
- passthroughProps,
127
- placeholderWidth,
128
- ref,
129
- sizes,
130
- data
131
- }
132
- );
133
- }
134
- }
135
- );
136
- const FixedWidthImage = React.forwardRef(
137
- ({
138
- aspectRatio,
139
- crop,
140
- decoding,
141
- height,
142
- imageWidths,
143
- loader = shopifyLoader,
144
- loading,
145
- normalizedProps,
146
- passthroughProps,
147
- width,
148
- data
149
- }, ref) => {
150
- const fixed = React.useMemo(() => {
151
- const intWidth = getNormalizedFixedUnit(width);
152
- const intHeight = getNormalizedFixedUnit(height);
153
- const fixedAspectRatio = aspectRatio ? aspectRatio : unitsMatch(normalizedProps.width, normalizedProps.height) ? [intWidth, intHeight].join("/") : normalizedProps.aspectRatio ? normalizedProps.aspectRatio : void 0;
154
- const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, fixedAspectRatio, crop, {
155
- width: (data == null ? void 0 : data.width) ?? void 0,
156
- height: (data == null ? void 0 : data.height) ?? void 0
157
- });
158
- const fixedHeight = intHeight ? intHeight : fixedAspectRatio && intWidth ? intWidth * (parseAspectRatio(fixedAspectRatio) ?? 1) : void 0;
159
- const srcSet = generateSrcSet(normalizedProps.src, sizesArray, loader);
160
- const src = loader({
161
- src: normalizedProps.src,
162
- width: intWidth,
163
- height: fixedHeight,
164
- crop: normalizedProps.height === "auto" ? void 0 : crop
165
- });
166
- return {
167
- width: intWidth,
168
- aspectRatio: fixedAspectRatio,
169
- height: fixedHeight,
170
- srcSet,
171
- src
172
- };
173
- }, [
174
- aspectRatio,
175
- crop,
176
- data,
177
- height,
178
- imageWidths,
179
- loader,
180
- normalizedProps,
181
- width
182
- ]);
183
- return /* @__PURE__ */ jsx(
184
- "img",
185
- {
186
- ref,
187
- alt: normalizedProps.alt,
188
- decoding,
189
- height: fixed.height,
190
- loading,
191
- src: fixed.src,
192
- srcSet: fixed.srcSet,
193
- width: fixed.width,
194
- style: {
195
- aspectRatio: fixed.aspectRatio,
196
- ...passthroughProps.style
197
- },
198
- ...passthroughProps
199
- }
200
- );
201
- }
202
- );
203
- const FluidImage = React.forwardRef(
204
- ({
205
- crop,
206
- decoding,
207
- imageWidths,
208
- loader = shopifyLoader,
209
- loading,
210
- normalizedProps,
211
- passthroughProps,
212
- placeholderWidth,
213
- sizes,
214
- data
215
- }, ref) => {
216
- const fluid = React.useMemo(() => {
217
- const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, normalizedProps.aspectRatio, crop, {
218
- width: (data == null ? void 0 : data.width) ?? void 0,
219
- height: (data == null ? void 0 : data.height) ?? void 0
220
- });
221
- const placeholderHeight = normalizedProps.aspectRatio && placeholderWidth ? placeholderWidth * (parseAspectRatio(normalizedProps.aspectRatio) ?? 1) : void 0;
222
- const srcSet = generateSrcSet(normalizedProps.src, sizesArray, loader);
223
- const src = loader({
224
- src: normalizedProps.src,
225
- width: placeholderWidth,
226
- height: placeholderHeight,
227
- crop
228
- });
229
- return {
230
- placeholderHeight,
231
- srcSet,
232
- src
233
- };
234
- }, [crop, data, imageWidths, loader, normalizedProps, placeholderWidth]);
235
- return /* @__PURE__ */ jsx(
236
- "img",
237
- {
238
- ref,
239
- alt: normalizedProps.alt,
240
- decoding,
241
- height: fluid.placeholderHeight,
242
- loading,
243
- sizes,
244
- src: fluid.src,
245
- srcSet: fluid.srcSet,
246
- width: placeholderWidth,
247
- ...passthroughProps,
248
- style: {
249
- width: normalizedProps.width,
250
- aspectRatio: normalizedProps.aspectRatio,
251
- ...passthroughProps.style
252
- }
253
- }
254
- );
255
- }
256
- );
257
- const PLACEHOLDER_DOMAIN = "https://placeholder.shopify.com";
15
+ /**
16
+ * Hydrogen’s Image component is a wrapper around the HTML image element.
17
+ * It supports the same props as the HTML `img` element, but automatically
18
+ * generates the srcSet and sizes attributes for you. For most use cases,
19
+ * you’ll want to set the `aspectRatio` prop to ensure the image is sized
20
+ * correctly.
21
+ *
22
+ * @remarks
23
+ * - `decoding` is set to `async` by default.
24
+ * - `loading` is set to `lazy` by default.
25
+ * - `alt` will automatically be set to the `altText` from the Storefront API if passed in the `data` prop
26
+ * - `src` will automatically be set to the `url` from the Storefront API if passed in the `data` prop
27
+ *
28
+ * @example
29
+ * A responsive image with a 4:5 aspect ratio:
30
+ * ```
31
+ * <Image
32
+ * data={product.featuredImage}
33
+ * aspectRatio="4/5"
34
+ * sizes="(min-width: 45em) 40vw, 100vw"
35
+ * />
36
+ * ```
37
+ * @example
38
+ * A fixed size image:
39
+ * ```
40
+ * <Image
41
+ * data={product.featuredImage}
42
+ * width={100}
43
+ * height={100}
44
+ * />
45
+ * ```
46
+ *
47
+ * {@link https://shopify.dev/docs/api/hydrogen-react/components/image}
48
+ * @publicDocs
49
+ */
50
+ var Image = React.forwardRef(({ alt, aspectRatio, crop = "center", data, decoding = "async", height = "auto", loader = shopifyLoader, loading = "lazy", sizes, src, srcSetOptions = {
51
+ intervals: 15,
52
+ startingWidth: 200,
53
+ incrementSize: 200,
54
+ placeholderWidth: 100
55
+ }, width = "100%", ...passthroughProps }, ref) => {
56
+ const normalizedData = React.useMemo(() => {
57
+ const dataWidth = data?.width && data?.height ? data?.width : void 0;
58
+ const dataHeight = data?.width && data?.height ? data?.height : void 0;
59
+ return {
60
+ width: dataWidth,
61
+ height: dataHeight,
62
+ unitsMatch: Boolean(unitsMatch(dataWidth, dataHeight))
63
+ };
64
+ }, [data]);
65
+ const normalizedProps = React.useMemo(() => {
66
+ const widthParts = getUnitValueParts((width || "100%").toString());
67
+ const nWidth = `${widthParts.number}${widthParts.unit}`;
68
+ const autoHeight = height === void 0 || height === null;
69
+ const heightParts = autoHeight ? null : getUnitValueParts(height.toString());
70
+ const fixedHeight = heightParts ? `${heightParts.number}${heightParts.unit}` : "";
71
+ const nHeight = autoHeight ? "auto" : fixedHeight;
72
+ const nSrc = src || data?.url;
73
+ if (!nSrc) console.warn(`No src or data.url provided to Image component.`, passthroughProps?.key || "");
74
+ return {
75
+ width: nWidth,
76
+ height: nHeight,
77
+ src: nSrc,
78
+ alt: data?.altText && !alt ? data?.altText : alt || "",
79
+ aspectRatio: aspectRatio ? aspectRatio : normalizedData.unitsMatch ? [getNormalizedFixedUnit(normalizedData.width), getNormalizedFixedUnit(normalizedData.height)].join("/") : void 0
80
+ };
81
+ }, [
82
+ width,
83
+ height,
84
+ src,
85
+ data,
86
+ alt,
87
+ aspectRatio,
88
+ normalizedData,
89
+ passthroughProps?.key
90
+ ]);
91
+ const { intervals, startingWidth, incrementSize, placeholderWidth } = srcSetOptions;
92
+ const imageWidths = React.useMemo(() => {
93
+ return generateImageWidths(width, intervals, startingWidth, incrementSize);
94
+ }, [
95
+ width,
96
+ intervals,
97
+ startingWidth,
98
+ incrementSize
99
+ ]);
100
+ const fixedWidth = isFixedWidth(normalizedProps.width);
101
+ if (!sizes && !fixedWidth) console.warn([
102
+ "No sizes prop provided to Image component,",
103
+ "you may be loading unnecessarily large images.",
104
+ `Image used is ${src || data?.url || passthroughProps?.key || "unknown"}`
105
+ ].join(" "));
106
+ if (fixedWidth) return /* @__PURE__ */ jsx(FixedWidthImage, {
107
+ aspectRatio,
108
+ crop,
109
+ decoding,
110
+ height,
111
+ imageWidths,
112
+ loader,
113
+ loading,
114
+ normalizedProps,
115
+ passthroughProps,
116
+ ref,
117
+ width,
118
+ data
119
+ });
120
+ else return /* @__PURE__ */ jsx(FluidImage, {
121
+ aspectRatio,
122
+ crop,
123
+ decoding,
124
+ imageWidths,
125
+ loader,
126
+ loading,
127
+ normalizedProps,
128
+ passthroughProps,
129
+ placeholderWidth,
130
+ ref,
131
+ sizes,
132
+ data
133
+ });
134
+ });
135
+ var FixedWidthImage = React.forwardRef(({ aspectRatio, crop, decoding, height, imageWidths, loader = shopifyLoader, loading, normalizedProps, passthroughProps, width, data }, ref) => {
136
+ const fixed = React.useMemo(() => {
137
+ const intWidth = getNormalizedFixedUnit(width);
138
+ const intHeight = getNormalizedFixedUnit(height);
139
+ const fixedAspectRatio = aspectRatio ? aspectRatio : unitsMatch(normalizedProps.width, normalizedProps.height) ? [intWidth, intHeight].join("/") : normalizedProps.aspectRatio ? normalizedProps.aspectRatio : void 0;
140
+ const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, fixedAspectRatio, crop, {
141
+ width: data?.width ?? void 0,
142
+ height: data?.height ?? void 0
143
+ });
144
+ const fixedHeight = intHeight ? intHeight : fixedAspectRatio && intWidth ? intWidth * (parseAspectRatio(fixedAspectRatio) ?? 1) : void 0;
145
+ return {
146
+ width: intWidth,
147
+ aspectRatio: fixedAspectRatio,
148
+ height: fixedHeight,
149
+ srcSet: generateSrcSet(normalizedProps.src, sizesArray, loader),
150
+ src: loader({
151
+ src: normalizedProps.src,
152
+ width: intWidth,
153
+ height: fixedHeight,
154
+ crop: normalizedProps.height === "auto" ? void 0 : crop
155
+ })
156
+ };
157
+ }, [
158
+ aspectRatio,
159
+ crop,
160
+ data,
161
+ height,
162
+ imageWidths,
163
+ loader,
164
+ normalizedProps,
165
+ width
166
+ ]);
167
+ return /* @__PURE__ */ jsx("img", {
168
+ ref,
169
+ alt: normalizedProps.alt,
170
+ decoding,
171
+ height: fixed.height,
172
+ loading,
173
+ src: fixed.src,
174
+ srcSet: fixed.srcSet,
175
+ width: fixed.width,
176
+ style: {
177
+ aspectRatio: fixed.aspectRatio,
178
+ ...passthroughProps.style
179
+ },
180
+ ...passthroughProps
181
+ });
182
+ });
183
+ var FluidImage = React.forwardRef(({ crop, decoding, imageWidths, loader = shopifyLoader, loading, normalizedProps, passthroughProps, placeholderWidth, sizes, data }, ref) => {
184
+ const fluid = React.useMemo(() => {
185
+ const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, normalizedProps.aspectRatio, crop, {
186
+ width: data?.width ?? void 0,
187
+ height: data?.height ?? void 0
188
+ });
189
+ const placeholderHeight = normalizedProps.aspectRatio && placeholderWidth ? placeholderWidth * (parseAspectRatio(normalizedProps.aspectRatio) ?? 1) : void 0;
190
+ return {
191
+ placeholderHeight,
192
+ srcSet: generateSrcSet(normalizedProps.src, sizesArray, loader),
193
+ src: loader({
194
+ src: normalizedProps.src,
195
+ width: placeholderWidth,
196
+ height: placeholderHeight,
197
+ crop
198
+ })
199
+ };
200
+ }, [
201
+ crop,
202
+ data,
203
+ imageWidths,
204
+ loader,
205
+ normalizedProps,
206
+ placeholderWidth
207
+ ]);
208
+ return /* @__PURE__ */ jsx("img", {
209
+ ref,
210
+ alt: normalizedProps.alt,
211
+ decoding,
212
+ height: fluid.placeholderHeight,
213
+ loading,
214
+ sizes,
215
+ src: fluid.src,
216
+ srcSet: fluid.srcSet,
217
+ width: placeholderWidth,
218
+ ...passthroughProps,
219
+ style: {
220
+ width: normalizedProps.width,
221
+ aspectRatio: normalizedProps.aspectRatio,
222
+ ...passthroughProps.style
223
+ }
224
+ });
225
+ });
226
+ /**
227
+ * The shopifyLoader function is a simple utility function that takes a src, width,
228
+ * height, and crop and returns a string that can be used as the src for an image.
229
+ * It can be used with the Hydrogen Image component or with the next/image component.
230
+ * (or any others that accept equivalent configuration)
231
+ * @param src - The source URL of the image, e.g. `https://cdn.shopify.com/static/sample-images/garnished.jpeg`
232
+ * @param width - The width of the image, e.g. `100`
233
+ * @param height - The height of the image, e.g. `100`
234
+ * @param crop - The crop of the image, e.g. `center`
235
+ * @returns A Shopify image URL with the correct query parameters, e.g. `https://cdn.shopify.com/static/sample-images/garnished.jpeg?width=100&height=100&crop=center`
236
+ *
237
+ * @example
238
+ * ```
239
+ * shopifyLoader({
240
+ * src: 'https://cdn.shopify.com/static/sample-images/garnished.jpeg',
241
+ * width: 100,
242
+ * height: 100,
243
+ * crop: 'center',
244
+ * })
245
+ * ```
246
+ */
247
+ var PLACEHOLDER_DOMAIN = "https://placeholder.shopify.com";
258
248
  function shopifyLoader({ src, width, height, crop }) {
259
- if (!src) {
260
- return "";
261
- }
262
- const url = new URL(src, PLACEHOLDER_DOMAIN);
263
- if (width) {
264
- url.searchParams.append("width", Math.round(width).toString());
265
- }
266
- if (height) {
267
- url.searchParams.append("height", Math.round(height).toString());
268
- }
269
- if (crop) {
270
- url.searchParams.append("crop", crop);
271
- }
272
- return url.href.replace(PLACEHOLDER_DOMAIN, "");
249
+ if (!src) return "";
250
+ const url = new URL(src, PLACEHOLDER_DOMAIN);
251
+ if (width) url.searchParams.append("width", Math.round(width).toString());
252
+ if (height) url.searchParams.append("height", Math.round(height).toString());
253
+ if (crop) url.searchParams.append("crop", crop);
254
+ return url.href.replace(PLACEHOLDER_DOMAIN, "");
273
255
  }
256
+ /**
257
+ * Checks whether the width and height share the same unit type
258
+ * @param width - The width of the image, e.g. 100% | 10px
259
+ * @param height - The height of the image, e.g. auto | 100px
260
+ * @returns Whether the width and height share the same unit type (boolean)
261
+ */
274
262
  function unitsMatch(width = "100%", height = "auto") {
275
- return getUnitValueParts(width.toString()).unit === getUnitValueParts(height.toString()).unit;
263
+ return getUnitValueParts(width.toString()).unit === getUnitValueParts(height.toString()).unit;
276
264
  }
265
+ /**
266
+ * Given a CSS size, returns the unit and number parts of the value
267
+ * @param value - The CSS size, e.g. 100px
268
+ * @returns The unit and number parts of the value, e.g. \{unit: 'px', number: 100\}
269
+ */
277
270
  function getUnitValueParts(value) {
278
- const unit = value.replace(/[0-9.]/g, "");
279
- const number = parseFloat(value.replace(unit, ""));
280
- return {
281
- unit: unit === "" ? number === void 0 ? "auto" : "px" : unit,
282
- number
283
- };
271
+ const unit = value.replace(/[0-9.]/g, "");
272
+ const number = parseFloat(value.replace(unit, ""));
273
+ return {
274
+ unit: unit === "" ? number === void 0 ? "auto" : "px" : unit,
275
+ number
276
+ };
284
277
  }
278
+ /**
279
+ * Given a value, returns the width of the image as an integer in pixels
280
+ * @param value - The width of the image, e.g. 16px | 1rem | 1em | 16
281
+ * @returns The width of the image in pixels, e.g. 16, or undefined if the value is not a fixed unit
282
+ */
285
283
  function getNormalizedFixedUnit(value) {
286
- if (value === void 0) {
287
- return;
288
- }
289
- const { unit, number } = getUnitValueParts(value.toString());
290
- switch (unit) {
291
- case "em":
292
- return number * 16;
293
- case "rem":
294
- return number * 16;
295
- case "px":
296
- return number;
297
- case "":
298
- return number;
299
- default:
300
- return;
301
- }
284
+ if (value === void 0) return;
285
+ const { unit, number } = getUnitValueParts(value.toString());
286
+ switch (unit) {
287
+ case "em": return number * 16;
288
+ case "rem": return number * 16;
289
+ case "px": return number;
290
+ case "": return number;
291
+ default: return;
292
+ }
302
293
  }
294
+ /**
295
+ * This function checks whether a width is fixed or not.
296
+ * @param width - The width of the image, e.g. 100 | '100px' | '100em' | '100rem'
297
+ * @returns Whether the width is fixed or not
298
+ */
303
299
  function isFixedWidth(width) {
304
- const fixedEndings = /\d(px|em|rem)$/;
305
- return typeof width === "number" || fixedEndings.test(width);
300
+ return typeof width === "number" || /\d(px|em|rem)$/.test(width);
306
301
  }
302
+ /**
303
+ * This function generates a srcSet for Shopify images.
304
+ * @param src - The source URL of the image, e.g. https://cdn.shopify.com/static/sample-images/garnished.jpeg
305
+ * @param sizesArray - An array of objects containing the `width`, `height`, and `crop` of the image, e.g. [\{width: 200, height: 200, crop: 'center'\}, \{width: 400, height: 400, crop: 'center'\}]
306
+ * @param loader - A function that takes a Shopify image URL and returns a Shopify image URL with the correct query parameters
307
+ * @returns A srcSet for Shopify images, e.g. 'https://cdn.shopify.com/static/sample-images/garnished.jpeg?width=200&height=200&crop=center 200w, https://cdn.shopify.com/static/sample-images/garnished.jpeg?width=400&height=400&crop=center 400w'
308
+ */
307
309
  function generateSrcSet(src, sizesArray, loader = shopifyLoader) {
308
- if (!src) {
309
- return "";
310
- }
311
- if ((sizesArray == null ? void 0 : sizesArray.length) === 0 || !sizesArray) {
312
- return src;
313
- }
314
- return sizesArray.map(
315
- (size, i) => `${loader({
316
- src,
317
- width: size.width,
318
- height: size.height,
319
- crop: size.crop
320
- })} ${sizesArray.length === 3 ? `${i + 1}x` : `${size.width ?? 0}w`}`
321
- ).join(`, `);
310
+ if (!src) return "";
311
+ if (sizesArray?.length === 0 || !sizesArray) return src;
312
+ return sizesArray.map((size, i) => `${loader({
313
+ src,
314
+ width: size.width,
315
+ height: size.height,
316
+ crop: size.crop
317
+ })} ${sizesArray.length === 3 ? `${i + 1}x` : `${size.width ?? 0}w`}`).join(`, `);
322
318
  }
319
+ /**
320
+ * This function generates an array of sizes for Shopify images, for both fixed and responsive images.
321
+ * @param width - The CSS width of the image
322
+ * @param intervals - The number of intervals to generate
323
+ * @param startingWidth - The starting width of the image
324
+ * @param incrementSize - The size of each interval
325
+ * @returns An array of widths
326
+ */
323
327
  function generateImageWidths(width = "100%", intervals, startingWidth, incrementSize) {
324
- const responsive = Array.from(
325
- { length: intervals },
326
- (_, i) => i * incrementSize + startingWidth
327
- );
328
- const fixed = Array.from(
329
- { length: 3 },
330
- (_, i) => (i + 1) * (getNormalizedFixedUnit(width) ?? 0)
331
- );
332
- return isFixedWidth(width) ? fixed : responsive;
328
+ const responsive = Array.from({ length: intervals }, (_, i) => i * incrementSize + startingWidth);
329
+ const fixed = Array.from({ length: 3 }, (_, i) => (i + 1) * (getNormalizedFixedUnit(width) ?? 0));
330
+ return isFixedWidth(width) ? fixed : responsive;
333
331
  }
332
+ /**
333
+ * Simple utility function to convert an aspect ratio CSS string to a decimal, currently only supports values like `1/1`, not `0.5`, or `auto`
334
+ * @param aspectRatio - The aspect ratio of the image, e.g. `1/1`
335
+ * @returns The aspect ratio as a number, e.g. `0.5`
336
+ *
337
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio}
338
+ */
334
339
  function parseAspectRatio(aspectRatio) {
335
- if (!aspectRatio) return;
336
- const [width, height] = aspectRatio.split("/");
337
- return 1 / (Number(width) / Number(height));
340
+ if (!aspectRatio) return;
341
+ const [width, height] = aspectRatio.split("/");
342
+ return 1 / (Number(width) / Number(height));
338
343
  }
339
344
  function generateSizes(imageWidths, aspectRatio, crop = "center", sourceDimensions) {
340
- if (!imageWidths) return;
341
- return imageWidths.map((width) => {
342
- return {
343
- width,
344
- height: aspectRatio ? width * (parseAspectRatio(aspectRatio) ?? 1) : void 0,
345
- crop
346
- };
347
- }).filter(({ width, height }) => {
348
- if ((sourceDimensions == null ? void 0 : sourceDimensions.width) && width > sourceDimensions.width) {
349
- return false;
350
- }
351
- if ((sourceDimensions == null ? void 0 : sourceDimensions.height) && height && height > sourceDimensions.height) {
352
- return false;
353
- }
354
- return true;
355
- });
345
+ if (!imageWidths) return;
346
+ return imageWidths.map((width) => {
347
+ return {
348
+ width,
349
+ height: aspectRatio ? width * (parseAspectRatio(aspectRatio) ?? 1) : void 0,
350
+ crop
351
+ };
352
+ }).filter(({ width, height }) => {
353
+ if (sourceDimensions?.width && width > sourceDimensions.width) return false;
354
+ if (sourceDimensions?.height && height && height > sourceDimensions.height) return false;
355
+ return true;
356
+ });
356
357
  }
357
- export {
358
- IMAGE_FRAGMENT,
359
- Image,
360
- generateImageWidths,
361
- generateSizes,
362
- generateSrcSet,
363
- parseAspectRatio,
364
- shopifyLoader
365
- };
366
- //# sourceMappingURL=Image.mjs.map
358
+ //#endregion
359
+ export { IMAGE_FRAGMENT, Image, shopifyLoader };
360
+
361
+ //# sourceMappingURL=Image.mjs.map