@shopify/hydrogen-react 2026.4.0 → 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 (631) 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 +59 -135
  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 +59 -135
  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 +58 -125
  305. package/dist/node-dev/cart-queries.js.map +1 -1
  306. package/dist/node-dev/cart-queries.mjs +59 -135
  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 +58 -125
  496. package/dist/node-prod/cart-queries.js.map +1 -1
  497. package/dist/node-prod/cart-queries.mjs +59 -135
  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/types/AddToCartButton.d.ts +2 -0
  574. package/dist/types/BuyNowButton.d.ts +2 -0
  575. package/dist/types/CartCheckoutButton.d.ts +2 -0
  576. package/dist/types/CartCost.d.ts +2 -0
  577. package/dist/types/CartLineProvider.d.ts +2 -0
  578. package/dist/types/CartLineQuantity.d.ts +2 -0
  579. package/dist/types/CartLineQuantityAdjustButton.d.ts +1 -0
  580. package/dist/types/CartProvider.d.ts +7 -1
  581. package/dist/types/ExternalVideo.d.ts +4 -0
  582. package/dist/types/Image.d.ts +2 -0
  583. package/dist/types/MediaFile.d.ts +4 -0
  584. package/dist/types/ModelViewer.d.ts +1 -0
  585. package/dist/types/Money.d.ts +1 -0
  586. package/dist/types/ProductPrice.d.ts +2 -0
  587. package/dist/types/ProductProvider.d.ts +2 -0
  588. package/dist/types/RichText.d.ts +2 -0
  589. package/dist/types/ShopPayButton.d.ts +1 -0
  590. package/dist/types/ShopifyProvider.d.ts +2 -0
  591. package/dist/types/Video.d.ts +2 -0
  592. package/dist/types/analytics-constants.d.ts +9 -0
  593. package/dist/types/analytics-types.d.ts +1 -0
  594. package/dist/types/analytics-utils.d.ts +1 -0
  595. package/dist/types/analytics.d.ts +6 -1
  596. package/dist/types/cart-queries.d.ts +13 -9
  597. package/dist/types/codegen.helpers.d.ts +2 -0
  598. package/dist/types/cookies-utils.d.ts +2 -1
  599. package/dist/types/flatten-connection.d.ts +3 -0
  600. package/dist/types/getProductOptions.d.ts +3 -0
  601. package/dist/types/load-script.d.ts +3 -1
  602. package/dist/types/optionValueDecoder.d.ts +3 -0
  603. package/dist/types/parse-metafield.d.ts +1 -0
  604. package/dist/types/storefront-client.d.ts +1 -0
  605. package/dist/types/tracking-utils.d.ts +2 -2
  606. package/dist/types/useMoney.d.ts +1 -0
  607. package/dist/types/useSelectedOptionInUrlParam.d.ts +1 -0
  608. package/dist/types/useShopifyCookies.d.ts +1 -0
  609. package/dist/umd/hydrogen-react.dev.js +3957 -4483
  610. package/dist/umd/hydrogen-react.dev.js.map +1 -1
  611. package/dist/umd/hydrogen-react.prod.js +42 -101
  612. package/dist/umd/hydrogen-react.prod.js.map +1 -1
  613. package/package.json +5 -5
  614. package/dist/browser-dev/index.mjs.map +0 -1
  615. package/dist/browser-dev/packages/hydrogen-react/package.json.mjs +0 -5
  616. package/dist/browser-dev/packages/hydrogen-react/package.json.mjs.map +0 -1
  617. package/dist/browser-prod/index.mjs.map +0 -1
  618. package/dist/browser-prod/packages/hydrogen-react/package.json.mjs +0 -5
  619. package/dist/browser-prod/packages/hydrogen-react/package.json.mjs.map +0 -1
  620. package/dist/node-dev/index.js.map +0 -1
  621. package/dist/node-dev/index.mjs.map +0 -1
  622. package/dist/node-dev/packages/hydrogen-react/package.json.js +0 -5
  623. package/dist/node-dev/packages/hydrogen-react/package.json.js.map +0 -1
  624. package/dist/node-dev/packages/hydrogen-react/package.json.mjs +0 -5
  625. package/dist/node-dev/packages/hydrogen-react/package.json.mjs.map +0 -1
  626. package/dist/node-prod/index.js.map +0 -1
  627. package/dist/node-prod/index.mjs.map +0 -1
  628. package/dist/node-prod/packages/hydrogen-react/package.json.js +0 -5
  629. package/dist/node-prod/packages/hydrogen-react/package.json.js.map +0 -1
  630. package/dist/node-prod/packages/hydrogen-react/package.json.mjs +0 -5
  631. package/dist/node-prod/packages/hydrogen-react/package.json.mjs.map +0 -1
