@gfed-medusa/sf-lib-products 1.5.3 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/components/image-gallery/index.d.ts +2 -2
  2. package/dist/components/image-gallery/index.d.ts.map +1 -1
  3. package/dist/components/pagination/index.d.ts +2 -2
  4. package/dist/components/product-actions/index.d.ts +2 -2
  5. package/dist/components/product-actions/index.js +1 -1
  6. package/dist/components/product-actions/index.js.map +1 -1
  7. package/dist/components/product-actions/mobile-actions.d.ts.map +1 -1
  8. package/dist/components/product-actions/mobile-actions.js +19 -3
  9. package/dist/components/product-actions/mobile-actions.js.map +1 -1
  10. package/dist/components/product-onboarding-cta/index.d.ts +2 -2
  11. package/dist/components/product-price/index.d.ts +2 -2
  12. package/dist/components/product-price/index.d.ts.map +1 -1
  13. package/dist/components/product-tabs/accordion.js +3 -6
  14. package/dist/components/product-tabs/accordion.js.map +1 -1
  15. package/dist/components/refinement-list/index.d.ts +2 -2
  16. package/dist/components/refinement-list/index.d.ts.map +1 -1
  17. package/dist/components/refinement-list/sort-products/index.d.ts +2 -2
  18. package/dist/components/refinement-list/sort-products/index.d.ts.map +1 -1
  19. package/dist/components/related-products/index.d.ts +2 -2
  20. package/dist/components/related-products/index.d.ts.map +1 -1
  21. package/dist/components/skeleton-product-grid/index.d.ts +2 -2
  22. package/dist/components/skeleton-product-grid/index.d.ts.map +1 -1
  23. package/dist/components/skeleton-product-preview/index.d.ts +2 -2
  24. package/dist/components/skeleton-product-preview/index.d.ts.map +1 -1
  25. package/dist/components/skeleton-related-products/index.d.ts +2 -2
  26. package/dist/lib/gql/fragments/cart.d.ts +9 -9
  27. package/dist/lib/gql/fragments/cart.d.ts.map +1 -1
  28. package/dist/lib/gql/fragments/product.d.ts +15 -15
  29. package/dist/lib/gql/fragments/product.d.ts.map +1 -1
  30. package/dist/lib/gql/mutations/cart.d.ts +10 -10
  31. package/dist/lib/gql/mutations/cart.d.ts.map +1 -1
  32. package/dist/lib/gql/queries/cart.d.ts +2 -2
  33. package/dist/lib/gql/queries/cart.d.ts.map +1 -1
  34. package/dist/lib/gql/queries/product.d.ts +12 -12
  35. package/dist/lib/gql/queries/product.d.ts.map +1 -1
  36. package/dist/templates/paginated-products/index.d.ts +2 -2
  37. package/dist/templates/product-actions-wrapper/index.d.ts +2 -2
  38. package/dist/templates/product-info/index.d.ts +2 -2
  39. package/dist/templates/store-template/index.d.ts +2 -2
  40. package/dist/templates/store-template/index.d.ts.map +1 -1
  41. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  import { ProductImage } from "../../types/graphql.js";
2
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime13 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/image-gallery/index.d.ts
5
5
  type ImageGalleryProps = {
@@ -7,7 +7,7 @@ type ImageGalleryProps = {
7
7
  };
8
8
  declare const ImageGallery: ({
9
9
  images
10
- }: ImageGalleryProps) => react_jsx_runtime0.JSX.Element;
10
+ }: ImageGalleryProps) => react_jsx_runtime13.JSX.Element;
11
11
  //#endregion
12
12
  export { ImageGallery as default };
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/image-gallery/index.tsx"],"sourcesContent":[],"mappings":";;;;KAMK,iBAAA;UACK;;AAHqC,cAMzC,YAJgB,EAAA,CAAA;EAAA;AACA,CAAZ,EAGwB,iBAHZ,EAAA,GAG6B,kBAAA,CAAA,GAAA,CAAA,OAH7B"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/image-gallery/index.tsx"],"sourcesContent":[],"mappings":";;;;KAMK,iBAAA;UACK;;AAHqC,cAMzC,YAJgB,EAAA,CAAA;EAAA;AACA,CAAZ,EAGwB,iBAHZ,EAAA,GAG6B,mBAAA,CAAA,GAAA,CAAA,OAH7B"}
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime7 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/pagination/index.d.ts
4
4
  declare function Pagination({
@@ -9,7 +9,7 @@ declare function Pagination({
9
9
  page: number;
10
10
  totalPages: number;
11
11
  'data-testid'?: string;
12
- }): react_jsx_runtime0.JSX.Element;
12
+ }): react_jsx_runtime7.JSX.Element;
13
13
  //#endregion
14
14
  export { Pagination };
15
15
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { Product } from "../../types/graphql.js";
2
- import * as react_jsx_runtime1 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime8 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/product-actions/index.d.ts
5
5
  type ProductActionsProps = {
@@ -13,7 +13,7 @@ declare function ProductActions({
13
13
  regionId,
14
14
  disabled,
15
15
  enableMobileActions
16
- }: ProductActionsProps): react_jsx_runtime1.JSX.Element;
16
+ }: ProductActionsProps): react_jsx_runtime8.JSX.Element;
17
17
  //#endregion
18
18
  export { ProductActionsProps, ProductActions as default };
19
19
  //# sourceMappingURL=index.d.ts.map
@@ -133,7 +133,7 @@ function ProductActions({ product, regionId, disabled, enableMobileActions = tru
133
133
  className: "h-10 w-full",
134
134
  isLoading: status === AddToCartStatus.ADDING,
135
135
  "data-testid": "add-product-button",
136
- children: !selectedVariant ? "Select variant" : stockStatus === "checking" ? "Checking stock" : !inStock || !isValidVariant ? "Out of stock" : "Add to cart"
136
+ children: !selectedVariant ? "Select size" : stockStatus === "checking" ? "Checking stock" : !inStock || !isValidVariant ? "Out of stock" : "Add to cart"
137
137
  }),
