@shopify/hydrogen-react 2023.7.2 → 2023.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/browser-dev/AddToCartButton.mjs +2 -1
  2. package/dist/browser-dev/AddToCartButton.mjs.map +1 -1
  3. package/dist/browser-dev/BaseButton.mjs.map +1 -1
  4. package/dist/browser-dev/BuyNowButton.mjs.map +1 -1
  5. package/dist/browser-dev/CartLineQuantityAdjustButton.mjs +2 -1
  6. package/dist/browser-dev/CartLineQuantityAdjustButton.mjs.map +1 -1
  7. package/dist/browser-dev/Image.mjs +111 -101
  8. package/dist/browser-dev/Image.mjs.map +1 -1
  9. package/dist/browser-dev/Money.mjs.map +1 -1
  10. package/dist/browser-dev/ProductPrice.mjs.map +1 -1
  11. package/dist/browser-prod/AddToCartButton.mjs +2 -1
  12. package/dist/browser-prod/AddToCartButton.mjs.map +1 -1
  13. package/dist/browser-prod/BaseButton.mjs.map +1 -1
  14. package/dist/browser-prod/BuyNowButton.mjs.map +1 -1
  15. package/dist/browser-prod/CartLineQuantityAdjustButton.mjs +2 -1
  16. package/dist/browser-prod/CartLineQuantityAdjustButton.mjs.map +1 -1
  17. package/dist/browser-prod/Image.mjs +111 -101
  18. package/dist/browser-prod/Image.mjs.map +1 -1
  19. package/dist/browser-prod/Money.mjs.map +1 -1
  20. package/dist/browser-prod/ProductPrice.mjs.map +1 -1
  21. package/dist/node-dev/AddToCartButton.js +2 -1
  22. package/dist/node-dev/AddToCartButton.js.map +1 -1
  23. package/dist/node-dev/AddToCartButton.mjs +2 -1
  24. package/dist/node-dev/AddToCartButton.mjs.map +1 -1
  25. package/dist/node-dev/BaseButton.js.map +1 -1
  26. package/dist/node-dev/BaseButton.mjs.map +1 -1
  27. package/dist/node-dev/BuyNowButton.js.map +1 -1
  28. package/dist/node-dev/BuyNowButton.mjs.map +1 -1
  29. package/dist/node-dev/CartLineQuantityAdjustButton.js +2 -1
  30. package/dist/node-dev/CartLineQuantityAdjustButton.js.map +1 -1
  31. package/dist/node-dev/CartLineQuantityAdjustButton.mjs +2 -1
  32. package/dist/node-dev/CartLineQuantityAdjustButton.mjs.map +1 -1
  33. package/dist/node-dev/Image.js +111 -101
  34. package/dist/node-dev/Image.js.map +1 -1
  35. package/dist/node-dev/Image.mjs +111 -101
  36. package/dist/node-dev/Image.mjs.map +1 -1
  37. package/dist/node-dev/Money.js.map +1 -1
  38. package/dist/node-dev/Money.mjs.map +1 -1
  39. package/dist/node-dev/ProductPrice.js.map +1 -1
  40. package/dist/node-dev/ProductPrice.mjs.map +1 -1
  41. package/dist/node-prod/AddToCartButton.js +2 -1
  42. package/dist/node-prod/AddToCartButton.js.map +1 -1
  43. package/dist/node-prod/AddToCartButton.mjs +2 -1
  44. package/dist/node-prod/AddToCartButton.mjs.map +1 -1
  45. package/dist/node-prod/BaseButton.js.map +1 -1
  46. package/dist/node-prod/BaseButton.mjs.map +1 -1
  47. package/dist/node-prod/BuyNowButton.js.map +1 -1
  48. package/dist/node-prod/BuyNowButton.mjs.map +1 -1
  49. package/dist/node-prod/CartLineQuantityAdjustButton.js +2 -1
  50. package/dist/node-prod/CartLineQuantityAdjustButton.js.map +1 -1
  51. package/dist/node-prod/CartLineQuantityAdjustButton.mjs +2 -1
  52. package/dist/node-prod/CartLineQuantityAdjustButton.mjs.map +1 -1
  53. package/dist/node-prod/Image.js +111 -101
  54. package/dist/node-prod/Image.js.map +1 -1
  55. package/dist/node-prod/Image.mjs +111 -101
  56. package/dist/node-prod/Image.mjs.map +1 -1
  57. package/dist/node-prod/Money.js.map +1 -1
  58. package/dist/node-prod/Money.mjs.map +1 -1
  59. package/dist/node-prod/ProductPrice.js.map +1 -1
  60. package/dist/node-prod/ProductPrice.mjs.map +1 -1
  61. package/dist/types/BaseButton.d.ts +1 -1
  62. package/dist/types/Money.d.ts +1 -1
  63. package/dist/types/ProductPrice.d.ts +1 -1
  64. package/dist/types/storefront-api-types.d.ts +18 -17
  65. package/dist/umd/hydrogen-react.dev.js +115 -103
  66. package/dist/umd/hydrogen-react.dev.js.map +1 -1
  67. package/dist/umd/hydrogen-react.prod.js +5 -5
  68. package/dist/umd/hydrogen-react.prod.js.map +1 -1
  69. package/package.json +2 -2
  70. package/storefront.schema.json +1 -1
