@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,344 +12,341 @@ 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
- const nAlt = (data == null ? void 0 : data.altText) && !alt ? data == null ? void 0 : data.altText : alt || "";
51
- const nAspectRatio = aspectRatio ? aspectRatio : normalizedData.unitsMatch ? [
52
- getNormalizedFixedUnit(normalizedData.width),
53
- getNormalizedFixedUnit(normalizedData.height)
54
- ].join("/") : void 0;
55
- return {
56
- width: nWidth,
57
- height: nHeight,
58
- src: nSrc,
59
- alt: nAlt,
60
- aspectRatio: nAspectRatio
61
- };
62
- }, [
63
- width,
64
- height,
65
- src,
66
- data,
67
- alt,
68
- aspectRatio,
69
- normalizedData,
70
- passthroughProps == null ? void 0 : passthroughProps.key
71
- ]);
72
- const { intervals, startingWidth, incrementSize, placeholderWidth } = srcSetOptions;
73
- const imageWidths = React.useMemo(() => {
74
- return generateImageWidths(
75
- width,
76
- intervals,
77
- startingWidth,
78
- incrementSize
79
- );
80
- }, [width, intervals, startingWidth, incrementSize]);
81
- const fixedWidth = isFixedWidth(normalizedProps.width);
82
- if (fixedWidth) {
83
- return /* @__PURE__ */ jsx(
84
- FixedWidthImage,
85
- {
86
- aspectRatio,
87
- crop,
88
- decoding,
89
- height,
90
- imageWidths,
91
- loader,
92
- loading,
93
- normalizedProps,
94
- passthroughProps,
95
- ref,
96
- width,
97
- data
98
- }
99
- );
100
- } else {
101
- return /* @__PURE__ */ jsx(
102
- FluidImage,
103
- {
104
- aspectRatio,
105
- crop,
106
- decoding,
107
- imageWidths,
108
- loader,
109
- loading,
110
- normalizedProps,
111
- passthroughProps,
112
- placeholderWidth,
113
- ref,
114
- sizes,
115
- data
116
- }
117
- );
118
- }
119
- }
120
- );
121
- const FixedWidthImage = React.forwardRef(
122
- ({
123
- aspectRatio,
124
- crop,
125
- decoding,
126
- height,
127
- imageWidths,
128
- loader = shopifyLoader,
129
- loading,
130
- normalizedProps,
131
- passthroughProps,
132
- width,
133
- data
134
- }, ref) => {
135
- const fixed = React.useMemo(() => {
136
- const intWidth = getNormalizedFixedUnit(width);
137
- const intHeight = getNormalizedFixedUnit(height);
138
- const fixedAspectRatio = aspectRatio ? aspectRatio : unitsMatch(normalizedProps.width, normalizedProps.height) ? [intWidth, intHeight].join("/") : normalizedProps.aspectRatio ? normalizedProps.aspectRatio : void 0;
139
- const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, fixedAspectRatio, crop, {
140
- width: (data == null ? void 0 : data.width) ?? void 0,
141
- height: (data == null ? void 0 : data.height) ?? void 0
142
- });
143
- const fixedHeight = intHeight ? intHeight : fixedAspectRatio && intWidth ? intWidth * (parseAspectRatio(fixedAspectRatio) ?? 1) : void 0;
144
- const srcSet = generateSrcSet(normalizedProps.src, sizesArray, loader);
145
- const src = loader({
146
- src: normalizedProps.src,
147
- width: intWidth,
148
- height: fixedHeight,
149
- crop: normalizedProps.height === "auto" ? void 0 : crop
150
- });
151
- return {
152
- width: intWidth,
153
- aspectRatio: fixedAspectRatio,
154
- height: fixedHeight,
155
- srcSet,
156
- src
157
- };
158
- }, [
159
- aspectRatio,
160
- crop,
161
- data,
162
- height,
163
- imageWidths,
164
- loader,
165
- normalizedProps,
166
- width
167
- ]);
168
- return /* @__PURE__ */ jsx(
169
- "img",
170
- {
171
- ref,
172
- alt: normalizedProps.alt,
173
- decoding,
174
- height: fixed.height,
175
- loading,
176
- src: fixed.src,
177
- srcSet: fixed.srcSet,
178
- width: fixed.width,
179
- style: {
180
- aspectRatio: fixed.aspectRatio,
181
- ...passthroughProps.style
182
- },
183
- ...passthroughProps
184
- }
185
- );
186
- }
187
- );
188
- const FluidImage = React.forwardRef(
189
- ({
190
- crop,
191
- decoding,
192
- imageWidths,
193
- loader = shopifyLoader,
194
- loading,
195
- normalizedProps,
196
- passthroughProps,
197
- placeholderWidth,
198
- sizes,
199
- data
200
- }, ref) => {
201
- const fluid = React.useMemo(() => {
202
- const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, normalizedProps.aspectRatio, crop, {
203
- width: (data == null ? void 0 : data.width) ?? void 0,
204
- height: (data == null ? void 0 : data.height) ?? void 0
205
- });
206
- const placeholderHeight = normalizedProps.aspectRatio && placeholderWidth ? placeholderWidth * (parseAspectRatio(normalizedProps.aspectRatio) ?? 1) : void 0;
207
- const srcSet = generateSrcSet(normalizedProps.src, sizesArray, loader);
208
- const src = loader({
209
- src: normalizedProps.src,
210
- width: placeholderWidth,
211
- height: placeholderHeight,
212
- crop
213
- });
214
- return {
215
- placeholderHeight,
216
- srcSet,
217
- src
218
- };
219
- }, [crop, data, imageWidths, loader, normalizedProps, placeholderWidth]);
220
- return /* @__PURE__ */ jsx(
221
- "img",
222
- {
223
- ref,
224
- alt: normalizedProps.alt,
225
- decoding,
226
- height: fluid.placeholderHeight,
227
- loading,
228
- sizes,
229
- src: fluid.src,
230
- srcSet: fluid.srcSet,
231
- width: placeholderWidth,
232
- ...passthroughProps,
233
- style: {
234
- width: normalizedProps.width,
235
- aspectRatio: normalizedProps.aspectRatio,
236
- ...passthroughProps.style
237
- }
238
- }
239
- );
240
- }
241
- );
242
- 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
+ return {
72
+ width: nWidth,
73
+ height: autoHeight ? "auto" : fixedHeight,
74
+ src: src || data?.url,
75
+ alt: data?.altText && !alt ? data?.altText : alt || "",
76
+ aspectRatio: aspectRatio ? aspectRatio : normalizedData.unitsMatch ? [getNormalizedFixedUnit(normalizedData.width), getNormalizedFixedUnit(normalizedData.height)].join("/") : void 0
77
+ };
78
+ }, [
79
+ width,
80
+ height,
81
+ src,
82
+ data,
83
+ alt,
84
+ aspectRatio,
85
+ normalizedData,
86
+ passthroughProps?.key
87
+ ]);
88
+ const { intervals, startingWidth, incrementSize, placeholderWidth } = srcSetOptions;
89
+ const imageWidths = React.useMemo(() => {
90
+ return generateImageWidths(width, intervals, startingWidth, incrementSize);
91
+ }, [
92
+ width,
93
+ intervals,
94
+ startingWidth,
95
+ incrementSize
96
+ ]);
97
+ if (isFixedWidth(normalizedProps.width)) return /* @__PURE__ */ jsx(FixedWidthImage, {
98
+ aspectRatio,
99
+ crop,
100
+ decoding,
101
+ height,
102
+ imageWidths,
103
+ loader,
104
+ loading,
105
+ normalizedProps,
106
+ passthroughProps,
107
+ ref,
108
+ width,
109
+ data
110
+ });
111
+ else return /* @__PURE__ */ jsx(FluidImage, {
112
+ aspectRatio,
113
+ crop,
114
+ decoding,
115
+ imageWidths,
116
+ loader,
117
+ loading,
118
+ normalizedProps,
119
+ passthroughProps,
120
+ placeholderWidth,
121
+ ref,
122
+ sizes,
123
+ data
124
+ });
125
+ });
126
+ var FixedWidthImage = React.forwardRef(({ aspectRatio, crop, decoding, height, imageWidths, loader = shopifyLoader, loading, normalizedProps, passthroughProps, width, data }, ref) => {
127
+ const fixed = React.useMemo(() => {
128
+ const intWidth = getNormalizedFixedUnit(width);
129
+ const intHeight = getNormalizedFixedUnit(height);
130
+ const fixedAspectRatio = aspectRatio ? aspectRatio : unitsMatch(normalizedProps.width, normalizedProps.height) ? [intWidth, intHeight].join("/") : normalizedProps.aspectRatio ? normalizedProps.aspectRatio : void 0;
131
+ const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, fixedAspectRatio, crop, {
132
+ width: data?.width ?? void 0,
133
+ height: data?.height ?? void 0
134
+ });
135
+ const fixedHeight = intHeight ? intHeight : fixedAspectRatio && intWidth ? intWidth * (parseAspectRatio(fixedAspectRatio) ?? 1) : void 0;
136
+ return {
137
+ width: intWidth,
138
+ aspectRatio: fixedAspectRatio,
139
+ height: fixedHeight,
140
+ srcSet: generateSrcSet(normalizedProps.src, sizesArray, loader),
141
+ src: loader({
142
+ src: normalizedProps.src,
143
+ width: intWidth,
144
+ height: fixedHeight,
145
+ crop: normalizedProps.height === "auto" ? void 0 : crop
146
+ })
147
+ };
148
+ }, [
149
+ aspectRatio,
150
+ crop,
151
+ data,
152
+ height,
153
+ imageWidths,
154
+ loader,
155
+ normalizedProps,
156
+ width
157
+ ]);
158
+ return /* @__PURE__ */ jsx("img", {
159
+ ref,
160
+ alt: normalizedProps.alt,
161
+ decoding,
162
+ height: fixed.height,
163
+ loading,
164
+ src: fixed.src,
165
+ srcSet: fixed.srcSet,
166
+ width: fixed.width,
167
+ style: {
168
+ aspectRatio: fixed.aspectRatio,
169
+ ...passthroughProps.style
170
+ },
171
+ ...passthroughProps
172
+ });
173
+ });
174
+ var FluidImage = React.forwardRef(({ crop, decoding, imageWidths, loader = shopifyLoader, loading, normalizedProps, passthroughProps, placeholderWidth, sizes, data }, ref) => {
175
+ const fluid = React.useMemo(() => {
176
+ const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, normalizedProps.aspectRatio, crop, {
177
+ width: data?.width ?? void 0,
178
+ height: data?.height ?? void 0
179
+ });
180
+ const placeholderHeight = normalizedProps.aspectRatio && placeholderWidth ? placeholderWidth * (parseAspectRatio(normalizedProps.aspectRatio) ?? 1) : void 0;
181
+ return {
182
+ placeholderHeight,
183
+ srcSet: generateSrcSet(normalizedProps.src, sizesArray, loader),
184
+ src: loader({
185
+ src: normalizedProps.src,
186
+ width: placeholderWidth,
187
+ height: placeholderHeight,
188
+ crop
189
+ })
190
+ };
191
+ }, [
192
+ crop,
193
+ data,
194
+ imageWidths,
195
+ loader,
196
+ normalizedProps,
197
+ placeholderWidth
198
+ ]);
199
+ return /* @__PURE__ */ jsx("img", {
200
+ ref,
201
+ alt: normalizedProps.alt,
202
+ decoding,
203
+ height: fluid.placeholderHeight,
204
+ loading,
205
+ sizes,
206
+ src: fluid.src,
207
+ srcSet: fluid.srcSet,
208
+ width: placeholderWidth,
209
+ ...passthroughProps,
210
+ style: {
211
+ width: normalizedProps.width,
212
+ aspectRatio: normalizedProps.aspectRatio,
213
+ ...passthroughProps.style
214
+ }
215
+ });
216
+ });
217
+ /**
218
+ * The shopifyLoader function is a simple utility function that takes a src, width,
219
+ * height, and crop and returns a string that can be used as the src for an image.
220
+ * It can be used with the Hydrogen Image component or with the next/image component.
221
+ * (or any others that accept equivalent configuration)
222
+ * @param src - The source URL of the image, e.g. `https://cdn.shopify.com/static/sample-images/garnished.jpeg`
223
+ * @param width - The width of the image, e.g. `100`
224
+ * @param height - The height of the image, e.g. `100`
225
+ * @param crop - The crop of the image, e.g. `center`
226
+ * @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`
227
+ *
228
+ * @example
229
+ * ```
230
+ * shopifyLoader({
231
+ * src: 'https://cdn.shopify.com/static/sample-images/garnished.jpeg',
232
+ * width: 100,
233
+ * height: 100,
234
+ * crop: 'center',
235
+ * })
236
+ * ```
237
+ */
238
+ var PLACEHOLDER_DOMAIN = "https://placeholder.shopify.com";
243
239
  function shopifyLoader({ src, width, height, crop }) {
244
- if (!src) {
245
- return "";
246
- }
247
- const url = new URL(src, PLACEHOLDER_DOMAIN);
248
- if (width) {
249
- url.searchParams.append("width", Math.round(width).toString());
250
- }
251
- if (height) {
252
- url.searchParams.append("height", Math.round(height).toString());
253
- }
254
- if (crop) {
255
- url.searchParams.append("crop", crop);
256
- }
257
- return url.href.replace(PLACEHOLDER_DOMAIN, "");
240
+ if (!src) return "";
241
+ const url = new URL(src, PLACEHOLDER_DOMAIN);
242
+ if (width) url.searchParams.append("width", Math.round(width).toString());
243
+ if (height) url.searchParams.append("height", Math.round(height).toString());
244
+ if (crop) url.searchParams.append("crop", crop);
245
+ return url.href.replace(PLACEHOLDER_DOMAIN, "");
258
246
  }