138
138
  enableMobileActions && /* @__PURE__ */ jsx(mobile_actions_default, {
139
139
  product,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["OptionSelect","MobileActions"],"sources":["../../../src/components/product-actions/index.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useParams } from 'next/navigation';\n\nimport { isEqual } from 'lodash';\n\nimport { ErrorMessage } from '@gfed-medusa/sf-lib-common/components/error-message';\nimport { mutateCart } from '@gfed-medusa/sf-lib-common/lib/hooks/use-cart';\nimport { Divider } from '@gfed-medusa/sf-lib-ui/components/divider';\nimport { HttpTypes } from '@medusajs/types';\nimport { Button } from '@medusajs/ui';\n\nimport OptionSelect from '@/components/product-actions/option-select';\nimport { addToCart } from '@/lib/data/cart';\nimport { useIntersection } from '@/lib/hooks/use-intersection';\nimport { useProductPrice } from '@/lib/hooks/use-product-price';\nimport { Product, ProductVariant } from '@/types/graphql';\n\nimport ProductPrice from '../product-price';\nimport MobileActions from './mobile-actions';\n\nexport type ProductActionsProps = {\n product: Product;\n regionId: string;\n disabled?: boolean;\n enableMobileActions?: boolean;\n};\n\nenum AddToCartStatus {\n IDLE = 'idle',\n ADDING = 'adding',\n SUCCESS = 'success',\n ERROR = 'error',\n}\n\nconst optionsAsKeymap = (\n variantOptions:\n | HttpTypes.StoreProductVariant['options']\n | ProductVariant['options']\n | null\n | undefined\n) => {\n return variantOptions?.reduce((acc: Record<string, string>, varopt: any) => {\n acc[varopt.optionId] = varopt.value;\n return acc;\n }, {});\n};\n\nexport default function ProductActions({\n product,\n regionId,\n disabled,\n enableMobileActions = true,\n}: ProductActionsProps) {\n const [options, setOptions] = useState<Record<string, string | undefined>>(\n {}\n );\n const [status, setStatus] = useState<AddToCartStatus>(AddToCartStatus.IDLE);\n const countryCode = useParams().countryCode as string;\n\n // If there is only 1 variant, preselect the options\n useEffect(() => {\n if (product?.variants && product.variants.length === 1) {\n const variantOptions = optionsAsKeymap(\n product.variants[0]?.options || null\n );\n setOptions(variantOptions ?? {});\n }\n }, [product.variants]);\n\n const selectedVariant = useMemo(() => {\n if (!product.variants || product.variants.length === 0) {\n return;\n }\n\n return product.variants.find((v) => {\n const variantOptions = optionsAsKeymap(v.options);\n return isEqual(variantOptions, options);\n });\n }, [product.variants, options]);\n\n // update the options when a variant is selected\n const setOptionValue = (optionId: string, value: string) => {\n setOptions((prev) => ({\n ...prev,\n [optionId]: value,\n }));\n };\n\n //check if the selected options produce a valid variant\n const isValidVariant = useMemo(() => {\n return product.variants?.some((v) => {\n const variantOptions = optionsAsKeymap(v.options);\n return isEqual(variantOptions, options);\n });\n }, [product.variants, options]);\n\n // check if the selected variant is in stock\n const { product: pricingProduct, isLoading: pricingLoading } =\n useProductPrice(product.id, regionId);\n\n const pricingVariant = useMemo(() => {\n if (!selectedVariant?.id) {\n return null;\n }\n return (pricingProduct?.variants ?? []).find(\n (v: any) => v.id === selectedVariant.id\n );\n }, [pricingProduct?.variants, selectedVariant?.id]);\n\n const stockStatus = useMemo(() => {\n if (!selectedVariant) {\n return 'unknown' as const;\n }\n\n if (!selectedVariant.manageInventory) {\n return 'in_stock' as const;\n }\n\n if (selectedVariant.allowBackorder) {\n return 'in_stock' as const;\n }\n\n const qty = pricingVariant?.inventoryQuantity;\n\n if (pricingLoading && typeof qty !== 'number') {\n return 'checking' as const;\n }\n\n if (typeof qty !== 'number') {\n return 'in_stock' as const;\n }\n\n return qty > 0 ? ('in_stock' as const) : ('out_of_stock' as const);\n }, [selectedVariant, pricingVariant?.inventoryQuantity, pricingLoading]);\n\n const inStock = useMemo(() => {\n // If we don't manage inventory, we can always add to cart\n if (selectedVariant && !selectedVariant.manageInventory) {\n return true;\n }\n\n // If we allow back orders on the variant, we can add to cart\n if (selectedVariant?.allowBackorder) {\n return true;\n }\n\n if (selectedVariant?.manageInventory) {\n const qty = pricingVariant?.inventoryQuantity;\n if (typeof qty === 'number') {\n return qty > 0;\n }\n // If we don't have a numeric quantity, don't block add-to-cart\n return true;\n }\n\n // Otherwise, we can't add to cart\n return false;\n }, [selectedVariant, pricingVariant?.inventoryQuantity]);\n\n const actionsRef = useRef<HTMLDivElement>(null);\n\n const inView = useIntersection(actionsRef, '0px');\n\n // add the selected variant to the cart\n const handleAddToCart = async () => {\n if (!selectedVariant?.id) return null;\n\n setStatus(AddToCartStatus.ADDING);\n\n try {\n await addToCart(\n {\n variantId: selectedVariant.id,\n quantity: 1,\n countryCode,\n }\n );\n\n mutateCart();\n\n setStatus(AddToCartStatus.SUCCESS);\n } catch (error) {\n console.log(error);\n setStatus(AddToCartStatus.ERROR);\n }\n };\n\n return (\n <>\n <div className=\"flex flex-col gap-y-2\" ref={actionsRef}>\n <div>\n {(product.variants?.length ?? 0) > 1 && (\n <div className=\"flex flex-col gap-y-4\">\n {(product.options || []).map((option) => {\n return (\n <div key={option.id}>\n <OptionSelect\n option={option}\n current={options[option.id]}\n updateOption={setOptionValue}\n title={option.title ?? ''}\n data-testid=\"product-options\"\n disabled={!!disabled || status === AddToCartStatus.ADDING}\n />\n </div>\n );\n })}\n <Divider />\n </div>\n )}\n </div>\n\n <ProductPrice\n product={product}\n variant={selectedVariant}\n regionId={regionId}\n />\n\n {status === AddToCartStatus.ERROR && (\n <ErrorMessage error=\"Failed adding product to cart. Please try again.\" />\n )}\n {status === AddToCartStatus.SUCCESS && (\n <div className=\"text-small-regular pt-2 text-green-700\">\n Successfully added product to cart\n </div>\n )}\n <Button\n onClick={handleAddToCart}\n disabled={\n !inStock ||\n !selectedVariant ||\n !!disabled ||\n status === AddToCartStatus.ADDING ||\n !isValidVariant ||\n stockStatus === 'checking'\n }\n variant=\"primary\"\n className=\"h-10 w-full\"\n isLoading={status === AddToCartStatus.ADDING}\n data-testid=\"add-product-button\"\n >\n {!selectedVariant\n ? 'Select variant'\n : stockStatus === 'checking'\n ? 'Checking stock'\n : !inStock || !isValidVariant\n ? 'Out of stock'\n : 'Add to cart'}\n </Button>\n {enableMobileActions && (\n <MobileActions\n product={product}\n variant={selectedVariant}\n regionId={regionId}\n options={options}\n updateOptions={setOptionValue}\n inStock={inStock}\n stockStatus={stockStatus}\n handleAddToCart={handleAddToCart}\n isAdding={status === AddToCartStatus.ADDING}\n show={!inView}\n optionsDisabled={!!disabled || status === AddToCartStatus.ADDING}\n />\n )}\n </div>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["OptionSelect","MobileActions"],"sources":["../../../src/components/product-actions/index.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useParams } from 'next/navigation';\n\nimport { isEqual } from 'lodash';\n\nimport { ErrorMessage } from '@gfed-medusa/sf-lib-common/components/error-message';\nimport { mutateCart } from '@gfed-medusa/sf-lib-common/lib/hooks/use-cart';\nimport { Divider } from '@gfed-medusa/sf-lib-ui/components/divider';\nimport { HttpTypes } from '@medusajs/types';\nimport { Button } from '@medusajs/ui';\n\nimport OptionSelect from '@/components/product-actions/option-select';\nimport { addToCart } from '@/lib/data/cart';\nimport { useIntersection } from '@/lib/hooks/use-intersection';\nimport { useProductPrice } from '@/lib/hooks/use-product-price';\nimport { Product, ProductVariant } from '@/types/graphql';\n\nimport ProductPrice from '../product-price';\nimport MobileActions from './mobile-actions';\n\nexport type ProductActionsProps = {\n product: Product;\n regionId: string;\n disabled?: boolean;\n enableMobileActions?: boolean;\n};\n\nenum AddToCartStatus {\n IDLE = 'idle',\n ADDING = 'adding',\n SUCCESS = 'success',\n ERROR = 'error',\n}\n\nconst optionsAsKeymap = (\n variantOptions:\n | HttpTypes.StoreProductVariant['options']\n | ProductVariant['options']\n | null\n | undefined\n) => {\n return variantOptions?.reduce((acc: Record<string, string>, varopt: any) => {\n acc[varopt.optionId] = varopt.value;\n return acc;\n }, {});\n};\n\nexport default function ProductActions({\n product,\n regionId,\n disabled,\n enableMobileActions = true,\n}: ProductActionsProps) {\n const [options, setOptions] = useState<Record<string, string | undefined>>(\n {}\n );\n const [status, setStatus] = useState<AddToCartStatus>(AddToCartStatus.IDLE);\n const countryCode = useParams().countryCode as string;\n\n // If there is only 1 variant, preselect the options\n useEffect(() => {\n if (product?.variants && product.variants.length === 1) {\n const variantOptions = optionsAsKeymap(\n product.variants[0]?.options || null\n );\n setOptions(variantOptions ?? {});\n }\n }, [product.variants]);\n\n const selectedVariant = useMemo(() => {\n if (!product.variants || product.variants.length === 0) {\n return;\n }\n\n return product.variants.find((v) => {\n const variantOptions = optionsAsKeymap(v.options);\n return isEqual(variantOptions, options);\n });\n }, [product.variants, options]);\n\n // update the options when a variant is selected\n const setOptionValue = (optionId: string, value: string) => {\n setOptions((prev) => ({\n ...prev,\n [optionId]: value,\n }));\n };\n\n //check if the selected options produce a valid variant\n const isValidVariant = useMemo(() => {\n return product.variants?.some((v) => {\n const variantOptions = optionsAsKeymap(v.options);\n return isEqual(variantOptions, options);\n });\n }, [product.variants, options]);\n\n // check if the selected variant is in stock\n const { product: pricingProduct, isLoading: pricingLoading } =\n useProductPrice(product.id, regionId);\n\n const pricingVariant = useMemo(() => {\n if (!selectedVariant?.id) {\n return null;\n }\n return (pricingProduct?.variants ?? []).find(\n (v: any) => v.id === selectedVariant.id\n );\n }, [pricingProduct?.variants, selectedVariant?.id]);\n\n const stockStatus = useMemo(() => {\n if (!selectedVariant) {\n return 'unknown' as const;\n }\n\n if (!selectedVariant.manageInventory) {\n return 'in_stock' as const;\n }\n\n if (selectedVariant.allowBackorder) {\n return 'in_stock' as const;\n }\n\n const qty = pricingVariant?.inventoryQuantity;\n\n if (pricingLoading && typeof qty !== 'number') {\n return 'checking' as const;\n }\n\n if (typeof qty !== 'number') {\n return 'in_stock' as const;\n }\n\n return qty > 0 ? ('in_stock' as const) : ('out_of_stock' as const);\n }, [selectedVariant, pricingVariant?.inventoryQuantity, pricingLoading]);\n\n const inStock = useMemo(() => {\n // If we don't manage inventory, we can always add to cart\n if (selectedVariant && !selectedVariant.manageInventory) {\n return true;\n }\n\n // If we allow back orders on the variant, we can add to cart\n if (selectedVariant?.allowBackorder) {\n return true;\n }\n\n if (selectedVariant?.manageInventory) {\n const qty = pricingVariant?.inventoryQuantity;\n if (typeof qty === 'number') {\n return qty > 0;\n }\n // If we don't have a numeric quantity, don't block add-to-cart\n return true;\n }\n\n // Otherwise, we can't add to cart\n return false;\n }, [selectedVariant, pricingVariant?.inventoryQuantity]);\n\n const actionsRef = useRef<HTMLDivElement>(null);\n\n const inView = useIntersection(actionsRef, '0px');\n\n // add the selected variant to the cart\n const handleAddToCart = async () => {\n if (!selectedVariant?.id) return null;\n\n setStatus(AddToCartStatus.ADDING);\n\n try {\n await addToCart({\n variantId: selectedVariant.id,\n quantity: 1,\n countryCode,\n });\n\n mutateCart();\n\n setStatus(AddToCartStatus.SUCCESS);\n } catch (error) {\n console.log(error);\n setStatus(AddToCartStatus.ERROR);\n }\n };\n\n return (\n <>\n <div className=\"flex flex-col gap-y-2\" ref={actionsRef}>\n <div>\n {(product.variants?.length ?? 0) > 1 && (\n <div className=\"flex flex-col gap-y-4\">\n {(product.options || []).map((option) => {\n return (\n <div key={option.id}>\n <OptionSelect\n option={option}\n current={options[option.id]}\n updateOption={setOptionValue}\n title={option.title ?? ''}\n data-testid=\"product-options\"\n disabled={!!disabled || status === AddToCartStatus.ADDING}\n />\n </div>\n );\n })}\n <Divider />\n </div>\n )}\n </div>\n\n <ProductPrice\n product={product}\n variant={selectedVariant}\n regionId={regionId}\n />\n\n {status === AddToCartStatus.ERROR && (\n <ErrorMessage error=\"Failed adding product to cart. Please try again.\" />\n )}\n {status === AddToCartStatus.SUCCESS && (\n <div className=\"text-small-regular pt-2 text-green-700\">\n Successfully added product to cart\n </div>\n )}\n <Button\n onClick={handleAddToCart}\n disabled={\n !inStock ||\n !selectedVariant ||\n !!disabled ||\n status === AddToCartStatus.ADDING ||\n !isValidVariant ||\n stockStatus === 'checking'\n }\n variant=\"primary\"\n className=\"h-10 w-full\"\n isLoading={status === AddToCartStatus.ADDING}\n data-testid=\"add-product-button\"\n >\n {!selectedVariant\n ? 'Select size'\n : stockStatus === 'checking'\n ? 'Checking stock'\n : !inStock || !isValidVariant\n ? 'Out of stock'\n : 'Add to cart'}\n </Button>\n {enableMobileActions && (\n <MobileActions\n product={product}\n variant={selectedVariant}\n regionId={regionId}\n options={options}\n updateOptions={setOptionValue}\n inStock={inStock}\n stockStatus={stockStatus}\n handleAddToCart={handleAddToCart}\n isAdding={status === AddToCartStatus.ADDING}\n show={!inView}\n optionsDisabled={!!disabled || status === AddToCartStatus.ADDING}\n />\n )}\n </div>\n </>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mobile-actions.d.ts","names":[],"sources":["../../../src/components/product-actions/mobile-actions.tsx"],"sourcesContent":[],"mappings":";;;;KAgBK,kBAAA;WACM;EADN,OAAA,CAAA,EAEO,cAFW;EACZ,QAAA,EAAA,MAAA;EACC,OAAA,EAED,MAFC,CAAA,MAAA,EAAA,MAAA,GAAA,SAAA,CAAA;EAED,aAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EAAM,OAAA,CAAA,EAAA,OAAA;EAUX,WAAA,CAAA,EAAA,SA8ML,GAAA,UA9M6B,GAAA,UAAT,GAAA,cAAQ;;;;;;cAAvB,eAAe,KAAA,CAAM,GAAG"}
1
+ {"version":3,"file":"mobile-actions.d.ts","names":[],"sources":["../../../src/components/product-actions/mobile-actions.tsx"],"sourcesContent":[],"mappings":";;;;KAiBK,kBAAA;WACM;EADN,OAAA,CAAA,EAEO,cAFW;EACZ,QAAA,EAAA,MAAA;EACC,OAAA,EAED,MAFC,CAAA,MAAA,EAAA,MAAA,GAAA,SAAA,CAAA;EAED,aAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EAAM,OAAA,CAAA,EAAA,OAAA;EAwBX,WAAA,CAAA,EAAA,SA+NL,GAAA,UA/N6B,GAAA,UAAT,GAAA,cAAQ;;;;;;cAAvB,eAAe,KAAA,CAAM,GAAG"}
@@ -4,6 +4,7 @@ import { isSimpleProduct } from "../../lib/utils/product.js";
4
4
  import { Button, clx } from "@medusajs/ui";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  import React, { Fragment as Fragment$1, useMemo } from "react";
7
+ import { isEqual } from "lodash";
7
8
  import { getProductPrice } from "@gfed-medusa/sf-lib-common/lib/utils/get-product-price";
8
9
  import useToggleState from "@gfed-medusa/sf-lib-common/lib/hooks/use-toggle-state";
9
10
  import { ChevronDown } from "@gfed-medusa/sf-lib-ui/icons/chevron-down";
@@ -11,6 +12,13 @@ import { X } from "@gfed-medusa/sf-lib-ui/icons/x";
11
12
  import { Dialog, Transition } from "@headlessui/react";
12
13
 
13
14
  //#region src/components/product-actions/mobile-actions.tsx
15
+ const optionsAsKeymap = (variantOptions) => {
16
+ return variantOptions?.reduce((acc, varopt) => {
17
+ if (!varopt) return acc;
18
+ acc[varopt.optionId] = varopt.value;
19
+ return acc;
20
+ }, {});
21
+ };
14
22
  const MobileActions = ({ product, variant, regionId, options, updateOptions, inStock, stockStatus, handleAddToCart, isAdding, show, optionsDisabled }) => {
15
23
  const { state, open, close } = useToggleState();
16
24
  const { product: pricingProduct } = useProductPrice(product.id, regionId);
@@ -36,8 +44,16 @@ const MobileActions = ({ product, variant, regionId, options, updateOptions, inS
36
44
  return variantPrice || cheapestPrice || null;
37
45
  }, [price]);
38
46
  const isSimple = isSimpleProduct(product);
47
+ const handleUpdateOption = (optionId, value) => {
48
+ updateOptions(optionId, value);
49
+ const nextOptions = {
50
+ ...options,
51
+ [optionId]: value
52
+ };
53
+ if ((product.variants ?? []).some((productVariant) => isEqual(optionsAsKeymap(productVariant.options), nextOptions))) close();
54
+ };
39
55
  return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
40
- className: clx("fixed inset-x-0 bottom-0 lg:hidden", { "pointer-events-none": !show }),
56
+ className: clx("fixed inset-x-0 bottom-0 z-40 lg:hidden", { "pointer-events-none": !show }),
41
57
  children: /* @__PURE__ */ jsx(Transition, {
42
58
  as: Fragment$1,
43
59
  show,
@@ -86,7 +102,7 @@ const MobileActions = ({ product, variant, regionId, options, updateOptions, inS
86
102
  className: "w-full",
87
103
  isLoading: isAdding,
88
104
  "data-testid": "mobile-cart-button",
89
- children: !variant ? "Select variant" : stockStatus === "checking" ? "Checking stock" : stockStatus === "out_of_stock" ? "Out of stock" : "Add to cart"
105
+ children: !variant ? "Select size" : stockStatus === "checking" ? "Checking stock" : stockStatus === "out_of_stock" ? "Out of stock" : "Add to cart"
90
106
  })]
91
107
  })]
92
108
  })
