@beyondcorp/beyond-ui 1.2.32 → 1.2.37

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 (39) hide show
  1. package/dist/components/Card/Card.js +9 -7
  2. package/dist/components/Card/Card.js.map +1 -1
  3. package/dist/components/Marketplace/MarketplaceComponent.d.ts +6 -2
  4. package/dist/components/Marketplace/MarketplaceComponent.js +41 -92
  5. package/dist/components/Marketplace/MarketplaceComponent.js.map +1 -1
  6. package/dist/components/Marketplace/components/CategoryCard.d.ts +13 -0
  7. package/dist/components/Marketplace/components/CategoryCard.js +16 -0
  8. package/dist/components/Marketplace/components/CategoryCard.js.map +1 -0
  9. package/dist/components/Marketplace/components/MarketplaceDashboard.d.ts +16 -0
  10. package/dist/components/Marketplace/components/MarketplaceDashboard.js +34 -0
  11. package/dist/components/Marketplace/components/MarketplaceDashboard.js.map +1 -0
  12. package/dist/components/Marketplace/components/MarketplaceHeader.d.ts +15 -0
  13. package/dist/components/Marketplace/components/MarketplaceHeader.js +17 -0
  14. package/dist/components/Marketplace/components/MarketplaceHeader.js.map +1 -0
  15. package/dist/components/Marketplace/components/ProductCard.d.ts +17 -0
  16. package/dist/components/Marketplace/components/ProductCard.js +31 -0
  17. package/dist/components/Marketplace/components/ProductCard.js.map +1 -0
  18. package/dist/components/Marketplace/components/VendorCard.d.ts +14 -0
  19. package/dist/components/Marketplace/components/VendorCard.js +19 -0
  20. package/dist/components/Marketplace/components/VendorCard.js.map +1 -0
  21. package/dist/components/Marketplace/components/index.d.ts +4 -0
  22. package/dist/components/Marketplace/hooks/index.d.ts +4 -0
  23. package/dist/components/Marketplace/hooks/useCart.d.ts +19 -0
  24. package/dist/components/Marketplace/hooks/useCart.js +63 -0
  25. package/dist/components/Marketplace/hooks/useCart.js.map +1 -0
  26. package/dist/components/Marketplace/hooks/useMarketplaceState.d.ts +27 -0
  27. package/dist/components/Marketplace/hooks/useMarketplaceState.js +56 -0
  28. package/dist/components/Marketplace/hooks/useMarketplaceState.js.map +1 -0
  29. package/dist/components/Marketplace/hooks/useProductNavigation.d.ts +17 -0
  30. package/dist/components/Marketplace/hooks/useProductNavigation.js +31 -0
  31. package/dist/components/Marketplace/hooks/useProductNavigation.js.map +1 -0
  32. package/dist/components/Marketplace/hooks/useSearch.d.ts +18 -0
  33. package/dist/components/Marketplace/hooks/useSearch.js +44 -0
  34. package/dist/components/Marketplace/hooks/useSearch.js.map +1 -0
  35. package/dist/components/Marketplace/index.d.ts +2 -0
  36. package/dist/index.d.ts +0 -2
  37. package/dist/index.js +8 -2
  38. package/dist/styles.css +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,31 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { Heart, Eye, Star, ShoppingCart } from 'lucide-react';