247
+ /**
248
+ * Checks whether the width and height share the same unit type
249
+ * @param width - The width of the image, e.g. 100% | 10px
250
+ * @param height - The height of the image, e.g. auto | 100px
251
+ * @returns Whether the width and height share the same unit type (boolean)
252
+ */
259
253
  function unitsMatch(width = "100%", height = "auto") {
260
- return getUnitValueParts(width.toString()).unit === getUnitValueParts(height.toString()).unit;
254
+ return getUnitValueParts(width.toString()).unit === getUnitValueParts(height.toString()).unit;
261
255
  }
256
+ /**
257
+ * Given a CSS size, returns the unit and number parts of the value
258
+ * @param value - The CSS size, e.g. 100px
259
+ * @returns The unit and number parts of the value, e.g. \{unit: 'px', number: 100\}
260
+ */
262
261
  function getUnitValueParts(value) {
263
- const unit = value.replace(/[0-9.]/g, "");
264
- const number = parseFloat(value.replace(unit, ""));
265
- return {
266
- unit: unit === "" ? number === void 0 ? "auto" : "px" : unit,
267
- number
268
- };
262
+ const unit = value.replace(/[0-9.]/g, "");
263
+ const number = parseFloat(value.replace(unit, ""));
264
+ return {
265
+ unit: unit === "" ? number === void 0 ? "auto" : "px" : unit,
266
+ number
267
+ };
269
268
  }