@@ -139,7 +155,7 @@ const MobileActions = ({ product, variant, regionId, options, updateOptions, inS
139
155
  return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(option_select_default, {
140
156
  option,
141
157
  current: options[option.id],
142
- updateOption: updateOptions,
158
+ updateOption: handleUpdateOption,
143
159
  title: option.title ?? "",
144
160
  disabled: optionsDisabled
145
161
  }) }, option.id);
@@ -1 +1 @@
1
- {"version":3,"file":"mobile-actions.js","names":["MobileActions: React.FC<MobileActionsProps>","Fragment","OptionSelect"],"sources":["../../../src/components/product-actions/mobile-actions.tsx"],"sourcesContent":["import React, { Fragment, useMemo } from 'react';\n\nimport useToggleState from '@gfed-medusa/sf-lib-common/lib/hooks/use-toggle-state';\nimport { getProductPrice } from '@gfed-medusa/sf-lib-common/lib/utils/get-product-price';\nimport { ChevronDown } from '@gfed-medusa/sf-lib-ui/icons/chevron-down';\nimport { X } from '@gfed-medusa/sf-lib-ui/icons/x';\nimport { Dialog, Transition } from '@headlessui/react';\nimport { HttpTypes } from '@medusajs/types';\nimport { Button, clx } from '@medusajs/ui';\n\nimport { useProductPrice } from '@/lib/hooks/use-product-price';\nimport { isSimpleProduct } from '@/lib/utils/product';\nimport { Product, ProductVariant } from '@/types/graphql';\n\nimport OptionSelect from './option-select';\n\ntype MobileActionsProps = {\n product: Product;\n variant?: ProductVariant;\n regionId: string;\n options: Record<string, string | undefined>;\n updateOptions: (title: string, value: string) => void;\n inStock?: boolean;\n stockStatus?: 'unknown' | 'checking' | 'in_stock' | 'out_of_stock';\n handleAddToCart: () => void;\n isAdding?: boolean;\n show: boolean;\n optionsDisabled: boolean;\n};\n\nconst MobileActions: React.FC<MobileActionsProps> = ({\n product,\n variant,\n regionId,\n options,\n updateOptions,\n inStock,\n stockStatus,\n handleAddToCart,\n isAdding,\n show,\n optionsDisabled,\n}) => {\n const { state, open, close } = useToggleState();\n\n const { product: pricingProduct } = useProductPrice(product.id, regionId);\n\n const pricingById = new Map(\n (pricingProduct?.variants ?? []).map((v: any) => [v.id, v])\n );\n\n const sourceProduct = {\n ...product,\n variants: (product.variants ?? []).map((v: any) => {\n const p = pricingById.get(v.id);\n return {\n ...v,\n price: p?.price,\n originalPrice: p?.originalPrice,\n inventoryQuantity: p?.inventoryQuantity,\n };\n }),\n } as Product;\n\n const price = getProductPrice({\n product: sourceProduct,\n variantId: variant?.id,\n });\n\n const selectedPrice = useMemo(() => {\n if (!price) {\n return null;\n }\n const { variantPrice, cheapestPrice } = price;\n\n return variantPrice || cheapestPrice || null;\n }, [price]);\n\n const isSimple = isSimpleProduct(product);\n\n return (\n <>\n <div\n className={clx('fixed inset-x-0 bottom-0 lg:hidden', {\n 'pointer-events-none': !show,\n })}\n >\n <Transition\n as={Fragment}\n show={show}\n enter=\"ease-in-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-300\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div\n className=\"text-large-regular flex h-full w-full flex-col items-center justify-center gap-y-3 border-t border-gray-200 bg-white p-4\"\n data-testid=\"mobile-actions\"\n >\n <div className=\"flex items-center gap-x-2\">\n <span data-testid=\"mobile-title\">{product.title}</span>\n <span>—</span>\n {selectedPrice ? (\n <div className=\"text-ui-fg-base flex items-end gap-x-2\">\n {selectedPrice.price_type === 'sale' && (\n <p>\n <span className=\"text-small-regular line-through\">\n {selectedPrice.original_price}\n </span>\n </p>\n )}\n <span\n className={clx({\n 'text-ui-fg-interactive':\n selectedPrice.price_type === 'sale',\n })}\n >\n {selectedPrice.calculated_price}\n </span>\n </div>\n ) : (\n <div className=\"h-5 w-24 animate-pulse bg-gray-100\" />\n )}\n </div>\n <div\n className={clx('grid w-full grid-cols-2 gap-x-4', {\n '!grid-cols-1': isSimple,\n })}\n >\n {!isSimple && (\n <Button\n onClick={open}\n variant=\"secondary\"\n className=\"w-full\"\n data-testid=\"mobile-actions-button\"\n >\n <div className=\"flex w-full items-center justify-between\">\n <span>\n {variant\n ? Object.values(options).join(' / ')\n : 'Select Options'}\n </span>\n <ChevronDown />\n </div>\n </Button>\n )}\n <Button\n onClick={handleAddToCart}\n disabled={\n !variant ||\n stockStatus === 'checking' ||\n stockStatus === 'out_of_stock'\n }\n className=\"w-full\"\n isLoading={isAdding}\n data-testid=\"mobile-cart-button\"\n >\n {!variant\n ? 'Select variant'\n : stockStatus === 'checking'\n ? 'Checking stock'\n : stockStatus === 'out_of_stock'\n ? 'Out of stock'\n : 'Add to cart'}\n </Button>\n </div>\n </div>\n </Transition>\n </div>\n <Transition appear show={state} as={Fragment}>\n <Dialog as=\"div\" className=\"relative z-[100]\" onClose={close}>\n <Transition.Child\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div className=\"fixed inset-0 bg-gray-700 bg-opacity-75 backdrop-blur-sm\" />\n </Transition.Child>\n\n <div className=\"fixed inset-x-0 bottom-0\">\n <div className=\"flex h-full min-h-full items-center justify-center text-center\">\n <Transition.Child\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <Dialog.Panel\n className=\"flex h-full w-full transform flex-col gap-y-3 overflow-hidden text-left\"\n data-testid=\"mobile-actions-modal\"\n >\n <div className=\"flex w-full justify-end pr-6\">\n <button\n onClick={close}\n className=\"text-ui-fg-base flex h-12 w-12 items-center justify-center rounded-full bg-white\"\n data-testid=\"close-modal-button\"\n >\n <X />\n </button>\n </div>\n <div className=\"bg-white px-6 py-12\">\n {(product.variants?.length ?? 0) > 1 && (\n <div className=\"flex flex-col gap-y-6\">\n {(product.options || []).map((option) => {\n return (\n <div key={option.id}>\n <OptionSelect\n option={option}\n current={options[option.id]}\n updateOption={updateOptions}\n title={option.title ?? ''}\n disabled={optionsDisabled}\n />\n </div>\n );\n })}\n </div>\n )}\n </div>\n </Dialog.Panel>\n </Transition.Child>\n </div>\n </div>\n </Dialog>\n </Transition>\n </>\n );\n};\n\nexport default MobileActions;\n"],"mappings":";;;;;;;;;;;;;AA8BA,MAAMA,iBAA+C,EACnD,SACA,SACA,UACA,SACA,eACA,SACA,aACA,iBACA,UACA,MACA,sBACI;CACJ,MAAM,EAAE,OAAO,MAAM,UAAU,gBAAgB;CAE/C,MAAM,EAAE,SAAS,mBAAmB,gBAAgB,QAAQ,IAAI,SAAS;CAEzE,MAAM,cAAc,IAAI,KACrB,gBAAgB,YAAY,EAAE,EAAE,KAAK,MAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAC5D;CAeD,MAAM,QAAQ,gBAAgB;EAC5B,SAdoB;GACpB,GAAG;GACH,WAAW,QAAQ,YAAY,EAAE,EAAE,KAAK,MAAW;IACjD,MAAM,IAAI,YAAY,IAAI,EAAE,GAAG;AAC/B,WAAO;KACL,GAAG;KACH,OAAO,GAAG;KACV,eAAe,GAAG;KAClB,mBAAmB,GAAG;KACvB;KACD;GACH;EAIC,WAAW,SAAS;EACrB,CAAC;CAEF,MAAM,gBAAgB,cAAc;AAClC,MAAI,CAAC,MACH,QAAO;EAET,MAAM,EAAE,cAAc,kBAAkB;AAExC,SAAO,gBAAgB,iBAAiB;IACvC,CAAC,MAAM,CAAC;CAEX,MAAM,WAAW,gBAAgB,QAAQ;AAEzC,QACE,4CACE,oBAAC;EACC,WAAW,IAAI,sCAAsC,EACnD,uBAAuB,CAAC,MACzB,CAAC;YAEF,oBAAC;GACC,IAAIC;GACE;GACN,OAAM;GACN,WAAU;GACV,SAAQ;GACR,OAAM;GACN,WAAU;GACV,SAAQ;aAER,qBAAC;IACC,WAAU;IACV,eAAY;eAEZ,qBAAC;KAAI,WAAU;;MACb,oBAAC;OAAK,eAAY;iBAAgB,QAAQ;QAAa;MACvD,oBAAC,oBAAK,MAAQ;MACb,gBACC,qBAAC;OAAI,WAAU;kBACZ,cAAc,eAAe,UAC5B,oBAAC,iBACC,oBAAC;QAAK,WAAU;kBACb,cAAc;SACV,GACL,EAEN,oBAAC;QACC,WAAW,IAAI,EACb,0BACE,cAAc,eAAe,QAChC,CAAC;kBAED,cAAc;SACV;QACH,GAEN,oBAAC,SAAI,WAAU,uCAAuC;;MAEpD,EACN,qBAAC;KACC,WAAW,IAAI,mCAAmC,EAChD,gBAAgB,UACjB,CAAC;gBAED,CAAC,YACA,oBAAC;MACC,SAAS;MACT,SAAQ;MACR,WAAU;MACV,eAAY;gBAEZ,qBAAC;OAAI,WAAU;kBACb,oBAAC,oBACE,UACG,OAAO,OAAO,QAAQ,CAAC,KAAK,MAAM,GAClC,mBACC,EACP,oBAAC,gBAAc;QACX;OACC,EAEX,oBAAC;MACC,SAAS;MACT,UACE,CAAC,WACD,gBAAgB,cAChB,gBAAgB;MAElB,WAAU;MACV,WAAW;MACX,eAAY;gBAEX,CAAC,UACE,mBACA,gBAAgB,aACd,mBACA,gBAAgB,iBACd,iBACA;OACD;MACL;KACF;IACK;GACT,EACN,oBAAC;EAAW;EAAO,MAAM;EAAO,IAAIA;YAClC,qBAAC;GAAO,IAAG;GAAM,WAAU;GAAmB,SAAS;cACrD,oBAAC,WAAW;IACV,IAAIA;IACJ,OAAM;IACN,WAAU;IACV,SAAQ;IACR,OAAM;IACN,WAAU;IACV,SAAQ;cAER,oBAAC,SAAI,WAAU,6DAA6D;KAC3D,EAEnB,oBAAC;IAAI,WAAU;cACb,oBAAC;KAAI,WAAU;eACb,oBAAC,WAAW;MACV,IAAIA;MACJ,OAAM;MACN,WAAU;MACV,SAAQ;MACR,OAAM;MACN,WAAU;MACV,SAAQ;gBAER,qBAAC,OAAO;OACN,WAAU;OACV,eAAY;kBAEZ,oBAAC;QAAI,WAAU;kBACb,oBAAC;SACC,SAAS;SACT,WAAU;SACV,eAAY;mBAEZ,oBAAC,MAAI;UACE;SACL,EACN,oBAAC;QAAI,WAAU;mBACX,QAAQ,UAAU,UAAU,KAAK,KACjC,oBAAC;SAAI,WAAU;oBACX,QAAQ,WAAW,EAAE,EAAE,KAAK,WAAW;AACvC,iBACE,oBAAC,mBACC,oBAACC;WACS;WACR,SAAS,QAAQ,OAAO;WACxB,cAAc;WACd,OAAO,OAAO,SAAS;WACvB,UAAU;YACV,IAPM,OAAO,GAQX;WAER;UACE;SAEJ;QACO;OACE;MACf;KACF;IACC;GACE,IACZ;;AAIP,6BAAe"}
1
+ {"version":3,"file":"mobile-actions.js","names":["MobileActions: React.FC<MobileActionsProps>","Fragment","OptionSelect"],"sources":["../../../src/components/product-actions/mobile-actions.tsx"],"sourcesContent":["import React, { Fragment, useMemo } from 'react';\n\nimport { isEqual } from 'lodash';\n\nimport useToggleState from '@gfed-medusa/sf-lib-common/lib/hooks/use-toggle-state';\nimport { getProductPrice } from '@gfed-medusa/sf-lib-common/lib/utils/get-product-price';\nimport { ChevronDown } from '@gfed-medusa/sf-lib-ui/icons/chevron-down';\nimport { X } from '@gfed-medusa/sf-lib-ui/icons/x';\nimport { Dialog, Transition } from '@headlessui/react';\nimport { Button, clx } from '@medusajs/ui';\n\nimport { useProductPrice } from '@/lib/hooks/use-product-price';\nimport { isSimpleProduct } from '@/lib/utils/product';\nimport { Product, ProductVariant } from '@/types/graphql';\n\nimport OptionSelect from './option-select';\n\ntype MobileActionsProps = {\n product: Product;\n variant?: ProductVariant;\n regionId: string;\n options: Record<string, string | undefined>;\n updateOptions: (title: string, value: string) => void;\n inStock?: boolean;\n stockStatus?: 'unknown' | 'checking' | 'in_stock' | 'out_of_stock';\n handleAddToCart: () => void;\n isAdding?: boolean;\n show: boolean;\n optionsDisabled: boolean;\n};\n\nconst optionsAsKeymap = (\n variantOptions: ProductVariant['options'] | null | undefined\n) => {\n return variantOptions?.reduce<Record<string, string>>((acc, varopt) => {\n if (!varopt) {\n return acc;\n }\n\n acc[varopt.optionId] = varopt.value;\n\n return acc;\n }, {});\n};\n\nconst MobileActions: React.FC<MobileActionsProps> = ({\n product,\n variant,\n regionId,\n options,\n updateOptions,\n inStock,\n stockStatus,\n handleAddToCart,\n isAdding,\n show,\n optionsDisabled,\n}) => {\n const { state, open, close } = useToggleState();\n\n const { product: pricingProduct } = useProductPrice(product.id, regionId);\n\n const pricingById = new Map(\n (pricingProduct?.variants ?? []).map((v: any) => [v.id, v])\n );\n\n const sourceProduct = {\n ...product,\n variants: (product.variants ?? []).map((v: any) => {\n const p = pricingById.get(v.id);\n return {\n ...v,\n price: p?.price,\n originalPrice: p?.originalPrice,\n inventoryQuantity: p?.inventoryQuantity,\n };\n }),\n } as Product;\n\n const price = getProductPrice({\n product: sourceProduct,\n variantId: variant?.id,\n });\n\n const selectedPrice = useMemo(() => {\n if (!price) {\n return null;\n }\n const { variantPrice, cheapestPrice } = price;\n\n return variantPrice || cheapestPrice || null;\n }, [price]);\n\n const isSimple = isSimpleProduct(product);\n\n const handleUpdateOption = (optionId: string, value: string) => {\n updateOptions(optionId, value);\n\n const nextOptions = {\n ...options,\n [optionId]: value,\n };\n\n const hasMatchingVariant = (product.variants ?? []).some((productVariant) =>\n isEqual(optionsAsKeymap(productVariant.options), nextOptions)\n );\n\n if (hasMatchingVariant) {\n close();\n }\n };\n\n return (\n <>\n <div\n className={clx('fixed inset-x-0 bottom-0 z-40 lg:hidden', {\n 'pointer-events-none': !show,\n })}\n >\n <Transition\n as={Fragment}\n show={show}\n enter=\"ease-in-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-300\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div\n className=\"text-large-regular flex h-full w-full flex-col items-center justify-center gap-y-3 border-t border-gray-200 bg-white p-4\"\n data-testid=\"mobile-actions\"\n >\n <div className=\"flex items-center gap-x-2\">\n <span data-testid=\"mobile-title\">{product.title}</span>\n <span>—</span>\n {selectedPrice ? (\n <div className=\"text-ui-fg-base flex items-end gap-x-2\">\n {selectedPrice.price_type === 'sale' && (\n <p>\n <span className=\"text-small-regular line-through\">\n {selectedPrice.original_price}\n </span>\n </p>\n )}\n <span\n className={clx({\n 'text-ui-fg-interactive':\n selectedPrice.price_type === 'sale',\n })}\n >\n {selectedPrice.calculated_price}\n </span>\n </div>\n ) : (\n <div className=\"h-5 w-24 animate-pulse bg-gray-100\" />\n )}\n </div>\n <div\n className={clx('grid w-full grid-cols-2 gap-x-4', {\n '!grid-cols-1': isSimple,\n })}\n >\n {!isSimple && (\n <Button\n onClick={open}\n variant=\"secondary\"\n className=\"w-full\"\n data-testid=\"mobile-actions-button\"\n >\n <div className=\"flex w-full items-center justify-between\">\n <span>\n {variant\n ? Object.values(options).join(' / ')\n : 'Select Options'}\n </span>\n <ChevronDown />\n </div>\n </Button>\n )}\n <Button\n onClick={handleAddToCart}\n disabled={\n !variant ||\n stockStatus === 'checking' ||\n stockStatus === 'out_of_stock'\n }\n className=\"w-full\"\n isLoading={isAdding}\n data-testid=\"mobile-cart-button\"\n >\n {!variant\n ? 'Select size'\n : stockStatus === 'checking'\n ? 'Checking stock'\n : stockStatus === 'out_of_stock'\n ? 'Out of stock'\n : 'Add to cart'}\n </Button>\n </div>\n </div>\n </Transition>\n </div>\n <Transition appear show={state} as={Fragment}>\n <Dialog as=\"div\" className=\"relative z-[100]\" onClose={close}>\n <Transition.Child\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div className=\"fixed inset-0 bg-gray-700 bg-opacity-75 backdrop-blur-sm\" />\n </Transition.Child>\n\n <div className=\"fixed inset-x-0 bottom-0\">\n <div className=\"flex h-full min-h-full items-center justify-center text-center\">\n <Transition.Child\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <Dialog.Panel\n className=\"flex h-full w-full transform flex-col gap-y-3 overflow-hidden text-left\"\n data-testid=\"mobile-actions-modal\"\n >\n <div className=\"flex w-full justify-end pr-6\">\n <button\n onClick={close}\n className=\"text-ui-fg-base flex h-12 w-12 items-center justify-center rounded-full bg-white\"\n data-testid=\"close-modal-button\"\n >\n <X />\n </button>\n </div>\n <div className=\"bg-white px-6 py-12\">\n {(product.variants?.length ?? 0) > 1 && (\n <div className=\"flex flex-col gap-y-6\">\n {(product.options || []).map((option) => {\n return (\n <div key={option.id}>\n <OptionSelect\n option={option}\n current={options[option.id]}\n updateOption={handleUpdateOption}\n title={option.title ?? ''}\n disabled={optionsDisabled}\n />\n </div>\n );\n })}\n </div>\n )}\n </div>\n </Dialog.Panel>\n </Transition.Child>\n </div>\n </div>\n </Dialog>\n </Transition>\n </>\n );\n};\n\nexport default MobileActions;\n"],"mappings":";;;;;;;;;;;;;;AA+BA,MAAM,mBACJ,mBACG;AACH,QAAO,gBAAgB,QAAgC,KAAK,WAAW;AACrE,MAAI,CAAC,OACH,QAAO;AAGT,MAAI,OAAO,YAAY,OAAO;AAE9B,SAAO;IACN,EAAE,CAAC;;AAGR,MAAMA,iBAA+C,EACnD,SACA,SACA,UACA,SACA,eACA,SACA,aACA,iBACA,UACA,MACA,sBACI;CACJ,MAAM,EAAE,OAAO,MAAM,UAAU,gBAAgB;CAE/C,MAAM,EAAE,SAAS,mBAAmB,gBAAgB,QAAQ,IAAI,SAAS;CAEzE,MAAM,cAAc,IAAI,KACrB,gBAAgB,YAAY,EAAE,EAAE,KAAK,MAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAC5D;CAeD,MAAM,QAAQ,gBAAgB;EAC5B,SAdoB;GACpB,GAAG;GACH,WAAW,QAAQ,YAAY,EAAE,EAAE,KAAK,MAAW;IACjD,MAAM,IAAI,YAAY,IAAI,EAAE,GAAG;AAC/B,WAAO;KACL,GAAG;KACH,OAAO,GAAG;KACV,eAAe,GAAG;KAClB,mBAAmB,GAAG;KACvB;KACD;GACH;EAIC,WAAW,SAAS;EACrB,CAAC;CAEF,MAAM,gBAAgB,cAAc;AAClC,MAAI,CAAC,MACH,QAAO;EAET,MAAM,EAAE,cAAc,kBAAkB;AAExC,SAAO,gBAAgB,iBAAiB;IACvC,CAAC,MAAM,CAAC;CAEX,MAAM,WAAW,gBAAgB,QAAQ;CAEzC,MAAM,sBAAsB,UAAkB,UAAkB;AAC9D,gBAAc,UAAU,MAAM;EAE9B,MAAM,cAAc;GAClB,GAAG;IACF,WAAW;GACb;AAMD,OAJ4B,QAAQ,YAAY,EAAE,EAAE,MAAM,mBACxD,QAAQ,gBAAgB,eAAe,QAAQ,EAAE,YAAY,CAC9D,CAGC,QAAO;;AAIX,QACE,4CACE,oBAAC;EACC,WAAW,IAAI,2CAA2C,EACxD,uBAAuB,CAAC,MACzB,CAAC;YAEF,oBAAC;GACC,IAAIC;GACE;GACN,OAAM;GACN,WAAU;GACV,SAAQ;GACR,OAAM;GACN,WAAU;GACV,SAAQ;aAER,qBAAC;IACC,WAAU;IACV,eAAY;eAEZ,qBAAC;KAAI,WAAU;;MACb,oBAAC;OAAK,eAAY;iBAAgB,QAAQ;QAAa;MACvD,oBAAC,oBAAK,MAAQ;MACb,gBACC,qBAAC;OAAI,WAAU;kBACZ,cAAc,eAAe,UAC5B,oBAAC,iBACC,oBAAC;QAAK,WAAU;kBACb,cAAc;SACV,GACL,EAEN,oBAAC;QACC,WAAW,IAAI,EACb,0BACE,cAAc,eAAe,QAChC,CAAC;kBAED,cAAc;SACV;QACH,GAEN,oBAAC,SAAI,WAAU,uCAAuC;;MAEpD,EACN,qBAAC;KACC,WAAW,IAAI,mCAAmC,EAChD,gBAAgB,UACjB,CAAC;gBAED,CAAC,YACA,oBAAC;MACC,SAAS;MACT,SAAQ;MACR,WAAU;MACV,eAAY;gBAEZ,qBAAC;OAAI,WAAU;kBACb,oBAAC,oBACE,UACG,OAAO,OAAO,QAAQ,CAAC,KAAK,MAAM,GAClC,mBACC,EACP,oBAAC,gBAAc;QACX;OACC,EAEX,oBAAC;MACC,SAAS;MACT,UACE,CAAC,WACD,gBAAgB,cAChB,gBAAgB;MAElB,WAAU;MACV,WAAW;MACX,eAAY;gBAEX,CAAC,UACE,gBACA,gBAAgB,aACd,mBACA,gBAAgB,iBACd,iBACA;OACD;MACL;KACF;IACK;GACT,EACN,oBAAC;EAAW;EAAO,MAAM;EAAO,IAAIA;YAClC,qBAAC;GAAO,IAAG;GAAM,WAAU;GAAmB,SAAS;cACrD,oBAAC,WAAW;IACV,IAAIA;IACJ,OAAM;IACN,WAAU;IACV,SAAQ;IACR,OAAM;IACN,WAAU;IACV,SAAQ;cAER,oBAAC,SAAI,WAAU,6DAA6D;KAC3D,EAEnB,oBAAC;IAAI,WAAU;cACb,oBAAC;KAAI,WAAU;eACb,oBAAC,WAAW;MACV,IAAIA;MACJ,OAAM;MACN,WAAU;MACV,SAAQ;MACR,OAAM;MACN,WAAU;MACV,SAAQ;gBAER,qBAAC,OAAO;OACN,WAAU;OACV,eAAY;kBAEZ,oBAAC;QAAI,WAAU;kBACb,oBAAC;SACC,SAAS;SACT,WAAU;SACV,eAAY;mBAEZ,oBAAC,MAAI;UACE;SACL,EACN,oBAAC;QAAI,WAAU;mBACX,QAAQ,UAAU,UAAU,KAAK,KACjC,oBAAC;SAAI,WAAU;oBACX,QAAQ,WAAW,EAAE,EAAE,KAAK,WAAW;AACvC,iBACE,oBAAC,mBACC,oBAACC;WACS;WACR,SAAS,QAAQ,OAAO;WACxB,cAAc;WACd,OAAO,OAAO,SAAS;WACvB,UAAU;YACV,IAPM,OAAO,GAQX;WAER;UACE;SAEJ;QACO;OACE;MACf;KACF;IACC;GACE,IACZ;;AAIP,6BAAe"}
@@ -1,7 +1,7 @@
1
- import * as react_jsx_runtime2 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime9 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/product-onboarding-cta/index.d.ts
4
- declare function ProductOnboardingCta(): Promise<react_jsx_runtime2.JSX.Element | null>;
4
+ declare function ProductOnboardingCta(): Promise<react_jsx_runtime9.JSX.Element | null>;
5
5
  //#endregion