3
+ import { Button } from '../../Button/Button.js';
4
+ import { Card, CardContent } from '../../Card/Card.js';
5
+ import { Badge } from '../../Badge/Badge.js';
6
+
7
+ /**
8
+ * Reusable product card component for displaying product information
9
+ * Used across different marketplace views (grid, list, featured, etc.)
10
+ */
11
+ const ProductCard = ({ product, onProductClick, onAddToCart, onQuickView, onToggleWishlist, isWishlisted = false, showQuickActions = true, className = '', }) => {
12
+ const handleProductClick = () => {
13
+ onProductClick?.(product);
14
+ };
15
+ const handleAddToCart = (e) => {
16
+ e.stopPropagation();
17
+ onAddToCart?.(product);
18
+ };
19
+ const handleQuickView = (e) => {
20
+ e.stopPropagation();
21
+ onQuickView?.(product);
22
+ };
23
+ const handleToggleWishlist = (e) => {
24
+ e.stopPropagation();
25
+ onToggleWishlist?.(product.id);
26
+ };
27
+ return (jsxs(Card, { className: `group hover:shadow-lg transition-all duration-300 cursor-pointer ${className}`, children: [jsxs("div", { className: "relative aspect-square bg-gray-100 rounded-t-lg overflow-hidden", children: [jsx("img", { src: product.images[0], alt: product.name, className: "w-full h-full object-cover group-hover:scale-105 transition-transform duration-300", onClick: handleProductClick }), product.discount && (jsxs(Badge, { variant: "danger", className: "absolute top-2 left-2", children: ["-", product.discount, "%"] })), showQuickActions && (jsxs(Fragment, { children: [jsx("div", { className: "absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity", children: jsx(Button, { variant: "ghost", size: "sm", onClick: handleToggleWishlist, className: "bg-white/80 hover:bg-white", children: jsx(Heart, { className: `h-4 w-4 ${isWishlisted ? 'fill-current text-red-500' : ''}` }) }) }), jsx("div", { className: "absolute bottom-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity", children: jsx(Button, { variant: "ghost", size: "sm", onClick: handleQuickView, className: "bg-white/80 hover:bg-white", children: jsx(Eye, { className: "h-4 w-4" }) }) })] })), !product.inStock && (jsx("div", { className: "absolute inset-0 bg-black/50 flex items-center justify-center", children: jsx(Badge, { variant: "secondary", children: "Out of Stock" }) }))] }), jsxs(CardContent, { className: "p-4", children: [jsxs("div", { className: "mb-2", children: [jsx("h3", { className: "font-medium text-gray-900 line-clamp-2 cursor-pointer hover:text-primary-600", onClick: handleProductClick, children: product.name }), jsx("p", { className: "text-sm text-gray-600", children: product.brand })] }), jsxs("div", { className: "flex items-center space-x-1 mb-2", children: [jsx(Star, { className: "h-4 w-4 text-yellow-400 fill-current" }), jsxs("span", { className: "text-sm text-gray-600", children: [product.rating, " (", product.reviewCount, ")"] })] }), jsx("div", { className: "flex items-center justify-between mb-3", children: jsxs("div", { className: "flex items-center space-x-2", children: [jsxs("span", { className: "text-lg font-bold text-gray-900", children: ["$", product.price.toFixed(2)] }), product.originalPrice && (jsxs("span", { className: "text-sm text-gray-500 line-through", children: ["$", product.originalPrice.toFixed(2)] }))] }) }), jsxs(Button, { variant: "primary", size: "sm", onClick: handleAddToCart, disabled: !product.inStock, className: "w-full", children: [jsx(ShoppingCart, { className: "mr-2 h-4 w-4" }), "Add to Cart"] })] })] }));
28
+ };
29
+
30
+ export { ProductCard };
31
+ //# sourceMappingURL=ProductCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductCard.js","sources":["../../../../src/components/Marketplace/components/ProductCard.tsx"],"sourcesContent":["import React from 'react';\nimport { Star, Heart, ShoppingCart, Eye } from 'lucide-react';\nimport { Button } from '../../Button';\nimport { Card, CardContent } from '../../Card';\nimport { Badge } from '../../Badge';\nimport type { Product } from '../types';\n\nexport interface ProductCardProps {\n product: Product;\n onProductClick?: (product: Product) => void;\n onAddToCart?: (product: Product) => void;\n onQuickView?: (product: Product) => void;\n onToggleWishlist?: (productId: string) => void;\n isWishlisted?: boolean;\n showQuickActions?: boolean;\n className?: string;\n}\n\n/**\n * Reusable product card component for displaying product information\n * Used across different marketplace views (grid, list, featured, etc.)\n */\nexport const ProductCard: React.FC<ProductCardProps> = ({\n product,\n onProductClick,\n onAddToCart,\n onQuickView,\n onToggleWishlist,\n isWishlisted = false,\n showQuickActions = true,\n className = '',\n}) => {\n const handleProductClick = () => {\n onProductClick?.(product);\n };\n\n const handleAddToCart = (e: React.MouseEvent) => {\n e.stopPropagation();\n onAddToCart?.(product);\n };\n\n const handleQuickView = (e: React.MouseEvent) => {\n e.stopPropagation();\n onQuickView?.(product);\n };\n\n const handleToggleWishlist = (e: React.MouseEvent) => {\n e.stopPropagation();\n onToggleWishlist?.(product.id);\n };\n\n return (\n <Card className={`group hover:shadow-lg transition-all duration-300 cursor-pointer ${className}`}>\n <div className=\"relative aspect-square bg-gray-100 rounded-t-lg overflow-hidden\">\n <img\n src={product.images[0]}\n alt={product.name}\n className=\"w-full h-full object-cover group-hover:scale-105 transition-transform duration-300\"\n onClick={handleProductClick}\n />\n \n {/* Discount Badge */}\n {product.discount && (\n <Badge variant=\"danger\" className=\"absolute top-2 left-2\">\n -{product.discount}%\n </Badge>\n )}\n\n {/* Quick Actions */}\n {showQuickActions && (\n <>\n <div className=\"absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleToggleWishlist}\n className=\"bg-white/80 hover:bg-white\"\n >\n <Heart className={`h-4 w-4 ${isWishlisted ? 'fill-current text-red-500' : ''}`} />\n </Button>\n </div>\n <div className=\"absolute bottom-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleQuickView}\n className=\"bg-white/80 hover:bg-white\"\n >\n <Eye className=\"h-4 w-4\" />\n </Button>\n </div>\n </>\n )}\n\n {/* Out of Stock Overlay */}\n {!product.inStock && (\n <div className=\"absolute inset-0 bg-black/50 flex items-center justify-center\">\n <Badge variant=\"secondary\">Out of Stock</Badge>\n </div>\n )}\n </div>\n\n <CardContent className=\"p-4\">\n <div className=\"mb-2\">\n <h3 \n className=\"font-medium text-gray-900 line-clamp-2 cursor-pointer hover:text-primary-600\"\n onClick={handleProductClick}\n >\n {product.name}\n </h3>\n <p className=\"text-sm text-gray-600\">{product.brand}</p>\n </div>\n\n {/* Rating */}\n <div className=\"flex items-center space-x-1 mb-2\">\n <Star className=\"h-4 w-4 text-yellow-400 fill-current\" />\n <span className=\"text-sm text-gray-600\">\n {product.rating} ({product.reviewCount})\n </span>\n </div>\n\n {/* Price */}\n <div className=\"flex items-center justify-between mb-3\">\n <div className=\"flex items-center space-x-2\">\n <span className=\"text-lg font-bold text-gray-900\">\n ${product.price.toFixed(2)}\n </span>\n {product.originalPrice && (\n <span className=\"text-sm text-gray-500 line-through\">\n ${product.originalPrice.toFixed(2)}\n </span>\n )}\n </div>\n </div>\n\n {/* Add to Cart Button */}\n <Button\n variant=\"primary\"\n size=\"sm\"\n onClick={handleAddToCart}\n disabled={!product.inStock}\n className=\"w-full\"\n >\n <ShoppingCart className=\"mr-2 h-4 w-4\" />\n Add to Cart\n </Button>\n </CardContent>\n </Card>\n );\n};"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ export interface VendorCardProps {
3
+ name: string;
4
+ rating: number;
5
+ productCount: number;
6
+ image?: string;
7
+ onVisitStore?: (vendorName: string) => void;
8
+ className?: string;
9
+ }
10
+ /**
11
+ * Reusable vendor card component for displaying seller information
12
+ * Used in vendor spotlight and seller directory sections
13
+ */
14
+ export declare const VendorCard: React.FC<VendorCardProps>;
@@ -0,0 +1,19 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { Star } from 'lucide-react';
3
+ import { Button } from '../../Button/Button.js';
4
+ import { Card, CardContent } from '../../Card/Card.js';
5
+ import { Avatar, AvatarImage, AvatarFallback } from '../../Avatar/Avatar.js';
6
+
7
+ /**
8
+ * Reusable vendor card component for displaying seller information
9
+ * Used in vendor spotlight and seller directory sections
10
+ */
11
+ const VendorCard = ({ name, rating, productCount, image, onVisitStore, className = '', }) => {
12
+ const handleVisitStore = () => {
13
+ onVisitStore?.(name);
14
+ };
15
+ return (jsx(Card, { className: `hover:shadow-lg transition-shadow ${className}`, children: jsxs(CardContent, { className: "p-6 text-center", children: [jsxs(Avatar, { size: "lg", className: "mx-auto mb-4", children: [jsx(AvatarImage, { src: image }), jsx(AvatarFallback, { children: name[0] })] }), jsx("h3", { className: "font-semibold text-gray-900 mb-2", children: name }), jsxs("div", { className: "flex items-center justify-center space-x-1 mb-2", children: [jsx(Star, { className: "h-4 w-4 text-yellow-400 fill-current" }), jsx("span", { className: "text-sm text-gray-600", children: rating })] }), jsxs("p", { className: "text-sm text-gray-600 mb-4", children: [productCount, " products"] }), jsx(Button, { variant: "outline", size: "sm", onClick: handleVisitStore, children: "Visit Store" })] }) }));
16
+ };
17
+
18
+ export { VendorCard };
19
+ //# sourceMappingURL=VendorCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VendorCard.js","sources":["../../../../src/components/Marketplace/components/VendorCard.tsx"],"sourcesContent":["import React from 'react';\nimport { Star } from 'lucide-react';\nimport { Button } from '../../Button';\nimport { Card, CardContent } from '../../Card';\nimport { Avatar, AvatarImage, AvatarFallback } from '../../Avatar';\n\nexport interface VendorCardProps {\n name: string;\n rating: number;\n productCount: number;\n image?: string;\n onVisitStore?: (vendorName: string) => void;\n className?: string;\n}\n\n/**\n * Reusable vendor card component for displaying seller information\n * Used in vendor spotlight and seller directory sections\n */\nexport const VendorCard: React.FC<VendorCardProps> = ({\n name,\n rating,\n productCount,\n image,\n onVisitStore,\n className = '',\n}) => {\n const handleVisitStore = () => {\n onVisitStore?.(name);\n };\n\n return (\n <Card className={`hover:shadow-lg transition-shadow ${className}`}>\n <CardContent className=\"p-6 text-center\">\n <Avatar size=\"lg\" className=\"mx-auto mb-4\">\n <AvatarImage src={image} />\n <AvatarFallback>{name[0]}</AvatarFallback>\n </Avatar>\n <h3 className=\"font-semibold text-gray-900 mb-2\">{name}</h3>\n <div className=\"flex items-center justify-center space-x-1 mb-2\">\n <Star className=\"h-4 w-4 text-yellow-400 fill-current\" />\n <span className=\"text-sm text-gray-600\">{rating}</span>\n </div>\n <p className=\"text-sm text-gray-600 mb-4\">{productCount} products</p>\n <Button variant=\"outline\" size=\"sm\" onClick={handleVisitStore}>\n Visit Store\n </Button>\n </CardContent>\n </Card>\n );\n};"],"names":["_jsx","_jsxs"],"mappings":";;;;;;AAeA;;;AAGG;MACU,UAAU,GAA8B,CAAC,EACpD,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,KAAK,EACL,YAAY,EACZ,SAAS,GAAG,EAAE,GACf,KAAI;IACH,MAAM,gBAAgB,GAAG,MAAK;AAC5B,QAAA,YAAY,GAAG,IAAI,CAAC;AACtB,IAAA,CAAC;IAED,QACEA,IAAC,IAAI,EAAA,EAAC,SAAS,EAAE,CAAA,kCAAA,EAAqC,SAAS,CAAA,CAAE,EAAA,QAAA,EAC/DC,IAAA,CAAC,WAAW,EAAA,EAAC,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,CACtCA,KAAC,MAAM,EAAA,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,cAAc,aACxCD,GAAA,CAAC,WAAW,IAAC,GAAG,EAAE,KAAK,EAAA,CAAI,EAC3BA,GAAA,CAAC,cAAc,EAAA,EAAA,QAAA,EAAE,IAAI,CAAC,CAAC,CAAC,EAAA,CAAkB,IACnC,EACTA,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAE,IAAI,EAAA,CAAM,EAC5DC,cAAK,SAAS,EAAC,iDAAiD,EAAA,QAAA,EAAA,CAC9DD,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,sCAAsC,EAAA,CAAG,EACzDA,cAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAE,MAAM,EAAA,CAAQ,CAAA,EAAA,CACnD,EACNC,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4BAA4B,aAAE,YAAY,EAAA,WAAA,CAAA,EAAA,CAAc,EACrED,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,CAEpD,CAAA,EAAA,CACG,EAAA,CACT;AAEX;;;;"}
@@ -0,0 +1,4 @@
1
+ export * from './MarketplaceHeader';
2
+ export * from './ProductCard';
3
+ export * from './CategoryCard';
4
+ export * from './VendorCard';
@@ -0,0 +1,4 @@
1
+ export * from './useMarketplaceState';
2
+ export * from './useCart';
3
+ export * from './useProductNavigation';
4
+ export * from './useSearch';
@@ -0,0 +1,19 @@
1
+ import type { Product, CartItem } from '../types';
2
+ export interface UseCartProps {
3
+ cartItems: CartItem[];
4
+ setCartItems: (items: CartItem[] | ((prev: CartItem[]) => CartItem[])) => void;
5
+ }
6
+ export interface UseCartReturn {
7
+ addToCart: (product: Product, quantity?: number) => void;
8
+ removeFromCart: (productId: string) => void;
9
+ updateQuantity: (productId: string, quantity: number) => void;
10
+ getCartTotal: () => number;
11
+ getCartItemCount: () => number;
12
+ isInCart: (productId: string) => boolean;
13
+ getCartItem: (productId: string) => CartItem | undefined;
14
+ }
15
+ /**
16
+ * Custom hook for cart management functionality
17
+ * Handles adding, removing, and updating cart items with proper state management
18
+ */
19
+ export declare const useCart: ({ cartItems, setCartItems }: UseCartProps) => UseCartReturn;
@@ -0,0 +1,63 @@
1
+ import { useCallback } from 'react';
2
+ import { showToast } from '../../Toast/Toast.js';
3
+
4
+ /**
5
+ * Custom hook for cart management functionality
6
+ * Handles adding, removing, and updating cart items with proper state management
7
+ */
8
+ const useCart = ({ cartItems, setCartItems }) => {
9
+ const addToCart = useCallback((product, quantity = 1) => {
10
+ setCartItems(prev => {
11
+ const existingItem = prev.find(item => item.product.id === product.id);
12
+ if (existingItem) {
13
+ return prev.map(item => item.product.id === product.id
14
+ ? { ...item, quantity: item.quantity + quantity }
15
+ : item);
16
+ }
17
+ return [...prev, { product, quantity }];
18
+ });
19
+ showToast.success(`${product.name} added to cart!`);
20
+ }, [setCartItems]);
21
+ const removeFromCart = useCallback((productId) => {
22
+ setCartItems(prev => {
23
+ const item = prev.find(item => item.product.id === productId);
24
+ if (item) {
25
+ showToast.info(`${item.product.name} removed from cart`);
26
+ }
27
+ return prev.filter(item => item.product.id !== productId);
28
+ });
29
+ }, [setCartItems]);
30
+ const updateQuantity = useCallback((productId, quantity) => {
31
+ if (quantity <= 0) {
32
+ removeFromCart(productId);
33
+ return;
34
+ }
35
+ setCartItems(prev => prev.map(item => item.product.id === productId
36
+ ? { ...item, quantity }
37
+ : item));
38
+ }, [setCartItems, removeFromCart]);
39
+ const getCartTotal = useCallback(() => {
40
+ return cartItems.reduce((total, item) => total + (item.product.price * item.quantity), 0);
41
+ }, [cartItems]);
42
+ const getCartItemCount = useCallback(() => {
43
+ return cartItems.reduce((count, item) => count + item.quantity, 0);
44
+ }, [cartItems]);
45
+ const isInCart = useCallback((productId) => {
46
+ return cartItems.some(item => item.product.id === productId);
47
+ }, [cartItems]);
48
+ const getCartItem = useCallback((productId) => {
49
+ return cartItems.find(item => item.product.id === productId);
50
+ }, [cartItems]);
51
+ return {
52
+ addToCart,
53
+ removeFromCart,
54
+ updateQuantity,
55
+ getCartTotal,
56
+ getCartItemCount,
57
+ isInCart,
58
+ getCartItem,
59
+ };
60
+ };
61
+
62
+ export { useCart };
63
+ //# sourceMappingURL=useCart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCart.js","sources":["../../../../src/components/Marketplace/hooks/useCart.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { showToast } from '../../Toast';\nimport type { Product, CartItem } from '../types';\n\nexport interface UseCartProps {\n cartItems: CartItem[];\n setCartItems: (items: CartItem[] | ((prev: CartItem[]) => CartItem[])) => void;\n}\n\nexport interface UseCartReturn {\n addToCart: (product: Product, quantity?: number) => void;\n removeFromCart: (productId: string) => void;\n updateQuantity: (productId: string, quantity: number) => void;\n getCartTotal: () => number;\n getCartItemCount: () => number;\n isInCart: (productId: string) => boolean;\n getCartItem: (productId: string) => CartItem | undefined;\n}\n\n/**\n * Custom hook for cart management functionality\n * Handles adding, removing, and updating cart items with proper state management\n */\nexport const useCart = ({ cartItems, setCartItems }: UseCartProps): UseCartReturn => {\n const addToCart = useCallback((product: Product, quantity: number = 1) => {\n setCartItems(prev => {\n const existingItem = prev.find(item => item.product.id === product.id);\n if (existingItem) {\n return prev.map(item =>\n item.product.id === product.id\n ? { ...item, quantity: item.quantity + quantity }\n : item\n );\n }\n return [...prev, { product, quantity }];\n });\n showToast.success(`${product.name} added to cart!`);\n }, [setCartItems]);\n\n const removeFromCart = useCallback((productId: string) => {\n setCartItems(prev => {\n const item = prev.find(item => item.product.id === productId);\n if (item) {\n showToast.info(`${item.product.name} removed from cart`);\n }\n return prev.filter(item => item.product.id !== productId);\n });\n }, [setCartItems]);\n\n const updateQuantity = useCallback((productId: string, quantity: number) => {\n if (quantity <= 0) {\n removeFromCart(productId);\n return;\n }\n\n setCartItems(prev =>\n prev.map(item =>\n item.product.id === productId\n ? { ...item, quantity }\n : item\n )\n );\n }, [setCartItems, removeFromCart]);\n\n const getCartTotal = useCallback(() => {\n return cartItems.reduce((total, item) => total + (item.product.price * item.quantity), 0);\n }, [cartItems]);\n\n const getCartItemCount = useCallback(() => {\n return cartItems.reduce((count, item) => count + item.quantity, 0);\n }, [cartItems]);\n\n const isInCart = useCallback((productId: string) => {\n return cartItems.some(item => item.product.id === productId);\n }, [cartItems]);\n\n const getCartItem = useCallback((productId: string) => {\n return cartItems.find(item => item.product.id === productId);\n }, [cartItems]);\n\n return {\n addToCart,\n removeFromCart,\n updateQuantity,\n getCartTotal,\n getCartItemCount,\n isInCart,\n getCartItem,\n };\n};"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Product, FilterOptions, CartItem } from '../types';
2
+ export interface MarketplaceState {
3
+ sidebarCollapsed: boolean;
4
+ currentView: 'dashboard' | 'products' | 'product' | 'checkout';
5
+ selectedProduct: Product | null;
6
+ searchQuery: string;
7
+ cartItems: CartItem[];
8
+ showCheckout: boolean;
9
+ filters: FilterOptions;
10
+ }
11
+ export interface MarketplaceActions {
12
+ setSidebarCollapsed: (collapsed: boolean) => void;
13
+ setCurrentView: (view: MarketplaceState['currentView']) => void;
14
+ setSelectedProduct: (product: Product | null) => void;
15
+ setSearchQuery: (query: string) => void;
16
+ setCartItems: (items: CartItem[] | ((prev: CartItem[]) => CartItem[])) => void;
17
+ setShowCheckout: (show: boolean) => void;
18
+ setFilters: (filters: FilterOptions) => void;
19
+ toggleSidebar: () => void;
20
+ clearCart: () => void;
21
+ resetFilters: () => void;
22
+ }
23
+ /**
24
+ * Custom hook for managing marketplace state and actions
25
+ * Centralizes all state management for the marketplace interface
26
+ */
27
+ export declare const useMarketplaceState: () => MarketplaceState & MarketplaceActions;
@@ -0,0 +1,56 @@
1
+ import { useState, useCallback } from 'react';
2
+
3
+ const initialFilters = {
4
+ categories: [],
5
+ brands: [],
6
+ priceRange: [0, 1000],
7
+ rating: 0,
8
+ inStock: false,
9
+ vendors: [],
10
+ };
11
+ /**
12
+ * Custom hook for managing marketplace state and actions
13
+ * Centralizes all state management for the marketplace interface
14
+ */
15
+ const useMarketplaceState = () => {
16
+ const [sidebarCollapsed, setSidebarCollapsed] = useState(false);
17
+ const [currentView, setCurrentView] = useState('dashboard');
18
+ const [selectedProduct, setSelectedProduct] = useState(null);
19
+ const [searchQuery, setSearchQuery] = useState('');
20
+ const [cartItems, setCartItems] = useState([]);
21
+ const [showCheckout, setShowCheckout] = useState(false);
22
+ const [filters, setFilters] = useState(initialFilters);
23
+ const toggleSidebar = useCallback(() => {
24
+ setSidebarCollapsed(prev => !prev);
25
+ }, []);
26
+ const clearCart = useCallback(() => {
27
+ setCartItems([]);
28
+ }, []);
29
+ const resetFilters = useCallback(() => {
30
+ setFilters(initialFilters);
31
+ }, []);
32
+ return {
33
+ // State
34
+ sidebarCollapsed,
35
+ currentView,
36
+ selectedProduct,
37
+ searchQuery,
38
+ cartItems,
39
+ showCheckout,
40
+ filters,
41
+ // Actions
42
+ setSidebarCollapsed,
43
+ setCurrentView,
44
+ setSelectedProduct,
45
+ setSearchQuery,
46
+ setCartItems,
47
+ setShowCheckout,
48
+ setFilters,
49
+ toggleSidebar,
50
+ clearCart,
51
+ resetFilters,
52
+ };
53
+ };
54
+
55
+ export { useMarketplaceState };
56
+ //# sourceMappingURL=useMarketplaceState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMarketplaceState.js","sources":["../../../../src/components/Marketplace/hooks/useMarketplaceState.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport type { Product, FilterOptions, CartItem } from '../types';\n\nexport interface MarketplaceState {\n sidebarCollapsed: boolean;\n currentView: 'dashboard' | 'products' | 'product' | 'checkout';\n selectedProduct: Product | null;\n searchQuery: string;\n cartItems: CartItem[];\n showCheckout: boolean;\n filters: FilterOptions;\n}\n\nexport interface MarketplaceActions {\n setSidebarCollapsed: (collapsed: boolean) => void;\n setCurrentView: (view: MarketplaceState['currentView']) => void;\n setSelectedProduct: (product: Product | null) => void;\n setSearchQuery: (query: string) => void;\n setCartItems: (items: CartItem[] | ((prev: CartItem[]) => CartItem[])) => void;\n setShowCheckout: (show: boolean) => void;\n setFilters: (filters: FilterOptions) => void;\n toggleSidebar: () => void;\n clearCart: () => void;\n resetFilters: () => void;\n}\n\nconst initialFilters: FilterOptions = {\n categories: [],\n brands: [],\n priceRange: [0, 1000],\n rating: 0,\n inStock: false,\n vendors: [],\n};\n\n/**\n * Custom hook for managing marketplace state and actions\n * Centralizes all state management for the marketplace interface\n */\nexport const useMarketplaceState = (): MarketplaceState & MarketplaceActions => {\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n const [currentView, setCurrentView] = useState<MarketplaceState['currentView']>('dashboard');\n const [selectedProduct, setSelectedProduct] = useState<Product | null>(null);\n const [searchQuery, setSearchQuery] = useState('');\n const [cartItems, setCartItems] = useState<CartItem[]>([]);\n const [showCheckout, setShowCheckout] = useState(false);\n const [filters, setFilters] = useState<FilterOptions>(initialFilters);\n\n const toggleSidebar = useCallback(() => {\n setSidebarCollapsed(prev => !prev);\n }, []);\n\n const clearCart = useCallback(() => {\n setCartItems([]);\n }, []);\n\n const resetFilters = useCallback(() => {\n setFilters(initialFilters);\n }, []);\n\n return {\n // State\n sidebarCollapsed,\n currentView,\n selectedProduct,\n searchQuery,\n cartItems,\n showCheckout,\n filters,\n // Actions\n setSidebarCollapsed,\n setCurrentView,\n setSelectedProduct,\n setSearchQuery,\n setCartItems,\n setShowCheckout,\n setFilters,\n toggleSidebar,\n clearCart,\n resetFilters,\n };\n};"],"names":[],"mappings":";;AA0BA,MAAM,cAAc,GAAkB;AACpC,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;AACrB,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,EAAE;CACZ;AAED;;;AAGG;AACI,MAAM,mBAAmB,GAAG,MAA4C;IAC7E,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC/D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAkC,WAAW,CAAC;IAC5F,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAiB,IAAI,CAAC;IAC5E,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAa,EAAE,CAAC;IAC1D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAgB,cAAc,CAAC;AAErE,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,MAAK;QACrC,mBAAmB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,MAAK;QACjC,YAAY,CAAC,EAAE,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,UAAU,CAAC,cAAc,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC;IAEN,OAAO;;QAEL,gBAAgB;QAChB,WAAW;QACX,eAAe;QACf,WAAW;QACX,SAAS;QACT,YAAY;QACZ,OAAO;;QAEP,mBAAmB;QACnB,cAAc;QACd,kBAAkB;QAClB,cAAc;QACd,YAAY;QACZ,eAAe;QACf,UAAU;QACV,aAAa;QACb,SAAS;QACT,YAAY;KACb;AACH;;;;"}
@@ -0,0 +1,17 @@
1
+ import type { Product } from '../types';
2
+ export interface UseProductNavigationProps {
3
+ setSelectedProduct: (product: Product | null) => void;
4
+ setCurrentView: (view: 'dashboard' | 'products' | 'product' | 'checkout') => void;
5
+ onProductClick?: (product: Product) => void;
6
+ }
7
+ export interface UseProductNavigationReturn {
8
+ navigateToProduct: (product: Product) => void;
9
+ navigateToProducts: () => void;
10
+ navigateToDashboard: () => void;
11
+ navigateToCheckout: () => void;
12
+ }
13
+ /**
14
+ * Custom hook for handling product navigation and view changes
15
+ * Centralizes navigation logic for the marketplace interface
16
+ */
17
+ export declare const useProductNavigation: ({ setSelectedProduct, setCurrentView, onProductClick, }: UseProductNavigationProps) => UseProductNavigationReturn;
@@ -0,0 +1,31 @@
1
+ import { useCallback } from 'react';
2
+
3
+ /**
4
+ * Custom hook for handling product navigation and view changes
5
+ * Centralizes navigation logic for the marketplace interface
6
+ */
7
+ const useProductNavigation = ({ setSelectedProduct, setCurrentView, onProductClick, }) => {
8
+ const navigateToProduct = useCallback((product) => {
9
+ setSelectedProduct(product);
10
+ setCurrentView('product');
11
+ onProductClick?.(product);
12
+ }, [setSelectedProduct, setCurrentView, onProductClick]);
13
+ const navigateToProducts = useCallback(() => {
14
+ setCurrentView('products');
15
+ }, [setCurrentView]);
16
+ const navigateToDashboard = useCallback(() => {
17
+ setCurrentView('dashboard');
18
+ }, [setCurrentView]);
19
+ const navigateToCheckout = useCallback(() => {
20
+ setCurrentView('checkout');
21
+ }, [setCurrentView]);
22
+ return {
23
+ navigateToProduct,
24
+ navigateToProducts,
25
+ navigateToDashboard,
26
+ navigateToCheckout,
27
+ };
28
+ };
29
+
30
+ export { useProductNavigation };
31
+ //# sourceMappingURL=useProductNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProductNavigation.js","sources":["../../../../src/components/Marketplace/hooks/useProductNavigation.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport type { Product } from '../types';\n\nexport interface UseProductNavigationProps {\n setSelectedProduct: (product: Product | null) => void;\n setCurrentView: (view: 'dashboard' | 'products' | 'product' | 'checkout') => void;\n onProductClick?: (product: Product) => void;\n}\n\nexport interface UseProductNavigationReturn {\n navigateToProduct: (product: Product) => void;\n navigateToProducts: () => void;\n navigateToDashboard: () => void;\n navigateToCheckout: () => void;\n}\n\n/**\n * Custom hook for handling product navigation and view changes\n * Centralizes navigation logic for the marketplace interface\n */\nexport const useProductNavigation = ({\n setSelectedProduct,\n setCurrentView,\n onProductClick,\n}: UseProductNavigationProps): UseProductNavigationReturn => {\n const navigateToProduct = useCallback((product: Product) => {\n setSelectedProduct(product);\n setCurrentView('product');\n onProductClick?.(product);\n }, [setSelectedProduct, setCurrentView, onProductClick]);\n\n const navigateToProducts = useCallback(() => {\n setCurrentView('products');\n }, [setCurrentView]);\n\n const navigateToDashboard = useCallback(() => {\n setCurrentView('dashboard');\n }, [setCurrentView]);\n\n const navigateToCheckout = useCallback(() => {\n setCurrentView('checkout');\n }, [setCurrentView]);\n\n return {\n navigateToProduct,\n navigateToProducts,\n navigateToDashboard,\n navigateToCheckout,\n };\n};"],"names":[],"mappings":";;AAgBA;;;AAGG;AACI,MAAM,oBAAoB,GAAG,CAAC,EACnC,kBAAkB,EAClB,cAAc,EACd,cAAc,GACY,KAAgC;AAC1D,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,OAAgB,KAAI;QACzD,kBAAkB,CAAC,OAAO,CAAC;QAC3B,cAAc,CAAC,SAAS,CAAC;AACzB,QAAA,cAAc,GAAG,OAAO,CAAC;IAC3B,CAAC,EAAE,CAAC,kBAAkB,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;AAExD,IAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAK;QAC1C,cAAc,CAAC,UAAU,CAAC;AAC5B,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;AAEpB,IAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAK;QAC3C,cAAc,CAAC,WAAW,CAAC;AAC7B,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;AAEpB,IAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAK;QAC1C,cAAc,CAAC,UAAU,CAAC;AAC5B,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;IAEpB,OAAO;QACL,iBAAiB;QACjB,kBAAkB;QAClB,mBAAmB;QACnB,kBAAkB;KACnB;AACH;;;;"}
@@ -0,0 +1,18 @@
1
+ import type { Product } from '../types';
2
+ export interface UseSearchProps {
3
+ products: Product[];
4
+ searchQuery: string;
5
+ setSearchQuery: (query: string) => void;
6
+ setCurrentView: (view: 'dashboard' | 'products' | 'product' | 'checkout') => void;
7
+ }
8
+ export interface UseSearchReturn {
9
+ searchResults: Product[];
10
+ isSearching: boolean;
11
+ handleSearch: (query: string) => void;
12
+ clearSearch: () => void;
13
+ }
14
+ /**
15
+ * Custom hook for search functionality
16
+ * Handles product searching with debouncing and result filtering
17
+ */
18
+ export declare const useSearch: ({ products, searchQuery, setSearchQuery, setCurrentView, }: UseSearchProps) => UseSearchReturn;
@@ -0,0 +1,44 @@
1
+ import { useState, useMemo, useCallback } from 'react';
2
+ import { useDebounce } from '../../../hooks/useDebounce.js';
3
+
4
+ /**
5
+ * Custom hook for search functionality
6
+ * Handles product searching with debouncing and result filtering
7
+ */
8
+ const useSearch = ({ products, searchQuery, setSearchQuery, setCurrentView, }) => {
9
+ const [isSearching, setIsSearching] = useState(false);
10
+ const debouncedSearchQuery = useDebounce(searchQuery, 300);
11
+ const searchResults = useMemo(() => {
12
+ if (!debouncedSearchQuery.trim()) {
13
+ return products;
14
+ }
15
+ const query = debouncedSearchQuery.toLowerCase();
16
+ return products.filter(product => product.name.toLowerCase().includes(query) ||
17
+ product.description.toLowerCase().includes(query) ||
18
+ product.brand.toLowerCase().includes(query) ||
19
+ product.category.toLowerCase().includes(query) ||
20
+ product.tags.some(tag => tag.toLowerCase().includes(query)));
21
+ }, [products, debouncedSearchQuery]);
22
+ const handleSearch = useCallback((query) => {
23
+ setIsSearching(true);
24
+ setSearchQuery(query);
25
+ if (query.trim()) {
26
+ setCurrentView('products');
27
+ }
28
+ // Reset searching state after debounce period
29
+ setTimeout(() => setIsSearching(false), 300);
30
+ }, [setSearchQuery, setCurrentView]);
31
+ const clearSearch = useCallback(() => {
32
+ setSearchQuery('');
33
+ setIsSearching(false);
34
+ }, [setSearchQuery]);
35
+ return {
36
+ searchResults,
37
+ isSearching,
38
+ handleSearch,
39
+ clearSearch,
40
+ };
41
+ };
42
+
43
+ export { useSearch };
44
+ //# sourceMappingURL=useSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSearch.js","sources":["../../../../src/components/Marketplace/hooks/useSearch.ts"],"sourcesContent":["import { useState, useCallback, useMemo } from 'react';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport type { Product } from '../types';\n\nexport interface UseSearchProps {\n products: Product[];\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n setCurrentView: (view: 'dashboard' | 'products' | 'product' | 'checkout') => void;\n}\n\nexport interface UseSearchReturn {\n searchResults: Product[];\n isSearching: boolean;\n handleSearch: (query: string) => void;\n clearSearch: () => void;\n}\n\n/**\n * Custom hook for search functionality\n * Handles product searching with debouncing and result filtering\n */\nexport const useSearch = ({\n products,\n searchQuery,\n setSearchQuery,\n setCurrentView,\n}: UseSearchProps): UseSearchReturn => {\n const [isSearching, setIsSearching] = useState(false);\n const debouncedSearchQuery = useDebounce(searchQuery, 300);\n\n const searchResults = useMemo(() => {\n if (!debouncedSearchQuery.trim()) {\n return products;\n }\n\n const query = debouncedSearchQuery.toLowerCase();\n return products.filter(product =>\n product.name.toLowerCase().includes(query) ||\n product.description.toLowerCase().includes(query) ||\n product.brand.toLowerCase().includes(query) ||\n product.category.toLowerCase().includes(query) ||\n product.tags.some(tag => tag.toLowerCase().includes(query))\n );\n }, [products, debouncedSearchQuery]);\n\n const handleSearch = useCallback((query: string) => {\n setIsSearching(true);\n setSearchQuery(query);\n \n if (query.trim()) {\n setCurrentView('products');\n }\n \n // Reset searching state after debounce period\n setTimeout(() => setIsSearching(false), 300);\n }, [setSearchQuery, setCurrentView]);\n\n const clearSearch = useCallback(() => {\n setSearchQuery('');\n setIsSearching(false);\n }, [setSearchQuery]);\n\n return {\n searchResults,\n isSearching,\n handleSearch,\n clearSearch,\n };\n};"],"names":[],"mappings":";;;AAkBA;;;AAGG;AACI,MAAM,SAAS,GAAG,CAAC,EACxB,QAAQ,EACR,WAAW,EACX,cAAc,EACd,cAAc,GACC,KAAqB;IACpC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACrD,MAAM,oBAAoB,GAAG,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC;AAE1D,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;AACjC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE;AAChC,YAAA,OAAO,QAAQ;QACjB;AAEA,QAAA,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,EAAE;AAChD,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,IAC5B,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC1C,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAC5D;AACH,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;AAEpC,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,KAAa,KAAI;QACjD,cAAc,CAAC,IAAI,CAAC;QACpB,cAAc,CAAC,KAAK,CAAC;AAErB,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;YAChB,cAAc,CAAC,UAAU,CAAC;QAC5B;;QAGA,UAAU,CAAC,MAAM,cAAc,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;AAC9C,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAEpC,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;QACnC,cAAc,CAAC,EAAE,CAAC;QAClB,cAAc,CAAC,KAAK,CAAC;AACvB,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;IAEpB,OAAO;QACL,aAAa;QACb,WAAW;QACX,YAAY;QACZ,WAAW;KACZ;AACH;;;;"}
@@ -5,3 +5,5 @@ export * from './CheckoutComponent';
5
5
  export * from './CheckoutCompact';