@@ -534,7 +534,7 @@ export type Cart = HasMetafields &
534
534
  attribute?: Maybe<Attribute>;
535
535
  /** The attributes associated with the cart. Attributes are represented as key-value pairs. */
536
536
  attributes: Array<Attribute>;
537
- /** Information about the buyer that is interacting with the cart. */
537
+ /** Information about the buyer that's interacting with the cart. */
538
538
  buyerIdentity: CartBuyerIdentity;
539
539
  /** The URL of the checkout for the cart. */
540
540
  checkoutUrl: Scalars['URL'];
@@ -579,7 +579,7 @@ export type Cart = HasMetafields &
579
579
  *
580
580
  */
581
581
  metafields: Array<Maybe<Metafield>>;
582
- /** A note that is associated with the cart. For example, the note can be a personalized message to the buyer. */
582
+ /** A note that's associated with the cart. For example, the note can be a personalized message to the buyer. */
583
583
  note?: Maybe<Scalars['String']>;
584
584
  /** The total number of items in the cart. */
585
585
  totalQuantity: Scalars['Int'];
@@ -683,9 +683,9 @@ export type CartBuyerIdentity = {
683
683
  *
684
684
  */
685
685
  deliveryAddressPreferences: Array<DeliveryAddress>;
686
- /** The email address of the buyer that is interacting with the cart. */
686
+ /** The email address of the buyer that's interacting with the cart. */
687
687
  email?: Maybe<Scalars['String']>;
688
- /** The phone number of the buyer that is interacting with the cart. */
688
+ /** The phone number of the buyer that's interacting with the cart. */
689
689
  phone?: Maybe<Scalars['String']>;
690
690
  /**
691
691
  * A set of wallet preferences tied to the buyer that is interacting with the cart.
@@ -1033,7 +1033,7 @@ export type CartInput = {
1033
1033
  lines?: InputMaybe<Array<CartLineInput>>;
1034
1034
  /** The metafields to associate with this cart. */
1035
1035
  metafields?: InputMaybe<Array<CartInputMetafieldInput>>;
1036
- /** A note that is associated with the cart. For example, the note can be a personalized message to the buyer. */
1036
+ /** A note that's associated with the cart. For example, the note can be a personalized message to the buyer. */
1037
1037
  note?: InputMaybe<Scalars['String']>;
1038
1038
  };
1039
1039
 