6
6
  export { ProductOnboardingCta as default };
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { Product, ProductVariant } from "../../types/graphql.js";
2
- import * as react_jsx_runtime8 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime12 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/product-price/index.d.ts
5
5
  declare function ProductPrice({
@@ -10,7 +10,7 @@ declare function ProductPrice({
10
10
  product: Product;
11
11
  variant?: ProductVariant;
12
12
  regionId: string;
13
- }): react_jsx_runtime8.JSX.Element;
13
+ }): react_jsx_runtime12.JSX.Element;
14
14
  //#endregion
15
15
  export { ProductPrice as default };
16
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/product-price/index.tsx"],"sourcesContent":[],"mappings":";;;;iBAOwB,YAAA;;;;;WAKb;YACC;EANY,QAAA,EAAA,MAAY;CAClC,CAAA,EAOD,kBAAA,CAAA,GAAA,CAAA,OAPC"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/product-price/index.tsx"],"sourcesContent":[],"mappings":";;;;iBAOwB,YAAA;;;;;WAKb;YACC;EANY,QAAA,EAAA,MAAY;CAClC,CAAA,EAOD,mBAAA,CAAA,GAAA,CAAA,OAPC"}
@@ -54,12 +54,9 @@ const Item = ({ title, subtitle, description, children, className, headingSize =
54
54
  };
55
55
  Accordion.Item = Item;
56
56
  const MorphingTrigger = () => {
57
- return /* @__PURE__ */ jsx("div", {
58
- className: "active:text-violet-60 focus:border-violet-60 rounded-rounded text-grey-90 hover:bg-grey-5 active:bg-grey-5 disabled:text-grey-30 group relative bg-transparent p-[6px] disabled:bg-transparent",
59
- children: /* @__PURE__ */ jsxs("div", {
60
- className: "h-5 w-5",
61
- children: [/* @__PURE__ */ jsx("span", { className: "rounded-circle bg-grey-50 group-radix-state-open:rotate-90 absolute inset-y-[31.75%] left-[48%] right-1/2 w-[1.5px] duration-300" }), /* @__PURE__ */ jsx("span", { className: "rounded-circle bg-grey-50 group-radix-state-open:left-1/2 group-radix-state-open:right-1/2 group-radix-state-open:rotate-90 absolute inset-x-[31.75%] bottom-1/2 top-[48%] h-[1.5px] duration-300" })]
62
- })
57
+ return /* @__PURE__ */ jsxs("div", {
58
+ className: "relative h-5 w-5",
59
+ children: [/* @__PURE__ */ jsx("span", { className: "bg-grey-50 absolute inset-x-[15%] top-1/2 h-[1.5px] -translate-y-1/2" }), /* @__PURE__ */ jsx("span", { className: "bg-grey-50 absolute inset-y-[15%] left-1/2 w-[1.5px] -translate-x-1/2 group-data-[state=open]:hidden" })]
63
60
  });
64
61
  };
65
62
  var accordion_default = Accordion;
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","names":["Accordion: React.FC<AccordionProps> & {\n Item: React.FC<AccordionItemProps>;\n}","Item: React.FC<AccordionItemProps>"],"sources":["../../../src/components/product-tabs/accordion.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Text, clx } from '@medusajs/ui';\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\n\ntype AccordionItemProps = AccordionPrimitive.AccordionItemProps & {\n title: string;\n subtitle?: string;\n description?: string;\n required?: boolean;\n tooltip?: string;\n forceMountContent?: true;\n headingSize?: 'small' | 'medium' | 'large';\n customTrigger?: React.ReactNode;\n complete?: boolean;\n active?: boolean;\n triggerable?: boolean;\n children: React.ReactNode;\n};\n\ntype AccordionProps =\n | (AccordionPrimitive.AccordionSingleProps &\n React.RefAttributes<HTMLDivElement>)\n | (AccordionPrimitive.AccordionMultipleProps &\n React.RefAttributes<HTMLDivElement>);\n\nconst Accordion: React.FC<AccordionProps> & {\n Item: React.FC<AccordionItemProps>;\n} = ({ children, ...props }) => {\n return (\n <AccordionPrimitive.Root {...props}>{children}</AccordionPrimitive.Root>\n );\n};\n\nconst Item: React.FC<AccordionItemProps> = ({\n title,\n subtitle,\n description,\n children,\n className,\n headingSize = 'large',\n customTrigger = undefined,\n forceMountContent = undefined,\n triggerable,\n ...props\n}) => {\n const titleId = React.useId();\n\n return (\n <AccordionPrimitive.Item\n {...props}\n className={clx(\n 'border-grey-20 group border-t last:mb-0 last:border-b',\n 'py-3',\n className\n )}\n >\n <AccordionPrimitive.Header className=\"px-1\">\n <div className=\"flex flex-col\">\n <div className=\"flex w-full items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Text id={titleId} className=\"text-ui-fg-subtle text-sm\">\n {title}\n </Text>\n </div>\n <AccordionPrimitive.Trigger aria-labelledby={titleId}>\n {customTrigger || <MorphingTrigger />}\n </AccordionPrimitive.Trigger>\n </div>\n {subtitle && (\n <Text as=\"span\" size=\"small\" className=\"mt-1\">\n {subtitle}\n </Text>\n )}\n </div>\n </AccordionPrimitive.Header>\n <AccordionPrimitive.Content\n forceMount={forceMountContent}\n className={clx(\n 'radix-state-closed:pointer-events-none radix-state-closed:animate-accordion-close radix-state-open:animate-accordion-open px-1'\n )}\n >\n <div className=\"inter-base-regular group-radix-state-closed:animate-accordion-close\">\n {description && <Text>{description}</Text>}\n <div className=\"w-full\">{children}</div>\n </div>\n </AccordionPrimitive.Content>\n </AccordionPrimitive.Item>\n );\n};\n\nAccordion.Item = Item;\n\nconst MorphingTrigger = () => {\n return (\n <div className=\"active:text-violet-60 focus:border-violet-60 rounded-rounded text-grey-90 hover:bg-grey-5 active:bg-grey-5 disabled:text-grey-30 group relative bg-transparent p-[6px] disabled:bg-transparent\">\n <div className=\"h-5 w-5\">\n <span className=\"rounded-circle bg-grey-50 group-radix-state-open:rotate-90 absolute inset-y-[31.75%] left-[48%] right-1/2 w-[1.5px] duration-300\" />\n <span className=\"rounded-circle bg-grey-50 group-radix-state-open:left-1/2 group-radix-state-open:right-1/2 group-radix-state-open:rotate-90 absolute inset-x-[31.75%] bottom-1/2 top-[48%] h-[1.5px] duration-300\" />\n </div>\n </div>\n );\n};\n\nexport default Accordion;\n"],"mappings":";;;;;;AA0BA,MAAMA,aAED,EAAE,UAAU,GAAG,YAAY;AAC9B,QACE,oBAAC,mBAAmB;EAAK,GAAI;EAAQ;GAAmC;;AAI5E,MAAMC,QAAsC,EAC1C,OACA,UACA,aACA,UACA,WACA,cAAc,SACd,gBAAgB,QAChB,oBAAoB,QACpB,aACA,GAAG,YACC;CACJ,MAAM,UAAU,MAAM,OAAO;AAE7B,QACE,qBAAC,mBAAmB;EAClB,GAAI;EACJ,WAAW,IACT,yDACA,QACA,UACD;aAED,oBAAC,mBAAmB;GAAO,WAAU;aACnC,qBAAC;IAAI,WAAU;eACb,qBAAC;KAAI,WAAU;gBACb,oBAAC;MAAI,WAAU;gBACb,oBAAC;OAAK,IAAI;OAAS,WAAU;iBAC1B;QACI;OACH,EACN,oBAAC,mBAAmB;MAAQ,mBAAiB;gBAC1C,iBAAiB,oBAAC,oBAAkB;OACV;MACzB,EACL,YACC,oBAAC;KAAK,IAAG;KAAO,MAAK;KAAQ,WAAU;eACpC;MACI;KAEL;IACoB,EAC5B,oBAAC,mBAAmB;GAClB,YAAY;GACZ,WAAW,IACT,iIACD;aAED,qBAAC;IAAI,WAAU;eACZ,eAAe,oBAAC,kBAAM,cAAmB,EAC1C,oBAAC;KAAI,WAAU;KAAU;MAAe;KACpC;IACqB;GACL;;AAI9B,UAAU,OAAO;AAEjB,MAAM,wBAAwB;AAC5B,QACE,oBAAC;EAAI,WAAU;YACb,qBAAC;GAAI,WAAU;cACb,oBAAC,UAAK,WAAU,qIAAqI,EACrJ,oBAAC,UAAK,WAAU,sMAAsM;IAClN;GACF;;AAIV,wBAAe"}
1
+ {"version":3,"file":"accordion.js","names":["Accordion: React.FC<AccordionProps> & {\n Item: React.FC<AccordionItemProps>;\n}","Item: React.FC<AccordionItemProps>"],"sources":["../../../src/components/product-tabs/accordion.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Text, clx } from '@medusajs/ui';\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\n\ntype AccordionItemProps = AccordionPrimitive.AccordionItemProps & {\n title: string;\n subtitle?: string;\n description?: string;\n required?: boolean;\n tooltip?: string;\n forceMountContent?: true;\n headingSize?: 'small' | 'medium' | 'large';\n customTrigger?: React.ReactNode;\n complete?: boolean;\n active?: boolean;\n triggerable?: boolean;\n children: React.ReactNode;\n};\n\ntype AccordionProps =\n | (AccordionPrimitive.AccordionSingleProps &\n React.RefAttributes<HTMLDivElement>)\n | (AccordionPrimitive.AccordionMultipleProps &\n React.RefAttributes<HTMLDivElement>);\n\nconst Accordion: React.FC<AccordionProps> & {\n Item: React.FC<AccordionItemProps>;\n} = ({ children, ...props }) => {\n return (\n <AccordionPrimitive.Root {...props}>{children}</AccordionPrimitive.Root>\n );\n};\n\nconst Item: React.FC<AccordionItemProps> = ({\n title,\n subtitle,\n description,\n children,\n className,\n headingSize = 'large',\n customTrigger = undefined,\n forceMountContent = undefined,\n triggerable,\n ...props\n}) => {\n const titleId = React.useId();\n\n return (\n <AccordionPrimitive.Item\n {...props}\n className={clx(\n 'border-grey-20 group border-t last:mb-0 last:border-b',\n 'py-3',\n className\n )}\n >\n <AccordionPrimitive.Header className=\"px-1\">\n <div className=\"flex flex-col\">\n <div className=\"flex w-full items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Text id={titleId} className=\"text-ui-fg-subtle text-sm\">\n {title}\n </Text>\n </div>\n <AccordionPrimitive.Trigger aria-labelledby={titleId}>\n {customTrigger || <MorphingTrigger />}\n </AccordionPrimitive.Trigger>\n </div>\n {subtitle && (\n <Text as=\"span\" size=\"small\" className=\"mt-1\">\n {subtitle}\n </Text>\n )}\n </div>\n </AccordionPrimitive.Header>\n <AccordionPrimitive.Content\n forceMount={forceMountContent}\n className={clx(\n 'radix-state-closed:pointer-events-none radix-state-closed:animate-accordion-close radix-state-open:animate-accordion-open px-1'\n )}\n >\n <div className=\"inter-base-regular group-radix-state-closed:animate-accordion-close\">\n {description && <Text>{description}</Text>}\n <div className=\"w-full\">{children}</div>\n </div>\n </AccordionPrimitive.Content>\n </AccordionPrimitive.Item>\n );\n};\n\nAccordion.Item = Item;\n\nconst MorphingTrigger = () => {\n return (\n <div className=\"relative h-5 w-5\">\n <span className=\"bg-grey-50 absolute inset-x-[15%] top-1/2 h-[1.5px] -translate-y-1/2\" />\n <span className=\"bg-grey-50 absolute inset-y-[15%] left-1/2 w-[1.5px] -translate-x-1/2 group-data-[state=open]:hidden\" />\n </div>\n );\n};\n\nexport default Accordion;\n"],"mappings":";;;;;;AA0BA,MAAMA,aAED,EAAE,UAAU,GAAG,YAAY;AAC9B,QACE,oBAAC,mBAAmB;EAAK,GAAI;EAAQ;GAAmC;;AAI5E,MAAMC,QAAsC,EAC1C,OACA,UACA,aACA,UACA,WACA,cAAc,SACd,gBAAgB,QAChB,oBAAoB,QACpB,aACA,GAAG,YACC;CACJ,MAAM,UAAU,MAAM,OAAO;AAE7B,QACE,qBAAC,mBAAmB;EAClB,GAAI;EACJ,WAAW,IACT,yDACA,QACA,UACD;aAED,oBAAC,mBAAmB;GAAO,WAAU;aACnC,qBAAC;IAAI,WAAU;eACb,qBAAC;KAAI,WAAU;gBACb,oBAAC;MAAI,WAAU;gBACb,oBAAC;OAAK,IAAI;OAAS,WAAU;iBAC1B;QACI;OACH,EACN,oBAAC,mBAAmB;MAAQ,mBAAiB;gBAC1C,iBAAiB,oBAAC,oBAAkB;OACV;MACzB,EACL,YACC,oBAAC;KAAK,IAAG;KAAO,MAAK;KAAQ,WAAU;eACpC;MACI;KAEL;IACoB,EAC5B,oBAAC,mBAAmB;GAClB,YAAY;GACZ,WAAW,IACT,iIACD;aAED,qBAAC;IAAI,WAAU;eACZ,eAAe,oBAAC,kBAAM,cAAmB,EAC1C,oBAAC;KAAI,WAAU;KAAU;MAAe;KACpC;IACqB;GACL;;AAI9B,UAAU,OAAO;AAEjB,MAAM,wBAAwB;AAC5B,QACE,qBAAC;EAAI,WAAU;aACb,oBAAC,UAAK,WAAU,yEAAyE,EACzF,oBAAC,UAAK,WAAU,yGAAyG;GACrH;;AAIV,wBAAe"}
@@ -1,5 +1,5 @@
1
1
  import { SortOptions } from "./sort-products/index.js";
2
- import * as react_jsx_runtime11 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/refinement-list/index.d.ts
5
5
  type RefinementListProps = {
@@ -10,7 +10,7 @@ type RefinementListProps = {
10
10
  declare const RefinementList: ({
11
11
  sortBy,
12
12
  "data-testid": dataTestId
13
- }: RefinementListProps) => react_jsx_runtime11.JSX.Element;
13
+ }: RefinementListProps) => react_jsx_runtime0.JSX.Element;
14
14
  //#endregion
15
15
  export { RefinementList as default };
16
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/refinement-list/index.tsx"],"sourcesContent":[],"mappings":";;;;KAQK,mBAAA;UACK;;EADL,aAAA,CAAA,EAAA,MAAmB;AACH,CAAA;cAKf,cAAkB,EAAA,CAAA;EAAA,MAAA;EAAA,aAAA,EAAA;AAAA,CAAA,EAGrB,mBAHqB,EAAA,GAGF,mBAAA,CAAA,GAAA,CAAA,OAHE"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/refinement-list/index.tsx"],"sourcesContent":[],"mappings":";;;;KAQK,mBAAA;UACK;;EADL,aAAA,CAAA,EAAA,MAAmB;AACH,CAAA;cAKf,cAAkB,EAAA,CAAA;EAAA,MAAA;EAAA,aAAA,EAAA;AAAA,CAAA,EAGrB,mBAHqB,EAAA,GAGF,kBAAA,CAAA,GAAA,CAAA,OAHE"}
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime7 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime10 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/refinement-list/sort-products/index.d.ts
4
4
  type SortOptions = 'price_asc' | 'price_desc' | 'created_at';