@@ -1,25 +1,12 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("react/jsx-runtime");
4
- const React = require("react");
5
- function _interopNamespaceDefault(e) {
6
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
7
- if (e) {
8
- for (const k in e) {
9
- if (k !== "default") {
10
- const d = Object.getOwnPropertyDescriptor(e, k);
11
- Object.defineProperty(n, k, d.get ? d : {
12
- enumerable: true,
13
- get: () => e[k]
14
- });
15
- }
16
- }
17
- }
18
- n.default = e;
19
- return Object.freeze(n);
20
- }
21
- const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
22
- const IMAGE_FRAGMENT = `#graphql
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.js");
2
+ let react = require("react");
3
+ react = require_runtime.__toESM(react);
4
+ let react_jsx_runtime = require("react/jsx-runtime");
5
+ //#region src/Image.tsx
6
+ /**
7
+ * A Storefront API GraphQL fragment that can be used to query for an image.
8
+ */
9
+ var IMAGE_FRAGMENT = `#graphql
23
10
  fragment Image on Image {
24
11
  altText
25
12
  url
@@ -27,357 +14,352 @@ const IMAGE_FRAGMENT = `#graphql
27
14
  height
28
15
  }
29
16
  `;
30
- const Image = React__namespace.forwardRef(
31
- ({
32
- alt,
33
- aspectRatio,
34
- crop = "center",
35
- data,
36
- decoding = "async",
37
- height = "auto",
38
- loader = shopifyLoader,
39
- loading = "lazy",
40
- sizes,
41
- src,
42
- srcSetOptions = {
43
- intervals: 15,
44
- startingWidth: 200,
45
- incrementSize: 200,
46
- placeholderWidth: 100
47
- },
48
- width = "100%",
49
- ...passthroughProps
50
- }, ref) => {
51
- const normalizedData = React__namespace.useMemo(() => {
52
- const dataWidth = (data == null ? void 0 : data.width) && (data == null ? void 0 : data.height) ? data == null ? void 0 : data.width : void 0;
53
- const dataHeight = (data == null ? void 0 : data.width) && (data == null ? void 0 : data.height) ? data == null ? void 0 : data.height : void 0;
54
- return {
55
- width: dataWidth,
56
- height: dataHeight,
57
- unitsMatch: Boolean(unitsMatch(dataWidth, dataHeight))
58
- };
59
- }, [data]);
60
- const normalizedProps = React__namespace.useMemo(() => {
61
- const nWidthProp = width || "100%";
62
- const widthParts = getUnitValueParts(nWidthProp.toString());
63
- const nWidth = `${widthParts.number}${widthParts.unit}`;
64
- const autoHeight = height === void 0 || height === null;
65
- const heightParts = autoHeight ? null : getUnitValueParts(height.toString());
66
- const fixedHeight = heightParts ? `${heightParts.number}${heightParts.unit}` : "";
67
- const nHeight = autoHeight ? "auto" : fixedHeight;
68
- const nSrc = src || (data == null ? void 0 : data.url);
69
- if (!nSrc) {
70
- console.warn(
71
- `No src or data.url provided to Image component.`,
72
- (passthroughProps == null ? void 0 : passthroughProps.key) || ""
73
- );
74
- }
75
- const nAlt = (data == null ? void 0 : data.altText) && !alt ? data == null ? void 0 : data.altText : alt || "";
76
- const nAspectRatio = aspectRatio ? aspectRatio : normalizedData.unitsMatch ? [
77
- getNormalizedFixedUnit(normalizedData.width),
78
- getNormalizedFixedUnit(normalizedData.height)
79
- ].join("/") : void 0;
80
- return {
81
- width: nWidth,
82
- height: nHeight,
83
- src: nSrc,
84
- alt: nAlt,
85
- aspectRatio: nAspectRatio
86
- };
87
- }, [
88
- width,
89
- height,
90
- src,
91
- data,
92
- alt,
93
- aspectRatio,
94
- normalizedData,
95
- passthroughProps == null ? void 0 : passthroughProps.key
96
- ]);
97
- const { intervals, startingWidth, incrementSize, placeholderWidth } = srcSetOptions;
98
- const imageWidths = React__namespace.useMemo(() => {
99
- return generateImageWidths(
100
- width,
101
- intervals,
102
- startingWidth,
103
- incrementSize
104
- );
105
- }, [width, intervals, startingWidth, incrementSize]);
106
- const fixedWidth = isFixedWidth(normalizedProps.width);
107
- if (!sizes && !fixedWidth) {
108
- console.warn(
109
- [
110
- "No sizes prop provided to Image component,",
111
- "you may be loading unnecessarily large images.",
112
- `Image used is ${src || (data == null ? void 0 : data.url) || (passthroughProps == null ? void 0 : passthroughProps.key) || "unknown"}`
113
- ].join(" ")
114
- );
115
- }
116
- if (fixedWidth) {
117
- return /* @__PURE__ */ jsxRuntime.jsx(
118
- FixedWidthImage,
119
- {
120
- aspectRatio,
121
- crop,
122
- decoding,
123
- height,
124
- imageWidths,
125
- loader,
126
- loading,
127
- normalizedProps,
128
- passthroughProps,
129
- ref,
130
- width,
131
- data
132
- }
133
- );
134
- } else {
135
- return /* @__PURE__ */ jsxRuntime.jsx(
136
- FluidImage,
137
- {
138
- aspectRatio,
139
- crop,
140
- decoding,
141
- imageWidths,
142
- loader,
143
- loading,
144
- normalizedProps,
145
- passthroughProps,
146
- placeholderWidth,
147
- ref,
148
- sizes,
149
- data
150
- }
151
- );
152
- }
153
- }
154
- );
155
- const FixedWidthImage = React__namespace.forwardRef(
156
- ({
157
- aspectRatio,
158
- crop,
159
- decoding,
160
- height,
161
- imageWidths,
162
- loader = shopifyLoader,
163
- loading,
164
- normalizedProps,
165
- passthroughProps,
166
- width,
167
- data
168
- }, ref) => {
169
- const fixed = React__namespace.useMemo(() => {
170
- const intWidth = getNormalizedFixedUnit(width);
171
- const intHeight = getNormalizedFixedUnit(height);
172
- const fixedAspectRatio = aspectRatio ? aspectRatio : unitsMatch(normalizedProps.width, normalizedProps.height) ? [intWidth, intHeight].join("/") : normalizedProps.aspectRatio ? normalizedProps.aspectRatio : void 0;
173
- const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, fixedAspectRatio, crop, {
174
- width: (data == null ? void 0 : data.width) ?? void 0,
175
- height: (data == null ? void 0 : data.height) ?? void 0
176
- });
177
- const fixedHeight = intHeight ? intHeight : fixedAspectRatio && intWidth ? intWidth * (parseAspectRatio(fixedAspectRatio) ?? 1) : void 0;
178
- const srcSet = generateSrcSet(normalizedProps.src, sizesArray, loader);
179
- const src = loader({
180
- src: normalizedProps.src,
181
- width: intWidth,
182
- height: fixedHeight,
183
- crop: normalizedProps.height === "auto" ? void 0 : crop
184
- });
185
- return {
186
- width: intWidth,
187
- aspectRatio: fixedAspectRatio,
188
- height: fixedHeight,
189
- srcSet,
190
- src
191
- };
192
- }, [
193
- aspectRatio,
194
- crop,
195
- data,
196
- height,
197
- imageWidths,
198
- loader,
199
- normalizedProps,
200
- width
201
- ]);
202
- return /* @__PURE__ */ jsxRuntime.jsx(
203
- "img",
204
- {
205
- ref,
206
- alt: normalizedProps.alt,
207
- decoding,
208
- height: fixed.height,
209
- loading,
210
- src: fixed.src,
211
- srcSet: fixed.srcSet,
212
- width: fixed.width,
213
- style: {
214
- aspectRatio: fixed.aspectRatio,
215
- ...passthroughProps.style
216
- },
217
- ...passthroughProps
218
- }
219
- );
220
- }
221
- );
222
- const FluidImage = React__namespace.forwardRef(
223
- ({
224
- crop,
225
- decoding,
226
- imageWidths,
227
- loader = shopifyLoader,
228
- loading,
229
- normalizedProps,
230
- passthroughProps,
231
- placeholderWidth,
232
- sizes,
233
- data
234
- }, ref) => {
235
- const fluid = React__namespace.useMemo(() => {
236
- const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, normalizedProps.aspectRatio, crop, {
237
- width: (data == null ? void 0 : data.width) ?? void 0,
238
- height: (data == null ? void 0 : data.height) ?? void 0
239
- });
240
- const placeholderHeight = normalizedProps.aspectRatio && placeholderWidth ? placeholderWidth * (parseAspectRatio(normalizedProps.aspectRatio) ?? 1) : void 0;
241
- const srcSet = generateSrcSet(normalizedProps.src, sizesArray, loader);
242
- const src = loader({
243
- src: normalizedProps.src,
244
- width: placeholderWidth,
245
- height: placeholderHeight,
246
- crop
247
- });
248
- return {
249
- placeholderHeight,
250
- srcSet,
251
- src
252
- };
253
- }, [crop, data, imageWidths, loader, normalizedProps, placeholderWidth]);
254
- return /* @__PURE__ */ jsxRuntime.jsx(
255
- "img",
256
- {
257
- ref,
258
- alt: normalizedProps.alt,
259
- decoding,
260
- height: fluid.placeholderHeight,
261
- loading,
262
- sizes,
263
- src: fluid.src,
264
- srcSet: fluid.srcSet,
265
- width: placeholderWidth,
266
- ...passthroughProps,
267
- style: {
268
- width: normalizedProps.width,
269
- aspectRatio: normalizedProps.aspectRatio,
270
- ...passthroughProps.style
271
- }
272
- }
273
- );
274
- }
275
- );
276
- const PLACEHOLDER_DOMAIN = "https://placeholder.shopify.com";
17
+ /**
18
+ * Hydrogen’s Image component is a wrapper around the HTML image element.
19
+ * It supports the same props as the HTML `img` element, but automatically
20
+ * generates the srcSet and sizes attributes for you. For most use cases,
21
+ * you’ll want to set the `aspectRatio` prop to ensure the image is sized
22
+ * correctly.
23
+ *
24
+ * @remarks
25
+ * - `decoding` is set to `async` by default.
26
+ * - `loading` is set to `lazy` by default.
27
+ * - `alt` will automatically be set to the `altText` from the Storefront API if passed in the `data` prop
28
+ * - `src` will automatically be set to the `url` from the Storefront API if passed in the `data` prop
29
+ *
30
+ * @example
31
+ * A responsive image with a 4:5 aspect ratio:
32
+ * ```
33
+ * <Image
34
+ * data={product.featuredImage}
35
+ * aspectRatio="4/5"
36
+ * sizes="(min-width: 45em) 40vw, 100vw"
37
+ * />
38
+ * ```
39
+ * @example
40
+ * A fixed size image:
41
+ * ```
42
+ * <Image
43
+ * data={product.featuredImage}
44
+ * width={100}
45
+ * height={100}
46
+ * />
47
+ * ```
48
+ *
49
+ * {@link https://shopify.dev/docs/api/hydrogen-react/components/image}
50
+ * @publicDocs
51
+ */
52
+ var Image = react.forwardRef(({ alt, aspectRatio, crop = "center", data, decoding = "async", height = "auto", loader = shopifyLoader, loading = "lazy", sizes, src, srcSetOptions = {
53
+ intervals: 15,
54
+ startingWidth: 200,
55
+ incrementSize: 200,
56
+ placeholderWidth: 100
57
+ }, width = "100%", ...passthroughProps }, ref) => {
58
+ const normalizedData = react.useMemo(() => {
59
+ const dataWidth = data?.width && data?.height ? data?.width : void 0;
60
+ const dataHeight = data?.width && data?.height ? data?.height : void 0;
61
+ return {
62
+ width: dataWidth,
63
+ height: dataHeight,
64
+ unitsMatch: Boolean(unitsMatch(dataWidth, dataHeight))
65
+ };
66
+ }, [data]);
67
+ const normalizedProps = react.useMemo(() => {
68
+ const widthParts = getUnitValueParts((width || "100%").toString());
69
+ const nWidth = `${widthParts.number}${widthParts.unit}`;
70
+ const autoHeight = height === void 0 || height === null;
71
+ const heightParts = autoHeight ? null : getUnitValueParts(height.toString());
72
+ const fixedHeight = heightParts ? `${heightParts.number}${heightParts.unit}` : "";
73
+ const nHeight = autoHeight ? "auto" : fixedHeight;
74
+ const nSrc = src || data?.url;
75
+ if (!nSrc) console.warn(`No src or data.url provided to Image component.`, passthroughProps?.key || "");
76
+ return {
77
+ width: nWidth,
78
+ height: nHeight,
79
+ src: nSrc,
80
+ alt: data?.altText && !alt ? data?.altText : alt || "",
81
+ aspectRatio: aspectRatio ? aspectRatio : normalizedData.unitsMatch ? [getNormalizedFixedUnit(normalizedData.width), getNormalizedFixedUnit(normalizedData.height)].join("/") : void 0
82
+ };
83
+ }, [
84
+ width,
85
+ height,
86
+ src,
87
+ data,
88
+ alt,
89
+ aspectRatio,
90
+ normalizedData,
91
+ passthroughProps?.key
92
+ ]);
93
+ const { intervals, startingWidth, incrementSize, placeholderWidth } = srcSetOptions;
94
+ const imageWidths = react.useMemo(() => {
95
+ return generateImageWidths(width, intervals, startingWidth, incrementSize);
96
+ }, [
97
+ width,
98
+ intervals,
99
+ startingWidth,
100
+ incrementSize
101
+ ]);
102
+ const fixedWidth = isFixedWidth(normalizedProps.width);
103
+ if (!sizes && !fixedWidth) console.warn([
104
+ "No sizes prop provided to Image component,",
105
+ "you may be loading unnecessarily large images.",
106
+ `Image used is ${src || data?.url || passthroughProps?.key || "unknown"}`
107
+ ].join(" "));
108
+ if (fixedWidth) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FixedWidthImage, {
109
+ aspectRatio,
110
+ crop,
111
+ decoding,
112
+ height,
113
+ imageWidths,
114
+ loader,
115
+ loading,
116
+ normalizedProps,
117
+ passthroughProps,
118
+ ref,
119
+ width,
120
+ data
121
+ });
122
+ else return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FluidImage, {
123
+ aspectRatio,
124
+ crop,
125
+ decoding,
126
+ imageWidths,
127
+ loader,
128
+ loading,
129
+ normalizedProps,
130
+ passthroughProps,
131
+ placeholderWidth,
132
+ ref,
133
+ sizes,
134
+ data
135
+ });
136
+ });
137
+ var FixedWidthImage = react.forwardRef(({ aspectRatio, crop, decoding, height, imageWidths, loader = shopifyLoader, loading, normalizedProps, passthroughProps, width, data }, ref) => {
138
+ const fixed = react.useMemo(() => {
139
+ const intWidth = getNormalizedFixedUnit(width);
140
+ const intHeight = getNormalizedFixedUnit(height);
141
+ const fixedAspectRatio = aspectRatio ? aspectRatio : unitsMatch(normalizedProps.width, normalizedProps.height) ? [intWidth, intHeight].join("/") : normalizedProps.aspectRatio ? normalizedProps.aspectRatio : void 0;
142
+ const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, fixedAspectRatio, crop, {
143
+ width: data?.width ?? void 0,
144
+ height: data?.height ?? void 0
145
+ });
146
+ const fixedHeight = intHeight ? intHeight : fixedAspectRatio && intWidth ? intWidth * (parseAspectRatio(fixedAspectRatio) ?? 1) : void 0;
147
+ return {
148
+ width: intWidth,
149
+ aspectRatio: fixedAspectRatio,
150
+ height: fixedHeight,
151
+ srcSet: generateSrcSet(normalizedProps.src, sizesArray, loader),
152
+ src: loader({
153
+ src: normalizedProps.src,
154
+ width: intWidth,
155
+ height: fixedHeight,
156
+ crop: normalizedProps.height === "auto" ? void 0 : crop
157
+ })
158
+ };
159
+ }, [
160
+ aspectRatio,
161
+ crop,
162
+ data,
163
+ height,
164
+ imageWidths,
165
+ loader,
166
+ normalizedProps,
167
+ width
168
+ ]);
169
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
170
+ ref,
171
+ alt: normalizedProps.alt,
172
+ decoding,
173
+ height: fixed.height,
174
+ loading,
175
+ src: fixed.src,
176
+ srcSet: fixed.srcSet,
177
+ width: fixed.width,
178
+ style: {
179
+ aspectRatio: fixed.aspectRatio,
180
+ ...passthroughProps.style
181
+ },
182
+ ...passthroughProps
183
+ });
184
+ });
185
+ var FluidImage = react.forwardRef(({ crop, decoding, imageWidths, loader = shopifyLoader, loading, normalizedProps, passthroughProps, placeholderWidth, sizes, data }, ref) => {
186
+ const fluid = react.useMemo(() => {
187
+ const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, normalizedProps.aspectRatio, crop, {
188
+ width: data?.width ?? void 0,
189
+ height: data?.height ?? void 0
190
+ });
191
+ const placeholderHeight = normalizedProps.aspectRatio && placeholderWidth ? placeholderWidth * (parseAspectRatio(normalizedProps.aspectRatio) ?? 1) : void 0;
192
+ return {
193
+ placeholderHeight,
194
+ srcSet: generateSrcSet(normalizedProps.src, sizesArray, loader),
195
+ src: loader({
196
+ src: normalizedProps.src,
197
+ width: placeholderWidth,
198
+ height: placeholderHeight,
199
+ crop
200
+ })
201
+ };
202
+ }, [
203
+ crop,
204
+ data,
205
+ imageWidths,
206
+ loader,
207
+ normalizedProps,
208
+ placeholderWidth
209
+ ]);
210
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
211
+ ref,
212
+ alt: normalizedProps.alt,
213
+ decoding,
214
+ height: fluid.placeholderHeight,
215
+ loading,
216
+ sizes,
217
+ src: fluid.src,
218
+ srcSet: fluid.srcSet,
219
+ width: placeholderWidth,
220
+ ...passthroughProps,
221
+ style: {
222
+ width: normalizedProps.width,
223
+ aspectRatio: normalizedProps.aspectRatio,
224
+ ...passthroughProps.style
225
+ }
226
+ });
227
+ });
228
+ /**
229
+ * The shopifyLoader function is a simple utility function that takes a src, width,
230
+ * height, and crop and returns a string that can be used as the src for an image.
231
+ * It can be used with the Hydrogen Image component or with the next/image component.
232
+ * (or any others that accept equivalent configuration)
233
+ * @param src - The source URL of the image, e.g. `https://cdn.shopify.com/static/sample-images/garnished.jpeg`
234
+ * @param width - The width of the image, e.g. `100`
235
+ * @param height - The height of the image, e.g. `100`
236
+ * @param crop - The crop of the image, e.g. `center`
237
+ * @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`
238
+ *
239
+ * @example
240
+ * ```
241
+ * shopifyLoader({
242
+ * src: 'https://cdn.shopify.com/static/sample-images/garnished.jpeg',
243
+ * width: 100,
244
+ * height: 100,
245
+ * crop: 'center',
246
+ * })
247
+ * ```
248
+ */
249
+ var PLACEHOLDER_DOMAIN = "https://placeholder.shopify.com";
277
250
  function shopifyLoader({ src, width, height, crop }) {
278
- if (!src) {
279
- return "";
280
- }
281
- const url = new URL(src, PLACEHOLDER_DOMAIN);
282
- if (width) {
283
- url.searchParams.append("width", Math.round(width).toString());
284
- }
285
- if (height) {
286
- url.searchParams.append("height", Math.round(height).toString());
287
- }
288
- if (crop) {
289
- url.searchParams.append("crop", crop);
290
- }
291
- return url.href.replace(PLACEHOLDER_DOMAIN, "");
251
+ if (!src) return "";
252
+ const url = new URL(src, PLACEHOLDER_DOMAIN);
253
+ if (width) url.searchParams.append("width", Math.round(width).toString());
254
+ if (height) url.searchParams.append("height", Math.round(height).toString());
255
+ if (crop) url.searchParams.append("crop", crop);
256
+ return url.href.replace(PLACEHOLDER_DOMAIN, "");
292
257
  }
