@shopify/hydrogen-react 0.0.0-next-5c16c78 → 0.0.0-next-ea3959b

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 (410) hide show
  1. package/dist/browser-dev/AddToCartButton.mjs +43 -40
  2. package/dist/browser-dev/AddToCartButton.mjs.map +1 -1
  3. package/dist/browser-dev/BaseButton.mjs +13 -15
  4. package/dist/browser-dev/BaseButton.mjs.map +1 -1
  5. package/dist/browser-dev/BuyNowButton.mjs +19 -17
  6. package/dist/browser-dev/BuyNowButton.mjs.map +1 -1
  7. package/dist/browser-dev/CartCheckoutButton.mjs +12 -15
  8. package/dist/browser-dev/CartCheckoutButton.mjs.map +1 -1
  9. package/dist/browser-dev/CartProvider.mjs +73 -67
  10. package/dist/browser-dev/CartProvider.mjs.map +1 -1
  11. package/dist/browser-dev/ExternalVideo.mjs +13 -11
  12. package/dist/browser-dev/ExternalVideo.mjs.map +1 -1
  13. package/dist/browser-dev/Image.mjs +41 -30
  14. package/dist/browser-dev/Image.mjs.map +1 -1
  15. package/dist/browser-dev/MediaFile.mjs +29 -21
  16. package/dist/browser-dev/MediaFile.mjs.map +1 -1
  17. package/dist/browser-dev/ModelViewer.mjs +138 -76
  18. package/dist/browser-dev/ModelViewer.mjs.map +1 -1
  19. package/dist/browser-dev/Money.mjs +12 -9
  20. package/dist/browser-dev/Money.mjs.map +1 -1
  21. package/dist/browser-dev/ProductPrice.mjs +12 -17
  22. package/dist/browser-dev/ProductPrice.mjs.map +1 -1
  23. package/dist/browser-dev/ProductProvider.mjs +102 -73
  24. package/dist/browser-dev/ProductProvider.mjs.map +1 -1
  25. package/dist/browser-dev/ShopPayButton.mjs +4 -14
  26. package/dist/browser-dev/ShopPayButton.mjs.map +1 -1
  27. package/dist/browser-dev/ShopifyProvider.mjs +20 -15
  28. package/dist/browser-dev/ShopifyProvider.mjs.map +1 -1
  29. package/dist/browser-dev/Video.mjs +30 -21
  30. package/dist/browser-dev/Video.mjs.map +1 -1
  31. package/dist/browser-dev/_virtual/index.mjs +11 -2
  32. package/dist/browser-dev/_virtual/index.mjs.map +1 -1
  33. package/dist/browser-dev/_virtual/with-selector.mjs +11 -2
  34. package/dist/browser-dev/_virtual/with-selector.mjs.map +1 -1
  35. package/dist/browser-dev/cart-hooks.mjs +31 -34
  36. package/dist/browser-dev/cart-hooks.mjs.map +1 -1
  37. package/dist/browser-dev/cart-queries.mjs +50 -20
  38. package/dist/browser-dev/cart-queries.mjs.map +1 -1
  39. package/dist/browser-dev/codegen.helpers.mjs +1 -0
  40. package/dist/browser-dev/codegen.helpers.mjs.map +1 -1
  41. package/dist/browser-dev/image-size.mjs +8 -8
  42. package/dist/browser-dev/image-size.mjs.map +1 -1
  43. package/dist/browser-dev/load-script.mjs.map +1 -1
  44. package/dist/browser-dev/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
  45. package/dist/browser-dev/node_modules/@xstate/react/es/fsm.mjs +2 -2
  46. package/dist/browser-dev/node_modules/@xstate/react/es/fsm.mjs.map +1 -1
  47. package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -1
  48. package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -1
  49. package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -1
  50. package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -1
  51. package/dist/browser-dev/node_modules/use-sync-external-store/shim/index.mjs +3 -3
  52. package/dist/browser-dev/node_modules/use-sync-external-store/shim/with-selector.mjs +1 -1
  53. package/dist/browser-dev/parse-metafield.mjs +4 -5
  54. package/dist/browser-dev/parse-metafield.mjs.map +1 -1
  55. package/dist/browser-dev/storefront-client.mjs +8 -10
  56. package/dist/browser-dev/storefront-client.mjs.map +1 -1
  57. package/dist/browser-dev/useCartAPIStateMachine.mjs +111 -80
  58. package/dist/browser-dev/useCartAPIStateMachine.mjs.map +1 -1
  59. package/dist/browser-dev/useCartActions.mjs +150 -109
  60. package/dist/browser-dev/useCartActions.mjs.map +1 -1
  61. package/dist/browser-dev/useMoney.mjs +61 -36
  62. package/dist/browser-dev/useMoney.mjs.map +1 -1
  63. package/dist/browser-prod/AddToCartButton.mjs +43 -40
  64. package/dist/browser-prod/AddToCartButton.mjs.map +1 -1
  65. package/dist/browser-prod/BaseButton.mjs +13 -15
  66. package/dist/browser-prod/BaseButton.mjs.map +1 -1
  67. package/dist/browser-prod/BuyNowButton.mjs +19 -17
  68. package/dist/browser-prod/BuyNowButton.mjs.map +1 -1
  69. package/dist/browser-prod/CartCheckoutButton.mjs +12 -15
  70. package/dist/browser-prod/CartCheckoutButton.mjs.map +1 -1
  71. package/dist/browser-prod/CartProvider.mjs +73 -67
  72. package/dist/browser-prod/CartProvider.mjs.map +1 -1
  73. package/dist/browser-prod/ExternalVideo.mjs +13 -11
  74. package/dist/browser-prod/ExternalVideo.mjs.map +1 -1
  75. package/dist/browser-prod/Image.mjs +35 -28
  76. package/dist/browser-prod/Image.mjs.map +1 -1
  77. package/dist/browser-prod/MediaFile.mjs +29 -21
  78. package/dist/browser-prod/MediaFile.mjs.map +1 -1
  79. package/dist/browser-prod/ModelViewer.mjs +135 -75
  80. package/dist/browser-prod/ModelViewer.mjs.map +1 -1
  81. package/dist/browser-prod/Money.mjs +12 -9
  82. package/dist/browser-prod/Money.mjs.map +1 -1
  83. package/dist/browser-prod/ProductPrice.mjs +12 -17
  84. package/dist/browser-prod/ProductPrice.mjs.map +1 -1
  85. package/dist/browser-prod/ProductProvider.mjs +102 -73
  86. package/dist/browser-prod/ProductProvider.mjs.map +1 -1
  87. package/dist/browser-prod/ShopPayButton.mjs +4 -14
  88. package/dist/browser-prod/ShopPayButton.mjs.map +1 -1
  89. package/dist/browser-prod/ShopifyProvider.mjs +17 -14
  90. package/dist/browser-prod/ShopifyProvider.mjs.map +1 -1
  91. package/dist/browser-prod/Video.mjs +30 -21
  92. package/dist/browser-prod/Video.mjs.map +1 -1
  93. package/dist/browser-prod/_virtual/index.mjs +11 -2
  94. package/dist/browser-prod/_virtual/index.mjs.map +1 -1
  95. package/dist/browser-prod/_virtual/with-selector.mjs +11 -2
  96. package/dist/browser-prod/_virtual/with-selector.mjs.map +1 -1
  97. package/dist/browser-prod/cart-hooks.mjs +31 -34
  98. package/dist/browser-prod/cart-hooks.mjs.map +1 -1
  99. package/dist/browser-prod/cart-queries.mjs +50 -20
  100. package/dist/browser-prod/cart-queries.mjs.map +1 -1
  101. package/dist/browser-prod/codegen.helpers.mjs +1 -0
  102. package/dist/browser-prod/codegen.helpers.mjs.map +1 -1
  103. package/dist/browser-prod/image-size.mjs +8 -8
  104. package/dist/browser-prod/image-size.mjs.map +1 -1
  105. package/dist/browser-prod/load-script.mjs.map +1 -1
  106. package/dist/browser-prod/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
  107. package/dist/browser-prod/node_modules/@xstate/react/es/fsm.mjs +2 -2
  108. package/dist/browser-prod/node_modules/@xstate/react/es/fsm.mjs.map +1 -1
  109. package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -1
  110. package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -1
  111. package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -1
  112. package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -1
  113. package/dist/browser-prod/node_modules/use-sync-external-store/shim/index.mjs +3 -3
  114. package/dist/browser-prod/node_modules/use-sync-external-store/shim/with-selector.mjs +1 -1
  115. package/dist/browser-prod/parse-metafield.mjs +4 -5
  116. package/dist/browser-prod/parse-metafield.mjs.map +1 -1
  117. package/dist/browser-prod/storefront-client.mjs +8 -10
  118. package/dist/browser-prod/storefront-client.mjs.map +1 -1
  119. package/dist/browser-prod/useCartAPIStateMachine.mjs +111 -80
  120. package/dist/browser-prod/useCartAPIStateMachine.mjs.map +1 -1
  121. package/dist/browser-prod/useCartActions.mjs +150 -109
  122. package/dist/browser-prod/useCartActions.mjs.map +1 -1
  123. package/dist/browser-prod/useMoney.mjs +61 -36
  124. package/dist/browser-prod/useMoney.mjs.map +1 -1
  125. package/dist/node-dev/AddToCartButton.js +44 -41
  126. package/dist/node-dev/AddToCartButton.js.map +1 -1
  127. package/dist/node-dev/AddToCartButton.mjs +43 -40
  128. package/dist/node-dev/AddToCartButton.mjs.map +1 -1
  129. package/dist/node-dev/BaseButton.js +14 -16
  130. package/dist/node-dev/BaseButton.js.map +1 -1
  131. package/dist/node-dev/BaseButton.mjs +13 -15
  132. package/dist/node-dev/BaseButton.mjs.map +1 -1
  133. package/dist/node-dev/BuyNowButton.js +20 -18
  134. package/dist/node-dev/BuyNowButton.js.map +1 -1
  135. package/dist/node-dev/BuyNowButton.mjs +19 -17
  136. package/dist/node-dev/BuyNowButton.mjs.map +1 -1
  137. package/dist/node-dev/CartCheckoutButton.js +13 -16
  138. package/dist/node-dev/CartCheckoutButton.js.map +1 -1
  139. package/dist/node-dev/CartCheckoutButton.mjs +12 -15
  140. package/dist/node-dev/CartCheckoutButton.mjs.map +1 -1
  141. package/dist/node-dev/CartProvider.js +74 -68
  142. package/dist/node-dev/CartProvider.js.map +1 -1
  143. package/dist/node-dev/CartProvider.mjs +73 -67
  144. package/dist/node-dev/CartProvider.mjs.map +1 -1
  145. package/dist/node-dev/ExternalVideo.js +14 -12
  146. package/dist/node-dev/ExternalVideo.js.map +1 -1
  147. package/dist/node-dev/ExternalVideo.mjs +13 -11
  148. package/dist/node-dev/ExternalVideo.mjs.map +1 -1
  149. package/dist/node-dev/Image.js +42 -31
  150. package/dist/node-dev/Image.js.map +1 -1
  151. package/dist/node-dev/Image.mjs +41 -30
  152. package/dist/node-dev/Image.mjs.map +1 -1
  153. package/dist/node-dev/MediaFile.js +30 -22
  154. package/dist/node-dev/MediaFile.js.map +1 -1
  155. package/dist/node-dev/MediaFile.mjs +29 -21
  156. package/dist/node-dev/MediaFile.mjs.map +1 -1
  157. package/dist/node-dev/ModelViewer.js +139 -77
  158. package/dist/node-dev/ModelViewer.js.map +1 -1
  159. package/dist/node-dev/ModelViewer.mjs +138 -76
  160. package/dist/node-dev/ModelViewer.mjs.map +1 -1
  161. package/dist/node-dev/Money.js +13 -10
  162. package/dist/node-dev/Money.js.map +1 -1
  163. package/dist/node-dev/Money.mjs +12 -9
  164. package/dist/node-dev/Money.mjs.map +1 -1
  165. package/dist/node-dev/ProductPrice.js +13 -18
  166. package/dist/node-dev/ProductPrice.js.map +1 -1
  167. package/dist/node-dev/ProductPrice.mjs +12 -17
  168. package/dist/node-dev/ProductPrice.mjs.map +1 -1
  169. package/dist/node-dev/ProductProvider.js +103 -74
  170. package/dist/node-dev/ProductProvider.js.map +1 -1
  171. package/dist/node-dev/ProductProvider.mjs +102 -73
  172. package/dist/node-dev/ProductProvider.mjs.map +1 -1
  173. package/dist/node-dev/ShopPayButton.js +5 -15
  174. package/dist/node-dev/ShopPayButton.js.map +1 -1
  175. package/dist/node-dev/ShopPayButton.mjs +4 -14
  176. package/dist/node-dev/ShopPayButton.mjs.map +1 -1
  177. package/dist/node-dev/ShopifyProvider.js +21 -16
  178. package/dist/node-dev/ShopifyProvider.js.map +1 -1
  179. package/dist/node-dev/ShopifyProvider.mjs +20 -15
  180. package/dist/node-dev/ShopifyProvider.mjs.map +1 -1
  181. package/dist/node-dev/Video.js +31 -22
  182. package/dist/node-dev/Video.js.map +1 -1
  183. package/dist/node-dev/Video.mjs +30 -21
  184. package/dist/node-dev/Video.mjs.map +1 -1
  185. package/dist/node-dev/_virtual/index.js +11 -3
  186. package/dist/node-dev/_virtual/index.js.map +1 -1
  187. package/dist/node-dev/_virtual/index.mjs +11 -2
  188. package/dist/node-dev/_virtual/index.mjs.map +1 -1
  189. package/dist/node-dev/_virtual/use-sync-external-store-shim.development.js +1 -1
  190. package/dist/node-dev/_virtual/use-sync-external-store-shim.production.min.js +1 -1
  191. package/dist/node-dev/_virtual/with-selector.development.js +1 -1
  192. package/dist/node-dev/_virtual/with-selector.js +11 -3
  193. package/dist/node-dev/_virtual/with-selector.js.map +1 -1
  194. package/dist/node-dev/_virtual/with-selector.mjs +11 -2
  195. package/dist/node-dev/_virtual/with-selector.mjs.map +1 -1
  196. package/dist/node-dev/_virtual/with-selector.production.min.js +1 -1
  197. package/dist/node-dev/cart-constants.js +1 -1
  198. package/dist/node-dev/cart-hooks.js +32 -35
  199. package/dist/node-dev/cart-hooks.js.map +1 -1
  200. package/dist/node-dev/cart-hooks.mjs +31 -34
  201. package/dist/node-dev/cart-hooks.mjs.map +1 -1
  202. package/dist/node-dev/cart-queries.js +51 -21
  203. package/dist/node-dev/cart-queries.js.map +1 -1
  204. package/dist/node-dev/cart-queries.mjs +50 -20
  205. package/dist/node-dev/cart-queries.mjs.map +1 -1
  206. package/dist/node-dev/codegen.helpers.js +2 -1
  207. package/dist/node-dev/codegen.helpers.js.map +1 -1
  208. package/dist/node-dev/codegen.helpers.mjs +1 -0
  209. package/dist/node-dev/codegen.helpers.mjs.map +1 -1
  210. package/dist/node-dev/flatten-connection.js +1 -1
  211. package/dist/node-dev/image-size.js +9 -9
  212. package/dist/node-dev/image-size.js.map +1 -1
  213. package/dist/node-dev/image-size.mjs +8 -8
  214. package/dist/node-dev/image-size.mjs.map +1 -1
  215. package/dist/node-dev/index.js +1 -1
  216. package/dist/node-dev/load-script.js +1 -1
  217. package/dist/node-dev/load-script.js.map +1 -1
  218. package/dist/node-dev/load-script.mjs.map +1 -1
  219. package/dist/node-dev/node_modules/@xstate/fsm/es/index.js +1 -1
  220. package/dist/node-dev/node_modules/@xstate/fsm/es/index.js.map +1 -1
  221. package/dist/node-dev/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
  222. package/dist/node-dev/node_modules/@xstate/react/es/fsm.js +2 -2
  223. package/dist/node-dev/node_modules/@xstate/react/es/fsm.js.map +1 -1
  224. package/dist/node-dev/node_modules/@xstate/react/es/fsm.mjs +2 -2
  225. package/dist/node-dev/node_modules/@xstate/react/es/fsm.mjs.map +1 -1
  226. package/dist/node-dev/node_modules/@xstate/react/es/useConstant.js +2 -4
  227. package/dist/node-dev/node_modules/@xstate/react/es/useConstant.js.map +1 -1
  228. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +2 -4
  229. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -1
  230. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -1
  231. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +2 -4
  232. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -1
  233. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -1
  234. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +2 -4
  235. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
  236. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -1
  237. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js +2 -4
  238. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -1
  239. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -1
  240. package/dist/node-dev/node_modules/use-sync-external-store/shim/index.js +4 -4
  241. package/dist/node-dev/node_modules/use-sync-external-store/shim/index.mjs +3 -3
  242. package/dist/node-dev/node_modules/use-sync-external-store/shim/with-selector.js +1 -1
  243. package/dist/node-dev/node_modules/use-sync-external-store/shim/with-selector.mjs +1 -1
  244. package/dist/node-dev/parse-metafield.js +5 -6
  245. package/dist/node-dev/parse-metafield.js.map +1 -1
  246. package/dist/node-dev/parse-metafield.mjs +4 -5
  247. package/dist/node-dev/parse-metafield.mjs.map +1 -1
  248. package/dist/node-dev/storefront-api-constants.js +1 -1
  249. package/dist/node-dev/storefront-client.js +9 -11
  250. package/dist/node-dev/storefront-client.js.map +1 -1
  251. package/dist/node-dev/storefront-client.mjs +8 -10
  252. package/dist/node-dev/storefront-client.mjs.map +1 -1
  253. package/dist/node-dev/useCartAPIStateMachine.js +112 -81
  254. package/dist/node-dev/useCartAPIStateMachine.js.map +1 -1
  255. package/dist/node-dev/useCartAPIStateMachine.mjs +111 -80
  256. package/dist/node-dev/useCartAPIStateMachine.mjs.map +1 -1
  257. package/dist/node-dev/useCartActions.js +151 -110
  258. package/dist/node-dev/useCartActions.js.map +1 -1
  259. package/dist/node-dev/useCartActions.mjs +150 -109
  260. package/dist/node-dev/useCartActions.mjs.map +1 -1
  261. package/dist/node-dev/useMoney.js +62 -37
  262. package/dist/node-dev/useMoney.js.map +1 -1
  263. package/dist/node-dev/useMoney.mjs +61 -36
  264. package/dist/node-dev/useMoney.mjs.map +1 -1
  265. package/dist/node-prod/AddToCartButton.js +44 -41
  266. package/dist/node-prod/AddToCartButton.js.map +1 -1
  267. package/dist/node-prod/AddToCartButton.mjs +43 -40
  268. package/dist/node-prod/AddToCartButton.mjs.map +1 -1
  269. package/dist/node-prod/BaseButton.js +14 -16
  270. package/dist/node-prod/BaseButton.js.map +1 -1
  271. package/dist/node-prod/BaseButton.mjs +13 -15
  272. package/dist/node-prod/BaseButton.mjs.map +1 -1
  273. package/dist/node-prod/BuyNowButton.js +20 -18
  274. package/dist/node-prod/BuyNowButton.js.map +1 -1
  275. package/dist/node-prod/BuyNowButton.mjs +19 -17
  276. package/dist/node-prod/BuyNowButton.mjs.map +1 -1
  277. package/dist/node-prod/CartCheckoutButton.js +13 -16
  278. package/dist/node-prod/CartCheckoutButton.js.map +1 -1
  279. package/dist/node-prod/CartCheckoutButton.mjs +12 -15
  280. package/dist/node-prod/CartCheckoutButton.mjs.map +1 -1
  281. package/dist/node-prod/CartProvider.js +74 -68
  282. package/dist/node-prod/CartProvider.js.map +1 -1
  283. package/dist/node-prod/CartProvider.mjs +73 -67
  284. package/dist/node-prod/CartProvider.mjs.map +1 -1
  285. package/dist/node-prod/ExternalVideo.js +14 -12
  286. package/dist/node-prod/ExternalVideo.js.map +1 -1
  287. package/dist/node-prod/ExternalVideo.mjs +13 -11
  288. package/dist/node-prod/ExternalVideo.mjs.map +1 -1
  289. package/dist/node-prod/Image.js +36 -29
  290. package/dist/node-prod/Image.js.map +1 -1
  291. package/dist/node-prod/Image.mjs +35 -28
  292. package/dist/node-prod/Image.mjs.map +1 -1
  293. package/dist/node-prod/MediaFile.js +30 -22
  294. package/dist/node-prod/MediaFile.js.map +1 -1
  295. package/dist/node-prod/MediaFile.mjs +29 -21
  296. package/dist/node-prod/MediaFile.mjs.map +1 -1
  297. package/dist/node-prod/ModelViewer.js +136 -76
  298. package/dist/node-prod/ModelViewer.js.map +1 -1
  299. package/dist/node-prod/ModelViewer.mjs +135 -75
  300. package/dist/node-prod/ModelViewer.mjs.map +1 -1
  301. package/dist/node-prod/Money.js +13 -10
  302. package/dist/node-prod/Money.js.map +1 -1
  303. package/dist/node-prod/Money.mjs +12 -9
  304. package/dist/node-prod/Money.mjs.map +1 -1
  305. package/dist/node-prod/ProductPrice.js +13 -18
  306. package/dist/node-prod/ProductPrice.js.map +1 -1
  307. package/dist/node-prod/ProductPrice.mjs +12 -17
  308. package/dist/node-prod/ProductPrice.mjs.map +1 -1
  309. package/dist/node-prod/ProductProvider.js +103 -74
  310. package/dist/node-prod/ProductProvider.js.map +1 -1
  311. package/dist/node-prod/ProductProvider.mjs +102 -73
  312. package/dist/node-prod/ProductProvider.mjs.map +1 -1
  313. package/dist/node-prod/ShopPayButton.js +5 -15
  314. package/dist/node-prod/ShopPayButton.js.map +1 -1
  315. package/dist/node-prod/ShopPayButton.mjs +4 -14
  316. package/dist/node-prod/ShopPayButton.mjs.map +1 -1
  317. package/dist/node-prod/ShopifyProvider.js +18 -15
  318. package/dist/node-prod/ShopifyProvider.js.map +1 -1
  319. package/dist/node-prod/ShopifyProvider.mjs +17 -14
  320. package/dist/node-prod/ShopifyProvider.mjs.map +1 -1
  321. package/dist/node-prod/Video.js +31 -22
  322. package/dist/node-prod/Video.js.map +1 -1
  323. package/dist/node-prod/Video.mjs +30 -21
  324. package/dist/node-prod/Video.mjs.map +1 -1
  325. package/dist/node-prod/_virtual/index.js +11 -3
  326. package/dist/node-prod/_virtual/index.js.map +1 -1
  327. package/dist/node-prod/_virtual/index.mjs +11 -2
  328. package/dist/node-prod/_virtual/index.mjs.map +1 -1
  329. package/dist/node-prod/_virtual/use-sync-external-store-shim.development.js +1 -1
  330. package/dist/node-prod/_virtual/use-sync-external-store-shim.production.min.js +1 -1
  331. package/dist/node-prod/_virtual/with-selector.development.js +1 -1
  332. package/dist/node-prod/_virtual/with-selector.js +11 -3
  333. package/dist/node-prod/_virtual/with-selector.js.map +1 -1
  334. package/dist/node-prod/_virtual/with-selector.mjs +11 -2
  335. package/dist/node-prod/_virtual/with-selector.mjs.map +1 -1
  336. package/dist/node-prod/_virtual/with-selector.production.min.js +1 -1
  337. package/dist/node-prod/cart-constants.js +1 -1
  338. package/dist/node-prod/cart-hooks.js +32 -35
  339. package/dist/node-prod/cart-hooks.js.map +1 -1
  340. package/dist/node-prod/cart-hooks.mjs +31 -34
  341. package/dist/node-prod/cart-hooks.mjs.map +1 -1
  342. package/dist/node-prod/cart-queries.js +51 -21
  343. package/dist/node-prod/cart-queries.js.map +1 -1
  344. package/dist/node-prod/cart-queries.mjs +50 -20
  345. package/dist/node-prod/cart-queries.mjs.map +1 -1
  346. package/dist/node-prod/codegen.helpers.js +2 -1
  347. package/dist/node-prod/codegen.helpers.js.map +1 -1
  348. package/dist/node-prod/codegen.helpers.mjs +1 -0
  349. package/dist/node-prod/codegen.helpers.mjs.map +1 -1
  350. package/dist/node-prod/flatten-connection.js +1 -1
  351. package/dist/node-prod/image-size.js +9 -9
  352. package/dist/node-prod/image-size.js.map +1 -1
  353. package/dist/node-prod/image-size.mjs +8 -8
  354. package/dist/node-prod/image-size.mjs.map +1 -1
  355. package/dist/node-prod/index.js +1 -1
  356. package/dist/node-prod/load-script.js +1 -1
  357. package/dist/node-prod/load-script.js.map +1 -1
  358. package/dist/node-prod/load-script.mjs.map +1 -1
  359. package/dist/node-prod/node_modules/@xstate/fsm/es/index.js +1 -1
  360. package/dist/node-prod/node_modules/@xstate/fsm/es/index.js.map +1 -1
  361. package/dist/node-prod/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
  362. package/dist/node-prod/node_modules/@xstate/react/es/fsm.js +2 -2
  363. package/dist/node-prod/node_modules/@xstate/react/es/fsm.js.map +1 -1
  364. package/dist/node-prod/node_modules/@xstate/react/es/fsm.mjs +2 -2
  365. package/dist/node-prod/node_modules/@xstate/react/es/fsm.mjs.map +1 -1
  366. package/dist/node-prod/node_modules/@xstate/react/es/useConstant.js +2 -4
  367. package/dist/node-prod/node_modules/@xstate/react/es/useConstant.js.map +1 -1
  368. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +2 -4
  369. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -1
  370. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -1
  371. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +2 -4
  372. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -1
  373. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -1
  374. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +2 -4
  375. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
  376. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -1
  377. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js +2 -4
  378. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -1
  379. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -1
  380. package/dist/node-prod/node_modules/use-sync-external-store/shim/index.js +4 -4
  381. package/dist/node-prod/node_modules/use-sync-external-store/shim/index.mjs +3 -3
  382. package/dist/node-prod/node_modules/use-sync-external-store/shim/with-selector.js +1 -1
  383. package/dist/node-prod/node_modules/use-sync-external-store/shim/with-selector.mjs +1 -1
  384. package/dist/node-prod/parse-metafield.js +5 -6
  385. package/dist/node-prod/parse-metafield.js.map +1 -1
  386. package/dist/node-prod/parse-metafield.mjs +4 -5
  387. package/dist/node-prod/parse-metafield.mjs.map +1 -1
  388. package/dist/node-prod/storefront-api-constants.js +1 -1
  389. package/dist/node-prod/storefront-client.js +9 -11
  390. package/dist/node-prod/storefront-client.js.map +1 -1
  391. package/dist/node-prod/storefront-client.mjs +8 -10
  392. package/dist/node-prod/storefront-client.mjs.map +1 -1
  393. package/dist/node-prod/useCartAPIStateMachine.js +112 -81
  394. package/dist/node-prod/useCartAPIStateMachine.js.map +1 -1
  395. package/dist/node-prod/useCartAPIStateMachine.mjs +111 -80
  396. package/dist/node-prod/useCartAPIStateMachine.mjs.map +1 -1
  397. package/dist/node-prod/useCartActions.js +151 -110
  398. package/dist/node-prod/useCartActions.js.map +1 -1
  399. package/dist/node-prod/useCartActions.mjs +150 -109
  400. package/dist/node-prod/useCartActions.mjs.map +1 -1
  401. package/dist/node-prod/useMoney.js +62 -37
  402. package/dist/node-prod/useMoney.js.map +1 -1
  403. package/dist/node-prod/useMoney.mjs +61 -36
  404. package/dist/node-prod/useMoney.mjs.map +1 -1
  405. package/dist/types/parse-metafield.d.ts +1 -1
  406. package/dist/umd/hydrogen-react.dev.js +994 -880
  407. package/dist/umd/hydrogen-react.dev.js.map +1 -1
  408. package/dist/umd/hydrogen-react.prod.js +16 -16
  409. package/dist/umd/hydrogen-react.prod.js.map +1 -1
  410. package/package.json +13 -13
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
3
4
  const Image = require("./Image.js");