269
+ /**
270
+ * Given a value, returns the width of the image as an integer in pixels
271
+ * @param value - The width of the image, e.g. 16px | 1rem | 1em | 16
272
+ * @returns The width of the image in pixels, e.g. 16, or undefined if the value is not a fixed unit
273
+ */
270
274
  function getNormalizedFixedUnit(value) {
271
- if (value === void 0) {
272
- return;
273
- }
274
- const { unit, number } = getUnitValueParts(value.toString());
275
- switch (unit) {
276
- case "em":
277
- return number * 16;
278
- case "rem":
279
- return number * 16;
280
- case "px":
281
- return number;
282
- case "":
283
- return number;
284
- default:
285
- return;
286
- }
275
+ if (value === void 0) return;
276
+ const { unit, number } = getUnitValueParts(value.toString());
277
+ switch (unit) {
278
+ case "em": return number * 16;
279
+ case "rem": return number * 16;
280
+ case "px": return number;
281
+ case "": return number;
282
+ default: return;
283
+ }
287
284
  }
285
+ /**
286
+ * This function checks whether a width is fixed or not.
287
+ * @param width - The width of the image, e.g. 100 | '100px' | '100em' | '100rem'
288
+ * @returns Whether the width is fixed or not
289
+ */
288
290
  function isFixedWidth(width) {
289
- const fixedEndings = /\d(px|em|rem)$/;
290
- return typeof width === "number" || fixedEndings.test(width);
291
+ return typeof width === "number" || /\d(px|em|rem)$/.test(width);
291
292
  }