258
+ /**
259
+ * Checks whether the width and height share the same unit type
260
+ * @param width - The width of the image, e.g. 100% | 10px
261
+ * @param height - The height of the image, e.g. auto | 100px
262
+ * @returns Whether the width and height share the same unit type (boolean)
263
+ */
293
264
  function unitsMatch(width = "100%", height = "auto") {
294
- return getUnitValueParts(width.toString()).unit === getUnitValueParts(height.toString()).unit;
265
+ return getUnitValueParts(width.toString()).unit === getUnitValueParts(height.toString()).unit;
295
266
  }
267
+ /**
268
+ * Given a CSS size, returns the unit and number parts of the value
269
+ * @param value - The CSS size, e.g. 100px
270
+ * @returns The unit and number parts of the value, e.g. \{unit: 'px', number: 100\}
271
+ */
296
272
  function getUnitValueParts(value) {
297
- const unit = value.replace(/[0-9.]/g, "");
298
- const number = parseFloat(value.replace(unit, ""));
299
- return {
300
- unit: unit === "" ? number === void 0 ? "auto" : "px" : unit,
301
- number
302
- };
273
+ const unit = value.replace(/[0-9.]/g, "");
274
+ const number = parseFloat(value.replace(unit, ""));
275
+ return {
276
+ unit: unit === "" ? number === void 0 ? "auto" : "px" : unit,
277
+ number
278
+ };
303
279
  }
