@shopify/hydrogen 1.0.0-alpha.22 → 1.0.0
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.
- package/CHANGELOG.md +2198 -0
- package/README.md +2 -2
- package/dist/esnext/FileSessionStorage.d.ts +1 -0
- package/dist/esnext/FileSessionStorage.js +1 -0
- package/dist/esnext/client.d.ts +14 -5
- package/dist/esnext/client.js +14 -5
- package/dist/esnext/components/AddToCartButton/AddToCartButton.client.d.ts +12 -7
- package/dist/esnext/components/AddToCartButton/AddToCartButton.client.js +40 -36
- package/dist/esnext/components/AddToCartButton/index.d.ts +1 -1
- package/dist/esnext/components/BaseButton/BaseButton.client.d.ts +14 -0
- package/dist/esnext/components/BaseButton/BaseButton.client.js +15 -0
- package/dist/esnext/components/BaseButton/index.d.ts +1 -0
- package/dist/esnext/components/BaseButton/index.js +1 -0
- package/dist/esnext/components/BuyNowButton/BuyNowButton.client.d.ts +15 -0
- package/dist/esnext/components/BuyNowButton/BuyNowButton.client.js +27 -0
- package/dist/esnext/components/BuyNowButton/index.d.ts +1 -1
- package/dist/esnext/components/BuyNowButton/index.js +1 -1
- package/dist/esnext/components/CartCheckoutButton/CartCheckoutButton.client.d.ts +7 -3
- package/dist/esnext/components/CartCheckoutButton/CartCheckoutButton.client.js +9 -6
- package/dist/esnext/components/CartCost/CartCost.client.d.ts +14 -0
- package/dist/esnext/components/CartCost/CartCost.client.js +29 -0
- package/dist/esnext/components/CartCost/index.d.ts +1 -0
- package/dist/esnext/components/CartCost/index.js +1 -0
- package/dist/esnext/components/CartLineImage/CartLineImage.client.d.ts +9 -6
- package/dist/esnext/components/CartLineImage/CartLineImage.client.js +6 -3
- package/dist/esnext/components/CartLinePrice/CartLinePrice.client.d.ts +10 -4
- package/dist/esnext/components/CartLinePrice/CartLinePrice.client.js +9 -8
- package/dist/esnext/components/CartLineProductTitle/CartLineProductTitle.client.d.ts +8 -3
- package/dist/esnext/components/CartLineProductTitle/CartLineProductTitle.client.js +4 -0
- package/dist/esnext/components/CartLineProvider/CartLineProvider.client.d.ts +5 -0
- package/dist/esnext/components/CartLineProvider/CartLineProvider.client.js +3 -0
- package/dist/esnext/components/CartLineProvider/context.d.ts +20 -10
- package/dist/esnext/components/CartLineProvider/index.d.ts +1 -1
- package/dist/esnext/components/CartLineProvider/index.js +1 -1
- package/dist/esnext/components/CartLineQuantity/CartLineQuantity.client.d.ts +8 -3
- package/dist/esnext/components/CartLineQuantity/CartLineQuantity.client.js +4 -0
- package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.d.ts +9 -4
- package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.js +22 -13
- package/dist/esnext/components/CartLines/CartLines.client.d.ts +15 -0
- package/dist/esnext/components/CartLines/{CartLines.js → CartLines.client.js} +7 -5
- package/dist/esnext/components/CartLines/index.d.ts +1 -1
- package/dist/esnext/components/CartLines/index.js +1 -1
- package/dist/esnext/components/CartProvider/CartProvider.client.d.ts +37 -3
- package/dist/esnext/components/CartProvider/CartProvider.client.js +474 -370
- package/dist/esnext/components/CartProvider/cart-queries.d.ts +10 -0
- package/dist/esnext/components/CartProvider/cart-queries.js +202 -0
- package/dist/esnext/components/CartProvider/constants.d.ts +1 -1
- package/dist/esnext/components/CartProvider/constants.js +1 -1
- package/dist/esnext/components/CartProvider/graphql/CartAttributesUpdateMutation.d.ts +82 -4
- package/dist/esnext/components/CartProvider/graphql/CartBuyerIdentityUpdateMutation.d.ts +82 -4
- package/dist/esnext/components/CartProvider/graphql/CartCreateMutation.d.ts +82 -4
- package/dist/esnext/components/CartProvider/graphql/CartDiscountCodesUpdateMutation.d.ts +83 -5
- package/dist/esnext/components/CartProvider/graphql/CartFragment.d.ts +22 -8
- package/dist/esnext/components/CartProvider/graphql/CartLineAddMutation.d.ts +82 -4
- package/dist/esnext/components/CartProvider/graphql/CartLineRemoveMutation.d.ts +82 -4
- package/dist/esnext/components/CartProvider/graphql/CartLineUpdateMutation.d.ts +82 -4
- package/dist/esnext/components/CartProvider/graphql/CartNoteUpdateMutation.d.ts +83 -5
- package/dist/esnext/components/CartProvider/graphql/CartQuery.d.ts +82 -4
- package/dist/esnext/components/CartProvider/hooks.client.d.ts +15 -0
- package/dist/esnext/components/CartProvider/hooks.client.js +64 -0
- package/dist/esnext/components/CartProvider/index.d.ts +3 -3
- package/dist/esnext/components/CartProvider/index.js +2 -3
- package/dist/esnext/components/CartProvider/types.d.ts +48 -49
- package/dist/esnext/components/CartShopPayButton/CartShopPayButton.client.d.ts +7 -2
- package/dist/esnext/components/CartShopPayButton/CartShopPayButton.client.js +11 -4
- package/dist/esnext/components/ExternalVideo/ExternalVideo.d.ts +16 -9
- package/dist/esnext/components/ExternalVideo/ExternalVideo.js +11 -6
- package/dist/esnext/components/ExternalVideo/index.d.ts +1 -1
- package/dist/esnext/components/Image/Image.d.ts +103 -12
- package/dist/esnext/components/Image/Image.js +133 -7
- package/dist/esnext/components/Image/index.d.ts +2 -1
- package/dist/esnext/components/Link/Link.client.d.ts +27 -0
- package/dist/esnext/components/Link/Link.client.js +145 -0
- package/dist/esnext/components/Link/index.d.ts +1 -0
- package/dist/esnext/components/Link/index.js +1 -0
- package/dist/esnext/components/LocalizationProvider/LocalizationClientProvider.client.d.ts +2 -2
- package/dist/esnext/components/LocalizationProvider/LocalizationClientProvider.client.js +3 -12
- package/dist/esnext/components/LocalizationProvider/LocalizationContext.client.d.ts +6 -5
- package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.d.ts +19 -2
- package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.js +24 -5
- package/dist/esnext/components/LocalizationProvider/index.d.ts +0 -1
- package/dist/esnext/components/LocalizationProvider/index.js +0 -1
- package/dist/esnext/components/MediaFile/MediaFile.d.ts +18 -18
- package/dist/esnext/components/MediaFile/MediaFile.js +20 -10
- package/dist/esnext/components/MediaFile/index.d.ts +1 -1
- package/dist/esnext/components/Metafield/Metafield.client.d.ts +16 -7
- package/dist/esnext/components/Metafield/Metafield.client.js +83 -29
- package/dist/esnext/components/Metafield/components/StarRating/StarRating.d.ts +5 -5
- package/dist/esnext/components/Metafield/components/StarRating/StarRating.js +1 -1
- package/dist/esnext/components/Metafield/index.d.ts +1 -2
- package/dist/esnext/components/Metafield/types.d.ts +1 -1
- package/dist/esnext/components/ModelViewer/ModelViewer.client.d.ts +128 -0
- package/dist/esnext/components/ModelViewer/ModelViewer.client.js +104 -0
- package/dist/esnext/components/ModelViewer/index.d.ts +1 -0
- package/dist/esnext/components/ModelViewer/index.js +1 -0
- package/dist/esnext/components/Money/Money.client.d.ts +24 -6
- package/dist/esnext/components/Money/Money.client.js +36 -7
- package/dist/esnext/components/Money/index.d.ts +1 -1
- package/dist/esnext/components/ProductOptionsProvider/ProductOptionsProvider.client.d.ts +21 -0
- package/dist/esnext/components/ProductOptionsProvider/ProductOptionsProvider.client.js +133 -0
- package/dist/esnext/components/ProductOptionsProvider/context.d.ts +2 -0
- package/dist/esnext/components/ProductOptionsProvider/context.js +2 -0
- package/dist/esnext/components/ProductOptionsProvider/index.d.ts +2 -0
- package/dist/esnext/components/ProductOptionsProvider/index.js +2 -0
- package/dist/esnext/components/ProductPrice/ProductPrice.client.d.ts +15 -4
- package/dist/esnext/components/ProductPrice/ProductPrice.client.js +35 -13
- package/dist/esnext/components/Seo/CollectionSeo.client.d.ts +3 -0
- package/dist/esnext/components/Seo/CollectionSeo.client.js +14 -0
- package/dist/esnext/components/Seo/DefaultPageSeo.client.d.ts +3 -0
- package/dist/esnext/components/Seo/DefaultPageSeo.client.js +18 -0
- package/dist/esnext/components/Seo/DescriptionSeo.client.d.ts +4 -0
- package/dist/esnext/components/Seo/DescriptionSeo.client.js +10 -0
- package/dist/esnext/components/Seo/HomePageSeo.client.d.ts +2 -0
- package/dist/esnext/components/Seo/HomePageSeo.client.js +25 -0
- package/dist/esnext/components/Seo/ImageSeo.client.d.ts +3 -0
- package/dist/esnext/components/Seo/ImageSeo.client.js +10 -0
- package/dist/esnext/components/Seo/NoIndexSeo.client.d.ts +3 -0
- package/dist/esnext/components/Seo/NoIndexSeo.client.js +10 -0
- package/dist/esnext/components/Seo/PageSeo.client.d.ts +3 -0
- package/dist/esnext/components/Seo/PageSeo.client.js +12 -0
- package/dist/esnext/components/Seo/ProductSeo.client.d.ts +5 -0
- package/dist/esnext/components/Seo/ProductSeo.client.js +62 -0
- package/dist/esnext/components/Seo/Seo.client.d.ts +30 -0
- package/dist/esnext/components/Seo/Seo.client.js +31 -0
- package/dist/esnext/components/Seo/TitleSeo.client.d.ts +3 -0
- package/dist/esnext/components/Seo/TitleSeo.client.js +10 -0
- package/dist/esnext/components/Seo/TwitterSeo.client.d.ts +2 -0
- package/dist/esnext/components/Seo/TwitterSeo.client.js +9 -0
- package/dist/esnext/components/Seo/index.d.ts +1 -0
- package/dist/esnext/components/Seo/index.js +1 -0
- package/dist/esnext/components/Seo/seo-types.d.ts +18 -0
- package/dist/esnext/components/{ExternalVideo/ExternalVideoFragment.js → Seo/seo-types.js} +0 -0
- package/dist/esnext/components/ShopPayButton/ShopPayButton.client.d.ts +29 -4
- package/dist/esnext/components/ShopPayButton/ShopPayButton.client.js +50 -26
- package/dist/esnext/components/ShopPayButton/index.d.ts +1 -1
- package/dist/esnext/components/Video/Video.d.ts +13 -12
- package/dist/esnext/components/Video/Video.js +21 -6
- package/dist/esnext/components/Video/index.d.ts +1 -1
- package/dist/esnext/components/index.d.ts +28 -41
- package/dist/esnext/components/index.js +26 -87
- package/dist/esnext/components/types.d.ts +4 -6
- package/dist/esnext/components/types.js +1 -1
- package/dist/esnext/config.d.ts +7 -0
- package/dist/esnext/config.js +5 -0
- package/dist/esnext/constants.d.ts +9 -0
- package/dist/esnext/constants.js +9 -0
- package/dist/esnext/entry-client.js +145 -23
- package/dist/esnext/entry-server.d.ts +5 -2
- package/dist/esnext/entry-server.js +570 -247
- package/dist/esnext/foundation/Analytics/Analytics.client.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/Analytics.client.js +30 -0
- package/dist/esnext/foundation/Analytics/Analytics.server.d.ts +1 -0
- package/dist/esnext/foundation/Analytics/Analytics.server.js +47 -0
- package/dist/esnext/foundation/Analytics/ClientAnalytics.d.ts +27 -0
- package/dist/esnext/foundation/Analytics/ClientAnalytics.js +99 -0
- package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.d.ts +4 -0
- package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.js +51 -0
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/PerformanceMetrics.client.d.ts +7 -0
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/PerformanceMetrics.client.js +81 -0
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/PerformanceMetricsDebug.client.d.ts +1 -0
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/PerformanceMetricsDebug.client.js +23 -0
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/ServerAnalyticsConnector.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/ServerAnalyticsConnector.js +7 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ServerAnalyticsConnector.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ServerAnalyticsConnector.js +7 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.client.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.client.js +182 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.server.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.server.js +43 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/const.d.ts +28 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/const.js +51 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/utils.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/utils.js +56 -0
- package/dist/esnext/foundation/Analytics/const.d.ts +9 -0
- package/dist/esnext/foundation/Analytics/const.js +9 -0
- package/dist/esnext/foundation/Analytics/hook.d.ts +1 -0
- package/dist/esnext/foundation/Analytics/hook.js +9 -0
- package/dist/esnext/foundation/Analytics/index.d.ts +1 -0
- package/dist/esnext/foundation/Analytics/index.js +1 -0
- package/dist/esnext/foundation/Analytics/types.d.ts +5 -0
- package/dist/esnext/{components/ProductProvider → foundation/Analytics}/types.js +0 -0
- package/dist/esnext/foundation/Analytics/utils.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/utils.js +29 -0
- package/dist/esnext/foundation/AnalyticsErrorBoundary.client.d.ts +4 -0
- package/dist/esnext/foundation/AnalyticsErrorBoundary.client.js +8 -0
- package/dist/esnext/foundation/BuiltInRoutes/BuiltInRoutes.d.ts +2 -0
- package/dist/esnext/foundation/BuiltInRoutes/BuiltInRoutes.js +23 -0
- package/dist/esnext/foundation/BuiltInRoutes/healthCheck.d.ts +1 -0
- package/dist/esnext/foundation/BuiltInRoutes/healthCheck.js +3 -0
- package/dist/esnext/foundation/Cache/cache-sub-request.d.ts +17 -0
- package/dist/esnext/foundation/Cache/cache-sub-request.js +64 -0
- package/dist/esnext/foundation/Cache/cache.d.ts +17 -0
- package/dist/esnext/foundation/Cache/cache.js +127 -0
- package/dist/esnext/foundation/Cache/strategies/index.d.ts +7 -0
- package/dist/esnext/foundation/Cache/strategies/index.js +54 -0
- package/dist/esnext/foundation/Cookie/Cookie.d.ts +48 -0
- package/dist/esnext/foundation/Cookie/Cookie.js +72 -0
- package/dist/esnext/foundation/CookieSessionStorage/CookieSessionStorage.d.ts +5 -0
- package/dist/esnext/foundation/CookieSessionStorage/CookieSessionStorage.js +31 -0
- package/dist/esnext/foundation/DevTools/DevTools.client.d.ts +3 -0
- package/dist/esnext/foundation/DevTools/DevTools.client.js +17 -0
- package/dist/esnext/foundation/DevTools/DevTools.server.d.ts +1 -0
- package/dist/esnext/foundation/DevTools/DevTools.server.js +14 -0
- package/dist/esnext/foundation/DevTools/components/GraphQL.client.d.ts +1 -0
- package/dist/esnext/foundation/DevTools/components/GraphQL.client.js +25 -0
- package/dist/esnext/foundation/DevTools/components/Heading.d.ts +5 -0
- package/dist/esnext/foundation/DevTools/components/Heading.js +12 -0
- package/dist/esnext/foundation/DevTools/components/Interface.client.d.ts +11 -0
- package/dist/esnext/foundation/DevTools/components/Interface.client.js +47 -0
- package/dist/esnext/foundation/DevTools/components/Panels.d.ts +8 -0
- package/dist/esnext/foundation/DevTools/components/Panels.js +60 -0
- package/dist/esnext/foundation/DevTools/components/Performance.client.d.ts +14 -0
- package/dist/esnext/foundation/DevTools/components/Performance.client.js +26 -0
- package/dist/esnext/foundation/DevTools/components/Settings.client.d.ts +7 -0
- package/dist/esnext/foundation/DevTools/components/Settings.client.js +20 -0
- package/dist/esnext/foundation/DevTools/components/Table.d.ts +9 -0
- package/dist/esnext/foundation/DevTools/components/Table.js +7 -0
- package/dist/esnext/foundation/DevTools/components/icons.d.ts +2 -0
- package/dist/esnext/foundation/DevTools/components/icons.js +13 -0
- package/dist/esnext/foundation/DevTools/components/index.d.ts +2 -0
- package/dist/esnext/foundation/DevTools/components/index.js +2 -0
- package/dist/esnext/foundation/FileRoutes/FileRoutes.server.d.ts +22 -0
- package/dist/esnext/foundation/FileRoutes/FileRoutes.server.js +69 -0
- package/dist/esnext/foundation/FileSessionStorage/FileSessionStorage.d.ts +6 -0
- package/dist/esnext/foundation/FileSessionStorage/FileSessionStorage.js +149 -0
- package/dist/esnext/foundation/Head/Head.client.d.ts +5 -0
- package/dist/esnext/foundation/Head/Head.client.js +10 -0
- package/dist/esnext/foundation/Head/index.d.ts +1 -0
- package/dist/esnext/foundation/Head/index.js +1 -0
- package/dist/esnext/foundation/Html/Html.d.ts +13 -0
- package/dist/esnext/foundation/Html/Html.js +96 -0
- package/dist/esnext/foundation/HydrogenRequest/HydrogenRequest.server.d.ts +76 -0
- package/dist/esnext/foundation/HydrogenRequest/HydrogenRequest.server.js +210 -0
- package/dist/esnext/foundation/HydrogenResponse/HydrogenResponse.server.d.ts +21 -0
- package/dist/esnext/foundation/HydrogenResponse/HydrogenResponse.server.js +48 -0
- package/dist/esnext/foundation/MemorySessionStorage/MemorySessionStorage.d.ts +5 -0
- package/dist/esnext/foundation/MemorySessionStorage/MemorySessionStorage.js +53 -0
- package/dist/esnext/foundation/Redirect/Redirect.client.d.ts +5 -0
- package/dist/esnext/foundation/Redirect/Redirect.client.js +15 -0
- package/dist/esnext/foundation/Route/Route.server.d.ts +12 -0
- package/dist/esnext/foundation/Route/Route.server.js +28 -0
- package/dist/esnext/foundation/Router/BrowserRouter.client.d.ts +14 -0
- package/dist/esnext/foundation/Router/BrowserRouter.client.js +138 -0
- package/dist/esnext/foundation/Router/Router.server.d.ts +10 -0
- package/dist/esnext/foundation/Router/Router.server.js +8 -0
- package/dist/esnext/foundation/ServerPropsProvider/ServerPropsProvider.d.ts +41 -0
- package/dist/esnext/foundation/ServerPropsProvider/ServerPropsProvider.js +65 -0
- package/dist/esnext/foundation/ServerPropsProvider/index.d.ts +2 -0
- package/dist/esnext/foundation/ServerPropsProvider/index.js +1 -0
- package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.d.ts +23 -0
- package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.js +125 -0
- package/dist/esnext/foundation/ServerRequestProvider/index.d.ts +1 -0
- package/dist/esnext/foundation/ServerRequestProvider/index.js +1 -0
- package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.d.ts +30 -0
- package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.js +59 -0
- package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.client.d.ts +7 -0
- package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.client.js +8 -0
- package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.server.d.ts +16 -0
- package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.server.js +60 -0
- package/dist/esnext/foundation/ShopifyProvider/index.d.ts +1 -2
- package/dist/esnext/foundation/ShopifyProvider/index.js +1 -2
- package/dist/esnext/foundation/ShopifyProvider/types.d.ts +12 -10
- package/dist/esnext/foundation/constants.d.ts +2 -0
- package/dist/esnext/foundation/constants.js +4 -0
- package/dist/esnext/foundation/fetchSync/client/fetchSync.d.ts +10 -0
- package/dist/esnext/foundation/fetchSync/client/fetchSync.js +28 -0
- package/dist/esnext/foundation/fetchSync/server/fetchSync.d.ts +8 -0
- package/dist/esnext/foundation/fetchSync/server/fetchSync.js +29 -0
- package/dist/esnext/foundation/fetchSync/types.d.ts +5 -0
- package/dist/{worker → esnext/foundation/fetchSync}/types.js +0 -0
- package/dist/esnext/foundation/index.d.ts +3 -4
- package/dist/esnext/foundation/index.js +3 -4
- package/dist/esnext/foundation/runtime.d.ts +2 -0
- package/dist/esnext/foundation/runtime.js +6 -0
- package/dist/esnext/foundation/session/session.d.ts +27 -0
- package/dist/esnext/foundation/session/session.js +37 -0
- package/dist/esnext/foundation/ssr-interop.d.ts +29 -0
- package/dist/esnext/foundation/ssr-interop.js +35 -0
- package/dist/esnext/foundation/useNavigate/useNavigate.d.ts +17 -0
- package/dist/esnext/foundation/useNavigate/useNavigate.js +39 -0
- package/dist/esnext/foundation/useQuery/hooks.d.ts +37 -0
- package/dist/esnext/foundation/useQuery/hooks.js +105 -0
- package/dist/esnext/foundation/useQuery/index.d.ts +1 -0
- package/dist/esnext/foundation/useQuery/index.js +1 -0
- package/dist/esnext/foundation/useRequestContext/index.d.ts +15 -0
- package/dist/esnext/foundation/useRequestContext/index.js +23 -0
- package/dist/esnext/foundation/useRouteParams/RouteParamsProvider.client.d.ts +13 -0
- package/dist/esnext/foundation/useRouteParams/RouteParamsProvider.client.js +12 -0
- package/dist/esnext/foundation/useRouteParams/useRouteParams.d.ts +4 -0
- package/dist/esnext/foundation/useRouteParams/useRouteParams.js +9 -0
- package/dist/esnext/foundation/useServerProps/index.d.ts +1 -0
- package/dist/esnext/foundation/useServerProps/index.js +1 -0
- package/dist/esnext/foundation/useServerProps/use-server-props.d.ts +21 -0
- package/dist/esnext/foundation/useServerProps/use-server-props.js +35 -0
- package/dist/esnext/foundation/useSession/useSession.d.ts +2 -0
- package/dist/esnext/foundation/useSession/useSession.js +7 -0
- package/dist/esnext/foundation/useShop/index.d.ts +1 -0
- package/dist/esnext/foundation/useShop/index.js +1 -0
- package/dist/esnext/foundation/useShop/use-shop.d.ts +6 -0
- package/dist/esnext/foundation/useShop/use-shop.js +14 -0
- package/dist/esnext/foundation/useUrl/index.d.ts +1 -0
- package/dist/esnext/foundation/useUrl/index.js +1 -0
- package/dist/esnext/foundation/useUrl/useUrl.d.ts +4 -0
- package/dist/esnext/foundation/useUrl/useUrl.js +29 -0
- package/dist/esnext/framework/cache/in-memory.d.ts +17 -0
- package/dist/esnext/framework/cache/in-memory.js +80 -0
- package/dist/esnext/framework/graphiql.d.ts +1 -1
- package/dist/esnext/framework/graphiql.js +1 -2
- package/dist/esnext/framework/load-config.d.ts +5 -0
- package/dist/esnext/framework/load-config.js +7 -0
- package/dist/esnext/framework/middleware.d.ts +11 -7
- package/dist/esnext/framework/middleware.js +49 -68
- package/dist/esnext/framework/plugin.d.ts +8 -3
- package/dist/esnext/framework/plugin.js +23 -4
- package/dist/esnext/framework/plugins/vite-plugin-client-imports.d.ts +2 -0
- package/dist/esnext/framework/plugins/vite-plugin-client-imports.js +25 -0
- package/dist/esnext/framework/plugins/vite-plugin-css-modules-rsc.d.ts +2 -0
- package/dist/esnext/framework/plugins/vite-plugin-css-modules-rsc.js +98 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydration-auto-import.d.ts +3 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydration-auto-import.js +35 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-client-middleware.d.ts +9 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-client-middleware.js +36 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-config.d.ts +1 -1
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-config.js +79 -20
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +10 -3
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.js +47 -7
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-rsc.d.ts +2 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-rsc.js +23 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-suppress-warnings.d.ts +3 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-suppress-warnings.js +19 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-virtual-files.d.ts +7 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-virtual-files.js +101 -0
- package/dist/esnext/framework/plugins/vite-plugin-platform-entry.d.ts +3 -0
- package/dist/esnext/framework/plugins/vite-plugin-platform-entry.js +70 -0
- package/dist/esnext/framework/plugins/{vite-plugin-react-server-components-shim.d.ts → vite-plugin-purge-query-cache.d.ts} +0 -0
- package/dist/esnext/framework/plugins/vite-plugin-purge-query-cache.js +11 -0
- package/dist/{node/framework/plugins/vite-plugin-react-server-components-shim.d.ts → esnext/framework/plugins/vite-plugin-ssr-interop.d.ts} +0 -0
- package/dist/esnext/framework/plugins/vite-plugin-ssr-interop.js +16 -0
- package/dist/esnext/framework/types.d.ts +6 -0
- package/dist/esnext/{components/Image/ImageFragment.js → framework/types.js} +0 -0
- package/dist/esnext/framework/viteception.d.ts +5 -0
- package/dist/esnext/framework/viteception.js +16 -0
- package/dist/esnext/hooks/index.d.ts +5 -5
- package/dist/esnext/hooks/index.js +5 -5
- package/dist/esnext/hooks/useCart/index.d.ts +1 -0
- package/dist/esnext/hooks/useCart/index.js +1 -0
- package/dist/esnext/hooks/useCart/useCart.d.ts +4 -0
- package/dist/esnext/hooks/useCart/useCart.js +12 -0
- package/dist/esnext/hooks/useCartLine/index.d.ts +1 -0
- package/dist/esnext/hooks/useCartLine/index.js +1 -0
- package/dist/esnext/hooks/useCartLine/useCartLine.d.ts +39 -0
- package/dist/esnext/{components/CartLineProvider/hooks.js → hooks/useCartLine/useCartLine.js} +4 -1
- package/dist/esnext/hooks/useLoadScript/index.d.ts +1 -0
- package/dist/esnext/hooks/useLoadScript/index.js +1 -0
- package/dist/esnext/hooks/useLoadScript/useLoadScript.client.d.ts +8 -0
- package/dist/esnext/hooks/useLoadScript/useLoadScript.client.js +23 -0
- package/dist/esnext/hooks/useLocalization/useLocalization.d.ts +4 -0
- package/dist/esnext/hooks/useLocalization/useLocalization.js +14 -0
- package/dist/esnext/hooks/useMeasurement/hooks.js +2 -2
- package/dist/esnext/hooks/useMoney/hooks.d.ts +44 -1
- package/dist/esnext/hooks/useMoney/hooks.js +69 -22
- package/dist/esnext/hooks/useProductOptions/helpers.d.ts +6 -4
- package/dist/esnext/hooks/useProductOptions/helpers.js +9 -6
- package/dist/esnext/hooks/useProductOptions/index.d.ts +1 -1
- package/dist/esnext/hooks/useProductOptions/index.js +1 -1
- package/dist/esnext/hooks/useProductOptions/types.d.ts +42 -48
- package/dist/esnext/hooks/useProductOptions/useProductOptions.client.d.ts +1 -0
- package/dist/esnext/hooks/useProductOptions/useProductOptions.client.js +9 -0
- package/dist/esnext/hooks/useShopQuery/hooks.d.ts +22 -3
- package/dist/esnext/hooks/useShopQuery/hooks.js +163 -24
- package/dist/esnext/hooks/useShopQuery/index.d.ts +1 -1
- package/dist/esnext/hooks/useShopQuery/index.js +1 -1
- package/dist/esnext/index.d.ts +41 -8
- package/dist/esnext/index.js +37 -10
- package/dist/esnext/node.d.ts +1 -0
- package/dist/esnext/node.js +1 -0
- package/dist/esnext/platforms/node.d.ts +9 -0
- package/dist/esnext/platforms/node.js +41 -0
- package/dist/esnext/{components/LocalizationProvider/LocalizationQuery.js → platforms/worker-event.d.ts} +0 -0
- package/dist/esnext/platforms/worker-event.js +3 -0
- package/dist/esnext/platforms/worker.d.ts +14 -0
- package/dist/esnext/platforms/worker.js +25 -0
- package/dist/esnext/shared-types.d.ts +27 -0
- package/dist/esnext/shared-types.js +4 -0
- package/dist/esnext/{graphql/types/types.d.ts → storefront-api-types.d.ts} +2404 -1886
- package/dist/esnext/{graphql/types/types.js → storefront-api-types.js} +1079 -722
- package/dist/esnext/streaming.server.d.ts +16 -0
- package/dist/esnext/streaming.server.js +24 -0
- package/dist/esnext/types.d.ts +92 -39
- package/dist/esnext/types.js +1 -1
- package/dist/esnext/utilities/apiRoutes.d.ts +42 -0
- package/dist/esnext/utilities/apiRoutes.js +152 -0
- package/dist/esnext/utilities/bot-ua.d.ts +4 -0
- package/dist/esnext/utilities/bot-ua.js +61 -0
- package/dist/esnext/utilities/defer.d.ts +6 -0
- package/dist/esnext/utilities/defer.js +14 -0
- package/dist/esnext/utilities/devtools.d.ts +11 -0
- package/dist/esnext/utilities/devtools.js +11 -0
- package/dist/esnext/utilities/empty-hydrogen-config.d.ts +2 -0
- package/dist/esnext/utilities/empty-hydrogen-config.js +2 -0
- package/dist/esnext/utilities/error.d.ts +1 -0
- package/dist/esnext/utilities/error.js +6 -0
- package/dist/esnext/utilities/fetch.d.ts +9 -0
- package/dist/esnext/utilities/fetch.js +31 -0
- package/dist/esnext/utilities/flattenConnection/flattenConnection.d.ts +7 -0
- package/dist/esnext/utilities/flattenConnection/flattenConnection.js +18 -0
- package/dist/esnext/utilities/flattenConnection/index.d.ts +1 -0
- package/dist/esnext/utilities/flattenConnection/index.js +1 -0
- package/dist/esnext/utilities/graphql-tag.d.ts +1 -0
- package/dist/esnext/utilities/graphql-tag.js +6 -0
- package/dist/esnext/utilities/graphql-tracker.d.ts +17 -0
- package/dist/esnext/utilities/graphql-tracker.js +121 -0
- package/dist/esnext/utilities/hash.d.ts +2 -0
- package/dist/esnext/utilities/hash.js +30 -0
- package/dist/esnext/utilities/html-encoding.d.ts +1 -0
- package/dist/esnext/utilities/html-encoding.js +8 -0
- package/dist/esnext/utilities/image_size.d.ts +30 -14
- package/dist/esnext/utilities/image_size.js +80 -30
- package/dist/esnext/utilities/index.d.ts +10 -6
- package/dist/esnext/utilities/index.js +10 -6
- package/dist/esnext/utilities/isBrowser/index.d.ts +1 -0
- package/dist/esnext/utilities/isBrowser/index.js +1 -0
- package/dist/esnext/utilities/isBrowser/isBrowser.d.ts +4 -0
- package/dist/esnext/utilities/isBrowser/isBrowser.js +6 -0
- package/dist/esnext/utilities/isServer/index.d.ts +1 -0
- package/dist/esnext/utilities/isServer/index.js +1 -0
- package/dist/esnext/utilities/isServer/isServer.d.ts +4 -0
- package/dist/esnext/utilities/isServer/isServer.js +7 -0
- package/dist/esnext/utilities/{script_loader.d.ts → load_script.d.ts} +0 -0
- package/dist/esnext/utilities/{script_loader.js → load_script.js} +1 -1
- package/dist/esnext/utilities/log/index.d.ts +4 -0
- package/dist/esnext/utilities/log/index.js +4 -0
- package/dist/esnext/utilities/log/log-cache-api-status.d.ts +1 -0
- package/dist/esnext/utilities/log/log-cache-api-status.js +17 -0
- package/dist/esnext/utilities/log/log-cache-header.d.ts +10 -0
- package/dist/esnext/utilities/log/log-cache-header.js +30 -0
- package/dist/esnext/utilities/log/log-query-timeline.d.ts +12 -0
- package/dist/esnext/utilities/log/log-query-timeline.js +102 -0
- package/dist/esnext/utilities/log/log.d.ts +28 -0
- package/dist/esnext/utilities/log/log.js +74 -0
- package/dist/esnext/utilities/log/utils.d.ts +3 -0
- package/dist/esnext/utilities/log/utils.js +11 -0
- package/dist/esnext/utilities/matchPath.d.ts +10 -0
- package/dist/esnext/utilities/matchPath.js +54 -0
- package/dist/esnext/utilities/{meaurement.d.ts → measurement.d.ts} +0 -0
- package/dist/esnext/utilities/{meaurement.js → measurement.js} +0 -0
- package/dist/esnext/utilities/object.d.ts +5 -0
- package/dist/esnext/utilities/object.js +7 -0
- package/dist/esnext/utilities/parse.d.ts +1 -0
- package/dist/esnext/utilities/parse.js +9 -0
- package/dist/esnext/utilities/parseMetafield/index.d.ts +1 -0
- package/dist/esnext/utilities/parseMetafield/index.js +1 -0
- package/dist/esnext/utilities/parseMetafield/parseMetafield.d.ts +15 -0
- package/dist/esnext/utilities/parseMetafield/parseMetafield.js +62 -0
- package/dist/esnext/utilities/storefrontApi.d.ts +5 -0
- package/dist/esnext/utilities/storefrontApi.js +26 -0
- package/dist/esnext/utilities/suspense.d.ts +7 -2
- package/dist/esnext/utilities/suspense.js +32 -6
- package/dist/esnext/utilities/template.d.ts +9 -0
- package/dist/esnext/utilities/template.js +22 -0
- package/dist/esnext/utilities/timing.d.ts +7 -0
- package/dist/esnext/utilities/timing.js +14 -0
- package/dist/esnext/{components/MediaFile/MediaFileFragment.js → utilities/web-api-polyfill.d.ts} +0 -0
- package/dist/esnext/utilities/web-api-polyfill.js +25 -0
- package/dist/esnext/version.d.ts +1 -1
- package/dist/esnext/version.js +1 -1
- package/dist/node/framework/cache/in-memory.d.ts +17 -0
- package/dist/node/framework/cache/in-memory.js +84 -0
- package/dist/node/framework/graphiql.d.ts +1 -1
- package/dist/node/framework/graphiql.js +1 -2
- package/dist/node/framework/load-config.d.ts +5 -0
- package/dist/node/framework/load-config.js +11 -0
- package/dist/node/framework/middleware.d.ts +11 -7
- package/dist/node/framework/middleware.js +56 -73
- package/dist/node/framework/plugin.d.ts +5 -3
- package/dist/node/framework/plugin.js +27 -8
- package/dist/node/framework/plugins/vite-plugin-client-imports.d.ts +2 -0
- package/dist/node/framework/plugins/vite-plugin-client-imports.js +28 -0
- package/dist/node/framework/plugins/vite-plugin-css-modules-rsc.d.ts +2 -0
- package/dist/node/framework/plugins/vite-plugin-css-modules-rsc.js +104 -0
- package/dist/node/framework/plugins/vite-plugin-hydration-auto-import.d.ts +3 -0
- package/dist/node/framework/plugins/vite-plugin-hydration-auto-import.js +40 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-client-middleware.d.ts +9 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-client-middleware.js +38 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-config.d.ts +1 -1
- package/dist/node/framework/plugins/vite-plugin-hydrogen-config.js +79 -20
- package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +10 -3
- package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.js +48 -7
- package/dist/node/framework/plugins/vite-plugin-hydrogen-rsc.d.ts +2 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-rsc.js +29 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-suppress-warnings.d.ts +3 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-suppress-warnings.js +21 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-virtual-files.d.ts +7 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-virtual-files.js +107 -0
- package/dist/node/framework/plugins/vite-plugin-platform-entry.d.ts +3 -0
- package/dist/node/framework/plugins/vite-plugin-platform-entry.js +75 -0
- package/dist/node/framework/plugins/vite-plugin-purge-query-cache.d.ts +3 -0
- package/dist/node/framework/plugins/vite-plugin-purge-query-cache.js +16 -0
- package/dist/node/framework/plugins/vite-plugin-ssr-interop.d.ts +3 -0
- package/dist/node/framework/plugins/vite-plugin-ssr-interop.js +18 -0
- package/dist/node/framework/types.d.ts +6 -0
- package/dist/node/{foundation/ShopifyProvider → framework}/types.js +0 -0
- package/dist/node/framework/viteception.d.ts +5 -0
- package/dist/node/framework/viteception.js +20 -0
- package/dist/node/shared-types.d.ts +27 -0
- package/dist/node/shared-types.js +5 -0
- package/dist/{esnext/components/Metafield/MetafieldFragment.js → node/utilities/web-api-polyfill.d.ts} +0 -0
- package/dist/node/utilities/web-api-polyfill.js +53 -0
- package/package.json +101 -56
- package/vendor/react-server-dom-vite/LICENSE +21 -0
- package/vendor/react-server-dom-vite/README.md +5 -0
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-plugin.js +600 -0
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.browser.development.server.js +1808 -0
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.browser.production.min.server.js +47 -0
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.node.development.server.js +1882 -0
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.node.production.min.server.js +47 -0
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite.development.js +629 -0
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite.production.min.js +19 -0
- package/vendor/react-server-dom-vite/esm/package.json +3 -0
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite-client-proxy.js +83 -0
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite-plugin.js +596 -0
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.browser.server.js +1800 -0
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.node.server.js +1874 -0
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite.js +619 -0
- package/vendor/react-server-dom-vite/index.js +7 -0
- package/vendor/react-server-dom-vite/package.json +67 -0
- package/vendor/react-server-dom-vite/plugin.js +3 -0
- package/vendor/react-server-dom-vite/writer.browser.server.js +7 -0
- package/vendor/react-server-dom-vite/writer.node.server.js +7 -0
- package/client.d.ts +0 -1
- package/client.js +0 -1
- package/dist/esnext/components/BuyNowButton/BuyNowButton.d.ts +0 -12
- package/dist/esnext/components/BuyNowButton/BuyNowButton.js +0 -29
- package/dist/esnext/components/CartContainer/CartContainer.client.d.ts +0 -9
- package/dist/esnext/components/CartContainer/CartContainer.client.js +0 -24
- package/dist/esnext/components/CartContainer/index.d.ts +0 -1
- package/dist/esnext/components/CartContainer/index.js +0 -1
- package/dist/esnext/components/CartLineAttributes/CartLineAttributes.client.d.ts +0 -10
- package/dist/esnext/components/CartLineAttributes/CartLineAttributes.client.js +0 -9
- package/dist/esnext/components/CartLineAttributes/index.d.ts +0 -1
- package/dist/esnext/components/CartLineAttributes/index.js +0 -1
- package/dist/esnext/components/CartLineProvider/hooks.d.ts +0 -26
- package/dist/esnext/components/CartLineSelectedOptions/CartLineSelectedOptions.client.d.ts +0 -10
- package/dist/esnext/components/CartLineSelectedOptions/CartLineSelectedOptions.client.js +0 -9
- package/dist/esnext/components/CartLineSelectedOptions/index.d.ts +0 -1
- package/dist/esnext/components/CartLineSelectedOptions/index.js +0 -1
- package/dist/esnext/components/CartLines/CartLines.d.ts +0 -7
- package/dist/esnext/components/CartProvider/CartServerProvider.server.d.ts +0 -11
- package/dist/esnext/components/CartProvider/CartServerProvider.server.js +0 -20
- package/dist/esnext/components/CartProvider/hooks.d.ts +0 -18
- package/dist/esnext/components/CartProvider/hooks.js +0 -79
- package/dist/esnext/components/CartToggle/CartToggle.client.d.ts +0 -8
- package/dist/esnext/components/CartToggle/CartToggle.client.js +0 -11
- package/dist/esnext/components/CartToggle/index.d.ts +0 -1
- package/dist/esnext/components/CartToggle/index.js +0 -1
- package/dist/esnext/components/CartTotal/CartTotal.client.d.ts +0 -3
- package/dist/esnext/components/CartTotal/CartTotal.client.js +0 -8
- package/dist/esnext/components/CartTotal/index.d.ts +0 -1
- package/dist/esnext/components/CartTotal/index.js +0 -1
- package/dist/esnext/components/CartUIProvider/CartUIProvider.client.d.ts +0 -5
- package/dist/esnext/components/CartUIProvider/CartUIProvider.client.js +0 -26
- package/dist/esnext/components/CartUIProvider/context.d.ts +0 -9
- package/dist/esnext/components/CartUIProvider/context.js +0 -2
- package/dist/esnext/components/CartUIProvider/hooks.d.ts +0 -1
- package/dist/esnext/components/CartUIProvider/hooks.js +0 -9
- package/dist/esnext/components/CartUIProvider/index.d.ts +0 -2
- package/dist/esnext/components/CartUIProvider/index.js +0 -2
- package/dist/esnext/components/ExternalVideo/ExternalVideoFragment.d.ts +0 -4
- package/dist/esnext/components/Image/ImageFragment.d.ts +0 -4
- package/dist/esnext/components/LocalizationProvider/LocalizationQuery.d.ts +0 -18
- package/dist/esnext/components/LocalizationProvider/hooks.d.ts +0 -8
- package/dist/esnext/components/LocalizationProvider/hooks.js +0 -17
- package/dist/esnext/components/MediaFile/MediaFileFragment.d.ts +0 -22
- package/dist/esnext/components/Metafield/MetafieldFragment.d.ts +0 -4
- package/dist/esnext/components/Model3D/Model3D.client.d.ts +0 -25
- package/dist/esnext/components/Model3D/Model3D.client.js +0 -30
- package/dist/esnext/components/Model3D/Model3DFragment.d.ts +0 -11
- package/dist/esnext/components/Model3D/Model3DFragment.js +0 -1
- package/dist/esnext/components/Model3D/index.d.ts +0 -1
- package/dist/esnext/components/Model3D/index.js +0 -1
- package/dist/esnext/components/ProductDescription/ProductDescription.client.d.ts +0 -3
- package/dist/esnext/components/ProductDescription/ProductDescription.client.js +0 -10
- package/dist/esnext/components/ProductDescription/index.d.ts +0 -1
- package/dist/esnext/components/ProductDescription/index.js +0 -1
- package/dist/esnext/components/ProductMetafield/ProductMetafield.client.d.ts +0 -7
- package/dist/esnext/components/ProductMetafield/ProductMetafield.client.js +0 -16
- package/dist/esnext/components/ProductMetafield/index.d.ts +0 -1
- package/dist/esnext/components/ProductMetafield/index.js +0 -1
- package/dist/esnext/components/ProductProvider/ProductProvider.client.d.ts +0 -7
- package/dist/esnext/components/ProductProvider/ProductProvider.client.js +0 -35
- package/dist/esnext/components/ProductProvider/ProductProviderFragment.d.ts +0 -96
- package/dist/esnext/components/ProductProvider/ProductProviderFragment.js +0 -1
- package/dist/esnext/components/ProductProvider/context.d.ts +0 -13
- package/dist/esnext/components/ProductProvider/context.js +0 -2
- package/dist/esnext/components/ProductProvider/hooks.d.ts +0 -1
- package/dist/esnext/components/ProductProvider/hooks.js +0 -6
- package/dist/esnext/components/ProductProvider/index.d.ts +0 -2
- package/dist/esnext/components/ProductProvider/index.js +0 -2
- package/dist/esnext/components/ProductProvider/types.d.ts +0 -5
- package/dist/esnext/components/ProductTitle/ProductTitle.client.d.ts +0 -3
- package/dist/esnext/components/ProductTitle/ProductTitle.client.js +0 -11
- package/dist/esnext/components/ProductTitle/index.d.ts +0 -1
- package/dist/esnext/components/ProductTitle/index.js +0 -1
- package/dist/esnext/components/RawHtml/RawHtml.d.ts +0 -7
- package/dist/esnext/components/RawHtml/RawHtml.js +0 -13
- package/dist/esnext/components/RawHtml/index.d.ts +0 -1
- package/dist/esnext/components/RawHtml/index.js +0 -1
- package/dist/esnext/components/SelectedVariantAddToCartButton/SelectedVariantAddToCartButton.client.d.ts +0 -6
- package/dist/esnext/components/SelectedVariantAddToCartButton/SelectedVariantAddToCartButton.client.js +0 -12
- package/dist/esnext/components/SelectedVariantAddToCartButton/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantAddToCartButton/index.js +0 -1
- package/dist/esnext/components/SelectedVariantBuyNowButton/SelectedVariantBuyNowButton.d.ts +0 -4
- package/dist/esnext/components/SelectedVariantBuyNowButton/SelectedVariantBuyNowButton.js +0 -12
- package/dist/esnext/components/SelectedVariantBuyNowButton/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantBuyNowButton/index.js +0 -1
- package/dist/esnext/components/SelectedVariantImage/SelectedVariantImage.client.d.ts +0 -6
- package/dist/esnext/components/SelectedVariantImage/SelectedVariantImage.client.js +0 -12
- package/dist/esnext/components/SelectedVariantImage/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantImage/index.js +0 -1
- package/dist/esnext/components/SelectedVariantMetafield/SelectedVariantMetafield.client.d.ts +0 -7
- package/dist/esnext/components/SelectedVariantMetafield/SelectedVariantMetafield.client.js +0 -15
- package/dist/esnext/components/SelectedVariantMetafield/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantMetafield/index.js +0 -1
- package/dist/esnext/components/SelectedVariantPrice/SelectedVariantPrice.client.d.ts +0 -6
- package/dist/esnext/components/SelectedVariantPrice/SelectedVariantPrice.client.js +0 -18
- package/dist/esnext/components/SelectedVariantPrice/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantPrice/index.js +0 -1
- package/dist/esnext/components/SelectedVariantShopPayButton/SelectedVariantShopPayButton.client.d.ts +0 -2
- package/dist/esnext/components/SelectedVariantShopPayButton/SelectedVariantShopPayButton.client.js +0 -12
- package/dist/esnext/components/SelectedVariantShopPayButton/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantShopPayButton/index.js +0 -1
- package/dist/esnext/components/SelectedVariantUnitPrice/SelectedVariantUnitPrice.client.d.ts +0 -3
- package/dist/esnext/components/SelectedVariantUnitPrice/SelectedVariantUnitPrice.client.js +0 -12
- package/dist/esnext/components/SelectedVariantUnitPrice/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantUnitPrice/index.js +0 -1
- package/dist/esnext/components/UnitPrice/UnitPrice.client.d.ts +0 -8
- package/dist/esnext/components/UnitPrice/UnitPrice.client.js +0 -16
- package/dist/esnext/components/UnitPrice/index.d.ts +0 -1
- package/dist/esnext/components/UnitPrice/index.js +0 -1
- package/dist/esnext/components/Video/VideoFragment.d.ts +0 -11
- package/dist/esnext/components/Video/VideoFragment.js +0 -1
- package/dist/esnext/foundation/ClientMarker/ClientMarker.d.ts +0 -10
- package/dist/esnext/foundation/ClientMarker/ClientMarker.js +0 -25
- package/dist/esnext/foundation/ClientMarker/index.d.ts +0 -1
- package/dist/esnext/foundation/ClientMarker/index.js +0 -1
- package/dist/esnext/foundation/Hydration/Cache.client.d.ts +0 -9
- package/dist/esnext/foundation/Hydration/Cache.client.js +0 -131
- package/dist/esnext/foundation/Hydration/ClientComponents.server.d.ts +0 -13
- package/dist/esnext/foundation/Hydration/ClientComponents.server.js +0 -18
- package/dist/esnext/foundation/Hydration/Html.d.ts +0 -5
- package/dist/esnext/foundation/Hydration/Html.js +0 -9
- package/dist/esnext/foundation/Hydration/HydrationContext.server.d.ts +0 -1
- package/dist/esnext/foundation/Hydration/HydrationContext.server.js +0 -2
- package/dist/esnext/foundation/Hydration/ServerComponentRequest.server.d.ts +0 -13
- package/dist/esnext/foundation/Hydration/ServerComponentRequest.server.js +0 -39
- package/dist/esnext/foundation/Hydration/ServerComponentResponse.server.d.ts +0 -18
- package/dist/esnext/foundation/Hydration/ServerComponentResponse.server.js +0 -35
- package/dist/esnext/foundation/Hydration/react-utils.d.ts +0 -5
- package/dist/esnext/foundation/Hydration/react-utils.js +0 -55
- package/dist/esnext/foundation/Hydration/wire.server.d.ts +0 -4
- package/dist/esnext/foundation/Hydration/wire.server.js +0 -75
- package/dist/esnext/foundation/Hydration/writer.server.d.ts +0 -14
- package/dist/esnext/foundation/Hydration/writer.server.js +0 -29
- package/dist/esnext/foundation/Router/DefaultRoutes.d.ts +0 -20
- package/dist/esnext/foundation/Router/DefaultRoutes.js +0 -54
- package/dist/esnext/foundation/Router/ServerStateRouter.client.d.ts +0 -6
- package/dist/esnext/foundation/Router/ServerStateRouter.client.js +0 -27
- package/dist/esnext/foundation/Router/index.d.ts +0 -1
- package/dist/esnext/foundation/Router/index.js +0 -1
- package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.client.d.ts +0 -11
- package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.client.js +0 -48
- package/dist/esnext/foundation/ServerStateProvider/index.d.ts +0 -1
- package/dist/esnext/foundation/ServerStateProvider/index.js +0 -1
- package/dist/esnext/foundation/ShopifyProvider/ShopifyContext.d.ts +0 -1
- package/dist/esnext/foundation/ShopifyProvider/ShopifyContext.js +0 -2
- package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.d.ts +0 -3
- package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.js +0 -11
- package/dist/esnext/foundation/ShopifyProvider/ShopifyServerProvider.server.d.ts +0 -8
- package/dist/esnext/foundation/ShopifyProvider/ShopifyServerProvider.server.js +0 -7
- package/dist/esnext/foundation/ShopifyProvider/hooks.d.ts +0 -2
- package/dist/esnext/foundation/ShopifyProvider/hooks.js +0 -9
- package/dist/esnext/framework/plugins/vite-plugin-react-server-components-shim.js +0 -123
- package/dist/esnext/framework/server-components.d.ts +0 -12
- package/dist/esnext/framework/server-components.js +0 -72
- package/dist/esnext/graphql/graphql-constants.d.ts +0 -1295
- package/dist/esnext/graphql/graphql-constants.js +0 -2482
- package/dist/esnext/handle-event.d.ts +0 -20
- package/dist/esnext/handle-event.js +0 -140
- package/dist/esnext/handle-worker-event.d.ts +0 -11
- package/dist/esnext/handle-worker-event.js +0 -14
- package/dist/esnext/hooks/useParsedMetafields/hooks.d.ts +0 -3
- package/dist/esnext/hooks/useParsedMetafields/hooks.js +0 -15
- package/dist/esnext/hooks/useParsedMetafields/index.d.ts +0 -1
- package/dist/esnext/hooks/useParsedMetafields/index.js +0 -1
- package/dist/esnext/hooks/useProductOptions/useProductOptions.d.ts +0 -23
- package/dist/esnext/hooks/useProductOptions/useProductOptions.js +0 -84
- package/dist/esnext/hooks/useQuery/QueryProvider.d.ts +0 -6
- package/dist/esnext/hooks/useQuery/QueryProvider.js +0 -13
- package/dist/esnext/hooks/useQuery/hooks.d.ts +0 -12
- package/dist/esnext/hooks/useQuery/hooks.js +0 -28
- package/dist/esnext/hooks/useQuery/index.d.ts +0 -2
- package/dist/esnext/hooks/useQuery/index.js +0 -2
- package/dist/esnext/utilities/connections.d.ts +0 -2
- package/dist/esnext/utilities/connections.js +0 -4
- package/dist/esnext/utilities/environment.d.ts +0 -2
- package/dist/esnext/utilities/environment.js +0 -2
- package/dist/esnext/utilities/metafields.d.ts +0 -2
- package/dist/esnext/utilities/metafields.js +0 -32
- package/dist/node/foundation/ClientMarker/ClientMarker.d.ts +0 -10
- package/dist/node/foundation/ClientMarker/ClientMarker.js +0 -48
- package/dist/node/foundation/ClientMarker/index.d.ts +0 -1
- package/dist/node/foundation/ClientMarker/index.js +0 -13
- package/dist/node/foundation/Hydration/HydrationContext.server.d.ts +0 -1
- package/dist/node/foundation/Hydration/HydrationContext.server.js +0 -5
- package/dist/node/foundation/Hydration/ServerComponentRequest.server.d.ts +0 -13
- package/dist/node/foundation/Hydration/ServerComponentRequest.server.js +0 -43
- package/dist/node/foundation/Hydration/ServerComponentResponse.server.d.ts +0 -18
- package/dist/node/foundation/Hydration/ServerComponentResponse.server.js +0 -39
- package/dist/node/foundation/Hydration/react-utils.d.ts +0 -5
- package/dist/node/foundation/Hydration/react-utils.js +0 -63
- package/dist/node/foundation/Router/DefaultRoutes.d.ts +0 -20
- package/dist/node/foundation/Router/DefaultRoutes.js +0 -78
- package/dist/node/foundation/Router/index.d.ts +0 -1
- package/dist/node/foundation/Router/index.js +0 -5
- package/dist/node/foundation/ShopifyProvider/ShopifyContext.d.ts +0 -1
- package/dist/node/foundation/ShopifyProvider/ShopifyContext.js +0 -5
- package/dist/node/foundation/ShopifyProvider/ShopifyProvider.d.ts +0 -3
- package/dist/node/foundation/ShopifyProvider/ShopifyProvider.js +0 -34
- package/dist/node/foundation/ShopifyProvider/ShopifyServerProvider.server.d.ts +0 -8
- package/dist/node/foundation/ShopifyProvider/ShopifyServerProvider.server.js +0 -14
- package/dist/node/foundation/ShopifyProvider/hooks.d.ts +0 -2
- package/dist/node/foundation/ShopifyProvider/hooks.js +0 -13
- package/dist/node/foundation/ShopifyProvider/index.d.ts +0 -2
- package/dist/node/foundation/ShopifyProvider/index.js +0 -8
- package/dist/node/foundation/ShopifyProvider/types.d.ts +0 -12
- package/dist/node/foundation/index.d.ts +0 -4
- package/dist/node/foundation/index.js +0 -13
- package/dist/node/framework/plugins/vite-plugin-react-server-components-shim.js +0 -128
- package/dist/node/framework/server-components.d.ts +0 -12
- package/dist/node/framework/server-components.js +0 -77
- package/dist/node/graphql/types/types.d.ts +0 -5583
- package/dist/node/graphql/types/types.js +0 -1417
- package/dist/node/handle-event.d.ts +0 -20
- package/dist/node/handle-event.js +0 -143
- package/dist/node/hooks/useQuery/QueryProvider.d.ts +0 -6
- package/dist/node/hooks/useQuery/QueryProvider.js +0 -20
- package/dist/node/hooks/useQuery/hooks.d.ts +0 -12
- package/dist/node/hooks/useQuery/hooks.js +0 -32
- package/dist/node/hooks/useQuery/index.d.ts +0 -2
- package/dist/node/hooks/useQuery/index.js +0 -14
- package/dist/node/types.d.ts +0 -62
- package/dist/node/types.js +0 -2
- package/dist/worker/foundation/Hydration/ServerComponentRequest.server.d.ts +0 -13
- package/dist/worker/foundation/Hydration/ServerComponentRequest.server.js +0 -39
- package/dist/worker/foundation/Hydration/ServerComponentResponse.server.d.ts +0 -18
- package/dist/worker/foundation/Hydration/ServerComponentResponse.server.js +0 -35
- package/dist/worker/graphql/types/types.d.ts +0 -5583
- package/dist/worker/graphql/types/types.js +0 -1414
- package/dist/worker/handle-event.d.ts +0 -20
- package/dist/worker/handle-event.js +0 -140
- package/dist/worker/handle-worker-event.d.ts +0 -11
- package/dist/worker/handle-worker-event.js +0 -14
- package/dist/worker/types.d.ts +0 -62
- package/entry-client.d.ts +0 -1
- package/entry-client.js +0 -1
- package/entry-server.d.ts +0 -1
- package/entry-server.js +0 -1
- package/marker.js +0 -1
- package/middleware.d.ts +0 -1
- package/middleware.js +0 -1
- package/plugin.d.ts +0 -1
- package/plugin.js +0 -1
- package/worker.js +0 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { ReactNode, ElementType } from 'react';
|
|
2
|
+
import { Props } from '../types';
|
|
3
|
+
import type { Model3d } from '../../storefront-api-types';
|
|
4
|
+
import type { PartialDeep } from 'type-fest';
|
|
5
|
+
interface ModelViewerProps {
|
|
6
|
+
/** Any ReactNode elements. */
|
|
7
|
+
children?: ReactNode;
|
|
8
|
+
/** An object with fields that correspond to the Storefront API's [Model3D object](https://shopify.dev/api/storefront/latest/objects/model3d). */
|
|
9
|
+
data: PartialDeep<Model3d>;
|
|
10
|
+
/** A string of either `auto`, `lazy`, or `eager` to indicate the conditions for preloading. Refer to [loading in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-attributes-loading). */
|
|
11
|
+
loading?: 'auto' | 'lazy' | 'eager';
|
|
12
|
+
/** A URL to display an image instead of the model. This is useful for showing the user something before a model is loaded and ready to render. If no URL is provided, then [Model3d.previewImage](https://shopify.dev/api/storefront/latest/objects/model3d) is used. Refer to [poster in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-attributes-poster). */
|
|
13
|
+
poster?: string;
|
|
14
|
+
/** A string of either `auto`, `interaction`, or `manual` to indicate when the model should be revealed. Refer to [reveal in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-attributes-reveal). */
|
|
15
|
+
reveal?: 'auto' | 'interaction' | 'manual';
|
|
16
|
+
/** A boolean to enable an AR experience. Refer to [ar in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-attributes-ar). */
|
|
17
|
+
ar?: boolean;
|
|
18
|
+
/** A prioritized list of `webxr`, `scene-viewer`, and/or `quick-look` to indicate the types of AR experiences to enable. Refer to [ar-modes in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-attributes-arModes). */
|
|
19
|
+
arModes?: 'webxr' | 'scene-viewer' | 'quick-look';
|
|
20
|
+
/** A string of `auto` or `fixed` to control the scaling behaviour. Refer to [ar-scale in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-attributes-arScale). */
|
|
21
|
+
arScale?: 'auto' | 'fixed';
|
|
22
|
+
/** A styring of either `floor` or `wall` to indicate where to place the object in AR. Refer to [ar-placement in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-attributes-arPlacement). */
|
|
23
|
+
arPlacement?: 'floor' | 'wall';
|
|
24
|
+
/** The url to a USDZ model which will be used on supported iOS 12+ devices via AR Quick Look on Safari. Refer to [ios-source in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-attributes-iosSrc). */
|
|
25
|
+
iosSrc?: string;
|
|
26
|
+
/** A boolean to enable camera controls. Refer to [attributes in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#stagingandcameras-attributes). */
|
|
27
|
+
cameraControls?: boolean;
|
|
28
|
+
/** A string of `pan-x`, `pan-y`, or `none`. Refer to [touch-action in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-touch-action). */
|
|
29
|
+
touchAction?: 'pan-x' | 'pan-y' | 'none';
|
|
30
|
+
/** A boolean to disable zoom. Refer to [disable-zoom in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-disable-zoom). */
|
|
31
|
+
disableZoom?: boolean;
|
|
32
|
+
/** A number to adjust the speed of theta and phi orbit interactions. Refer to [orbit-sensitivity in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-orbitSensitivity). */
|
|
33
|
+
orbitSensitivity?: number;
|
|
34
|
+
/** A boolean to enable auto rotate. Refer to [auto-rotate in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-autoRotate). */
|
|
35
|
+
autoRotate?: boolean;
|
|
36
|
+
/** A number in milliseconds to specify the delay before auto rotation begins. Refer to [auto-rotate-delay in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-autoRotateDelay). */
|
|
37
|
+
autoRotateDelay?: number;
|
|
38
|
+
/** The speed of auto rotation. Refer to [rotation-per-second in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-rotationPerSecond). */
|
|
39
|
+
rotationPerSecond?: string;
|
|
40
|
+
/** A string of either `allow-when-focused` or `always-allow` to indicate whether the viewer requires focus before interacting with it. Refer to [interaction-policy in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-interactionPolicy). */
|
|
41
|
+
interactionPolicy?: 'allow-when-focused' | 'always-allow';
|
|
42
|
+
/** A string of either 'auto', 'when-focused', or 'none' indicating the conditions under which the visual and audible interaction prompt will display. Refer to [interaction-prompts in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-interactionPrompt). */
|
|
43
|
+
interactionPrompt?: 'auto' | 'when-focused' | 'none';
|
|
44
|
+
/** A string of either `wiggle` or `basic` indicating the presentation style of the interaction-prompt when it is raised. Refer to [interaction-prompt-style in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-interactionPromptStyle). */
|
|
45
|
+
interactionPromptStyle?: 'wiggle' | 'basic';
|
|
46
|
+
/** A number to indicate how long the model viewer should wait before prompting the user visually for interaction. Refer to [interaction-prompt-threshold in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-interactionPromptThreshold). */
|
|
47
|
+
interactionPromptThreshold?: number;
|
|
48
|
+
/** A string of the starting orbital position of the camera. Refer to [camera-orbit in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-cameraOrbit). */
|
|
49
|
+
cameraOrbit?: string;
|
|
50
|
+
/** A string of the point the camera orbits around. Refer to [camera-target in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-cameraTarget). */
|
|
51
|
+
cameraTarget?: string;
|
|
52
|
+
/** A string of the vertical field of view of the camera. Refer to [field-of-view in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-fieldOfView). */
|
|
53
|
+
fieldOfView?: string;
|
|
54
|
+
/** A string of the maxiumum orbital values of the camera. Refer to [max-camera-orbit in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-maxCameraOrbit). */
|
|
55
|
+
maxCameraOrbit?: string;
|
|
56
|
+
/** A string of the minimum orbital values of the camera. Refer to [min-camera-orbit in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-minCameraOrbit). */
|
|
57
|
+
minCameraOrbit?: string;
|
|
58
|
+
/** A number indicating the max field of view of the camera. Refer to [max-field-of-view in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-maxFieldOfView). */
|
|
59
|
+
maxFieldOfView?: number;
|
|
60
|
+
/** A number indicating the min field of view of the camera. Refer to [min-field-of-view in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-minFieldOfView). */
|
|
61
|
+
minFieldOfView?: number;
|
|
62
|
+
/** A string of `tight` or `legacy` for calculating the model's bounding box. Refer to [bounds in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-bounds). */
|
|
63
|
+
bounds?: 'tight' | 'legacy';
|
|
64
|
+
/** A number indicating the rate of interpolation when the camera or model moves. Refer to [interpolation-decay in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-interpolationDecay). */
|
|
65
|
+
interpolationDecay?: number;
|
|
66
|
+
/** A string for the background image of the scene. Refer to [skybox-image in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-lightingandenv-attributes-skyboxImage). */
|
|
67
|
+
skyboxImage?: string;
|
|
68
|
+
/** A string to control the environmental reflection of the model. Refer to [environment-image in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-lightingandenv-attributes-environmentImage). */
|
|
69
|
+
environmentImage?: string;
|
|
70
|
+
/** A number indicating the exposure of the model and the skybox. Refer to [exposure in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-lightingandenv-attributes-exposure). */
|
|
71
|
+
exposure?: number;
|
|
72
|
+
/** A number for the opacity of the shadow. Refer to [shadow-intensity in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-lightingandenv-attributes-shadowIntensity). */
|
|
73
|
+
shadowIntensity?: number;
|
|
74
|
+
/** A number for the bluriness of the shadow. Refer to [shadow-softness in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-lightingandenv-attributes-shadowSoftness). */
|
|
75
|
+
shadowSoftness?: number;
|
|
76
|
+
/** A string of the animation to play by name. Refer to [animation-name in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-animation-attributes-animationName). */
|
|
77
|
+
animationName?: string;
|
|
78
|
+
/** A string of the animation crossfade duration between the previous and next animations. Refer to [animation-cross-fade-duration in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-animation-attributes-animationCrossfadeDuration). */
|
|
79
|
+
animationCrossfadeDuration?: string;
|
|
80
|
+
/** A boolean to enable the model animations. Refer to [autoplay in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-animation-attributes-autoplay). */
|
|
81
|
+
autoplay?: boolean;
|
|
82
|
+
/** A string to select a model variant by name. Refer to [variant-name in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-scenegraph-attributes-variantName). */
|
|
83
|
+
variantName?: string;
|
|
84
|
+
/** A string to rotate the model. Refer to [orientation in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-scenegraph-attributes-orientation). */
|
|
85
|
+
orientation?: string;
|
|
86
|
+
/** A string to scale the model. Refer to [scale in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-scenegraph-attributes-scale). */
|
|
87
|
+
scale?: string;
|
|
88
|
+
/** 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). */
|
|
89
|
+
onError?: (event: Event) => void;
|
|
90
|
+
/** 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). */
|
|
91
|
+
onLoad?: (event: Event) => void;
|
|
92
|
+
/** 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). */
|
|
93
|
+
onPreload?: (event: Event) => void;
|
|
94
|
+
/** 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). */
|
|
95
|
+
onModelVisibility?: (event: Event) => void;
|
|
96
|
+
/** 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). */
|
|
97
|
+
onProgress?: (event: Event) => void;
|
|
98
|
+
/** 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). */
|
|
99
|
+
onArStatus?: (event: Event) => void;
|
|
100
|
+
/** 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). */
|
|
101
|
+
onArTracking?: (event: Event) => void;
|
|
102
|
+
/** 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). */
|
|
103
|
+
onQuickLookButtonTapped?: (event: Event) => void;
|
|
104
|
+
/** 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). */
|
|
105
|
+
onCameraChange?: (event: Event) => void;
|
|
106
|
+
/** 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). */
|
|
107
|
+
onEnvironmentChange?: (event: Event) => void;
|
|
108
|
+
/** 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). */
|
|
109
|
+
onPlay?: (event: Event) => void;
|
|
110
|
+
/** 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). */
|
|
111
|
+
onPause?: (event: Event) => void;
|
|
112
|
+
/** 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). */
|
|
113
|
+
onSceneGraphReady?: (event: Event) => void;
|
|
114
|
+
}
|
|
115
|
+
declare type PropsWeControl = 'src' | 'poster';
|
|
116
|
+
declare global {
|
|
117
|
+
namespace JSX {
|
|
118
|
+
interface IntrinsicElements {
|
|
119
|
+
'model-viewer': any;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* The `ModelViewer` component renders a 3D model (with the `model-viewer` tag) for
|
|
125
|
+
* the Storefront API's [Model3d object](https://shopify.dev/api/storefront/reference/products/model3d).
|
|
126
|
+
*/
|
|
127
|
+
export declare function ModelViewer<TTag extends ElementType>(props: Props<TTag, PropsWeControl> & ModelViewerProps): JSX.Element | null;
|
|
128
|
+
export {};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import React, { useState, useEffect, useCallback, } from 'react';
|
|
2
|
+
import { useLoadScript } from '../../hooks/useLoadScript/useLoadScript.client';
|
|
3
|
+
/**
|
|
4
|
+
* The `ModelViewer` component renders a 3D model (with the `model-viewer` tag) for
|
|
5
|
+
* the Storefront API's [Model3d object](https://shopify.dev/api/storefront/reference/products/model3d).
|
|
6
|
+
*/
|
|
7
|
+
export function ModelViewer(props) {
|
|
8
|
+
const [modelViewer, setModelViewer] = useState(undefined);
|
|
9
|
+
const callbackRef = useCallback((node) => {
|
|
10
|
+
setModelViewer(node);
|
|
11
|
+
}, []);
|
|
12
|
+
const { data, id = data.id, children, className, ...passthroughProps } = props;
|
|
13
|
+
const modelViewerLoadedStatus = useLoadScript('https://unpkg.com/@google/model-viewer@v1.8.0/dist/model-viewer.min.js', {
|
|
14
|
+
module: true,
|
|
15
|
+
});
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (modelViewer == null) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (passthroughProps.onError)
|
|
21
|
+
modelViewer.addEventListener('error', passthroughProps.onError);
|
|
22
|
+
if (passthroughProps.onLoad)
|
|
23
|
+
modelViewer.addEventListener('load', passthroughProps.onLoad);
|
|
24
|
+
if (passthroughProps.onPreload)
|
|
25
|
+
modelViewer.addEventListener('preload', passthroughProps.onPreload);
|
|
26
|
+
if (passthroughProps.onModelVisibility)
|
|
27
|
+
modelViewer.addEventListener('model-visibility', passthroughProps.onModelVisibility);
|
|
28
|
+
if (passthroughProps.onProgress)
|
|
29
|
+
modelViewer.addEventListener('progress', passthroughProps.onProgress);
|
|
30
|
+
if (passthroughProps.onArStatus)
|
|
31
|
+
modelViewer.addEventListener('ar-status', passthroughProps.onArStatus);
|
|
32
|
+
if (passthroughProps.onArTracking)
|
|
33
|
+
modelViewer.addEventListener('ar-tracking', passthroughProps.onArTracking);
|
|
34
|
+
if (passthroughProps.onQuickLookButtonTapped)
|
|
35
|
+
modelViewer.addEventListener('quick-look-button-tapped', passthroughProps.onQuickLookButtonTapped);
|
|
36
|
+
if (passthroughProps.onCameraChange)
|
|
37
|
+
modelViewer.addEventListener('camera-change', passthroughProps.onCameraChange);
|
|
38
|
+
if (passthroughProps.onEnvironmentChange)
|
|
39
|
+
modelViewer.addEventListener('environment-change', passthroughProps.onEnvironmentChange);
|
|
40
|
+
if (passthroughProps.onPlay)
|
|
41
|
+
modelViewer.addEventListener('play', passthroughProps.onPlay);
|
|
42
|
+
if (passthroughProps.onPause)
|
|
43
|
+
modelViewer.addEventListener('ar-status', passthroughProps.onPause);
|
|
44
|
+
if (passthroughProps.onSceneGraphReady)
|
|
45
|
+
modelViewer.addEventListener('scene-graph-ready', passthroughProps.onSceneGraphReady);
|
|
46
|
+
return () => {
|
|
47
|
+
if (modelViewer == null) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (passthroughProps.onError)
|
|
51
|
+
modelViewer.removeEventListener('error', passthroughProps.onError);
|
|
52
|
+
if (passthroughProps.onLoad)
|
|
53
|
+
modelViewer.removeEventListener('load', passthroughProps.onLoad);
|
|
54
|
+
if (passthroughProps.onPreload)
|
|
55
|
+
modelViewer.removeEventListener('preload', passthroughProps.onPreload);
|
|
56
|
+
if (passthroughProps.onModelVisibility)
|
|
57
|
+
modelViewer.removeEventListener('model-visibility', passthroughProps.onModelVisibility);
|
|
58
|
+
if (passthroughProps.onProgress)
|
|
59
|
+
modelViewer.removeEventListener('progress', passthroughProps.onProgress);
|
|
60
|
+
if (passthroughProps.onArStatus)
|
|
61
|
+
modelViewer.removeEventListener('ar-status', passthroughProps.onArStatus);
|
|
62
|
+
if (passthroughProps.onArTracking)
|
|
63
|
+
modelViewer.removeEventListener('ar-tracking', passthroughProps.onArTracking);
|
|
64
|
+
if (passthroughProps.onQuickLookButtonTapped)
|
|
65
|
+
modelViewer.removeEventListener('quick-look-button-tapped', passthroughProps.onQuickLookButtonTapped);
|
|
66
|
+
if (passthroughProps.onCameraChange)
|
|
67
|
+
modelViewer.removeEventListener('camera-change', passthroughProps.onCameraChange);
|
|
68
|
+
if (passthroughProps.onEnvironmentChange)
|
|
69
|
+
modelViewer.removeEventListener('environment-change', passthroughProps.onEnvironmentChange);
|
|
70
|
+
if (passthroughProps.onPlay)
|
|
71
|
+
modelViewer.removeEventListener('play', passthroughProps.onPlay);
|
|
72
|
+
if (passthroughProps.onPause)
|
|
73
|
+
modelViewer.removeEventListener('ar-status', passthroughProps.onPause);
|
|
74
|
+
if (passthroughProps.onSceneGraphReady)
|
|
75
|
+
modelViewer.removeEventListener('scene-graph-ready', passthroughProps.onSceneGraphReady);
|
|
76
|
+
};
|
|
77
|
+
}, [
|
|
78
|
+
modelViewer,
|
|
79
|
+
passthroughProps.onArStatus,
|
|
80
|
+
passthroughProps.onArTracking,
|
|
81
|
+
passthroughProps.onCameraChange,
|
|
82
|
+
passthroughProps.onEnvironmentChange,
|
|
83
|
+
passthroughProps.onError,
|
|
84
|
+
passthroughProps.onLoad,
|
|
85
|
+
passthroughProps.onModelVisibility,
|
|
86
|
+
passthroughProps.onPause,
|
|
87
|
+
passthroughProps.onPlay,
|
|
88
|
+
passthroughProps.onPreload,
|
|
89
|
+
passthroughProps.onProgress,
|
|
90
|
+
passthroughProps.onQuickLookButtonTapped,
|
|
91
|
+
passthroughProps.onSceneGraphReady,
|
|
92
|
+
]);
|
|
93
|
+
if (modelViewerLoadedStatus !== 'done') {
|
|
94
|
+
// TODO: What do we want to display while the model-viewer library loads?
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
if (!data.sources?.[0]?.url) {
|
|
98
|
+
throw new Error(`<ModelViewer/> requires 'data.sources' prop to be an array, with an object that has a property 'url' on it`);
|
|
99
|
+
}
|
|
100
|
+
if (!data.alt) {
|
|
101
|
+
console.warn(`<ModelViewer/> requires the 'data.alt' prop for accessibility`);
|
|
102
|
+
}
|
|
103
|
+
return (React.createElement("model-viewer", { ref: callbackRef, ...passthroughProps, class: className, id: id, src: data.sources[0].url, alt: data.alt, "camera-controls": passthroughProps.cameraControls ?? true, poster: passthroughProps.poster || data.previewImage?.url, autoplay: passthroughProps.autoplay ?? true, loading: passthroughProps.loading, reveal: passthroughProps.reveal, ar: passthroughProps.ar, "ar-modes": passthroughProps.arModes, "ar-scale": passthroughProps.arScale, "ar-placement": passthroughProps.arPlacement, "ios-src": passthroughProps.iosSrc, "touch-action": passthroughProps.touchAction, "disable-zoom": passthroughProps.disableZoom, "orbit-sensitivity": passthroughProps.orbitSensitivity, "auto-rotate": passthroughProps.autoRotate, "auto-rotate-delay": passthroughProps.autoRotateDelay, "rotation-per-second": passthroughProps.rotationPerSecond, "interaction-policy": passthroughProps.interactionPolicy, "interaction-prompt": passthroughProps.interactionPrompt, "interaction-prompt-style": passthroughProps.interactionPromptStyle, "interaction-prompt-threshold": passthroughProps.interactionPromptThreshold, "camera-orbit": passthroughProps.cameraOrbit, "camera-target": passthroughProps.cameraTarget, "field-of-view": passthroughProps.fieldOfView, "max-camera-orbit": passthroughProps.maxCameraOrbit, "min-camera-orbit": passthroughProps.minCameraOrbit, "max-field-of-view": passthroughProps.maxFieldOfView, "min-field-of-view": passthroughProps.minFieldOfView, bounds: passthroughProps.bounds, "interpolation-decay": passthroughProps.interpolationDecay ?? 100, "skybox-image": passthroughProps.skyboxImage, "environment-image": passthroughProps.environmentImage, exposure: passthroughProps.exposure, "shadow-intensity": passthroughProps.shadowIntensity ?? 0, "shadow-softness": passthroughProps.shadowSoftness ?? 0, "animation-name": passthroughProps.animationName, "animation-crossfade-duration": passthroughProps.animationCrossfadeDuration, "variant-name": passthroughProps.variantName, orientation: passthroughProps.orientation, scale: passthroughProps.scale }, children));
|
|
104
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ModelViewer } from './ModelViewer.client';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ModelViewer } from './ModelViewer.client';
|
|
@@ -1,7 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
import type { MoneyV2, UnitPriceMeasurement } from '../../storefront-api-types';
|
|
3
|
+
import type { PartialDeep } from 'type-fest';
|
|
4
|
+
interface CustomProps<ComponentGeneric extends React.ElementType> {
|
|
5
|
+
/** An HTML tag or React Component to be rendered as the base element wrapper. The default is `div`. */
|
|
6
|
+
as?: ComponentGeneric;
|
|
7
|
+
/** An object with fields that correspond to the Storefront API's [MoneyV2 object](https://shopify.dev/api/storefront/reference/common-objects/moneyv2). */
|
|
8
|
+
data: PartialDeep<MoneyV2>;
|
|
9
|
+
/** Whether to remove the currency symbol from the output. */
|
|
10
|
+
withoutCurrency?: boolean;
|
|
11
|
+
/** Whether to remove trailing zeros (fractional money) from the output. */
|
|
12
|
+
withoutTrailingZeros?: boolean;
|
|
13
|
+
/** A [UnitPriceMeasurement object](https://shopify.dev/api/storefront/latest/objects/unitpricemeasurement). */
|
|
14
|
+
measurement?: PartialDeep<UnitPriceMeasurement>;
|
|
15
|
+
/** Customizes the separator between the money output and the measurement output. Used with the `measurement` prop. Defaults to `'/'`. */
|
|
16
|
+
measurementSeparator?: ReactNode;
|
|
6
17
|
}
|
|
7
|
-
|
|
18
|
+
declare type MoneyProps<ComponentGeneric extends React.ElementType> = CustomProps<ComponentGeneric> & Omit<React.ComponentPropsWithoutRef<ComponentGeneric>, keyof CustomProps<ComponentGeneric>>;
|
|
19
|
+
/**
|
|
20
|
+
* The `Money` component renders a string of the Storefront API's
|
|
21
|
+
* [MoneyV2 object](https://shopify.dev/api/storefront/reference/common-objects/moneyv2) according to the
|
|
22
|
+
* `locale` in [the `LocalizationProvider` component](https://shopify.dev/api/hydrogen/components/localization/localizationprovider).
|
|
23
|
+
*/
|
|
24
|
+
export declare function Money<TTag extends React.ElementType>({ data, as, withoutCurrency, withoutTrailingZeros, measurement, measurementSeparator, ...passthroughProps }: MoneyProps<TTag>): JSX.Element;
|
|
25
|
+
export {};
|
|
@@ -1,10 +1,39 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { useMoney } from '../../hooks';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
/**
|
|
4
|
+
* The `Money` component renders a string of the Storefront API's
|
|
5
|
+
* [MoneyV2 object](https://shopify.dev/api/storefront/reference/common-objects/moneyv2) according to the
|
|
6
|
+
* `locale` in [the `LocalizationProvider` component](https://shopify.dev/api/hydrogen/components/localization/localizationprovider).
|
|
7
|
+
*/
|
|
8
|
+
export function Money({ data, as, withoutCurrency, withoutTrailingZeros, measurement, measurementSeparator = '/', ...passthroughProps }) {
|
|
9
|
+
if (!isMoney(data)) {
|
|
10
|
+
throw new Error(`<Money/> needs a valid 'data' prop that has 'amount' and 'currencyCode'`);
|
|
11
|
+
}
|
|
12
|
+
const moneyObject = useMoney(data);
|
|
13
|
+
const Wrapper = as ?? 'div';
|
|
14
|
+
let output = moneyObject.localizedString;
|
|
15
|
+
if (withoutCurrency || withoutTrailingZeros) {
|
|
16
|
+
if (withoutCurrency && !withoutTrailingZeros) {
|
|
17
|
+
output = moneyObject.amount;
|
|
18
|
+
}
|
|
19
|
+
else if (!withoutCurrency && withoutTrailingZeros) {
|
|
20
|
+
output = moneyObject.withoutTrailingZeros;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// both
|
|
24
|
+
output = moneyObject.withoutTrailingZerosAndCurrency;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return (React.createElement(Wrapper, { ...passthroughProps },
|
|
28
|
+
output,
|
|
29
|
+
measurement && measurement.referenceUnit && (React.createElement(React.Fragment, null,
|
|
30
|
+
measurementSeparator,
|
|
31
|
+
measurement.referenceUnit))));
|
|
32
|
+
}
|
|
33
|
+
// required in order to narrow the money object down and make TS happy
|
|
34
|
+
function isMoney(maybeMoney) {
|
|
35
|
+
return (typeof maybeMoney.amount === 'string' &&
|
|
36
|
+
!!maybeMoney.amount &&
|
|
37
|
+
typeof maybeMoney.currencyCode === 'string' &&
|
|
38
|
+
!!maybeMoney.currencyCode);
|
|
10
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { Money
|
|
1
|
+
export { Money } from './Money.client';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Product, ProductVariant as ProductVariantType } from '../../storefront-api-types';
|
|
3
|
+
import type { PartialDeep } from 'type-fest';
|
|
4
|
+
declare type InitialVariantId = ProductVariantType['id'] | null;
|
|
5
|
+
interface ProductOptionsProviderProps {
|
|
6
|
+
/** A [Product object](https://shopify.dev/api/storefront/reference/products/product). */
|
|
7
|
+
data: PartialDeep<Product>;
|
|
8
|
+
/** A `ReactNode` element. */
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* The initially selected variant.
|
|
12
|
+
* The following logic applies to `initialVariantId`:
|
|
13
|
+
* 1. If `initialVariantId` is provided, then it's used even if it's out of stock.
|
|
14
|
+
* 2. If `initialVariantId` is provided but is `null`, then no variant is used.
|
|
15
|
+
* 3. If nothing is passed to `initialVariantId` then the first available / in-stock variant is used.
|
|
16
|
+
* 4. If nothing is passed to `initialVariantId` and no variants are in stock, then the first variant is used.
|
|
17
|
+
*/
|
|
18
|
+
initialVariantId?: InitialVariantId;
|
|
19
|
+
}
|
|
20
|
+
export declare function ProductOptionsProvider({ children, data: product, initialVariantId: explicitVariantId, }: ProductOptionsProviderProps): JSX.Element;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import React, { useMemo, useState, useEffect, useCallback } from 'react';
|
|
2
|
+
import { ProductOptionsContext } from './context';
|
|
3
|
+
import { getSelectedVariant, getOptions, } from '../../hooks/useProductOptions/helpers';
|
|
4
|
+
import { flattenConnection } from '../../utilities/flattenConnection';
|
|
5
|
+
export function ProductOptionsProvider({ children, data: product, initialVariantId: explicitVariantId, }) {
|
|
6
|
+
// The flattened variants
|
|
7
|
+
const variants = useMemo(() => flattenConnection(product.variants ?? {}), [product.variants]);
|
|
8
|
+
if (!isProductVariantArray(variants)) {
|
|
9
|
+
throw new Error(`<ProductOptionsProvider/> requires 'product.variants.nodes' or 'product.variants.edges'`);
|
|
10
|
+
}
|
|
11
|
+
// All the options available for a product, based on all the variants
|
|
12
|
+
const options = useMemo(() => getOptions(variants), [variants]);
|
|
13
|
+
/**
|
|
14
|
+
* Track the selectedVariant within the provider.
|
|
15
|
+
*/
|
|
16
|
+
const [selectedVariant, setSelectedVariant] = useState(() => getVariantBasedOnIdProp(explicitVariantId, variants));
|
|
17
|
+
/**
|
|
18
|
+
* Track the selectedOptions within the provider. If a `initialVariantId`
|
|
19
|
+
* is passed, use that to select initial options.
|
|
20
|
+
*/
|
|
21
|
+
const [selectedOptions, setSelectedOptions] = useState(() => getSelectedOptions(selectedVariant));
|
|
22
|
+
/**
|
|
23
|
+
* When the initialVariantId changes, we need to make sure we
|
|
24
|
+
* update the selected variant and selected options. If not,
|
|
25
|
+
* then the selected variant and options will reference incorrect
|
|
26
|
+
* values.
|
|
27
|
+
*/
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
const newSelectedVariant = getVariantBasedOnIdProp(explicitVariantId, variants);
|
|
30
|
+
setSelectedVariant(newSelectedVariant);
|
|
31
|
+
setSelectedOptions(getSelectedOptions(newSelectedVariant));
|
|
32
|
+
}, [explicitVariantId, variants]);
|
|
33
|
+
/**
|
|
34
|
+
* Allow the developer to select an option.
|
|
35
|
+
*/
|
|
36
|
+
const setSelectedOption = useCallback((name, value) => {
|
|
37
|
+
setSelectedOptions((selectedOptions) => {
|
|
38
|
+
const opts = { ...selectedOptions, [name]: value };
|
|
39
|
+
setSelectedVariant(getSelectedVariant(variants, opts));
|
|
40
|
+
return opts;
|
|
41
|
+
});
|
|
42
|
+
}, [setSelectedOptions, variants]);
|
|
43
|
+
const isOptionInStock = useCallback((option, value) => {
|
|
44
|
+
const proposedVariant = getSelectedVariant(variants, {
|
|
45
|
+
...selectedOptions,
|
|
46
|
+
...{ [option]: value },
|
|
47
|
+
});
|
|
48
|
+
return proposedVariant?.availableForSale ?? true;
|
|
49
|
+
}, [selectedOptions, variants]);
|
|
50
|
+
const sellingPlanGroups = useMemo(() => flattenConnection(product.sellingPlanGroups ?? {}).map((sellingPlanGroup) => ({
|
|
51
|
+
...sellingPlanGroup,
|
|
52
|
+
sellingPlans: flattenConnection(sellingPlanGroup?.sellingPlans ?? {}),
|
|
53
|
+
})), [product.sellingPlanGroups]);
|
|
54
|
+
/**
|
|
55
|
+
* Track the selectedSellingPlan within the hook. If `initialSellingPlanId`
|
|
56
|
+
* is passed, use that as an initial value. Look it up from the `selectedVariant`, since
|
|
57
|
+
* that is also a requirement.
|
|
58
|
+
*/
|
|
59
|
+
const [selectedSellingPlan, setSelectedSellingPlan] = useState(undefined);
|
|
60
|
+
const selectedSellingPlanAllocation = useMemo(() => {
|
|
61
|
+
if (!selectedVariant || !selectedSellingPlan) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (!selectedVariant.sellingPlanAllocations?.nodes &&
|
|
65
|
+
!selectedVariant.sellingPlanAllocations?.edges) {
|
|
66
|
+
throw new Error(`<ProductOptionsProvider/>: You must include 'sellingPlanAllocations.nodes' or 'sellingPlanAllocations.edges' in your variants in order to calculate selectedSellingPlanAllocation`);
|
|
67
|
+
}
|
|
68
|
+
return flattenConnection(selectedVariant.sellingPlanAllocations).find((allocation) => allocation?.sellingPlan?.id === selectedSellingPlan.id);
|
|
69
|
+
}, [selectedVariant, selectedSellingPlan]);
|
|
70
|
+
const value = useMemo(() => ({
|
|
71
|
+
variants,
|
|
72
|
+
variantsConnection: product.variants,
|
|
73
|
+
options,
|
|
74
|
+
selectedVariant,
|
|
75
|
+
setSelectedVariant,
|
|
76
|
+
selectedOptions,
|
|
77
|
+
setSelectedOption,
|
|
78
|
+
setSelectedOptions,
|
|
79
|
+
isOptionInStock,
|
|
80
|
+
selectedSellingPlan,
|
|
81
|
+
setSelectedSellingPlan,
|
|
82
|
+
selectedSellingPlanAllocation,
|
|
83
|
+
sellingPlanGroups,
|
|
84
|
+
sellingPlanGroupsConnection: product.sellingPlanGroups,
|
|
85
|
+
}), [
|
|
86
|
+
isOptionInStock,
|
|
87
|
+
options,
|
|
88
|
+
product.sellingPlanGroups,
|
|
89
|
+
product.variants,
|
|
90
|
+
selectedOptions,
|
|
91
|
+
selectedSellingPlan,
|
|
92
|
+
selectedSellingPlanAllocation,
|
|
93
|
+
selectedVariant,
|
|
94
|
+
sellingPlanGroups,
|
|
95
|
+
setSelectedOption,
|
|
96
|
+
variants,
|
|
97
|
+
]);
|
|
98
|
+
return (React.createElement(ProductOptionsContext.Provider, { value: value }, children));
|
|
99
|
+
}
|
|
100
|
+
function getVariantBasedOnIdProp(explicitVariantId, variants) {
|
|
101
|
+
// get the initial variant based on the logic outlined in the comments for 'initialVariantId' above
|
|
102
|
+
// * 1. If `initialVariantId` is provided, then it's used even if it's out of stock.
|
|
103
|
+
if (explicitVariantId) {
|
|
104
|
+
const foundVariant = variants.find((variant) => variant?.id === explicitVariantId);
|
|
105
|
+
if (!foundVariant) {
|
|
106
|
+
console.warn(`<ProductOptionsProvider/> received a 'initialVariantId' prop, but could not actually find a variant with that ID`);
|
|
107
|
+
}
|
|
108
|
+
return foundVariant;
|
|
109
|
+
}
|
|
110
|
+
// * 2. If `initialVariantId` is provided but is `null`, then no variant is used.
|
|
111
|
+
if (explicitVariantId === null) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
// * 3. If nothing is passed to `initialVariantId` then the first available / in-stock variant is used.
|
|
115
|
+
// * 4. If nothing is passed to `initialVariantId` and no variants are in stock, then the first variant is used.
|
|
116
|
+
if (explicitVariantId === undefined) {
|
|
117
|
+
return variants.find((variant) => variant?.availableForSale) || variants[0];
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function getSelectedOptions(selectedVariant) {
|
|
121
|
+
return selectedVariant?.selectedOptions
|
|
122
|
+
? selectedVariant.selectedOptions.reduce((memo, optionSet) => {
|
|
123
|
+
memo[optionSet?.name ?? ''] = optionSet?.value ?? '';
|
|
124
|
+
return memo;
|
|
125
|
+
}, {})
|
|
126
|
+
: {};
|
|
127
|
+
}
|
|
128
|
+
function isProductVariantArray(maybeVariantArray) {
|
|
129
|
+
if (!maybeVariantArray || !Array.isArray(maybeVariantArray)) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
@@ -1,7 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Product } from '../../storefront-api-types';
|
|
3
|
+
import { Money } from '../Money';
|
|
4
|
+
import type { PartialDeep } from 'type-fest';
|
|
3
5
|
export interface ProductPriceProps {
|
|
6
|
+
data: PartialDeep<Product>;
|
|
7
|
+
/** The type of price. Valid values: `regular` (default) or `compareAt`. */
|
|
4
8
|
priceType?: 'regular' | 'compareAt';
|
|
5
|
-
|
|
9
|
+
/** The type of value. Valid values: `min` (default), `max` or `unit`. */
|
|
10
|
+
valueType?: 'max' | 'min' | 'unit';
|
|
11
|
+
/** The ID of the variant. */
|
|
12
|
+
variantId?: string;
|
|
6
13
|
}
|
|
7
|
-
|
|
14
|
+
/**
|
|
15
|
+
* The `ProductPrice` component renders a `Money` component with the product
|
|
16
|
+
* [`priceRange`](https://shopify.dev/api/storefront/reference/products/productpricerange)'s `maxVariantPrice` or `minVariantPrice`, for either the regular price or compare at price range.
|
|
17
|
+
*/
|
|
18
|
+
export declare function ProductPrice(props: Omit<React.ComponentProps<typeof Money>, 'data' | 'measurement'> & ProductPriceProps): JSX.Element | null;
|
|
@@ -1,32 +1,54 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Money } from '../Money';
|
|
3
|
-
import {
|
|
3
|
+
import { flattenConnection } from '../../utilities/flattenConnection';
|
|
4
|
+
/**
|
|
5
|
+
* The `ProductPrice` component renders a `Money` component with the product
|
|
6
|
+
* [`priceRange`](https://shopify.dev/api/storefront/reference/products/productpricerange)'s `maxVariantPrice` or `minVariantPrice`, for either the regular price or compare at price range.
|
|
7
|
+
*/
|
|
4
8
|
export function ProductPrice(props) {
|
|
5
|
-
|
|
6
|
-
const product = useProduct();
|
|
7
|
-
const { priceType = 'regular', valueType = 'min', ...passthroughProps } = props;
|
|
9
|
+
const { priceType = 'regular', variantId, valueType = 'min', data: product, ...passthroughProps } = props;
|
|
8
10
|
if (product == null) {
|
|
9
|
-
throw new Error(
|
|
11
|
+
throw new Error(`<ProductPrice/> requires a product as the 'data' prop`);
|
|
10
12
|
}
|
|
11
13
|
let price;
|
|
14
|
+
let measurement;
|
|
15
|
+
const variant = variantId
|
|
16
|
+
? flattenConnection(product?.variants ?? {}).find((variant) => variant?.id === variantId) ?? null
|
|
17
|
+
: null;
|
|
12
18
|
if (priceType === 'compareAt') {
|
|
13
|
-
if (
|
|
14
|
-
|
|
19
|
+
if (variantId && variant) {
|
|
20
|
+
if (variant.compareAtPriceV2?.amount === variant.priceV2?.amount) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
price = variant.compareAtPriceV2;
|
|
24
|
+
}
|
|
25
|
+
else if (valueType === 'max') {
|
|
26
|
+
price = product?.compareAtPriceRange?.maxVariantPrice;
|
|
15
27
|
}
|
|
16
28
|
else {
|
|
17
|
-
price =
|
|
29
|
+
price = product?.compareAtPriceRange?.minVariantPrice;
|
|
18
30
|
}
|
|
19
31
|
}
|
|
20
32
|
else {
|
|
21
|
-
if (
|
|
22
|
-
price =
|
|
33
|
+
if (variantId && variant) {
|
|
34
|
+
price = variant.priceV2;
|
|
35
|
+
if (valueType === 'unit') {
|
|
36
|
+
price = variant.unitPrice;
|
|
37
|
+
measurement = variant.unitPriceMeasurement;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else if (valueType === 'max') {
|
|
41
|
+
price = product.priceRange?.maxVariantPrice;
|
|
23
42
|
}
|
|
24
43
|
else {
|
|
25
|
-
price =
|
|
44
|
+
price = product.priceRange?.minVariantPrice;
|
|
26
45
|
}
|
|
27
46
|
}
|
|
28
|
-
if (price
|
|
47
|
+
if (!price) {
|
|
29
48
|
return null;
|
|
30
49
|
}
|
|
31
|
-
|
|
50
|
+
if (measurement) {
|
|
51
|
+
return (React.createElement(Money, { ...passthroughProps, data: price, measurement: measurement }));
|
|
52
|
+
}
|
|
53
|
+
return React.createElement(Money, { ...passthroughProps, data: price });
|
|
32
54
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TitleSeo } from './TitleSeo.client';
|
|
3
|
+
import { DescriptionSeo } from './DescriptionSeo.client';
|
|
4
|
+
import { TwitterSeo } from './TwitterSeo.client';
|
|
5
|
+
import { ImageSeo } from './ImageSeo.client';
|
|
6
|
+
export function CollectionSeo({ title, description, seo, image, }) {
|
|
7
|
+
const seoTitle = seo?.title ?? title;
|
|
8
|
+
const seoDescription = seo?.description ?? description;
|
|
9
|
+
return (React.createElement(React.Fragment, null,
|
|
10
|
+
React.createElement(TitleSeo, { title: seoTitle }),
|
|
11
|
+
React.createElement(DescriptionSeo, { description: seoDescription }),
|
|
12
|
+
React.createElement(TwitterSeo, { title: seoTitle, description: seoDescription }),
|
|
13
|
+
image && React.createElement(ImageSeo, { ...image })));
|
|
14
|
+
}
|