@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
@@ -3,7 +3,9 @@ import * as React from 'react';
3
3
  import { cva } from 'class-variance-authority';
4
4
  import { cn } from '../../utils/cn.js';
5
5
 
6
- const cardVariants = cva("rounded-lg border bg-white text-gray-950 shadow-sm", {
6
+ const cardVariants = cva(
7
+ // Mobile-first responsive, content-fitting, vertical stacking
8
+ "w-full max-w-full flex flex-col rounded-lg border bg-white text-gray-950 shadow-sm", {
7
9
  variants: {
8
10
  variant: {
9
11
  default: "border-gray-200",
@@ -12,9 +14,9 @@ const cardVariants = cva("rounded-lg border bg-white text-gray-950 shadow-sm", {
12
14
  },
13
15
  padding: {
14
16
  none: "p-0",
15
- sm: "p-4",
16
- md: "p-6",
17
- lg: "p-8",
17
+ sm: "p-2 sm:p-4",
18
+ md: "p-3 sm:p-6",
19
+ lg: "p-4 sm:p-8",
18
20
  },
19
21
  },
20
22
  defaultVariants: {
@@ -24,15 +26,15 @@ const cardVariants = cva("rounded-lg border bg-white text-gray-950 shadow-sm", {
24
26
  });
25
27
  const Card = React.forwardRef(({ className, variant, padding, ...props }, ref) => (jsx("div", { ref: ref, className: cn(cardVariants({ variant, padding, className })), ...props })));
26
28
  Card.displayName = "Card";
27
- const CardHeader = React.forwardRef(({ className, ...props }, ref) => (jsx("div", { ref: ref, className: cn("flex flex-col space-y-1.5 p-6", className), ...props })));
29
+ const CardHeader = React.forwardRef(({ className, ...props }, ref) => (jsx("div", { ref: ref, className: cn("flex flex-col space-y-1.5 p-2 sm:p-4 md:p-6", className), ...props })));
28
30
  CardHeader.displayName = "CardHeader";
29
31
  const CardTitle = React.forwardRef(({ className, ...props }, ref) => (jsx("h3", { ref: ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props })));
30
32
  CardTitle.displayName = "CardTitle";
31
33
  const CardDescription = React.forwardRef(({ className, ...props }, ref) => (jsx("p", { ref: ref, className: cn("text-sm text-gray-500", className), ...props })));
32
34
  CardDescription.displayName = "CardDescription";
33
- const CardContent = React.forwardRef(({ className, ...props }, ref) => (jsx("div", { ref: ref, className: cn("p-6 pt-0", className), ...props })));
35
+ const CardContent = React.forwardRef(({ className, ...props }, ref) => (jsx("div", { ref: ref, className: cn("p-2 sm:p-4 md:p-6 pt-0", className), ...props })));
34
36
  CardContent.displayName = "CardContent";
35
- const CardFooter = React.forwardRef(({ className, ...props }, ref) => (jsx("div", { ref: ref, className: cn("flex items-center p-6 pt-0", className), ...props })));
37
+ const CardFooter = React.forwardRef(({ className, ...props }, ref) => (jsx("div", { ref: ref, className: cn("flex items-center p-2 sm:p-4 md:p-6 pt-0", className), ...props })));
36
38
  CardFooter.displayName = "CardFooter";
37
39
 
38
40
  export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cardVariants };
@@ -1 +1 @@
1
- {"version":3,"file":"Card.js","sources":["../../../src/components/Card/Card.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\nconst cardVariants = cva(\r\n \"rounded-lg border bg-white text-gray-950 shadow-sm\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"border-gray-200\",\r\n elevated: \"border-gray-200 shadow-md\",\r\n outlined: \"border-2 border-primary-200\",\r\n },\r\n padding: {\r\n none: \"p-0\",\r\n sm: \"p-4\",\r\n md: \"p-6\",\r\n lg: \"p-8\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n padding: \"md\",\r\n },\r\n }\r\n);\r\n\r\nexport interface CardProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof cardVariants> {}\r\n\r\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\r\n ({ className, variant, padding, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(cardVariants({ variant, padding, className }))}\r\n {...props}\r\n />\r\n )\r\n);\r\nCard.displayName = \"Card\";\r\n\r\nconst CardHeader = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\r\n {...props}\r\n />\r\n));\r\nCardHeader.displayName = \"CardHeader\";\r\n\r\nconst CardTitle = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.HTMLAttributes<HTMLHeadingElement>\r\n>(({ className, ...props }, ref) => (\r\n <h3\r\n ref={ref}\r\n className={cn(\r\n \"text-2xl font-semibold leading-none tracking-tight\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nCardTitle.displayName = \"CardTitle\";\r\n\r\nconst CardDescription = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.HTMLAttributes<HTMLParagraphElement>\r\n>(({ className, ...props }, ref) => (\r\n <p\r\n ref={ref}\r\n className={cn(\"text-sm text-gray-500\", className)}\r\n {...props}\r\n />\r\n));\r\nCardDescription.displayName = \"CardDescription\";\r\n\r\nconst CardContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\r\n));\r\nCardContent.displayName = \"CardContent\";\r\n\r\nconst CardFooter = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex items-center p-6 pt-0\", className)}\r\n {...props}\r\n />\r\n));\r\nCardFooter.displayName = \"CardFooter\";\r\n\r\nexport {\r\n Card,\r\n CardHeader,\r\n CardFooter,\r\n CardTitle,\r\n CardDescription,\r\n CardContent,\r\n cardVariants,\r\n};"],"names":["_jsx"],"mappings":";;;;;AAIA,MAAM,YAAY,GAAG,GAAG,CACtB,oDAAoD,EACpD;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,QAAQ,EAAE,2BAA2B;AACrC,YAAA,QAAQ,EAAE,6BAA6B;AACxC,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,EAAE,EAAE,KAAK;AACV,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;AACF,CAAA;AAOH,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAC3B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7CA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,KACxD,KAAK,EAAA,CACT,CACH;AAEH,IAAI,CAAC,WAAW,GAAG,MAAM;AAEzB,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGjC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7BA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,EAAA,GACrD,KAAK,EAAA,CACT,CACH;AACD,UAAU,CAAC,WAAW,GAAG,YAAY;AAErC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAGhC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7BA,GAAA,CAAA,IAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,oDAAoD,EACpD,SAAS,CACV,EAAA,GACG,KAAK,EAAA,CACT,CACH;AACD,SAAS,CAAC,WAAW,GAAG,WAAW;AAEnC,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAGtC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7BA,GAAA,CAAA,GAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,EAAA,GAC7C,KAAK,EAAA,CACT,CACH;AACD,eAAe,CAAC,WAAW,GAAG,iBAAiB;AAE/C,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAGlC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7BA,GAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EAAA,GAAM,KAAK,EAAA,CAAI,CACnE;AACD,WAAW,CAAC,WAAW,GAAG,aAAa;AAEvC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGjC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7BA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,EAAA,GAClD,KAAK,EAAA,CACT,CACH;AACD,UAAU,CAAC,WAAW,GAAG,YAAY;;;;"}
1
+ {"version":3,"file":"Card.js","sources":["../../../src/components/Card/Card.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\nconst cardVariants = cva(\r\n // Mobile-first responsive, content-fitting, vertical stacking\r\n \"w-full max-w-full flex flex-col rounded-lg border bg-white text-gray-950 shadow-sm\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"border-gray-200\",\r\n elevated: \"border-gray-200 shadow-md\",\r\n outlined: \"border-2 border-primary-200\",\r\n },\r\n padding: {\r\n none: \"p-0\",\r\n sm: \"p-2 sm:p-4\",\r\n md: \"p-3 sm:p-6\",\r\n lg: \"p-4 sm:p-8\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n padding: \"md\",\r\n },\r\n }\r\n);\r\n\r\nexport interface CardProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof cardVariants> {}\r\n\r\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\r\n ({ className, variant, padding, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(cardVariants({ variant, padding, className }))}\r\n {...props}\r\n />\r\n )\r\n);\r\nCard.displayName = \"Card\";\r\n\r\nconst CardHeader = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex flex-col space-y-1.5 p-2 sm:p-4 md:p-6\", className)}\r\n {...props}\r\n />\r\n));\r\nCardHeader.displayName = \"CardHeader\";\r\n\r\nconst CardTitle = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.HTMLAttributes<HTMLHeadingElement>\r\n>(({ className, ...props }, ref) => (\r\n <h3\r\n ref={ref}\r\n className={cn(\r\n \"text-2xl font-semibold leading-none tracking-tight\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nCardTitle.displayName = \"CardTitle\";\r\n\r\nconst CardDescription = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.HTMLAttributes<HTMLParagraphElement>\r\n>(({ className, ...props }, ref) => (\r\n <p\r\n ref={ref}\r\n className={cn(\"text-sm text-gray-500\", className)}\r\n {...props}\r\n />\r\n));\r\nCardDescription.displayName = \"CardDescription\";\r\n\r\nconst CardContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div ref={ref} className={cn(\"p-2 sm:p-4 md:p-6 pt-0\", className)} {...props} />\r\n));\r\nCardContent.displayName = \"CardContent\";\r\n\r\nconst CardFooter = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex items-center p-2 sm:p-4 md:p-6 pt-0\", className)}\r\n {...props}\r\n />\r\n));\r\nCardFooter.displayName = \"CardFooter\";\r\n\r\nexport {\r\n Card,\r\n CardHeader,\r\n CardFooter,\r\n CardTitle,\r\n CardDescription,\r\n CardContent,\r\n cardVariants,\r\n};"],"names":["_jsx"],"mappings":";;;;;AAIA,MAAM,YAAY,GAAG,GAAG;AACtB;AACA,oFAAoF,EACpF;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,QAAQ,EAAE,2BAA2B;AACrC,YAAA,QAAQ,EAAE,6BAA6B;AACxC,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,EAAE,EAAE,YAAY;AAChB,YAAA,EAAE,EAAE,YAAY;AAChB,YAAA,EAAE,EAAE,YAAY;AACjB,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;AACF,CAAA;AAOH,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAC3B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7CA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,KACxD,KAAK,EAAA,CACT,CACH;AAEH,IAAI,CAAC,WAAW,GAAG,MAAM;AAEzB,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGjC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7BA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,6CAA6C,EAAE,SAAS,CAAC,EAAA,GACnE,KAAK,EAAA,CACT,CACH;AACD,UAAU,CAAC,WAAW,GAAG,YAAY;AAErC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAGhC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7BA,GAAA,CAAA,IAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,oDAAoD,EACpD,SAAS,CACV,EAAA,GACG,KAAK,EAAA,CACT,CACH;AACD,SAAS,CAAC,WAAW,GAAG,WAAW;AAEnC,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAGtC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7BA,GAAA,CAAA,GAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,EAAA,GAC7C,KAAK,EAAA,CACT,CACH;AACD,eAAe,CAAC,WAAW,GAAG,iBAAiB;AAE/C,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAGlC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7BA,GAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,EAAA,GAAM,KAAK,EAAA,CAAI,CACjF;AACD,WAAW,CAAC,WAAW,GAAG,aAAa;AAEvC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGjC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC7BA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,0CAA0C,EAAE,SAAS,CAAC,EAAA,GAChE,KAAK,EAAA,CACT,CACH;AACD,UAAU,CAAC,WAAW,GAAG,YAAY;;;;"}
@@ -1,8 +1,12 @@
1
1
  import React from 'react';
2
2
  import type { Product } from './types';
3
- interface MarketplaceComponentProps {
3
+ export interface MarketplaceComponentProps {
4
4
  userRole?: 'buyer' | 'seller' | 'admin';
5
5
  onProductClick?: (product: Product) => void;
6
+ className?: string;
6
7
  }
8
+ /**
9
+ * Main marketplace component orchestrating all marketplace functionality
10
+ * Refactored to use modular components and custom hooks for better maintainability
11
+ */
7
12
  export declare const MarketplaceComponent: React.FC<MarketplaceComponentProps>;
8
- export {};
@@ -1,107 +1,56 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { useState } from 'react';
3
- import { Menu, Package, Search, ShoppingCart, Bell, Users, DollarSign, Eye, Star } from 'lucide-react';
4
- import { Button } from '../Button/Button.js';
5
- import { Input } from '../Input/Input.js';
6
- import { Card, CardContent } from '../Card/Card.js';
7
- import { Badge } from '../Badge/Badge.js';
8
- import { Avatar, AvatarImage, AvatarFallback } from '../Avatar/Avatar.js';
9
- import { StatsCard } from '../StatsCard/StatsCard.js';
10
- import { showToast } from '../Toast/Toast.js';
2
+ import { sampleProducts } from './data/sampleData.js';
3
+ import { MarketplaceHeader } from './components/MarketplaceHeader.js';
4
+ import { MarketplaceDashboard } from './components/MarketplaceDashboard.js';
11
5
  import { MarketplaceSidebar } from './MarketplaceSidebar.js';
12
6
  import { AllProductsView } from './AllProductsView.js';
13
7
  import { SingleProductView } from './SingleProductView.js';
14
8
  import { CheckoutCompact } from './CheckoutCompact.js';
15
- import { sampleProducts } from './data/sampleData.js';
9
+ import { useMarketplaceState } from './hooks/useMarketplaceState.js';
10
+ import { useCart } from './hooks/useCart.js';
11
+ import { useProductNavigation } from './hooks/useProductNavigation.js';
12
+ import { useSearch } from './hooks/useSearch.js';
16
13
 
17
- const MarketplaceComponent = ({ userRole = 'buyer', onProductClick, }) => {
18
- const [sidebarCollapsed, setSidebarCollapsed] = useState(false);
19
- const [currentView, setCurrentView] = useState('dashboard');
20
- const [selectedProduct, setSelectedProduct] = useState(null);
21
- const [searchQuery, setSearchQuery] = useState('');
22
- const [cartItems, setCartItems] = useState([]);
23
- const [showCheckout, setShowCheckout] = useState(false);
24
- const [filters, setFilters] = useState({
25
- categories: [],
26
- brands: [],
27
- priceRange: [0, 1000],
28
- rating: 0,
29
- inStock: false,
30
- vendors: [],
14
+ /**
15
+ * Main marketplace component orchestrating all marketplace functionality
16
+ * Refactored to use modular components and custom hooks for better maintainability
17
+ */
18
+ const MarketplaceComponent = ({ userRole = 'buyer', onProductClick, className = '', }) => {
19
+ // State management hook
20
+ const { sidebarCollapsed, currentView, selectedProduct, searchQuery, cartItems, showCheckout, filters, setSidebarCollapsed, setCurrentView, setSelectedProduct, setSearchQuery, setCartItems, setShowCheckout, setFilters, toggleSidebar, clearCart, resetFilters, } = useMarketplaceState();
21
+ // Cart management hook
22
+ const { addToCart, removeFromCart, updateQuantity, getCartTotal, getCartItemCount, isInCart, getCartItem, } = useCart({ cartItems, setCartItems });
23
+ // Navigation hook
24
+ const { navigateToProduct, navigateToProducts, navigateToDashboard, navigateToCheckout, } = useProductNavigation({
25
+ setSelectedProduct,
26
+ setCurrentView,
27
+ onProductClick,
28
+ });
29
+ // Search hook
30
+ const { searchResults, isSearching, handleSearch, clearSearch, } = useSearch({
31
+ products: sampleProducts,
32
+ searchQuery,
33
+ setSearchQuery,
34
+ setCurrentView,
31
35
  });
36
+ // Derived data
32
37
  const featuredProducts = sampleProducts.slice(0, 4);
38
+ const trendingProducts = sampleProducts.slice(4, 8);
33
39
  const recentlyViewed = sampleProducts.slice(8, 12);
34
- const handleProductClick = (product) => {
35
- setSelectedProduct(product);
36
- setCurrentView('product');
37
- onProductClick?.(product);
40
+ const cartItemCount = getCartItemCount();
41
+ // Event handlers
42
+ const handleCartClick = () => {
43
+ setShowCheckout(!showCheckout);
38
44
  };
39
- const handleAddToCart = (product, quantity = 1) => {
40
- setCartItems(prev => {
41
- const existingItem = prev.find(item => item.product.id === product.id);
42
- if (existingItem) {
43
- return prev.map(item => item.product.id === product.id
44
- ? { ...item, quantity: item.quantity + quantity }
45
- : item);
46
- }
47
- return [...prev, { product, quantity }];
48
- });
49
- showToast.success(`${product.name} added to cart!`);
45
+ const handleCheckoutComplete = (items) => {
46
+ clearCart();
47
+ setShowCheckout(false);
50
48
  };
51
- const handleSearch = (query) => {
52
- setSearchQuery(query);
53
- if (query.trim()) {
54
- setCurrentView('products');
55
- }
49
+ const handleBuyNow = (product, quantity) => {
50
+ addToCart(product, quantity);
51
+ setShowCheckout(true);
56
52
  };
57
- const renderHeader = () => (jsx("header", { className: "bg-white border-b border-gray-200 sticky top-0 z-40", children: jsx("div", { className: "px-6 py-4", children: jsxs("div", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center space-x-4", children: [jsx(Button, { variant: "ghost", size: "sm", onClick: () => setSidebarCollapsed(!sidebarCollapsed), className: "lg:hidden", children: jsx(Menu, { className: "h-5 w-5" }) }), jsxs("div", { className: "flex items-center space-x-3", children: [jsx("div", { className: "w-8 h-8 bg-primary-600 rounded-lg flex items-center justify-center", children: jsx(Package, { className: "h-5 w-5 text-white" }) }), jsxs("div", { children: [jsx("h1", { className: "font-bold text-xl text-gray-900", children: "MarketPlace" }), jsx("p", { className: "text-xs text-gray-500", children: "Your digital marketplace" })] })] })] }), jsx("div", { className: "flex-1 max-w-2xl mx-8", children: jsxs("div", { className: "relative", children: [jsx(Search, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400" }), jsx(Input, { placeholder: "Search products, brands, categories...", value: searchQuery, onChange: (e) => handleSearch(e.target.value), className: "pl-10 bg-gray-50 border-gray-200 focus:bg-white" })] }) }), jsxs("div", { className: "flex items-center space-x-3", children: [jsx("div", { className: "relative", children: jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setShowCheckout(!showCheckout), className: "relative", children: [jsx(ShoppingCart, { className: "h-5 w-5" }), cartItems.length > 0 && (jsx(Badge, { variant: "danger", className: "absolute -top-1 -right-1 h-5 w-5 text-xs p-0 flex items-center justify-center", children: cartItems.reduce((sum, item) => sum + item.quantity, 0) }))] }) }), jsxs(Button, { variant: "ghost", size: "sm", className: "relative", children: [jsx(Bell, { className: "h-5 w-5" }), jsx(Badge, { variant: "danger", className: "absolute -top-1 -right-1 h-4 w-4 text-xs p-0 flex items-center justify-center", children: "3" })] }), jsxs("div", { className: "flex items-center space-x-3 pl-3 border-l border-gray-200", children: [jsxs("div", { className: "hidden sm:block text-right", children: [jsx("p", { className: "text-sm font-medium text-gray-900", children: "John Doe" }), jsx("p", { className: "text-xs text-gray-500 capitalize", children: userRole })] }), jsxs(Avatar, { size: "sm", children: [jsx(AvatarImage, { src: "https://images.pexels.com/photos/774909/pexels-photo-774909.jpeg?auto=compress&cs=tinysrgb&w=64" }), jsx(AvatarFallback, { children: "JD" })] })] })] })] }) }) }));
58
- const renderDashboard = () => (jsxs("div", { className: "space-y-8", children: [jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6", children: [jsx(StatsCard, { title: "Total Products", value: "2,543", trend: {
59
- direction: "up",
60
- value: "+12%",
61
- label: "from last month"
62
- }, icon: jsx(Package, { className: "h-6 w-6 text-primary-600" }) }), jsx(StatsCard, { title: "Active Sellers", value: "156", trend: {
63
- direction: "up",
64
- value: "+8%",
65
- label: "from last month"
66
- }, icon: jsx(Users, { className: "h-6 w-6 text-success-600" }) }), jsx(StatsCard, { title: "Total Sales", value: "$45,231", trend: {
67
- direction: "up",
68
- value: "+15%",
69
- label: "from last month"
70
- }, icon: jsx(DollarSign, { className: "h-6 w-6 text-warning-600" }) }), jsx(StatsCard, { title: "Page Views", value: "89,432", trend: {
71
- direction: "up",
72
- value: "+23%",
73
- label: "from last month"
74
- }, icon: jsx(Eye, { className: "h-6 w-6 text-danger-600" }) })] }), jsxs("div", { children: [jsxs("div", { className: "flex items-center justify-between mb-6", children: [jsx("h2", { className: "text-2xl font-bold text-gray-900", children: "Featured Categories" }), jsx(Button, { variant: "outline", onClick: () => setCurrentView('products'), children: "View All" })] }), jsx("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-4", children: [
75
- { name: 'Electronics', count: 156, image: 'https://images.pexels.com/photos/3394650/pexels-photo-3394650.jpeg?auto=compress&cs=tinysrgb&w=400' },
76
- { name: 'Fashion', count: 234, image: 'https://images.pexels.com/photos/1926769/pexels-photo-1926769.jpeg?auto=compress&cs=tinysrgb&w=400' },
77
- { name: 'Home & Garden', count: 178, image: 'https://images.pexels.com/photos/1571460/pexels-photo-1571460.jpeg?auto=compress&cs=tinysrgb&w=400' },
78
- { name: 'Sports', count: 145, image: 'https://images.pexels.com/photos/863988/pexels-photo-863988.jpeg?auto=compress&cs=tinysrgb&w=400' },
79
- ].map((category) => (jsxs(Card, { className: "hover:shadow-lg transition-shadow cursor-pointer", children: [jsx("div", { className: "aspect-square bg-gray-100 rounded-t-lg overflow-hidden", children: jsx("img", { src: category.image, alt: category.name, className: "w-full h-full object-cover" }) }), jsxs(CardContent, { className: "p-4 text-center", children: [jsx("h3", { className: "font-medium text-gray-900 mb-1", children: category.name }), jsxs("p", { className: "text-sm text-gray-600", children: [category.count, " products"] })] })] }, category.name))) })] }), jsxs("div", { children: [jsxs("div", { className: "flex items-center justify-between mb-6", children: [jsx("h2", { className: "text-2xl font-bold text-gray-900", children: "Featured Products" }), jsx(Button, { variant: "outline", onClick: () => setCurrentView('products'), children: "View All" })] }), jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6", children: featuredProducts.map((product) => (jsxs(Card, { className: "hover:shadow-lg transition-shadow cursor-pointer", children: [jsxs("div", { className: "aspect-square bg-gray-100 rounded-t-lg overflow-hidden", onClick: () => handleProductClick(product), children: [jsx("img", { src: product.images[0], alt: product.name, className: "w-full h-full object-cover" }), product.discount && (jsxs(Badge, { variant: "danger", className: "absolute top-2 left-2", children: ["-", product.discount, "%"] }))] }), jsxs(CardContent, { className: "p-4", children: [jsx("h3", { className: "font-medium text-gray-900 mb-2 line-clamp-2", children: product.name }), 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, ")"] })] }), jsxs("div", { className: "flex items-center justify-between", 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)] }))] }), jsx(Button, { size: "sm", onClick: (e) => {
80
- e.stopPropagation();
81
- handleAddToCart(product);
82
- }, children: "Add to Cart" })] })] })] }, product.id))) })] }), jsxs("div", { children: [jsx("h2", { className: "text-2xl font-bold text-gray-900 mb-6", children: "Top Sellers" }), jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: [
83
- { name: 'TechWorld Store', rating: 4.8, products: 89, image: 'https://images.pexels.com/photos/3394650/pexels-photo-3394650.jpeg?auto=compress&cs=tinysrgb&w=64' },
84
- { name: 'Fashion Hub', rating: 4.6, products: 76, image: 'https://images.pexels.com/photos/1926769/pexels-photo-1926769.jpeg?auto=compress&cs=tinysrgb&w=64' },
85
- { name: 'Home Essentials', rating: 4.7, products: 65, image: 'https://images.pexels.com/photos/1571460/pexels-photo-1571460.jpeg?auto=compress&cs=tinysrgb&w=64' },
86
- ].map((vendor) => (jsx(Card, { className: "hover:shadow-lg transition-shadow", children: jsxs(CardContent, { className: "p-6 text-center", children: [jsxs(Avatar, { size: "lg", className: "mx-auto mb-4", children: [jsx(AvatarImage, { src: vendor.image }), jsx(AvatarFallback, { children: vendor.name[0] })] }), jsx("h3", { className: "font-semibold text-gray-900 mb-2", children: vendor.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: vendor.rating })] }), jsxs("p", { className: "text-sm text-gray-600 mb-4", children: [vendor.products, " products"] }), jsx(Button, { variant: "outline", size: "sm", children: "Visit Store" })] }) }, vendor.name))) })] }), recentlyViewed.length > 0 && (jsxs("div", { children: [jsx("h2", { className: "text-2xl font-bold text-gray-900 mb-6", children: "Recently Viewed" }), jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6", children: recentlyViewed.map((product) => (jsxs(Card, { className: "hover:shadow-lg transition-shadow cursor-pointer", children: [jsx("div", { className: "aspect-square bg-gray-100 rounded-t-lg overflow-hidden", onClick: () => handleProductClick(product), children: jsx("img", { src: product.images[0], alt: product.name, className: "w-full h-full object-cover" }) }), jsxs(CardContent, { className: "p-4", children: [jsx("h3", { className: "font-medium text-gray-900 mb-2 line-clamp-2", children: product.name }), jsxs("div", { className: "flex items-center justify-between", children: [jsxs("span", { className: "text-lg font-bold text-gray-900", children: ["$", product.price.toFixed(2)] }), jsx(Button, { size: "sm", onClick: (e) => {
87
- e.stopPropagation();
88
- handleAddToCart(product);
89
- }, children: jsx(ShoppingCart, { className: "h-4 w-4" }) })] })] })] }, product.id))) })] }))] }));
90
- return (jsxs("div", { className: "min-h-screen bg-gray-50", children: [renderHeader(), jsxs("div", { className: "flex", children: [(currentView === 'products' || currentView === 'dashboard') && (jsx(MarketplaceSidebar, { filters: filters, onFiltersChange: setFilters, onClearFilters: () => setFilters({
91
- categories: [],
92
- brands: [],
93
- priceRange: [0, 1000],
94
- rating: 0,
95
- inStock: false,
96
- vendors: [],
97
- }), collapsed: sidebarCollapsed, onToggleCollapse: () => setSidebarCollapsed(!sidebarCollapsed) })), jsxs("main", { className: "flex-1 p-6", children: [currentView === 'dashboard' && renderDashboard(), currentView === 'products' && (jsx(AllProductsView, { onProductClick: handleProductClick, onAddToCart: handleAddToCart })), currentView === 'product' && selectedProduct && (jsx(SingleProductView, { productId: selectedProduct.id, onAddToCart: handleAddToCart, onBuyNow: (product, quantity) => {
98
- handleAddToCart(product, quantity);
99
- setShowCheckout(true);
100
- } }))] }), showCheckout && (jsx("div", { className: "fixed right-4 top-20 z-50", children: jsx(CheckoutCompact, { cartItems: cartItems, onClose: () => setShowCheckout(false), onCheckout: (items) => {
101
- showToast.success('Order placed successfully!');
102
- setCartItems([]);
103
- setShowCheckout(false);
104
- } }) }))] })] }));
53
+ return (jsxs("div", { className: `min-h-screen bg-gray-50 ${className}`, children: [jsx(MarketplaceHeader, { searchQuery: searchQuery, onSearchChange: handleSearch, cartItemCount: cartItemCount, onCartClick: handleCartClick, onMenuToggle: toggleSidebar, userRole: userRole }), jsxs("div", { className: "flex", children: [(currentView === 'products' || currentView === 'dashboard') && (jsx(MarketplaceSidebar, { filters: filters, onFiltersChange: setFilters, onClearFilters: resetFilters, collapsed: sidebarCollapsed, onToggleCollapse: toggleSidebar })), jsxs("main", { className: "flex-1 p-6", children: [currentView === 'dashboard' && (jsx(MarketplaceDashboard, { featuredProducts: featuredProducts, trendingProducts: trendingProducts, recentlyViewed: recentlyViewed, onProductClick: navigateToProduct, onAddToCart: addToCart, onViewAllProducts: navigateToProducts })), currentView === 'products' && (jsx(AllProductsView, { onProductClick: navigateToProduct, onAddToCart: addToCart })), currentView === 'product' && selectedProduct && (jsx(SingleProductView, { productId: selectedProduct.id, onAddToCart: addToCart, onBuyNow: handleBuyNow }))] }), showCheckout && (jsx("div", { className: "fixed right-4 top-20 z-50", children: jsx(CheckoutCompact, { cartItems: cartItems, onClose: () => setShowCheckout(false), onCheckout: handleCheckoutComplete }) }))] })] }));
105
54
  };