280
+ /**
281
+ * Given a value, returns the width of the image as an integer in pixels
282
+ * @param value - The width of the image, e.g. 16px | 1rem | 1em | 16
283
+ * @returns The width of the image in pixels, e.g. 16, or undefined if the value is not a fixed unit
284
+ */
304
285
  function getNormalizedFixedUnit(value) {
305
- if (value === void 0) {
306
- return;
307
- }
308
- const { unit, number } = getUnitValueParts(value.toString());
309
- switch (unit) {
310
- case "em":
311
- return number * 16;
312
- case "rem":
313
- return number * 16;
314
- case "px":
315
- return number;
316
- case "":
317
- return number;
318
- default:
319
- return;
320
- }
286
+ if (value === void 0) return;
287
+ const { unit, number } = getUnitValueParts(value.toString());
288
+ switch (unit) {
289
+ case "em": return number * 16;
290
+ case "rem": return number * 16;
291
+ case "px": return number;
292
+ case "": return number;
293
+ default: return;
294
+ }
321
295
  }
296
+ /**
297
+ * This function checks whether a width is fixed or not.
298
+ * @param width - The width of the image, e.g. 100 | '100px' | '100em' | '100rem'
299
+ * @returns Whether the width is fixed or not
300
+ */
322
301
  function isFixedWidth(width) {
323
- const fixedEndings = /\d(px|em|rem)$/;
324
- return typeof width === "number" || fixedEndings.test(width);
302
+ return typeof width === "number" || /\d(px|em|rem)$/.test(width);
325
303
  }
