@shopify/hydrogen-react 2022.7.1 → 2022.10.1

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 (398) hide show
  1. package/README.md +1 -1
  2. package/dist/dev/CartProvider.js +35 -35
  3. package/dist/dev/CartProvider.js.map +1 -1
  4. package/dist/dev/{CartProvider.cjs → CartProvider.mjs} +36 -36
  5. package/dist/dev/{CartProvider.cjs.map → CartProvider.mjs.map} +1 -1
  6. package/dist/dev/ExternalVideo.js +5 -5
  7. package/dist/dev/ExternalVideo.js.map +1 -1
  8. package/dist/dev/{ExternalVideo.cjs → ExternalVideo.mjs} +6 -6
  9. package/dist/{prod/ExternalVideo.cjs.map → dev/ExternalVideo.mjs.map} +1 -1
  10. package/dist/dev/Image.js +12 -12
  11. package/dist/dev/Image.js.map +1 -1
  12. package/dist/dev/{Image.cjs → Image.mjs} +13 -13
  13. package/dist/dev/{Image.cjs.map → Image.mjs.map} +1 -1
  14. package/dist/dev/MediaFile.js +12 -12
  15. package/dist/dev/MediaFile.js.map +1 -1
  16. package/dist/dev/{MediaFile.cjs → MediaFile.mjs} +13 -13
  17. package/dist/dev/{MediaFile.cjs.map → MediaFile.mjs.map} +1 -1
  18. package/dist/dev/Metafield.js +32 -32
  19. package/dist/dev/Metafield.js.map +1 -1
  20. package/dist/dev/{Metafield.cjs → Metafield.mjs} +33 -33
  21. package/dist/dev/Metafield.mjs.map +1 -0
  22. package/dist/dev/ModelViewer.js +11 -11
  23. package/dist/dev/ModelViewer.js.map +1 -1
  24. package/dist/dev/{ModelViewer.cjs → ModelViewer.mjs} +12 -12
  25. package/dist/dev/{ModelViewer.cjs.map → ModelViewer.mjs.map} +1 -1
  26. package/dist/dev/Money.js +8 -8
  27. package/dist/dev/Money.js.map +1 -1
  28. package/dist/{prod/Money.cjs → dev/Money.mjs} +9 -9
  29. package/dist/dev/{Money.cjs.map → Money.mjs.map} +1 -1
  30. package/dist/dev/ProductPrice.js +9 -9
  31. package/dist/dev/ProductPrice.js.map +1 -1
  32. package/dist/{prod/ProductPrice.cjs → dev/ProductPrice.mjs} +10 -10
  33. package/dist/dev/{ProductPrice.cjs.map → ProductPrice.mjs.map} +1 -1
  34. package/dist/dev/ProductProvider.js +25 -25
  35. package/dist/dev/ProductProvider.js.map +1 -1
  36. package/dist/{prod/ProductProvider.cjs → dev/ProductProvider.mjs} +26 -26
  37. package/dist/{prod/ProductProvider.cjs.map → dev/ProductProvider.mjs.map} +1 -1
  38. package/dist/dev/ShopPayButton.js +13 -13
  39. package/dist/dev/ShopPayButton.js.map +1 -1
  40. package/dist/{prod/ShopPayButton.cjs → dev/ShopPayButton.mjs} +14 -14
  41. package/dist/{prod/ShopPayButton.cjs.map → dev/ShopPayButton.mjs.map} +1 -1
  42. package/dist/dev/ShopifyProvider.js +14 -14
  43. package/dist/dev/ShopifyProvider.js.map +1 -1
  44. package/dist/dev/ShopifyProvider.mjs +46 -0
  45. package/dist/dev/{ShopifyProvider.cjs.map → ShopifyProvider.mjs.map} +1 -1
  46. package/dist/dev/Video.js +9 -9
  47. package/dist/dev/Video.js.map +1 -1
  48. package/dist/dev/{Video.cjs → Video.mjs} +10 -10
  49. package/dist/dev/{Video.cjs.map → Video.mjs.map} +1 -1
  50. package/dist/dev/_virtual/index.js +3 -3
  51. package/dist/dev/_virtual/index.js.map +1 -1
  52. package/dist/dev/_virtual/index.mjs +5 -0
  53. package/dist/dev/_virtual/index.mjs.map +1 -0
  54. package/dist/dev/_virtual/use-sync-external-store-shim.development.js +3 -3
  55. package/dist/dev/_virtual/use-sync-external-store-shim.development.js.map +1 -1
  56. package/dist/dev/_virtual/use-sync-external-store-shim.development.mjs +5 -0
  57. package/dist/dev/_virtual/use-sync-external-store-shim.development.mjs.map +1 -0
  58. package/dist/dev/_virtual/use-sync-external-store-shim.production.min.js +3 -3
  59. package/dist/dev/_virtual/use-sync-external-store-shim.production.min.js.map +1 -1
  60. package/dist/dev/_virtual/use-sync-external-store-shim.production.min.mjs +5 -0
  61. package/dist/dev/_virtual/use-sync-external-store-shim.production.min.mjs.map +1 -0
  62. package/dist/dev/_virtual/with-selector.development.js +3 -3
  63. package/dist/dev/_virtual/with-selector.development.js.map +1 -1
  64. package/dist/dev/_virtual/with-selector.development.mjs +5 -0
  65. package/dist/dev/_virtual/with-selector.development.mjs.map +1 -0
  66. package/dist/dev/_virtual/with-selector.js +3 -3
  67. package/dist/dev/_virtual/with-selector.js.map +1 -1
  68. package/dist/dev/_virtual/with-selector.mjs +5 -0
  69. package/dist/dev/_virtual/with-selector.mjs.map +1 -0
  70. package/dist/dev/_virtual/with-selector.production.min.js +3 -3
  71. package/dist/dev/_virtual/with-selector.production.min.js.map +1 -1
  72. package/dist/dev/_virtual/with-selector.production.min.mjs +5 -0
  73. package/dist/dev/_virtual/with-selector.production.min.mjs.map +1 -0
  74. package/dist/dev/cart-constants.js +9 -9
  75. package/dist/dev/cart-constants.js.map +1 -1
  76. package/dist/dev/cart-constants.mjs +17 -0
  77. package/dist/dev/{cart-constants.cjs.map → cart-constants.mjs.map} +1 -1
  78. package/dist/dev/cart-hooks.js +15 -56
  79. package/dist/dev/cart-hooks.js.map +1 -1
  80. package/dist/dev/cart-hooks.mjs +48 -0
  81. package/dist/dev/{cart-hooks.cjs.map → cart-hooks.mjs.map} +1 -1
  82. package/dist/dev/cart-queries.js +11 -113
  83. package/dist/dev/cart-queries.js.map +1 -1
  84. package/dist/{prod/cart-queries.cjs → dev/cart-queries.mjs} +12 -114
  85. package/dist/dev/{cart-queries.cjs.map → cart-queries.mjs.map} +1 -1
  86. package/dist/dev/flatten-connection.js +3 -3
  87. package/dist/dev/flatten-connection.js.map +1 -1
  88. package/dist/dev/{flatten-connection.cjs → flatten-connection.mjs} +4 -4
  89. package/dist/dev/{flatten-connection.cjs.map → flatten-connection.mjs.map} +1 -1
  90. package/dist/dev/image-size.js +6 -6
  91. package/dist/dev/image-size.js.map +1 -1
  92. package/dist/dev/{image-size.cjs → image-size.mjs} +7 -7
  93. package/dist/{prod/image-size.cjs.map → dev/image-size.mjs.map} +1 -1
  94. package/dist/dev/index.js +37 -40
  95. package/dist/dev/index.js.map +1 -1
  96. package/dist/dev/index.mjs +38 -0
  97. package/dist/dev/index.mjs.map +1 -0
  98. package/dist/dev/load-script.js +7 -7
  99. package/dist/dev/load-script.js.map +1 -1
  100. package/dist/{prod/load-script.cjs → dev/load-script.mjs} +8 -8
  101. package/dist/dev/{load-script.cjs.map → load-script.mjs.map} +1 -1
  102. package/dist/dev/node_modules/@xstate/fsm/es/index.js +34 -35
  103. package/dist/dev/node_modules/@xstate/fsm/es/index.js.map +1 -1
  104. package/dist/{prod/node_modules/@xstate/fsm/es/index.cjs → dev/node_modules/@xstate/fsm/es/index.mjs} +36 -35
  105. package/dist/dev/node_modules/@xstate/fsm/es/index.mjs.map +1 -0
  106. package/dist/dev/node_modules/@xstate/react/es/fsm.js +21 -21
  107. package/dist/dev/node_modules/@xstate/react/es/fsm.js.map +1 -1
  108. package/dist/dev/node_modules/@xstate/react/es/{fsm.cjs → fsm.mjs} +22 -22
  109. package/dist/dev/node_modules/@xstate/react/es/{fsm.cjs.map → fsm.mjs.map} +1 -1
  110. package/dist/dev/node_modules/@xstate/react/es/useConstant.js +23 -5
  111. package/dist/dev/node_modules/@xstate/react/es/useConstant.js.map +1 -1
  112. package/dist/dev/node_modules/@xstate/react/es/useConstant.mjs +12 -0
  113. package/dist/dev/node_modules/@xstate/react/es/useConstant.mjs.map +1 -0
  114. package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js +4 -5
  115. package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js.map +1 -1
  116. package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs +6 -0
  117. package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/{use-isomorphic-layout-effect.browser.esm.cjs.map → use-isomorphic-layout-effect.browser.esm.mjs.map} +1 -1
  118. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +13 -11
  119. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -1
  120. package/dist/{prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.cjs → dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs} +12 -14
  121. package/dist/{prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.cjs.map → dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map} +1 -1
  122. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +12 -10
  123. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -1
  124. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/{with-selector.production.min.cjs → with-selector.production.min.mjs} +11 -13
  125. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -0
  126. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +11 -9
  127. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
  128. package/dist/{prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.cjs → dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs} +10 -12
  129. package/dist/{prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.cjs.map → dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map} +1 -1
  130. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js +11 -9
  131. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -1
  132. package/dist/{prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.cjs → dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs} +10 -12
  133. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -0
  134. package/dist/dev/node_modules/use-sync-external-store/shim/index.js +12 -12
  135. package/dist/dev/node_modules/use-sync-external-store/shim/index.js.map +1 -1
  136. package/dist/dev/node_modules/use-sync-external-store/shim/index.mjs +21 -0
  137. package/dist/dev/node_modules/use-sync-external-store/shim/{index.cjs.map → index.mjs.map} +1 -1
  138. package/dist/dev/node_modules/use-sync-external-store/shim/with-selector.js +7 -6
  139. package/dist/dev/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -1
  140. package/dist/dev/node_modules/use-sync-external-store/shim/with-selector.mjs +11 -0
  141. package/dist/dev/node_modules/use-sync-external-store/shim/{with-selector.cjs.map → with-selector.mjs.map} +1 -1
  142. package/dist/dev/node_modules/worktop/cookie/index.js +3 -3
  143. package/dist/dev/node_modules/worktop/cookie/index.js.map +1 -1
  144. package/dist/{prod/node_modules/worktop/cookie/index.cjs → dev/node_modules/worktop/cookie/index.mjs} +4 -4
  145. package/dist/dev/node_modules/worktop/cookie/{index.cjs.map → index.mjs.map} +1 -1
  146. package/dist/dev/storefront-api-constants.js +4 -4
  147. package/dist/dev/storefront-api-constants.js.map +1 -1
  148. package/dist/dev/storefront-api-constants.mjs +5 -0
  149. package/dist/dev/storefront-api-constants.mjs.map +1 -0
  150. package/dist/dev/storefront-client.js +6 -6
  151. package/dist/dev/storefront-client.js.map +1 -1
  152. package/dist/dev/{storefront-client.cjs → storefront-client.mjs} +7 -7
  153. package/dist/dev/storefront-client.mjs.map +1 -0
  154. package/dist/dev/useCartAPIStateMachine.js +20 -20
  155. package/dist/dev/useCartAPIStateMachine.js.map +1 -1
  156. package/dist/dev/{useCartAPIStateMachine.cjs → useCartAPIStateMachine.mjs} +21 -21
  157. package/dist/dev/{useCartAPIStateMachine.cjs.map → useCartAPIStateMachine.mjs.map} +1 -1
  158. package/dist/dev/useCartActions.js +26 -26
  159. package/dist/dev/useCartActions.js.map +1 -1
  160. package/dist/{prod/useCartActions.cjs → dev/useCartActions.mjs} +27 -27
  161. package/dist/dev/{useCartActions.cjs.map → useCartActions.mjs.map} +1 -1
  162. package/dist/dev/useMoney.js +10 -10
  163. package/dist/dev/useMoney.js.map +1 -1
  164. package/dist/{prod/useMoney.cjs → dev/useMoney.mjs} +11 -11
  165. package/dist/dev/{useMoney.cjs.map → useMoney.mjs.map} +1 -1
  166. package/dist/prod/CartProvider.js +35 -35
  167. package/dist/prod/CartProvider.js.map +1 -1
  168. package/dist/prod/{CartProvider.cjs → CartProvider.mjs} +36 -36
  169. package/dist/prod/{CartProvider.cjs.map → CartProvider.mjs.map} +1 -1
  170. package/dist/prod/ExternalVideo.js +5 -5
  171. package/dist/prod/ExternalVideo.js.map +1 -1
  172. package/dist/prod/{ExternalVideo.cjs → ExternalVideo.mjs} +6 -6
  173. package/dist/{dev/ExternalVideo.cjs.map → prod/ExternalVideo.mjs.map} +1 -1
  174. package/dist/prod/Image.js +12 -12
  175. package/dist/prod/Image.js.map +1 -1
  176. package/dist/prod/{Image.cjs → Image.mjs} +13 -13
  177. package/dist/prod/{Image.cjs.map → Image.mjs.map} +1 -1
  178. package/dist/prod/MediaFile.js +12 -12
  179. package/dist/prod/MediaFile.js.map +1 -1
  180. package/dist/prod/{MediaFile.cjs → MediaFile.mjs} +13 -13
  181. package/dist/prod/{MediaFile.cjs.map → MediaFile.mjs.map} +1 -1
  182. package/dist/prod/Metafield.js +32 -32
  183. package/dist/prod/Metafield.js.map +1 -1
  184. package/dist/prod/{Metafield.cjs → Metafield.mjs} +33 -33
  185. package/dist/prod/Metafield.mjs.map +1 -0
  186. package/dist/prod/ModelViewer.js +11 -11
  187. package/dist/prod/ModelViewer.js.map +1 -1
  188. package/dist/prod/{ModelViewer.cjs → ModelViewer.mjs} +12 -12
  189. package/dist/prod/{ModelViewer.cjs.map → ModelViewer.mjs.map} +1 -1
  190. package/dist/prod/Money.js +8 -8
  191. package/dist/prod/Money.js.map +1 -1
  192. package/dist/{dev/Money.cjs → prod/Money.mjs} +9 -9
  193. package/dist/prod/{Money.cjs.map → Money.mjs.map} +1 -1
  194. package/dist/prod/ProductPrice.js +9 -9
  195. package/dist/prod/ProductPrice.js.map +1 -1
  196. package/dist/{dev/ProductPrice.cjs → prod/ProductPrice.mjs} +10 -10
  197. package/dist/prod/{ProductPrice.cjs.map → ProductPrice.mjs.map} +1 -1
  198. package/dist/prod/ProductProvider.js +25 -25
  199. package/dist/prod/ProductProvider.js.map +1 -1
  200. package/dist/{dev/ProductProvider.cjs → prod/ProductProvider.mjs} +26 -26
  201. package/dist/{dev/ProductProvider.cjs.map → prod/ProductProvider.mjs.map} +1 -1
  202. package/dist/prod/ShopPayButton.js +13 -13
  203. package/dist/prod/ShopPayButton.js.map +1 -1
  204. package/dist/{dev/ShopPayButton.cjs → prod/ShopPayButton.mjs} +14 -14
  205. package/dist/{dev/ShopPayButton.cjs.map → prod/ShopPayButton.mjs.map} +1 -1
  206. package/dist/prod/ShopifyProvider.js +14 -14
  207. package/dist/prod/ShopifyProvider.js.map +1 -1
  208. package/dist/prod/ShopifyProvider.mjs +46 -0
  209. package/dist/prod/{ShopifyProvider.cjs.map → ShopifyProvider.mjs.map} +1 -1
  210. package/dist/prod/Video.js +9 -9
  211. package/dist/prod/Video.js.map +1 -1
  212. package/dist/prod/{Video.cjs → Video.mjs} +10 -10
  213. package/dist/prod/{Video.cjs.map → Video.mjs.map} +1 -1
  214. package/dist/prod/_virtual/index.js +3 -3
  215. package/dist/prod/_virtual/index.js.map +1 -1
  216. package/dist/prod/_virtual/index.mjs +5 -0
  217. package/dist/prod/_virtual/index.mjs.map +1 -0
  218. package/dist/prod/_virtual/use-sync-external-store-shim.development.js +3 -3
  219. package/dist/prod/_virtual/use-sync-external-store-shim.development.js.map +1 -1
  220. package/dist/prod/_virtual/use-sync-external-store-shim.development.mjs +5 -0
  221. package/dist/prod/_virtual/use-sync-external-store-shim.development.mjs.map +1 -0
  222. package/dist/prod/_virtual/use-sync-external-store-shim.production.min.js +3 -3
  223. package/dist/prod/_virtual/use-sync-external-store-shim.production.min.js.map +1 -1
  224. package/dist/prod/_virtual/use-sync-external-store-shim.production.min.mjs +5 -0
  225. package/dist/prod/_virtual/use-sync-external-store-shim.production.min.mjs.map +1 -0
  226. package/dist/prod/_virtual/with-selector.development.js +3 -3
  227. package/dist/prod/_virtual/with-selector.development.js.map +1 -1
  228. package/dist/prod/_virtual/with-selector.development.mjs +5 -0
  229. package/dist/prod/_virtual/with-selector.development.mjs.map +1 -0
  230. package/dist/prod/_virtual/with-selector.js +3 -3
  231. package/dist/prod/_virtual/with-selector.js.map +1 -1
  232. package/dist/prod/_virtual/with-selector.mjs +5 -0
  233. package/dist/prod/_virtual/with-selector.mjs.map +1 -0
  234. package/dist/prod/_virtual/with-selector.production.min.js +3 -3
  235. package/dist/prod/_virtual/with-selector.production.min.js.map +1 -1
  236. package/dist/prod/_virtual/with-selector.production.min.mjs +5 -0
  237. package/dist/prod/_virtual/with-selector.production.min.mjs.map +1 -0
  238. package/dist/prod/cart-constants.js +9 -9
  239. package/dist/prod/cart-constants.js.map +1 -1
  240. package/dist/prod/cart-constants.mjs +17 -0
  241. package/dist/prod/{cart-constants.cjs.map → cart-constants.mjs.map} +1 -1
  242. package/dist/prod/cart-hooks.js +15 -56
  243. package/dist/prod/cart-hooks.js.map +1 -1
  244. package/dist/prod/cart-hooks.mjs +48 -0
  245. package/dist/prod/{cart-hooks.cjs.map → cart-hooks.mjs.map} +1 -1
  246. package/dist/prod/cart-queries.js +11 -113
  247. package/dist/prod/cart-queries.js.map +1 -1
  248. package/dist/{dev/cart-queries.cjs → prod/cart-queries.mjs} +12 -114
  249. package/dist/prod/{cart-queries.cjs.map → cart-queries.mjs.map} +1 -1
  250. package/dist/prod/flatten-connection.js +3 -3
  251. package/dist/prod/flatten-connection.js.map +1 -1
  252. package/dist/prod/{flatten-connection.cjs → flatten-connection.mjs} +4 -4
  253. package/dist/prod/{flatten-connection.cjs.map → flatten-connection.mjs.map} +1 -1
  254. package/dist/prod/image-size.js +6 -6
  255. package/dist/prod/image-size.js.map +1 -1
  256. package/dist/prod/{image-size.cjs → image-size.mjs} +7 -7
  257. package/dist/{dev/image-size.cjs.map → prod/image-size.mjs.map} +1 -1
  258. package/dist/prod/index.js +37 -40
  259. package/dist/prod/index.js.map +1 -1
  260. package/dist/prod/index.mjs +38 -0
  261. package/dist/prod/index.mjs.map +1 -0
  262. package/dist/prod/load-script.js +7 -7
  263. package/dist/prod/load-script.js.map +1 -1
  264. package/dist/{dev/load-script.cjs → prod/load-script.mjs} +8 -8
  265. package/dist/prod/{load-script.cjs.map → load-script.mjs.map} +1 -1
  266. package/dist/prod/node_modules/@xstate/fsm/es/index.js +34 -35
  267. package/dist/prod/node_modules/@xstate/fsm/es/index.js.map +1 -1
  268. package/dist/{dev/node_modules/@xstate/fsm/es/index.cjs → prod/node_modules/@xstate/fsm/es/index.mjs} +36 -35
  269. package/dist/prod/node_modules/@xstate/fsm/es/index.mjs.map +1 -0
  270. package/dist/prod/node_modules/@xstate/react/es/fsm.js +21 -21
  271. package/dist/prod/node_modules/@xstate/react/es/fsm.js.map +1 -1
  272. package/dist/prod/node_modules/@xstate/react/es/{fsm.cjs → fsm.mjs} +22 -22
  273. package/dist/prod/node_modules/@xstate/react/es/{fsm.cjs.map → fsm.mjs.map} +1 -1
  274. package/dist/prod/node_modules/@xstate/react/es/useConstant.js +23 -5
  275. package/dist/prod/node_modules/@xstate/react/es/useConstant.js.map +1 -1
  276. package/dist/prod/node_modules/@xstate/react/es/useConstant.mjs +12 -0
  277. package/dist/prod/node_modules/@xstate/react/es/useConstant.mjs.map +1 -0
  278. package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js +4 -5
  279. package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js.map +1 -1
  280. package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs +6 -0
  281. package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/{use-isomorphic-layout-effect.browser.esm.cjs.map → use-isomorphic-layout-effect.browser.esm.mjs.map} +1 -1
  282. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +13 -11
  283. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -1
  284. package/dist/{dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.cjs → prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs} +12 -14
  285. package/dist/{dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.cjs.map → prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map} +1 -1
  286. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +12 -10
  287. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -1
  288. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/{with-selector.production.min.cjs → with-selector.production.min.mjs} +11 -13
  289. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -0
  290. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +11 -9
  291. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
  292. package/dist/{dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.cjs → prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs} +10 -12
  293. package/dist/{dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.cjs.map → prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map} +1 -1
  294. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js +11 -9
  295. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -1
  296. package/dist/{dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.cjs → prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs} +10 -12
  297. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -0
  298. package/dist/prod/node_modules/use-sync-external-store/shim/index.js +12 -12
  299. package/dist/prod/node_modules/use-sync-external-store/shim/index.js.map +1 -1
  300. package/dist/prod/node_modules/use-sync-external-store/shim/index.mjs +21 -0
  301. package/dist/prod/node_modules/use-sync-external-store/shim/{index.cjs.map → index.mjs.map} +1 -1
  302. package/dist/prod/node_modules/use-sync-external-store/shim/with-selector.js +7 -6
  303. package/dist/prod/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -1
  304. package/dist/prod/node_modules/use-sync-external-store/shim/with-selector.mjs +11 -0
  305. package/dist/prod/node_modules/use-sync-external-store/shim/{with-selector.cjs.map → with-selector.mjs.map} +1 -1
  306. package/dist/prod/node_modules/worktop/cookie/index.js +3 -3
  307. package/dist/prod/node_modules/worktop/cookie/index.js.map +1 -1
  308. package/dist/{dev/node_modules/worktop/cookie/index.cjs → prod/node_modules/worktop/cookie/index.mjs} +4 -4
  309. package/dist/prod/node_modules/worktop/cookie/{index.cjs.map → index.mjs.map} +1 -1
  310. package/dist/prod/storefront-api-constants.js +4 -4
  311. package/dist/prod/storefront-api-constants.js.map +1 -1
  312. package/dist/prod/storefront-api-constants.mjs +5 -0
  313. package/dist/prod/storefront-api-constants.mjs.map +1 -0
  314. package/dist/prod/storefront-client.js +6 -6
  315. package/dist/prod/storefront-client.js.map +1 -1
  316. package/dist/prod/{storefront-client.cjs → storefront-client.mjs} +7 -7
  317. package/dist/prod/storefront-client.mjs.map +1 -0
  318. package/dist/prod/useCartAPIStateMachine.js +20 -20
  319. package/dist/prod/useCartAPIStateMachine.js.map +1 -1
  320. package/dist/prod/{useCartAPIStateMachine.cjs → useCartAPIStateMachine.mjs} +21 -21
  321. package/dist/prod/{useCartAPIStateMachine.cjs.map → useCartAPIStateMachine.mjs.map} +1 -1
  322. package/dist/prod/useCartActions.js +26 -26
  323. package/dist/prod/useCartActions.js.map +1 -1
  324. package/dist/{dev/useCartActions.cjs → prod/useCartActions.mjs} +27 -27
  325. package/dist/prod/{useCartActions.cjs.map → useCartActions.mjs.map} +1 -1
  326. package/dist/prod/useMoney.js +10 -10
  327. package/dist/prod/useMoney.js.map +1 -1
  328. package/dist/{dev/useMoney.cjs → prod/useMoney.mjs} +11 -11
  329. package/dist/prod/{useMoney.cjs.map → useMoney.mjs.map} +1 -1
  330. package/dist/types/index.d.cts +0 -1
  331. package/dist/types/index.d.ts +0 -1
  332. package/dist/types/storefront-api-constants.d.ts +1 -1
  333. package/dist/types/storefront-api-types.d.ts +278 -73
  334. package/dist/types/useCartActions.d.ts +1 -1
  335. package/dist/umd/hydrogen-react.dev.js +253 -394
  336. package/dist/umd/hydrogen-react.dev.js.map +1 -1
  337. package/dist/umd/hydrogen-react.prod.js +57 -157
  338. package/dist/umd/hydrogen-react.prod.js.map +1 -1
  339. package/package.json +15 -14
  340. package/storefront.schema.json +1 -1
  341. package/dist/dev/Metafield.cjs.map +0 -1
  342. package/dist/dev/ShopifyProvider.cjs +0 -46
  343. package/dist/dev/_virtual/index.cjs +0 -5
  344. package/dist/dev/_virtual/index.cjs.map +0 -1
  345. package/dist/dev/_virtual/use-sync-external-store-shim.development.cjs +0 -5
  346. package/dist/dev/_virtual/use-sync-external-store-shim.development.cjs.map +0 -1
  347. package/dist/dev/_virtual/use-sync-external-store-shim.production.min.cjs +0 -5
  348. package/dist/dev/_virtual/use-sync-external-store-shim.production.min.cjs.map +0 -1
  349. package/dist/dev/_virtual/with-selector.cjs +0 -5
  350. package/dist/dev/_virtual/with-selector.cjs.map +0 -1
  351. package/dist/dev/_virtual/with-selector.development.cjs +0 -5
  352. package/dist/dev/_virtual/with-selector.development.cjs.map +0 -1
  353. package/dist/dev/_virtual/with-selector.production.min.cjs +0 -5
  354. package/dist/dev/_virtual/with-selector.production.min.cjs.map +0 -1
  355. package/dist/dev/cart-constants.cjs +0 -17
  356. package/dist/dev/cart-hooks.cjs +0 -89
  357. package/dist/dev/index.cjs +0 -41
  358. package/dist/dev/index.cjs.map +0 -1
  359. package/dist/dev/node_modules/@xstate/fsm/es/index.cjs.map +0 -1
  360. package/dist/dev/node_modules/@xstate/react/es/useConstant.cjs +0 -30
  361. package/dist/dev/node_modules/@xstate/react/es/useConstant.cjs.map +0 -1
  362. package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.cjs +0 -5
  363. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.cjs.map +0 -1
  364. package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.cjs.map +0 -1
  365. package/dist/dev/node_modules/use-sync-external-store/shim/index.cjs +0 -21
  366. package/dist/dev/node_modules/use-sync-external-store/shim/with-selector.cjs +0 -12
  367. package/dist/dev/storefront-api-constants.cjs +0 -5
  368. package/dist/dev/storefront-api-constants.cjs.map +0 -1
  369. package/dist/dev/storefront-client.cjs.map +0 -1
  370. package/dist/prod/Metafield.cjs.map +0 -1
  371. package/dist/prod/ShopifyProvider.cjs +0 -46
  372. package/dist/prod/_virtual/index.cjs +0 -5
  373. package/dist/prod/_virtual/index.cjs.map +0 -1
  374. package/dist/prod/_virtual/use-sync-external-store-shim.development.cjs +0 -5
  375. package/dist/prod/_virtual/use-sync-external-store-shim.development.cjs.map +0 -1
  376. package/dist/prod/_virtual/use-sync-external-store-shim.production.min.cjs +0 -5
  377. package/dist/prod/_virtual/use-sync-external-store-shim.production.min.cjs.map +0 -1
  378. package/dist/prod/_virtual/with-selector.cjs +0 -5
  379. package/dist/prod/_virtual/with-selector.cjs.map +0 -1
  380. package/dist/prod/_virtual/with-selector.development.cjs +0 -5
  381. package/dist/prod/_virtual/with-selector.development.cjs.map +0 -1
  382. package/dist/prod/_virtual/with-selector.production.min.cjs +0 -5
  383. package/dist/prod/_virtual/with-selector.production.min.cjs.map +0 -1
  384. package/dist/prod/cart-constants.cjs +0 -17
  385. package/dist/prod/cart-hooks.cjs +0 -89
  386. package/dist/prod/index.cjs +0 -41
  387. package/dist/prod/index.cjs.map +0 -1
  388. package/dist/prod/node_modules/@xstate/fsm/es/index.cjs.map +0 -1
  389. package/dist/prod/node_modules/@xstate/react/es/useConstant.cjs +0 -30
  390. package/dist/prod/node_modules/@xstate/react/es/useConstant.cjs.map +0 -1
  391. package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.cjs +0 -5
  392. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.cjs.map +0 -1
  393. package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.cjs.map +0 -1
  394. package/dist/prod/node_modules/use-sync-external-store/shim/index.cjs +0 -21
  395. package/dist/prod/node_modules/use-sync-external-store/shim/with-selector.cjs +0 -12
  396. package/dist/prod/storefront-api-constants.cjs +0 -5
  397. package/dist/prod/storefront-api-constants.cjs.map +0 -1
  398. package/dist/prod/storefront-client.cjs.map +0 -1
