@shopify/shop-minis-react 0.2.7 → 0.3.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 (38) hide show
  1. package/dist/_virtual/index4.js +2 -2
  2. package/dist/_virtual/index5.js +2 -3
  3. package/dist/_virtual/index5.js.map +1 -1
  4. package/dist/_virtual/index6.js +3 -2
  5. package/dist/_virtual/index6.js.map +1 -1
  6. package/dist/components/MinisContainer.js +10 -10
  7. package/dist/components/MinisContainer.js.map +1 -1
  8. package/dist/components/atoms/product-variant-price.js +36 -43
  9. package/dist/components/atoms/product-variant-price.js.map +1 -1
  10. package/dist/components/commerce/add-to-cart.js +70 -53
  11. package/dist/components/commerce/add-to-cart.js.map +1 -1
  12. package/dist/components/commerce/buy-now.js +75 -0
  13. package/dist/components/commerce/buy-now.js.map +1 -0
  14. package/dist/components/commerce/product-card.js +16 -17
  15. package/dist/components/commerce/product-card.js.map +1 -1
  16. package/dist/index.js +230 -230
  17. package/dist/{hooks/shop → internal}/useShopCartActions.js +2 -2
  18. package/dist/internal/useShopCartActions.js.map +1 -0
  19. package/dist/shop-minis-react/node_modules/.pnpm/@videojs_xhr@2.7.0/node_modules/@videojs/xhr/lib/index.js +1 -1
  20. package/dist/shop-minis-react/node_modules/.pnpm/mpd-parser@1.3.1/node_modules/mpd-parser/dist/mpd-parser.es.js +1 -1
  21. package/dist/shop-minis-react/node_modules/.pnpm/querystringify@2.2.0/node_modules/querystringify/index.js +1 -1
  22. package/dist/shop-minis-react/node_modules/.pnpm/simple-swizzle@0.2.2/node_modules/simple-swizzle/index.js +1 -1
  23. package/dist/shop-minis-react/node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.1.0/node_modules/use-sync-external-store/shim/index.js +1 -1
  24. package/generated-hook-maps/hook-actions-map.json +0 -4
  25. package/package.json +2 -2
  26. package/src/components/MinisContainer.tsx +5 -3
  27. package/src/components/atoms/product-variant-price.tsx +1 -5
  28. package/src/components/commerce/add-to-cart.test.tsx +218 -3
  29. package/src/components/commerce/add-to-cart.tsx +40 -16
  30. package/src/components/commerce/buy-now.test.tsx +272 -0
  31. package/src/components/commerce/buy-now.tsx +108 -0
  32. package/src/components/commerce/product-card.tsx +5 -6
  33. package/src/components/index.ts +1 -0
  34. package/src/hooks/index.ts +0 -1
  35. package/src/{hooks/shop → internal}/useShopCartActions.ts +2 -2
  36. package/src/stories/AddToCart.stories.tsx +75 -10
  37. package/src/stories/ProductVariantPrice.stories.tsx +1 -4
  38. package/dist/hooks/shop/useShopCartActions.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"product-card.js","sources":["../../../src/components/commerce/product-card.tsx"],"sourcesContent":["import * as React from 'react'\nimport {useCallback, useContext, useMemo, useState} from 'react'\n\nimport {type Product, type ProductVariant} from '@shopify/shop-minis-platform'\n\nimport {useShopNavigation} from '../../hooks/navigation/useShopNavigation'\nimport {useSavedProductsActions} from '../../hooks/user/useSavedProductsActions'\nimport {formatMoney} from '../../lib/formatMoney'\nimport {cn} from '../../lib/utils'\nimport {Image} from '../atoms/image'\nimport {ProductVariantPrice} from '../atoms/product-variant-price'\nimport {Touchable} from '../atoms/touchable'\nimport {Badge} from '../ui/badge'\n\nimport {FavoriteButton} from './favorite-button'\n\n// Context definition\ninterface ProductCardContextValue {\n // Core data\n product: Product\n selectedProductVariant?: ProductVariant\n\n // UI configuration\n variant: 'default' | 'priceOverlay' | 'compact'\n touchable: boolean\n badgeText?: string\n badgeVariant?: 'primary' | 'secondary' | 'destructive' | 'outline' | 'none'\n\n // State\n isFavorited: boolean\n isFavoriteButtonDisabled: boolean\n\n // Actions\n onClick: () => void\n onFavoriteToggle: () => void\n}\n\nconst ProductCardContext = React.createContext<\n ProductCardContextValue | undefined\n>(undefined)\n\nfunction useProductCardContext() {\n const context = useContext(ProductCardContext)\n if (!context) {\n throw new Error(\n 'ProductCard components must be used within a ProductCard provider'\n )\n }\n return context\n}\n\n// Primitive components (building blocks)\nfunction ProductCardContainer({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n const {touchable, onClick} = useProductCardContext()\n\n const content = (\n <div\n className={cn(\n 'relative w-full overflow-hidden rounded-xl border-0',\n className\n )}\n {...props}\n />\n )\n\n if (touchable && onClick) {\n return (\n <Touchable\n onClick={onClick}\n whileTap={{opacity: 0.7}}\n transition={{\n opacity: {type: 'tween', duration: 0.08, ease: 'easeInOut'},\n }}\n >\n {content}\n </Touchable>\n )\n }\n\n return content\n}\n\nfunction ProductCardImageContainer({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n const {variant} = useProductCardContext()\n\n return (\n <div\n data-slot=\"product-card-image-container\"\n className={cn(\n // Ensure the product image is stretched to the full size of the container (can't use width/height: 100% because of flex)\n 'flex justify-stretch items-stretch',\n 'relative overflow-hidden rounded-xl border border-gray-200',\n 'w-full aspect-square',\n variant === 'compact' ? 'min-h-[104px]' : 'min-h-[134px]',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ProductCardImage({className, ...props}: React.ComponentProps<'img'>) {\n const {product, selectedProductVariant} = useProductCardContext()\n\n // Derive display image locally\n const displayImage = selectedProductVariant?.image || product.featuredImage\n const src = displayImage?.url\n const alt = displayImage?.altText || product.title\n const thumbhash = product.featuredImage?.thumbhash\n\n const renderImageElement = useCallback(\n (src: string) => {\n const imageElement = thumbhash ? (\n <Image\n data-slot=\"product-card-image\"\n src={src}\n alt={alt}\n aspectRatio={1}\n thumbhash={thumbhash}\n className={cn('size-full object-cover', className)}\n {...props}\n />\n ) : (\n <img\n data-slot=\"product-card-image\"\n src={src}\n alt={alt}\n className={cn('size-full', className)}\n {...props}\n />\n )\n\n return imageElement\n },\n [alt, className, props, thumbhash]\n )\n\n return (\n <div className=\"bg-gray-100 flex items-center justify-center size-full\">\n {src ? (\n renderImageElement(src)\n ) : (\n <div className=\"text-gray-400 text-sm w-full text-center\">No Image</div>\n )}\n </div>\n )\n}\n\nfunction ProductCardBadge({\n className,\n position = 'bottom-left',\n variant,\n children,\n ...props\n}: React.ComponentProps<typeof Badge> & {\n position?: 'top-left' | 'bottom-left'\n}) {\n const {badgeText, badgeVariant} = useProductCardContext()\n // If no children provided, use badgeText from context\n const content = children || badgeText\n\n if (!content) return null\n\n return (\n <div\n className={cn(\n 'absolute z-10',\n position === 'top-left' ? 'top-3 left-3' : 'bottom-2 left-2'\n )}\n >\n <Badge\n variant={variant ?? badgeVariant ?? 'none'}\n className={cn(\n !badgeVariant &&\n !variant &&\n 'bg-black/50 text-white border-transparent',\n 'rounded',\n className\n )}\n {...props}\n >\n {content}\n </Badge>\n </div>\n )\n}\n\nfunction ProductCardFavoriteButton({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n const {isFavorited, isFavoriteButtonDisabled, onFavoriteToggle} =\n useProductCardContext()\n if (isFavoriteButtonDisabled) return null\n\n return (\n <div className={cn('absolute bottom-3 right-3 z-10', className)} {...props}>\n <FavoriteButton onClick={onFavoriteToggle} filled={isFavorited} />\n </div>\n )\n}\n\nfunction ProductCardInfo({className, ...props}: React.ComponentProps<'div'>) {\n const {variant} = useProductCardContext()\n if (variant !== 'default') {\n return null\n }\n\n return (\n <div\n data-slot=\"product-card-info\"\n className={cn('px-1 pt-2 pb-0 space-y-1', className)}\n {...props}\n />\n )\n}\n\nfunction ProductCardTitle({\n className,\n children,\n ...props\n}: React.ComponentProps<'h3'>) {\n const {product} = useProductCardContext()\n return (\n <h3\n data-slot=\"product-card-title\"\n className={cn(\n 'text-sm font-medium leading-tight text-gray-900',\n 'truncate overflow-hidden whitespace-nowrap text-ellipsis',\n className\n )}\n {...props}\n >\n {children || product.title}\n </h3>\n )\n}\n\nfunction ProductCardPrice({className}: {className?: string}) {\n const {product, selectedProductVariant} = useProductCardContext()\n\n // Derive price data locally\n const displayPrice = selectedProductVariant?.price || product?.price\n const displayCompareAtPrice =\n selectedProductVariant?.compareAtPrice || product?.compareAtPrice\n\n return (\n <ProductVariantPrice\n amount={displayPrice?.amount || ''}\n currencyCode={displayPrice?.currencyCode || ''}\n compareAtPriceAmount={displayCompareAtPrice?.amount}\n compareAtPriceCurrencyCode={displayCompareAtPrice?.currencyCode}\n className={className}\n />\n )\n}\n\n// Special PriceOverlayBadge for price overlay variant\nfunction ProductCardPriceOverlayBadge() {\n const {product, selectedProductVariant, variant} = useProductCardContext()\n if (variant !== 'priceOverlay') return null\n const displayPrice = selectedProductVariant?.price || product.price\n const currencyCode = displayPrice?.currencyCode\n const amount = displayPrice?.amount\n\n if (!currencyCode || !amount) return null\n return (\n <ProductCardBadge position=\"top-left\">\n {formatMoney(amount, currencyCode)}\n </ProductCardBadge>\n )\n}\n\nexport interface ProductCardProps {\n /** The product to display in the card */\n product: Product\n /** Optional selected variant of the product to show specific variant data */\n selectedProductVariant?: ProductVariant\n /** Visual style variant of the card */\n variant?: 'default' | 'priceOverlay' | 'compact'\n /** Whether the card can be clicked/tapped to navigate to product details */\n touchable?: boolean\n /** Optional text to display in a badge on the card */\n badgeText?: string\n /** Visual style variant for the badge */\n badgeVariant?: 'primary' | 'secondary' | 'destructive' | 'outline' | 'none'\n /** Callback fired when the product is clicked */\n onProductClick?: () => void\n /** Callback fired when the favorite button is toggled */\n onFavoriteToggled?: (isFavorited: boolean) => void\n /** Custom layout via children */\n children?: React.ReactNode\n /** Whether the favorite button is disabled */\n favoriteButtonDisabled?: boolean\n}\n\nfunction ProductCard({\n product,\n selectedProductVariant,\n variant = 'default',\n touchable = true,\n badgeText,\n badgeVariant,\n onProductClick,\n onFavoriteToggled,\n children,\n favoriteButtonDisabled = false,\n}: ProductCardProps) {\n const {navigateToProduct} = useShopNavigation()\n const {saveProduct, unsaveProduct} = useSavedProductsActions()\n\n // Local state for optimistic UI updates\n const [isFavoritedLocal, setIsFavoritedLocal] = useState(product.isFavorited)\n\n const handleClick = useCallback(() => {\n if (!touchable) return\n\n onProductClick?.()\n\n navigateToProduct({\n productId: product.id,\n })\n }, [navigateToProduct, product.id, touchable, onProductClick])\n\n const handleFavoriteClick = useCallback(async () => {\n const previousState = isFavoritedLocal\n\n // Optimistic update\n setIsFavoritedLocal(!previousState)\n onFavoriteToggled?.(!previousState)\n\n try {\n if (previousState) {\n await unsaveProduct({\n productId: product.id,\n shopId: product.shop.id,\n productVariantId:\n selectedProductVariant?.id || product.defaultVariantId,\n })\n } else {\n await saveProduct({\n productId: product.id,\n shopId: product.shop.id,\n productVariantId:\n selectedProductVariant?.id || product.defaultVariantId,\n })\n }\n } catch (error) {\n // Revert optimistic update on error\n setIsFavoritedLocal(previousState)\n onFavoriteToggled?.(previousState)\n }\n }, [\n isFavoritedLocal,\n product.id,\n product.shop.id,\n product.defaultVariantId,\n selectedProductVariant?.id,\n saveProduct,\n unsaveProduct,\n onFavoriteToggled,\n ])\n\n const contextValue = useMemo<ProductCardContextValue>(\n () => ({\n // Core data\n product,\n selectedProductVariant,\n\n // UI configuration\n variant,\n touchable,\n badgeText,\n badgeVariant,\n\n // State\n isFavorited: isFavoritedLocal,\n isFavoriteButtonDisabled: favoriteButtonDisabled,\n // Actions\n onClick: handleClick,\n onFavoriteToggle: handleFavoriteClick,\n }),\n [\n product,\n selectedProductVariant,\n variant,\n touchable,\n badgeText,\n badgeVariant,\n isFavoritedLocal,\n handleClick,\n handleFavoriteClick,\n favoriteButtonDisabled,\n ]\n )\n\n return (\n <ProductCardContext.Provider value={contextValue}>\n {children ?? (\n <ProductCardContainer>\n <ProductCardImageContainer>\n <ProductCardImage />\n {variant === 'priceOverlay' && <ProductCardPriceOverlayBadge />}\n <ProductCardBadge />\n <ProductCardFavoriteButton />\n </ProductCardImageContainer>\n {variant === 'default' && (\n <ProductCardInfo>\n <ProductCardTitle />\n <ProductCardPrice />\n </ProductCardInfo>\n )}\n </ProductCardContainer>\n )}\n </ProductCardContext.Provider>\n )\n}\n\nexport {\n ProductCard,\n ProductCardContainer,\n ProductCardImageContainer,\n ProductCardImage,\n ProductCardBadge,\n ProductCardFavoriteButton,\n ProductCardInfo,\n ProductCardTitle,\n ProductCardPrice,\n}\n"],"names":["ProductCardContext","React","useProductCardContext","context","useContext","ProductCardContainer","className","props","touchable","onClick","content","jsx","cn","Touchable","ProductCardImageContainer","variant","ProductCardImage","product","selectedProductVariant","displayImage","src","alt","thumbhash","renderImageElement","useCallback","Image","ProductCardBadge","position","children","badgeText","badgeVariant","Badge","ProductCardFavoriteButton","isFavorited","isFavoriteButtonDisabled","onFavoriteToggle","FavoriteButton","ProductCardInfo","ProductCardTitle","ProductCardPrice","displayPrice","displayCompareAtPrice","ProductVariantPrice","ProductCardPriceOverlayBadge","currencyCode","amount","formatMoney","ProductCard","onProductClick","onFavoriteToggled","favoriteButtonDisabled","navigateToProduct","useShopNavigation","saveProduct","unsaveProduct","useSavedProductsActions","isFavoritedLocal","setIsFavoritedLocal","useState","handleClick","handleFavoriteClick","previousState","contextValue","useMemo","jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"product-card.js","sources":["../../../src/components/commerce/product-card.tsx"],"sourcesContent":["import * as React from 'react'\nimport {useCallback, useContext, useMemo, useState} from 'react'\n\nimport {type Product, type ProductVariant} from '@shopify/shop-minis-platform'\n\nimport {useShopNavigation} from '../../hooks/navigation/useShopNavigation'\nimport {useSavedProductsActions} from '../../hooks/user/useSavedProductsActions'\nimport {formatMoney} from '../../lib/formatMoney'\nimport {cn} from '../../lib/utils'\nimport {Image} from '../atoms/image'\nimport {ProductVariantPrice} from '../atoms/product-variant-price'\nimport {Touchable} from '../atoms/touchable'\nimport {Badge} from '../ui/badge'\n\nimport {FavoriteButton} from './favorite-button'\n\n// Context definition\ninterface ProductCardContextValue {\n // Core data\n product: Product\n selectedProductVariant?: ProductVariant\n\n // UI configuration\n variant: 'default' | 'priceOverlay' | 'compact'\n touchable: boolean\n badgeText?: string\n badgeVariant?: 'primary' | 'secondary' | 'destructive' | 'outline' | 'none'\n\n // State\n isFavorited: boolean\n isFavoriteButtonDisabled: boolean\n\n // Actions\n onClick: () => void\n onFavoriteToggle: () => void\n}\n\nconst ProductCardContext = React.createContext<\n ProductCardContextValue | undefined\n>(undefined)\n\nfunction useProductCardContext() {\n const context = useContext(ProductCardContext)\n if (!context) {\n throw new Error(\n 'ProductCard components must be used within a ProductCard provider'\n )\n }\n return context\n}\n\n// Primitive components (building blocks)\nfunction ProductCardContainer({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n const {touchable, onClick} = useProductCardContext()\n\n const content = (\n <div\n className={cn(\n 'relative size-full overflow-hidden rounded-xl border-0',\n className\n )}\n {...props}\n />\n )\n\n if (touchable && onClick) {\n return (\n <Touchable\n onClick={onClick}\n whileTap={{opacity: 0.7}}\n transition={{\n opacity: {type: 'tween', duration: 0.08, ease: 'easeInOut'},\n }}\n >\n {content}\n </Touchable>\n )\n }\n\n return content\n}\n\nfunction ProductCardImageContainer({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n const {variant} = useProductCardContext()\n\n return (\n <div\n data-slot=\"product-card-image-container\"\n className={cn(\n 'relative overflow-hidden rounded-xl border border-gray-200',\n 'aspect-square',\n variant === 'compact' ? 'min-h-[104px]' : 'min-h-[134px]',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ProductCardImage({className, ...props}: React.ComponentProps<'img'>) {\n const {product, selectedProductVariant} = useProductCardContext()\n\n // Derive display image locally\n const displayImage = selectedProductVariant?.image || product.featuredImage\n const src = displayImage?.url\n const alt = displayImage?.altText || product.title\n const thumbhash = product.featuredImage?.thumbhash\n\n const renderImageElement = useCallback(\n (src: string) => {\n const imageElement = thumbhash ? (\n <Image\n data-slot=\"product-card-image\"\n src={src}\n alt={alt}\n aspectRatio={1}\n thumbhash={thumbhash}\n objectFit=\"cover\"\n className={cn('size-full', className)}\n {...props}\n />\n ) : (\n <img\n data-slot=\"product-card-image\"\n src={src}\n alt={alt}\n className={cn('size-full object-cover', className)}\n {...props}\n />\n )\n\n return imageElement\n },\n [alt, className, props, thumbhash]\n )\n\n return (\n <div className=\"bg-gray-100 flex items-center justify-center size-full\">\n {src ? (\n renderImageElement(src)\n ) : (\n <div className=\"text-gray-400 text-sm w-full text-center\">No Image</div>\n )}\n </div>\n )\n}\n\nfunction ProductCardBadge({\n className,\n position = 'bottom-left',\n variant,\n children,\n ...props\n}: React.ComponentProps<typeof Badge> & {\n position?: 'top-left' | 'bottom-left'\n}) {\n const {badgeText, badgeVariant} = useProductCardContext()\n // If no children provided, use badgeText from context\n const content = children || badgeText\n\n if (!content) return null\n\n return (\n <div\n className={cn(\n 'absolute z-10',\n position === 'top-left' ? 'top-3 left-3' : 'bottom-2 left-2'\n )}\n >\n <Badge\n variant={variant ?? badgeVariant ?? 'none'}\n className={cn(\n !badgeVariant &&\n !variant &&\n 'bg-black/50 text-white border-transparent',\n 'rounded',\n className\n )}\n {...props}\n >\n {content}\n </Badge>\n </div>\n )\n}\n\nfunction ProductCardFavoriteButton({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n const {isFavorited, isFavoriteButtonDisabled, onFavoriteToggle} =\n useProductCardContext()\n if (isFavoriteButtonDisabled) return null\n\n return (\n <div className={cn('absolute bottom-3 right-3 z-10', className)} {...props}>\n <FavoriteButton onClick={onFavoriteToggle} filled={isFavorited} />\n </div>\n )\n}\n\nfunction ProductCardInfo({className, ...props}: React.ComponentProps<'div'>) {\n const {variant} = useProductCardContext()\n if (variant !== 'default') {\n return null\n }\n\n return (\n <div\n data-slot=\"product-card-info\"\n className={cn('px-1 pt-2 pb-0 space-y-1', className)}\n {...props}\n />\n )\n}\n\nfunction ProductCardTitle({\n className,\n children,\n ...props\n}: React.ComponentProps<'h3'>) {\n const {product} = useProductCardContext()\n return (\n <h3\n data-slot=\"product-card-title\"\n className={cn(\n 'text-sm font-medium leading-tight text-gray-900',\n 'truncate overflow-hidden whitespace-nowrap text-ellipsis',\n className\n )}\n {...props}\n >\n {children || product.title}\n </h3>\n )\n}\n\nfunction ProductCardPrice({className}: {className?: string}) {\n const {product, selectedProductVariant} = useProductCardContext()\n\n // Derive price data locally\n const displayPrice = selectedProductVariant?.price || product?.price\n const displayCompareAtPrice =\n selectedProductVariant?.compareAtPrice || product?.compareAtPrice\n\n return (\n <ProductVariantPrice\n amount={displayPrice?.amount || ''}\n currencyCode={displayPrice?.currencyCode || ''}\n compareAtPriceAmount={displayCompareAtPrice?.amount}\n compareAtPriceCurrencyCode={displayCompareAtPrice?.currencyCode}\n className={className}\n />\n )\n}\n\n// Special PriceOverlayBadge for price overlay variant\nfunction ProductCardPriceOverlayBadge() {\n const {product, selectedProductVariant, variant} = useProductCardContext()\n if (variant !== 'priceOverlay') return null\n const displayPrice = selectedProductVariant?.price || product.price\n const currencyCode = displayPrice?.currencyCode\n const amount = displayPrice?.amount\n\n if (!currencyCode || !amount) return null\n return (\n <ProductCardBadge position=\"top-left\">\n {formatMoney(amount, currencyCode)}\n </ProductCardBadge>\n )\n}\n\nexport interface ProductCardProps {\n /** The product to display in the card */\n product: Product\n /** Optional selected variant of the product to show specific variant data */\n selectedProductVariant?: ProductVariant\n /** Visual style variant of the card */\n variant?: 'default' | 'priceOverlay' | 'compact'\n /** Whether the card can be clicked/tapped to navigate to product details */\n touchable?: boolean\n /** Optional text to display in a badge on the card */\n badgeText?: string\n /** Visual style variant for the badge */\n badgeVariant?: 'primary' | 'secondary' | 'destructive' | 'outline' | 'none'\n /** Callback fired when the product is clicked */\n onProductClick?: () => void\n /** Callback fired when the favorite button is toggled */\n onFavoriteToggled?: (isFavorited: boolean) => void\n /** Custom layout via children */\n children?: React.ReactNode\n /** Whether the favorite button is disabled */\n favoriteButtonDisabled?: boolean\n}\n\nfunction ProductCard({\n product,\n selectedProductVariant,\n variant = 'default',\n touchable = true,\n badgeText,\n badgeVariant,\n onProductClick,\n onFavoriteToggled,\n children,\n favoriteButtonDisabled = false,\n}: ProductCardProps) {\n const {navigateToProduct} = useShopNavigation()\n const {saveProduct, unsaveProduct} = useSavedProductsActions()\n\n // Local state for optimistic UI updates\n const [isFavoritedLocal, setIsFavoritedLocal] = useState(product.isFavorited)\n\n const handleClick = useCallback(() => {\n if (!touchable) return\n\n onProductClick?.()\n\n navigateToProduct({\n productId: product.id,\n })\n }, [navigateToProduct, product.id, touchable, onProductClick])\n\n const handleFavoriteClick = useCallback(async () => {\n const previousState = isFavoritedLocal\n\n // Optimistic update\n setIsFavoritedLocal(!previousState)\n onFavoriteToggled?.(!previousState)\n\n try {\n if (previousState) {\n await unsaveProduct({\n productId: product.id,\n shopId: product.shop.id,\n productVariantId:\n selectedProductVariant?.id || product.defaultVariantId,\n })\n } else {\n await saveProduct({\n productId: product.id,\n shopId: product.shop.id,\n productVariantId:\n selectedProductVariant?.id || product.defaultVariantId,\n })\n }\n } catch (error) {\n // Revert optimistic update on error\n setIsFavoritedLocal(previousState)\n onFavoriteToggled?.(previousState)\n }\n }, [\n isFavoritedLocal,\n product.id,\n product.shop.id,\n product.defaultVariantId,\n selectedProductVariant?.id,\n saveProduct,\n unsaveProduct,\n onFavoriteToggled,\n ])\n\n const contextValue = useMemo<ProductCardContextValue>(\n () => ({\n // Core data\n product,\n selectedProductVariant,\n\n // UI configuration\n variant,\n touchable,\n badgeText,\n badgeVariant,\n\n // State\n isFavorited: isFavoritedLocal,\n isFavoriteButtonDisabled: favoriteButtonDisabled,\n // Actions\n onClick: handleClick,\n onFavoriteToggle: handleFavoriteClick,\n }),\n [\n product,\n selectedProductVariant,\n variant,\n touchable,\n badgeText,\n badgeVariant,\n isFavoritedLocal,\n handleClick,\n handleFavoriteClick,\n favoriteButtonDisabled,\n ]\n )\n\n return (\n <ProductCardContext.Provider value={contextValue}>\n {children ?? (\n <ProductCardContainer>\n <ProductCardImageContainer>\n <ProductCardImage />\n {variant === 'priceOverlay' && <ProductCardPriceOverlayBadge />}\n <ProductCardBadge />\n <ProductCardFavoriteButton />\n </ProductCardImageContainer>\n {variant === 'default' && (\n <ProductCardInfo>\n <ProductCardTitle />\n <ProductCardPrice />\n </ProductCardInfo>\n )}\n </ProductCardContainer>\n )}\n </ProductCardContext.Provider>\n )\n}\n\nexport {\n ProductCard,\n ProductCardContainer,\n ProductCardImageContainer,\n ProductCardImage,\n ProductCardBadge,\n ProductCardFavoriteButton,\n ProductCardInfo,\n ProductCardTitle,\n ProductCardPrice,\n}\n"],"names":["ProductCardContext","React","useProductCardContext","context","useContext","ProductCardContainer","className","props","touchable","onClick","content","jsx","cn","Touchable","ProductCardImageContainer","variant","ProductCardImage","product","selectedProductVariant","displayImage","src","alt","thumbhash","renderImageElement","useCallback","Image","ProductCardBadge","position","children","badgeText","badgeVariant","Badge","ProductCardFavoriteButton","isFavorited","isFavoriteButtonDisabled","onFavoriteToggle","FavoriteButton","ProductCardInfo","ProductCardTitle","ProductCardPrice","displayPrice","displayCompareAtPrice","ProductVariantPrice","ProductCardPriceOverlayBadge","currencyCode","amount","formatMoney","ProductCard","onProductClick","onFavoriteToggled","favoriteButtonDisabled","navigateToProduct","useShopNavigation","saveProduct","unsaveProduct","useSavedProductsActions","isFavoritedLocal","setIsFavoritedLocal","useState","handleClick","handleFavoriteClick","previousState","contextValue","useMemo","jsxs"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,88 +1,88 @@
1
1
  import { DATA_NAVIGATION_TYPE_ATTRIBUTE as o, NAVIGATION_TYPES as t } from "./types/index.js";
2
2
  import { MinisContainer as i } from "./components/MinisContainer.js";
3
3
  import { AddToCartButton as n } from "./components/commerce/add-to-cart.js";
4
- import { ProductCard as s, ProductCardBadge as l, ProductCardContainer as u, ProductCardFavoriteButton as f, ProductCardImage as x, ProductCardImageContainer as c, ProductCardInfo as d, ProductCardPrice as C, ProductCardTitle as g } from "./components/commerce/product-card.js";
5
- import { ProductLink as D } from "./components/commerce/product-link.js";
6
- import { MerchantCard as P, MerchantCardContainer as h, MerchantCardHeader as T, MerchantCardInfo as I, MerchantCardName as M, MerchantCardRating as R } from "./components/commerce/merchant-card.js";
7
- import { ProductCardSkeleton as w } from "./components/commerce/product-card-skeleton.js";
8
- import { MerchantCardSkeleton as F } from "./components/commerce/merchant-card-skeleton.js";
9
- import { QuantitySelector as b } from "./components/commerce/quantity-selector.js";
10
- import { Search as E, SearchInput as L, SearchProvider as N, SearchResultsList as O } from "./components/commerce/search.js";
11
- import { FavoriteButton as G } from "./components/commerce/favorite-button.js";
12
- import { ImageContentWrapper as V } from "./components/content/image-content-wrapper.js";
13
- import { MinisRouter as _ } from "./components/navigation/minis-router.js";
14
- import { TransitionLink as Y } from "./components/navigation/transition-link.js";
15
- import { Button as K } from "./components/atoms/button.js";
16
- import { IconButton as j } from "./components/atoms/icon-button.js";
17
- import { Image as X } from "./components/atoms/image.js";
18
- import { Touchable as $ } from "./components/atoms/touchable.js";
19
- import { LongPressDetector as er } from "./components/atoms/long-press-detector.js";
20
- import { AlertDialogAtom as tr } from "./components/atoms/alert-dialog.js";
21
- import { List as ir } from "./components/atoms/list.js";
22
- import { VideoPlayer as nr } from "./components/atoms/video-player.js";
23
- import { TextInput as sr } from "./components/atoms/text-input.js";
24
- import { ContentWrapper as ur } from "./components/atoms/content-wrapper.js";
25
- import { Accordion as xr, AccordionContent as cr, AccordionItem as dr, AccordionTrigger as Cr } from "./components/ui/accordion.js";
26
- import { Alert as Sr, AlertDescription as Dr, AlertTitle as Ar } from "./components/ui/alert.js";
27
- import { AlertDialog as hr, AlertDialogAction as Tr, AlertDialogCancel as Ir, AlertDialogContent as Mr, AlertDialogDescription as Rr, AlertDialogFooter as vr, AlertDialogHeader as wr, AlertDialogOverlay as Br, AlertDialogPortal as Fr, AlertDialogTitle as Ur, AlertDialogTrigger as br } from "./components/ui/alert-dialog.js";
28
- import { Avatar as Er, AvatarFallback as Lr, AvatarImage as Nr } from "./components/ui/avatar.js";
29
- import { Badge as yr, badgeVariants as Gr } from "./components/ui/badge.js";
30
- import { Card as Vr, CardAction as zr, CardContent as _r, CardDescription as Wr, CardFooter as Yr, CardHeader as qr, CardTitle as Kr } from "./components/ui/card.js";
31
- import { Carousel as jr, CarouselContent as Jr, CarouselItem as Xr, CarouselNext as Zr, CarouselPrevious as $r } from "./components/ui/carousel.js";
32
- import { Checkbox as ee } from "./components/ui/checkbox.js";
33
- import { Dialog as te, DialogClose as ae, DialogContent as ie, DialogDescription as pe, DialogFooter as ne, DialogHeader as me, DialogOverlay as se, DialogPortal as le, DialogTitle as ue, DialogTrigger as fe } from "./components/ui/dialog.js";
34
- import { Drawer as ce, DrawerClose as de, DrawerContent as Ce, DrawerDescription as ge, DrawerFooter as Se, DrawerHeader as De, DrawerOverlay as Ae, DrawerPortal as Pe, DrawerTitle as he, DrawerTrigger as Te } from "./components/ui/drawer.js";
35
- import { Input as Me } from "./components/ui/input.js";
36
- import { Label as ve } from "./components/ui/label.js";
37
- import { Progress as Be } from "./components/ui/progress.js";
38
- import { RadioGroup as Ue, RadioGroupItem as be } from "./components/ui/radio-group.js";
39
- import { ResizableHandle as Ee, ResizablePanel as Le, ResizablePanelGroup as Ne } from "./components/ui/resizable.js";
40
- import { ScrollArea as ye, ScrollBar as Ge } from "./components/ui/scroll-area.js";
41
- import { Select as Ve, SelectContent as ze, SelectGroup as _e, SelectItem as We, SelectLabel as Ye, SelectScrollDownButton as qe, SelectScrollUpButton as Ke, SelectSeparator as Qe, SelectTrigger as je, SelectValue as Je } from "./components/ui/select.js";
42
- import { Separator as Ze } from "./components/ui/separator.js";
43
- import { Sheet as ro, SheetClose as eo, SheetContent as oo, SheetDescription as to, SheetFooter as ao, SheetHeader as io, SheetTitle as po, SheetTrigger as no } from "./components/ui/sheet.js";
44
- import { Toaster as so } from "./components/ui/sonner.js";
45
- import { Skeleton as uo } from "./components/ui/skeleton.js";
46
- import { useRecentProducts as xo } from "./hooks/user/useRecentProducts.js";
47
- import { useRecentShops as Co } from "./hooks/user/useRecentShops.js";
48
- import { useSavedProducts as So } from "./hooks/user/useSavedProducts.js";
49
- import { useSavedProductsActions as Ao } from "./hooks/user/useSavedProductsActions.js";
50
- import { useFollowedShops as ho } from "./hooks/user/useFollowedShops.js";
51
- import { useFollowedShopsActions as Io } from "./hooks/user/useFollowedShopsActions.js";
52
- import { useCurrentUser as Ro } from "./hooks/user/useCurrentUser.js";
53
- import { useOrders as wo } from "./hooks/user/useOrders.js";
54
- import { useBuyerAttributes as Fo } from "./hooks/user/useBuyerAttributes.js";
55
- import { useGenerateUserToken as bo } from "./hooks/user/useGenerateUserToken.js";
56
- import { useProductListActions as Eo } from "./hooks/product/useProductListActions.js";
57
- import { useProductLists as No } from "./hooks/product/useProductLists.js";
58
- import { useProductList as yo } from "./hooks/product/useProductList.js";
59
- import { useProduct as Ho } from "./hooks/product/useProduct.js";
60
- import { useProducts as zo } from "./hooks/product/useProducts.js";
61
- import { useProductVariants as Wo } from "./hooks/product/useProductVariants.js";
62
- import { useProductMedia as qo } from "./hooks/product/useProductMedia.js";
63
- import { useProductSearch as Qo } from "./hooks/product/useProductSearch.js";
64
- import { useRecommendedProducts as Jo } from "./hooks/product/useRecommendedProducts.js";
65
- import { usePopularProducts as Zo } from "./hooks/product/usePopularProducts.js";
66
- import { useCuratedProducts as rt } from "./hooks/product/useCuratedProducts.js";
67
- import { useAsyncStorage as ot } from "./hooks/storage/useAsyncStorage.js";
68
- import { useSecureStorage as at } from "./hooks/storage/useSecureStorage.js";
69
- import { useImageUpload as pt } from "./hooks/storage/useImageUpload.js";
70
- import { useShopNavigation as mt } from "./hooks/navigation/useShopNavigation.js";
71
- import { useCloseMini as lt } from "./hooks/navigation/useCloseMini.js";
72
- import { useDeeplink as ft } from "./hooks/navigation/useDeeplink.js";
73
- import { useNavigateWithTransition as ct } from "./hooks/navigation/useNavigateWithTransition.js";
74
- import { useShop as Ct } from "./hooks/shop/useShop.js";
75
- import { useShopCartActions as St } from "./hooks/shop/useShopCartActions.js";
4
+ import { BuyNowButton as s } from "./components/commerce/buy-now.js";
5
+ import { ProductCard as u, ProductCardBadge as f, ProductCardContainer as x, ProductCardFavoriteButton as c, ProductCardImage as d, ProductCardImageContainer as C, ProductCardInfo as g, ProductCardPrice as S, ProductCardTitle as D } from "./components/commerce/product-card.js";
6
+ import { ProductLink as P } from "./components/commerce/product-link.js";
7
+ import { MerchantCard as T, MerchantCardContainer as I, MerchantCardHeader as M, MerchantCardInfo as R, MerchantCardName as w, MerchantCardRating as v } from "./components/commerce/merchant-card.js";
8
+ import { ProductCardSkeleton as F } from "./components/commerce/product-card-skeleton.js";
9
+ import { MerchantCardSkeleton as b } from "./components/commerce/merchant-card-skeleton.js";
10
+ import { QuantitySelector as E } from "./components/commerce/quantity-selector.js";
11
+ import { Search as N, SearchInput as y, SearchProvider as O, SearchResultsList as G } from "./components/commerce/search.js";
12
+ import { FavoriteButton as V } from "./components/commerce/favorite-button.js";
13
+ import { ImageContentWrapper as _ } from "./components/content/image-content-wrapper.js";
14
+ import { MinisRouter as Y } from "./components/navigation/minis-router.js";
15
+ import { TransitionLink as K } from "./components/navigation/transition-link.js";
16
+ import { Button as j } from "./components/atoms/button.js";
17
+ import { IconButton as X } from "./components/atoms/icon-button.js";
18
+ import { Image as $ } from "./components/atoms/image.js";
19
+ import { Touchable as er } from "./components/atoms/touchable.js";
20
+ import { LongPressDetector as tr } from "./components/atoms/long-press-detector.js";
21
+ import { AlertDialogAtom as ir } from "./components/atoms/alert-dialog.js";
22
+ import { List as nr } from "./components/atoms/list.js";
23
+ import { VideoPlayer as sr } from "./components/atoms/video-player.js";
24
+ import { TextInput as ur } from "./components/atoms/text-input.js";
25
+ import { ContentWrapper as xr } from "./components/atoms/content-wrapper.js";
26
+ import { Accordion as dr, AccordionContent as Cr, AccordionItem as gr, AccordionTrigger as Sr } from "./components/ui/accordion.js";
27
+ import { Alert as Ar, AlertDescription as Pr, AlertTitle as hr } from "./components/ui/alert.js";
28
+ import { AlertDialog as Ir, AlertDialogAction as Mr, AlertDialogCancel as Rr, AlertDialogContent as wr, AlertDialogDescription as vr, AlertDialogFooter as Br, AlertDialogHeader as Fr, AlertDialogOverlay as Ur, AlertDialogPortal as br, AlertDialogTitle as kr, AlertDialogTrigger as Er } from "./components/ui/alert-dialog.js";
29
+ import { Avatar as Nr, AvatarFallback as yr, AvatarImage as Or } from "./components/ui/avatar.js";
30
+ import { Badge as Hr, badgeVariants as Vr } from "./components/ui/badge.js";
31
+ import { Card as _r, CardAction as Wr, CardContent as Yr, CardDescription as qr, CardFooter as Kr, CardHeader as Qr, CardTitle as jr } from "./components/ui/card.js";
32
+ import { Carousel as Xr, CarouselContent as Zr, CarouselItem as $r, CarouselNext as re, CarouselPrevious as ee } from "./components/ui/carousel.js";
33
+ import { Checkbox as te } from "./components/ui/checkbox.js";
34
+ import { Dialog as ie, DialogClose as pe, DialogContent as ne, DialogDescription as me, DialogFooter as se, DialogHeader as le, DialogOverlay as ue, DialogPortal as fe, DialogTitle as xe, DialogTrigger as ce } from "./components/ui/dialog.js";
35
+ import { Drawer as Ce, DrawerClose as ge, DrawerContent as Se, DrawerDescription as De, DrawerFooter as Ae, DrawerHeader as Pe, DrawerOverlay as he, DrawerPortal as Te, DrawerTitle as Ie, DrawerTrigger as Me } from "./components/ui/drawer.js";
36
+ import { Input as we } from "./components/ui/input.js";
37
+ import { Label as Be } from "./components/ui/label.js";
38
+ import { Progress as Ue } from "./components/ui/progress.js";
39
+ import { RadioGroup as ke, RadioGroupItem as Ee } from "./components/ui/radio-group.js";
40
+ import { ResizableHandle as Ne, ResizablePanel as ye, ResizablePanelGroup as Oe } from "./components/ui/resizable.js";
41
+ import { ScrollArea as He, ScrollBar as Ve } from "./components/ui/scroll-area.js";
42
+ import { Select as _e, SelectContent as We, SelectGroup as Ye, SelectItem as qe, SelectLabel as Ke, SelectScrollDownButton as Qe, SelectScrollUpButton as je, SelectSeparator as Je, SelectTrigger as Xe, SelectValue as Ze } from "./components/ui/select.js";
43
+ import { Separator as ro } from "./components/ui/separator.js";
44
+ import { Sheet as oo, SheetClose as to, SheetContent as ao, SheetDescription as io, SheetFooter as po, SheetHeader as no, SheetTitle as mo, SheetTrigger as so } from "./components/ui/sheet.js";
45
+ import { Toaster as uo } from "./components/ui/sonner.js";
46
+ import { Skeleton as xo } from "./components/ui/skeleton.js";
47
+ import { useRecentProducts as Co } from "./hooks/user/useRecentProducts.js";
48
+ import { useRecentShops as So } from "./hooks/user/useRecentShops.js";
49
+ import { useSavedProducts as Ao } from "./hooks/user/useSavedProducts.js";
50
+ import { useSavedProductsActions as ho } from "./hooks/user/useSavedProductsActions.js";
51
+ import { useFollowedShops as Io } from "./hooks/user/useFollowedShops.js";
52
+ import { useFollowedShopsActions as Ro } from "./hooks/user/useFollowedShopsActions.js";
53
+ import { useCurrentUser as vo } from "./hooks/user/useCurrentUser.js";
54
+ import { useOrders as Fo } from "./hooks/user/useOrders.js";
55
+ import { useBuyerAttributes as bo } from "./hooks/user/useBuyerAttributes.js";
56
+ import { useGenerateUserToken as Eo } from "./hooks/user/useGenerateUserToken.js";
57
+ import { useProductListActions as No } from "./hooks/product/useProductListActions.js";
58
+ import { useProductLists as Oo } from "./hooks/product/useProductLists.js";
59
+ import { useProductList as Ho } from "./hooks/product/useProductList.js";
60
+ import { useProduct as zo } from "./hooks/product/useProduct.js";
61
+ import { useProducts as Wo } from "./hooks/product/useProducts.js";
62
+ import { useProductVariants as qo } from "./hooks/product/useProductVariants.js";
63
+ import { useProductMedia as Qo } from "./hooks/product/useProductMedia.js";
64
+ import { useProductSearch as Jo } from "./hooks/product/useProductSearch.js";
65
+ import { useRecommendedProducts as Zo } from "./hooks/product/useRecommendedProducts.js";
66
+ import { usePopularProducts as rt } from "./hooks/product/usePopularProducts.js";
67
+ import { useCuratedProducts as ot } from "./hooks/product/useCuratedProducts.js";
68
+ import { useAsyncStorage as at } from "./hooks/storage/useAsyncStorage.js";
69
+ import { useSecureStorage as pt } from "./hooks/storage/useSecureStorage.js";
70
+ import { useImageUpload as mt } from "./hooks/storage/useImageUpload.js";
71
+ import { useShopNavigation as lt } from "./hooks/navigation/useShopNavigation.js";
72
+ import { useCloseMini as ft } from "./hooks/navigation/useCloseMini.js";
73
+ import { useDeeplink as ct } from "./hooks/navigation/useDeeplink.js";
74
+ import { useNavigateWithTransition as Ct } from "./hooks/navigation/useNavigateWithTransition.js";
75
+ import { useShop as St } from "./hooks/shop/useShop.js";
76
76
  import { useRecommendedShops as At } from "./hooks/shop/useRecommendedShops.js";
77
77
  import { useCreateImageContent as ht } from "./hooks/content/useCreateImageContent.js";
78
78
  import { useErrorToast as It } from "./hooks/util/useErrorToast.js";
79
79
  import { useErrorScreen as Rt } from "./hooks/util/useErrorScreen.js";
80
- import { useShare as wt } from "./hooks/util/useShare.js";
80
+ import { useShare as vt } from "./hooks/util/useShare.js";
81
81
  import { useImagePicker as Ft } from "./hooks/util/useImagePicker.js";
82
82
  import { useKeyboardAvoidingView as bt } from "./hooks/util/useKeyboardAvoidingView.js";
83
83
  import { useRequestPermissions as Et } from "./hooks/util/useRequestPermissions.js";
84
84
  import { useOnMiniFocus as Nt } from "./hooks/events/useOnMiniFocus.js";
85
- import { useOnMiniBlur as yt } from "./hooks/events/useOnMiniBlur.js";
85
+ import { useOnMiniBlur as Ot } from "./hooks/events/useOnMiniBlur.js";
86
86
  import { useOnMiniClose as Ht } from "./hooks/events/useOnMiniClose.js";
87
87
  import { useOnAppStateChange as zt } from "./hooks/events/useOnAppStateChange.js";
88
88
  import { MiniEntityNotFoundError as Wt, MiniError as Yt, MiniNetworkError as qt, formatError as Kt } from "./utils/errors.js";
@@ -93,142 +93,143 @@ import { UserState as pa, UserTokenGenerateUserErrorCode as na } from "./shop-mi
93
93
  import { ContentCreateUserErrorCode as sa, MinisContentStatus as la } from "./shop-minis-platform/src/types/content.js";
94
94
  import { Social as fa } from "./shop-minis-platform/src/types/share.js";
95
95
  export {
96
- xr as Accordion,
97
- cr as AccordionContent,
98
- dr as AccordionItem,
99
- Cr as AccordionTrigger,
96
+ dr as Accordion,
97
+ Cr as AccordionContent,
98
+ gr as AccordionItem,
99
+ Sr as AccordionTrigger,
100
100
  n as AddToCartButton,
101
- Sr as Alert,
102
- Dr as AlertDescription,
103
- hr as AlertDialog,
104
- Tr as AlertDialogAction,
105
- tr as AlertDialogAtom,
106
- Ir as AlertDialogCancel,
107
- Mr as AlertDialogContent,
108
- Rr as AlertDialogDescription,
109
- vr as AlertDialogFooter,
110
- wr as AlertDialogHeader,
111
- Br as AlertDialogOverlay,
112
- Fr as AlertDialogPortal,
113
- Ur as AlertDialogTitle,
114
- br as AlertDialogTrigger,
115
- Ar as AlertTitle,
116
- Er as Avatar,
117
- Lr as AvatarFallback,
118
- Nr as AvatarImage,
119
- yr as Badge,
120
- K as Button,
121
- Vr as Card,
122
- zr as CardAction,
123
- _r as CardContent,
124
- Wr as CardDescription,
125
- Yr as CardFooter,
126
- qr as CardHeader,
127
- Kr as CardTitle,
128
- jr as Carousel,
129
- Jr as CarouselContent,
130
- Xr as CarouselItem,
131
- Zr as CarouselNext,
132
- $r as CarouselPrevious,
133
- ee as Checkbox,
101
+ Ar as Alert,
102
+ Pr as AlertDescription,
103
+ Ir as AlertDialog,
104
+ Mr as AlertDialogAction,
105
+ ir as AlertDialogAtom,
106
+ Rr as AlertDialogCancel,
107
+ wr as AlertDialogContent,
108
+ vr as AlertDialogDescription,
109
+ Br as AlertDialogFooter,
110
+ Fr as AlertDialogHeader,
111
+ Ur as AlertDialogOverlay,
112
+ br as AlertDialogPortal,
113
+ kr as AlertDialogTitle,
114
+ Er as AlertDialogTrigger,
115
+ hr as AlertTitle,
116
+ Nr as Avatar,
117
+ yr as AvatarFallback,
118
+ Or as AvatarImage,
119
+ Hr as Badge,
120
+ j as Button,
121
+ s as BuyNowButton,
122
+ _r as Card,
123
+ Wr as CardAction,
124
+ Yr as CardContent,
125
+ qr as CardDescription,
126
+ Kr as CardFooter,
127
+ Qr as CardHeader,
128
+ jr as CardTitle,
129
+ Xr as Carousel,
130
+ Zr as CarouselContent,
131
+ $r as CarouselItem,
132
+ re as CarouselNext,
133
+ ee as CarouselPrevious,
134
+ te as Checkbox,
134
135
  sa as ContentCreateUserErrorCode,
135
- ur as ContentWrapper,
136
+ xr as ContentWrapper,
136
137
  o as DATA_NAVIGATION_TYPE_ATTRIBUTE,
137
- te as Dialog,
138
- ae as DialogClose,
139
- ie as DialogContent,
140
- pe as DialogDescription,
141
- ne as DialogFooter,
142
- me as DialogHeader,
143
- se as DialogOverlay,
144
- le as DialogPortal,
145
- ue as DialogTitle,
146
- fe as DialogTrigger,
147
- ce as Drawer,
148
- de as DrawerClose,
149
- Ce as DrawerContent,
150
- ge as DrawerDescription,
151
- Se as DrawerFooter,
152
- De as DrawerHeader,
153
- Ae as DrawerOverlay,
154
- Pe as DrawerPortal,
155
- he as DrawerTitle,
156
- Te as DrawerTrigger,
157
- G as FavoriteButton,
158
- j as IconButton,
159
- X as Image,
160
- V as ImageContentWrapper,
161
- Me as Input,
162
- ve as Label,
163
- ir as List,
164
- er as LongPressDetector,
165
- P as MerchantCard,
166
- h as MerchantCardContainer,
167
- T as MerchantCardHeader,
168
- I as MerchantCardInfo,
169
- M as MerchantCardName,
170
- R as MerchantCardRating,
171
- F as MerchantCardSkeleton,
138
+ ie as Dialog,
139
+ pe as DialogClose,
140
+ ne as DialogContent,
141
+ me as DialogDescription,
142
+ se as DialogFooter,
143
+ le as DialogHeader,
144
+ ue as DialogOverlay,
145
+ fe as DialogPortal,
146
+ xe as DialogTitle,
147
+ ce as DialogTrigger,
148
+ Ce as Drawer,
149
+ ge as DrawerClose,
150
+ Se as DrawerContent,
151
+ De as DrawerDescription,
152
+ Ae as DrawerFooter,
153
+ Pe as DrawerHeader,
154
+ he as DrawerOverlay,
155
+ Te as DrawerPortal,
156
+ Ie as DrawerTitle,
157
+ Me as DrawerTrigger,
158
+ V as FavoriteButton,
159
+ X as IconButton,
160
+ $ as Image,
161
+ _ as ImageContentWrapper,
162
+ we as Input,
163
+ Be as Label,
164
+ nr as List,
165
+ tr as LongPressDetector,
166
+ T as MerchantCard,
167
+ I as MerchantCardContainer,
168
+ M as MerchantCardHeader,
169
+ R as MerchantCardInfo,
170
+ w as MerchantCardName,
171
+ v as MerchantCardRating,
172
+ b as MerchantCardSkeleton,
172
173
  Wt as MiniEntityNotFoundError,
173
174
  Yt as MiniError,
174
175
  qt as MiniNetworkError,
175
176
  i as MinisContainer,
176
177
  la as MinisContentStatus,
177
- _ as MinisRouter,
178
+ Y as MinisRouter,
178
179
  t as NAVIGATION_TYPES,
179
- s as ProductCard,
180
- l as ProductCardBadge,
181
- u as ProductCardContainer,
182
- f as ProductCardFavoriteButton,
183
- x as ProductCardImage,
184
- c as ProductCardImageContainer,
185
- d as ProductCardInfo,
186
- C as ProductCardPrice,
187
- w as ProductCardSkeleton,
188
- g as ProductCardTitle,
189
- D as ProductLink,
190
- Be as Progress,
191
- b as QuantitySelector,
192
- Ue as RadioGroup,
193
- be as RadioGroupItem,
194
- Ee as ResizableHandle,
195
- Le as ResizablePanel,
196
- Ne as ResizablePanelGroup,
197
- ye as ScrollArea,
198
- Ge as ScrollBar,
199
- E as Search,
200
- L as SearchInput,
201
- N as SearchProvider,
202
- O as SearchResultsList,
203
- Ve as Select,
204
- ze as SelectContent,
205
- _e as SelectGroup,
206
- We as SelectItem,
207
- Ye as SelectLabel,
208
- qe as SelectScrollDownButton,
209
- Ke as SelectScrollUpButton,
210
- Qe as SelectSeparator,
211
- je as SelectTrigger,
212
- Je as SelectValue,
213
- Ze as Separator,
214
- ro as Sheet,
215
- eo as SheetClose,
216
- oo as SheetContent,
217
- to as SheetDescription,
218
- ao as SheetFooter,
219
- io as SheetHeader,
220
- po as SheetTitle,
221
- no as SheetTrigger,
222
- uo as Skeleton,
180
+ u as ProductCard,
181
+ f as ProductCardBadge,
182
+ x as ProductCardContainer,
183
+ c as ProductCardFavoriteButton,
184
+ d as ProductCardImage,
185
+ C as ProductCardImageContainer,
186
+ g as ProductCardInfo,
187
+ S as ProductCardPrice,
188
+ F as ProductCardSkeleton,
189
+ D as ProductCardTitle,
190
+ P as ProductLink,
191
+ Ue as Progress,
192
+ E as QuantitySelector,
193
+ ke as RadioGroup,
194
+ Ee as RadioGroupItem,
195
+ Ne as ResizableHandle,
196
+ ye as ResizablePanel,
197
+ Oe as ResizablePanelGroup,
198
+ He as ScrollArea,
199
+ Ve as ScrollBar,
200
+ N as Search,
201
+ y as SearchInput,
202
+ O as SearchProvider,
203
+ G as SearchResultsList,
204
+ _e as Select,
205
+ We as SelectContent,
206
+ Ye as SelectGroup,
207
+ qe as SelectItem,
208
+ Ke as SelectLabel,
209
+ Qe as SelectScrollDownButton,
210
+ je as SelectScrollUpButton,
211
+ Je as SelectSeparator,
212
+ Xe as SelectTrigger,
213
+ Ze as SelectValue,
214
+ ro as Separator,
215
+ oo as Sheet,
216
+ to as SheetClose,
217
+ ao as SheetContent,
218
+ io as SheetDescription,
219
+ po as SheetFooter,
220
+ no as SheetHeader,
221
+ mo as SheetTitle,
222
+ so as SheetTrigger,
223
+ xo as Skeleton,
223
224
  fa as Social,
224
- sr as TextInput,
225
- so as Toaster,
226
- $ as Touchable,
227
- Y as TransitionLink,
225
+ ur as TextInput,
226
+ uo as Toaster,
227
+ er as Touchable,
228
+ K as TransitionLink,
228
229
  pa as UserState,
229
230
  na as UserTokenGenerateUserErrorCode,
230
- nr as VideoPlayer,
231
- Gr as badgeVariants,
231
+ sr as VideoPlayer,
232
+ Vr as badgeVariants,
232
233
  jt as extractBrandTheme,
233
234
  oa as fileToDataUri,
234
235
  Kt as formatError,
@@ -238,47 +239,46 @@ export {
238
239
  aa as getThumbhashDataURL,
239
240
  Zt as normalizeRating,
240
241
  ra as parseUrl,
241
- ot as useAsyncStorage,
242
- Fo as useBuyerAttributes,
243
- lt as useCloseMini,
242
+ at as useAsyncStorage,
243
+ bo as useBuyerAttributes,
244
+ ft as useCloseMini,
244
245
  ht as useCreateImageContent,
245
- rt as useCuratedProducts,
246
- Ro as useCurrentUser,
247
- ft as useDeeplink,
246
+ ot as useCuratedProducts,
247
+ vo as useCurrentUser,
248
+ ct as useDeeplink,
248
249
  Rt as useErrorScreen,
249
250
  It as useErrorToast,
250
- ho as useFollowedShops,
251
- Io as useFollowedShopsActions,
252
- bo as useGenerateUserToken,
251
+ Io as useFollowedShops,
252
+ Ro as useFollowedShopsActions,
253
+ Eo as useGenerateUserToken,
253
254
  Ft as useImagePicker,
254
- pt as useImageUpload,
255
+ mt as useImageUpload,
255
256
  bt as useKeyboardAvoidingView,
256
- ct as useNavigateWithTransition,
257
+ Ct as useNavigateWithTransition,
257
258
  zt as useOnAppStateChange,
258
- yt as useOnMiniBlur,
259
+ Ot as useOnMiniBlur,
259
260
  Ht as useOnMiniClose,
260
261
  Nt as useOnMiniFocus,
261
- wo as useOrders,
262
- Zo as usePopularProducts,
263
- Ho as useProduct,
264
- yo as useProductList,
265
- Eo as useProductListActions,
266
- No as useProductLists,
267
- qo as useProductMedia,
268
- Qo as useProductSearch,
269
- Wo as useProductVariants,
270
- zo as useProducts,
271
- xo as useRecentProducts,
272
- Co as useRecentShops,
273
- Jo as useRecommendedProducts,
262
+ Fo as useOrders,
263
+ rt as usePopularProducts,
264
+ zo as useProduct,
265
+ Ho as useProductList,
266
+ No as useProductListActions,
267
+ Oo as useProductLists,
268
+ Qo as useProductMedia,
269
+ Jo as useProductSearch,
270
+ qo as useProductVariants,
271
+ Wo as useProducts,
272
+ Co as useRecentProducts,
273
+ So as useRecentShops,
274
+ Zo as useRecommendedProducts,
274
275
  At as useRecommendedShops,
275
276
  Et as useRequestPermissions,
276
- So as useSavedProducts,
277
- Ao as useSavedProductsActions,
278
- at as useSecureStorage,
279
- wt as useShare,
280
- Ct as useShop,
281
- St as useShopCartActions,
282
- mt as useShopNavigation
277
+ Ao as useSavedProducts,
278
+ ho as useSavedProductsActions,
279
+ pt as useSecureStorage,
280
+ vt as useShare,
281
+ St as useShop,
282
+ lt as useShopNavigation
283
283
  };
284
284
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
- import { useHandleAction as o } from "../../internal/useHandleAction.js";
2
- import { useShopActions as u } from "../../internal/useShopActions.js";
1
+ import { useHandleAction as o } from "./useHandleAction.js";
2
+ import { useShopActions as u } from "./useShopActions.js";
3
3
  const n = () => {
4
4
  const { addToCart: t, buyProduct: r } = u();
5
5
  return {