304
+ /**
305
+ * This function generates a srcSet for Shopify images.
306
+ * @param src - The source URL of the image, e.g. https://cdn.shopify.com/static/sample-images/garnished.jpeg
307
+ * @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'\}]
308
+ * @param loader - A function that takes a Shopify image URL and returns a Shopify image URL with the correct query parameters
309
+ * @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'
310
+ */
326
311
  function generateSrcSet(src, sizesArray, loader = shopifyLoader) {
327
- if (!src) {
328
- return "";
329
- }
330
- if ((sizesArray == null ? void 0 : sizesArray.length) === 0 || !sizesArray) {
331
- return src;
332
- }
333
- return sizesArray.map(
334
- (size, i) => `${loader({
335
- src,
336
- width: size.width,
337
- height: size.height,
338
- crop: size.crop
339
- })} ${sizesArray.length === 3 ? `${i + 1}x` : `${size.width ?? 0}w`}`
340
- ).join(`, `);
312
+ if (!src) return "";
313
+ if (sizesArray?.length === 0 || !sizesArray) return src;
314
+ return sizesArray.map((size, i) => `${loader({
315
+ src,
316
+ width: size.width,
317
+ height: size.height,
318
+ crop: size.crop
319
+ })} ${sizesArray.length === 3 ? `${i + 1}x` : `${size.width ?? 0}w`}`).join(`, `);
341
320
  }