6
6
  export * from './MarketplaceSidebar';
7
7
  export * from './MarketplaceComponent';
8
+ export * from './components';
9
+ export * from './hooks';
package/dist/index.d.ts CHANGED
@@ -30,9 +30,7 @@ export * from './components/NightModeSwitch';
30
30
  export * from './components/BlogLayout';
31
31
  export * from './components/BlogSidebar';
32
32
  export * from './components/BlogFeedView';
33
- export * from './components/MarketplaceLayout';
34
33
  export * from './components/SingleBlogView';
35
- export * from './components/CommerceSidebar';
36
34
  export * from './components/Marketplace';
37
35
  export * from './hooks/useDarkMode';
38
36
  export * from './hooks/useDebounce';
package/dist/index.js CHANGED
@@ -36,15 +36,21 @@ export { NightModeSwitch } from './components/NightModeSwitch/NightModeSwitch.js
36
36
  export { BlogLayout } from './components/BlogLayout/BlogLayout.js';
37
37
  export { BlogSidebar } from './components/BlogSidebar/BlogSidebar.js';
38
38
  export { BlogFeedView } from './components/BlogFeedView/BlogFeedView.js';
39
- export { MarketplaceLayout } from './components/MarketplaceLayout/MarketplaceLayout.js';
40
39
  export { SingleBlogView } from './components/SingleBlogView/SingleBlogView.js';