106
55
 
107
56
  export { MarketplaceComponent };
@@ -1 +1 @@
1
- {"version":3,"file":"MarketplaceComponent.js","sources":["../../../src/components/Marketplace/MarketplaceComponent.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Search, ShoppingCart, User, Bell, Menu, TrendingUp, Star, Eye, Package, DollarSign, Users, BarChart3, Filter, Grid2x2 as Grid, List } from 'lucide-react';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Card, CardHeader, CardTitle, CardContent } from '../Card';\nimport { Badge } from '../Badge';\nimport { Avatar, AvatarImage, AvatarFallback } from '../Avatar';\nimport { StatsCard } from '../StatsCard';\nimport { showToast } from '../Toast';\nimport { MarketplaceSidebar } from './MarketplaceSidebar';\nimport { AllProductsView } from './AllProductsView';\nimport { SingleProductView } from './SingleProductView';\nimport { CheckoutCompact } from './CheckoutCompact';\nimport type { Product, FilterOptions, CartItem } from './types';\nimport { sampleProducts } from './data/sampleData';\n\ninterface MarketplaceComponentProps {\n userRole?: 'buyer' | 'seller' | 'admin';\n onProductClick?: (product: Product) => void;\n}\n\nexport const MarketplaceComponent: React.FC<MarketplaceComponentProps> = ({\n userRole = 'buyer',\n onProductClick,\n}) => {\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n const [currentView, setCurrentView] = useState<'dashboard' | 'products' | 'product' | 'checkout'>('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>({\n categories: [],\n brands: [],\n priceRange: [0, 1000],\n rating: 0,\n inStock: false,\n vendors: [],\n });\n\n const featuredProducts = sampleProducts.slice(0, 4);\n const trendingProducts = sampleProducts.slice(4, 8);\n const recentlyViewed = sampleProducts.slice(8, 12);\n\n const handleProductClick = (product: Product) => {\n setSelectedProduct(product);\n setCurrentView('product');\n onProductClick?.(product);\n };\n\n const handleAddToCart = (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 };\n\n const handleSearch = (query: string) => {\n setSearchQuery(query);\n if (query.trim()) {\n setCurrentView('products');\n }\n };\n\n const renderHeader = () => (\n <header className=\"bg-white border-b border-gray-200 sticky top-0 z-40\">\n <div className=\"px-6 py-4\">\n <div className=\"flex items-center justify-between\">\n {/* Left Section */}\n <div className=\"flex items-center space-x-4\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setSidebarCollapsed(!sidebarCollapsed)}\n className=\"lg:hidden\"\n >\n <Menu className=\"h-5 w-5\" />\n </Button>\n \n <div className=\"flex items-center space-x-3\">\n <div className=\"w-8 h-8 bg-primary-600 rounded-lg flex items-center justify-center\">\n <Package className=\"h-5 w-5 text-white\" />\n </div>\n <div>\n <h1 className=\"font-bold text-xl text-gray-900\">MarketPlace</h1>\n <p className=\"text-xs text-gray-500\">Your digital marketplace</p>\n </div>\n </div>\n </div>\n\n {/* Center Section - Search */}\n <div className=\"flex-1 max-w-2xl mx-8\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400\" />\n <Input\n placeholder=\"Search products, brands, categories...\"\n value={searchQuery}\n onChange={(e) => handleSearch(e.target.value)}\n className=\"pl-10 bg-gray-50 border-gray-200 focus:bg-white\"\n />\n </div>\n </div>\n\n {/* Right Section */}\n <div className=\"flex items-center space-x-3\">\n {/* Cart */}\n <div className=\"relative\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setShowCheckout(!showCheckout)}\n className=\"relative\"\n >\n <ShoppingCart className=\"h-5 w-5\" />\n {cartItems.length > 0 && (\n <Badge \n variant=\"danger\" \n className=\"absolute -top-1 -right-1 h-5 w-5 text-xs p-0 flex items-center justify-center\"\n >\n {cartItems.reduce((sum, item) => sum + item.quantity, 0)}\n </Badge>\n )}\n </Button>\n </div>\n\n {/* Notifications */}\n <Button variant=\"ghost\" size=\"sm\" className=\"relative\">\n <Bell className=\"h-5 w-5\" />\n <Badge \n variant=\"danger\" \n className=\"absolute -top-1 -right-1 h-4 w-4 text-xs p-0 flex items-center justify-center\"\n >\n 3\n </Badge>\n </Button>\n\n {/* User Profile */}\n <div className=\"flex items-center space-x-3 pl-3 border-l border-gray-200\">\n <div className=\"hidden sm:block text-right\">\n <p className=\"text-sm font-medium text-gray-900\">John Doe</p>\n <p className=\"text-xs text-gray-500 capitalize\">{userRole}</p>\n </div>\n <Avatar size=\"sm\">\n <AvatarImage src=\"https://images.pexels.com/photos/774909/pexels-photo-774909.jpeg?auto=compress&cs=tinysrgb&w=64\" />\n <AvatarFallback>JD</AvatarFallback>\n </Avatar>\n </div>\n </div>\n </div>\n </div>\n </header>\n );\n\n const renderDashboard = () => (\n <div className=\"space-y-8\">\n {/* Stats Cards */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\">\n <StatsCard\n title=\"Total Products\"\n value=\"2,543\"\n trend={{\n direction: \"up\",\n value: \"+12%\",\n label: \"from last month\"\n }}\n icon={<Package className=\"h-6 w-6 text-primary-600\" />}\n />\n <StatsCard\n title=\"Active Sellers\"\n value=\"156\"\n trend={{\n direction: \"up\",\n value: \"+8%\",\n label: \"from last month\"\n }}\n icon={<Users className=\"h-6 w-6 text-success-600\" />}\n />\n <StatsCard\n title=\"Total Sales\"\n value=\"$45,231\"\n trend={{\n direction: \"up\",\n value: \"+15%\",\n label: \"from last month\"\n }}\n icon={<DollarSign className=\"h-6 w-6 text-warning-600\" />}\n />\n <StatsCard\n title=\"Page Views\"\n value=\"89,432\"\n trend={{\n direction: \"up\",\n value: \"+23%\",\n label: \"from last month\"\n }}\n icon={<Eye className=\"h-6 w-6 text-danger-600\" />}\n />\n </div>\n\n {/* Featured Categories */}\n <div>\n <div className=\"flex items-center justify-between mb-6\">\n <h2 className=\"text-2xl font-bold text-gray-900\">Featured Categories</h2>\n <Button variant=\"outline\" onClick={() => setCurrentView('products')}>\n View All\n </Button>\n </div>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {[\n { name: 'Electronics', count: 156, image: 'https://images.pexels.com/photos/3394650/pexels-photo-3394650.jpeg?auto=compress&cs=tinysrgb&w=400' },\n { name: 'Fashion', count: 234, image: 'https://images.pexels.com/photos/1926769/pexels-photo-1926769.jpeg?auto=compress&cs=tinysrgb&w=400' },\n { name: 'Home & Garden', count: 178, image: 'https://images.pexels.com/photos/1571460/pexels-photo-1571460.jpeg?auto=compress&cs=tinysrgb&w=400' },\n { name: 'Sports', count: 145, image: 'https://images.pexels.com/photos/863988/pexels-photo-863988.jpeg?auto=compress&cs=tinysrgb&w=400' },\n ].map((category) => (\n <Card key={category.name} className=\"hover:shadow-lg transition-shadow cursor-pointer\">\n <div className=\"aspect-square bg-gray-100 rounded-t-lg overflow-hidden\">\n <img\n src={category.image}\n alt={category.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <CardContent className=\"p-4 text-center\">\n <h3 className=\"font-medium text-gray-900 mb-1\">{category.name}</h3>\n <p className=\"text-sm text-gray-600\">{category.count} products</p>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n\n {/* Featured Products */}\n <div>\n <div className=\"flex items-center justify-between mb-6\">\n <h2 className=\"text-2xl font-bold text-gray-900\">Featured Products</h2>\n <Button variant=\"outline\" onClick={() => setCurrentView('products')}>\n View All\n </Button>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6\">\n {featuredProducts.map((product) => (\n <Card key={product.id} className=\"hover:shadow-lg transition-shadow cursor-pointer\">\n <div \n className=\"aspect-square bg-gray-100 rounded-t-lg overflow-hidden\"\n onClick={() => handleProductClick(product)}\n >\n <img\n src={product.images[0]}\n alt={product.name}\n className=\"w-full h-full object-cover\"\n />\n {product.discount && (\n <Badge variant=\"danger\" className=\"absolute top-2 left-2\">\n -{product.discount}%\n </Badge>\n )}\n </div>\n <CardContent className=\"p-4\">\n <h3 className=\"font-medium text-gray-900 mb-2 line-clamp-2\">\n {product.name}\n </h3>\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 <div className=\"flex items-center justify-between\">\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 <Button\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleAddToCart(product);\n }}\n >\n Add to Cart\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n\n {/* Vendor Spotlight */}\n <div>\n <h2 className=\"text-2xl font-bold text-gray-900 mb-6\">Top Sellers</h2>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n {[\n { name: 'TechWorld Store', rating: 4.8, products: 89, image: 'https://images.pexels.com/photos/3394650/pexels-photo-3394650.jpeg?auto=compress&cs=tinysrgb&w=64' },\n { name: 'Fashion Hub', rating: 4.6, products: 76, image: 'https://images.pexels.com/photos/1926769/pexels-photo-1926769.jpeg?auto=compress&cs=tinysrgb&w=64' },\n { name: 'Home Essentials', rating: 4.7, products: 65, image: 'https://images.pexels.com/photos/1571460/pexels-photo-1571460.jpeg?auto=compress&cs=tinysrgb&w=64' },\n ].map((vendor) => (\n <Card key={vendor.name} className=\"hover:shadow-lg transition-shadow\">\n <CardContent className=\"p-6 text-center\">\n <Avatar size=\"lg\" className=\"mx-auto mb-4\">\n <AvatarImage src={vendor.image} />\n <AvatarFallback>{vendor.name[0]}</AvatarFallback>\n </Avatar>\n <h3 className=\"font-semibold text-gray-900 mb-2\">{vendor.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\">{vendor.rating}</span>\n </div>\n <p className=\"text-sm text-gray-600 mb-4\">{vendor.products} products</p>\n <Button variant=\"outline\" size=\"sm\">\n Visit Store\n </Button>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n\n {/* Recently Viewed */}\n {recentlyViewed.length > 0 && (\n <div>\n <h2 className=\"text-2xl font-bold text-gray-900 mb-6\">Recently Viewed</h2>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6\">\n {recentlyViewed.map((product) => (\n <Card key={product.id} className=\"hover:shadow-lg transition-shadow cursor-pointer\">\n <div \n className=\"aspect-square bg-gray-100 rounded-t-lg overflow-hidden\"\n onClick={() => handleProductClick(product)}\n >\n <img\n src={product.images[0]}\n alt={product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <CardContent className=\"p-4\">\n <h3 className=\"font-medium text-gray-900 mb-2 line-clamp-2\">\n {product.name}\n </h3>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-lg font-bold text-gray-900\">\n ${product.price.toFixed(2)}\n </span>\n <Button\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleAddToCart(product);\n }}\n >\n <ShoppingCart className=\"h-4 w-4\" />\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n\n return (\n <div className=\"min-h-screen bg-gray-50\">\n {/* Header */}\n {renderHeader()}\n\n <div className=\"flex\">\n {/* Sidebar */}\n {(currentView === 'products' || currentView === 'dashboard') && (\n <MarketplaceSidebar\n filters={filters}\n onFiltersChange={setFilters}\n onClearFilters={() => setFilters({\n categories: [],\n brands: [],\n priceRange: [0, 1000],\n rating: 0,\n inStock: false,\n vendors: [],\n })}\n collapsed={sidebarCollapsed}\n onToggleCollapse={() => setSidebarCollapsed(!sidebarCollapsed)}\n />\n )}\n\n {/* Main Content */}\n <main className=\"flex-1 p-6\">\n {currentView === 'dashboard' && renderDashboard()}\n \n {currentView === 'products' && (\n <AllProductsView\n onProductClick={handleProductClick}\n onAddToCart={handleAddToCart}\n />\n )}\n \n {currentView === 'product' && selectedProduct && (\n <SingleProductView\n productId={selectedProduct.id}\n onAddToCart={handleAddToCart}\n onBuyNow={(product, quantity) => {\n handleAddToCart(product, quantity);\n setShowCheckout(true);\n }}\n />\n )}\n </main>\n\n {/* Checkout Sidebar */}\n {showCheckout && (\n <div className=\"fixed right-4 top-20 z-50\">\n <CheckoutCompact\n cartItems={cartItems}\n onClose={() => setShowCheckout(false)}\n onCheckout={(items) => {\n showToast.success('Order placed successfully!');\n setCartItems([]);\n setShowCheckout(false);\n }}\n />\n </div>\n )}\n </div>\n </div>\n );\n};"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"MarketplaceComponent.js","sources":["../../../src/components/Marketplace/MarketplaceComponent.tsx"],"sourcesContent":["import React from 'react';\nimport { sampleProducts } from './data/sampleData';\nimport { MarketplaceHeader } from './components/MarketplaceHeader';\nimport { MarketplaceDashboard } from './components/MarketplaceDashboard';\nimport { MarketplaceSidebar } from './MarketplaceSidebar';\nimport { AllProductsView } from './AllProductsView';\nimport { SingleProductView } from './SingleProductView';\nimport { CheckoutCompact } from './CheckoutCompact';\nimport { useMarketplaceState } from './hooks/useMarketplaceState';\nimport { useCart } from './hooks/useCart';\nimport { useProductNavigation } from './hooks/useProductNavigation';\nimport { useSearch } from './hooks/useSearch';\nimport type { Product } from './types';\n\nexport interface MarketplaceComponentProps {\n userRole?: 'buyer' | 'seller' | 'admin';\n onProductClick?: (product: Product) => void;\n className?: string;\n}\n\n/**\n * Main marketplace component orchestrating all marketplace functionality\n * Refactored to use modular components and custom hooks for better maintainability\n */\nexport const MarketplaceComponent: React.FC<MarketplaceComponentProps> = ({\n userRole = 'buyer',\n onProductClick,\n className = '',\n}) => {\n // State management hook\n const {\n sidebarCollapsed,\n currentView,\n selectedProduct,\n searchQuery,\n cartItems,\n showCheckout,\n filters,\n setSidebarCollapsed,\n setCurrentView,\n setSelectedProduct,\n setSearchQuery,\n setCartItems,\n setShowCheckout,\n setFilters,\n toggleSidebar,\n clearCart,\n resetFilters,\n } = useMarketplaceState();\n\n // Cart management hook\n const {\n addToCart,\n removeFromCart,\n updateQuantity,\n getCartTotal,\n getCartItemCount,\n isInCart,\n getCartItem,\n } = useCart({ cartItems, setCartItems });\n\n // Navigation hook\n const {\n navigateToProduct,\n navigateToProducts,\n navigateToDashboard,\n navigateToCheckout,\n } = useProductNavigation({\n setSelectedProduct,\n setCurrentView,\n onProductClick,\n });\n\n // Search hook\n const {\n searchResults,\n isSearching,\n handleSearch,\n clearSearch,\n } = useSearch({\n products: sampleProducts,\n searchQuery,\n setSearchQuery,\n setCurrentView,\n });\n\n // Derived data\n const featuredProducts = sampleProducts.slice(0, 4);\n const trendingProducts = sampleProducts.slice(4, 8);\n const recentlyViewed = sampleProducts.slice(8, 12);\n const cartItemCount = getCartItemCount();\n\n // Event handlers\n const handleCartClick = () => {\n setShowCheckout(!showCheckout);\n };\n\n const handleCheckoutComplete = (items: any[]) => {\n clearCart();\n setShowCheckout(false);\n };\n\n const handleBuyNow = (product: Product, quantity: number) => {\n addToCart(product, quantity);\n setShowCheckout(true);\n };\n\n return (\n <div className={`min-h-screen bg-gray-50 ${className}`}>\n {/* Header */}\n <MarketplaceHeader\n searchQuery={searchQuery}\n onSearchChange={handleSearch}\n cartItemCount={cartItemCount}\n onCartClick={handleCartClick}\n onMenuToggle={toggleSidebar}\n userRole={userRole}\n />\n\n <div className=\"flex\">\n {/* Sidebar */}\n {(currentView === 'products' || currentView === 'dashboard') && (\n <MarketplaceSidebar\n filters={filters}\n onFiltersChange={setFilters}\n onClearFilters={resetFilters}\n collapsed={sidebarCollapsed}\n onToggleCollapse={toggleSidebar}\n />\n )}\n\n {/* Main Content */}\n <main className=\"flex-1 p-6\">\n {currentView === 'dashboard' && (\n <MarketplaceDashboard\n featuredProducts={featuredProducts}\n trendingProducts={trendingProducts}\n recentlyViewed={recentlyViewed}\n onProductClick={navigateToProduct}\n onAddToCart={addToCart}\n onViewAllProducts={navigateToProducts}\n />\n )}\n \n {currentView === 'products' && (\n <AllProductsView\n onProductClick={navigateToProduct}\n onAddToCart={addToCart}\n />\n )}\n \n {currentView === 'product' && selectedProduct && (\n <SingleProductView\n productId={selectedProduct.id}\n onAddToCart={addToCart}\n onBuyNow={handleBuyNow}\n />\n )}\n </main>\n\n {/* Checkout Sidebar */}\n {showCheckout && (\n <div className=\"fixed right-4 top-20 z-50\">\n <CheckoutCompact\n cartItems={cartItems}\n onClose={() => setShowCheckout(false)}\n onCheckout={handleCheckoutComplete}\n />\n </div>\n )}\n </div>\n </div>\n );\n};"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export interface CategoryCardProps {
3
+ name: string;
4
+ count: number;
5
+ image: string;
6
+ onClick?: (categoryName: string) => void;
7
+ className?: string;
8
+ }
9
+ /**
10
+ * Reusable category card component for displaying product categories
11
+ * Used in dashboard and category browsing sections
12
+ */
13
+ export declare const CategoryCard: React.FC<CategoryCardProps>;
@@ -0,0 +1,16 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Card, CardContent } from '../../Card/Card.js';
3
+
4
+ /**
5
+ * Reusable category card component for displaying product categories
6
+ * Used in dashboard and category browsing sections
7
+ */
8
+ const CategoryCard = ({ name, count, image, onClick, className = '', }) => {
9
+ const handleClick = () => {
10
+ onClick?.(name);
11
+ };
12
+ return (jsxs(Card, { className: `hover:shadow-lg transition-shadow cursor-pointer ${className}`, onClick: handleClick, children: [jsx("div", { className: "aspect-square bg-gray-100 rounded-t-lg overflow-hidden", children: jsx("img", { src: image, alt: name, className: "w-full h-full object-cover" }) }), jsxs(CardContent, { className: "p-4 text-center", children: [jsx("h3", { className: "font-medium text-gray-900 mb-1", children: name }), jsxs("p", { className: "text-sm text-gray-600", children: [count, " products"] })] })] }));
13
+ };
14
+
15
+ export { CategoryCard };
16
+ //# sourceMappingURL=CategoryCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoryCard.js","sources":["../../../../src/components/Marketplace/components/CategoryCard.tsx"],"sourcesContent":["import React from 'react';\nimport { Card, CardContent } from '../../Card';\n\nexport interface CategoryCardProps {\n name: string;\n count: number;\n image: string;\n onClick?: (categoryName: string) => void;\n className?: string;\n}\n\n/**\n * Reusable category card component for displaying product categories\n * Used in dashboard and category browsing sections\n */\nexport const CategoryCard: React.FC<CategoryCardProps> = ({\n name,\n count,\n image,\n onClick,\n className = '',\n}) => {\n const handleClick = () => {\n onClick?.(name);\n };\n\n return (\n <Card \n className={`hover:shadow-lg transition-shadow cursor-pointer ${className}`}\n onClick={handleClick}\n >\n <div className=\"aspect-square bg-gray-100 rounded-t-lg overflow-hidden\">\n <img\n src={image}\n alt={name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <CardContent className=\"p-4 text-center\">\n <h3 className=\"font-medium text-gray-900 mb-1\">{name}</h3>\n <p className=\"text-sm text-gray-600\">{count} products</p>\n </CardContent>\n </Card>\n );\n};"],"names":["_jsxs","_jsx"],"mappings":";;;AAWA;;;AAGG;AACI,MAAM,YAAY,GAAgC,CAAC,EACxD,IAAI,EACJ,KAAK,EACL,KAAK,EACL,OAAO,EACP,SAAS,GAAG,EAAE,GACf,KAAI;IACH,MAAM,WAAW,GAAG,MAAK;AACvB,QAAA,OAAO,GAAG,IAAI,CAAC;AACjB,IAAA,CAAC;IAED,QACEA,IAAA,CAAC,IAAI,EAAA,EACH,SAAS,EAAE,CAAA,iDAAA,EAAoD,SAAS,CAAA,CAAE,EAC1E,OAAO,EAAE,WAAW,EAAA,QAAA,EAAA,CAEpBC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wDAAwD,EAAA,QAAA,EACrEA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,IAAI,EACT,SAAS,EAAC,4BAA4B,EAAA,CACtC,EAAA,CACE,EACND,IAAA,CAAC,WAAW,EAAA,EAAC,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,CACtCC,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAAE,IAAI,EAAA,CAAM,EAC1DD,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CAAE,KAAK,EAAA,WAAA,CAAA,EAAA,CAAc,CAAA,EAAA,CAC7C,CAAA,EAAA,CACT;AAEX;;;;"}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import type { Product } from '../types';
3
+ export interface MarketplaceDashboardProps {
4
+ featuredProducts: Product[];
5
+ trendingProducts: Product[];
6
+ recentlyViewed: Product[];
7
+ onProductClick: (product: Product) => void;
8
+ onAddToCart: (product: Product, quantity?: number) => void;
9
+ onViewAllProducts: () => void;
10
+ className?: string;
11
+ }
12
+ /**
13
+ * Marketplace dashboard component showing overview, featured products, and vendor spotlight
14
+ * Extracted from main marketplace component for better modularity
15
+ */
16
+ export declare const MarketplaceDashboard: React.FC<MarketplaceDashboardProps>;
@@ -0,0 +1,34 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { 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
+ import { Avatar, AvatarImage, AvatarFallback } from '../../Avatar/Avatar.js';
7
+
8
+ /**
9
+ * Marketplace dashboard component showing overview, featured products, and vendor spotlight
10
+ * Extracted from main marketplace component for better modularity
11
+ */
12
+ const MarketplaceDashboard = ({ featuredProducts, trendingProducts, recentlyViewed, onProductClick, onAddToCart, onViewAllProducts, className = '', }) => {
13
+ const categories = [
14
+ { name: 'Electronics', count: 156, image: 'https://images.pexels.com/photos/3394650/pexels-photo-3394650.jpeg?auto=compress&cs=tinysrgb&w=400' },
15
+ { name: 'Fashion', count: 234, image: 'https://images.pexels.com/photos/1926769/pexels-photo-1926769.jpeg?auto=compress&cs=tinysrgb&w=400' },
16
+ { name: 'Home & Garden', count: 178, image: 'https://images.pexels.com/photos/1571460/pexels-photo-1571460.jpeg?auto=compress&cs=tinysrgb&w=400' },
17
+ { name: 'Sports', count: 145, image: 'https://images.pexels.com/photos/863988/pexels-photo-863988.jpeg?auto=compress&cs=tinysrgb&w=400' },
18
+ ];
19
+ const vendors = [
20
+ { name: 'TechWorld Store', rating: 4.8, products: 89, image: 'https://images.pexels.com/photos/3394650/pexels-photo-3394650.jpeg?auto=compress&cs=tinysrgb&w=64' },
21
+ { name: 'Fashion Hub', rating: 4.6, products: 76, image: 'https://images.pexels.com/photos/1926769/pexels-photo-1926769.jpeg?auto=compress&cs=tinysrgb&w=64' },
22
+ { name: 'Home Essentials', rating: 4.7, products: 65, image: 'https://images.pexels.com/photos/1571460/pexels-photo-1571460.jpeg?auto=compress&cs=tinysrgb&w=64' },
23
+ ];
24
+ return (jsxs("div", { className: `space-y-8 ${className}`, children: [jsxs("div", { children: [jsxs("div", { className: "flex items-center justify-between mb-6", children: [jsx("h2", { className: "text-2xl font-bold text-gray-900", children: "Featured Categories" }), jsx(Button, { variant: "outline", onClick: onViewAllProducts, children: "View All" })] }), jsx("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-4", children: categories.map((category) => (jsxs(Card, { className: "hover:shadow-lg transition-shadow cursor-pointer", children: [jsx("div", { className: "aspect-square bg-gray-100 rounded-t-lg overflow-hidden", children: jsx("img", { src: category.image, alt: category.name, className: "w-full h-full object-cover" }) }), jsxs(CardContent, { className: "p-4 text-center", children: [jsx("h3", { className: "font-medium text-gray-900 mb-1", children: category.name }), jsxs("p", { className: "text-sm text-gray-600", children: [category.count, " products"] })] })] }, category.name))) })] }), jsxs("div", { children: [jsxs("div", { className: "flex items-center justify-between mb-6", children: [jsx("h2", { className: "text-2xl font-bold text-gray-900", children: "Featured Products" }), jsx(Button, { variant: "outline", onClick: onViewAllProducts, children: "View All" })] }), jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6", children: featuredProducts.map((product) => (jsxs(Card, { className: "hover:shadow-lg transition-shadow cursor-pointer", children: [jsxs("div", { className: "aspect-square bg-gray-100 rounded-t-lg overflow-hidden relative", onClick: () => onProductClick(product), children: [jsx("img", { src: product.images[0], alt: product.name, className: "w-full h-full object-cover" }), product.discount && (jsxs(Badge, { variant: "danger", className: "absolute top-2 left-2", children: ["-", product.discount, "%"] }))] }), jsxs(CardContent, { className: "p-4", children: [jsx("h3", { className: "font-medium text-gray-900 mb-2 line-clamp-2", children: product.name }), 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, ")"] })] }), jsxs("div", { className: "flex items-center justify-between", 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)] }))] }), jsx(Button, { size: "sm", onClick: (e) => {
25
+ e.stopPropagation();
26
+ onAddToCart(product);
27
+ }, children: "Add to Cart" })] })] })] }, product.id))) })] }), jsxs("div", { children: [jsx("h2", { className: "text-2xl font-bold text-gray-900 mb-6", children: "Top Sellers" }), jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: vendors.map((vendor) => (jsx(Card, { className: "hover:shadow-lg transition-shadow", children: jsxs(CardContent, { className: "p-6 text-center", children: [jsxs(Avatar, { size: "lg", className: "mx-auto mb-4", children: [jsx(AvatarImage, { src: vendor.image }), jsx(AvatarFallback, { children: vendor.name[0] })] }), jsx("h3", { className: "font-semibold text-gray-900 mb-2", children: vendor.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: vendor.rating })] }), jsxs("p", { className: "text-sm text-gray-600 mb-4", children: [vendor.products, " products"] }), jsx(Button, { variant: "outline", size: "sm", children: "Visit Store" })] }) }, vendor.name))) })] }), recentlyViewed.length > 0 && (jsxs("div", { children: [jsx("h2", { className: "text-2xl font-bold text-gray-900 mb-6", children: "Recently Viewed" }), jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6", children: recentlyViewed.map((product) => (jsxs(Card, { className: "hover:shadow-lg transition-shadow cursor-pointer", children: [jsx("div", { className: "aspect-square bg-gray-100 rounded-t-lg overflow-hidden", onClick: () => onProductClick(product), children: jsx("img", { src: product.images[0], alt: product.name, className: "w-full h-full object-cover" }) }), jsxs(CardContent, { className: "p-4", children: [jsx("h3", { className: "font-medium text-gray-900 mb-2 line-clamp-2", children: product.name }), jsxs("div", { className: "flex items-center justify-between", children: [jsxs("span", { className: "text-lg font-bold text-gray-900", children: ["$", product.price.toFixed(2)] }), jsx(Button, { size: "sm", onClick: (e) => {
28
+ e.stopPropagation();
29
+ onAddToCart(product);
30
+ }, children: jsx(ShoppingCart, { className: "h-4 w-4" }) })] })] })] }, product.id))) })] }))] }));
31
+ };
32
+
33
+ export { MarketplaceDashboard };
34
+ //# sourceMappingURL=MarketplaceDashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarketplaceDashboard.js","sources":["../../../../src/components/Marketplace/components/MarketplaceDashboard.tsx"],"sourcesContent":["import React from 'react';\nimport { Package, Users, DollarSign, Eye, TrendingUp, Star, ShoppingCart } from 'lucide-react';\nimport { Button } from '../../Button';\nimport { Card, CardContent } from '../../Card';\nimport { Badge } from '../../Badge';\nimport { Avatar, AvatarImage, AvatarFallback } from '../../Avatar';\nimport { StatsCard } from '../../StatsCard';\nimport type { Product } from '../types';\n\nexport interface MarketplaceDashboardProps {\n featuredProducts: Product[];\n trendingProducts: Product[];\n recentlyViewed: Product[];\n onProductClick: (product: Product) => void;\n onAddToCart: (product: Product, quantity?: number) => void;\n onViewAllProducts: () => void;\n className?: string;\n}\n\n/**\n * Marketplace dashboard component showing overview, featured products, and vendor spotlight\n * Extracted from main marketplace component for better modularity\n */\nexport const MarketplaceDashboard: React.FC<MarketplaceDashboardProps> = ({\n featuredProducts,\n trendingProducts,\n recentlyViewed,\n onProductClick,\n onAddToCart,\n onViewAllProducts,\n className = '',\n}) => {\n const categories = [\n { name: 'Electronics', count: 156, image: 'https://images.pexels.com/photos/3394650/pexels-photo-3394650.jpeg?auto=compress&cs=tinysrgb&w=400' },\n { name: 'Fashion', count: 234, image: 'https://images.pexels.com/photos/1926769/pexels-photo-1926769.jpeg?auto=compress&cs=tinysrgb&w=400' },\n { name: 'Home & Garden', count: 178, image: 'https://images.pexels.com/photos/1571460/pexels-photo-1571460.jpeg?auto=compress&cs=tinysrgb&w=400' },\n { name: 'Sports', count: 145, image: 'https://images.pexels.com/photos/863988/pexels-photo-863988.jpeg?auto=compress&cs=tinysrgb&w=400' },\n ];\n\n const vendors = [\n { name: 'TechWorld Store', rating: 4.8, products: 89, image: 'https://images.pexels.com/photos/3394650/pexels-photo-3394650.jpeg?auto=compress&cs=tinysrgb&w=64' },\n { name: 'Fashion Hub', rating: 4.6, products: 76, image: 'https://images.pexels.com/photos/1926769/pexels-photo-1926769.jpeg?auto=compress&cs=tinysrgb&w=64' },\n { name: 'Home Essentials', rating: 4.7, products: 65, image: 'https://images.pexels.com/photos/1571460/pexels-photo-1571460.jpeg?auto=compress&cs=tinysrgb&w=64' },\n ];\n\n return (\n <div className={`space-y-8 ${className}`}>\n {/* Featured Categories */}\n <div>\n <div className=\"flex items-center justify-between mb-6\">\n <h2 className=\"text-2xl font-bold text-gray-900\">Featured Categories</h2>\n <Button variant=\"outline\" onClick={onViewAllProducts}>\n View All\n </Button>\n </div>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {categories.map((category) => (\n <Card key={category.name} className=\"hover:shadow-lg transition-shadow cursor-pointer\">\n <div className=\"aspect-square bg-gray-100 rounded-t-lg overflow-hidden\">\n <img\n src={category.image}\n alt={category.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <CardContent className=\"p-4 text-center\">\n <h3 className=\"font-medium text-gray-900 mb-1\">{category.name}</h3>\n <p className=\"text-sm text-gray-600\">{category.count} products</p>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n\n {/* Featured Products */}\n <div>\n <div className=\"flex items-center justify-between mb-6\">\n <h2 className=\"text-2xl font-bold text-gray-900\">Featured Products</h2>\n <Button variant=\"outline\" onClick={onViewAllProducts}>\n View All\n </Button>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6\">\n {featuredProducts.map((product) => (\n <Card key={product.id} className=\"hover:shadow-lg transition-shadow cursor-pointer\">\n <div \n className=\"aspect-square bg-gray-100 rounded-t-lg overflow-hidden relative\"\n onClick={() => onProductClick(product)}\n >\n <img\n src={product.images[0]}\n alt={product.name}\n className=\"w-full h-full object-cover\"\n />\n {product.discount && (\n <Badge variant=\"danger\" className=\"absolute top-2 left-2\">\n -{product.discount}%\n </Badge>\n )}\n </div>\n <CardContent className=\"p-4\">\n <h3 className=\"font-medium text-gray-900 mb-2 line-clamp-2\">\n {product.name}\n </h3>\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 <div className=\"flex items-center justify-between\">\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 <Button\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n onAddToCart(product);\n }}\n >\n Add to Cart\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n\n {/* Vendor Spotlight */}\n <div>\n <h2 className=\"text-2xl font-bold text-gray-900 mb-6\">Top Sellers</h2>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n {vendors.map((vendor) => (\n <Card key={vendor.name} className=\"hover:shadow-lg transition-shadow\">\n <CardContent className=\"p-6 text-center\">\n <Avatar size=\"lg\" className=\"mx-auto mb-4\">\n <AvatarImage src={vendor.image} />\n <AvatarFallback>{vendor.name[0]}</AvatarFallback>\n </Avatar>\n <h3 className=\"font-semibold text-gray-900 mb-2\">{vendor.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\">{vendor.rating}</span>\n </div>\n <p className=\"text-sm text-gray-600 mb-4\">{vendor.products} products</p>\n <Button variant=\"outline\" size=\"sm\">\n Visit Store\n </Button>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n\n {/* Recently Viewed */}\n {recentlyViewed.length > 0 && (\n <div>\n <h2 className=\"text-2xl font-bold text-gray-900 mb-6\">Recently Viewed</h2>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6\">\n {recentlyViewed.map((product) => (\n <Card key={product.id} className=\"hover:shadow-lg transition-shadow cursor-pointer\">\n <div \n className=\"aspect-square bg-gray-100 rounded-t-lg overflow-hidden\"\n onClick={() => onProductClick(product)}\n >\n <img\n src={product.images[0]}\n alt={product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <CardContent className=\"p-4\">\n <h3 className=\"font-medium text-gray-900 mb-2 line-clamp-2\">\n {product.name}\n </h3>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-lg font-bold text-gray-900\">\n ${product.price.toFixed(2)}\n </span>\n <Button\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n onAddToCart(product);\n }}\n >\n <ShoppingCart className=\"h-4 w-4\" />\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n};"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ export interface MarketplaceHeaderProps {
3
+ searchQuery: string;
4
+ onSearchChange: (query: string) => void;
5
+ cartItemCount: number;
6
+ onCartClick: () => void;
7
+ onMenuToggle: () => void;
8
+ userRole?: 'buyer' | 'seller' | 'admin';
9
+ className?: string;
10
+ }
11
+ /**
12
+ * Marketplace header component with search, cart, and user controls
13
+ * Extracted from main marketplace component for reusability
14
+ */
15
+ export declare const MarketplaceHeader: React.FC<MarketplaceHeaderProps>;
@@ -0,0 +1,17 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { Menu, Package, Search, ShoppingCart, Bell } from 'lucide-react';
3
+ import { Button } from '../../Button/Button.js';
4
+ import { Input } from '../../Input/Input.js';
5
+ import { Badge } from '../../Badge/Badge.js';
6
+ import { Avatar, AvatarImage, AvatarFallback } from '../../Avatar/Avatar.js';
7
+
8
+ /**
9
+ * Marketplace header component with search, cart, and user controls
10
+ * Extracted from main marketplace component for reusability
11
+ */
12
+ const MarketplaceHeader = ({ searchQuery, onSearchChange, cartItemCount, onCartClick, onMenuToggle, userRole = 'buyer', className = '', }) => {
13
+ return (jsx("header", { className: `bg-white border-b border-gray-200 sticky top-0 z-40 ${className}`, children: jsx("div", { className: "px-6 py-4", children: jsxs("div", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center space-x-4", children: [jsx(Button, { variant: "ghost", size: "sm", onClick: onMenuToggle, className: "lg:hidden", children: jsx(Menu, { className: "h-5 w-5" }) }), jsxs("div", { className: "flex items-center space-x-3", children: [jsx("div", { className: "w-8 h-8 bg-primary-600 rounded-lg flex items-center justify-center", children: jsx(Package, { className: "h-5 w-5 text-white" }) }), jsxs("div", { children: [jsx("h1", { className: "font-bold text-xl text-gray-900", children: "MarketPlace" }), jsx("p", { className: "text-xs text-gray-500", children: "Your digital marketplace" })] })] })] }), jsx("div", { className: "flex-1 max-w-2xl mx-8", children: jsxs("div", { className: "relative", children: [jsx(Search, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400" }), jsx(Input, { placeholder: "Search products, brands, categories...", value: searchQuery, onChange: (e) => onSearchChange(e.target.value), className: "pl-10 bg-gray-50 border-gray-200 focus:bg-white" })] }) }), jsxs("div", { className: "flex items-center space-x-3", children: [jsx("div", { className: "relative", children: jsxs(Button, { variant: "ghost", size: "sm", onClick: onCartClick, className: "relative", children: [jsx(ShoppingCart, { className: "h-5 w-5" }), cartItemCount > 0 && (jsx(Badge, { variant: "danger", className: "absolute -top-1 -right-1 h-5 w-5 text-xs p-0 flex items-center justify-center", children: cartItemCount }))] }) }), jsxs(Button, { variant: "ghost", size: "sm", className: "relative", children: [jsx(Bell, { className: "h-5 w-5" }), jsx(Badge, { variant: "danger", className: "absolute -top-1 -right-1 h-4 w-4 text-xs p-0 flex items-center justify-center", children: "3" })] }), jsxs("div", { className: "flex items-center space-x-3 pl-3 border-l border-gray-200", children: [jsxs("div", { className: "hidden sm:block text-right", children: [jsx("p", { className: "text-sm font-medium text-gray-900", children: "John Doe" }), jsx("p", { className: "text-xs text-gray-500 capitalize", children: userRole })] }), jsxs(Avatar, { size: "sm", children: [jsx(AvatarImage, { src: "https://images.pexels.com/photos/774909/pexels-photo-774909.jpeg?auto=compress&cs=tinysrgb&w=64" }), jsx(AvatarFallback, { children: "JD" })] })] })] })] }) }) }));
14
+ };
15
+
16
+ export { MarketplaceHeader };
17
+ //# sourceMappingURL=MarketplaceHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarketplaceHeader.js","sources":["../../../../src/components/Marketplace/components/MarketplaceHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { Search, ShoppingCart, Bell, Menu, Package } from 'lucide-react';\nimport { Button } from '../../Button';\nimport { Input } from '../../Input';\nimport { Badge } from '../../Badge';\nimport { Avatar, AvatarImage, AvatarFallback } from '../../Avatar';\n\nexport interface MarketplaceHeaderProps {\n searchQuery: string;\n onSearchChange: (query: string) => void;\n cartItemCount: number;\n onCartClick: () => void;\n onMenuToggle: () => void;\n userRole?: 'buyer' | 'seller' | 'admin';\n className?: string;\n}\n\n/**\n * Marketplace header component with search, cart, and user controls\n * Extracted from main marketplace component for reusability\n */\nexport const MarketplaceHeader: React.FC<MarketplaceHeaderProps> = ({\n searchQuery,\n onSearchChange,\n cartItemCount,\n onCartClick,\n onMenuToggle,\n userRole = 'buyer',\n className = '',\n}) => {\n return (\n <header className={`bg-white border-b border-gray-200 sticky top-0 z-40 ${className}`}>\n <div className=\"px-6 py-4\">\n <div className=\"flex items-center justify-between\">\n {/* Left Section */}\n <div className=\"flex items-center space-x-4\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onMenuToggle}\n className=\"lg:hidden\"\n >\n <Menu className=\"h-5 w-5\" />\n </Button>\n \n <div className=\"flex items-center space-x-3\">\n <div className=\"w-8 h-8 bg-primary-600 rounded-lg flex items-center justify-center\">\n <Package className=\"h-5 w-5 text-white\" />\n </div>\n <div>\n <h1 className=\"font-bold text-xl text-gray-900\">MarketPlace</h1>\n <p className=\"text-xs text-gray-500\">Your digital marketplace</p>\n </div>\n </div>\n </div>\n\n {/* Center Section - Search */}\n <div className=\"flex-1 max-w-2xl mx-8\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400\" />\n <Input\n placeholder=\"Search products, brands, categories...\"\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n className=\"pl-10 bg-gray-50 border-gray-200 focus:bg-white\"\n />\n </div>\n </div>\n\n {/* Right Section */}\n <div className=\"flex items-center space-x-3\">\n {/* Cart */}\n <div className=\"relative\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onCartClick}\n className=\"relative\"\n >\n <ShoppingCart className=\"h-5 w-5\" />\n {cartItemCount > 0 && (\n <Badge \n variant=\"danger\" \n className=\"absolute -top-1 -right-1 h-5 w-5 text-xs p-0 flex items-center justify-center\"\n >\n {cartItemCount}\n </Badge>\n )}\n </Button>\n </div>\n\n {/* Notifications */}\n <Button variant=\"ghost\" size=\"sm\" className=\"relative\">\n <Bell className=\"h-5 w-5\" />\n <Badge \n variant=\"danger\" \n className=\"absolute -top-1 -right-1 h-4 w-4 text-xs p-0 flex items-center justify-center\"\n >\n 3\n </Badge>\n </Button>\n\n {/* User Profile */}\n <div className=\"flex items-center space-x-3 pl-3 border-l border-gray-200\">\n <div className=\"hidden sm:block text-right\">\n <p className=\"text-sm font-medium text-gray-900\">John Doe</p>\n <p className=\"text-xs text-gray-500 capitalize\">{userRole}</p>\n </div>\n <Avatar size=\"sm\">\n <AvatarImage src=\"https://images.pexels.com/photos/774909/pexels-photo-774909.jpeg?auto=compress&cs=tinysrgb&w=64\" />\n <AvatarFallback>JD</AvatarFallback>\n </Avatar>\n </div>\n </div>\n </div>\n </div>\n </header>\n );\n};"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import type { Product } from '../types';
3
+ export interface ProductCardProps {
4
+ product: Product;
5
+ onProductClick?: (product: Product) => void;
6
+ onAddToCart?: (product: Product) => void;
7
+ onQuickView?: (product: Product) => void;
8
+ onToggleWishlist?: (productId: string) => void;
9
+ isWishlisted?: boolean;
10
+ showQuickActions?: boolean;
11
+ className?: string;
12
+ }
13
+ /**
14
+ * Reusable product card component for displaying product information
15
+ * Used across different marketplace views (grid, list, featured, etc.)
16
+ */
17
+ export declare const ProductCard: React.FC<ProductCardProps>;