321
+ /**
322
+ * This function generates an array of sizes for Shopify images, for both fixed and responsive images.
323
+ * @param width - The CSS width of the image
324
+ * @param intervals - The number of intervals to generate
325
+ * @param startingWidth - The starting width of the image
326
+ * @param incrementSize - The size of each interval
327
+ * @returns An array of widths
328
+ */
342
329
  function generateImageWidths(width = "100%", intervals, startingWidth, incrementSize) {
343
- const responsive = Array.from(
344
- { length: intervals },
345
- (_, i) => i * incrementSize + startingWidth
346
- );
347
- const fixed = Array.from(
348
- { length: 3 },
349
- (_, i) => (i + 1) * (getNormalizedFixedUnit(width) ?? 0)
350
- );
351
- return isFixedWidth(width) ? fixed : responsive;
330
+ const responsive = Array.from({ length: intervals }, (_, i) => i * incrementSize + startingWidth);
331
+ const fixed = Array.from({ length: 3 }, (_, i) => (i + 1) * (getNormalizedFixedUnit(width) ?? 0));
332
+ return isFixedWidth(width) ? fixed : responsive;
352
333
  }
334
+ /**
335
+ * 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`
336
+ * @param aspectRatio - The aspect ratio of the image, e.g. `1/1`
337
+ * @returns The aspect ratio as a number, e.g. `0.5`
338
+ *
339
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio}
340
+ */
353
341
  function parseAspectRatio(aspectRatio) {
354
- if (!aspectRatio) return;
355
- const [width, height] = aspectRatio.split("/");
356
- return 1 / (Number(width) / Number(height));
342
+ if (!aspectRatio) return;
343
+ const [width, height] = aspectRatio.split("/");
344
+ return 1 / (Number(width) / Number(height));
357
345
  }