@@ -11,7 +11,7 @@ declare const SortProducts: ({
11
11
  "data-testid": dataTestId,
12
12
  sortBy,
13
13
  setQueryParams
14
- }: SortProductsProps) => react_jsx_runtime7.JSX.Element;
14
+ }: SortProductsProps) => react_jsx_runtime10.JSX.Element;
15
15
  //#endregion
16
16
  export { SortOptions, SortProducts as default };
17
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/components/refinement-list/sort-products/index.tsx"],"sourcesContent":[],"mappings":";;;KAIY,WAAA;KAEP,iBAAA;UACK;EAHE,cAAW,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAIiB,WAJjB,EAAA,GAAA,IAAA;EAElB,aAAA,CAAA,EAAA,MAAiB;AAE6B,CAAA;cAmB7C,YAAgB,EAAA,CAAA;EAAA,aAAA,EAAA,UAAA;EAAA,MAAA;EAAA;AAAA,CAAA,EAInB,iBAJmB,EAAA,GAIF,kBAAA,CAAA,GAAA,CAAA,OAJE"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/components/refinement-list/sort-products/index.tsx"],"sourcesContent":[],"mappings":";;;KAIY,WAAA;KAEP,iBAAA;UACK;EAHE,cAAW,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAIiB,WAJjB,EAAA,GAAA,IAAA;EAElB,aAAA,CAAA,EAAA,MAAiB;AAE6B,CAAA;cAmB7C,YAAgB,EAAA,CAAA;EAAA,aAAA,EAAA,UAAA;EAAA,MAAA;EAAA;AAAA,CAAA,EAInB,iBAJmB,EAAA,GAIF,mBAAA,CAAA,GAAA,CAAA,OAJE"}
@@ -1,5 +1,5 @@
1
1
  import { Product } from "../../types/graphql.js";