41
- export { CommerceSidebar } from './components/CommerceSidebar/CommerceSidebar.js';
42
40
  export { SingleProductView } from './components/Marketplace/SingleProductView.js';
43
41
  export { AllProductsView } from './components/Marketplace/AllProductsView.js';
44
42
  export { CheckoutComponent } from './components/Marketplace/CheckoutComponent.js';
45
43
  export { CheckoutCompact } from './components/Marketplace/CheckoutCompact.js';
46
44
  export { MarketplaceSidebar } from './components/Marketplace/MarketplaceSidebar.js';
47
45
  export { MarketplaceComponent } from './components/Marketplace/MarketplaceComponent.js';
46
+ export { MarketplaceHeader } from './components/Marketplace/components/MarketplaceHeader.js';
47
+ export { ProductCard } from './components/Marketplace/components/ProductCard.js';
48
+ export { CategoryCard } from './components/Marketplace/components/CategoryCard.js';
49
+ export { VendorCard } from './components/Marketplace/components/VendorCard.js';
50
+ export { useMarketplaceState } from './components/Marketplace/hooks/useMarketplaceState.js';
51
+ export { useCart } from './components/Marketplace/hooks/useCart.js';
52
+ export { useProductNavigation } from './components/Marketplace/hooks/useProductNavigation.js';
53
+ export { useSearch } from './components/Marketplace/hooks/useSearch.js';
48
54
  export { useDarkMode } from './hooks/useDarkMode.js';
49
55
  export { useDebounce } from './hooks/useDebounce.js';
50
56
  export { useLocalStorage } from './hooks/useLocalStorage.js';