358
346
  function generateSizes(imageWidths, aspectRatio, crop = "center", sourceDimensions) {
359
- if (!imageWidths) return;
360
- return imageWidths.map((width) => {
361
- return {
362
- width,
363
- height: aspectRatio ? width * (parseAspectRatio(aspectRatio) ?? 1) : void 0,
364
- crop
365
- };
366
- }).filter(({ width, height }) => {
367
- if ((sourceDimensions == null ? void 0 : sourceDimensions.width) && width > sourceDimensions.width) {
368
- return false;
369
- }
370
- if ((sourceDimensions == null ? void 0 : sourceDimensions.height) && height && height > sourceDimensions.height) {
371
- return false;
372
- }
373
- return true;
374
- });
347
+ if (!imageWidths) return;
348
+ return imageWidths.map((width) => {
349
+ return {
350
+ width,
351
+ height: aspectRatio ? width * (parseAspectRatio(aspectRatio) ?? 1) : void 0,
352
+ crop
353
+ };
354
+ }).filter(({ width, height }) => {
355
+ if (sourceDimensions?.width && width > sourceDimensions.width) return false;
356
+ if (sourceDimensions?.height && height && height > sourceDimensions.height) return false;
357
+ return true;
358
+ });
375
359
  }
360
+ //#endregion
376
361
  exports.IMAGE_FRAGMENT = IMAGE_FRAGMENT;
377
362
  exports.Image = Image;
378
- exports.generateImageWidths = generateImageWidths;
379
- exports.generateSizes = generateSizes;
380
- exports.generateSrcSet = generateSrcSet;
381
- exports.parseAspectRatio = parseAspectRatio;
382
363
  exports.shopifyLoader = shopifyLoader;
383
- //# sourceMappingURL=Image.js.map
364
+
365
+ //# sourceMappingURL=Image.js.map