@@ -1,10 +1,8 @@
1
- "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const Image = require("./Image.cjs");
4
- const Video = require("./Video.cjs");
5
- const ExternalVideo = require("./ExternalVideo.cjs");
6
- const ModelViewer = require("./ModelViewer.cjs");
7
- const jsxRuntime = require("react/jsx-runtime");
1
+ import { Image } from "./Image.mjs";
2
+ import { Video } from "./Video.mjs";
3
+ import { ExternalVideo } from "./ExternalVideo.mjs";
4
+ import { ModelViewer } from "./ModelViewer.mjs";
5
+ import { jsx } from "react/jsx-runtime";
8
6
  function MediaFile({
9
7
  data,
10
8
  mediaOptions,
@@ -18,28 +16,28 @@ function MediaFile({
18
16
  throw new Error(noDataImage);
19
17
  }
20
18
  }
21
- return /* @__PURE__ */ jsxRuntime.jsx(Image.Image, {
19
+ return /* @__PURE__ */ jsx(Image, {
22
20
  ...passthroughProps,
23
21
  ...mediaOptions == null ? void 0 : mediaOptions.image,
24
22
  data: data.image
25
23
  });
26
24
  }
27
25
  case "Video": {
28
- return /* @__PURE__ */ jsxRuntime.jsx(Video.Video, {
26
+ return /* @__PURE__ */ jsx(Video, {
29
27
  ...passthroughProps,
30
28
  ...mediaOptions == null ? void 0 : mediaOptions.video,
31
29
  data
32
30
  });
33
31
  }
34
32
  case "ExternalVideo": {
35
- return /* @__PURE__ */ jsxRuntime.jsx(ExternalVideo.ExternalVideo, {
33
+ return /* @__PURE__ */ jsx(ExternalVideo, {
36
34
  ...passthroughProps,
37
35
  ...mediaOptions == null ? void 0 : mediaOptions.externalVideo,
38
36
  data
39
37
  });
40
38
  }
41
39
  case "Model3d": {
42
- return /* @__PURE__ */ jsxRuntime.jsx(ModelViewer.ModelViewer, {
40
+ return /* @__PURE__ */ jsx(ModelViewer, {
43
41
  ...passthroughProps,
44
42
  ...mediaOptions == null ? void 0 : mediaOptions.modelViewer,
45
43
  data
@@ -53,5 +51,7 @@ function MediaFile({
53
51
  }
54
52
  }
55
53
  }
56
- exports.MediaFile = MediaFile;
57
- //# sourceMappingURL=MediaFile.cjs.map
54
+ export {
55
+ MediaFile
56
+ };
57
+ //# sourceMappingURL=MediaFile.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MediaFile.cjs","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';\n\ninterface MediaFileProps {\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 <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 correctly render the correct component for this media. Rendering 'null' by default`;\n if (__HYDROGEN_DEV__) {\n throw new Error(typenameMissingMessage);\n } else {\n console.error(typenameMissingMessage);\n return null;\n }\n }\n }\n}\n"],"names":["MediaFile","data","mediaOptions","passthroughProps","__typename","image","noDataImage","Error","Image","Video","video","ExternalVideo","externalVideo","ModelViewer","modelViewer","typenameMissingMessage"],"mappings":";;;;;;;AA+BO,SAASA,UAAU;AAAA,EACxBC;AAAAA,EACAC;AAAAA,KACGC;AAHqB,GAIP;AACjB,UAAQF,KAAKG,YAAb;AAAA,IACE,KAAK,cAAc;AACb,UAAA,CAACH,KAAKI,OAAO;AACf,cAAMC,cAAe;AACC;AACd,gBAAA,IAAIC,MAAMD,WAAV;AAAA,QAIP;AAAA,MACF;AAED,4CACGE,MAAAA,OAAD;AAAA,QAAA,GACML;AAAAA,QADN,GAEMD,6CAAcG;AAAAA,QAClB,MAAMJ,KAAKI;AAAAA,MAAAA,CAJf;AAAA,IAOD;AAAA,IACD,KAAK,SAAS;AACZ,4CACGI,MAAAA,OAAD;AAAA,QAAA,GAAWN;AAAAA,QAAX,GAAiCD,6CAAcQ;AAAAA,QAAO;AAAA,MAAA,CADxD;AAAA,IAGD;AAAA,IACD,KAAK,iBAAiB;AACpB,4CACGC,cAAAA,eAAD;AAAA,QAAA,GACMR;AAAAA,QADN,GAEMD,6CAAcU;AAAAA,QAClB;AAAA,MAAA,CAJJ;AAAA,IAOD;AAAA,IACD,KAAK,WAAW;AACd,4CACGC,YAAAA,aAAD;AAAA,QAAA,GACMV;AAAAA,QADN,GAEMD,6CAAcY;AAAAA,QAClB;AAAA,MAAA,CAJJ;AAAA,IAOD;AAAA,IACD,SAAS;AACP,YAAMC,yBAA0B;AACV;AACd,cAAA,IAAIR,MAAMQ,sBAAV;AAAA,MAIP;AAAA,IACF;AAAA,EAnDH;AAqDD;;"}
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';\n\ninterface MediaFileProps {\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 <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 correctly render the correct component for this media. Rendering 'null' by default`;\n if (__HYDROGEN_DEV__) {\n throw new Error(typenameMissingMessage);\n } else {\n console.error(typenameMissingMessage);\n return null;\n }\n }\n }\n}\n"],"names":["MediaFile","data","mediaOptions","passthroughProps","__typename","image","noDataImage","Error","video","externalVideo","modelViewer","typenameMissingMessage"],"mappings":";;;;;AA+BO,SAASA,UAAU;AAAA,EACxBC;AAAAA,EACAC;AAAAA,KACGC;AAHqB,GAIP;AACjB,UAAQF,KAAKG,YAAb;AAAA,IACE,KAAK,cAAc;AACb,UAAA,CAACH,KAAKI,OAAO;AACf,cAAMC,cAAe;AACC;AACd,gBAAA,IAAIC,MAAMD,WAAV;AAAA,QAIP;AAAA,MACF;AAED,iCACG,OAAD;AAAA,QAAA,GACMH;AAAAA,QADN,GAEMD,6CAAcG;AAAAA,QAClB,MAAMJ,KAAKI;AAAAA,MAAAA,CAJf;AAAA,IAOD;AAAA,IACD,KAAK,SAAS;AACZ,iCACG,OAAD;AAAA,QAAA,GAAWF;AAAAA,QAAX,GAAiCD,6CAAcM;AAAAA,QAAO;AAAA,MAAA,CADxD;AAAA,IAGD;AAAA,IACD,KAAK,iBAAiB;AACpB,iCACG,eAAD;AAAA,QAAA,GACML;AAAAA,QADN,GAEMD,6CAAcO;AAAAA,QAClB;AAAA,MAAA,CAJJ;AAAA,IAOD;AAAA,IACD,KAAK,WAAW;AACd,iCACG,aAAD;AAAA,QAAA,GACMN;AAAAA,QADN,GAEMD,6CAAcQ;AAAAA,QAClB;AAAA,MAAA,CAJJ;AAAA,IAOD;AAAA,IACD,SAAS;AACP,YAAMC,yBAA0B;AACV;AACd,cAAA,IAAIJ,MAAMI,sBAAV;AAAA,MAIP;AAAA,IACF;AAAA,EAnDH;AAqDD;"}
@@ -1,9 +1,11 @@
1
- import { useMemo } from "react";
2
- import { useShop } from "./ShopifyProvider.js";
3
- import { Image } from "./Image.js";
4
- import { Video } from "./Video.js";
5
- import { flattenConnection } from "./flatten-connection.js";
6
- import { jsx } from "react/jsx-runtime";
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const require$$0 = require("react");
4
+ const ShopifyProvider = require("./ShopifyProvider.js");
5
+ const Image = require("./Image.js");
6
+ const Video = require("./Video.js");
7
+ const flattenConnection = require("./flatten-connection.js");
8
+ const jsxRuntime = require("react/jsx-runtime");
7
9
  function Metafield(props) {
8
10
  var _a, _b, _c, _d, _e, _f, _g, _h, _i;
9
11
  const {
@@ -13,8 +15,8 @@ function Metafield(props) {
13
15
  } = props;
14
16
  const {
15
17
  locale
16
- } = useShop();
17
- const parsedMetafield = useMemo(() => parseMetafield(data), [data]);
18
+ } = ShopifyProvider.useShop();
19
+ const parsedMetafield = require$$0.useMemo(() => parseMetafield(data), [data]);
18
20
  if (!parsedMetafield) {
19
21
  const noDataPropWarning = `<Metafield/>: nothing was passed to the data prop 'data'. Rendering 'null'`;
20
22
  {
@@ -30,14 +32,14 @@ function Metafield(props) {
30
32
  switch (parsedMetafield.type) {
31
33
  case "date": {
32
34
  const Wrapper2 = as != null ? as : "time";
33
- return /* @__PURE__ */ jsx(Wrapper2, {
35
+ return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
34
36
  ...passthroughProps,
35
37
  children: parsedMetafield.value.toLocaleDateString(locale)
36
38
  });
37
39
  }
38
40
  case "date_time": {
39
41
  const Wrapper2 = as != null ? as : "time";
40
- return /* @__PURE__ */ jsx(Wrapper2, {
42
+ return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
41
43
  ...passthroughProps,
42
44
  children: parsedMetafield.value.toLocaleString(locale)
43
45
  });
@@ -46,21 +48,21 @@ function Metafield(props) {
46
48
  case "dimension":
47
49
  case "volume": {
48
50
  const Wrapper2 = as != null ? as : "span";
49
- return /* @__PURE__ */ jsx(Wrapper2, {
51
+ return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
50
52
  ...passthroughProps,
51
53
  children: getMeasurementAsString(parsedMetafield.value, locale)
52
54
  });
53
55
  }
54
56
  case "rating": {
55
57
  const Wrapper2 = as != null ? as : "span";
56
- return /* @__PURE__ */ jsx(Wrapper2, {
58
+ return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
57
59
  ...passthroughProps,
58
60
  children: parsedMetafield.value.value
59
61
  });
60
62
  }
61
63
  case "single_line_text_field": {
62
64
  const Wrapper2 = as != null ? as : "span";
63
- return /* @__PURE__ */ jsx(Wrapper2, {
65
+ return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
64
66
  ...passthroughProps,
65
67
  dangerouslySetInnerHTML: {
66
68
  __html: parsedMetafield.value
@@ -69,7 +71,7 @@ function Metafield(props) {
69
71
  }
70
72
  case "multi_line_text_field": {
71
73
  const Wrapper2 = as != null ? as : "div";
72
- return /* @__PURE__ */ jsx(Wrapper2, {
74
+ return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
73
75
  ...passthroughProps,
74
76
  dangerouslySetInnerHTML: {
75
77
  __html: parsedMetafield.value.split("\n").join("<br/>")
@@ -78,7 +80,7 @@ function Metafield(props) {
78
80
  }
79
81
  case "url": {
80
82
  const protocolLessUrl = new URL(parsedMetafield.value);
81
- return /* @__PURE__ */ jsx("a", {
83
+ return /* @__PURE__ */ jsxRuntime.jsx("a", {
82
84
  href: protocolLessUrl.href.replace(protocolLessUrl.protocol, ""),
83
85
  ...passthroughProps,
84
86
  children: parsedMetafield.value
@@ -86,7 +88,7 @@ function Metafield(props) {
86
88
  }
87
89
  case "json": {
88
90
  const Wrapper2 = as != null ? as : "span";
89
- return /* @__PURE__ */ jsx(Wrapper2, {
91
+ return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
90
92
  ...passthroughProps,
91
93
  children: JSON.stringify(parsedMetafield.value)
92
94
  });
@@ -96,17 +98,17 @@ function Metafield(props) {
96
98
  case "page_reference": {
97
99
  const Wrapper2 = as != null ? as : "span";
98
100
  const ref = parsedMetafield.reference;
99
- return /* @__PURE__ */ jsx(Wrapper2, {
101
+ return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
100
102
  ...passthroughProps,
101
103
  children: (_c = (_b = ref == null ? void 0 : ref.title) != null ? _b : ref == null ? void 0 : ref.id) != null ? _c : ""
102
104
  });
103
105
  }
104
106
  case "list.single_line_text_field": {
105
107
  const Wrapper2 = as != null ? as : "ul";
106
- const refArray = parsedMetafield.references ? flattenConnection(parsedMetafield.references) : [];
107
- return /* @__PURE__ */ jsx(Wrapper2, {
108
+ const refArray = parsedMetafield.references ? flattenConnection.flattenConnection(parsedMetafield.references) : [];
109
+ return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
108
110
  ...passthroughProps,
109
- children: refArray.map((ref, index) => /* @__PURE__ */ jsx("li", {
111
+ children: refArray.map((ref, index) => /* @__PURE__ */ jsxRuntime.jsx("li", {
110
112
  children: ref
111
113
  }, `${ref != null ? ref : ""}-${index}`))
112
114
  });
@@ -114,22 +116,22 @@ function Metafield(props) {
114
116
  case "file_reference": {
115
117
  if (((_d = parsedMetafield.reference) == null ? void 0 : _d.__typename) === "MediaImage") {
116
118
  const ref = parsedMetafield.reference;
117
- return ref.image ? /* @__PURE__ */ jsx(Image, {
119
+ return ref.image ? /* @__PURE__ */ jsxRuntime.jsx(Image.Image, {
118
120
  data: ref.image,
119
121
  ...passthroughProps
120
122
  }) : null;
121
123
  } else if (((_e = parsedMetafield.reference) == null ? void 0 : _e.__typename) === "GenericFile") {
122
124
  const ref = parsedMetafield.reference;
123
- return ref.previewImage ? /* @__PURE__ */ jsx("a", {
125
+ return ref.previewImage ? /* @__PURE__ */ jsxRuntime.jsx("a", {
124
126
  href: (_g = (_f = parsedMetafield.reference) == null ? void 0 : _f.url) != null ? _g : "",
125
127
  ...passthroughProps,
126
- children: /* @__PURE__ */ jsx(Image, {
128
+ children: /* @__PURE__ */ jsxRuntime.jsx(Image.Image, {
127
129
  data: ref.previewImage
128
130
  })
129
131
  }) : null;
130
132
  } else if (((_h = parsedMetafield.reference) == null ? void 0 : _h.__typename) === "Video") {
131
133
  const ref = parsedMetafield.reference;
132
- return /* @__PURE__ */ jsx(Video, {
134
+ return /* @__PURE__ */ jsxRuntime.jsx(Video.Video, {
133
135
  ...passthroughProps,
134
136
  data: ref
135
137
  });
@@ -137,7 +139,7 @@ function Metafield(props) {
137
139
  }
138
140
  }
139
141
  const Wrapper = as != null ? as : "span";
140
- return /* @__PURE__ */ jsx(Wrapper, {
142
+ return /* @__PURE__ */ jsxRuntime.jsx(Wrapper, {
141
143
  ...passthroughProps,
142
144
  children: (_i = parsedMetafield.value) == null ? void 0 : _i.toString()
143
145
  });
@@ -285,11 +287,9 @@ function convertToSupportedUnit(value, unit) {
285
287
  throw new Error(`Unit not supported: ${unit}`);
286
288
  }
287
289
  }
288
- export {
289
- Metafield,
290
- getMeasurementAsString,
291
- parseJSON,
292
- parseMetafield,
293
- parseMetafieldValue
294
- };
290
+ exports.Metafield = Metafield;
291
+ exports.getMeasurementAsString = getMeasurementAsString;
292
+ exports.parseJSON = parseJSON;
293
+ exports.parseMetafield = parseMetafield;
294
+ exports.parseMetafieldValue = parseMetafieldValue;
295
295
  //# sourceMappingURL=Metafield.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Metafield.js","sources":["../../src/Metafield.tsx"],"sourcesContent":["import {type ElementType, useMemo, type ComponentPropsWithoutRef} from 'react';\nimport {useShop} from './ShopifyProvider.js';\nimport {Image} from './Image.js';\nimport type {\n MediaImage,\n Page,\n ProductVariant,\n Product,\n GenericFile,\n Video as VideoType,\n Metafield as MetafieldType,\n} from './storefront-api-types.js';\nimport {Video} from './Video.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport type {PartialDeep, JsonValue} from 'type-fest';\n\ninterface BaseProps<ComponentGeneric extends ElementType> {\n /** An object with fields that correspond to the Storefront API's [Metafield object](https://shopify.dev/api/storefront/reference/common-objects/metafield). */\n data: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null;\n /** An HTML tag or React component to be rendered as the base element wrapper. The default value varies depending on [metafield.type](https://shopify.dev/apps/metafields/types). */\n as?: ComponentGeneric;\n}\n\nexport type MetafieldProps<ComponentGeneric extends ElementType> =\n ComponentPropsWithoutRef<ComponentGeneric> & BaseProps<ComponentGeneric>;\n\n/**\n * The `Metafield` component renders the value of a Storefront\n * API's [Metafield object](https://shopify.dev/api/storefront/reference/common-objects/metafield).\n * Relies on the `locale` property of the `useShop()` hook, so it must be a desendent of `<ShopifyProvider/>`\n *\n * Renders a smart default of the Metafield's `value`. For more information, refer to the [Default output](#default-output) section.\n */\nexport function Metafield<ComponentGeneric extends ElementType>(\n props: MetafieldProps<ComponentGeneric>\n) {\n const {data, as, ...passthroughProps} = props;\n const {locale} = useShop();\n\n const parsedMetafield = useMemo(() => parseMetafield(data), [data]);\n\n if (!parsedMetafield) {\n const noDataPropWarning = `<Metafield/>: nothing was passed to the data prop 'data'. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noDataPropWarning);\n } else {\n console.warn(noDataPropWarning);\n }\n return null;\n }\n\n if (parsedMetafield.value === null || parsedMetafield.value === undefined) {\n const noValueWarning = `<Metafield/>: No metafield value for metafield ${\n parsedMetafield.id ?? parsedMetafield.key\n }. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noValueWarning);\n } else {\n console.warn(noValueWarning);\n }\n return null;\n }\n\n switch (parsedMetafield.type) {\n case 'date': {\n const Wrapper = as ?? 'time';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Date).toLocaleDateString(locale)}\n </Wrapper>\n );\n }\n case 'date_time': {\n const Wrapper = as ?? 'time';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Date).toLocaleString(locale)}\n </Wrapper>\n );\n }\n case 'weight':\n case 'dimension':\n case 'volume': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {getMeasurementAsString(parsedMetafield.value as Measurement, locale)}\n </Wrapper>\n );\n }\n case 'rating': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Rating).value}\n </Wrapper>\n );\n }\n case 'single_line_text_field': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper\n {...passthroughProps}\n dangerouslySetInnerHTML={{__html: parsedMetafield.value as string}}\n />\n );\n }\n case 'multi_line_text_field': {\n const Wrapper = as ?? 'div';\n return (\n <Wrapper\n {...passthroughProps}\n dangerouslySetInnerHTML={{\n __html: (parsedMetafield.value as string).split('\\n').join('<br/>'),\n }}\n />\n );\n }\n case 'url': {\n const protocolLessUrl = new URL(parsedMetafield.value as string);\n return (\n <a\n href={protocolLessUrl.href.replace(protocolLessUrl.protocol, '')}\n {...passthroughProps}\n >\n {parsedMetafield.value as string}\n </a>\n );\n }\n case 'json': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {JSON.stringify(parsedMetafield.value)}\n </Wrapper>\n );\n }\n case 'product_reference':\n case 'variant_reference':\n case 'page_reference': {\n const Wrapper = as ?? 'span';\n const ref = parsedMetafield.reference as Page | ProductVariant | Product;\n return (\n <Wrapper {...passthroughProps}>{ref?.title ?? ref?.id ?? ''}</Wrapper>\n );\n }\n case 'list.single_line_text_field': {\n const Wrapper = as ?? 'ul';\n // @ts-expect-error references currently only exists on 'unstable' SFAPI, but as soon as it does exist we can remove this ts-expect-error because I believe 'list.single_line_text_field' will also only be availabe in the same setting and we also handle if it doesn't exist\n const refArray = parsedMetafield.references\n ? // @ts-expect-error references currently only exists on 'unstable' SFAPI, but as soon as it does exist we can remove this ts-expect-error\n (flattenConnection(parsedMetafield.references) as string[])\n : [];\n return (\n <Wrapper {...passthroughProps}>\n {refArray.map((ref, index) => (\n // there's no unique way to identify these strings, so we do our best by combining the string with the index for the key\n // eslint-disable-next-line react/no-array-index-key\n <li key={`${ref ?? ''}-${index}`}>{ref}</li>\n ))}\n </Wrapper>\n );\n }\n case 'file_reference': {\n if (parsedMetafield.reference?.__typename === 'MediaImage') {\n const ref = parsedMetafield.reference as MediaImage;\n return ref.image ? (\n <Image data={ref.image} {...passthroughProps} />\n ) : null;\n } else if (parsedMetafield.reference?.__typename === 'GenericFile') {\n const ref = parsedMetafield.reference as GenericFile;\n return ref.previewImage ? (\n <a href={parsedMetafield.reference?.url ?? ''} {...passthroughProps}>\n <Image data={ref.previewImage} />\n </a>\n ) : null;\n } else if (parsedMetafield.reference?.__typename === 'Video') {\n const ref = parsedMetafield.reference as VideoType;\n return <Video {...passthroughProps} data={ref} />;\n }\n }\n }\n\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>{parsedMetafield.value?.toString()}</Wrapper>\n );\n}\n\n/**\n * The `parseMetafield` utility transforms a [Metafield](https://shopify.dev/api/storefront/reference/common-objects/Metafield)\n * into a new object whose `values` have been parsed according to the metafield `type`.\n * If the metafield is `null`, then it returns `null` back.\n */\nexport function parseMetafield(\n /** A [Metafield](https://shopify.dev/api/storefront/reference/common-objects/Metafield) or null */\n metafield: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null\n): PartialDeep<ParsedMetafield, {recurseIntoArrays: true}> | null {\n if (!metafield) {\n if (__HYDROGEN_DEV__) {\n console.warn(\n `'parseMetafield' was not passed any value for the 'metafield' argument`\n );\n }\n return null;\n }\n if (\n __HYDROGEN_DEV__ &&\n (metafield.value === null || metafield.value === undefined)\n ) {\n console.warn(\n `'parseMetafield()' was passed ${metafield.value} for 'metafield.value'`\n );\n }\n\n return {\n ...metafield,\n value: parseMetafieldValue(metafield),\n };\n}\n\n/**\n * The `parseMetafieldValue` function parses a [Metafield](https://shopify.dev/api/storefront/reference/common-objects/metafield)'s `value` from a string into a sensible type corresponding to the [Metafield](https://shopify.dev/api/storefront/reference/common-objects/metafield)'s `type`.\n */\nexport function parseMetafieldValue(\n metafield: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null\n): ParsedMetafield['value'] {\n if (!metafield) {\n return null;\n }\n\n if (metafield.value === null || metafield.value === undefined) {\n if (__HYDROGEN_DEV__) {\n console.warn(\n `'parseMetafieldValue()' was passed ${metafield.value} for 'metafield.value'`\n );\n }\n return metafield.value;\n }\n\n switch (metafield.type) {\n case 'boolean':\n return metafield.value === 'true';\n case 'number_integer':\n return parseInt(metafield.value);\n case 'number_decimal':\n return parseFloat(metafield.value);\n case 'date':\n case 'date_time':\n return new Date(metafield.value);\n case 'json':\n case 'weight':\n case 'dimension':\n case 'volume':\n case 'rating':\n return parseJSON(metafield.value);\n case 'color':\n case 'single_line_text_field':\n case 'multi_line_text_field':\n case 'product_reference':\n case 'page_reference':\n case 'variant_reference':\n case 'file_reference':\n case 'url':\n default:\n return metafield.value;\n }\n}\n\n/**\n * Parses a JSON string while preventing prototype injection attacks.\n */\nexport function parseJSON(json: string) {\n if (String(json).includes('__proto__')) {\n return JSON.parse(json, (k, v) => {\n if (k !== '__proto__') return v;\n });\n }\n\n return JSON.parse(json);\n}\n\nconst UNIT_MAPPING: Record<string, string> = {\n // Dimension\n mm: 'millimeter',\n cm: 'centimeter',\n m: 'meter',\n in: 'inch',\n ft: 'foot',\n yd: 'yard',\n // Volume\n ml: 'milliliter',\n l: 'liter',\n us_fl_oz: 'fluid-ounce',\n us_gal: 'gallon',\n // Weight\n kg: 'kilogram',\n g: 'gram',\n lb: 'pound',\n oz: 'ounce',\n};\n\nexport function getMeasurementAsString(\n measurement: Measurement,\n locale = 'en-us',\n options: Intl.NumberFormatOptions = {}\n) {\n let measure: {value: number; unit: string} = {\n value: measurement.value,\n unit: UNIT_MAPPING[measurement.unit],\n };\n\n if (measure.unit == null) {\n measure = convertToSupportedUnit(measurement.value, measurement.unit);\n }\n\n return new Intl.NumberFormat(locale, {\n ...options,\n unit: measure.unit,\n style: 'unit',\n }).format(measure.value);\n}\n\nfunction convertToSupportedUnit(value: number, unit: string) {\n switch (unit) {\n case 'cl':\n return {\n value: value / 1000,\n unit: 'liter',\n };\n case 'm3':\n return {\n value: value * 1000,\n unit: 'liter',\n };\n case 'us_pt':\n return {\n value: value * 0.125,\n unit: 'gallon',\n };\n case 'us_qt':\n return {\n value: value * 0.5,\n unit: 'gallon',\n };\n case 'us_oz':\n return {\n value: value / 128,\n unit: 'gallon',\n };\n case 'imp_pt':\n return {\n value: value / 6.661, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_qt':\n return {\n value: value / 3.331, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_gal':\n return {\n value: value / 1.201, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_fl_oz':\n return {\n value: value * 0.96076, // approximate conversion\n unit: 'fluid-ounce',\n };\n default:\n throw new Error(`Unit not supported: ${unit}`);\n }\n}\n\ntype ParsedMetafield = Omit<\n PartialDeep<MetafieldType, {recurseIntoArrays: true}>,\n 'value'\n> & {\n value?: string | number | boolean | JsonValue | Date | Rating | Measurement;\n};\n\nexport interface Rating {\n value: number;\n scale_min: number;\n scale_max: number;\n}\n\ninterface Measurement {\n unit: string;\n value: number;\n}\n"],"names":["Metafield","props","data","as","passthroughProps","locale","useShop","parsedMetafield","useMemo","parseMetafield","noDataPropWarning","Error","value","undefined","noValueWarning","id","key","type","Wrapper","toLocaleDateString","toLocaleString","getMeasurementAsString","__html","split","join","protocolLessUrl","URL","href","replace","protocol","JSON","stringify","ref","reference","title","refArray","references","flattenConnection","map","index","__typename","image","_jsx","previewImage","url","toString","metafield","console","warn","parseMetafieldValue","parseInt","parseFloat","Date","parseJSON","json","String","includes","parse","k","v","UNIT_MAPPING","mm","cm","m","in","ft","yd","ml","l","us_fl_oz","us_gal","kg","g","lb","oz","measurement","options","measure","unit","convertToSupportedUnit","Intl","NumberFormat","style","format"],"mappings":"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"}
1
+ {"version":3,"file":"Metafield.js","sources":["../../src/Metafield.tsx"],"sourcesContent":["import {type ElementType, useMemo, type ComponentPropsWithoutRef} from 'react';\nimport {useShop} from './ShopifyProvider.js';\nimport {Image} from './Image.js';\nimport type {\n MediaImage,\n Page,\n ProductVariant,\n Product,\n GenericFile,\n Video as VideoType,\n Metafield as MetafieldType,\n} from './storefront-api-types.js';\nimport {Video} from './Video.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport type {PartialDeep, JsonValue} from 'type-fest';\n\ninterface BaseProps<ComponentGeneric extends ElementType> {\n /** An object with fields that correspond to the Storefront API's [Metafield object](https://shopify.dev/api/storefront/reference/common-objects/metafield). */\n data: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null;\n /** An HTML tag or React component to be rendered as the base element wrapper. The default value varies depending on [metafield.type](https://shopify.dev/apps/metafields/types). */\n as?: ComponentGeneric;\n}\n\nexport type MetafieldProps<ComponentGeneric extends ElementType> =\n ComponentPropsWithoutRef<ComponentGeneric> & BaseProps<ComponentGeneric>;\n\n/**\n * The `Metafield` component renders the value of a Storefront\n * API's [Metafield object](https://shopify.dev/api/storefront/reference/common-objects/metafield).\n * Relies on the `locale` property of the `useShop()` hook, so it must be a desendent of `<ShopifyProvider/>`\n *\n * Renders a smart default of the Metafield's `value`. For more information, refer to the [Default output](#default-output) section.\n */\nexport function Metafield<ComponentGeneric extends ElementType>(\n props: MetafieldProps<ComponentGeneric>\n) {\n const {data, as, ...passthroughProps} = props;\n const {locale} = useShop();\n\n const parsedMetafield = useMemo(() => parseMetafield(data), [data]);\n\n if (!parsedMetafield) {\n const noDataPropWarning = `<Metafield/>: nothing was passed to the data prop 'data'. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noDataPropWarning);\n } else {\n console.warn(noDataPropWarning);\n }\n return null;\n }\n\n if (parsedMetafield.value === null || parsedMetafield.value === undefined) {\n const noValueWarning = `<Metafield/>: No metafield value for metafield ${\n parsedMetafield.id ?? parsedMetafield.key\n }. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noValueWarning);\n } else {\n console.warn(noValueWarning);\n }\n return null;\n }\n\n switch (parsedMetafield.type) {\n case 'date': {\n const Wrapper = as ?? 'time';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Date).toLocaleDateString(locale)}\n </Wrapper>\n );\n }\n case 'date_time': {\n const Wrapper = as ?? 'time';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Date).toLocaleString(locale)}\n </Wrapper>\n );\n }\n case 'weight':\n case 'dimension':\n case 'volume': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {getMeasurementAsString(parsedMetafield.value as Measurement, locale)}\n </Wrapper>\n );\n }\n case 'rating': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Rating).value}\n </Wrapper>\n );\n }\n case 'single_line_text_field': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper\n {...passthroughProps}\n dangerouslySetInnerHTML={{__html: parsedMetafield.value as string}}\n />\n );\n }\n case 'multi_line_text_field': {\n const Wrapper = as ?? 'div';\n return (\n <Wrapper\n {...passthroughProps}\n dangerouslySetInnerHTML={{\n __html: (parsedMetafield.value as string).split('\\n').join('<br/>'),\n }}\n />\n );\n }\n case 'url': {\n const protocolLessUrl = new URL(parsedMetafield.value as string);\n return (\n <a\n href={protocolLessUrl.href.replace(protocolLessUrl.protocol, '')}\n {...passthroughProps}\n >\n {parsedMetafield.value as string}\n </a>\n );\n }\n case 'json': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {JSON.stringify(parsedMetafield.value)}\n </Wrapper>\n );\n }\n case 'product_reference':\n case 'variant_reference':\n case 'page_reference': {\n const Wrapper = as ?? 'span';\n const ref = parsedMetafield.reference as Page | ProductVariant | Product;\n return (\n <Wrapper {...passthroughProps}>{ref?.title ?? ref?.id ?? ''}</Wrapper>\n );\n }\n case 'list.single_line_text_field': {\n const Wrapper = as ?? 'ul';\n\n const refArray = parsedMetafield.references\n ? (flattenConnection(parsedMetafield.references) as string[])\n : [];\n return (\n <Wrapper {...passthroughProps}>\n {refArray.map((ref, index) => (\n // there's no unique way to identify these strings, so we do our best by combining the string with the index for the key\n // eslint-disable-next-line react/no-array-index-key\n <li key={`${ref ?? ''}-${index}`}>{ref}</li>\n ))}\n </Wrapper>\n );\n }\n case 'file_reference': {\n if (parsedMetafield.reference?.__typename === 'MediaImage') {\n const ref = parsedMetafield.reference as MediaImage;\n return ref.image ? (\n <Image data={ref.image} {...passthroughProps} />\n ) : null;\n } else if (parsedMetafield.reference?.__typename === 'GenericFile') {\n const ref = parsedMetafield.reference as GenericFile;\n return ref.previewImage ? (\n <a href={parsedMetafield.reference?.url ?? ''} {...passthroughProps}>\n <Image data={ref.previewImage} />\n </a>\n ) : null;\n } else if (parsedMetafield.reference?.__typename === 'Video') {\n const ref = parsedMetafield.reference as VideoType;\n return <Video {...passthroughProps} data={ref} />;\n }\n }\n }\n\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>{parsedMetafield.value?.toString()}</Wrapper>\n );\n}\n\n/**\n * The `parseMetafield` utility transforms a [Metafield](https://shopify.dev/api/storefront/reference/common-objects/Metafield)\n * into a new object whose `values` have been parsed according to the metafield `type`.\n * If the metafield is `null`, then it returns `null` back.\n */\nexport function parseMetafield(\n /** A [Metafield](https://shopify.dev/api/storefront/reference/common-objects/Metafield) or null */\n metafield: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null\n): PartialDeep<ParsedMetafield, {recurseIntoArrays: true}> | null {\n if (!metafield) {\n if (__HYDROGEN_DEV__) {\n console.warn(\n `'parseMetafield' was not passed any value for the 'metafield' argument`\n );\n }\n return null;\n }\n if (\n __HYDROGEN_DEV__ &&\n (metafield.value === null || metafield.value === undefined)\n ) {\n console.warn(\n `'parseMetafield()' was passed ${metafield.value} for 'metafield.value'`\n );\n }\n\n return {\n ...metafield,\n value: parseMetafieldValue(metafield),\n };\n}\n\n/**\n * The `parseMetafieldValue` function parses a [Metafield](https://shopify.dev/api/storefront/reference/common-objects/metafield)'s `value` from a string into a sensible type corresponding to the [Metafield](https://shopify.dev/api/storefront/reference/common-objects/metafield)'s `type`.\n */\nexport function parseMetafieldValue(\n metafield: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null\n): ParsedMetafield['value'] {\n if (!metafield) {\n return null;\n }\n\n if (metafield.value === null || metafield.value === undefined) {\n if (__HYDROGEN_DEV__) {\n console.warn(\n `'parseMetafieldValue()' was passed ${metafield.value} for 'metafield.value'`\n );\n }\n return metafield.value;\n }\n\n switch (metafield.type) {\n case 'boolean':\n return metafield.value === 'true';\n case 'number_integer':\n return parseInt(metafield.value);\n case 'number_decimal':\n return parseFloat(metafield.value);\n case 'date':\n case 'date_time':\n return new Date(metafield.value);\n case 'json':\n case 'weight':\n case 'dimension':\n case 'volume':\n case 'rating':\n return parseJSON(metafield.value);\n case 'color':\n case 'single_line_text_field':\n case 'multi_line_text_field':\n case 'product_reference':\n case 'page_reference':\n case 'variant_reference':\n case 'file_reference':\n case 'url':\n default:\n return metafield.value;\n }\n}\n\n/**\n * Parses a JSON string while preventing prototype injection attacks.\n */\nexport function parseJSON(json: string) {\n if (String(json).includes('__proto__')) {\n return JSON.parse(json, (k, v) => {\n if (k !== '__proto__') return v;\n });\n }\n\n return JSON.parse(json);\n}\n\nconst UNIT_MAPPING: Record<string, string> = {\n // Dimension\n mm: 'millimeter',\n cm: 'centimeter',\n m: 'meter',\n in: 'inch',\n ft: 'foot',\n yd: 'yard',\n // Volume\n ml: 'milliliter',\n l: 'liter',\n us_fl_oz: 'fluid-ounce',\n us_gal: 'gallon',\n // Weight\n kg: 'kilogram',\n g: 'gram',\n lb: 'pound',\n oz: 'ounce',\n};\n\nexport function getMeasurementAsString(\n measurement: Measurement,\n locale = 'en-us',\n options: Intl.NumberFormatOptions = {}\n) {\n let measure: {value: number; unit: string} = {\n value: measurement.value,\n unit: UNIT_MAPPING[measurement.unit],\n };\n\n if (measure.unit == null) {\n measure = convertToSupportedUnit(measurement.value, measurement.unit);\n }\n\n return new Intl.NumberFormat(locale, {\n ...options,\n unit: measure.unit,\n style: 'unit',\n }).format(measure.value);\n}\n\nfunction convertToSupportedUnit(value: number, unit: string) {\n switch (unit) {\n case 'cl':\n return {\n value: value / 1000,\n unit: 'liter',\n };\n case 'm3':\n return {\n value: value * 1000,\n unit: 'liter',\n };\n case 'us_pt':\n return {\n value: value * 0.125,\n unit: 'gallon',\n };\n case 'us_qt':\n return {\n value: value * 0.5,\n unit: 'gallon',\n };\n case 'us_oz':\n return {\n value: value / 128,\n unit: 'gallon',\n };\n case 'imp_pt':\n return {\n value: value / 6.661, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_qt':\n return {\n value: value / 3.331, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_gal':\n return {\n value: value / 1.201, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_fl_oz':\n return {\n value: value * 0.96076, // approximate conversion\n unit: 'fluid-ounce',\n };\n default:\n throw new Error(`Unit not supported: ${unit}`);\n }\n}\n\ntype ParsedMetafield = Omit<\n PartialDeep<MetafieldType, {recurseIntoArrays: true}>,\n 'value'\n> & {\n value?: string | number | boolean | JsonValue | Date | Rating | Measurement;\n};\n\nexport interface Rating {\n value: number;\n scale_min: number;\n scale_max: number;\n}\n\ninterface Measurement {\n unit: string;\n value: number;\n}\n"],"names":["Metafield","props","data","as","passthroughProps","locale","useShop","parsedMetafield","useMemo","parseMetafield","noDataPropWarning","Error","value","undefined","noValueWarning","id","key","type","Wrapper","toLocaleDateString","toLocaleString","getMeasurementAsString","__html","split","join","protocolLessUrl","URL","href","replace","protocol","JSON","stringify","ref","reference","title","refArray","references","flattenConnection","map","index","__typename","image","_jsx","Image","previewImage","url","Video","toString","metafield","console","warn","parseMetafieldValue","parseInt","parseFloat","Date","parseJSON","json","String","includes","parse","k","v","UNIT_MAPPING","mm","cm","m","in","ft","yd","ml","l","us_fl_oz","us_gal","kg","g","lb","oz","measurement","options","measure","unit","convertToSupportedUnit","Intl","NumberFormat","style","format"],"mappings":"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"}
@@ -1,11 +1,9 @@
1
- "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const require$$0 = require("react");
4
- const ShopifyProvider = require("./ShopifyProvider.cjs");
5
- const Image = require("./Image.cjs");
6
- const Video = require("./Video.cjs");
7
- const flattenConnection = require("./flatten-connection.cjs");
8
- const jsxRuntime = require("react/jsx-runtime");
1
+ import { useMemo } from "react";
2
+ import { useShop } from "./ShopifyProvider.mjs";
3
+ import { Image } from "./Image.mjs";
4
+ import { Video } from "./Video.mjs";
5
+ import { flattenConnection } from "./flatten-connection.mjs";
6
+ import { jsx } from "react/jsx-runtime";
9
7
  function Metafield(props) {
10
8
  var _a, _b, _c, _d, _e, _f, _g, _h, _i;
11
9
  const {
@@ -15,8 +13,8 @@ function Metafield(props) {
15
13
  } = props;
16
14
  const {
17
15
  locale
18
- } = ShopifyProvider.useShop();
19
- const parsedMetafield = require$$0.useMemo(() => parseMetafield(data), [data]);
16
+ } = useShop();
17
+ const parsedMetafield = useMemo(() => parseMetafield(data), [data]);
20
18
  if (!parsedMetafield) {
21
19
  const noDataPropWarning = `<Metafield/>: nothing was passed to the data prop 'data'. Rendering 'null'`;
22
20
  {
@@ -32,14 +30,14 @@ function Metafield(props) {
32
30
  switch (parsedMetafield.type) {
33
31
  case "date": {
34
32
  const Wrapper2 = as != null ? as : "time";
35
- return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
33
+ return /* @__PURE__ */ jsx(Wrapper2, {
36
34
  ...passthroughProps,
37
35
  children: parsedMetafield.value.toLocaleDateString(locale)
38
36
  });
39
37
  }
40
38
  case "date_time": {
41
39
  const Wrapper2 = as != null ? as : "time";
42
- return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
40
+ return /* @__PURE__ */ jsx(Wrapper2, {
43
41
  ...passthroughProps,
44
42
  children: parsedMetafield.value.toLocaleString(locale)
45
43
  });
@@ -48,21 +46,21 @@ function Metafield(props) {
48
46
  case "dimension":
49
47
  case "volume": {
50
48
  const Wrapper2 = as != null ? as : "span";
51
- return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
49
+ return /* @__PURE__ */ jsx(Wrapper2, {
52
50
  ...passthroughProps,
53
51
  children: getMeasurementAsString(parsedMetafield.value, locale)
54
52
  });
55
53
  }
56
54
  case "rating": {
57
55
  const Wrapper2 = as != null ? as : "span";
58
- return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
56
+ return /* @__PURE__ */ jsx(Wrapper2, {
59
57
  ...passthroughProps,
60
58
  children: parsedMetafield.value.value
61
59
  });
62
60
  }
63
61
  case "single_line_text_field": {
64
62
  const Wrapper2 = as != null ? as : "span";
65
- return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
63
+ return /* @__PURE__ */ jsx(Wrapper2, {
66
64
  ...passthroughProps,
67
65
  dangerouslySetInnerHTML: {
68
66
  __html: parsedMetafield.value
@@ -71,7 +69,7 @@ function Metafield(props) {
71
69
  }
72
70
  case "multi_line_text_field": {
73
71
  const Wrapper2 = as != null ? as : "div";
74
- return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
72
+ return /* @__PURE__ */ jsx(Wrapper2, {
75
73
  ...passthroughProps,
76
74
  dangerouslySetInnerHTML: {
77
75
  __html: parsedMetafield.value.split("\n").join("<br/>")
@@ -80,7 +78,7 @@ function Metafield(props) {
80
78
  }
81
79
  case "url": {
82
80
  const protocolLessUrl = new URL(parsedMetafield.value);
83
- return /* @__PURE__ */ jsxRuntime.jsx("a", {
81
+ return /* @__PURE__ */ jsx("a", {
84
82
  href: protocolLessUrl.href.replace(protocolLessUrl.protocol, ""),
85
83
  ...passthroughProps,
86
84
  children: parsedMetafield.value
@@ -88,7 +86,7 @@ function Metafield(props) {
88
86
  }
89
87
  case "json": {
90
88
  const Wrapper2 = as != null ? as : "span";
91
- return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
89
+ return /* @__PURE__ */ jsx(Wrapper2, {
92
90
  ...passthroughProps,
93
91
  children: JSON.stringify(parsedMetafield.value)
94
92
  });
@@ -98,17 +96,17 @@ function Metafield(props) {
98
96
  case "page_reference": {
99
97
  const Wrapper2 = as != null ? as : "span";
100
98
  const ref = parsedMetafield.reference;
101
- return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
99
+ return /* @__PURE__ */ jsx(Wrapper2, {
102
100
  ...passthroughProps,
103
101
  children: (_c = (_b = ref == null ? void 0 : ref.title) != null ? _b : ref == null ? void 0 : ref.id) != null ? _c : ""
104
102
  });
105
103
  }
106
104
  case "list.single_line_text_field": {
107
105
  const Wrapper2 = as != null ? as : "ul";
108
- const refArray = parsedMetafield.references ? flattenConnection.flattenConnection(parsedMetafield.references) : [];
109
- return /* @__PURE__ */ jsxRuntime.jsx(Wrapper2, {
106
+ const refArray = parsedMetafield.references ? flattenConnection(parsedMetafield.references) : [];
107
+ return /* @__PURE__ */ jsx(Wrapper2, {
110
108
  ...passthroughProps,
111
- children: refArray.map((ref, index) => /* @__PURE__ */ jsxRuntime.jsx("li", {
109
+ children: refArray.map((ref, index) => /* @__PURE__ */ jsx("li", {
112
110
  children: ref
113
111
  }, `${ref != null ? ref : ""}-${index}`))
114
112
  });
@@ -116,22 +114,22 @@ function Metafield(props) {
116
114
  case "file_reference": {
117
115
  if (((_d = parsedMetafield.reference) == null ? void 0 : _d.__typename) === "MediaImage") {
118
116
  const ref = parsedMetafield.reference;
119
- return ref.image ? /* @__PURE__ */ jsxRuntime.jsx(Image.Image, {
117
+ return ref.image ? /* @__PURE__ */ jsx(Image, {
120
118
  data: ref.image,
121
119
  ...passthroughProps
122
120
  }) : null;
123
121
  } else if (((_e = parsedMetafield.reference) == null ? void 0 : _e.__typename) === "GenericFile") {
124
122
  const ref = parsedMetafield.reference;
125
- return ref.previewImage ? /* @__PURE__ */ jsxRuntime.jsx("a", {
123
+ return ref.previewImage ? /* @__PURE__ */ jsx("a", {
126
124
  href: (_g = (_f = parsedMetafield.reference) == null ? void 0 : _f.url) != null ? _g : "",
127
125
  ...passthroughProps,
128
- children: /* @__PURE__ */ jsxRuntime.jsx(Image.Image, {
126
+ children: /* @__PURE__ */ jsx(Image, {
129
127
  data: ref.previewImage
130
128
  })
131
129
  }) : null;
132
130
  } else if (((_h = parsedMetafield.reference) == null ? void 0 : _h.__typename) === "Video") {
133
131
  const ref = parsedMetafield.reference;
134
- return /* @__PURE__ */ jsxRuntime.jsx(Video.Video, {
132
+ return /* @__PURE__ */ jsx(Video, {
135
133
  ...passthroughProps,
136
134
  data: ref
137
135
  });
@@ -139,7 +137,7 @@ function Metafield(props) {
139
137
  }
140
138
  }
141
139
  const Wrapper = as != null ? as : "span";
142
- return /* @__PURE__ */ jsxRuntime.jsx(Wrapper, {
140
+ return /* @__PURE__ */ jsx(Wrapper, {
143
141
  ...passthroughProps,
144
142
  children: (_i = parsedMetafield.value) == null ? void 0 : _i.toString()
145
143
  });
@@ -287,9 +285,11 @@ function convertToSupportedUnit(value, unit) {
287
285
  throw new Error(`Unit not supported: ${unit}`);
288
286
  }
289
287
  }
290
- exports.Metafield = Metafield;
291
- exports.getMeasurementAsString = getMeasurementAsString;
292
- exports.parseJSON = parseJSON;
293
- exports.parseMetafield = parseMetafield;
294
- exports.parseMetafieldValue = parseMetafieldValue;
295
- //# sourceMappingURL=Metafield.cjs.map
288
+ export {
289
+ Metafield,
290
+ getMeasurementAsString,
291
+ parseJSON,
292
+ parseMetafield,
293
+ parseMetafieldValue
294
+ };
295
+ //# sourceMappingURL=Metafield.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Metafield.mjs","sources":["../../src/Metafield.tsx"],"sourcesContent":["import {type ElementType, useMemo, type ComponentPropsWithoutRef} from 'react';\nimport {useShop} from './ShopifyProvider.js';\nimport {Image} from './Image.js';\nimport type {\n MediaImage,\n Page,\n ProductVariant,\n Product,\n GenericFile,\n Video as VideoType,\n Metafield as MetafieldType,\n} from './storefront-api-types.js';\nimport {Video} from './Video.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport type {PartialDeep, JsonValue} from 'type-fest';\n\ninterface BaseProps<ComponentGeneric extends ElementType> {\n /** An object with fields that correspond to the Storefront API's [Metafield object](https://shopify.dev/api/storefront/reference/common-objects/metafield). */\n data: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null;\n /** An HTML tag or React component to be rendered as the base element wrapper. The default value varies depending on [metafield.type](https://shopify.dev/apps/metafields/types). */\n as?: ComponentGeneric;\n}\n\nexport type MetafieldProps<ComponentGeneric extends ElementType> =\n ComponentPropsWithoutRef<ComponentGeneric> & BaseProps<ComponentGeneric>;\n\n/**\n * The `Metafield` component renders the value of a Storefront\n * API's [Metafield object](https://shopify.dev/api/storefront/reference/common-objects/metafield).\n * Relies on the `locale` property of the `useShop()` hook, so it must be a desendent of `<ShopifyProvider/>`\n *\n * Renders a smart default of the Metafield's `value`. For more information, refer to the [Default output](#default-output) section.\n */\nexport function Metafield<ComponentGeneric extends ElementType>(\n props: MetafieldProps<ComponentGeneric>\n) {\n const {data, as, ...passthroughProps} = props;\n const {locale} = useShop();\n\n const parsedMetafield = useMemo(() => parseMetafield(data), [data]);\n\n if (!parsedMetafield) {\n const noDataPropWarning = `<Metafield/>: nothing was passed to the data prop 'data'. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noDataPropWarning);\n } else {\n console.warn(noDataPropWarning);\n }\n return null;\n }\n\n if (parsedMetafield.value === null || parsedMetafield.value === undefined) {\n const noValueWarning = `<Metafield/>: No metafield value for metafield ${\n parsedMetafield.id ?? parsedMetafield.key\n }. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noValueWarning);\n } else {\n console.warn(noValueWarning);\n }\n return null;\n }\n\n switch (parsedMetafield.type) {\n case 'date': {\n const Wrapper = as ?? 'time';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Date).toLocaleDateString(locale)}\n </Wrapper>\n );\n }\n case 'date_time': {\n const Wrapper = as ?? 'time';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Date).toLocaleString(locale)}\n </Wrapper>\n );\n }\n case 'weight':\n case 'dimension':\n case 'volume': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {getMeasurementAsString(parsedMetafield.value as Measurement, locale)}\n </Wrapper>\n );\n }\n case 'rating': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Rating).value}\n </Wrapper>\n );\n }\n case 'single_line_text_field': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper\n {...passthroughProps}\n dangerouslySetInnerHTML={{__html: parsedMetafield.value as string}}\n />\n );\n }\n case 'multi_line_text_field': {\n const Wrapper = as ?? 'div';\n return (\n <Wrapper\n {...passthroughProps}\n dangerouslySetInnerHTML={{\n __html: (parsedMetafield.value as string).split('\\n').join('<br/>'),\n }}\n />\n );\n }\n case 'url': {\n const protocolLessUrl = new URL(parsedMetafield.value as string);\n return (\n <a\n href={protocolLessUrl.href.replace(protocolLessUrl.protocol, '')}\n {...passthroughProps}\n >\n {parsedMetafield.value as string}\n </a>\n );\n }\n case 'json': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {JSON.stringify(parsedMetafield.value)}\n </Wrapper>\n );\n }\n case 'product_reference':\n case 'variant_reference':\n case 'page_reference': {\n const Wrapper = as ?? 'span';\n const ref = parsedMetafield.reference as Page | ProductVariant | Product;\n return (\n <Wrapper {...passthroughProps}>{ref?.title ?? ref?.id ?? ''}</Wrapper>\n );\n }\n case 'list.single_line_text_field': {\n const Wrapper = as ?? 'ul';\n\n const refArray = parsedMetafield.references\n ? (flattenConnection(parsedMetafield.references) as string[])\n : [];\n return (\n <Wrapper {...passthroughProps}>\n {refArray.map((ref, index) => (\n // there's no unique way to identify these strings, so we do our best by combining the string with the index for the key\n // eslint-disable-next-line react/no-array-index-key\n <li key={`${ref ?? ''}-${index}`}>{ref}</li>\n ))}\n </Wrapper>\n );\n }\n case 'file_reference': {\n if (parsedMetafield.reference?.__typename === 'MediaImage') {\n const ref = parsedMetafield.reference as MediaImage;\n return ref.image ? (\n <Image data={ref.image} {...passthroughProps} />\n ) : null;\n } else if (parsedMetafield.reference?.__typename === 'GenericFile') {\n const ref = parsedMetafield.reference as GenericFile;\n return ref.previewImage ? (\n <a href={parsedMetafield.reference?.url ?? ''} {...passthroughProps}>\n <Image data={ref.previewImage} />\n </a>\n ) : null;\n } else if (parsedMetafield.reference?.__typename === 'Video') {\n const ref = parsedMetafield.reference as VideoType;\n return <Video {...passthroughProps} data={ref} />;\n }\n }\n }\n\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>{parsedMetafield.value?.toString()}</Wrapper>\n );\n}\n\n/**\n * The `parseMetafield` utility transforms a [Metafield](https://shopify.dev/api/storefront/reference/common-objects/Metafield)\n * into a new object whose `values` have been parsed according to the metafield `type`.\n * If the metafield is `null`, then it returns `null` back.\n */\nexport function parseMetafield(\n /** A [Metafield](https://shopify.dev/api/storefront/reference/common-objects/Metafield) or null */\n metafield: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null\n): PartialDeep<ParsedMetafield, {recurseIntoArrays: true}> | null {\n if (!metafield) {\n if (__HYDROGEN_DEV__) {\n console.warn(\n `'parseMetafield' was not passed any value for the 'metafield' argument`\n );\n }\n return null;\n }\n if (\n __HYDROGEN_DEV__ &&\n (metafield.value === null || metafield.value === undefined)\n ) {\n console.warn(\n `'parseMetafield()' was passed ${metafield.value} for 'metafield.value'`\n );\n }\n\n return {\n ...metafield,\n value: parseMetafieldValue(metafield),\n };\n}\n\n/**\n * The `parseMetafieldValue` function parses a [Metafield](https://shopify.dev/api/storefront/reference/common-objects/metafield)'s `value` from a string into a sensible type corresponding to the [Metafield](https://shopify.dev/api/storefront/reference/common-objects/metafield)'s `type`.\n */\nexport function parseMetafieldValue(\n metafield: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null\n): ParsedMetafield['value'] {\n if (!metafield) {\n return null;\n }\n\n if (metafield.value === null || metafield.value === undefined) {\n if (__HYDROGEN_DEV__) {\n console.warn(\n `'parseMetafieldValue()' was passed ${metafield.value} for 'metafield.value'`\n );\n }\n return metafield.value;\n }\n\n switch (metafield.type) {\n case 'boolean':\n return metafield.value === 'true';\n case 'number_integer':\n return parseInt(metafield.value);\n case 'number_decimal':\n return parseFloat(metafield.value);\n case 'date':\n case 'date_time':\n return new Date(metafield.value);\n case 'json':\n case 'weight':\n case 'dimension':\n case 'volume':\n case 'rating':\n return parseJSON(metafield.value);\n case 'color':\n case 'single_line_text_field':\n case 'multi_line_text_field':\n case 'product_reference':\n case 'page_reference':\n case 'variant_reference':\n case 'file_reference':\n case 'url':\n default:\n return metafield.value;\n }\n}\n\n/**\n * Parses a JSON string while preventing prototype injection attacks.\n */\nexport function parseJSON(json: string) {\n if (String(json).includes('__proto__')) {\n return JSON.parse(json, (k, v) => {\n if (k !== '__proto__') return v;\n });\n }\n\n return JSON.parse(json);\n}\n\nconst UNIT_MAPPING: Record<string, string> = {\n // Dimension\n mm: 'millimeter',\n cm: 'centimeter',\n m: 'meter',\n in: 'inch',\n ft: 'foot',\n yd: 'yard',\n // Volume\n ml: 'milliliter',\n l: 'liter',\n us_fl_oz: 'fluid-ounce',\n us_gal: 'gallon',\n // Weight\n kg: 'kilogram',\n g: 'gram',\n lb: 'pound',\n oz: 'ounce',\n};\n\nexport function getMeasurementAsString(\n measurement: Measurement,\n locale = 'en-us',\n options: Intl.NumberFormatOptions = {}\n) {\n let measure: {value: number; unit: string} = {\n value: measurement.value,\n unit: UNIT_MAPPING[measurement.unit],\n };\n\n if (measure.unit == null) {\n measure = convertToSupportedUnit(measurement.value, measurement.unit);\n }\n\n return new Intl.NumberFormat(locale, {\n ...options,\n unit: measure.unit,\n style: 'unit',\n }).format(measure.value);\n}\n\nfunction convertToSupportedUnit(value: number, unit: string) {\n switch (unit) {\n case 'cl':\n return {\n value: value / 1000,\n unit: 'liter',\n };\n case 'm3':\n return {\n value: value * 1000,\n unit: 'liter',\n };\n case 'us_pt':\n return {\n value: value * 0.125,\n unit: 'gallon',\n };\n case 'us_qt':\n return {\n value: value * 0.5,\n unit: 'gallon',\n };\n case 'us_oz':\n return {\n value: value / 128,\n unit: 'gallon',\n };\n case 'imp_pt':\n return {\n value: value / 6.661, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_qt':\n return {\n value: value / 3.331, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_gal':\n return {\n value: value / 1.201, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_fl_oz':\n return {\n value: value * 0.96076, // approximate conversion\n unit: 'fluid-ounce',\n };\n default:\n throw new Error(`Unit not supported: ${unit}`);\n }\n}\n\ntype ParsedMetafield = Omit<\n PartialDeep<MetafieldType, {recurseIntoArrays: true}>,\n 'value'\n> & {\n value?: string | number | boolean | JsonValue | Date | Rating | Measurement;\n};\n\nexport interface Rating {\n value: number;\n scale_min: number;\n scale_max: number;\n}\n\ninterface Measurement {\n unit: string;\n value: number;\n}\n"],"names":["Metafield","props","data","as","passthroughProps","locale","useShop","parsedMetafield","useMemo","parseMetafield","noDataPropWarning","Error","value","undefined","noValueWarning","id","key","type","Wrapper","toLocaleDateString","toLocaleString","getMeasurementAsString","__html","split","join","protocolLessUrl","URL","href","replace","protocol","JSON","stringify","ref","reference","title","refArray","references","flattenConnection","map","index","__typename","image","_jsx","previewImage","url","toString","metafield","console","warn","parseMetafieldValue","parseInt","parseFloat","Date","parseJSON","json","String","includes","parse","k","v","UNIT_MAPPING","mm","cm","m","in","ft","yd","ml","l","us_fl_oz","us_gal","kg","g","lb","oz","measurement","options","measure","unit","convertToSupportedUnit","Intl","NumberFormat","style","format"],"mappings":"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"}
@@ -1,10 +1,12 @@
1
- import { useState, useCallback, useEffect } from "react";
2
- import { useLoadScript } from "./load-script.js";
3
- import { jsx } from "react/jsx-runtime";
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const require$$0 = require("react");
4
+ const loadScript = require("./load-script.js");
5
+ const jsxRuntime = require("react/jsx-runtime");
4
6
  function ModelViewer(props) {
5
7
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
6
- const [modelViewer, setModelViewer] = useState(void 0);
7
- const callbackRef = useCallback((node) => {
8
+ const [modelViewer, setModelViewer] = require$$0.useState(void 0);
9
+ const callbackRef = require$$0.useCallback((node) => {
8
10
  setModelViewer(node);
9
11
  }, []);
10
12
  const {
@@ -13,10 +15,10 @@ function ModelViewer(props) {
13
15
  className,
14
16
  ...passthroughProps
15
17
  } = props;
16
- const modelViewerLoadedStatus = useLoadScript("https://unpkg.com/@google/model-viewer@v1.12.1/dist/model-viewer.min.js", {
18
+ const modelViewerLoadedStatus = loadScript.useLoadScript("https://unpkg.com/@google/model-viewer@v1.12.1/dist/model-viewer.min.js", {
17
19
  module: true
18
20
  });
19
- useEffect(() => {
21
+ require$$0.useEffect(() => {
20
22
  if (!modelViewer) {
21
23
  return;
22
24
  }
@@ -90,7 +92,7 @@ function ModelViewer(props) {
90
92
  if (!data.alt) {
91
93
  console.warn(`<ModelViewer/> requires the 'data.alt' prop for accessibility`);
92
94
  }
93
- return /* @__PURE__ */ jsx("model-viewer", {
95
+ return /* @__PURE__ */ jsxRuntime.jsx("model-viewer", {
94
96
  ref: callbackRef,
95
97
  ...passthroughProps,
96
98
  className,
@@ -139,7 +141,5 @@ function ModelViewer(props) {
139
141
  children
140
142
  });
141
143
  }
142
- export {
143
- ModelViewer
144
- };
144
+ exports.ModelViewer = ModelViewer;
145
145
  //# sourceMappingURL=ModelViewer.js.map