293
+ /**
294
+ * This function generates a srcSet for Shopify images.
295
+ * @param src - The source URL of the image, e.g. https://cdn.shopify.com/static/sample-images/garnished.jpeg
296
+ * @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'\}]
297
+ * @param loader - A function that takes a Shopify image URL and returns a Shopify image URL with the correct query parameters
298
+ * @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'
299
+ */
292
300
  function generateSrcSet(src, sizesArray, loader = shopifyLoader) {
293
- if (!src) {
294
- return "";
295
- }
296
- if ((sizesArray == null ? void 0 : sizesArray.length) === 0 || !sizesArray) {
297
- return src;
298
- }
299
- return sizesArray.map(
300
- (size, i) => `${loader({
301
- src,
302
- width: size.width,
303
- height: size.height,
304
- crop: size.crop
305
- })} ${sizesArray.length === 3 ? `${i + 1}x` : `${size.width ?? 0}w`}`
306
- ).join(`, `);
301
+ if (!src) return "";
302
+ if (sizesArray?.length === 0 || !sizesArray) return src;
303
+ return sizesArray.map((size, i) => `${loader({
304
+ src,
305
+ width: size.width,
306
+ height: size.height,
307
+ crop: size.crop
308
+ })} ${sizesArray.length === 3 ? `${i + 1}x` : `${size.width ?? 0}w`}`).join(`, `);
307
309
  }