2
- import * as react_jsx_runtime10 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime6 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/related-products/index.d.ts
5
5
  type RelatedProductsProps = {
@@ -9,7 +9,7 @@ type RelatedProductsProps = {
9
9
  declare function RelatedProducts({
10
10
  product,
11
11
  countryCode
12
- }: RelatedProductsProps): Promise<react_jsx_runtime10.JSX.Element | null>;
12
+ }: RelatedProductsProps): Promise<react_jsx_runtime6.JSX.Element | null>;
13
13
  //#endregion
14
14
  export { RelatedProducts as default };
15
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/related-products/index.tsx"],"sourcesContent":[],"mappings":";;;;KASK,oBAAA;WACM;;AAHc,CAAA;AAOK,iBAAA,eAAA,CAAe;EAAA,OAAA;EAAA;AAAA,CAAA,EAG1C,oBAH0C,CAAA,EAGtB,OAHsB,CAGtB,mBAAA,CAAA,GAAA,CAAA,OAAA,GAHsB,IAAA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/related-products/index.tsx"],"sourcesContent":[],"mappings":";;;;KASK,oBAAA;WACM;;AAHc,CAAA;AAOK,iBAAA,eAAA,CAAe;EAAA,OAAA;EAAA;AAAA,CAAA,EAG1C,oBAH0C,CAAA,EAGtB,OAHsB,CAGtB,kBAAA,CAAA,GAAA,CAAA,OAAA,GAHsB,IAAA,CAAA"}
@@ -1,11 +1,11 @@
1
- import * as react_jsx_runtime12 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/skeleton-product-grid/index.d.ts
4
4
  declare const SkeletonProductGrid: ({
5
5
  numberOfProducts
6
6
  }: {
7
7
  numberOfProducts?: number;
8
- }) => react_jsx_runtime12.JSX.Element;
8
+ }) => react_jsx_runtime0.JSX.Element;
9
9
  //#endregion
10
10
  export { SkeletonProductGrid as default };
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/skeleton-product-grid/index.tsx"],"sourcesContent":[],"mappings":";;;cAGM;;;;MAIL,mBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/skeleton-product-grid/index.tsx"],"sourcesContent":[],"mappings":";;;cAGM;;;;MAIL,kBAAA,CAAA,GAAA,CAAA"}
@@ -1,7 +1,7 @@
1
- import * as react_jsx_runtime13 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime3 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/skeleton-product-preview/index.d.ts
4
- declare const SkeletonProductPreview: () => react_jsx_runtime13.JSX.Element;
4
+ declare const SkeletonProductPreview: () => react_jsx_runtime3.JSX.Element;
5
5
  //#endregion
6
6
  export { SkeletonProductPreview as default };
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/skeleton-product-preview/index.tsx"],"sourcesContent":[],"mappings":";;;cAEM,8BAAsB,mBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/skeleton-product-preview/index.tsx"],"sourcesContent":[],"mappings":";;;cAEM,8BAAsB,kBAAA,CAAA,GAAA,CAAA"}
@@ -1,7 +1,7 @@
1
- import * as react_jsx_runtime9 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime1 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/skeleton-related-products/index.d.ts
4
- declare const SkeletonRelatedProducts: () => react_jsx_runtime9.JSX.Element;
4
+ declare const SkeletonRelatedProducts: () => react_jsx_runtime1.JSX.Element;
5
5
  //#endregion
6
6
  export { SkeletonRelatedProducts as default };
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1,14 +1,14 @@
1
- import * as _apollo_client0 from "@apollo/client";
1
+ import * as _apollo_client20 from "@apollo/client";
2
2
 
3
3
  //#region src/lib/gql/fragments/cart.d.ts
4
- declare const LINE_ITEM_FRAGMENT: _apollo_client0.DocumentNode;
5
- declare const ADDRESS_FRAGMENT: _apollo_client0.DocumentNode;
6
- declare const SHIPPING_METHODS_FRAGMENT: _apollo_client0.DocumentNode;
7
- declare const PAYMENT_COLLECTION_FRAGMENT: _apollo_client0.DocumentNode;
8
- declare const COUNTRY_FRAGMENT: _apollo_client0.DocumentNode;
9
- declare const REGION_FRAGMENT: _apollo_client0.DocumentNode;
10
- declare const PROMOTION_FRAGMENT: _apollo_client0.DocumentNode;
11
- declare const CART_FRAGMENT: _apollo_client0.DocumentNode;
4
+ declare const LINE_ITEM_FRAGMENT: _apollo_client20.DocumentNode;
5
+ declare const ADDRESS_FRAGMENT: _apollo_client20.DocumentNode;
6
+ declare const SHIPPING_METHODS_FRAGMENT: _apollo_client20.DocumentNode;
7
+ declare const PAYMENT_COLLECTION_FRAGMENT: _apollo_client20.DocumentNode;
8
+ declare const COUNTRY_FRAGMENT: _apollo_client20.DocumentNode;
9
+ declare const REGION_FRAGMENT: _apollo_client20.DocumentNode;
10
+ declare const PROMOTION_FRAGMENT: _apollo_client20.DocumentNode;
11
+ declare const CART_FRAGMENT: _apollo_client20.DocumentNode;
12
12
  //#endregion