4
5
  const Video = require("./Video.js");
5
6
  const ExternalVideo = require("./ExternalVideo.js");
6
7
  const ModelViewer = require("./ModelViewer.js");
7
- const jsxRuntime = require("react/jsx-runtime");
8
8
  function MediaFile({
9
9
  data,
10
10
  mediaOptions,
@@ -19,32 +19,40 @@ function MediaFile({
19
19
  return null;
20
20
  }
21
21
  }
22
- return /* @__PURE__ */ jsxRuntime.jsx(Image.Image, {
23
- ...passthroughProps,
24
- ...mediaOptions == null ? void 0 : mediaOptions.image,
25
- data: data.image
26
- });
22
+ return /* @__PURE__ */ jsxRuntime.jsx(
23
+ Image.Image,
24
+ {
25
+ ...passthroughProps,
26
+ ...mediaOptions == null ? void 0 : mediaOptions.image,
27
+ data: data.image
28
+ }
29
+ );
27
30
  }
28
31
  case "Video": {
29
- return /* @__PURE__ */ jsxRuntime.jsx(Video.Video, {
30
- ...passthroughProps,
31
- ...mediaOptions == null ? void 0 : mediaOptions.video,
32
- data
33
- });
32
+ return /* @__PURE__ */ jsxRuntime.jsx(Video.Video, { ...passthroughProps, ...mediaOptions == null ? void 0 : mediaOptions.video, data });
34
33
  }
35
34
  case "ExternalVideo": {
36
- return /* @__PURE__ */ jsxRuntime.jsx(ExternalVideo.ExternalVideo, {
37
- ...passthroughProps,
38
- ...mediaOptions == null ? void 0 : mediaOptions.externalVideo,
39
- data
40
- });
35
+ return /* @__PURE__ */ jsxRuntime.jsx(
36
+ ExternalVideo.ExternalVideo,
37
+ {
38
+ ...passthroughProps,
39
+ ...mediaOptions == null ? void 0 : mediaOptions.externalVideo,
40
+ data
41
+ }
42
+ );
41
43
  }
42
44
  case "Model3d": {
43
- return /* @__PURE__ */ jsxRuntime.jsx(ModelViewer.ModelViewer, {
44
- ...passthroughProps,
45
- ...mediaOptions == null ? void 0 : mediaOptions.modelViewer,
46
- data
47
- });
45
+ return (
46
+ // @ts-expect-error There are issues with the inferred HTML attribute types here for ModelViewer (and contentEditable), but I think that's a little bit beyond me at the moment
47
+ /* @__PURE__ */ jsxRuntime.jsx(
48
+ ModelViewer.ModelViewer,
49
+ {
50
+ ...passthroughProps,
51
+ ...mediaOptions == null ? void 0 : mediaOptions.modelViewer,
52
+ data
53
+ }
54
+ )
55
+ );
48
56
  }
49
57
  default: {
50
58
  const typenameMissingMessage = `<MediaFile /> requires the '__typename' property to exist on the 'data' prop in order to render the matching sub-component for this type of media.`;
@@ -1 +1 @@
1
- {"version":3,"file":"MediaFile.js","sources":["../../src/MediaFile.tsx"],"sourcesContent":["import {Image, type ShopifyImageProps} from './Image.js';\nimport {Video} from './Video.js';\nimport {ExternalVideo} from './ExternalVideo.js';\nimport {ModelViewer} from './ModelViewer.js';\nimport type {MediaEdge as MediaEdgeType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport type {ModelViewerElement} from '@google/model-viewer/lib/model-viewer.js';\n\ntype BaseProps = React.HTMLAttributes<\n HTMLImageElement | HTMLVideoElement | HTMLIFrameElement | ModelViewerElement\n>;\nexport interface MediaFileProps extends BaseProps {\n /** An object with fields that correspond to the Storefront API's [Media object](https://shopify.dev/api/storefront/reference/products/media). */\n data: PartialDeep<MediaEdgeType['node'], {recurseIntoArrays: true}>;\n /** The options for the `Image`, `Video`, or `ExternalVideo` components. */\n mediaOptions?: {\n /** Props that will only apply when an `<Image />` is rendered */\n image?: Omit<ShopifyImageProps, 'data'>;\n /** Props that will only apply when a `<Video />` is rendered */\n video?: Omit<React.ComponentProps<typeof Video>, 'data'>;\n /** Props that will only apply when an `<ExternalVideo />` is rendered */\n externalVideo?: Omit<\n React.ComponentProps<typeof ExternalVideo>['options'],\n 'data'\n >;\n /** Props that will only apply when a `<ModelViewer />` is rendered */\n modelViewer?: Omit<typeof ModelViewer, 'data'>;\n };\n}\n\n/**\n * The `MediaFile` component renders the media for the Storefront API's\n * [Media object](https://shopify.dev/api/storefront/reference/products/media). It renders an `Image`, a\n * `Video`, an `ExternalVideo`, or a `ModelViewer` depending on the `__typename` of the `data` prop.\n */\nexport function MediaFile({\n data,\n mediaOptions,\n ...passthroughProps\n}: MediaFileProps) {\n switch (data.__typename) {\n case 'MediaImage': {\n if (!data.image) {\n const noDataImage = `<MediaFile/>: 'data.image' does not exist for __typename of 'MediaImage'; rendering 'null' by default.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noDataImage);\n } else {\n console.warn(noDataImage);\n return null;\n }\n }\n\n return (\n <Image\n {...passthroughProps}\n {...mediaOptions?.image}\n data={data.image}\n />\n );\n }\n case 'Video': {\n return (\n <Video {...passthroughProps} {...mediaOptions?.video} data={data} />\n );\n }\n case 'ExternalVideo': {\n return (\n <ExternalVideo\n {...passthroughProps}\n {...mediaOptions?.externalVideo}\n data={data}\n />\n );\n }\n case 'Model3d': {\n return (\n // @ts-expect-error There are issues with the inferred HTML attribute types here for ModelViewer (and contentEditable), but I think that's a little bit beyond me at the moment\n <ModelViewer\n {...passthroughProps}\n {...mediaOptions?.modelViewer}\n data={data}\n />\n );\n }\n default: {\n const typenameMissingMessage = `<MediaFile /> requires the '__typename' property to exist on the 'data' prop in order to render the matching sub-component for this type of media.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(typenameMissingMessage);\n } else {\n console.error(`${typenameMissingMessage} Rendering 'null' by default`);\n return null;\n }\n }\n }\n}\n"],"names":["MediaFile","data","mediaOptions","passthroughProps","__typename","image","noDataImage","console","warn","Image","Video","video","ExternalVideo","externalVideo","ModelViewer","modelViewer","typenameMissingMessage","error"],"mappings":";;;;;;;AAmCO,SAASA,UAAU;AAAA,EACxBC;AAAAA,EACAC;AAAAA,KACGC;AACW,GAAG;AACjB,UAAQF,KAAKG,YAAU;AAAA,IACrB,KAAK,cAAc;AACb,UAAA,CAACH,KAAKI,OAAO;AACf,cAAMC,cAAe;AAGd;AACLC,kBAAQC,KAAKF,WAAW;AACjB,iBAAA;AAAA,QACT;AAAA,MACF;AAEA,4CACGG,MAAAA,OAAK;AAAA,QAAA,GACAN;AAAAA,QAAgB,GAChBD,6CAAcG;AAAAA,QAClB,MAAMJ,KAAKI;AAAAA,MAAAA,CACX;AAAA,IAEN;AAAA,IACA,KAAK,SAAS;AACZ,4CACGK,MAAAA,OAAK;AAAA,QAAA,GAAKP;AAAAA,QAAgB,GAAMD,6CAAcS;AAAAA,QAAO;AAAA,MAAA,CAAc;AAAA,IAExE;AAAA,IACA,KAAK,iBAAiB;AACpB,4CACGC,cAAAA,eAAa;AAAA,QAAA,GACRT;AAAAA,QAAgB,GAChBD,6CAAcW;AAAAA,QAClB;AAAA,MAAA,CACA;AAAA,IAEN;AAAA,IACA,KAAK,WAAW;AACd,4CAEGC,YAAAA,aAAW;AAAA,QAAA,GACNX;AAAAA,QAAgB,GAChBD,6CAAca;AAAAA,QAClB;AAAA,MAAA,CAAW;AAAA,IAGjB;AAAA,IACA,SAAS;AACP,YAAMC,yBAA0B;AAGzB;AACGC,gBAAAA,MAAO,GAAED,qDAAqD;AAC/D,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EAAC;AAEL;;"}
1
+ {"version":3,"file":"MediaFile.js","sources":["../../src/MediaFile.tsx"],"sourcesContent":["import {Image, type ShopifyImageProps} from './Image.js';\nimport {Video} from './Video.js';\nimport {ExternalVideo} from './ExternalVideo.js';\nimport {ModelViewer} from './ModelViewer.js';\nimport type {MediaEdge as MediaEdgeType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport type {ModelViewerElement} from '@google/model-viewer/lib/model-viewer.js';\n\ntype BaseProps = React.HTMLAttributes<\n HTMLImageElement | HTMLVideoElement | HTMLIFrameElement | ModelViewerElement\n>;\nexport interface MediaFileProps extends BaseProps {\n /** An object with fields that correspond to the Storefront API's [Media object](https://shopify.dev/api/storefront/reference/products/media). */\n data: PartialDeep<MediaEdgeType['node'], {recurseIntoArrays: true}>;\n /** The options for the `Image`, `Video`, or `ExternalVideo` components. */\n mediaOptions?: {\n /** Props that will only apply when an `<Image />` is rendered */\n image?: Omit<ShopifyImageProps, 'data'>;\n /** Props that will only apply when a `<Video />` is rendered */\n video?: Omit<React.ComponentProps<typeof Video>, 'data'>;\n /** Props that will only apply when an `<ExternalVideo />` is rendered */\n externalVideo?: Omit<\n React.ComponentProps<typeof ExternalVideo>['options'],\n 'data'\n >;\n /** Props that will only apply when a `<ModelViewer />` is rendered */\n modelViewer?: Omit<typeof ModelViewer, 'data'>;\n };\n}\n\n/**\n * The `MediaFile` component renders the media for the Storefront API's\n * [Media object](https://shopify.dev/api/storefront/reference/products/media). It renders an `Image`, a\n * `Video`, an `ExternalVideo`, or a `ModelViewer` depending on the `__typename` of the `data` prop.\n */\nexport function MediaFile({\n data,\n mediaOptions,\n ...passthroughProps\n}: MediaFileProps) {\n switch (data.__typename) {\n case 'MediaImage': {\n if (!data.image) {\n const noDataImage = `<MediaFile/>: 'data.image' does not exist for __typename of 'MediaImage'; rendering 'null' by default.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noDataImage);\n } else {\n console.warn(noDataImage);\n return null;\n }\n }\n\n return (\n <Image\n {...passthroughProps}\n {...mediaOptions?.image}\n data={data.image}\n />\n );\n }\n case 'Video': {\n return (\n <Video {...passthroughProps} {...mediaOptions?.video} data={data} />\n );\n }\n case 'ExternalVideo': {\n return (\n <ExternalVideo\n {...passthroughProps}\n {...mediaOptions?.externalVideo}\n data={data}\n />\n );\n }\n case 'Model3d': {\n return (\n // @ts-expect-error There are issues with the inferred HTML attribute types here for ModelViewer (and contentEditable), but I think that's a little bit beyond me at the moment\n <ModelViewer\n {...passthroughProps}\n {...mediaOptions?.modelViewer}\n data={data}\n />\n );\n }\n default: {\n const typenameMissingMessage = `<MediaFile /> requires the '__typename' property to exist on the 'data' prop in order to render the matching sub-component for this type of media.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(typenameMissingMessage);\n } else {\n console.error(`${typenameMissingMessage} Rendering 'null' by default`);\n return null;\n }\n }\n }\n}\n"],"names":["jsx","Image","Video","ExternalVideo","ModelViewer"],"mappings":";;;;;;;AAmCO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAmB;AACjB,UAAQ,KAAK,YAAY;AAAA,IACvB,KAAK,cAAc;AACb,UAAA,CAAC,KAAK,OAAO;AACf,cAAM,cAAc;AAGb;AACL,kBAAQ,KAAK,WAAW;AACjB,iBAAA;AAAA,QACT;AAAA,MACF;AAGE,aAAAA,2BAAA;AAAA,QAACC,MAAA;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACH,GAAG,6CAAc;AAAA,UAClB,MAAM,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IAGjB;AAAA,IACA,KAAK,SAAS;AACZ,4CACGC,MAAO,OAAA,EAAA,GAAG,kBAAmB,GAAG,6CAAc,OAAO,KAAY,CAAA;AAAA,IAEtE;AAAA,IACA,KAAK,iBAAiB;AAElB,aAAAF,2BAAA;AAAA,QAACG,cAAA;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACH,GAAG,6CAAc;AAAA,UAClB;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAAA,IACA,KAAK,WAAW;AACd;AAAA;AAAA,QAEEH,2BAAA;AAAA,UAACI,YAAA;AAAA,UAAA;AAAA,YACE,GAAG;AAAA,YACH,GAAG,6CAAc;AAAA,YAClB;AAAA,UAAA;AAAA,QACF;AAAA;AAAA,IAEJ;AAAA,IACA,SAAS;AACP,YAAM,yBAAyB;AAGxB;AACG,gBAAA,MAAM,GAAG,qDAAqD;AAC/D,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;;"}
@@ -1,8 +1,8 @@
1
+ import { jsx } from "react/jsx-runtime";
1
2
  import { Image } from "./Image.mjs";
2
3
  import { Video } from "./Video.mjs";
3
4
  import { ExternalVideo } from "./ExternalVideo.mjs";
4
5
  import { ModelViewer } from "./ModelViewer.mjs";
5
- import { jsx } from "react/jsx-runtime";
6
6
  function MediaFile({
7
7
  data,
8
8
  mediaOptions,
@@ -17,32 +17,40 @@ function MediaFile({
17
17
  return null;
18
18
  }
19
19
  }
20
- return /* @__PURE__ */ jsx(Image, {
21
- ...passthroughProps,
22
- ...mediaOptions == null ? void 0 : mediaOptions.image,
23
- data: data.image
24
- });
20
+ return /* @__PURE__ */ jsx(
21
+ Image,
22
+ {
23
+ ...passthroughProps,
24
+ ...mediaOptions == null ? void 0 : mediaOptions.image,
25
+ data: data.image
26
+ }
27
+ );
25
28
  }
26
29
  case "Video": {
27
- return /* @__PURE__ */ jsx(Video, {
28
- ...passthroughProps,
29
- ...mediaOptions == null ? void 0 : mediaOptions.video,
30
- data
31
- });
30
+ return /* @__PURE__ */ jsx(Video, { ...passthroughProps, ...mediaOptions == null ? void 0 : mediaOptions.video, data });
32
31
  }
33
32
  case "ExternalVideo": {
34
- return /* @__PURE__ */ jsx(ExternalVideo, {
35
- ...passthroughProps,
36
- ...mediaOptions == null ? void 0 : mediaOptions.externalVideo,
37
- data
38
- });
33
+ return /* @__PURE__ */ jsx(
34
+ ExternalVideo,
35
+ {
36
+ ...passthroughProps,
37
+ ...mediaOptions == null ? void 0 : mediaOptions.externalVideo,
38
+ data
39
+ }
40
+ );
39
41
  }
40
42
  case "Model3d": {
41
- return /* @__PURE__ */ jsx(ModelViewer, {
42
- ...passthroughProps,
43
- ...mediaOptions == null ? void 0 : mediaOptions.modelViewer,
44
- data
45
- });
43
+ return (
44
+ // @ts-expect-error There are issues with the inferred HTML attribute types here for ModelViewer (and contentEditable), but I think that's a little bit beyond me at the moment
45
+ /* @__PURE__ */ jsx(
46
+ ModelViewer,
47
+ {
48
+ ...passthroughProps,
49
+ ...mediaOptions == null ? void 0 : mediaOptions.modelViewer,
50
+ data
51
+ }
52
+ )
53
+ );
46
54
  }
47
55
  default: {
48
56
  const typenameMissingMessage = `<MediaFile /> requires the '__typename' property to exist on the 'data' prop in order to render the matching sub-component for this type of media.`;
@@ -1 +1 @@
1
- {"version":3,"file":"MediaFile.mjs","sources":["../../src/MediaFile.tsx"],"sourcesContent":["import {Image, type ShopifyImageProps} from './Image.js';\nimport {Video} from './Video.js';\nimport {ExternalVideo} from './ExternalVideo.js';\nimport {ModelViewer} from './ModelViewer.js';\nimport type {MediaEdge as MediaEdgeType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport type {ModelViewerElement} from '@google/model-viewer/lib/model-viewer.js';\n\ntype BaseProps = React.HTMLAttributes<\n HTMLImageElement | HTMLVideoElement | HTMLIFrameElement | ModelViewerElement\n>;\nexport interface MediaFileProps extends BaseProps {\n /** An object with fields that correspond to the Storefront API's [Media object](https://shopify.dev/api/storefront/reference/products/media). */\n data: PartialDeep<MediaEdgeType['node'], {recurseIntoArrays: true}>;\n /** The options for the `Image`, `Video`, or `ExternalVideo` components. */\n mediaOptions?: {\n /** Props that will only apply when an `<Image />` is rendered */\n image?: Omit<ShopifyImageProps, 'data'>;\n /** Props that will only apply when a `<Video />` is rendered */\n video?: Omit<React.ComponentProps<typeof Video>, 'data'>;\n /** Props that will only apply when an `<ExternalVideo />` is rendered */\n externalVideo?: Omit<\n React.ComponentProps<typeof ExternalVideo>['options'],\n 'data'\n >;\n /** Props that will only apply when a `<ModelViewer />` is rendered */\n modelViewer?: Omit<typeof ModelViewer, 'data'>;\n };\n}\n\n/**\n * The `MediaFile` component renders the media for the Storefront API's\n * [Media object](https://shopify.dev/api/storefront/reference/products/media). It renders an `Image`, a\n * `Video`, an `ExternalVideo`, or a `ModelViewer` depending on the `__typename` of the `data` prop.\n */\nexport function MediaFile({\n data,\n mediaOptions,\n ...passthroughProps\n}: MediaFileProps) {\n switch (data.__typename) {\n case 'MediaImage': {\n if (!data.image) {\n const noDataImage = `<MediaFile/>: 'data.image' does not exist for __typename of 'MediaImage'; rendering 'null' by default.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noDataImage);\n } else {\n console.warn(noDataImage);\n return null;\n }\n }\n\n return (\n <Image\n {...passthroughProps}\n {...mediaOptions?.image}\n data={data.image}\n />\n );\n }\n case 'Video': {\n return (\n <Video {...passthroughProps} {...mediaOptions?.video} data={data} />\n );\n }\n case 'ExternalVideo': {\n return (\n <ExternalVideo\n {...passthroughProps}\n {...mediaOptions?.externalVideo}\n data={data}\n />\n );\n }\n case 'Model3d': {\n return (\n // @ts-expect-error There are issues with the inferred HTML attribute types here for ModelViewer (and contentEditable), but I think that's a little bit beyond me at the moment\n <ModelViewer\n {...passthroughProps}\n {...mediaOptions?.modelViewer}\n data={data}\n />\n );\n }\n default: {\n const typenameMissingMessage = `<MediaFile /> requires the '__typename' property to exist on the 'data' prop in order to render the matching sub-component for this type of media.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(typenameMissingMessage);\n } else {\n console.error(`${typenameMissingMessage} Rendering 'null' by default`);\n return null;\n }\n }\n }\n}\n"],"names":["MediaFile","data","mediaOptions","passthroughProps","__typename","image","noDataImage","console","warn","video","externalVideo","modelViewer","typenameMissingMessage","error"],"mappings":";;;;;AAmCO,SAASA,UAAU;AAAA,EACxBC;AAAAA,EACAC;AAAAA,KACGC;AACW,GAAG;AACjB,UAAQF,KAAKG,YAAU;AAAA,IACrB,KAAK,cAAc;AACb,UAAA,CAACH,KAAKI,OAAO;AACf,cAAMC,cAAe;AAGd;AACLC,kBAAQC,KAAKF,WAAW;AACjB,iBAAA;AAAA,QACT;AAAA,MACF;AAEA,iCACG,OAAK;AAAA,QAAA,GACAH;AAAAA,QAAgB,GAChBD,6CAAcG;AAAAA,QAClB,MAAMJ,KAAKI;AAAAA,MAAAA,CACX;AAAA,IAEN;AAAA,IACA,KAAK,SAAS;AACZ,iCACG,OAAK;AAAA,QAAA,GAAKF;AAAAA,QAAgB,GAAMD,6CAAcO;AAAAA,QAAO;AAAA,MAAA,CAAc;AAAA,IAExE;AAAA,IACA,KAAK,iBAAiB;AACpB,iCACG,eAAa;AAAA,QAAA,GACRN;AAAAA,QAAgB,GAChBD,6CAAcQ;AAAAA,QAClB;AAAA,MAAA,CACA;AAAA,IAEN;AAAA,IACA,KAAK,WAAW;AACd,iCAEG,aAAW;AAAA,QAAA,GACNP;AAAAA,QAAgB,GAChBD,6CAAcS;AAAAA,QAClB;AAAA,MAAA,CAAW;AAAA,IAGjB;AAAA,IACA,SAAS;AACP,YAAMC,yBAA0B;AAGzB;AACGC,gBAAAA,MAAO,GAAED,qDAAqD;AAC/D,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EAAC;AAEL;"}
1
+ {"version":3,"file":"MediaFile.mjs","sources":["../../src/MediaFile.tsx"],"sourcesContent":["import {Image, type ShopifyImageProps} from './Image.js';\nimport {Video} from './Video.js';\nimport {ExternalVideo} from './ExternalVideo.js';\nimport {ModelViewer} from './ModelViewer.js';\nimport type {MediaEdge as MediaEdgeType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport type {ModelViewerElement} from '@google/model-viewer/lib/model-viewer.js';\n\ntype BaseProps = React.HTMLAttributes<\n HTMLImageElement | HTMLVideoElement | HTMLIFrameElement | ModelViewerElement\n>;\nexport interface MediaFileProps extends BaseProps {\n /** An object with fields that correspond to the Storefront API's [Media object](https://shopify.dev/api/storefront/reference/products/media). */\n data: PartialDeep<MediaEdgeType['node'], {recurseIntoArrays: true}>;\n /** The options for the `Image`, `Video`, or `ExternalVideo` components. */\n mediaOptions?: {\n /** Props that will only apply when an `<Image />` is rendered */\n image?: Omit<ShopifyImageProps, 'data'>;\n /** Props that will only apply when a `<Video />` is rendered */\n video?: Omit<React.ComponentProps<typeof Video>, 'data'>;\n /** Props that will only apply when an `<ExternalVideo />` is rendered */\n externalVideo?: Omit<\n React.ComponentProps<typeof ExternalVideo>['options'],\n 'data'\n >;\n /** Props that will only apply when a `<ModelViewer />` is rendered */\n modelViewer?: Omit<typeof ModelViewer, 'data'>;\n };\n}\n\n/**\n * The `MediaFile` component renders the media for the Storefront API's\n * [Media object](https://shopify.dev/api/storefront/reference/products/media). It renders an `Image`, a\n * `Video`, an `ExternalVideo`, or a `ModelViewer` depending on the `__typename` of the `data` prop.\n */\nexport function MediaFile({\n data,\n mediaOptions,\n ...passthroughProps\n}: MediaFileProps) {\n switch (data.__typename) {\n case 'MediaImage': {\n if (!data.image) {\n const noDataImage = `<MediaFile/>: 'data.image' does not exist for __typename of 'MediaImage'; rendering 'null' by default.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noDataImage);\n } else {\n console.warn(noDataImage);\n return null;\n }\n }\n\n return (\n <Image\n {...passthroughProps}\n {...mediaOptions?.image}\n data={data.image}\n />\n );\n }\n case 'Video': {\n return (\n <Video {...passthroughProps} {...mediaOptions?.video} data={data} />\n );\n }\n case 'ExternalVideo': {\n return (\n <ExternalVideo\n {...passthroughProps}\n {...mediaOptions?.externalVideo}\n data={data}\n />\n );\n }\n case 'Model3d': {\n return (\n // @ts-expect-error There are issues with the inferred HTML attribute types here for ModelViewer (and contentEditable), but I think that's a little bit beyond me at the moment\n <ModelViewer\n {...passthroughProps}\n {...mediaOptions?.modelViewer}\n data={data}\n />\n );\n }\n default: {\n const typenameMissingMessage = `<MediaFile /> requires the '__typename' property to exist on the 'data' prop in order to render the matching sub-component for this type of media.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(typenameMissingMessage);\n } else {\n console.error(`${typenameMissingMessage} Rendering 'null' by default`);\n return null;\n }\n }\n }\n}\n"],"names":[],"mappings":";;;;;AAmCO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAmB;AACjB,UAAQ,KAAK,YAAY;AAAA,IACvB,KAAK,cAAc;AACb,UAAA,CAAC,KAAK,OAAO;AACf,cAAM,cAAc;AAGb;AACL,kBAAQ,KAAK,WAAW;AACjB,iBAAA;AAAA,QACT;AAAA,MACF;AAGE,aAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACH,GAAG,6CAAc;AAAA,UAClB,MAAM,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IAGjB;AAAA,IACA,KAAK,SAAS;AACZ,iCACG,OAAO,EAAA,GAAG,kBAAmB,GAAG,6CAAc,OAAO,KAAY,CAAA;AAAA,IAEtE;AAAA,IACA,KAAK,iBAAiB;AAElB,aAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACH,GAAG,6CAAc;AAAA,UAClB;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAAA,IACA,KAAK,WAAW;AACd;AAAA;AAAA,QAEE;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAG;AAAA,YACH,GAAG,6CAAc;AAAA,YAClB;AAAA,UAAA;AAAA,QACF;AAAA;AAAA,IAEJ;AAAA,IACA,SAAS;AACP,YAAM,yBAAyB;AAGxB;AACG,gBAAA,MAAM,GAAG,qDAAqD;AAC/D,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;"}
@@ -1,23 +1,23 @@
1
1
  "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
3
4
  const require$$0 = require("react");
4
5
  const loadScript = require("./load-script.js");
5
- const jsxRuntime = require("react/jsx-runtime");
6
6
  function ModelViewer(props) {
7
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
8
- const [modelViewer, setModelViewer] = require$$0.useState(void 0);
7
+ var _a, _b, _c;
8
+ const [modelViewer, setModelViewer] = require$$0.useState(
9
+ void 0
10
+ );
9
11
  const callbackRef = require$$0.useCallback((node) => {
10
12
  setModelViewer(node);
11
13
  }, []);
12
- const {
13
- data,
14
- children,
15
- className,
16
- ...passthroughProps
17
- } = props;
18
- const modelViewerLoadedStatus = loadScript.useLoadScript("https://unpkg.com/@google/model-viewer@v1.12.1/dist/model-viewer.min.js", {
19
- module: true
20
- });
14
+ const { data, children, className, ...passthroughProps } = props;
15
+ const modelViewerLoadedStatus = loadScript.useLoadScript(
16
+ "https://unpkg.com/@google/model-viewer@v1.12.1/dist/model-viewer.min.js",
17
+ {
18
+ module: true
19
+ }
20
+ );
21
21
  require$$0.useEffect(() => {
22
22
  if (!modelViewer) {
23
23
  return;
@@ -29,25 +29,43 @@ function ModelViewer(props) {
29
29
  if (passthroughProps.onPreload)
30
30
  modelViewer.addEventListener("preload", passthroughProps.onPreload);
31
31
  if (passthroughProps.onModelVisibility)
32
- modelViewer.addEventListener("model-visibility", passthroughProps.onModelVisibility);
32
+ modelViewer.addEventListener(
33
+ "model-visibility",
34
+ passthroughProps.onModelVisibility
35
+ );
33
36
  if (passthroughProps.onProgress)
34
37
  modelViewer.addEventListener("progress", passthroughProps.onProgress);
35
38
  if (passthroughProps.onArStatus)
36
39
  modelViewer.addEventListener("ar-status", passthroughProps.onArStatus);
37
40
  if (passthroughProps.onArTracking)
38
- modelViewer.addEventListener("ar-tracking", passthroughProps.onArTracking);
41
+ modelViewer.addEventListener(
42
+ "ar-tracking",
43
+ passthroughProps.onArTracking
44
+ );
39
45
  if (passthroughProps.onQuickLookButtonTapped)
40
- modelViewer.addEventListener("quick-look-button-tapped", passthroughProps.onQuickLookButtonTapped);
46
+ modelViewer.addEventListener(
47
+ "quick-look-button-tapped",
48
+ passthroughProps.onQuickLookButtonTapped
49
+ );
41
50
  if (passthroughProps.onCameraChange)
42
- modelViewer.addEventListener("camera-change", passthroughProps.onCameraChange);
51
+ modelViewer.addEventListener(
52
+ "camera-change",
53
+ passthroughProps.onCameraChange
54
+ );
43
55
  if (passthroughProps.onEnvironmentChange)
44
- modelViewer.addEventListener("environment-change", passthroughProps.onEnvironmentChange);
56
+ modelViewer.addEventListener(
57
+ "environment-change",
58
+ passthroughProps.onEnvironmentChange
59
+ );
45
60
  if (passthroughProps.onPlay)
46
61
  modelViewer.addEventListener("play", passthroughProps.onPlay);
47
62
  if (passthroughProps.onPause)
48
63
  modelViewer.addEventListener("ar-status", passthroughProps.onPause);
49
64
  if (passthroughProps.onSceneGraphReady)
50
- modelViewer.addEventListener("scene-graph-ready", passthroughProps.onSceneGraphReady);
65
+ modelViewer.addEventListener(
66
+ "scene-graph-ready",
67
+ passthroughProps.onSceneGraphReady
68
+ );
51
69
  return () => {
52
70
  if (modelViewer == null) {
53
71
  return;
@@ -59,27 +77,66 @@ function ModelViewer(props) {
59
77
  if (passthroughProps.onPreload)
60
78
  modelViewer.removeEventListener("preload", passthroughProps.onPreload);
61
79
  if (passthroughProps.onModelVisibility)
62
- modelViewer.removeEventListener("model-visibility", passthroughProps.onModelVisibility);
80
+ modelViewer.removeEventListener(
81
+ "model-visibility",
82
+ passthroughProps.onModelVisibility
83
+ );
63
84
  if (passthroughProps.onProgress)
64
- modelViewer.removeEventListener("progress", passthroughProps.onProgress);
85
+ modelViewer.removeEventListener(
86
+ "progress",
87
+ passthroughProps.onProgress
88
+ );
65
89
  if (passthroughProps.onArStatus)
66
- modelViewer.removeEventListener("ar-status", passthroughProps.onArStatus);
90
+ modelViewer.removeEventListener(
91
+ "ar-status",
92
+ passthroughProps.onArStatus
93
+ );
67
94
  if (passthroughProps.onArTracking)
68
- modelViewer.removeEventListener("ar-tracking", passthroughProps.onArTracking);
95
+ modelViewer.removeEventListener(
96
+ "ar-tracking",
97
+ passthroughProps.onArTracking
98
+ );
69
99
  if (passthroughProps.onQuickLookButtonTapped)
70
- modelViewer.removeEventListener("quick-look-button-tapped", passthroughProps.onQuickLookButtonTapped);
100
+ modelViewer.removeEventListener(
101
+ "quick-look-button-tapped",
102
+ passthroughProps.onQuickLookButtonTapped
103
+ );
71
104
  if (passthroughProps.onCameraChange)
72
- modelViewer.removeEventListener("camera-change", passthroughProps.onCameraChange);
105
+ modelViewer.removeEventListener(
106
+ "camera-change",
107
+ passthroughProps.onCameraChange
108
+ );
73
109
  if (passthroughProps.onEnvironmentChange)
74
- modelViewer.removeEventListener("environment-change", passthroughProps.onEnvironmentChange);
110
+ modelViewer.removeEventListener(
111
+ "environment-change",
112
+ passthroughProps.onEnvironmentChange
113
+ );
75
114
  if (passthroughProps.onPlay)
76
115
  modelViewer.removeEventListener("play", passthroughProps.onPlay);
77
116
  if (passthroughProps.onPause)
78
117
  modelViewer.removeEventListener("ar-status", passthroughProps.onPause);
79
118
  if (passthroughProps.onSceneGraphReady)
80
- modelViewer.removeEventListener("scene-graph-ready", passthroughProps.onSceneGraphReady);
119
+ modelViewer.removeEventListener(
120
+ "scene-graph-ready",
121
+ passthroughProps.onSceneGraphReady
122
+ );
81
123
  };
82
- }, [modelViewer, passthroughProps.onArStatus, passthroughProps.onArTracking, passthroughProps.onCameraChange, passthroughProps.onEnvironmentChange, passthroughProps.onError, passthroughProps.onLoad, passthroughProps.onModelVisibility, passthroughProps.onPause, passthroughProps.onPlay, passthroughProps.onPreload, passthroughProps.onProgress, passthroughProps.onQuickLookButtonTapped, passthroughProps.onSceneGraphReady]);
124
+ }, [
125
+ modelViewer,
126
+ passthroughProps.onArStatus,
127
+ passthroughProps.onArTracking,
128
+ passthroughProps.onCameraChange,
129
+ passthroughProps.onEnvironmentChange,
130
+ passthroughProps.onError,
131
+ passthroughProps.onLoad,
132
+ passthroughProps.onModelVisibility,
133
+ passthroughProps.onPause,
134
+ passthroughProps.onPlay,
135
+ passthroughProps.onPreload,
136
+ passthroughProps.onProgress,
137
+ passthroughProps.onQuickLookButtonTapped,
138
+ passthroughProps.onSceneGraphReady
139
+ ]);
83
140
  if (modelViewerLoadedStatus !== "done") {
84
141
  return null;
85
142
  }
@@ -90,54 +147,57 @@ function ModelViewer(props) {
90
147
  return null;
91
148
  }
92
149
  }
93
- return /* @__PURE__ */ jsxRuntime.jsx("model-viewer", {
94
- ref: callbackRef,
95
- ...passthroughProps,
96
- className,
97
- id: (_c = passthroughProps.id) != null ? _c : data.id,
98
- src: data.sources[0].url,
99
- alt: (_d = data.alt) != null ? _d : null,
100
- "camera-controls": (_e = passthroughProps.cameraControls) != null ? _e : true,
101
- poster: (_g = passthroughProps.poster || ((_f = data.previewImage) == null ? void 0 : _f.url)) != null ? _g : null,
102
- autoplay: (_h = passthroughProps.autoplay) != null ? _h : true,
103
- loading: passthroughProps.loading,
104
- reveal: passthroughProps.reveal,
105
- ar: passthroughProps.ar,
106
- "ar-modes": passthroughProps.arModes,
107
- "ar-scale": passthroughProps.arScale,
108
- "ar-placement": passthroughProps.arPlacement,
109
- "ios-src": passthroughProps.iosSrc,
110
- "touch-action": passthroughProps.touchAction,
111
- "disable-zoom": passthroughProps.disableZoom,
112
- "orbit-sensitivity": passthroughProps.orbitSensitivity,
113
- "auto-rotate": passthroughProps.autoRotate,
114
- "auto-rotate-delay": passthroughProps.autoRotateDelay,
115
- "rotation-per-second": passthroughProps.rotationPerSecond,
116
- "interaction-policy": passthroughProps.interactionPolicy,
117
- "interaction-prompt": passthroughProps.interactionPrompt,
118
- "interaction-prompt-style": passthroughProps.interactionPromptStyle,
119
- "interaction-prompt-threshold": passthroughProps.interactionPromptThreshold,
120
- "camera-orbit": passthroughProps.cameraOrbit,
121
- "camera-target": passthroughProps.cameraTarget,
122
- "field-of-view": passthroughProps.fieldOfView,
123
- "max-camera-orbit": passthroughProps.maxCameraOrbit,
124
- "min-camera-orbit": passthroughProps.minCameraOrbit,
125
- "max-field-of-view": passthroughProps.maxFieldOfView,
126
- "min-field-of-view": passthroughProps.minFieldOfView,
127
- bounds: passthroughProps.bounds,
128
- "interpolation-decay": (_i = passthroughProps.interpolationDecay) != null ? _i : 100,
129
- "skybox-image": passthroughProps.skyboxImage,
130
- "environment-image": passthroughProps.environmentImage,
131
- exposure: passthroughProps.exposure,
132
- "shadow-intensity": (_j = passthroughProps.shadowIntensity) != null ? _j : 0,
133
- "shadow-softness": (_k = passthroughProps.shadowSoftness) != null ? _k : 0,
134
- "animation-name": passthroughProps.animationName,
135
- "animation-crossfade-duration": passthroughProps.animationCrossfadeDuration,
136
- "variant-name": passthroughProps.variantName,
137
- orientation: passthroughProps.orientation,
138
- scale: passthroughProps.scale,
139
- children
140
- });
150
+ return /* @__PURE__ */ jsxRuntime.jsx(
151
+ "model-viewer",
152
+ {
153
+ ref: callbackRef,
154
+ ...passthroughProps,
155
+ className,
156
+ id: passthroughProps.id ?? data.id,
157
+ src: data.sources[0].url,
158
+ alt: data.alt ?? null,
159
+ "camera-controls": passthroughProps.cameraControls ?? true,
160
+ poster: (passthroughProps.poster || ((_c = data.previewImage) == null ? void 0 : _c.url)) ?? null,
161
+ autoplay: passthroughProps.autoplay ?? true,
162
+ loading: passthroughProps.loading,
163
+ reveal: passthroughProps.reveal,
164
+ ar: passthroughProps.ar,
165
+ "ar-modes": passthroughProps.arModes,
166
+ "ar-scale": passthroughProps.arScale,
167
+ "ar-placement": passthroughProps.arPlacement,
168
+ "ios-src": passthroughProps.iosSrc,
169
+ "touch-action": passthroughProps.touchAction,
170
+ "disable-zoom": passthroughProps.disableZoom,
171
+ "orbit-sensitivity": passthroughProps.orbitSensitivity,
172
+ "auto-rotate": passthroughProps.autoRotate,
173
+ "auto-rotate-delay": passthroughProps.autoRotateDelay,
174
+ "rotation-per-second": passthroughProps.rotationPerSecond,
175
+ "interaction-policy": passthroughProps.interactionPolicy,
176
+ "interaction-prompt": passthroughProps.interactionPrompt,
177
+ "interaction-prompt-style": passthroughProps.interactionPromptStyle,
178
+ "interaction-prompt-threshold": passthroughProps.interactionPromptThreshold,
179
+ "camera-orbit": passthroughProps.cameraOrbit,
180
+ "camera-target": passthroughProps.cameraTarget,
181
+ "field-of-view": passthroughProps.fieldOfView,
182
+ "max-camera-orbit": passthroughProps.maxCameraOrbit,
183
+ "min-camera-orbit": passthroughProps.minCameraOrbit,
184
+ "max-field-of-view": passthroughProps.maxFieldOfView,
185
+ "min-field-of-view": passthroughProps.minFieldOfView,
186
+ bounds: passthroughProps.bounds,
187
+ "interpolation-decay": passthroughProps.interpolationDecay ?? 100,
188
+ "skybox-image": passthroughProps.skyboxImage,
189
+ "environment-image": passthroughProps.environmentImage,
190
+ exposure: passthroughProps.exposure,
191
+ "shadow-intensity": passthroughProps.shadowIntensity ?? 0,
192
+ "shadow-softness": passthroughProps.shadowSoftness ?? 0,
193
+ "animation-name": passthroughProps.animationName,
194
+ "animation-crossfade-duration": passthroughProps.animationCrossfadeDuration,
195
+ "variant-name": passthroughProps.variantName,
196
+ orientation: passthroughProps.orientation,
197
+ scale: passthroughProps.scale,
198
+ children
199
+ }
200
+ );
141
201
  }
142
202
  exports.ModelViewer = ModelViewer;
143
203
  //# sourceMappingURL=ModelViewer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelViewer.js","sources":["../../src/ModelViewer.tsx"],"sourcesContent":["import {useState, useEffect, useCallback} from 'react';\nimport {useLoadScript} from './load-script.js';\nimport type {Model3d} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport type {ModelViewerElement} from '@google/model-viewer/lib/model-viewer.js';\n\ntype PropsWeControl = 'src';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n 'model-viewer': PartialDeep<\n ModelViewerElement,\n {recurseIntoArrays: true}\n >;\n }\n }\n}\n\ntype ModelViewerProps = Omit<\n PartialDeep<JSX.IntrinsicElements['model-viewer'], {recurseIntoArrays: true}>,\n PropsWeControl\n> & {\n /** An object with fields that correspond to the Storefront API's [Model3D object](https://shopify.dev/api/storefront/latest/objects/model3d). */\n data: PartialDeep<Model3d, {recurseIntoArrays: true}>;\n /** The callback to invoke when the 'error' event is triggered. Refer to [error in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-error). */\n onError?: (event: Event) => void;\n /** The callback to invoke when the `load` event is triggered. Refer to [load in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-load). */\n onLoad?: (event: Event) => void;\n /** The callback to invoke when the 'preload' event is triggered. Refer to [preload in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-preload). */\n onPreload?: (event: Event) => void;\n /** The callback to invoke when the 'model-visibility' event is triggered. Refer to [model-visibility in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-modelVisibility). */\n onModelVisibility?: (event: Event) => void;\n /** The callback to invoke when the 'progress' event is triggered. Refer to [progress in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-progress). */\n onProgress?: (event: Event) => void;\n /** The callback to invoke when the 'ar-status' event is triggered. Refer to [ar-status in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-events-arStatus). */\n onArStatus?: (event: Event) => void;\n /** The callback to invoke when the 'ar-tracking' event is triggered. Refer to [ar-tracking in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-events-arTracking). */\n onArTracking?: (event: Event) => void;\n /** The callback to invoke when the 'quick-look-button-tapped' event is triggered. Refer to [quick-look-button-tapped in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-events-quickLookButtonTapped). */\n onQuickLookButtonTapped?: (event: Event) => void;\n /** The callback to invoke when the 'camera-change' event is triggered. Refer to [camera-change in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-events-cameraChange). */\n onCameraChange?: (event: Event) => void;\n /** The callback to invoke when the 'environment-change' event is triggered. Refer to [environment-change in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-lightingandenv-events-environmentChange). */\n onEnvironmentChange?: (event: Event) => void;\n /** The callback to invoke when the 'play' event is triggered. Refer to [play in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-animation-events-play). */\n onPlay?: (event: Event) => void;\n /** The callback to invoke when the 'pause' event is triggered. Refer to [pause in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-animation-events-pause). */\n onPause?: (event: Event) => void;\n /** The callback to invoke when the 'scene-graph-ready' event is triggered. Refer to [scene-graph-ready in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-scenegraph-events-sceneGraphReady). */\n onSceneGraphReady?: (event: Event) => void;\n};\n\n/**\n * The `ModelViewer` component renders a 3D model (with the `model-viewer` custom element) for\n * the Storefront API's [Model3d object](https://shopify.dev/api/storefront/reference/products/model3d).\n *\n * The `model-viewer` custom element is lazily downloaded through a dynamically-injected `<script type=\"module\">` tag when the `<ModelViewer />` component is rendered\n *\n * ModelViewer is using version `1.21.1` of the `@google/model-viewer` library.\n */\nexport function ModelViewer(props: ModelViewerProps) {\n const [modelViewer, setModelViewer] = useState<undefined | HTMLElement>(\n undefined\n );\n const callbackRef = useCallback((node: HTMLElement) => {\n setModelViewer(node);\n }, []);\n const {data, children, className, ...passthroughProps} = props;\n\n const modelViewerLoadedStatus = useLoadScript(\n 'https://unpkg.com/@google/model-viewer@v1.12.1/dist/model-viewer.min.js',\n {\n module: true,\n }\n );\n\n useEffect(() => {\n if (!modelViewer) {\n return;\n }\n if (passthroughProps.onError)\n modelViewer.addEventListener('error', passthroughProps.onError);\n if (passthroughProps.onLoad)\n modelViewer.addEventListener('load', passthroughProps.onLoad);\n if (passthroughProps.onPreload)\n modelViewer.addEventListener('preload', passthroughProps.onPreload);\n if (passthroughProps.onModelVisibility)\n modelViewer.addEventListener(\n 'model-visibility',\n passthroughProps.onModelVisibility\n );\n if (passthroughProps.onProgress)\n modelViewer.addEventListener('progress', passthroughProps.onProgress);\n if (passthroughProps.onArStatus)\n modelViewer.addEventListener('ar-status', passthroughProps.onArStatus);\n if (passthroughProps.onArTracking)\n modelViewer.addEventListener(\n 'ar-tracking',\n passthroughProps.onArTracking\n );\n if (passthroughProps.onQuickLookButtonTapped)\n modelViewer.addEventListener(\n 'quick-look-button-tapped',\n passthroughProps.onQuickLookButtonTapped\n );\n if (passthroughProps.onCameraChange)\n modelViewer.addEventListener(\n 'camera-change',\n passthroughProps.onCameraChange\n );\n if (passthroughProps.onEnvironmentChange)\n modelViewer.addEventListener(\n 'environment-change',\n passthroughProps.onEnvironmentChange\n );\n if (passthroughProps.onPlay)\n modelViewer.addEventListener('play', passthroughProps.onPlay);\n if (passthroughProps.onPause)\n modelViewer.addEventListener('ar-status', passthroughProps.onPause);\n if (passthroughProps.onSceneGraphReady)\n modelViewer.addEventListener(\n 'scene-graph-ready',\n passthroughProps.onSceneGraphReady\n );\n\n return () => {\n if (modelViewer == null) {\n return;\n }\n if (passthroughProps.onError)\n modelViewer.removeEventListener('error', passthroughProps.onError);\n if (passthroughProps.onLoad)\n modelViewer.removeEventListener('load', passthroughProps.onLoad);\n if (passthroughProps.onPreload)\n modelViewer.removeEventListener('preload', passthroughProps.onPreload);\n if (passthroughProps.onModelVisibility)\n modelViewer.removeEventListener(\n 'model-visibility',\n passthroughProps.onModelVisibility\n );\n if (passthroughProps.onProgress)\n modelViewer.removeEventListener(\n 'progress',\n passthroughProps.onProgress\n );\n if (passthroughProps.onArStatus)\n modelViewer.removeEventListener(\n 'ar-status',\n passthroughProps.onArStatus\n );\n if (passthroughProps.onArTracking)\n modelViewer.removeEventListener(\n 'ar-tracking',\n passthroughProps.onArTracking\n );\n if (passthroughProps.onQuickLookButtonTapped)\n modelViewer.removeEventListener(\n 'quick-look-button-tapped',\n passthroughProps.onQuickLookButtonTapped\n );\n if (passthroughProps.onCameraChange)\n modelViewer.removeEventListener(\n 'camera-change',\n passthroughProps.onCameraChange\n );\n if (passthroughProps.onEnvironmentChange)\n modelViewer.removeEventListener(\n 'environment-change',\n passthroughProps.onEnvironmentChange\n );\n if (passthroughProps.onPlay)\n modelViewer.removeEventListener('play', passthroughProps.onPlay);\n if (passthroughProps.onPause)\n modelViewer.removeEventListener('ar-status', passthroughProps.onPause);\n if (passthroughProps.onSceneGraphReady)\n modelViewer.removeEventListener(\n 'scene-graph-ready',\n passthroughProps.onSceneGraphReady\n );\n };\n }, [\n modelViewer,\n passthroughProps.onArStatus,\n passthroughProps.onArTracking,\n passthroughProps.onCameraChange,\n passthroughProps.onEnvironmentChange,\n passthroughProps.onError,\n passthroughProps.onLoad,\n passthroughProps.onModelVisibility,\n passthroughProps.onPause,\n passthroughProps.onPlay,\n passthroughProps.onPreload,\n passthroughProps.onProgress,\n passthroughProps.onQuickLookButtonTapped,\n passthroughProps.onSceneGraphReady,\n ]);\n\n if (modelViewerLoadedStatus !== 'done') {\n // TODO: What do we want to display while the model-viewer library loads?\n return null;\n }\n\n if (!data.sources?.[0]?.url) {\n const sourcesUrlError = `<ModelViewer/> requires 'data.sources' prop to be an array, with an object that has a property 'url' on it. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(sourcesUrlError);\n } else {\n console.error(sourcesUrlError);\n return null;\n }\n }\n\n if (__HYDROGEN_DEV__ && !data.alt) {\n console.warn(\n `<ModelViewer/> requires the 'data.alt' prop for accessibility`\n );\n }\n\n return (\n <model-viewer\n // @ts-expect-error ref should exist\n ref={callbackRef}\n {...passthroughProps}\n className={className}\n id={passthroughProps.id ?? data.id}\n src={data.sources[0].url}\n alt={data.alt ?? null}\n camera-controls={passthroughProps.cameraControls ?? true}\n poster={(passthroughProps.poster || data.previewImage?.url) ?? null}\n autoplay={passthroughProps.autoplay ?? true}\n loading={passthroughProps.loading}\n reveal={passthroughProps.reveal}\n ar={passthroughProps.ar}\n ar-modes={passthroughProps.arModes}\n ar-scale={passthroughProps.arScale}\n // @ts-expect-error arPlacement should exist as a type, not sure why it doesn't. https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-attributes-arPlacement\n ar-placement={passthroughProps.arPlacement}\n ios-src={passthroughProps.iosSrc}\n touch-action={passthroughProps.touchAction}\n disable-zoom={passthroughProps.disableZoom}\n orbit-sensitivity={passthroughProps.orbitSensitivity}\n auto-rotate={passthroughProps.autoRotate}\n auto-rotate-delay={passthroughProps.autoRotateDelay}\n // @ts-expect-error rotationPerSecond should exist as a type, not sure why it doesn't. https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-rotationPerSecond\n rotation-per-second={passthroughProps.rotationPerSecond}\n interaction-policy={passthroughProps.interactionPolicy}\n interaction-prompt={passthroughProps.interactionPrompt}\n interaction-prompt-style={passthroughProps.interactionPromptStyle}\n interaction-prompt-threshold={passthroughProps.interactionPromptThreshold}\n camera-orbit={passthroughProps.cameraOrbit}\n camera-target={passthroughProps.cameraTarget}\n field-of-view={passthroughProps.fieldOfView}\n max-camera-orbit={passthroughProps.maxCameraOrbit}\n min-camera-orbit={passthroughProps.minCameraOrbit}\n max-field-of-view={passthroughProps.maxFieldOfView}\n min-field-of-view={passthroughProps.minFieldOfView}\n bounds={passthroughProps.bounds}\n interpolation-decay={passthroughProps.interpolationDecay ?? 100}\n skybox-image={passthroughProps.skyboxImage}\n environment-image={passthroughProps.environmentImage}\n exposure={passthroughProps.exposure}\n shadow-intensity={passthroughProps.shadowIntensity ?? 0}\n shadow-softness={passthroughProps.shadowSoftness ?? 0}\n animation-name={passthroughProps.animationName}\n animation-crossfade-duration={passthroughProps.animationCrossfadeDuration}\n variant-name={passthroughProps.variantName}\n orientation={passthroughProps.orientation}\n scale={passthroughProps.scale}\n >\n {children}\n </model-viewer>\n );\n}\n"],"names":["ModelViewer","props","modelViewer","setModelViewer","useState","undefined","callbackRef","useCallback","node","data","children","className","passthroughProps","modelViewerLoadedStatus","useLoadScript","module","useEffect","onError","addEventListener","onLoad","onPreload","onModelVisibility","onProgress","onArStatus","onArTracking","onQuickLookButtonTapped","onCameraChange","onEnvironmentChange","onPlay","onPause","onSceneGraphReady","removeEventListener","sources","url","sourcesUrlError","console","error","id","alt","cameraControls","poster","previewImage","autoplay","loading","reveal","ar","arModes","arScale","arPlacement","iosSrc","touchAction","disableZoom","orbitSensitivity","autoRotate","autoRotateDelay","rotationPerSecond","interactionPolicy","interactionPrompt","interactionPromptStyle","interactionPromptThreshold","cameraOrbit","cameraTarget","fieldOfView","maxCameraOrbit","minCameraOrbit","maxFieldOfView","minFieldOfView","bounds","interpolationDecay","skyboxImage","environmentImage","exposure","shadowIntensity","shadowSoftness","animationName","animationCrossfadeDuration","variantName","orientation","scale"],"mappings":"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"}
1
+ {"version":3,"file":"ModelViewer.js","sources":["../../src/ModelViewer.tsx"],"sourcesContent":["import {useState, useEffect, useCallback} from 'react';\nimport {useLoadScript} from './load-script.js';\nimport type {Model3d} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport type {ModelViewerElement} from '@google/model-viewer/lib/model-viewer.js';\n\ntype PropsWeControl = 'src';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n 'model-viewer': PartialDeep<\n ModelViewerElement,\n {recurseIntoArrays: true}\n >;\n }\n }\n}\n\ntype ModelViewerProps = Omit<\n PartialDeep<JSX.IntrinsicElements['model-viewer'], {recurseIntoArrays: true}>,\n PropsWeControl\n> & {\n /** An object with fields that correspond to the Storefront API's [Model3D object](https://shopify.dev/api/storefront/latest/objects/model3d). */\n data: PartialDeep<Model3d, {recurseIntoArrays: true}>;\n /** The callback to invoke when the 'error' event is triggered. Refer to [error in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-error). */\n onError?: (event: Event) => void;\n /** The callback to invoke when the `load` event is triggered. Refer to [load in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-load). */\n onLoad?: (event: Event) => void;\n /** The callback to invoke when the 'preload' event is triggered. Refer to [preload in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-preload). */\n onPreload?: (event: Event) => void;\n /** The callback to invoke when the 'model-visibility' event is triggered. Refer to [model-visibility in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-modelVisibility). */\n onModelVisibility?: (event: Event) => void;\n /** The callback to invoke when the 'progress' event is triggered. Refer to [progress in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-progress). */\n onProgress?: (event: Event) => void;\n /** The callback to invoke when the 'ar-status' event is triggered. Refer to [ar-status in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-events-arStatus). */\n onArStatus?: (event: Event) => void;\n /** The callback to invoke when the 'ar-tracking' event is triggered. Refer to [ar-tracking in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-events-arTracking). */\n onArTracking?: (event: Event) => void;\n /** The callback to invoke when the 'quick-look-button-tapped' event is triggered. Refer to [quick-look-button-tapped in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-events-quickLookButtonTapped). */\n onQuickLookButtonTapped?: (event: Event) => void;\n /** The callback to invoke when the 'camera-change' event is triggered. Refer to [camera-change in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-events-cameraChange). */\n onCameraChange?: (event: Event) => void;\n /** The callback to invoke when the 'environment-change' event is triggered. Refer to [environment-change in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-lightingandenv-events-environmentChange). */\n onEnvironmentChange?: (event: Event) => void;\n /** The callback to invoke when the 'play' event is triggered. Refer to [play in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-animation-events-play). */\n onPlay?: (event: Event) => void;\n /** The callback to invoke when the 'pause' event is triggered. Refer to [pause in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-animation-events-pause). */\n onPause?: (event: Event) => void;\n /** The callback to invoke when the 'scene-graph-ready' event is triggered. Refer to [scene-graph-ready in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-scenegraph-events-sceneGraphReady). */\n onSceneGraphReady?: (event: Event) => void;\n};\n\n/**\n * The `ModelViewer` component renders a 3D model (with the `model-viewer` custom element) for\n * the Storefront API's [Model3d object](https://shopify.dev/api/storefront/reference/products/model3d).\n *\n * The `model-viewer` custom element is lazily downloaded through a dynamically-injected `<script type=\"module\">` tag when the `<ModelViewer />` component is rendered\n *\n * ModelViewer is using version `1.21.1` of the `@google/model-viewer` library.\n */\nexport function ModelViewer(props: ModelViewerProps) {\n const [modelViewer, setModelViewer] = useState<undefined | HTMLElement>(\n undefined\n );\n const callbackRef = useCallback((node: HTMLElement) => {\n setModelViewer(node);\n }, []);\n const {data, children, className, ...passthroughProps} = props;\n\n const modelViewerLoadedStatus = useLoadScript(\n 'https://unpkg.com/@google/model-viewer@v1.12.1/dist/model-viewer.min.js',\n {\n module: true,\n }\n );\n\n useEffect(() => {\n if (!modelViewer) {\n return;\n }\n if (passthroughProps.onError)\n modelViewer.addEventListener('error', passthroughProps.onError);\n if (passthroughProps.onLoad)\n modelViewer.addEventListener('load', passthroughProps.onLoad);\n if (passthroughProps.onPreload)\n modelViewer.addEventListener('preload', passthroughProps.onPreload);\n if (passthroughProps.onModelVisibility)\n modelViewer.addEventListener(\n 'model-visibility',\n passthroughProps.onModelVisibility\n );\n if (passthroughProps.onProgress)\n modelViewer.addEventListener('progress', passthroughProps.onProgress);\n if (passthroughProps.onArStatus)\n modelViewer.addEventListener('ar-status', passthroughProps.onArStatus);\n if (passthroughProps.onArTracking)\n modelViewer.addEventListener(\n 'ar-tracking',\n passthroughProps.onArTracking\n );\n if (passthroughProps.onQuickLookButtonTapped)\n modelViewer.addEventListener(\n 'quick-look-button-tapped',\n passthroughProps.onQuickLookButtonTapped\n );\n if (passthroughProps.onCameraChange)\n modelViewer.addEventListener(\n 'camera-change',\n passthroughProps.onCameraChange\n );\n if (passthroughProps.onEnvironmentChange)\n modelViewer.addEventListener(\n 'environment-change',\n passthroughProps.onEnvironmentChange\n );\n if (passthroughProps.onPlay)\n modelViewer.addEventListener('play', passthroughProps.onPlay);\n if (passthroughProps.onPause)\n modelViewer.addEventListener('ar-status', passthroughProps.onPause);\n if (passthroughProps.onSceneGraphReady)\n modelViewer.addEventListener(\n 'scene-graph-ready',\n passthroughProps.onSceneGraphReady\n );\n\n return () => {\n if (modelViewer == null) {\n return;\n }\n if (passthroughProps.onError)\n modelViewer.removeEventListener('error', passthroughProps.onError);\n if (passthroughProps.onLoad)\n modelViewer.removeEventListener('load', passthroughProps.onLoad);\n if (passthroughProps.onPreload)\n modelViewer.removeEventListener('preload', passthroughProps.onPreload);\n if (passthroughProps.onModelVisibility)\n modelViewer.removeEventListener(\n 'model-visibility',\n passthroughProps.onModelVisibility\n );\n if (passthroughProps.onProgress)\n modelViewer.removeEventListener(\n 'progress',\n passthroughProps.onProgress\n );\n if (passthroughProps.onArStatus)\n modelViewer.removeEventListener(\n 'ar-status',\n passthroughProps.onArStatus\n );\n if (passthroughProps.onArTracking)\n modelViewer.removeEventListener(\n 'ar-tracking',\n passthroughProps.onArTracking\n );\n if (passthroughProps.onQuickLookButtonTapped)\n modelViewer.removeEventListener(\n 'quick-look-button-tapped',\n passthroughProps.onQuickLookButtonTapped\n );\n if (passthroughProps.onCameraChange)\n modelViewer.removeEventListener(\n 'camera-change',\n passthroughProps.onCameraChange\n );\n if (passthroughProps.onEnvironmentChange)\n modelViewer.removeEventListener(\n 'environment-change',\n passthroughProps.onEnvironmentChange\n );\n if (passthroughProps.onPlay)\n modelViewer.removeEventListener('play', passthroughProps.onPlay);\n if (passthroughProps.onPause)\n modelViewer.removeEventListener('ar-status', passthroughProps.onPause);\n if (passthroughProps.onSceneGraphReady)\n modelViewer.removeEventListener(\n 'scene-graph-ready',\n passthroughProps.onSceneGraphReady\n );\n };\n }, [\n modelViewer,\n passthroughProps.onArStatus,\n passthroughProps.onArTracking,\n passthroughProps.onCameraChange,\n passthroughProps.onEnvironmentChange,\n passthroughProps.onError,\n passthroughProps.onLoad,\n passthroughProps.onModelVisibility,\n passthroughProps.onPause,\n passthroughProps.onPlay,\n passthroughProps.onPreload,\n passthroughProps.onProgress,\n passthroughProps.onQuickLookButtonTapped,\n passthroughProps.onSceneGraphReady,\n ]);\n\n if (modelViewerLoadedStatus !== 'done') {\n // TODO: What do we want to display while the model-viewer library loads?\n return null;\n }\n\n if (!data.sources?.[0]?.url) {\n const sourcesUrlError = `<ModelViewer/> requires 'data.sources' prop to be an array, with an object that has a property 'url' on it. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(sourcesUrlError);\n } else {\n console.error(sourcesUrlError);\n return null;\n }\n }\n\n if (__HYDROGEN_DEV__ && !data.alt) {\n console.warn(\n `<ModelViewer/> requires the 'data.alt' prop for accessibility`\n );\n }\n\n return (\n <model-viewer\n // @ts-expect-error ref should exist\n ref={callbackRef}\n {...passthroughProps}\n className={className}\n id={passthroughProps.id ?? data.id}\n src={data.sources[0].url}\n alt={data.alt ?? null}\n camera-controls={passthroughProps.cameraControls ?? true}\n poster={(passthroughProps.poster || data.previewImage?.url) ?? null}\n autoplay={passthroughProps.autoplay ?? true}\n loading={passthroughProps.loading}\n reveal={passthroughProps.reveal}\n ar={passthroughProps.ar}\n ar-modes={passthroughProps.arModes}\n ar-scale={passthroughProps.arScale}\n // @ts-expect-error arPlacement should exist as a type, not sure why it doesn't. https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-attributes-arPlacement\n ar-placement={passthroughProps.arPlacement}\n ios-src={passthroughProps.iosSrc}\n touch-action={passthroughProps.touchAction}\n disable-zoom={passthroughProps.disableZoom}\n orbit-sensitivity={passthroughProps.orbitSensitivity}\n auto-rotate={passthroughProps.autoRotate}\n auto-rotate-delay={passthroughProps.autoRotateDelay}\n // @ts-expect-error rotationPerSecond should exist as a type, not sure why it doesn't. https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-rotationPerSecond\n rotation-per-second={passthroughProps.rotationPerSecond}\n interaction-policy={passthroughProps.interactionPolicy}\n interaction-prompt={passthroughProps.interactionPrompt}\n interaction-prompt-style={passthroughProps.interactionPromptStyle}\n interaction-prompt-threshold={passthroughProps.interactionPromptThreshold}\n camera-orbit={passthroughProps.cameraOrbit}\n camera-target={passthroughProps.cameraTarget}\n field-of-view={passthroughProps.fieldOfView}\n max-camera-orbit={passthroughProps.maxCameraOrbit}\n min-camera-orbit={passthroughProps.minCameraOrbit}\n max-field-of-view={passthroughProps.maxFieldOfView}\n min-field-of-view={passthroughProps.minFieldOfView}\n bounds={passthroughProps.bounds}\n interpolation-decay={passthroughProps.interpolationDecay ?? 100}\n skybox-image={passthroughProps.skyboxImage}\n environment-image={passthroughProps.environmentImage}\n exposure={passthroughProps.exposure}\n shadow-intensity={passthroughProps.shadowIntensity ?? 0}\n shadow-softness={passthroughProps.shadowSoftness ?? 0}\n animation-name={passthroughProps.animationName}\n animation-crossfade-duration={passthroughProps.animationCrossfadeDuration}\n variant-name={passthroughProps.variantName}\n orientation={passthroughProps.orientation}\n scale={passthroughProps.scale}\n >\n {children}\n </model-viewer>\n );\n}\n"],"names":["useState","useCallback","useLoadScript","useEffect","jsx"],"mappings":"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"}