@rebuy/rebuy-hydrogen 2.3.1 → 3.0.0-beta.10

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 (118) hide show
  1. package/README.md +0 -2
  2. package/dist/components/AddToCartBtn/AddToCartBtn.d.ts +3 -0
  3. package/dist/components/AddToCartBtn/AddToCartBtn.d.ts.map +1 -0
  4. package/dist/components/AddToCartBtn/HydrogenAddToCartBtn.d.ts +3 -0
  5. package/dist/components/AddToCartBtn/HydrogenAddToCartBtn.d.ts.map +1 -0
  6. package/dist/components/AddToCartBtn/HydrogenReactAddToCartBtn.d.ts +3 -0
  7. package/dist/components/AddToCartBtn/HydrogenReactAddToCartBtn.d.ts.map +1 -0
  8. package/dist/components/AddToCartBtn/index.d.ts +2 -0
  9. package/dist/components/AddToCartBtn/index.d.ts.map +1 -0
  10. package/dist/components/AddToCartBtn/types.d.ts +26 -0
  11. package/dist/components/AddToCartBtn/types.d.ts.map +1 -0
  12. package/dist/components/ProductCard/ProductCard.d.ts +3 -0
  13. package/dist/components/ProductCard/ProductCard.d.ts.map +1 -0
  14. package/dist/components/ProductCard/index.d.ts +2 -0
  15. package/dist/components/ProductCard/index.d.ts.map +1 -0
  16. package/dist/components/ProductCard/types.d.ts +10 -0
  17. package/dist/components/ProductCard/types.d.ts.map +1 -0
  18. package/dist/components/ProductPrice/ProductPrice.d.ts +5 -0
  19. package/dist/components/ProductPrice/ProductPrice.d.ts.map +1 -0
  20. package/dist/components/ProductPrice/index.d.ts +2 -0
  21. package/dist/components/ProductPrice/index.d.ts.map +1 -0
  22. package/dist/components/Title/Title.d.ts +3 -0
  23. package/dist/components/Title/Title.d.ts.map +1 -0
  24. package/dist/components/Title/index.d.ts +2 -0
  25. package/dist/components/Title/index.d.ts.map +1 -0
  26. package/dist/components/Title/types.d.ts +7 -0
  27. package/dist/components/Title/types.d.ts.map +1 -0
  28. package/dist/components/VariantSelect/VariantSelect.d.ts +3 -0
  29. package/dist/components/VariantSelect/VariantSelect.d.ts.map +1 -0
  30. package/dist/components/VariantSelect/index.d.ts +2 -0
  31. package/dist/components/VariantSelect/index.d.ts.map +1 -0
  32. package/dist/components/VariantSelect/types.d.ts +6 -0
  33. package/dist/components/VariantSelect/types.d.ts.map +1 -0
  34. package/dist/context/RebuyContext.d.ts +6 -0
  35. package/dist/context/RebuyContext.d.ts.map +1 -0
  36. package/dist/hooks/titleLevel.d.ts +3 -0
  37. package/dist/hooks/titleLevel.d.ts.map +1 -0
  38. package/dist/index.css +296 -0
  39. package/dist/index.css.map +7 -0
  40. package/dist/index.d.ts +8 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +1967 -0
  43. package/dist/index.js.map +7 -0
  44. package/dist/index.mjs +1935 -0
  45. package/dist/index.mjs.map +7 -0
  46. package/dist/providers/RebuyHydrogenContextProvider.d.ts +3 -0
  47. package/dist/providers/RebuyHydrogenContextProvider.d.ts.map +1 -0
  48. package/dist/providers/RebuyHydrogenReactContextProvider.d.ts +3 -0
  49. package/dist/providers/RebuyHydrogenReactContextProvider.d.ts.map +1 -0
  50. package/dist/providers/types.d.ts +54 -0
  51. package/dist/providers/types.d.ts.map +1 -0
  52. package/dist/queries/cart.queries.d.ts +5 -0
  53. package/dist/queries/cart.queries.d.ts.map +1 -0
  54. package/dist/types/common.d.ts +9 -0
  55. package/dist/types/common.d.ts.map +1 -0
  56. package/dist/types/rebuyCustom.d.ts +240 -0
  57. package/dist/types/rebuyCustom.d.ts.map +1 -0
  58. package/dist/types/rebuySmartCart.d.ts +184 -0
  59. package/dist/types/rebuySmartCart.d.ts.map +1 -0
  60. package/dist/types/shopify.d.ts +85 -0
  61. package/dist/types/shopify.d.ts.map +1 -0
  62. package/dist/types/widgets.d.ts +22 -0
  63. package/dist/types/widgets.d.ts.map +1 -0
  64. package/dist/utils/convertToRebuyProduct.d.ts +156 -0
  65. package/dist/utils/convertToRebuyProduct.d.ts.map +1 -0
  66. package/dist/utils/createContextParameters.d.ts +3 -0
  67. package/dist/utils/createContextParameters.d.ts.map +1 -0
  68. package/dist/utils/getEncodedAttributes.d.ts +3 -0
  69. package/dist/utils/getEncodedAttributes.d.ts.map +1 -0
  70. package/dist/utils/getRebuyConfig.d.ts +3 -0
  71. package/dist/utils/getRebuyConfig.d.ts.map +1 -0
  72. package/dist/widgetContainer/RebuyWidgetContainer.d.ts +8 -0
  73. package/dist/widgetContainer/RebuyWidgetContainer.d.ts.map +1 -0
  74. package/dist/widgets/RebuyCompleteTheLook/RebuyCompleteTheLook.d.ts +3 -0
  75. package/dist/widgets/RebuyCompleteTheLook/RebuyCompleteTheLook.d.ts.map +1 -0
  76. package/dist/widgets/RebuyCompleteTheLook/index.d.ts +2 -0
  77. package/dist/widgets/RebuyCompleteTheLook/index.d.ts.map +1 -0
  78. package/dist/widgets/RebuyCompleteTheLook/types.d.ts +5 -0
  79. package/dist/widgets/RebuyCompleteTheLook/types.d.ts.map +1 -0
  80. package/dist/widgets/RebuyDynamicBundleProducts/BundleImages.d.ts +5 -0
  81. package/dist/widgets/RebuyDynamicBundleProducts/BundleImages.d.ts.map +1 -0
  82. package/dist/widgets/RebuyDynamicBundleProducts/BundlePrice.d.ts +5 -0
  83. package/dist/widgets/RebuyDynamicBundleProducts/BundlePrice.d.ts.map +1 -0
  84. package/dist/widgets/RebuyDynamicBundleProducts/BundleSelection.d.ts +3 -0
  85. package/dist/widgets/RebuyDynamicBundleProducts/BundleSelection.d.ts.map +1 -0
  86. package/dist/widgets/RebuyDynamicBundleProducts/RebuyDynamicBundleProducts.d.ts +3 -0
  87. package/dist/widgets/RebuyDynamicBundleProducts/RebuyDynamicBundleProducts.d.ts.map +1 -0
  88. package/dist/widgets/RebuyDynamicBundleProducts/Select.d.ts +3 -0
  89. package/dist/widgets/RebuyDynamicBundleProducts/Select.d.ts.map +1 -0
  90. package/dist/widgets/RebuyDynamicBundleProducts/index.d.ts +2 -0
  91. package/dist/widgets/RebuyDynamicBundleProducts/index.d.ts.map +1 -0
  92. package/dist/widgets/RebuyDynamicBundleProducts/types.d.ts +19 -0
  93. package/dist/widgets/RebuyDynamicBundleProducts/types.d.ts.map +1 -0
  94. package/dist/widgets/RebuyProductAddOns/RebuyProductAddOnCard.d.ts +3 -0
  95. package/dist/widgets/RebuyProductAddOns/RebuyProductAddOnCard.d.ts.map +1 -0
  96. package/dist/widgets/RebuyProductAddOns/RebuyProductAddOns.d.ts +3 -0
  97. package/dist/widgets/RebuyProductAddOns/RebuyProductAddOns.d.ts.map +1 -0
  98. package/dist/widgets/RebuyProductAddOns/index.d.ts +2 -0
  99. package/dist/widgets/RebuyProductAddOns/index.d.ts.map +1 -0
  100. package/dist/widgets/RebuyProductAddOns/types.d.ts +19 -0
  101. package/dist/widgets/RebuyProductAddOns/types.d.ts.map +1 -0
  102. package/dist/widgets/RebuyProductRecommendations/RebuyProductRecommendations.d.ts +3 -0
  103. package/dist/widgets/RebuyProductRecommendations/RebuyProductRecommendations.d.ts.map +1 -0
  104. package/dist/widgets/RebuyProductRecommendations/index.d.ts +2 -0
  105. package/dist/widgets/RebuyProductRecommendations/index.d.ts.map +1 -0
  106. package/dist/widgets/RebuyProductRecommendations/types.d.ts +5 -0
  107. package/dist/widgets/RebuyProductRecommendations/types.d.ts.map +1 -0
  108. package/package.json +84 -46
  109. package/RebuyCompleteTheLook.client.jsx +0 -188
  110. package/RebuyContextProvider.client.jsx +0 -222
  111. package/RebuyContexts.client.jsx +0 -3
  112. package/RebuyDynamicBundleProducts.client.jsx +0 -415
  113. package/RebuyProductAddOnCard.client.jsx +0 -89
  114. package/RebuyProductAddOns.client.jsx +0 -227
  115. package/RebuyProductRecommendations.client.jsx +0 -68
  116. package/RebuyProductViewed.client.jsx +0 -62
  117. package/RebuyRecentlyViewedProducts.client.jsx +0 -68
  118. package/RebuyWidgetContainer.client.jsx +0 -136
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/providers/RebuyHydrogenContextProvider.tsx", "../src/context/RebuyContext.tsx", "../src/utils/createContextParameters.ts", "../src/utils/getEncodedAttributes.ts", "../src/utils/getRebuyConfig.ts", "../src/providers/RebuyHydrogenReactContextProvider.tsx", "../src/queries/cart.queries.ts", "../src/widgetContainer/RebuyWidgetContainer.tsx", "../src/components/ProductCard/ProductCard.tsx", "../src/components/AddToCartBtn/HydrogenAddToCartBtn.tsx", "../src/components/AddToCartBtn/AddToCartBtn.module.css", "../src/components/AddToCartBtn/HydrogenReactAddToCartBtn.tsx", "../src/components/AddToCartBtn/AddToCartBtn.tsx", "../src/components/ProductPrice/ProductPrice.tsx", "../src/components/ProductPrice/ProductPrice.module.css", "../src/components/Title/Title.tsx", "../src/components/VariantSelect/VariantSelect.module.css", "../src/components/VariantSelect/VariantSelect.tsx", "../src/components/ProductCard/ProductCard.module.css", "../src/hooks/titleLevel.tsx", "../src/widgets/RebuyCompleteTheLook/RebuyCompleteTheLook.module.css", "../src/widgets/RebuyCompleteTheLook/RebuyCompleteTheLook.tsx", "../src/widgets/RebuyDynamicBundleProducts/RebuyDynamicBundleProducts.tsx", "../src/utils/convertToRebuyProduct.tsx", "../src/widgets/RebuyDynamicBundleProducts/BundleImages.tsx", "../src/widgets/RebuyDynamicBundleProducts/RebuyDynamicBundleProducts.module.css", "../src/widgets/RebuyDynamicBundleProducts/Select.tsx", "../src/widgets/RebuyDynamicBundleProducts/BundleSelection.tsx", "../src/widgets/RebuyDynamicBundleProducts/BundlePrice.tsx", "../src/widgets/RebuyProductAddOns/RebuyProductAddOns.tsx", "../src/widgets/RebuyProductAddOns/RebuyProductAddOnCard.tsx", "../src/widgets/RebuyProductAddOns/RebuyProductAddOns.module.css", "../src/widgets/RebuyProductRecommendations/RebuyProductRecommendations.module.css", "../src/widgets/RebuyProductRecommendations/RebuyProductRecommendations.tsx"],
4
+ "sourcesContent": ["export * from './providers/RebuyHydrogenContextProvider';\nexport * from './providers/RebuyHydrogenReactContextProvider';\nexport * from './widgetContainer/RebuyWidgetContainer';\nexport * from './widgets/RebuyCompleteTheLook';\nexport * from './widgets/RebuyDynamicBundleProducts';\nexport * from './widgets/RebuyProductAddOns';\nexport * from './widgets/RebuyProductRecommendations';\n", "import * as Utilities from '@rebuy/rebuy/utilities';\nimport { Await, useLocation } from '@remix-run/react';\nimport type { CartReturn } from '@shopify/hydrogen';\nimport { useEffect, useMemo, useState } from 'react';\nimport { RebuyContext } from '~/context/RebuyContext';\nimport type { RebuyHydrogenContextProviderProps, RebuyHydrogenProps } from '~/providers/types';\nimport { type RebuyConfig } from '~/types/rebuyCustom';\nimport { createContextParameters } from '~/utils/createContextParameters';\nimport { getRebuyConfig } from '~/utils/getRebuyConfig';\n\nconst RebuyHydrogenContext = ({\n apiKey,\n cartAttributes,\n cartCost,\n cartId,\n cartLines,\n cartNote,\n cartQuantity,\n children,\n publicStoreDomain,\n shop,\n}: RebuyHydrogenProps) => {\n const [rebuyConfig, setRebuyConfig] = useState<RebuyConfig | null>(null);\n const location = useLocation();\n const queryObject = Utilities.queryStringToObject(location.search);\n const windowUrl = `${shop}${location.pathname}${location.search}`;\n\n // Initialization\n useEffect(() => {\n const initConfig = async () => {\n const config = await getRebuyConfig(publicStoreDomain);\n setRebuyConfig(config);\n };\n\n if (!rebuyConfig?.shop) {\n initConfig();\n }\n }, [rebuyConfig]);\n\n const contextParameters = useMemo(\n () =>\n createContextParameters({\n cacheKey: rebuyConfig?.shop?.cache_key,\n cartAttributes,\n cartId,\n cartLines,\n cartLinesLength: cartLines?.length,\n cartNote: cartNote as string,\n cartSubtotal: cartCost,\n cartTotalQuantity: cartQuantity,\n isHydrogenReact: false,\n queryObject,\n windowUrl,\n }),\n [rebuyConfig, windowUrl, queryObject, cartAttributes, cartCost, cartId, cartLines, cartQuantity, cartNote]\n );\n\n // Static reference (JSON) + memoization\n // ^ prevent re-rendering children when context params are unchanged\n const contextParametersJSON = JSON.stringify(contextParameters);\n const contextValue = useMemo(\n () => ({ contextParameters: JSON.parse(contextParametersJSON) }),\n [contextParametersJSON]\n );\n\n return <RebuyContext.Provider value={contextValue}>{children}</RebuyContext.Provider>;\n};\n\nexport const RebuyHydrogenContextProvider = ({\n apiKey,\n cart,\n children,\n publicStoreDomain,\n shop,\n}: RebuyHydrogenContextProviderProps) => {\n return (\n <Await resolve={cart}>\n {(resolvedCart) => {\n const cart = resolvedCart as CartReturn;\n\n return (\n <RebuyHydrogenContext\n apiKey={apiKey}\n cartAttributes={cart?.attributes}\n cartCost={cart?.cost?.subtotalAmount?.amount}\n cartId={cart?.id}\n cartLines={cart?.lines?.nodes}\n cartNote={cart?.note}\n cartQuantity={cart?.totalQuantity}\n publicStoreDomain={publicStoreDomain}\n shop={shop}\n >\n {children}\n </RebuyHydrogenContext>\n );\n }}\n </Await>\n );\n};\n", "import { createContext } from 'react';\n\nimport { type ContextParameters } from '~/types/rebuyCustom';\n\nexport type RebuyContextType = {\n contextParameters: ContextParameters;\n};\n\nexport const RebuyContext = createContext<RebuyContextType | null>(null);\n", "import * as Utilities from '@rebuy/rebuy/utilities';\n\nimport type { Attribute } from '@shopify/hydrogen-react/storefront-api-types';\nimport type { CartContext, CartItem, ContextParameters, RebuyContextProps } from '~/types/rebuyCustom';\n\nimport { getEncodedAttributes } from '~/utils/getEncodedAttributes';\n\nexport const createContextParameters = ({\n cacheKey,\n cartAttributes,\n cartId,\n cartLines,\n cartLinesLength,\n cartNote,\n cartSubtotal,\n cartTotalQuantity,\n isHydrogenReact,\n queryObject,\n windowUrl,\n}: RebuyContextProps) => {\n const contextParameters: ContextParameters = {\n cache_key: cacheKey,\n cart_count: 0,\n cart_item_count: 0,\n cart_line_count: 0,\n cart_subtotal: 0,\n isHydrogenReact,\n time: '',\n url: windowUrl,\n };\n\n const cartContext: CartContext = {\n attributes: '',\n item_count: 0,\n items: [],\n line_count: 0,\n note: '',\n subtotal: 0,\n token: '',\n };\n\n if (Object.prototype.hasOwnProperty.call(queryObject, 'time')) {\n contextParameters.time = queryObject.time;\n }\n\n // Set Cart: token\n if (cartId) {\n cartContext.token = Utilities.getIdFromGraphUrl(cartId, 'Cart');\n contextParameters.cart_token = Utilities.getIdFromGraphUrl(cartId, 'Cart');\n }\n\n // Set Cart: subtotal\n if (cartSubtotal) {\n cartContext.subtotal = Utilities.amountToCents(parseFloat(cartSubtotal));\n contextParameters.cart_subtotal = Utilities.amountToCents(parseFloat(cartSubtotal));\n }\n\n // Set Cart: line count\n if (cartLinesLength) {\n const totalLines = cartLinesLength;\n cartContext.line_count = totalLines;\n contextParameters.cart_count = totalLines;\n contextParameters.cart_line_count = totalLines;\n }\n\n // Set Cart: item count\n if (cartTotalQuantity) {\n cartContext.item_count = cartTotalQuantity;\n contextParameters.cart_item_count = cartTotalQuantity;\n }\n\n if (cartLines) {\n cartContext.items = [];\n\n for (const cartItem of cartLines) {\n const item: CartItem = {\n attributes: [],\n product_id: '',\n properties: '',\n quantity: cartItem?.quantity,\n variant_id: '',\n };\n\n if (cartItem?.merchandise?.product?.id) {\n item.product_id = Utilities.getIdFromGraphUrl(cartItem.merchandise.product.id, 'Product');\n }\n\n if (cartItem?.merchandise?.id) {\n item.variant_id = Utilities.getIdFromGraphUrl(cartItem.merchandise.id, 'ProductVariant');\n }\n\n if (cartItem?.attributes?.length) {\n const validAttributes = cartItem.attributes.filter(\n (attr: Attribute) =>\n attr !== undefined && typeof attr.key === 'string' && typeof attr.value === 'string'\n );\n item.properties = getEncodedAttributes(validAttributes);\n }\n cartContext.items.push(item);\n }\n }\n\n // Set Cart: attributes\n if (cartAttributes) {\n const validAttributes = cartAttributes.filter(\n (attr): attr is Attribute =>\n attr !== undefined && typeof attr.key === 'string' && typeof attr.value === 'string'\n );\n cartContext.attributes = getEncodedAttributes(validAttributes);\n }\n\n // Set Cart: notes\n if (cartNote) {\n cartContext.note = cartNote;\n }\n\n // Set cart\n contextParameters.cart = cartContext;\n\n return contextParameters;\n};\n", "import type { Attribute } from '@shopify/hydrogen-react/storefront-api-types';\n\nexport const getEncodedAttributes = (attributes: Attribute[]) =>\n encodeURIComponent(\n JSON.stringify(attributes.reduce((merged, { key, value }) => ({ ...merged, [key]: value }), {}))\n );\n", "import { RebuyClient } from '@rebuy/rebuy';\nimport type { RebuyConfig, RebuyResponse } from '~/types/rebuyCustom';\n\nexport const getRebuyConfig = async (storeDomain: string): Promise<RebuyConfig> => {\n try {\n const request = {\n parameters: { shop: storeDomain },\n url: `/api/v1/user/config`,\n };\n\n const { data: rebuy, ...response } = (await new RebuyClient(undefined, undefined, storeDomain).getShieldedAsset(\n request.url,\n request.parameters\n )) as RebuyResponse;\n\n if (!rebuy?.shop) {\n throw new Error('Rebuy configuration is not properly set up - missing shop', { cause: response });\n }\n\n return rebuy;\n } catch (error: unknown) {\n const err = error as Error;\n console.warn('Error fetching Rebuy shop config');\n console.error(err, err.cause);\n throw err;\n }\n};\n", "import * as Utilities from '@rebuy/rebuy/utilities';\nimport { useLocation } from '@remix-run/react';\nimport { CartProvider, ShopifyProvider, useCart } from '@shopify/hydrogen-react';\nimport type { Attribute } from '@shopify/hydrogen-react/storefront-api-types';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { RebuyContext } from '~/context/RebuyContext';\nimport type { RebuyHydrogenReactContextProviderProps, RebuyHydrogenReactProps } from '~/providers/types';\nimport { CART_FRAGMENT } from '~/queries/cart.queries';\nimport type { RebuyConfig } from '~/types/rebuyCustom';\nimport { createContextParameters } from '~/utils/createContextParameters';\nimport { getRebuyConfig } from '~/utils/getRebuyConfig';\n\nconst PUBLIC_PRIMARY_DOMAIN = import.meta.env.PUBLIC_PRIMARY_DOMAIN;\nconst PUBLIC_REBUY_API_KEY = import.meta.env.PUBLIC_REBUY_API_KEY;\nconst PUBLIC_STORE_DOMAIN = import.meta.env.PUBLIC_STORE_DOMAIN;\nconst PUBLIC_STOREFRONT_ID = import.meta.env.PUBLIC_STOREFRONT_ID;\nconst PUBLIC_STOREFRONT_API_TOKEN = import.meta.env.PUBLIC_STOREFRONT_API_TOKEN || '';\n\nconst RebuyHydrogenReactContext = ({ children }: RebuyHydrogenReactProps) => {\n const [rebuyConfig, setRebuyConfig] = useState<RebuyConfig | null>(null);\n const location = useLocation();\n const queryObject = Utilities.queryStringToObject(location.search);\n const windowUrl = `${PUBLIC_PRIMARY_DOMAIN}${location.pathname}${location.search}`;\n\n // This is the cart object from Hydrogen-React\n const cart = useCart();\n\n // Initialization\n useEffect(() => {\n const initConfig = async () => {\n const config = await getRebuyConfig(PUBLIC_STORE_DOMAIN);\n setRebuyConfig(config);\n };\n\n if (!rebuyConfig?.shop) {\n initConfig();\n }\n }, [rebuyConfig, PUBLIC_STORE_DOMAIN]);\n\n const contextParameters = useMemo(\n () =>\n createContextParameters({\n cacheKey: rebuyConfig?.shop?.cache_key,\n cartAttributes: cart?.attributes as Attribute[],\n cartId: cart?.id,\n cartLines: cart?.lines,\n cartLinesLength: cart?.lines?.length,\n cartSubtotal: cart?.cost?.subtotalAmount?.amount,\n cartTotalQuantity: cart?.totalQuantity,\n isHydrogenReact: true,\n queryObject,\n windowUrl,\n }),\n [rebuyConfig, windowUrl, queryObject, cart]\n );\n\n // Static reference (JSON) + memoization\n // ^ prevent re-rendering children when context params are unchanged\n const contextParametersJSON = JSON.stringify(contextParameters);\n const contextValue = useMemo(\n () => ({ contextParameters: JSON.parse(contextParametersJSON) }),\n [contextParametersJSON]\n );\n\n return <RebuyContext.Provider value={contextValue}>{children}</RebuyContext.Provider>;\n};\n\nexport const RebuyHydrogenReactContextProvider = ({\n cartFragment = CART_FRAGMENT,\n children,\n countryIsoCode = 'US',\n customerAccessToken = '',\n data,\n languageIsoCode = 'EN',\n numCartLines,\n onAttributesUpdate,\n onAttributesUpdateComplete,\n onBuyerIdentityUpdate,\n onBuyerIdentityUpdateComplete,\n onCreate,\n onCreateComplete,\n onDiscountCodesUpdate,\n onDiscountCodesUpdateComplete,\n onLineAdd,\n onLineAddComplete,\n onLineRemove,\n onLineRemoveComplete,\n onLineUpdate,\n onLineUpdateComplete,\n onNoteUpdate,\n onNoteUpdateComplete,\n storefrontApiVersion = '2025-01',\n}: RebuyHydrogenReactContextProviderProps) => {\n const adapted = {\n onAttributesUpdate: onAttributesUpdate ? () => onAttributesUpdate() : undefined,\n onAttributesUpdateComplete: onAttributesUpdateComplete ? () => onAttributesUpdateComplete() : undefined,\n onBuyerIdentityUpdate: onBuyerIdentityUpdate ? () => onBuyerIdentityUpdate() : undefined,\n onBuyerIdentityUpdateComplete: onBuyerIdentityUpdateComplete\n ? () => onBuyerIdentityUpdateComplete()\n : undefined,\n onCreate: onCreate ? () => onCreate() : undefined,\n onCreateComplete: onCreateComplete ? () => onCreateComplete() : undefined,\n onDiscountCodesUpdate: onDiscountCodesUpdate ? () => onDiscountCodesUpdate() : undefined,\n onDiscountCodesUpdateComplete: onDiscountCodesUpdateComplete\n ? () => onDiscountCodesUpdateComplete()\n : undefined,\n onLineAdd: onLineAdd ? () => onLineAdd() : undefined,\n onLineAddComplete: onLineAddComplete ? () => onLineAddComplete() : undefined,\n onLineRemove: onLineRemove ? () => onLineRemove() : undefined,\n onLineRemoveComplete: onLineRemoveComplete ? () => onLineRemoveComplete() : undefined,\n onLineUpdate: onLineUpdate ? () => onLineUpdate() : undefined,\n onLineUpdateComplete: onLineUpdateComplete ? () => onLineUpdateComplete() : undefined,\n onNoteUpdate: onNoteUpdate ? () => onNoteUpdate() : undefined,\n onNoteUpdateComplete: onNoteUpdateComplete ? () => onNoteUpdateComplete() : undefined,\n };\n\n return (\n <ShopifyProvider\n countryIsoCode={countryIsoCode}\n languageIsoCode={languageIsoCode}\n storeDomain={PUBLIC_STORE_DOMAIN}\n storefrontApiVersion={storefrontApiVersion}\n storefrontId={PUBLIC_STOREFRONT_ID}\n storefrontToken={PUBLIC_STOREFRONT_API_TOKEN}\n >\n <CartProvider\n cartFragment={cartFragment}\n countryCode={countryIsoCode}\n customerAccessToken={customerAccessToken}\n data={data}\n languageCode={languageIsoCode}\n numCartLines={numCartLines}\n onAttributesUpdate={adapted.onAttributesUpdate}\n onAttributesUpdateComplete={adapted.onAttributesUpdateComplete}\n onBuyerIdentityUpdate={adapted.onBuyerIdentityUpdate}\n onBuyerIdentityUpdateComplete={adapted.onBuyerIdentityUpdateComplete}\n onCreate={adapted.onCreate}\n onCreateComplete={adapted.onCreateComplete}\n onDiscountCodesUpdate={adapted.onDiscountCodesUpdate}\n onDiscountCodesUpdateComplete={adapted.onDiscountCodesUpdateComplete}\n onLineAdd={adapted.onLineAdd}\n onLineAddComplete={adapted.onLineAddComplete}\n onLineRemove={adapted.onLineRemove}\n onLineRemoveComplete={adapted.onLineRemoveComplete}\n onLineUpdate={adapted.onLineUpdate}\n onLineUpdateComplete={adapted.onLineUpdateComplete}\n onNoteUpdate={adapted.onNoteUpdate}\n onNoteUpdateComplete={adapted.onNoteUpdateComplete}\n >\n <RebuyHydrogenReactContext>{children}</RebuyHydrogenReactContext>\n </CartProvider>\n </ShopifyProvider>\n );\n};\n", "export const OPTION_FRAGMENT = `#graphql\n fragment OptionFragment on ProductOption {\n id\n name\n optionValues {\n id\n name\n swatch {\n color\n image {\n mediaContentType\n previewImage {\n height\n id\n url\n width\n altText\n }\n id\n alt\n }\n }\n }\n }\n`;\n/*\n * STOREFRONT API QUERIES -----------------------------------------------------\n */\n\n// Docs: https://shopify.dev/docs/api/storefront/latest/objects/Cart\n\nexport const CART_LINE_FRAGMENT = `#graphql\n fragment CartLineFragment on CartLine {\n id\n quantity\n cost {\n amountPerQuantity {\n amount\n currencyCode\n }\n compareAtAmountPerQuantity {\n amount\n currencyCode\n }\n totalAmount {\n amount\n currencyCode\n }\n subtotalAmount {\n amount\n currencyCode\n }\n }\n attributes {\n key\n value\n }\n discountAllocations {\n discountedAmount {\n amount\n currencyCode\n }\n ... on CartAutomaticDiscountAllocation {\n __typename\n discountedAmount {\n amount\n currencyCode\n }\n title\n }\n ... on CartCodeDiscountAllocation {\n __typename\n code\n discountedAmount {\n amount\n currencyCode\n }\n }\n ... on CartCustomDiscountAllocation {\n __typename\n discountedAmount {\n amount\n currencyCode\n }\n title\n }\n }\n merchandise {\n ... on ProductVariant {\n availableForSale\n id\n sku\n title\n compareAtPrice {\n amount\n currencyCode\n }\n image {\n altText\n height\n id\n url\n width\n }\n price {\n amount\n currencyCode\n }\n product {\n handle\n id\n productType\n tags\n title\n vendor\n collections(first: 10) {\n nodes {\n handle\n }\n }\n options {\n ...OptionFragment\n }\n images(first: 20) {\n nodes {\n altText\n height\n id\n url\n width\n }\n }\n }\n selectedOptions {\n name\n value\n }\n }\n }\n }\n` as const;\n\nexport const CART_LINE_COMPONENT_FRAGMENT = `#graphql\n fragment CartLineComponentFragment on ComponentizableCartLine {\n id\n quantity\n cost {\n amountPerQuantity {\n amount\n currencyCode\n }\n compareAtAmountPerQuantity {\n amount\n currencyCode\n }\n totalAmount {\n amount\n currencyCode\n }\n subtotalAmount {\n amount\n currencyCode\n }\n }\n attributes {\n key\n value\n }\n discountAllocations {\n discountedAmount {\n amount\n currencyCode\n }\n ... on CartAutomaticDiscountAllocation {\n __typename\n discountedAmount {\n amount\n currencyCode\n }\n title\n }\n ... on CartCodeDiscountAllocation {\n __typename\n code\n discountedAmount {\n amount\n currencyCode\n }\n }\n ... on CartCustomDiscountAllocation {\n __typename\n discountedAmount {\n amount\n currencyCode\n }\n title\n }\n }\n merchandise {\n ... on ProductVariant {\n availableForSale\n id\n sku\n title\n compareAtPrice {\n amount\n currencyCode\n }\n image {\n altText\n height\n id\n url\n width\n }\n price {\n amount\n currencyCode\n }\n product {\n handle\n id\n productType\n tags\n title\n vendor\n collections(first: 10) {\n nodes {\n handle\n }\n }\n options {\n id\n name\n optionValues {\n id\n name\n swatch {\n color\n image {\n mediaContentType\n previewImage {\n height\n id\n url\n width\n altText\n }\n id\n alt\n }\n }\n }\n }\n images(first: 20) {\n nodes {\n altText\n height\n id\n url\n width\n }\n }\n }\n selectedOptions {\n name\n value\n }\n }\n }\n lineComponents {\n id\n quantity\n cost {\n amountPerQuantity {\n amount\n currencyCode\n }\n compareAtAmountPerQuantity {\n amount\n currencyCode\n }\n totalAmount {\n amount\n currencyCode\n }\n subtotalAmount {\n amount\n currencyCode\n }\n }\n attributes {\n key\n value\n }\n discountAllocations {\n discountedAmount {\n amount\n currencyCode\n }\n ... on CartAutomaticDiscountAllocation {\n __typename\n discountedAmount {\n amount\n currencyCode\n }\n title\n }\n ... on CartCodeDiscountAllocation {\n __typename\n code\n discountedAmount {\n amount\n currencyCode\n }\n }\n ... on CartCustomDiscountAllocation {\n __typename\n discountedAmount {\n amount\n currencyCode\n }\n title\n }\n }\n merchandise {\n ... on ProductVariant {\n availableForSale\n id\n sku\n title\n compareAtPrice {\n amount\n currencyCode\n }\n image {\n altText\n height\n id\n url\n width\n }\n price {\n amount\n currencyCode\n }\n product {\n handle\n id\n productType\n tags\n title\n vendor\n collections(first: 10) {\n nodes {\n handle\n }\n }\n options {\n ...OptionFragment\n }\n images(first: 20) {\n nodes {\n altText\n height\n id\n url\n width\n }\n }\n }\n selectedOptions {\n name\n value\n }\n }\n }\n }\n }\n` as const;\n\nexport const CART_FRAGMENT = `#graphql\n fragment CartFragment on Cart {\n id\n checkoutUrl\n createdAt\n totalQuantity\n note\n updatedAt\n __typename\n buyerIdentity {\n countryCode\n customer {\n id\n email\n firstName\n lastName\n displayName\n }\n email\n phone\n }\n attributes {\n key\n value\n }\n cost {\n subtotalAmount {\n amount\n currencyCode\n }\n totalAmount {\n amount\n currencyCode\n }\n }\n discountAllocations {\n discountedAmount {\n amount\n currencyCode\n }\n ... on CartAutomaticDiscountAllocation {\n __typename\n discountedAmount {\n amount\n currencyCode\n }\n title\n }\n ... on CartCodeDiscountAllocation {\n __typename\n code\n discountedAmount {\n amount\n currencyCode\n }\n }\n ... on CartCustomDiscountAllocation {\n __typename\n discountedAmount {\n amount\n currencyCode\n }\n title\n }\n }\n discountCodes {\n applicable\n code\n }\n lines(first: $numCartLines) {\n edges {\n node {\n ...CartLineComponentFragment\n }\n }\n edges {\n node {\n ...CartLineFragment\n }\n }\n }\n }\n ${CART_LINE_FRAGMENT}\n ${CART_LINE_COMPONENT_FRAGMENT}\n ${OPTION_FRAGMENT}\n` as const;\n", "import { RebuyClient } from '@rebuy/rebuy';\nimport * as Utilities from '@rebuy/rebuy/utilities';\nimport { flattenConnection } from '@shopify/hydrogen';\nimport React, { type ComponentType, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { RebuyContext } from '~/context/RebuyContext';\nimport type { RebuyProduct, RebuyWidgetContainerProps, RebuyWidgetMetadata } from '~/types/rebuyCustom';\n\ntype RebuyWidgetContainerComponent = {\n (props: RebuyWidgetContainerProps): JSX.Element;\n} & ComponentType<RebuyWidgetContainerProps>;\n\nconst RebuyWidgetContainerBase = ({ children, ...props }: RebuyWidgetContainerProps) => {\n const { apiKey, collection, collectionId, dataSource, limit, options, product, productId, variant, variantId } =\n props;\n\n const contextParameters = useContext(RebuyContext);\n\n const [Rebuy, setRebuy] = useState<RebuyClient | null>(null);\n const [initialized, setInitialized] = useState(false);\n const shopifyProductId = product?.id ?? productId ?? null;\n const shopifyVariantId = variant?.id ?? variantId ?? null;\n const shopifyCollectionId = collection?.id ?? collectionId ?? null;\n const [products, setProducts] = useState<RebuyProduct[]>([]);\n const [metadata, setMetadata] = useState<RebuyWidgetMetadata>();\n\n // Initialize Rebuy API client\n useEffect(() => {\n if (!Rebuy) {\n const client = new RebuyClient(apiKey);\n client.setContextParameters(\n contextParameters as Record<string, unknown> // TODO: fix this type when @rebuy/rebuy is moved to typescript\n );\n\n if (options) {\n client.setDefaultParameters(options as Record<string, unknown>); // TODO: fix this type when @rebuy/rebuy is moved to typescript\n }\n\n setRebuy(client);\n setInitialized(true);\n }\n }, [apiKey, Rebuy, contextParameters, options]);\n\n useEffect(() => {\n if (!Rebuy) return;\n\n Rebuy.setContextParameters(\n contextParameters as Record<string, unknown> // TODO: fix this type when @rebuy/rebuy is moved to typescript\n );\n }, [Rebuy, contextParameters]);\n\n // Memoize request object on prop changes (e.g. product)\n const request = useMemo(() => {\n const request = {\n endpoint: dataSource || '/api/v1/products/recommended',\n params: {} as Record<string, string | number>, // Keeping this object generic to allow for custom endpoints\n };\n\n if (shopifyProductId) {\n request.params.shopify_product_ids = Utilities.getIdFromGraphUrl(shopifyProductId, 'Product');\n }\n\n if (shopifyProductId) {\n request.params.shopify_product_ids = Utilities.getIdFromGraphUrl(shopifyProductId, 'Product');\n }\n\n if (shopifyVariantId) {\n request.params.shopify_variant_ids = Utilities.getIdFromGraphUrl(shopifyVariantId, 'ProductVariant');\n }\n\n if (shopifyCollectionId) {\n request.params.shopify_collection_ids = Utilities.getIdFromGraphUrl(shopifyCollectionId, 'Collection');\n }\n\n if (limit) {\n request.params.limit = limit;\n }\n\n return request;\n }, [dataSource, shopifyProductId, shopifyVariantId, shopifyCollectionId, limit]);\n\n // Update product recommendations on cart or request change\n useEffect(() => {\n let isMounted = true;\n\n if (!Rebuy || !initialized) return;\n\n const fetchData = async () => {\n const { data, metadata } = (await Rebuy.getStorefrontData(request.endpoint, request.params)) as {\n data: RebuyProduct[];\n metadata: RebuyWidgetMetadata;\n };\n\n // Set state only if mounted\n if (isMounted) {\n setProducts(\n Array.isArray(data)\n ? data.map((product) => ({\n ...product,\n variants: {\n nodes: product.variants ? flattenConnection(product.variants) : [],\n },\n }))\n : []\n );\n setMetadata(metadata);\n }\n };\n\n fetchData();\n\n // Unmounted?\n return () => {\n isMounted = false;\n };\n }, [Rebuy, initialized, request]);\n\n const childrenWithProps = (props: RebuyWidgetContainerProps) =>\n React.Children.map(children, (child) =>\n React.isValidElement(child) ? React.cloneElement(child, props) : child\n );\n\n const childProps = {\n ...props,\n isHydrogenReact: contextParameters?.contextParameters?.isHydrogenReact,\n key: product?.id,\n metadata,\n products,\n };\n\n return childrenWithProps(childProps);\n};\n\nexport const RebuyWidgetContainer = RebuyWidgetContainerBase as RebuyWidgetContainerComponent;\n", "import { Link } from '@remix-run/react';\nimport { Image } from '@shopify/hydrogen';\nimport { useState } from 'react';\n\nimport { AddToCartBtn } from '~/components/AddToCartBtn';\nimport type { ProductCardProps } from '~/components/ProductCard/types';\n\nimport { RebuyProductPrice } from '~/components/ProductPrice/ProductPrice';\nimport { Title } from '~/components/Title';\nimport { VariantSelect } from '~/components/VariantSelect';\nimport type { RebuyProduct } from '~/types/rebuyCustom';\nimport styles from './ProductCard.module.css';\n\nexport const ProductCard = ({\n addToCartBtnText,\n addToCartCallback,\n isHydrogenReact,\n product,\n productCardTitleLevel,\n}: ProductCardProps) => {\n const [selectedVariant, setSelectedVariant] = useState(product.variants.nodes[0]);\n\n const { image } = selectedVariant;\n const handleSelectedVariant = (product: RebuyProduct, variant_id: string) => {\n const updatedVariant = product.variants.nodes.find((variant) => variant.id === variant_id);\n\n if (updatedVariant) {\n setSelectedVariant(updatedVariant);\n }\n };\n\n return (\n <div className={styles.container}>\n <div>\n <Link to={`/products/${product.handle}`}>\n <Image\n alt={image?.altText ?? `Picture of ${product.title}`}\n data={image}\n sizes=\"(max-width: 320px) 280px, (max-width: 768px) 720px, 1440px\"\n />\n </Link>\n <div className={styles.productInfo}>\n <Link to={`/products/${product.handle}`}>\n <Title level={productCardTitleLevel} text={product.title} />\n </Link>\n <RebuyProductPrice selectedVariant={selectedVariant} />\n <VariantSelect handleSelectedVariant={handleSelectedVariant} product={product} />\n </div>\n </div>\n <AddToCartBtn\n addToCartBtnText={addToCartBtnText}\n addToCartCallback={addToCartCallback}\n isHydrogenReact={isHydrogenReact}\n selectedVariants={[selectedVariant]}\n />\n </div>\n );\n};\n", "import { type FetcherWithComponents } from '@remix-run/react';\nimport { CartForm, Money } from '@shopify/hydrogen';\n\nimport type { btnProps } from '~/components/AddToCartBtn/types';\nimport styles from './AddToCartBtn.module.css';\n\nexport const HydrogenAddToCartBtn = ({\n addToCartBtnText,\n addToCartCallback,\n disabled,\n linesToAdd,\n moneyData,\n}: btnProps) => {\n return (\n <CartForm\n action={CartForm.ACTIONS.LinesAdd}\n inputs={{\n lines: linesToAdd,\n }}\n route=\"/cart\"\n >\n {(fetcher: FetcherWithComponents<unknown>) => (\n <>\n <button\n className={styles.button}\n disabled={disabled || fetcher.state !== 'idle'}\n onClick={addToCartCallback}\n type=\"submit\"\n >\n {addToCartBtnText}\n {moneyData && (\n <>\n <span> | </span>\n <Money data={moneyData} withoutTrailingZeros />\n </>\n )}\n </button>\n </>\n )}\n </CartForm>\n );\n};\n", "/* stylelint-disable selector-class-pattern */\n\n/* TODO: Update classes to BEM naming convention (rb-{block}__{element}--{modifier}) */\n\n.button {\n padding: 8px 16px;\n border-radius: 4px;\n font-size: 16px;\n color: #fff;\n background-color: #000;\n border: none;\n cursor: pointer;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.button:hover {\n background-color: #333;\n}\n", "import { Money, useCart } from '@shopify/hydrogen-react';\n\nimport type { btnProps } from '~/components/AddToCartBtn/types';\nimport styles from './AddToCartBtn.module.css';\n\nexport const HydrogenReactAddToCartBtn = ({\n addToCartBtnText,\n addToCartCallback,\n disabled,\n linesToAdd,\n moneyData,\n}: btnProps) => {\n const { linesAdd } = useCart();\n const handleAddToCart = () => {\n linesAdd(linesToAdd);\n addToCartCallback?.();\n };\n\n return (\n <button className={styles.button} disabled={disabled} onClick={handleAddToCart} type=\"button\">\n {addToCartBtnText}\n {moneyData && (\n <>\n <span> | </span>\n <Money data={moneyData} withoutTrailingZeros />\n </>\n )}\n </button>\n );\n};\n", "import type { AddToCartBtnProps } from '~/components/AddToCartBtn/types';\nimport { HydrogenAddToCartBtn } from './HydrogenAddToCartBtn';\nimport { HydrogenReactAddToCartBtn } from './HydrogenReactAddToCartBtn';\n\nexport const AddToCartBtn = ({\n addToCartBtnText,\n addToCartCallback,\n disabled,\n isHydrogenReact,\n moneyData,\n selectedVariants,\n}: AddToCartBtnProps) => {\n const linesToAdd = selectedVariants.map((variant) => ({\n attributes: [\n { key: '_source', value: 'Rebuy' },\n { key: '_attribution', value: 'Rebuy Product Recommendations' },\n ],\n merchandiseId: variant.id,\n quantity: 1,\n selectedVariant: variant,\n }));\n\n if (isHydrogenReact) {\n return (\n <HydrogenReactAddToCartBtn\n addToCartBtnText={addToCartBtnText}\n addToCartCallback={addToCartCallback}\n disabled={disabled}\n linesToAdd={linesToAdd}\n moneyData={moneyData}\n />\n );\n }\n\n return (\n <HydrogenAddToCartBtn\n addToCartBtnText={addToCartBtnText}\n addToCartCallback={addToCartCallback}\n disabled={disabled}\n linesToAdd={linesToAdd}\n moneyData={moneyData}\n />\n );\n};\n", "import { Money } from '@shopify/hydrogen';\n\nimport type { MoneyV2 } from '@shopify/hydrogen-react/storefront-api-types';\nimport type { RebuyProductVariant } from '~/types/rebuyCustom';\nimport styles from './ProductPrice.module.css';\n\nexport const RebuyProductPrice = ({ selectedVariant }: { selectedVariant: RebuyProductVariant }) => {\n if (!selectedVariant) return null;\n const { compareAtPriceV2: compareAtPrice, priceV2: price } = selectedVariant;\n\n const isDiscounted = (price: MoneyV2 | null, compareAtPrice: MoneyV2 | null) =>\n Number(compareAtPrice?.amount) > Number(price?.amount);\n\n const CompareAtPrice = ({ data: compareAtPrice }: { data: MoneyV2 | null }) => {\n return (\n compareAtPrice && (\n <Money as=\"span\" className={styles.compareAtPrice} data={compareAtPrice} withoutTrailingZeros />\n )\n );\n };\n\n return (\n price && (\n <div className={styles.priceContainer}>\n <Money data={price} withoutTrailingZeros />\n {compareAtPrice && isDiscounted(price, compareAtPrice) && <CompareAtPrice data={compareAtPrice} />}\n </div>\n )\n );\n};\n", "/* stylelint-disable selector-class-pattern */\n\n/* TODO: Update classes to BEM naming convention (rb-{block}__{element}--{modifier}) */\n\n.priceContainer {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.compareAtPrice {\n opacity: 0.5;\n}\n", "import type { TitleProps } from '~/components/Title/types';\n\nexport const Title = ({ level, style, text }: TitleProps) => {\n switch (level) {\n case 'h1':\n return <h1 style={style}>{text}</h1>;\n default:\n case 'h2':\n return <h2 style={style}>{text}</h2>;\n case 'h3':\n return <h3 style={style}>{text}</h3>;\n case 'h4':\n return <h4 style={style}>{text}</h4>;\n case 'h5':\n return <h5 style={style}>{text}</h5>;\n case 'h6':\n return <h6 style={style}>{text}</h6>;\n }\n};\n", "/* stylelint-disable selector-class-pattern */\n\n/* TODO: Update classes to BEM naming convention (rb-{block}__{element}--{modifier}) */\n\n.select {\n width: 100%;\n padding: 8px;\n border: 1px solid #ccc;\n border-radius: 4px;\n font-size: 16px;\n color: #333;\n background-color: #fff;\n}\n", "import type { VariantSelectProps } from '~/components/VariantSelect/types';\nimport type { RebuyProduct } from '~/types/rebuyCustom';\nimport styles from './VariantSelect.module.css';\n\nexport const VariantSelect = ({ handleSelectedVariant, product }: VariantSelectProps) => {\n const getOptionsLabel = (product: RebuyProduct) => {\n const options = product.variants.nodes[0].selectedOptions;\n const optionsFromKeys = options ? Object.keys(options[0]) : [];\n const optionsFromValues = options ? options.map((option) => option.name) : [];\n const useValues = optionsFromKeys.every((key) => ['name', 'value'].includes(key));\n\n // Return delimited label for available option(s) e.g. Color / Size, Scent, etc\n return (useValues ? optionsFromValues : optionsFromKeys).join(' / ');\n };\n\n return (\n product?.variants.nodes.length > 1 && (\n <div>\n <select\n aria-label=\"select variant\"\n className={styles.select}\n onChange={(e) => handleSelectedVariant(product, e.target.value)}\n >\n <optgroup label={getOptionsLabel(product)}>\n {product.variants.nodes.map(({ id, title }) => (\n <option key={id + '-variant'} value={id}>\n {title}\n </option>\n ))}\n </optgroup>\n </select>\n </div>\n )\n );\n};\n", "/* stylelint-disable selector-class-pattern */\n\n/* TODO: Update classes to BEM naming convention (rb-{block}__{element}--{modifier}) */\n\n.container {\n display: flex;\n flex-direction: column;\n gap: 24px;\n max-width: 256px;\n height: 100%;\n justify-content: space-between;\n}\n\n.productInfo {\n display: grid;\n gap: 4px;\n align-items: start;\n}\n", "import { ProductCardTitleLevel } from '~/types/common';\n\n// Convert the string header level to enum\nexport const getTitleLevel = (level: string, decreaseLevel: boolean = false): ProductCardTitleLevel => {\n switch (level) {\n case 'h1':\n if (decreaseLevel) {\n return ProductCardTitleLevel.H2;\n }\n\n return ProductCardTitleLevel.H1;\n case 'h2':\n if (decreaseLevel) {\n return ProductCardTitleLevel.H3;\n }\n\n return ProductCardTitleLevel.H2;\n case 'h3':\n if (decreaseLevel) {\n return ProductCardTitleLevel.H4;\n }\n\n return ProductCardTitleLevel.H3;\n case 'h4':\n if (decreaseLevel) {\n return ProductCardTitleLevel.H5;\n }\n\n return ProductCardTitleLevel.H4;\n case 'h5':\n if (decreaseLevel) {\n return ProductCardTitleLevel.H6;\n }\n\n return ProductCardTitleLevel.H5;\n case 'h6':\n if (decreaseLevel) {\n return ProductCardTitleLevel.H6;\n }\n\n return ProductCardTitleLevel.H6;\n default:\n return ProductCardTitleLevel.H2;\n }\n};\n", "/* stylelint-disable */\n\n.container {\n padding: 2rem 1rem;\n margin: 1rem 0;\n background-color: #f0f4f8;\n border-radius: 1rem;\n\n @media (width >= 768px) {\n padding: 4rem;\n }\n}\n\n.productGrid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 2rem;\n list-style: none;\n padding: 0;\n margin: 0;\n\n @media (width >= 768px) {\n grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n }\n}\n\n.productItem {\n width: 100%;\n}\n", "import { ProductCard } from '~/components/ProductCard';\nimport { Title } from '~/components/Title';\nimport { getTitleLevel } from '~/hooks/titleLevel';\nimport type { RebuyCompleteTheLookProps } from './types';\nimport styles from '~/widgets/RebuyCompleteTheLook/RebuyCompleteTheLook.module.css';\n\n// Component implementation\nexport const RebuyCompleteTheLook = (props: RebuyCompleteTheLookProps) => {\n const {\n addToCartBtnText = 'Add to cart',\n addToCartCallback,\n customTitle = `These pair with ${props.product?.title}`,\n customTitleLevel = 'h2',\n customTitleStyle,\n products = [],\n } = props;\n\n if (products.length === 0) {\n console.log('RebuyCompleteTheLook: No products found');\n\n return null;\n }\n\n return (\n <section className={styles.container}>\n <Title level={getTitleLevel(customTitleLevel)} style={customTitleStyle} text={customTitle} />\n <ul className={styles.productGrid}>\n {products.map((product) => (\n <li className={styles.productItem} key={product.id}>\n <ProductCard\n addToCartBtnText={addToCartBtnText}\n addToCartCallback={addToCartCallback}\n isHydrogenReact={props.isHydrogenReact}\n product={product}\n productCardTitleLevel={getTitleLevel(customTitleLevel, true)}\n />\n </li>\n ))}\n </ul>\n </section>\n );\n};\n", "import { useCallback, useEffect, useState } from 'react';\n\nimport { AddToCartBtn } from '~/components/AddToCartBtn';\nimport { Title } from '~/components/Title';\nimport { getTitleLevel } from '~/hooks/titleLevel';\nimport { convertToRebuyProduct } from '~/utils/convertToRebuyProduct';\nimport { BundleImages } from '~/widgets/RebuyDynamicBundleProducts/BundleImages';\nimport { BundleSelection } from '~/widgets/RebuyDynamicBundleProducts/BundleSelection';\nimport type { BundleProduct, RebuyDynamicBundleProductsProps } from '~/widgets/RebuyDynamicBundleProducts/types';\nimport { BundlePrice } from './BundlePrice';\nimport styles from './RebuyDynamicBundleProducts.module.css';\n\nexport const RebuyDynamicBundleProducts = (props: RebuyDynamicBundleProductsProps) => {\n const {\n addToCartBtnText = 'Add to cart',\n addToCartCallback,\n customTitle = `These pair with ${props.product?.title}`,\n customTitleLevel = 'h2',\n customTitleStyle,\n isHydrogenReact,\n product,\n products = [],\n } = props;\n const [bundleProducts, setBundleProducts] = useState<BundleProduct[]>([]);\n\n // Initializiation\n useEffect(() => {\n const mainProduct: BundleProduct = convertToRebuyProduct(isHydrogenReact || false, product);\n\n const formattedProducts = products.map((product) => {\n return {\n ...product,\n selected: true,\n selectedVariant: product.variants.nodes[0],\n };\n });\n\n setBundleProducts([mainProduct, ...formattedProducts]);\n }, [product, products, isHydrogenReact]);\n\n const onToggleBundleItem = useCallback(\n (product: BundleProduct) => {\n product.selected = !product.selected;\n\n setBundleProducts([...bundleProducts]);\n },\n [bundleProducts]\n );\n\n const onSelectVariant = useCallback(\n (product: BundleProduct, variant_id: string) => {\n const variant = product.variants.nodes.find(({ id }) => id === variant_id);\n\n if (variant) {\n product.selectedVariant = variant;\n product.selected = variant.availableForSale || false;\n\n setBundleProducts([...bundleProducts]);\n }\n },\n [bundleProducts]\n );\n\n if (products.length === 0) {\n console.log('RebuyDynamicBundleProducts: No products found');\n\n return null;\n }\n\n return (\n <section className={styles.container}>\n <Title level={getTitleLevel(customTitleLevel)} style={customTitleStyle} text={customTitle} />\n <div className={styles.bundleContainer}>\n <BundleImages products={bundleProducts} />\n <BundlePrice products={bundleProducts} />\n\n <div className={styles.addCartBtnContainer}>\n <AddToCartBtn\n addToCartBtnText={addToCartBtnText}\n addToCartCallback={addToCartCallback}\n disabled={bundleProducts.filter((product) => product.selected).length === 0}\n isHydrogenReact={isHydrogenReact}\n selectedVariants={bundleProducts\n .filter((product) => product.selected)\n .map((product) => {\n return product.selectedVariant;\n })}\n />\n </div>\n\n <BundleSelection\n onSelectVariant={onSelectVariant}\n onToggleBundleItem={onToggleBundleItem}\n products={bundleProducts}\n />\n </div>\n </section>\n );\n};\n", "import type { RebuyProductVariant } from '~/types/rebuyCustom';\nimport type { HydrogenProduct } from '~/types/shopify';\n\nexport const convertToRebuyProduct = (isHydrogenReact: boolean, product?: HydrogenProduct) => {\n const mainProductVariants: RebuyProductVariant[] = isHydrogenReact\n ? product?.variants?.nodes?.map((variant) => {\n return {\n ...variant,\n };\n }) || []\n : product?.adjacentVariants.map((variant) => {\n return {\n availableForSale: variant.availableForSale,\n compareAtPriceV2: {\n amount: variant.compareAtPrice?.amount || '',\n currencyCode: variant.compareAtPrice?.currencyCode || 'USD',\n },\n id: variant.id,\n image: {\n altText: variant.image?.altText || '',\n height: variant.image?.height || 100,\n id: variant.image?.id || '',\n url: variant.image?.url || '',\n width: variant.image?.width || 100,\n },\n priceV2: {\n amount: variant.price.amount || '',\n currencyCode: variant.price.currencyCode || 'USD',\n },\n product: {\n handle: product.handle,\n id: product.id,\n title: product.title,\n vendor: product.vendor,\n },\n selectedOptions: variant.selectedOptions,\n sku: variant.sku || '',\n title: variant.title || '',\n };\n }) || [];\n\n return isHydrogenReact\n ? {\n collections: {\n nodes:\n product?.collections.nodes.map((collection) => {\n return {\n handle: collection.handle,\n };\n }) || [],\n },\n compareAtPriceRange: {\n maxVariantCompareAtPrice: null,\n minVariantCompareAtPrice: null,\n },\n description: product?.description || '',\n descriptionHtml: product?.descriptionHtml || '',\n featuredImage: {\n altText: product?.featuredImage?.altText || '',\n height: product?.featuredImage?.height || 100,\n id: product?.featuredImage?.id || '',\n url: product?.featuredImage?.url || '',\n width: product?.featuredImage?.width || 100,\n },\n handle: product?.handle || '',\n id: product?.id || '',\n images: [{ altText: '', height: 100, id: '', url: '', width: 100 }],\n media: [],\n metafields: [],\n options: [],\n priceRange: product?.priceRange || {\n maxVariantPrice: { amount: '0', currencyCode: 'USD' },\n minVariantPrice: { amount: '0', currencyCode: 'USD' },\n },\n selected: true,\n selectedOptions:\n product?.selectedVariant?.selectedOptions?.reduce((acc, option) => {\n return { ...acc, [option.name]: option.value };\n }, {}) || {},\n selectedSellingPlan: {},\n selectedSellingPlanAllocation: {},\n selectedVariant: {\n availableForSale: product?.selectedVariant?.availableForSale || false,\n compareAtPriceV2: {\n amount: product?.selectedVariant?.compareAtPrice?.amount || '',\n currencyCode: product?.selectedVariant?.compareAtPrice?.currencyCode || 'USD',\n },\n id: product?.selectedVariant?.id || '',\n image: {\n altText: product?.selectedVariant?.image?.altText || '',\n height: product?.selectedVariant?.image?.height || 100,\n id: product?.selectedVariant?.image?.id || '',\n url: product?.selectedVariant?.image?.url || '',\n width: product?.selectedVariant?.image?.width || 100,\n },\n priceV2: {\n amount: product?.selectedVariant?.price.amount || '',\n currencyCode: product?.selectedVariant?.price.currencyCode || 'USD',\n },\n product: {\n handle: product?.handle || '',\n id: product?.id || '',\n title: product?.title || '',\n vendor: product?.vendor || '',\n },\n selectedOptions: product?.selectedVariant?.selectedOptions || [],\n sku: product?.selectedVariant?.sku || '',\n title: product?.selectedVariant?.title || '',\n },\n sellingPlanGroups: [],\n seo: {\n description: product?.seo?.description || '',\n title: product?.seo?.title || '',\n },\n title: product?.title || '',\n variants: {\n nodes: mainProductVariants,\n },\n vendor: product?.vendor || '',\n }\n : {\n collections: {\n nodes: [],\n },\n compareAtPriceRange: {\n maxVariantCompareAtPrice: null,\n minVariantCompareAtPrice: null,\n },\n description: product?.description || '',\n descriptionHtml: product?.descriptionHtml || '',\n featuredImage: {\n altText: product?.selectedOrFirstAvailableVariant?.image?.altText || '',\n height: product?.selectedOrFirstAvailableVariant?.image?.height || 100,\n id: product?.selectedOrFirstAvailableVariant?.image?.id || '',\n url: product?.selectedOrFirstAvailableVariant?.image?.url || '',\n width: product?.selectedOrFirstAvailableVariant?.image?.width || 100,\n },\n handle: product?.handle || '',\n id: product?.id || '',\n images: [\n {\n altText: product?.selectedOrFirstAvailableVariant?.image?.altText || '',\n height: product?.selectedOrFirstAvailableVariant?.image?.height || 100,\n id: product?.selectedOrFirstAvailableVariant?.image?.id || '',\n url: product?.selectedOrFirstAvailableVariant?.image?.url || '',\n width: product?.selectedOrFirstAvailableVariant?.image?.width || 100,\n },\n ],\n media: [],\n metafields: [],\n options: [],\n priceRange: product?.priceRange || {\n maxVariantPrice: { amount: '0', currencyCode: 'USD' },\n minVariantPrice: { amount: '0', currencyCode: 'USD' },\n },\n selected: true,\n selectedOptions:\n product?.selectedOrFirstAvailableVariant?.selectedOptions?.reduce((acc, option) => {\n return { ...acc, [option.name]: option.value };\n }, {}) || {},\n selectedSellingPlan: {},\n selectedSellingPlanAllocation: {},\n selectedVariant: {\n availableForSale: product?.selectedOrFirstAvailableVariant?.availableForSale || false,\n compareAtPriceV2: {\n amount: product?.selectedOrFirstAvailableVariant?.compareAtPrice?.amount || '',\n currencyCode: product?.selectedOrFirstAvailableVariant?.compareAtPrice?.currencyCode || 'USD',\n },\n id: product?.selectedOrFirstAvailableVariant?.id || '',\n image: {\n altText: product?.selectedOrFirstAvailableVariant?.image?.altText || '',\n height: product?.selectedOrFirstAvailableVariant?.image?.height || 100,\n id: product?.selectedOrFirstAvailableVariant?.image?.id || '',\n url: product?.selectedOrFirstAvailableVariant?.image?.url || '',\n width: product?.selectedOrFirstAvailableVariant?.image?.width || 100,\n },\n priceV2: {\n amount: product?.selectedOrFirstAvailableVariant?.price.amount || '',\n currencyCode: product?.selectedOrFirstAvailableVariant?.price.currencyCode || 'USD',\n },\n product: {\n handle: product?.handle || '',\n id: product?.id || '',\n title: product?.title || '',\n vendor: product?.vendor || '',\n },\n selectedOptions: product?.selectedOrFirstAvailableVariant?.selectedOptions || [],\n sku: product?.selectedOrFirstAvailableVariant?.sku || '',\n title: product?.selectedOrFirstAvailableVariant?.title || '',\n },\n sellingPlanGroups: [],\n seo: {\n description: null,\n title: null,\n },\n title: product?.title || '',\n variants: {\n nodes: [\n {\n availableForSale: product?.selectedOrFirstAvailableVariant?.availableForSale || false,\n compareAtPriceV2: {\n amount: product?.selectedOrFirstAvailableVariant?.compareAtPrice?.amount || '',\n currencyCode:\n product?.selectedOrFirstAvailableVariant?.compareAtPrice?.currencyCode || 'USD',\n },\n id: product?.selectedOrFirstAvailableVariant?.id || '',\n image: {\n altText: product?.selectedOrFirstAvailableVariant?.image?.altText || '',\n height: product?.selectedOrFirstAvailableVariant?.image?.height || 100,\n id: product?.selectedOrFirstAvailableVariant?.image?.id || '',\n url: product?.selectedOrFirstAvailableVariant?.image?.url || '',\n width: product?.selectedOrFirstAvailableVariant?.image?.width || 100,\n },\n priceV2: {\n amount: product?.selectedOrFirstAvailableVariant?.price.amount || '',\n currencyCode: product?.selectedOrFirstAvailableVariant?.price.currencyCode || 'USD',\n },\n product: {\n handle: product?.handle || '',\n id: product?.id || '',\n title: product?.title || '',\n vendor: product?.vendor || '',\n },\n selectedOptions: product?.selectedOrFirstAvailableVariant?.selectedOptions || [],\n sku: product?.selectedOrFirstAvailableVariant?.sku || '',\n title: product?.selectedOrFirstAvailableVariant?.title || '',\n },\n ...mainProductVariants,\n ],\n },\n vendor: product?.vendor || '',\n };\n};\n", "import { Link } from '@remix-run/react';\nimport { Image } from '@shopify/hydrogen';\nimport { Fragment } from 'react';\n\nimport type { BundleProduct } from '~/widgets/RebuyDynamicBundleProducts/types';\nimport styles from '~/widgets/RebuyDynamicBundleProducts/RebuyDynamicBundleProducts.module.css';\n\nexport const BundleImages = ({ products }: { products: BundleProduct[] }) => {\n const selected = products.filter((product) => product.selected);\n\n return (\n <ul className={styles.bundleImages}>\n {products.map((product, index) => {\n const image = product.selectedVariant?.image;\n const productImage = image ? (\n <Image\n alt={image.altText || `Picture of ${product.title}`}\n className={styles.bundleImage}\n data={image}\n height={80}\n title={product.title}\n width={80}\n />\n ) : (\n // No image defined\n product.title\n );\n // Hide delimiter for first selected item\n const showDelimiter = selected[0]?.id !== product.id;\n\n return (\n <Fragment key={product.id + '-BundleImages-' + index}>\n {product.selected && (\n <>\n {showDelimiter && (\n <li className={styles.bundleImageDelimiter}>\n <span>+</span>\n </li>\n )}\n <li className=\"flex items-center\">\n {product.default ? (\n // Already on product page\n productImage\n ) : (\n // Link to product\n <Link title={product.title} to={`/products/${product.handle}`}>\n {productImage}\n </Link>\n )}\n </li>\n </>\n )}\n </Fragment>\n );\n })}\n </ul>\n );\n};\n", "/* stylelint-disable selector-class-pattern */\n\n/* TODO: Update classes to BEM naming convention (rb-{block}__{element}--{modifier}) */\n\n/* RebuyDynamicBundleProducts.tsx */\n.container {\n padding: 32px 16px;\n background-color: #f0f4f8;\n border-radius: 16px;\n max-width: 768px;\n margin: 16px 0;\n\n @media (width >= 768px) {\n padding: 64px;\n }\n}\n\n.addCartBtnContainer {\n display: flex;\n justify-content: center;\n}\n\n.addCartBtnContainer form {\n width: 100%;\n}\n\n.bundleContainer {\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n/* Select.tsx */\n.select {\n width: 100%;\n padding: 8px;\n border: 1px solid #ccc;\n border-radius: 4px;\n font-size: 16px;\n color: #333;\n background-color: #fff;\n\n @media (width >= 768px) {\n width: 60%;\n }\n}\n\n/* BundleSelection.tsx */\n.bundleItemRowContainer {\n margin-bottom: 16px;\n}\n\n.unselected {\n opacity: 0.5;\n}\n\n.bundleItemRow {\n display: flex;\n flex-direction: row;\n gap: 8px;\n align-items: start;\n}\n\n.bundleItemInput {\n flex-grow: 1;\n}\n\n.bundleItemLabel {\n display: flex;\n flex-direction: row;\n gap: 8px;\n cursor: pointer;\n margin-bottom: 8px;\n}\n\n/* BundleImages.tsx */\n.bundleImages {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 16px;\n justify-content: center;\n}\n\n.bundleImage {\n animation: fade-in 0.5s ease-in;\n}\n\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.bundleImageDelimiter {\n display: flex;\n align-items: center;\n}\n\n.bundleImageDelimiter span {\n font-weight: 600;\n}\n\n.compareAtPrice {\n text-decoration: line-through;\n opacity: 0.5;\n}\n", "import type { BundleProduct, BundleSelectProps } from '~/widgets/RebuyDynamicBundleProducts/types';\nimport styles from '~/widgets/RebuyDynamicBundleProducts/RebuyDynamicBundleProducts.module.css';\n\nexport const Select = ({ onSelectVariant, product }: BundleSelectProps) => {\n const getOptionsLabel = (product: BundleProduct) => {\n const options = product.variants.nodes[0].selectedOptions;\n const optionsFromKeys = options ? Object.keys(options[0]) : [];\n const optionsFromValues = options ? options.map((option) => option.name) : [];\n const useValues = optionsFromKeys.every((key) => ['name', 'value'].includes(key));\n\n // Return delimited label for available option(s) e.g. Color / Size, Scent, etc\n return (useValues ? optionsFromValues : optionsFromKeys).join(' / ');\n };\n\n return (\n product && (\n <select\n aria-label=\"select variant\"\n className={styles.select}\n onChange={(e) => onSelectVariant(product, e.target.value)}\n value={product.selectedVariant.id}\n >\n <optgroup label={getOptionsLabel(product)}>\n {product.variants.nodes.map(({ id, title }) => (\n <option key={id + '-BundleVariant'} value={id}>\n {title}\n </option>\n ))}\n </optgroup>\n </select>\n )\n );\n};\n", "import { RebuyProductPrice } from '~/components/ProductPrice';\nimport { Select } from '~/widgets/RebuyDynamicBundleProducts/Select';\nimport type { BundleSelectionProps } from '~/widgets/RebuyDynamicBundleProducts/types';\nimport styles from '~/widgets/RebuyDynamicBundleProducts/RebuyDynamicBundleProducts.module.css';\n\nexport const BundleSelection = ({ onSelectVariant, onToggleBundleItem, products }: BundleSelectionProps) => {\n return (\n <ul>\n {products.map((product, index) => {\n const { availableForSale } = product.selectedVariant;\n const isOutOfStock = !availableForSale;\n\n return (\n <li\n className={`${styles.bundleItemRowContainer} ${!product.selected && styles.unselected}`}\n key={product.id + '-BundleSelection' + index}\n >\n <div className={styles.bundleItemRow}>\n <input\n checked={product.selected && availableForSale}\n className=\"mt-1 rounded-sm accent-black cursor-pointer\"\n disabled={isOutOfStock}\n id={`${product.id}-toggle`}\n onChange={() => onToggleBundleItem(product)}\n type=\"checkbox\"\n value={product.id}\n />\n <div className={styles.bundleItemInput}>\n <label className={styles.bundleItemLabel} htmlFor={`${product.id}-toggle`}>\n {isOutOfStock && <b>SOLD OUT</b>}\n {product.default && <b>This item:</b>}\n {product.title}\n\n <RebuyProductPrice selectedVariant={product.selectedVariant} />\n </label>\n\n {product.variants.nodes.length > 1 && (\n <Select onSelectVariant={onSelectVariant} product={product} />\n )}\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n );\n};\n", "import { Money } from '@shopify/hydrogen';\n\nimport type { CurrencyCode, MoneyV2 } from '@shopify/hydrogen-react/storefront-api-types';\nimport type { BundleProduct } from '~/widgets/RebuyDynamicBundleProducts/types';\nimport styles from './RebuyDynamicBundleProducts.module.css';\n\nexport const BundlePrice = ({ products }: { products: BundleProduct[] }) => {\n const isDisabled = products.filter((product) => product.selected).length < 1;\n\n const totalBundlePrice = () => {\n let total = 0;\n let currencyCode = 'USD' as CurrencyCode;\n\n for (const product of products) {\n if (product.selected && product.selectedVariant) {\n const { priceV2: price } = product.selectedVariant;\n\n total += Number(price?.amount);\n currencyCode = (price?.currencyCode || 'USD') as CurrencyCode;\n }\n }\n\n return {\n amount: String(total),\n currencyCode,\n };\n };\n\n const totalBundleCompareAtPrice = () => {\n let compareAtTotal = 0;\n let currencyCode = 'USD' as CurrencyCode;\n\n for (const product of products) {\n if (product.selected && product.selectedVariant) {\n const { compareAtPriceV2: compareAtPrice, priceV2: price } = product.selectedVariant;\n\n currencyCode = (price?.currencyCode || 'USD') as CurrencyCode;\n compareAtTotal += Number((compareAtPrice || price)?.amount);\n }\n }\n\n return {\n amount: String(compareAtTotal),\n currencyCode,\n };\n };\n const isDiscounted = (\n price: { amount: string; currencyCode: string } | null,\n compareAtPrice: { amount: string; currencyCode: string } | null\n ) => Number(compareAtPrice?.amount) > Number(price?.amount);\n\n const price = totalBundlePrice();\n const compareAtPrice = totalBundleCompareAtPrice();\n\n const CompareAtPrice = ({ data: compareAtPrice }: { data: MoneyV2 | null }) => {\n return (\n compareAtPrice && (\n <Money as=\"span\" className={styles.compareAtPrice} data={compareAtPrice} withoutTrailingZeros />\n )\n );\n };\n\n return (\n products.length > 0 && (\n <div className=\"flex items-center flex-col\">\n {!isDisabled && (\n <p className=\"flex items-center gap-2 mb-2\">\n <span>Total Price:</span>\n <Money as=\"span\" data={price} withoutTrailingZeros />\n {isDiscounted(price, compareAtPrice) && <CompareAtPrice data={compareAtPrice} />}\n </p>\n )}\n </div>\n )\n );\n};\n", "import { Money } from '@shopify/hydrogen-react';\nimport type { CurrencyCode, MoneyV2 } from '@shopify/hydrogen-react/storefront-api-types';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { AddToCartBtn } from '~/components/AddToCartBtn';\nimport { Title } from '~/components/Title';\nimport { getTitleLevel } from '~/hooks/titleLevel';\nimport type { RebuyProduct } from '~/types/rebuyCustom';\nimport { convertToRebuyProduct } from '~/utils/convertToRebuyProduct';\nimport type { RebuyProductAddOnProps } from '~/widgets/RebuyProductAddOns/types';\nimport { RebuyProductAddOnCard } from './RebuyProductAddOnCard';\nimport styles from './RebuyProductAddOns.module.css';\n\nexport const RebuyProductAddOns = (props: RebuyProductAddOnProps) => {\n const {\n addToCartCallback,\n customTitle = `These pair with ${props.product?.title}`,\n customTitleLevel = 'h2',\n customTitleStyle,\n includeMainProduct = false,\n isHydrogenReact,\n learnMoreText = 'Learn more',\n outOfStockText = 'Out of stock',\n product,\n products = [],\n addToCartBtnText = 'Add to cart',\n subtotalText = 'Add-ons Subtotal: ',\n withProductText = `With ${product?.title}: `,\n } = props;\n\n const [addedItems, setAddedItems] = useState<RebuyProduct[]>(products);\n\n const [subtotalWithProduct, setSubtotalWithProduct] = useState<MoneyV2>();\n const [subtotalWithOutProduct, setSubtotalWithOutProduct] = useState<MoneyV2>();\n\n useEffect(() => {\n let initialTotal = 0;\n let currencyCode = 'USD' as CurrencyCode;\n\n products.map((product) => {\n product.selectedVariant = product.variants.nodes[0];\n product.selected = true;\n\n if (product.selectedVariant?.priceV2) {\n initialTotal += Number(product.selectedVariant.priceV2.amount);\n currencyCode = (product.selectedVariant.priceV2.currencyCode || 'USD') as CurrencyCode;\n }\n });\n\n setSubtotalWithProduct({\n amount: String(initialTotal),\n currencyCode,\n });\n\n setSubtotalWithOutProduct({\n amount: String(\n initialTotal -\n Number(\n isHydrogenReact\n ? product?.selectedVariant?.price.amount\n : product?.selectedOrFirstAvailableVariant?.price.amount\n )\n ),\n currencyCode,\n });\n setAddedItems(products);\n\n if (includeMainProduct) {\n setAddedItems([convertToRebuyProduct(isHydrogenReact || false, product), ...products]);\n } else {\n setAddedItems(products);\n }\n }, [products, product, isHydrogenReact, includeMainProduct]);\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>, product: RebuyProduct) => {\n const newProducts = [...products];\n const productIndex = newProducts.findIndex((p) => p.id === product.id);\n\n if (productIndex !== -1) {\n newProducts[productIndex] = {\n ...newProducts[productIndex],\n selected: event.target.checked,\n };\n\n product.selected = event.target.checked;\n\n if (event.target.checked) {\n setAddedItems((prev) => [...prev, product]);\n } else {\n setAddedItems((prev) => prev.filter((item) => item.id !== product.id));\n }\n }\n },\n [products]\n );\n\n useEffect(() => {\n let total = 0;\n let currencyCode = 'USD' as CurrencyCode;\n\n addedItems.forEach((item) => {\n if (item.selected && item.selectedVariant?.priceV2) {\n total += Number(item.selectedVariant.priceV2.amount);\n currencyCode = (item.selectedVariant.priceV2.currencyCode || 'USD') as CurrencyCode;\n }\n });\n\n setSubtotalWithProduct({\n amount: String(total),\n currencyCode,\n });\n\n setSubtotalWithOutProduct({\n amount: String(\n total -\n Number(\n isHydrogenReact\n ? product?.selectedVariant?.price.amount\n : product?.selectedOrFirstAvailableVariant?.price.amount\n )\n ),\n currencyCode,\n });\n }, [addedItems, product, isHydrogenReact]);\n\n if (products.length === 0) {\n console.log('RebuyProductAddOns: No products found');\n\n return null;\n }\n\n return (\n <div className={styles.container}>\n <Title level={getTitleLevel(customTitleLevel)} style={customTitleStyle} text={customTitle} />\n <ul className={styles.productAddOnsList}>\n {products.map((product) => (\n <li key={product.id}>\n <RebuyProductAddOnCard\n handleChange={handleChange}\n learnMoreText={learnMoreText}\n outOfStockText={outOfStockText}\n product={product}\n titleLevel={getTitleLevel(customTitleLevel, true)}\n />\n </li>\n ))}\n </ul>\n <div className={styles.productAddOnsFooter}>\n <div className={styles.moneyContainer}>\n {subtotalText}\n {subtotalWithOutProduct && <Money data={subtotalWithOutProduct} withoutTrailingZeros />}\n </div>\n {includeMainProduct && (\n <div className={styles.moneyContainer}>\n {withProductText}\n {subtotalWithProduct && <Money data={subtotalWithProduct} withoutTrailingZeros />}\n </div>\n )}\n <div className={styles.addCartBtnContainer}>\n {includeMainProduct ? (\n <AddToCartBtn\n addToCartBtnText={addToCartBtnText}\n addToCartCallback={addToCartCallback}\n disabled={addedItems.length === 0}\n isHydrogenReact={isHydrogenReact}\n moneyData={subtotalWithProduct}\n selectedVariants={addedItems.map((item) => item.selectedVariant)}\n />\n ) : (\n <AddToCartBtn\n addToCartBtnText={addToCartBtnText}\n addToCartCallback={addToCartCallback}\n disabled={addedItems.length === 0}\n isHydrogenReact={isHydrogenReact}\n moneyData={subtotalWithOutProduct}\n selectedVariants={addedItems.map((item) => item.selectedVariant)}\n />\n )}\n </div>\n </div>\n </div>\n );\n};\n", "import { Link } from '@remix-run/react';\nimport { Image } from '@shopify/hydrogen';\n\nimport { RebuyProductPrice } from '~/components/ProductPrice';\nimport { Title } from '~/components/Title';\nimport type { RebuyProductAddOnCardProps } from './types';\nimport styles from './RebuyProductAddOns.module.css';\n\nexport const RebuyProductAddOnCard = ({\n handleChange,\n learnMoreText,\n outOfStockText,\n product,\n titleLevel,\n}: RebuyProductAddOnCardProps) => {\n const { availableForSale, image } = product.selectedVariant || {};\n\n return (\n <label className={styles.addOnCard} htmlFor={product.id}>\n <div className={styles.addOnCardContent}>\n <input\n checked={Boolean(product.selected)}\n className={styles.addOnCardInput}\n disabled={!product.variants.nodes[0].availableForSale}\n id={product.id}\n name={product.title}\n onChange={(event) => handleChange(event, product)}\n type=\"checkbox\"\n value=\"\"\n />\n <div className={styles.addOnCardContentImage}>\n {image && (\n <Image\n alt={image.altText || `Picture of ${product.title}`}\n data={image}\n height={150}\n width={300}\n />\n )}\n </div>\n\n <div className={styles.addOnCardTextContent}>\n {!availableForSale && <p className={styles.addOnCardOutOfStock}>{outOfStockText}</p>}\n\n <Title level={titleLevel} text={product.title} />\n\n <RebuyProductPrice selectedVariant={product.selectedVariant} />\n <Link className={styles.addOnCardLearnMore} to={`/products/${product.handle}`}>\n {learnMoreText}\n </Link>\n </div>\n </div>\n </label>\n );\n};\n", "/* stylelint-disable selector-class-pattern */\n\n/* TODO: Update classes to BEM naming convention (rb-{block}__{element}--{modifier}) */\n.container {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin: 16px 0;\n background-color: #f0f4f8;\n border-radius: 16px;\n padding: 32px 16px;\n\n @media (width >= 768px) {\n padding: 64px;\n }\n}\n\n.productAddOnsList {\n display: grid;\n grid-template-columns: repeat(1, minmax(0, 1fr));\n gap: 8px;\n\n @media (width >= 768px) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n @media (width >= 1024px) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n}\n\n.addOnCard {\n cursor: pointer;\n\n &:hover {\n opacity: 0.8;\n }\n}\n\n.addOnCardContent {\n display: flex;\n gap: 8px;\n flex-direction: column;\n position: relative;\n padding: 16px;\n border-radius: 8px;\n border: 2px solid #e2e5ea;\n background-color: #fff;\n}\n\n.addOnCardInput {\n position: absolute;\n top: 10px;\n right: 10px;\n z-index: 1;\n appearance: none;\n border-radius: 50%;\n width: 24px;\n height: 24px;\n background-color: #f0f0f0;\n border: 1px solid #ddd;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n}\n\n.addOnCardInput:checked {\n background-color: #4a7dff;\n border-color: #4a7dff;\n}\n\n.addOnCardInput:checked::after {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) rotate(45deg);\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 2px 2px 0;\n margin-top: -1px;\n}\n\n.addOnCardContentImage {\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n margin: 0 auto;\n position: relative;\n}\n\n.addOnCardOutOfStock {\n border-radius: 4px;\n background-color: #e2e5ea;\n font-size: 12px;\n}\n\n.addOnCardTextContent {\n display: flex;\n flex-direction: column;\n}\n\n.addOnCardLearnMore {\n text-decoration: underline;\n color: gray;\n font-size: 14px;\n}\n\n.addCartBtnContainer {\n display: flex;\n justify-content: center;\n padding-top: 16px;\n}\n\n.addCartBtnContainer form {\n width: 100%;\n}\n\n.moneyContainer {\n display: flex;\n align-items: center;\n gap: 8px;\n justify-content: center;\n}\n", "/* stylelint-disable selector-class-pattern */\n\n/* TODO: Update classes to BEM naming convention (rb-{block}__{element}--{modifier}) */\n.container {\n padding: 32px 16px;\n background-color: #f0f4f8;\n border-radius: 16px;\n margin: 16px 0;\n\n @media (width >= 768px) {\n padding: 64px;\n }\n}\n\n.productGrid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 32px;\n list-style: none;\n}\n", "import { ProductCard } from '~/components/ProductCard';\nimport { Title } from '~/components/Title';\nimport { getTitleLevel } from '~/hooks/titleLevel';\nimport type { RebuyProductRecommendationsProps } from './types';\nimport styles from './RebuyProductRecommendations.module.css';\n\nexport const RebuyProductRecommendations = (props: RebuyProductRecommendationsProps) => {\n const {\n addToCartBtnText = 'Add to cart',\n addToCartCallback,\n customTitle = `These pair with ${props.product?.title}`,\n customTitleLevel = 'h2',\n customTitleStyle,\n products = [],\n } = props;\n\n if (products.length === 0) {\n console.log('RebuyProductRecommendations: No products found');\n\n return null;\n }\n\n return (\n <section className={styles.container}>\n <Title level={getTitleLevel(customTitleLevel)} style={customTitleStyle} text={customTitle} />\n <ul className={styles.productGrid}>\n {products.map((product) => (\n <li className={styles.productItem} key={product.id}>\n <ProductCard\n addToCartBtnText={addToCartBtnText}\n addToCartCallback={addToCartCallback}\n isHydrogenReact={props.isHydrogenReact}\n product={product}\n productCardTitleLevel={getTitleLevel(customTitleLevel, true)}\n />\n </li>\n ))}\n </ul>\n </section>\n );\n};\n"],
5
+ "mappings": "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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+OrC,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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",
6
+ "names": ["Utilities", "import_react", "cart", "Utilities", "import_react", "import_jsx_runtime", "import_rebuy", "Utilities", "import_react", "request", "metadata", "product", "props", "React", "import_react", "import_hydrogen", "import_hydrogen", "button", "import_jsx_runtime", "import_hydrogen_react", "import_jsx_runtime", "import_jsx_runtime", "import_hydrogen", "priceContainer", "compareAtPrice", "import_jsx_runtime", "price", "compareAtPrice", "import_jsx_runtime", "select", "import_jsx_runtime", "product", "container", "productInfo", "import_jsx_runtime", "product", "container", "productGrid", "productItem", "import_jsx_runtime", "import_react", "import_react", "import_hydrogen", "container", "addCartBtnContainer", "bundleContainer", "select", "bundleItemRowContainer", "unselected", "bundleItemRow", "bundleItemInput", "bundleItemLabel", "bundleImages", "bundleImage", "fade-in", "bundleImageDelimiter", "compareAtPrice", "import_jsx_runtime", "import_jsx_runtime", "product", "import_jsx_runtime", "import_hydrogen", "import_jsx_runtime", "price", "compareAtPrice", "import_jsx_runtime", "product", "import_hydrogen_react", "import_react", "import_react", "import_hydrogen", "container", "productAddOnsList", "addOnCard", "addOnCardContent", "addOnCardInput", "addOnCardContentImage", "addOnCardOutOfStock", "addOnCardTextContent", "addOnCardLearnMore", "addCartBtnContainer", "moneyContainer", "import_jsx_runtime", "import_jsx_runtime", "product", "container", "productGrid", "import_jsx_runtime"]
7
+ }