@@ -1345,7 +1345,7 @@ export type Checkout = Node & {
1345
1345
  createdAt: Scalars['DateTime'];
1346
1346
  /** The currency code for the checkout. */
1347
1347
  currencyCode: CurrencyCode;
1348
- /** A list of extra information that is added to the checkout. */
1348
+ /** A list of extra information that's added to the checkout. */
1349
1349
  customAttributes: Array<Attribute>;
1350
1350
  /** Discounts that have been applied on the checkout. */
1351
1351
  discountApplications: DiscountApplicationConnection;
@@ -1361,7 +1361,7 @@ export type Checkout = Node & {
1361
1361
  note?: Maybe<Scalars['String']>;
1362
1362
  /** The resulting order from a paid checkout. */
1363
1363
  order?: Maybe<Order>;
1364
- /** The Order Status Page for this Checkout, null when checkout is not completed. */
1364
+ /** The Order Status Page for this Checkout, null when checkout isn't completed. */
1365
1365
  orderStatusUrl?: Maybe<Scalars['URL']>;
1366
1366
  /** The amount left to be paid. This is equal to the cost of the line items, taxes, and shipping, minus discounts and gift cards. */
1367
1367
  paymentDue: MoneyV2;
@@ -1387,7 +1387,7 @@ export type Checkout = Node & {
1387
1387
  *
1388
1388
  */
1389
1389
  shippingDiscountAllocations: Array<DiscountAllocation>;
1390
- /** Once a shipping rate is selected by the customer it is transitioned to a `shipping_line` object. */
1390
+ /** Once a shipping rate is selected by the customer it's transitioned to a `shipping_line` object. */
1391
1391
  shippingLine?: Maybe<ShippingRate>;
1392
1392
  /** The price at checkout before shipping and taxes. */
1393
1393
  subtotalPrice: MoneyV2;
@@ -1450,7 +1450,7 @@ export type CheckoutAttributesUpdateV2Input = {
1450
1450
  *
1451
1451
  */
1452
1452
  allowPartialAddresses?: InputMaybe<Scalars['Boolean']>;
1453
- /** A list of extra information that is added to the checkout. */
1453
+ /** A list of extra information that's added to the checkout. */
1454
1454
  customAttributes?: InputMaybe<Array<AttributeInput>>;
1455
1455
  /** The text of an optional note that a shop owner can attach to the checkout. */
1456
1456
  note?: InputMaybe<Scalars['String']>;
@@ -1545,7 +1545,7 @@ export type CheckoutCreateInput = {
1545
1545
  allowPartialAddresses?: InputMaybe<Scalars['Boolean']>;
1546
1546
  /** The identity of the customer associated with the checkout. */
1547
1547
  buyerIdentity?: InputMaybe<CheckoutBuyerIdentityInput>;
1548
- /** A list of extra information that is added to the checkout. */
1548
+ /** A list of extra information that's added to the checkout. */
1549
1549
  customAttributes?: InputMaybe<Array<AttributeInput>>;
1550
1550
  /** The email with which the customer wants to checkout. */
1551
1551
  email?: InputMaybe<Scalars['String']>;
@@ -3857,7 +3857,7 @@ export type Image = {
3857
3857
  __typename?: 'Image';
3858
3858
  /** A word or phrase to share the nature or contents of an image. */
3859
3859
  altText?: Maybe<Scalars['String']>;
3860
- /** The original height of the image in pixels. Returns `null` if the image is not hosted by Shopify. */
3860
+ /** The original height of the image in pixels. Returns `null` if the image isn't hosted by Shopify. */
3861
3861
  height?: Maybe<Scalars['Int']>;
3862
3862
  /** A unique ID for the image. */
3863
3863
  id?: Maybe<Scalars['ID']>;
@@ -3878,7 +3878,7 @@ export type Image = {
3878
3878
  * The location of the transformed image as a URL.
3879
3879
  *
3880
3880
  * All transformation arguments are considered "best-effort". If they can be applied to an image, they will be.
3881
- * Otherwise any transformations which an image type does not support will be ignored.
3881
+ * Otherwise any transformations which an image type doesn't support will be ignored.
3882
3882
  *
3883
3883
  * @deprecated Use `url(transform:)` instead
3884
3884
  */
@@ -3894,7 +3894,7 @@ export type Image = {
3894
3894
  *
3895
3895
  */
3896
3896
  url: Scalars['URL'];
3897
- /** The original width of the image in pixels. Returns `null` if the image is not hosted by Shopify. */
3897
+ /** The original width of the image in pixels. Returns `null` if the image isn't hosted by Shopify. */
3898
3898
  width?: Maybe<Scalars['Int']>;
3899
3899
  };
3900
3900
 
@@ -5206,8 +5206,9 @@ export type Mutation = {
5206
5206
  * [`customerReset`](https://shopify.dev/api/storefront/latest/mutations/customerReset) mutation to reset the
5207
5207
  * customer password.
5208
5208
  *
5209
- * This mutation is throttled by IP. With authenticated access,
5209
+ * This mutation is throttled by IP. With private access,
5210
5210
  * you can provide a [`Shopify-Storefront-Buyer-IP`](https://shopify.dev/api/usage/authentication#optional-ip-header) instead of the request IP.
5211
+ * The header is case-sensitive and must be sent as `Shopify-Storefront-Buyer-IP`.
5211
5212
  *
5212
5213
  * Make sure that the value provided to `Shopify-Storefront-Buyer-IP` is trusted. Unthrottled access to this
5213
5214
  * mutation presents a security risk.
@@ -5523,7 +5524,7 @@ export type Order = HasMetafields &
5523
5524
  canceledAt?: Maybe<Scalars['DateTime']>;
5524
5525
  /** The code of the currency used for the payment. */
5525
5526
  currencyCode: CurrencyCode;
5526
- /** The subtotal of line items and their discounts, excluding line items that have been removed. Does not contain order-level discounts, duties, shipping costs, or shipping discounts. Taxes are not included unless the order is a taxes-included order. */
5527
+ /** The subtotal of line items and their discounts, excluding line items that have been removed. Does not contain order-level discounts, duties, shipping costs, or shipping discounts. Taxes aren't included unless the order is a taxes-included order. */
5527
5528
  currentSubtotalPrice: MoneyV2;
5528
5529
  /** The total cost of duties for the order, including refunds. */
5529
5530
  currentTotalDuties?: Maybe<MoneyV2>;
@@ -5751,7 +5752,7 @@ export type OrderLineItem = {
5751
5752
  discountAllocations: Array<DiscountAllocation>;
5752
5753
  /** The total price of the line item, including discounts, and displayed in the presentment currency. */
5753
5754
  discountedTotalPrice: MoneyV2;
5754
- /** The total price of the line item, not including any discounts. The total price is calculated using the original unit price multiplied by the quantity, and it is displayed in the presentment currency. */
5755
+ /** The total price of the line item, not including any discounts. The total price is calculated using the original unit price multiplied by the quantity, and it's displayed in the presentment currency. */
5755
5756
  originalTotalPrice: MoneyV2;
5756
5757
  /** The number of products variants associated to the line item. */
5757
5758
  quantity: Scalars['Int'];
@@ -7642,7 +7643,7 @@ export type TokenizedPaymentInputV3 = {
7642
7643
  paymentAmount: MoneyInput;
7643
7644
  /** A simple string or JSON containing the required payment data for the tokenized payment. */
7644
7645
  paymentData: Scalars['String'];
7645
- /** Whether to execute the payment in test mode, if possible. Test mode is not supported in production stores. Defaults to `false`. */
7646
+ /** Whether to execute the payment in test mode, if possible. Test mode isn't supported in production stores. Defaults to `false`. */
7646
7647
  test?: InputMaybe<Scalars['Boolean']>;
7647
7648
  /** The type of payment token. */
7648
7649
  type: PaymentTokenType;
@@ -2179,7 +2179,8 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
2179
2179
  const { status, linesAdd } = useCart();
2180
2180
  const { selectedVariant } = useProduct();
2181
2181
  const variantId = explicitVariantId ?? (selectedVariant == null ? void 0 : selectedVariant.id) ?? "";
2182
- const disabled = explicitVariantId === null || variantId === "" || selectedVariant === null || addingItem || passthroughProps.disabled;
2182
+ const disabled = explicitVariantId === null || variantId === "" || selectedVariant === null || addingItem || // Only certain 'as' types such as 'button' contain `disabled`
2183
+ passthroughProps.disabled;
2183
2184
  React$1.useEffect(() => {
2184
2185
  if (addingItem && status === "idle") {
2185
2186
  setAddingItem(false);
@@ -2902,13 +2903,14 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
2902
2903
  linesRemove,
2903
2904
  linesUpdate
2904
2905
  ]);
2906
+ const disabledAttr = passthroughProps.disabled;
2905
2907
  return /* @__PURE__ */ React.createElement(
2906
2908
  BaseButton,
2907
2909
  {
2908
2910
  ...passthroughProps,
2909
2911
  onClick,
2910
2912
  defaultOnClick: handleAdjust,
2911
- disabled: typeof passthroughProps.disabled !== "undefined" ? passthroughProps.disabled : status !== "idle"
2913
+ disabled: typeof disabledAttr !== "undefined" ? disabledAttr : status !== "idle"
2912
2914
  },
2913
2915
  children
2914
2916
  );
@@ -3111,108 +3113,118 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
3111
3113
  }
3112
3114
  }
3113
3115
  );
3114
- function FixedWidthImage({
3115
- aspectRatio,
3116
- crop,
3117
- decoding,
3118
- height,
3119
- imageWidths,
3120
- loader = shopifyLoader,
3121
- loading,
3122
- normalizedProps,
3123
- passthroughProps,
3124
- ref,
3125
- width
3126
- }) {
3127
- const fixed = React__namespace.useMemo(() => {
3128
- const intWidth = getNormalizedFixedUnit(width);
3129
- const intHeight = getNormalizedFixedUnit(height);
3130
- const fixedAspectRatio = aspectRatio ? aspectRatio : unitsMatch(normalizedProps.width, normalizedProps.height) ? [intWidth, intHeight].join("/") : normalizedProps.aspectRatio ? normalizedProps.aspectRatio : void 0;
3131
- const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, fixedAspectRatio, crop);
3132
- const fixedHeight = intHeight ? intHeight : fixedAspectRatio && intWidth ? intWidth * (parseAspectRatio(fixedAspectRatio) ?? 1) : void 0;
3133
- const srcSet = generateSrcSet(normalizedProps.src, sizesArray, loader);
3134
- const src = loader({
3135
- src: normalizedProps.src,
3136
- width: intWidth,
3137
- height: fixedHeight,
3138
- crop: normalizedProps.height === "auto" ? void 0 : crop
3139
- });
3140
- return {
3141
- width: intWidth,
3142
- aspectRatio: fixedAspectRatio,
3143
- height: fixedHeight,
3144
- srcSet,
3145
- src
3146
- };
3147
- }, [aspectRatio, crop, height, imageWidths, loader, normalizedProps, width]);
3148
- return /* @__PURE__ */ React__namespace.createElement(
3149
- "img",
3150
- {
3151
- ref,
3152
- alt: normalizedProps.alt,
3153
- decoding,
3154
- height: fixed.height,
3155
- loading,
3156
- src: fixed.src,
3157
- srcSet: fixed.srcSet,
3158
- width: fixed.width,
3159
- style: {
3160
- aspectRatio: fixed.aspectRatio,
3161
- ...passthroughProps.style
3162
- },
3163
- ...passthroughProps
3164
- }
3165
- );
3166
- }
3167
- function FluidImage({
3168
- crop,
3169
- decoding,
3170
- imageWidths,
3171
- loader = shopifyLoader,
3172
- loading,
3173
- normalizedProps,
3174
- passthroughProps,
3175
- placeholderWidth,
3176
- ref,
3177
- sizes
3178
- }) {
3179
- const fluid = React__namespace.useMemo(() => {
3180
- const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, normalizedProps.aspectRatio, crop);
3181
- const placeholderHeight = normalizedProps.aspectRatio && placeholderWidth ? placeholderWidth * (parseAspectRatio(normalizedProps.aspectRatio) ?? 1) : void 0;
3182
- const srcSet = generateSrcSet(normalizedProps.src, sizesArray, loader);
3183
- const src = loader({
3184
- src: normalizedProps.src,
3185
- width: placeholderWidth,
3186
- height: placeholderHeight,
3187
- crop
3188
- });
3189
- return {
3190
- placeholderHeight,
3191
- srcSet,
3192
- src
3193
- };
3194
- }, [crop, imageWidths, loader, normalizedProps, placeholderWidth]);
3195
- return /* @__PURE__ */ React__namespace.createElement(
3196
- "img",
3197
- {
3198
- ref,
3199
- alt: normalizedProps.alt,
3200
- decoding,
3201
- height: fluid.placeholderHeight,
3202
- loading,
3203
- sizes,
3204
- src: fluid.src,
3205
- srcSet: fluid.srcSet,
3206
- width: placeholderWidth,
3207
- ...passthroughProps,
3208
- style: {
3209
- width: normalizedProps.width,
3210
- aspectRatio: normalizedProps.aspectRatio,
3211
- ...passthroughProps.style
3116
+ const FixedWidthImage = React__namespace.forwardRef(
3117
+ ({
3118
+ aspectRatio,
3119
+ crop,
3120
+ decoding,
3121
+ height,
3122
+ imageWidths,
3123
+ loader = shopifyLoader,
3124
+ loading,
3125
+ normalizedProps,
3126
+ passthroughProps,
3127
+ width
3128
+ }, ref) => {
3129
+ const fixed = React__namespace.useMemo(() => {
3130
+ const intWidth = getNormalizedFixedUnit(width);
3131
+ const intHeight = getNormalizedFixedUnit(height);
3132
+ const fixedAspectRatio = aspectRatio ? aspectRatio : unitsMatch(normalizedProps.width, normalizedProps.height) ? [intWidth, intHeight].join("/") : normalizedProps.aspectRatio ? normalizedProps.aspectRatio : void 0;
3133
+ const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, fixedAspectRatio, crop);
3134
+ const fixedHeight = intHeight ? intHeight : fixedAspectRatio && intWidth ? intWidth * (parseAspectRatio(fixedAspectRatio) ?? 1) : void 0;
3135
+ const srcSet = generateSrcSet(normalizedProps.src, sizesArray, loader);
3136
+ const src = loader({
3137
+ src: normalizedProps.src,
3138
+ width: intWidth,
3139
+ height: fixedHeight,
3140
+ crop: normalizedProps.height === "auto" ? void 0 : crop
3141
+ });
3142
+ return {
3143
+ width: intWidth,
3144
+ aspectRatio: fixedAspectRatio,
3145
+ height: fixedHeight,
3146
+ srcSet,
3147
+ src
3148
+ };
3149
+ }, [
3150
+ aspectRatio,
3151
+ crop,
3152
+ height,
3153
+ imageWidths,
3154
+ loader,
3155
+ normalizedProps,
3156
+ width
3157
+ ]);
3158
+ return /* @__PURE__ */ React__namespace.createElement(
3159
+ "img",
3160
+ {
3161
+ ref,
3162
+ alt: normalizedProps.alt,
3163
+ decoding,
3164
+ height: fixed.height,
3165
+ loading,
3166
+ src: fixed.src,
3167
+ srcSet: fixed.srcSet,
3168
+ width: fixed.width,
3169
+ style: {
3170
+ aspectRatio: fixed.aspectRatio,
3171
+ ...passthroughProps.style
3172
+ },
3173
+ ...passthroughProps
3212
3174
  }
3213
- }
3214
- );
3215
- }
3175
+ );
3176
+ }
3177
+ );
3178
+ const FluidImage = React__namespace.forwardRef(
3179
+ ({
3180
+ crop,
3181
+ decoding,
3182
+ imageWidths,
3183
+ loader = shopifyLoader,
3184
+ loading,
3185
+ normalizedProps,
3186
+ passthroughProps,
3187
+ placeholderWidth,
3188
+ sizes
3189
+ }, ref) => {
3190
+ const fluid = React__namespace.useMemo(() => {
3191
+ const sizesArray = imageWidths === void 0 ? void 0 : generateSizes(imageWidths, normalizedProps.aspectRatio, crop);
3192
+ const placeholderHeight = normalizedProps.aspectRatio && placeholderWidth ? placeholderWidth * (parseAspectRatio(normalizedProps.aspectRatio) ?? 1) : void 0;
3193
+ const srcSet = generateSrcSet(normalizedProps.src, sizesArray, loader);
3194
+ const src = loader({
3195
+ src: normalizedProps.src,
3196
+ width: placeholderWidth,
3197
+ height: placeholderHeight,
3198
+ crop
3199
+ });
3200
+ return {
3201
+ placeholderHeight,
3202
+ srcSet,
3203
+ src
3204
+ };
3205
+ }, [crop, imageWidths, loader, normalizedProps, placeholderWidth]);
3206
+ return /* @__PURE__ */ React__namespace.createElement(
3207
+ "img",
3208
+ {
3209
+ ref,
3210
+ alt: normalizedProps.alt,
3211
+ decoding,
3212
+ height: fluid.placeholderHeight,
3213
+ loading,
3214
+ sizes,
3215
+ src: fluid.src,
3216
+ srcSet: fluid.srcSet,
3217
+ width: placeholderWidth,
3218
+ ...passthroughProps,
3219
+ style: {
3220
+ width: normalizedProps.width,
3221
+ aspectRatio: normalizedProps.aspectRatio,
3222
+ ...passthroughProps.style
3223
+ }
3224
+ }
3225
+ );
3226
+ }
3227
+ );
3216
3228
  function shopifyLoader({ src, width, height, crop }) {
3217
3229
  if (!src) {
3218
3230
  return "";