310
+ /**
311
+ * This function generates an array of sizes for Shopify images, for both fixed and responsive images.
312
+ * @param width - The CSS width of the image
313
+ * @param intervals - The number of intervals to generate
314
+ * @param startingWidth - The starting width of the image
315
+ * @param incrementSize - The size of each interval
316
+ * @returns An array of widths
317
+ */
308
318
  function generateImageWidths(width = "100%", intervals, startingWidth, incrementSize) {
309
- const responsive = Array.from(
310
- { length: intervals },
311
- (_, i) => i * incrementSize + startingWidth
312
- );
313
- const fixed = Array.from(
314
- { length: 3 },
315
- (_, i) => (i + 1) * (getNormalizedFixedUnit(width) ?? 0)
316
- );
317
- return isFixedWidth(width) ? fixed : responsive;
319
+ const responsive = Array.from({ length: intervals }, (_, i) => i * incrementSize + startingWidth);
320
+ const fixed = Array.from({ length: 3 }, (_, i) => (i + 1) * (getNormalizedFixedUnit(width) ?? 0));
321
+ return isFixedWidth(width) ? fixed : responsive;
318
322
  }
323
+ /**
324
+ * 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`
325
+ * @param aspectRatio - The aspect ratio of the image, e.g. `1/1`
326
+ * @returns The aspect ratio as a number, e.g. `0.5`
327
+ *
328
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio}
329
+ */
319
330
  function parseAspectRatio(aspectRatio) {
320
- if (!aspectRatio) return;
321
- const [width, height] = aspectRatio.split("/");
322
- return 1 / (Number(width) / Number(height));
331
+ if (!aspectRatio) return;
332
+ const [width, height] = aspectRatio.split("/");
333
+ return 1 / (Number(width) / Number(height));
323
334
  }
324
335
  function generateSizes(imageWidths, aspectRatio, crop = "center", sourceDimensions) {
325
- if (!imageWidths) return;
326
- return imageWidths.map((width) => {
327
- return {
328
- width,
329
- height: aspectRatio ? width * (parseAspectRatio(aspectRatio) ?? 1) : void 0,
330
- crop
331
- };
332
- }).filter(({ width, height }) => {
333
- if ((sourceDimensions == null ? void 0 : sourceDimensions.width) && width > sourceDimensions.width) {
334
- return false;
335
- }
336
- if ((sourceDimensions == null ? void 0 : sourceDimensions.height) && height && height > sourceDimensions.height) {
337
- return false;
338
- }
339
- return true;
340
- });
336
+ if (!imageWidths) return;
337
+ return imageWidths.map((width) => {
338
+ return {
339
+ width,
340
+ height: aspectRatio ? width * (parseAspectRatio(aspectRatio) ?? 1) : void 0,
341
+ crop
342
+ };
343
+ }).filter(({ width, height }) => {
344
+ if (sourceDimensions?.width && width > sourceDimensions.width) return false;
345
+ if (sourceDimensions?.height && height && height > sourceDimensions.height) return false;
346
+ return true;
347
+ });
341
348
  }
342
- export {
343
- IMAGE_FRAGMENT,
344
- Image,
345
- generateImageWidths,
346
- generateSizes,
347
- generateSrcSet,
348
- parseAspectRatio,
349
- shopifyLoader
350
- };
351
- //# sourceMappingURL=Image.mjs.map
349
+ //#endregion
350
+ export { IMAGE_FRAGMENT, Image, shopifyLoader };
351
+
352
+ //# sourceMappingURL=Image.mjs.map