13
13
  export { ADDRESS_FRAGMENT, CART_FRAGMENT, COUNTRY_FRAGMENT, LINE_ITEM_FRAGMENT, PAYMENT_COLLECTION_FRAGMENT, PROMOTION_FRAGMENT, REGION_FRAGMENT, SHIPPING_METHODS_FRAGMENT };
14
14
  //# sourceMappingURL=cart.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cart.d.ts","names":[],"sources":["../../../../src/lib/gql/fragments/cart.ts"],"sourcesContent":[],"mappings":";;;cAIa,oBAiBZ,eAAA,CAjB8B;cAmBlB,kBAUZ,eAAA,CAV4B;cAYhB,2BAUZ,eAAA,CAVqC;AA/BzB,cA2CA,2BA1BZ,EA4CA,eAAA,CAlBuC,YA1BvC;AAEY,cA4CA,gBAlCZ,EAyCA,eAAA,CAP4B,YAlC5B;AAEY,cAyCA,eA/BZ,EA0CA,eAAA,CAX2B,YA/B3B;AAEY,cA0CA,kBAxBZ,EAkCA,eAAA,CAV8B,YAxB9B;AAEY,cAkCA,aA3BZ,EAsEA,eAAA,CA3CyB,YA3BzB"}
1
+ {"version":3,"file":"cart.d.ts","names":[],"sources":["../../../../src/lib/gql/fragments/cart.ts"],"sourcesContent":[],"mappings":";;;cAIa,oBAiBZ,gBAAA,CAjB8B;cAmBlB,kBAUZ,gBAAA,CAV4B;cAYhB,2BAUZ,gBAAA,CAVqC;AA/BzB,cA2CA,2BA1BZ,EA4CA,gBAAA,CAlBuC,YA1BvC;AAEY,cA4CA,gBAlCZ,EAyCA,gBAAA,CAP4B,YAlC5B;AAEY,cAyCA,eA/BZ,EA0CA,gBAAA,CAX2B,YA/B3B;AAEY,cA0CA,kBAxBZ,EAkCA,gBAAA,CAV8B,YAxB9B;AAEY,cAkCA,aA3BZ,EAsEA,gBAAA,CA3CyB,YA3BzB"}
@@ -1,20 +1,20 @@
1
- import * as _apollo_client7 from "@apollo/client";
1
+ import * as _apollo_client28 from "@apollo/client";
2
2
 
3
3
  //#region src/lib/gql/fragments/product.d.ts
4
- declare const PRODUCT_IMAGE_FRAGMENT: _apollo_client7.DocumentNode;
5
- declare const PRODUCT_TAG_FRAGMENT: _apollo_client7.DocumentNode;
6
- declare const PRODUCT_OPTION_FRAGMENT: _apollo_client7.DocumentNode;
7
- declare const PRICE_FRAGMENT: _apollo_client7.DocumentNode;
8
- declare const PRODUCT_VARIANT_CONTENT_FRAGMENT: _apollo_client7.DocumentNode;
9
- declare const PRODUCT_VARIANT_PRICING_FRAGMENT: _apollo_client7.DocumentNode;
10
- declare const PRODUCT_VARIANT_FRAGMENT: _apollo_client7.DocumentNode;
11
- declare const PRODUCT_CATEGORY_FRAGMENT: _apollo_client7.DocumentNode;
12
- declare const PRODUCT_COLLECTION_FRAGMENT: _apollo_client7.DocumentNode;
13
- declare const PRODUCT_CONTENT_FRAGMENT: _apollo_client7.DocumentNode;
14
- declare const PRODUCT_FRAGMENT: _apollo_client7.DocumentNode;
15
- declare const PRODUCT_PREVIEW_FRAGMENT: _apollo_client7.DocumentNode;
16
- declare const COLLECTION_PRODUCTS_FRAGMENT: _apollo_client7.DocumentNode;
17
- declare const PRODUCT_HIT_FRAGMENT: _apollo_client7.DocumentNode;
4
+ declare const PRODUCT_IMAGE_FRAGMENT: _apollo_client28.DocumentNode;
5
+ declare const PRODUCT_TAG_FRAGMENT: _apollo_client28.DocumentNode;
6
+ declare const PRODUCT_OPTION_FRAGMENT: _apollo_client28.DocumentNode;
7
+ declare const PRICE_FRAGMENT: _apollo_client28.DocumentNode;
8
+ declare const PRODUCT_VARIANT_CONTENT_FRAGMENT: _apollo_client28.DocumentNode;
9
+ declare const PRODUCT_VARIANT_PRICING_FRAGMENT: _apollo_client28.DocumentNode;
10
+ declare const PRODUCT_VARIANT_FRAGMENT: _apollo_client28.DocumentNode;
11
+ declare const PRODUCT_CATEGORY_FRAGMENT: _apollo_client28.DocumentNode;
12
+ declare const PRODUCT_COLLECTION_FRAGMENT: _apollo_client28.DocumentNode;
13
+ declare const PRODUCT_CONTENT_FRAGMENT: _apollo_client28.DocumentNode;
14
+ declare const PRODUCT_FRAGMENT: _apollo_client28.DocumentNode;
15
+ declare const PRODUCT_PREVIEW_FRAGMENT: _apollo_client28.DocumentNode;
16
+ declare const COLLECTION_PRODUCTS_FRAGMENT: _apollo_client28.DocumentNode;
17
+ declare const PRODUCT_HIT_FRAGMENT: _apollo_client28.DocumentNode;
18
18
  //#endregion
19
19
  export { COLLECTION_PRODUCTS_FRAGMENT, PRICE_FRAGMENT, PRODUCT_CATEGORY_FRAGMENT, PRODUCT_COLLECTION_FRAGMENT, PRODUCT_CONTENT_FRAGMENT, PRODUCT_FRAGMENT, PRODUCT_HIT_FRAGMENT, PRODUCT_IMAGE_FRAGMENT, PRODUCT_OPTION_FRAGMENT, PRODUCT_PREVIEW_FRAGMENT, PRODUCT_TAG_FRAGMENT, PRODUCT_VARIANT_CONTENT_FRAGMENT, PRODUCT_VARIANT_FRAGMENT, PRODUCT_VARIANT_PRICING_FRAGMENT };
20
20
  //# sourceMappingURL=product.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"product.d.ts","names":[],"sources":["../../../../src/lib/gql/fragments/product.ts"],"sourcesContent":[],"mappings":";;;cAEa,wBAKZ,eAAA,CALkC;cAOtB,sBAIZ,eAAA,CAJgC;cAMpB,yBASZ,eAAA,CATmC;AAbvB,cAwBA,cAnBZ,EAyBA,eAAA,CAN0B,YAnB1B;AAEY,cAyBA,gCArBZ,EAkCA,eAAA,CAb4C,YArB5C;AAEY,cAkCA,gCAzBZ,EAqCA,eAAA,CAZ4C,YAzB5C;AAEY,cAqCA,wBA/BZ,EAoDA,eAAA,CArBoC,YA/BpC;AAEY,cAoDA,yBAvCZ,EA8CA,eAAA,CAPqC,YAvCrC;AAEY,cA8CA,2BAlCZ,EAwCA,eAAA,CANuC,YAlCvC;AAEY,cAwCA,wBAnBZ,EA8DA,eAAA,CA3CoC,YAnBpC;AAEY,cA8DA,gBAvDZ,EA4FA,eAAA,CArC4B,YAvD5B;AAEY,cA4FA,wBAtFZ,EAwGA,eAAA,CAlBoC,YAtFpC;AAEY,cAwGA,4BA7DZ,EAoFA,eAAA,CAvBwC,YA7DxC;AAEY,cAoFA,oBA/CZ,EAuDA,eAAA,CARgC,YA/ChC"}
1
+ {"version":3,"file":"product.d.ts","names":[],"sources":["../../../../src/lib/gql/fragments/product.ts"],"sourcesContent":[],"mappings":";;;cAEa,wBAKZ,gBAAA,CALkC;cAOtB,sBAIZ,gBAAA,CAJgC;cAMpB,yBASZ,gBAAA,CATmC;AAbvB,cAwBA,cAnBZ,EAyBA,gBAAA,CAN0B,YAnB1B;AAEY,cAyBA,gCArBZ,EAkCA,gBAAA,CAb4C,YArB5C;AAEY,cAkCA,gCAzBZ,EAqCA,gBAAA,CAZ4C,YAzB5C;AAEY,cAqCA,wBA/BZ,EAoDA,gBAAA,CArBoC,YA/BpC;AAEY,cAoDA,yBAvCZ,EA8CA,gBAAA,CAPqC,YAvCrC;AAEY,cA8CA,2BAlCZ,EAwCA,gBAAA,CANuC,YAlCvC;AAEY,cAwCA,wBAnBZ,EA8DA,gBAAA,CA3CoC,YAnBpC;AAEY,cA8DA,gBAvDZ,EA4FA,gBAAA,CArC4B,YAvD5B;AAEY,cA4FA,wBAtFZ,EAwGA,gBAAA,CAlBoC,YAtFpC;AAEY,cAwGA,4BA7DZ,EAoFA,gBAAA,CAvBwC,YA7DxC;AAEY,cAoFA,oBA/CZ,EAuDA,gBAAA,CARgC,YA/ChC"}
@@ -1,15 +1,15 @@
1
- import * as _apollo_client21 from "@apollo/client";
1
+ import * as _apollo_client0 from "@apollo/client";
2
2
 
3
3
  //#region src/lib/gql/mutations/cart.d.ts
4
- declare const CREATE_CART_MUTATION: _apollo_client21.DocumentNode;
5
- declare const UPDATE_CART_MUTATION: _apollo_client21.DocumentNode;
6
- declare const CREATE_LINE_ITEM_MUTATION: _apollo_client21.DocumentNode;
7
- declare const UPDATE_LINE_ITEM_MUTATION: _apollo_client21.DocumentNode;
8
- declare const DELETE_LINE_ITEM_MUTATION: _apollo_client21.DocumentNode;
9
- declare const ADD_SHIPPING_METHOD_MUTATION: _apollo_client21.DocumentNode;
10
- declare const COMPLETE_CART_MUTATION: _apollo_client21.DocumentNode;
11
- declare const TRANSFER_CART_MUTATION: _apollo_client21.DocumentNode;
12
- declare const APPLY_PROMOTIONS_MUTATION: _apollo_client21.DocumentNode;
4
+ declare const CREATE_CART_MUTATION: _apollo_client0.DocumentNode;
5
+ declare const UPDATE_CART_MUTATION: _apollo_client0.DocumentNode;
6
+ declare const CREATE_LINE_ITEM_MUTATION: _apollo_client0.DocumentNode;
7
+ declare const UPDATE_LINE_ITEM_MUTATION: _apollo_client0.DocumentNode;
8
+ declare const DELETE_LINE_ITEM_MUTATION: _apollo_client0.DocumentNode;
9
+ declare const ADD_SHIPPING_METHOD_MUTATION: _apollo_client0.DocumentNode;
10
+ declare const COMPLETE_CART_MUTATION: _apollo_client0.DocumentNode;
11
+ declare const TRANSFER_CART_MUTATION: _apollo_client0.DocumentNode;
12
+ declare const APPLY_PROMOTIONS_MUTATION: _apollo_client0.DocumentNode;
13
13
  //#endregion
14
14
  export { ADD_SHIPPING_METHOD_MUTATION, APPLY_PROMOTIONS_MUTATION, COMPLETE_CART_MUTATION, CREATE_CART_MUTATION, CREATE_LINE_ITEM_MUTATION, DELETE_LINE_ITEM_MUTATION, TRANSFER_CART_MUTATION, UPDATE_CART_MUTATION, UPDATE_LINE_ITEM_MUTATION };
15
15
  //# sourceMappingURL=cart.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cart.d.ts","names":[],"sources":["../../../../src/lib/gql/mutations/cart.ts"],"sourcesContent":[],"mappings":";;;cAUa,sBAOZ,gBAAA,CAPgC;cASpB,sBAgBZ,gBAAA,CAhBgC;cAkBpB,2BAWZ,gBAAA,CAXqC;AA3BzB,cAwCA,yBAjCZ,EAgDA,gBAAA,CAfqC,YAjCrC;AAEY,cAgDA,yBAhCZ,EAwCA,gBAAA,CARqC,YAhCrC;AAEY,cAwCA,4BA7BZ,EA4CA,gBAAA,CAfwC,YA7BxC;AAEY,cA4CA,sBA7BZ,EAqFA,gBAAA,CAxDkC,YA7BlC;AAEY,cAqFA,sBA7EZ,EAoFA,gBAAA,CAPkC,YA7ElC;AAEY,cAoFA,yBArEZ,EA4EA,gBAAA,CAPqC,YArErC"}
1
+ {"version":3,"file":"cart.d.ts","names":[],"sources":["../../../../src/lib/gql/mutations/cart.ts"],"sourcesContent":[],"mappings":";;;cAUa,sBAOZ,eAAA,CAPgC;cASpB,sBAgBZ,eAAA,CAhBgC;cAkBpB,2BAWZ,eAAA,CAXqC;AA3BzB,cAwCA,yBAjCZ,EAgDA,eAAA,CAfqC,YAjCrC;AAEY,cAgDA,yBAhCZ,EAwCA,eAAA,CARqC,YAhCrC;AAEY,cAwCA,4BA7BZ,EA4CA,eAAA,CAfwC,YA7BxC;AAEY,cA4CA,sBA7BZ,EAqFA,eAAA,CAxDkC,YA7BlC;AAEY,cAqFA,sBA7EZ,EAoFA,eAAA,CAPkC,YA7ElC;AAEY,cAoFA,yBArEZ,EA4EA,eAAA,CAPqC,YArErC"}
@@ -1,7 +1,7 @@
1
- import * as _apollo_client30 from "@apollo/client";
1
+ import * as _apollo_client8 from "@apollo/client";
2
2
 
3
3
  //#region src/lib/gql/queries/cart.d.ts
4
- declare const GET_CART_QUERY: _apollo_client30.DocumentNode;
4
+ declare const GET_CART_QUERY: _apollo_client8.DocumentNode;
5
5
  //#endregion
6
6
  export { GET_CART_QUERY };
7
7
  //# sourceMappingURL=cart.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cart.d.ts","names":[],"sources":["../../../../src/lib/gql/queries/cart.ts"],"sourcesContent":[],"mappings":";;;cAIa,gBAOZ,gBAAA,CAP0B"}
1
+ {"version":3,"file":"cart.d.ts","names":[],"sources":["../../../../src/lib/gql/queries/cart.ts"],"sourcesContent":[],"mappings":";;;cAIa,gBAOZ,eAAA,CAP0B"}
@@ -1,17 +1,17 @@
1
- import * as _apollo_client31 from "@apollo/client";
1
+ import * as _apollo_client9 from "@apollo/client";
2
2
 
3
3
  //#region src/lib/gql/queries/product.d.ts
4
- declare const GET_PRODUCTS_QUERY: _apollo_client31.DocumentNode;
5
- declare const GET_PRODUCTS_PREVIEW_QUERY: _apollo_client31.DocumentNode;
6
- declare const GET_PRODUCT_QUERY: _apollo_client31.DocumentNode;
7
- declare const GET_PRODUCT_CONTENT_BY_HANDLE_QUERY: _apollo_client31.DocumentNode;
8
- declare const GET_PRODUCT_PRICING_QUERY: _apollo_client31.DocumentNode;
9
- declare const GET_PRODUCT_CATEGORIES_QUERY: _apollo_client31.DocumentNode;
10
- declare const GET_PRODUCT_CATEGORY_QUERY: _apollo_client31.DocumentNode;
11
- declare const GET_COLLECTIONS_QUERY: _apollo_client31.DocumentNode;
12
- declare const GET_COLLECTIONS_SUMMARY_QUERY: _apollo_client31.DocumentNode;
13
- declare const GET_COLLECTION_QUERY: _apollo_client31.DocumentNode;
14
- declare const SEARCH_SUGGESTIONS_QUERY: _apollo_client31.DocumentNode;
4
+ declare const GET_PRODUCTS_QUERY: _apollo_client9.DocumentNode;
5
+ declare const GET_PRODUCTS_PREVIEW_QUERY: _apollo_client9.DocumentNode;
6
+ declare const GET_PRODUCT_QUERY: _apollo_client9.DocumentNode;
7
+ declare const GET_PRODUCT_CONTENT_BY_HANDLE_QUERY: _apollo_client9.DocumentNode;
8
+ declare const GET_PRODUCT_PRICING_QUERY: _apollo_client9.DocumentNode;
9
+ declare const GET_PRODUCT_CATEGORIES_QUERY: _apollo_client9.DocumentNode;
10
+ declare const GET_PRODUCT_CATEGORY_QUERY: _apollo_client9.DocumentNode;
11
+ declare const GET_COLLECTIONS_QUERY: _apollo_client9.DocumentNode;
12
+ declare const GET_COLLECTIONS_SUMMARY_QUERY: _apollo_client9.DocumentNode;
13
+ declare const GET_COLLECTION_QUERY: _apollo_client9.DocumentNode;
14
+ declare const SEARCH_SUGGESTIONS_QUERY: _apollo_client9.DocumentNode;
15
15
  //#endregion
16
16
  export { GET_COLLECTIONS_QUERY, GET_COLLECTIONS_SUMMARY_QUERY, GET_COLLECTION_QUERY, GET_PRODUCTS_PREVIEW_QUERY, GET_PRODUCTS_QUERY, GET_PRODUCT_CATEGORIES_QUERY, GET_PRODUCT_CATEGORY_QUERY, GET_PRODUCT_CONTENT_BY_HANDLE_QUERY, GET_PRODUCT_PRICING_QUERY, GET_PRODUCT_QUERY, SEARCH_SUGGESTIONS_QUERY };
17
17
  //# sourceMappingURL=product.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"product.d.ts","names":[],"sources":["../../../../src/lib/gql/queries/product.ts"],"sourcesContent":[],"mappings":";;;cAaa,oBAkCZ,gBAAA,CAlC8B;cAoClB,4BAkCZ,gBAAA,CAlCsC;cAoC1B,mBAOZ,gBAAA,CAP6B;AAxEjB,cAiFA,mCAjFkB,EA8F9B,gBAAA,CAb+C,YA/C/C;AAEY,cA4DA,yBA1BZ,EAmCA,gBAAA,CATqC,YA1BrC;AAEY,cAmCA,4BA5BZ,EAgDA,gBAAA,CApBwC,YA5BxC;AAEY,cAgDA,0BAnCZ,EAsDA,gBAAA,CAnBsC,YAnCtC;AAEY,cAsDA,qBA7CZ,EAwDA,gBAAA,CAXiC,YA7CjC;AAEY,cAwDA,6BApCZ,EA2CA,gBAAA,CAPyC,YApCzC;AAEY,cA2CA,oBAxBZ,EAmCA,gBAAA,CAXgC,YAxBhC;AAEY,cAmCA,wBAxBZ,EAiCA,gBAAA,CAToC,YAxBpC"}
1
+ {"version":3,"file":"product.d.ts","names":[],"sources":["../../../../src/lib/gql/queries/product.ts"],"sourcesContent":[],"mappings":";;;cAaa,oBAkCZ,eAAA,CAlC8B;cAoClB,4BAkCZ,eAAA,CAlCsC;cAoC1B,mBAOZ,eAAA,CAP6B;AAxEjB,cAiFA,mCAjFkB,EA8F9B,eAAA,CAb+C,YA/C/C;AAEY,cA4DA,yBA1BZ,EAmCA,eAAA,CATqC,YA1BrC;AAEY,cAmCA,4BA5BZ,EAgDA,eAAA,CApBwC,YA5BxC;AAEY,cAgDA,0BAnCZ,EAsDA,eAAA,CAnBsC,YAnCtC;AAEY,cAsDA,qBA7CZ,EAwDA,eAAA,CAXiC,YA7CjC;AAEY,cAwDA,6BApCZ,EA2CA,eAAA,CAPyC,YApCzC;AAEY,cA2CA,oBAxBZ,EAmCA,eAAA,CAXgC,YAxBhC;AAEY,cAmCA,wBAxBZ,EAiCA,eAAA,CAToC,YAxBpC"}
@@ -1,5 +1,5 @@
1
1
  import { SortOptions } from "../../components/refinement-list/sort-products/index.js";
2
- import * as react_jsx_runtime3 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime4 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/templates/paginated-products/index.d.ts
5
5
  declare function PaginatedProducts({
@@ -16,7 +16,7 @@ declare function PaginatedProducts({
16
16
  categoryId?: string;
17
17
  productsIds?: string[];
18
18
  countryCode: string;
19
- }): Promise<react_jsx_runtime3.JSX.Element | null>;
19
+ }): Promise<react_jsx_runtime4.JSX.Element | null>;
20
20
  //#endregion
21
21
  export { PaginatedProducts as default };
22
22
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime4 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime5 from "react/jsx-runtime";
2
2
  import { Region } from "@gfed-medusa/sf-lib-common/types/graphql";
3
3
 
4
4
  //#region src/templates/product-actions-wrapper/index.d.ts
@@ -11,7 +11,7 @@ declare function ProductActionsWrapper({
11
11
  }: {
12
12
  id: string;
13
13
  region: Region;
14
- }): Promise<react_jsx_runtime4.JSX.Element | null>;
14
+ }): Promise<react_jsx_runtime5.JSX.Element | null>;
15
15
  //#endregion
16
16
  export { ProductActionsWrapper as default };
17
17
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { Product } from "../../types/graphql.js";
2
- import * as react_jsx_runtime5 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime2 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/templates/product-info/index.d.ts
5
5
  type ProductInfoProps = {
@@ -7,7 +7,7 @@ type ProductInfoProps = {
7
7
  };
8
8
  declare const ProductInfo: ({
9
9
  product
10
- }: ProductInfoProps) => react_jsx_runtime5.JSX.Element;
10
+ }: ProductInfoProps) => react_jsx_runtime2.JSX.Element;
11
11
  //#endregion
12
12
  export { ProductInfo as default };
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { SortOptions } from "../../components/refinement-list/sort-products/index.js";
2
- import * as react_jsx_runtime6 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime11 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/templates/store-template/index.d.ts
5
5
  declare const StoreTemplate: ({
@@ -10,7 +10,7 @@ declare const StoreTemplate: ({
10
10
  sortBy?: SortOptions;
11
11
  page?: string;
12
12
  countryCode: string;
13
- }) => react_jsx_runtime6.JSX.Element;
13
+ }) => react_jsx_runtime11.JSX.Element;
14
14
  //#endregion
15
15
  export { StoreTemplate as default };
16
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/templates/store-template/index.tsx"],"sourcesContent":[],"mappings":";;;;cAQM;;;;;WAKK;;EALL,WAAA,EAAA,MAgCL;CAhCsB,EAAA,GAQtB,kBAAA,CAAA,GAAA,CAAA,OARsB"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/templates/store-template/index.tsx"],"sourcesContent":[],"mappings":";;;;cAQM;;;;;WAKK;;EALL,WAAA,EAAA,MAgCL;CAhCsB,EAAA,GAQtB,mBAAA,CAAA,GAAA,CAAA,OARsB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gfed-medusa/sf-lib-products",
3
- "version": "1.5.3",
3
+ "version": "1.6.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "module": "./dist/index.js",
@@ -51,7 +51,7 @@
51
51
  },
52
52
  "dependencies": {
53
53
  "@apollo/client": "^4.0.9",
54
- "@gfed-medusa/sf-lib-common": "^3.3.4",
54
+ "@gfed-medusa/sf-lib-common": "^3.3.7",
55
55
  "@gfed-medusa/sf-lib-ui": "^1.2.3",
56
56
  "@headlessui/react": "^2.2.9",
57
57
  "@medusajs/icons": "^2.12.1",