@beyondcorp/beyond-ui 1.2.51 → 1.2.55

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 (117) hide show
  1. package/dist/components/Blog/AllBlogsView.d.ts +8 -0
  2. package/dist/components/Blog/AllBlogsView.js +70 -0
  3. package/dist/components/Blog/AllBlogsView.js.map +1 -0
  4. package/dist/components/Blog/BlogCommentSection.d.ts +7 -0
  5. package/dist/components/Blog/BlogCommentSection.js +66 -0
  6. package/dist/components/Blog/BlogCommentSection.js.map +1 -0
  7. package/dist/components/Blog/BlogLayout.d.ts +11 -0
  8. package/dist/components/Blog/BlogLayout.js +29 -0
  9. package/dist/components/Blog/BlogLayout.js.map +1 -0
  10. package/dist/components/Blog/BlogShowcase.d.ts +2 -0
  11. package/dist/components/Blog/BlogShowcase.js +74 -0
  12. package/dist/components/Blog/BlogShowcase.js.map +1 -0
  13. package/dist/components/Blog/BlogSidebar.d.ts +10 -0
  14. package/dist/components/Blog/BlogSidebar.js +47 -0
  15. package/dist/components/Blog/BlogSidebar.js.map +1 -0
  16. package/dist/components/Blog/SingleBlogView.d.ts +8 -0
  17. package/dist/components/Blog/SingleBlogView.js +78 -0
  18. package/dist/components/Blog/SingleBlogView.js.map +1 -0
  19. package/dist/components/Blog/data/sampleData.d.ts +4 -0
  20. package/dist/components/Blog/data/sampleData.js +388 -0
  21. package/dist/components/Blog/data/sampleData.js.map +1 -0
  22. package/dist/components/Blog/hooks/index.d.ts +3 -0
  23. package/dist/components/Blog/hooks/useBlog.d.ts +22 -0
  24. package/dist/components/Blog/hooks/useBlog.js +148 -0
  25. package/dist/components/Blog/hooks/useBlog.js.map +1 -0
  26. package/dist/components/Blog/hooks/useBlogNavigation.d.ts +12 -0
  27. package/dist/components/Blog/hooks/useBlogNavigation.js +75 -0
  28. package/dist/components/Blog/hooks/useBlogNavigation.js.map +1 -0
  29. package/dist/components/Blog/hooks/useComments.d.ts +20 -0
  30. package/dist/components/Blog/hooks/useComments.js +108 -0
  31. package/dist/components/Blog/hooks/useComments.js.map +1 -0
  32. package/dist/components/Blog/index.d.ts +8 -0
  33. package/dist/components/Blog/types.d.ts +82 -0
  34. package/dist/components/CodeHighlight/CodeHighlight.d.ts +7 -0
  35. package/dist/components/CodeHighlight/CodeHighlight.js +18 -0
  36. package/dist/components/CodeHighlight/CodeHighlight.js.map +1 -0
  37. package/dist/components/CodeHighlight/index.d.ts +1 -0
  38. package/dist/components/Marketplace/AllProductsView.d.ts +6 -1
  39. package/dist/components/Marketplace/AllProductsView.js +42 -65
  40. package/dist/components/Marketplace/AllProductsView.js.map +1 -1
  41. package/dist/components/Marketplace/CheckoutCompact.d.ts +1 -0
  42. package/dist/components/Marketplace/CheckoutCompact.js +3 -3
  43. package/dist/components/Marketplace/CheckoutCompact.js.map +1 -1
  44. package/dist/components/Marketplace/CheckoutComponent.js +1 -1
  45. package/dist/components/Marketplace/CheckoutComponent.js.map +1 -1
  46. package/dist/components/Marketplace/MarketplaceComponent.js +31 -2
  47. package/dist/components/Marketplace/MarketplaceComponent.js.map +1 -1
  48. package/dist/components/Marketplace/MarketplaceSidebar.js +32 -32
  49. package/dist/components/Marketplace/MarketplaceSidebar.js.map +1 -1
  50. package/dist/components/Marketplace/SingleProductView.js +3 -0
  51. package/dist/components/Marketplace/SingleProductView.js.map +1 -1
  52. package/dist/components/Marketplace/components/MarketplaceControls.d.ts +17 -0
  53. package/dist/components/Marketplace/components/MarketplaceControls.js +22 -0
  54. package/dist/components/Marketplace/components/MarketplaceControls.js.map +1 -0
  55. package/dist/components/Marketplace/components/MarketplaceDashboard.d.ts +3 -0
  56. package/dist/components/Marketplace/components/MarketplaceDashboard.js +20 -10
  57. package/dist/components/Marketplace/components/MarketplaceDashboard.js.map +1 -1
  58. package/dist/components/Marketplace/components/MarketplaceHeader.js +2 -3
  59. package/dist/components/Marketplace/components/MarketplaceHeader.js.map +1 -1
  60. package/dist/components/Marketplace/components/ProductCard.js +9 -2
  61. package/dist/components/Marketplace/components/ProductCard.js.map +1 -1
  62. package/dist/components/Marketplace/hooks/useScrollToTop.d.ts +10 -0
  63. package/dist/components/Marketplace/hooks/useScrollToTop.js +22 -0
  64. package/dist/components/Marketplace/hooks/useScrollToTop.js.map +1 -0
  65. package/dist/index.d.ts +2 -4
  66. package/dist/index.js +10 -4
  67. package/dist/styles.css +1 -1
  68. package/package.json +6 -1
  69. package/dist/components/AllProductsView/AllProductsView.d.ts +0 -14
  70. package/dist/components/AllProductsView/AllProductsView.js +0 -61
  71. package/dist/components/AllProductsView/AllProductsView.js.map +0 -1
  72. package/dist/components/AllProductsView/CardGroup.d.ts +0 -6
  73. package/dist/components/AllProductsView/CardGroup.js +0 -11
  74. package/dist/components/AllProductsView/CardGroup.js.map +0 -1
  75. package/dist/components/AllProductsView/ProductCard.d.ts +0 -11
  76. package/dist/components/AllProductsView/ProductCard.js +0 -13
  77. package/dist/components/AllProductsView/ProductCard.js.map +0 -1
  78. package/dist/components/AllProductsView/index.d.ts +0 -2
  79. package/dist/components/BlogFeedView/BlogFeedView.d.ts +0 -22
  80. package/dist/components/BlogFeedView/BlogFeedView.js +0 -29
  81. package/dist/components/BlogFeedView/BlogFeedView.js.map +0 -1
  82. package/dist/components/BlogFeedView/index.d.ts +0 -1
  83. package/dist/components/BlogLayout/BlogLayout.d.ts +0 -13
  84. package/dist/components/BlogLayout/BlogLayout.js +0 -20
  85. package/dist/components/BlogLayout/BlogLayout.js.map +0 -1
  86. package/dist/components/BlogLayout/index.d.ts +0 -1
  87. package/dist/components/BlogSidebar/BlogSidebar.d.ts +0 -19
  88. package/dist/components/BlogSidebar/BlogSidebar.js +0 -10
  89. package/dist/components/BlogSidebar/BlogSidebar.js.map +0 -1
  90. package/dist/components/BlogSidebar/index.d.ts +0 -1
  91. package/dist/components/Checkout/CheckoutPage.d.ts +0 -16
  92. package/dist/components/Checkout/CheckoutPage.js +0 -44
  93. package/dist/components/Checkout/CheckoutPage.js.map +0 -1
  94. package/dist/components/Checkout/CheckoutSidebar.d.ts +0 -15
  95. package/dist/components/Checkout/CheckoutSidebar.js +0 -25
  96. package/dist/components/Checkout/CheckoutSidebar.js.map +0 -1
  97. package/dist/components/Checkout/index.d.ts +0 -3
  98. package/dist/components/Checkout/types.d.ts +0 -21
  99. package/dist/components/CommerceSidebar/CommerceSidebar.d.ts +0 -20
  100. package/dist/components/CommerceSidebar/CommerceSidebar.js +0 -14
  101. package/dist/components/CommerceSidebar/CommerceSidebar.js.map +0 -1
  102. package/dist/components/CommerceSidebar/index.d.ts +0 -1
  103. package/dist/components/MarketplaceLayout/MarketplaceLayout.d.ts +0 -17
  104. package/dist/components/MarketplaceLayout/MarketplaceLayout.js +0 -22
  105. package/dist/components/MarketplaceLayout/MarketplaceLayout.js.map +0 -1
  106. package/dist/components/MarketplaceLayout/index.d.ts +0 -1
  107. package/dist/components/ProfileManagement/ProfileManagementPage.d.ts +0 -16
  108. package/dist/components/ProfileManagement/ProfileManagementPage.js +0 -65
  109. package/dist/components/ProfileManagement/ProfileManagementPage.js.map +0 -1
  110. package/dist/components/SingleBlogView/SingleBlogView.d.ts +0 -26
  111. package/dist/components/SingleBlogView/SingleBlogView.js +0 -17
  112. package/dist/components/SingleBlogView/SingleBlogView.js.map +0 -1
  113. package/dist/components/SingleBlogView/index.d.ts +0 -1
  114. package/dist/components/SingleProductView/SingleProductView.d.ts +0 -31
  115. package/dist/components/SingleProductView/SingleProductView.js +0 -34
  116. package/dist/components/SingleProductView/SingleProductView.js.map +0 -1
  117. package/dist/components/SingleProductView/index.d.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CheckoutComponent.js","sources":["../../../src/components/Marketplace/CheckoutComponent.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { \n CreditCard, \n Truck, \n Shield, \n Check, \n ChevronRight,\n MapPin,\n User,\n Mail,\n Phone,\n Tag,\n Lock\n} from 'lucide-react';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Card, CardHeader, CardTitle, CardContent } from '../Card';\nimport { Badge } from '../Badge';\nimport { Checkbox } from '../Checkbox';\nimport { showToast } from '../Toast';\nimport type { CartItem, ShippingAddress, PaymentMethod, Order } from './types';\nimport { sampleProducts } from './data/sampleData';\n\ninterface CheckoutComponentProps {\n cartItems?: CartItem[];\n onOrderComplete?: (order: Order) => void;\n}\n\nconst sampleCartItems: CartItem[] = [\n {\n product: sampleProducts[0],\n quantity: 1,\n },\n {\n product: sampleProducts[1],\n quantity: 2,\n },\n];\n\nexport const CheckoutComponent: React.FC<CheckoutComponentProps> = ({\n cartItems = sampleCartItems,\n onOrderComplete,\n}) => {\n const [currentStep, setCurrentStep] = useState(1);\n const [shippingAddress, setShippingAddress] = useState<Partial<ShippingAddress>>({});\n const [paymentMethod, setPaymentMethod] = useState<Partial<PaymentMethod>>({});\n const [couponCode, setCouponCode] = useState('');\n const [appliedCoupon, setAppliedCoupon] = useState<string | null>(null);\n const [isProcessing, setIsProcessing] = useState(false);\n const [errors, setErrors] = useState<Record<string, string>>({});\n\n // Calculate totals\n const subtotal = cartItems.reduce((sum, item) => sum + (item.product.price * item.quantity), 0);\n const shipping = subtotal > 100 ? 0 : 9.99;\n const tax = subtotal * 0.08; // 8% tax\n const discount = appliedCoupon ? subtotal * 0.1 : 0; // 10% discount\n const total = subtotal + shipping + tax - discount;\n\n const steps = [\n { id: 1, name: 'Shipping', icon: Truck },\n { id: 2, name: 'Payment', icon: CreditCard },\n { id: 3, name: 'Review', icon: Check },\n ];\n\n const validateStep = (step: number): boolean => {\n const newErrors: Record<string, string> = {};\n\n if (step === 1) {\n // Validate shipping address\n if (!shippingAddress.firstName) newErrors.firstName = 'First name is required';\n if (!shippingAddress.lastName) newErrors.lastName = 'Last name is required';\n if (!shippingAddress.email) newErrors.email = 'Email is required';\n if (!shippingAddress.address) newErrors.address = 'Address is required';\n if (!shippingAddress.city) newErrors.city = 'City is required';\n if (!shippingAddress.zipCode) newErrors.zipCode = 'ZIP code is required';\n } else if (step === 2) {\n // Validate payment method\n if (!paymentMethod.type) newErrors.paymentType = 'Payment method is required';\n if (paymentMethod.type === 'card') {\n if (!paymentMethod.name) newErrors.cardName = 'Cardholder name is required';\n // Add more card validation as needed\n }\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleNextStep = () => {\n if (validateStep(currentStep)) {\n setCurrentStep(prev => Math.min(3, prev + 1));\n }\n };\n\n const handlePrevStep = () => {\n setCurrentStep(prev => Math.max(1, prev - 1));\n };\n\n const handleApplyCoupon = () => {\n if (couponCode.toLowerCase() === 'save10') {\n setAppliedCoupon(couponCode);\n showToast.success('Coupon applied! 10% discount added.');\n } else {\n showToast.error('Invalid coupon code');\n }\n };\n\n const handlePlaceOrder = async () => {\n if (!validateStep(3)) return;\n\n setIsProcessing(true);\n \n // Simulate order processing\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n const order: Order = {\n id: `ORD-${Date.now()}`,\n items: cartItems,\n shippingAddress: shippingAddress as ShippingAddress,\n paymentMethod: paymentMethod as PaymentMethod,\n subtotal,\n shipping,\n tax,\n discount,\n total,\n status: 'pending',\n createdAt: new Date().toISOString(),\n };\n\n onOrderComplete?.(order);\n showToast.success('Order placed successfully!');\n setIsProcessing(false);\n };\n\n const renderShippingStep = () => (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">Shipping Information</h2>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n First Name *\n </label>\n <Input\n value={shippingAddress.firstName || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, firstName: e.target.value }))}\n className={errors.firstName ? 'border-red-500' : ''}\n />\n {errors.firstName && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.firstName}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Last Name *\n </label>\n <Input\n value={shippingAddress.lastName || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, lastName: e.target.value }))}\n className={errors.lastName ? 'border-red-500' : ''}\n />\n {errors.lastName && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.lastName}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Email *\n </label>\n <Input\n type=\"email\"\n value={shippingAddress.email || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, email: e.target.value }))}\n className={errors.email ? 'border-red-500' : ''}\n />\n {errors.email && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.email}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Phone\n </label>\n <Input\n type=\"tel\"\n value={shippingAddress.phone || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, phone: e.target.value }))}\n />\n </div>\n <div className=\"md:col-span-2\">\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Address *\n </label>\n <Input\n value={shippingAddress.address || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, address: e.target.value }))}\n className={errors.address ? 'border-red-500' : ''}\n />\n {errors.address && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.address}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n City *\n </label>\n <Input\n value={shippingAddress.city || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, city: e.target.value }))}\n className={errors.city ? 'border-red-500' : ''}\n />\n {errors.city && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.city}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n State\n </label>\n <Input\n value={shippingAddress.state || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, state: e.target.value }))}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n ZIP Code *\n </label>\n <Input\n value={shippingAddress.zipCode || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, zipCode: e.target.value }))}\n className={errors.zipCode ? 'border-red-500' : ''}\n />\n {errors.zipCode && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.zipCode}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Country\n </label>\n <select\n value={shippingAddress.country || 'US'}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, country: e.target.value }))}\n className=\"w-full border border-gray-300 rounded-lg px-3 py-2\"\n >\n <option value=\"US\">United States</option>\n <option value=\"CA\">Canada</option>\n <option value=\"UK\">United Kingdom</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n );\n\n const renderPaymentStep = () => (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">Payment Method</h2>\n \n {/* Payment Method Selection */}\n <div className=\"space-y-3 mb-6\">\n {[\n { id: 'card', name: 'Credit/Debit Card', icon: CreditCard },\n { id: 'paypal', name: 'PayPal', icon: Shield },\n ].map((method) => (\n <label\n key={method.id}\n className={`flex items-center p-4 border rounded-lg cursor-pointer transition-colors ${\n paymentMethod.type === method.id\n ? 'border-primary-500 bg-primary-50'\n : 'border-gray-200 hover:border-gray-300'\n }`}\n >\n <input\n type=\"radio\"\n name=\"paymentMethod\"\n value={method.id}\n checked={paymentMethod.type === method.id}\n onChange={(e) => setPaymentMethod(prev => ({ ...prev, type: e.target.value as any }))}\n className=\"sr-only\"\n />\n <method.icon className=\"h-5 w-5 text-gray-600 mr-3\" />\n <span className=\"font-medium text-gray-900\">{method.name}</span>\n </label>\n ))}\n </div>\n\n {/* Card Details */}\n {paymentMethod.type === 'card' && (\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Cardholder Name *\n </label>\n <Input\n value={paymentMethod.name || ''}\n onChange={(e) => setPaymentMethod(prev => ({ ...prev, name: e.target.value }))}\n className={errors.cardName ? 'border-red-500' : ''}\n />\n {errors.cardName && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.cardName}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Card Number *\n </label>\n <Input\n placeholder=\"1234 5678 9012 3456\"\n onChange={(e) => setPaymentMethod(prev => ({ ...prev, last4: e.target.value.slice(-4) }))}\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Expiry Date *\n </label>\n <Input\n placeholder=\"MM/YY\"\n onChange={(e) => setPaymentMethod(prev => ({ ...prev, expiryDate: e.target.value }))}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n CVV *\n </label>\n <Input placeholder=\"123\" />\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n\n const renderReviewStep = () => (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">Order Review</h2>\n \n {/* Shipping Address Review */}\n <Card className=\"mb-6\">\n <CardHeader>\n <CardTitle className=\"flex items-center\">\n <MapPin className=\"h-5 w-5 mr-2\" />\n Shipping Address\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-gray-600\">\n <p>{shippingAddress.firstName} {shippingAddress.lastName}</p>\n <p>{shippingAddress.address}</p>\n <p>{shippingAddress.city}, {shippingAddress.state} {shippingAddress.zipCode}</p>\n <p>{shippingAddress.email}</p>\n </div>\n </CardContent>\n </Card>\n\n {/* Payment Method Review */}\n <Card className=\"mb-6\">\n <CardHeader>\n <CardTitle className=\"flex items-center\">\n <CreditCard className=\"h-5 w-5 mr-2\" />\n Payment Method\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-gray-600\">\n {paymentMethod.type === 'card' ? (\n <p>Credit Card ending in {paymentMethod.last4}</p>\n ) : (\n <p>PayPal</p>\n )}\n </div>\n </CardContent>\n </Card>\n\n {/* Order Items Review */}\n <Card>\n <CardHeader>\n <CardTitle>Order Items</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {cartItems.map((item) => (\n <div key={item.product.id} className=\"flex items-center space-x-4\">\n <img\n src={item.product.images[0]}\n alt={item.product.name}\n className=\"w-16 h-16 object-cover rounded-lg\"\n />\n <div className=\"flex-1\">\n <h4 className=\"font-medium text-gray-900\">{item.product.name}</h4>\n <p className=\"text-gray-600\">Quantity: {item.quantity}</p>\n </div>\n <div className=\"text-right\">\n <p className=\"font-medium text-gray-900\">\n ${(item.product.price * item.quantity).toFixed(2)}\n </p>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n );\n\n return (\n <div className=\"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8\">\n {/* Progress Indicator */}\n <div className=\"mb-8\">\n <div className=\"flex items-center justify-center\">\n {steps.map((step, index) => (\n <React.Fragment key={step.id}>\n <div className=\"flex items-center\">\n <div\n className={`flex items-center justify-center w-10 h-10 rounded-full border-2 ${\n currentStep >= step.id\n ? 'bg-primary-600 border-primary-600 text-white'\n : 'border-gray-300 text-gray-400'\n }`}\n >\n {currentStep > step.id ? (\n <Check className=\"h-5 w-5\" />\n ) : (\n <step.icon className=\"h-5 w-5\" />\n )}\n </div>\n <span\n className={`ml-2 text-sm font-medium ${\n currentStep >= step.id ? 'text-primary-600' : 'text-gray-400'\n }`}\n >\n {step.name}\n </span>\n </div>\n {index < steps.length - 1 && (\n <ChevronRight className=\"h-5 w-5 text-gray-400 mx-4\" />\n )}\n </React.Fragment>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-8\">\n {/* Main Content */}\n <div className=\"lg:col-span-2\">\n <Card>\n <CardContent className=\"p-8\">\n {currentStep === 1 && renderShippingStep()}\n {currentStep === 2 && renderPaymentStep()}\n {currentStep === 3 && renderReviewStep()}\n\n {/* Navigation Buttons */}\n <div className=\"flex justify-between mt-8 pt-6 border-t border-gray-200\">\n <Button\n variant=\"outline\"\n onClick={handlePrevStep}\n disabled={currentStep === 1}\n >\n Previous\n </Button>\n \n {currentStep < 3 ? (\n <Button variant=\"primary\" onClick={handleNextStep}>\n Next\n </Button>\n ) : (\n <Button\n variant=\"primary\"\n onClick={handlePlaceOrder}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : 'Place Order'}\n </Button>\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Order Summary */}\n <div>\n <Card className=\"sticky top-4\">\n <CardHeader>\n <CardTitle>Order Summary</CardTitle>\n </CardHeader>\n <CardContent>\n {/* Cart Items */}\n <div className=\"space-y-3 mb-4\">\n {cartItems.map((item) => (\n <div key={item.product.id} className=\"flex items-center space-x-3\">\n <img\n src={item.product.images[0]}\n alt={item.product.name}\n className=\"w-12 h-12 object-cover rounded\"\n />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 truncate\">\n {item.product.name}\n </p>\n <p className=\"text-sm text-gray-600\">Qty: {item.quantity}</p>\n </div>\n <p className=\"text-sm font-medium text-gray-900\">\n ${(item.product.price * item.quantity).toFixed(2)}\n </p>\n </div>\n ))}\n </div>\n\n {/* Coupon Code */}\n <div className=\"mb-4 pb-4 border-b border-gray-200\">\n <div className=\"flex space-x-2\">\n <Input\n placeholder=\"Coupon code\"\n value={couponCode}\n onChange={(e) => setCouponCode(e.target.value)}\n disabled={!!appliedCoupon}\n />\n <Button\n variant=\"outline\"\n onClick={handleApplyCoupon}\n disabled={!!appliedCoupon || !couponCode}\n >\n Apply\n </Button>\n </div>\n {appliedCoupon && (\n <div className=\"flex items-center mt-2\">\n <Tag className=\"h-4 w-4 text-green-600 mr-1\" />\n <span className=\"text-sm text-green-600\">\n Coupon \"{appliedCoupon}\" applied\n </span>\n </div>\n )}\n </div>\n\n {/* Order Totals */}\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span className=\"text-gray-900\">${subtotal.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span className=\"text-gray-900\">\n {shipping === 0 ? 'Free' : `$${shipping.toFixed(2)}`}\n </span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Tax</span>\n <span className=\"text-gray-900\">${tax.toFixed(2)}</span>\n </div>\n {discount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Discount</span>\n <span className=\"text-green-600\">-${discount.toFixed(2)}</span>\n </div>\n )}\n <div className=\"flex justify-between text-lg font-semibold pt-2 border-t border-gray-200\">\n <span className=\"text-gray-900\">Total</span>\n <span className=\"text-gray-900\">${total.toFixed(2)}</span>\n </div>\n </div>\n\n {/* Security Badge */}\n <div className=\"flex items-center justify-center mt-6 pt-4 border-t border-gray-200\">\n <Lock className=\"h-4 w-4 text-gray-400 mr-2\" />\n <span className=\"text-xs text-gray-600\">Secure checkout</span>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n};"],"names":["_jsx","_jsxs","React"],"mappings":"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"}
1
+ {"version":3,"file":"CheckoutComponent.js","sources":["../../../src/components/Marketplace/CheckoutComponent.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { \n CreditCard, \n Truck, \n Shield, \n Check, \n ChevronRight,\n MapPin,\n User,\n Mail,\n Phone,\n Tag,\n Lock\n} from 'lucide-react';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Card, CardHeader, CardTitle, CardContent } from '../Card';\nimport { Badge } from '../Badge';\nimport { Checkbox } from '../Checkbox';\nimport { showToast } from '../Toast';\nimport type { CartItem, ShippingAddress, PaymentMethod, Order } from './types';\nimport { sampleProducts } from './data/sampleData';\n\ninterface CheckoutComponentProps {\n cartItems?: CartItem[];\n onOrderComplete?: (order: Order) => void;\n}\n\nconst sampleCartItems: CartItem[] = [\n {\n product: sampleProducts[0],\n quantity: 1,\n },\n {\n product: sampleProducts[1],\n quantity: 2,\n },\n];\n\nexport const CheckoutComponent: React.FC<CheckoutComponentProps> = ({\n cartItems = sampleCartItems,\n onOrderComplete,\n}) => {\n const [currentStep, setCurrentStep] = useState(1);\n const [shippingAddress, setShippingAddress] = useState<Partial<ShippingAddress>>({});\n const [paymentMethod, setPaymentMethod] = useState<Partial<PaymentMethod>>({});\n const [couponCode, setCouponCode] = useState('');\n const [appliedCoupon, setAppliedCoupon] = useState<string | null>(null);\n const [isProcessing, setIsProcessing] = useState(false);\n const [errors, setErrors] = useState<Record<string, string>>({});\n\n // Calculate totals\n const subtotal = cartItems.reduce((sum, item) => sum + (item.product.price * item.quantity), 0);\n const shipping = subtotal > 100 ? 0 : 9.99;\n const tax = subtotal * 0.08; // 8% tax\n const discount = appliedCoupon ? subtotal * 0.1 : 0; // 10% discount\n const total = subtotal + shipping + tax - discount;\n\n const steps = [\n { id: 1, name: 'Shipping', icon: Truck },\n { id: 2, name: 'Payment', icon: CreditCard },\n { id: 3, name: 'Review', icon: Check },\n ];\n\n const validateStep = (step: number): boolean => {\n const newErrors: Record<string, string> = {};\n\n if (step === 1) {\n // Validate shipping address\n if (!shippingAddress.firstName) newErrors.firstName = 'First name is required';\n if (!shippingAddress.lastName) newErrors.lastName = 'Last name is required';\n if (!shippingAddress.email) newErrors.email = 'Email is required';\n if (!shippingAddress.address) newErrors.address = 'Address is required';\n if (!shippingAddress.city) newErrors.city = 'City is required';\n if (!shippingAddress.zipCode) newErrors.zipCode = 'ZIP code is required';\n } else if (step === 2) {\n // Validate payment method\n if (!paymentMethod.type) newErrors.paymentType = 'Payment method is required';\n if (paymentMethod.type === 'card') {\n if (!paymentMethod.name) newErrors.cardName = 'Cardholder name is required';\n // Add more card validation as needed\n }\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleNextStep = () => {\n if (validateStep(currentStep)) {\n setCurrentStep(prev => Math.min(3, prev + 1));\n }\n };\n\n const handlePrevStep = () => {\n setCurrentStep(prev => Math.max(1, prev - 1));\n };\n\n const handleApplyCoupon = () => {\n if (couponCode.toLowerCase() === 'save10') {\n setAppliedCoupon(couponCode);\n showToast.success('Coupon applied! 10% discount added.');\n } else {\n showToast.error('Invalid coupon code');\n }\n };\n\n const handlePlaceOrder = async () => {\n if (!validateStep(3)) return;\n\n setIsProcessing(true);\n \n // Simulate order processing\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n const order: Order = {\n id: `ORD-${Date.now()}`,\n items: cartItems,\n shippingAddress: shippingAddress as ShippingAddress,\n paymentMethod: paymentMethod as PaymentMethod,\n subtotal,\n shipping,\n tax,\n discount,\n total,\n status: 'pending',\n createdAt: new Date().toISOString(),\n };\n\n onOrderComplete?.(order);\n showToast.success('Order placed successfully!');\n setIsProcessing(false);\n };\n\n const renderShippingStep = () => (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">Shipping Information</h2>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n First Name *\n </label>\n <Input\n value={shippingAddress.firstName || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, firstName: e.target.value }))}\n className={errors.firstName ? 'border-red-500' : ''}\n />\n {errors.firstName && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.firstName}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Last Name *\n </label>\n <Input\n value={shippingAddress.lastName || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, lastName: e.target.value }))}\n className={errors.lastName ? 'border-red-500' : ''}\n />\n {errors.lastName && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.lastName}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Email *\n </label>\n <Input\n type=\"email\"\n value={shippingAddress.email || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, email: e.target.value }))}\n className={errors.email ? 'border-red-500' : ''}\n />\n {errors.email && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.email}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Phone\n </label>\n <Input\n type=\"tel\"\n value={shippingAddress.phone || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, phone: e.target.value }))}\n />\n </div>\n <div className=\"md:col-span-2\">\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Address *\n </label>\n <Input\n value={shippingAddress.address || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, address: e.target.value }))}\n className={errors.address ? 'border-red-500' : ''}\n />\n {errors.address && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.address}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n City *\n </label>\n <Input\n value={shippingAddress.city || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, city: e.target.value }))}\n className={errors.city ? 'border-red-500' : ''}\n />\n {errors.city && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.city}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n State\n </label>\n <Input\n value={shippingAddress.state || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, state: e.target.value }))}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n ZIP Code *\n </label>\n <Input\n value={shippingAddress.zipCode || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, zipCode: e.target.value }))}\n className={errors.zipCode ? 'border-red-500' : ''}\n />\n {errors.zipCode && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.zipCode}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Country\n </label>\n <select\n value={shippingAddress.country || 'US'}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, country: e.target.value }))}\n className=\"w-full border border-gray-300 rounded-lg px-3 py-2\"\n >\n <option value=\"US\">United States</option>\n <option value=\"CA\">Canada</option>\n <option value=\"UK\">United Kingdom</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n );\n\n const renderPaymentStep = () => (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">Payment Method</h2>\n \n {/* Payment Method Selection */}\n <div className=\"space-y-3 mb-6\">\n {[\n { id: 'card', name: 'Credit/Debit Card', icon: CreditCard },\n { id: 'paypal', name: 'PayPal', icon: Shield },\n ].map((method) => (\n <label\n key={method.id}\n className={`flex items-center p-4 border rounded-lg cursor-pointer transition-colors ${\n paymentMethod.type === method.id\n ? 'border-primary-500 bg-primary-50'\n : 'border-gray-200 hover:border-gray-300'\n }`}\n >\n <input\n type=\"radio\"\n name=\"paymentMethod\"\n value={method.id}\n checked={paymentMethod.type === method.id}\n onChange={(e) => setPaymentMethod(prev => ({ ...prev, type: e.target.value as any }))}\n className=\"sr-only\"\n />\n <method.icon className=\"h-5 w-5 text-gray-600 mr-3\" />\n <span className=\"font-medium text-gray-900\">{method.name}</span>\n </label>\n ))}\n </div>\n\n {/* Card Details */}\n {paymentMethod.type === 'card' && (\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Cardholder Name *\n </label>\n <Input\n value={paymentMethod.name || ''}\n onChange={(e) => setPaymentMethod(prev => ({ ...prev, name: e.target.value }))}\n className={errors.cardName ? 'border-red-500' : ''}\n />\n {errors.cardName && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.cardName}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Card Number *\n </label>\n <Input\n placeholder=\"1234 5678 9012 3456\"\n onChange={(e) => setPaymentMethod(prev => ({ ...prev, last4: e.target.value.slice(-4) }))}\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Expiry Date *\n </label>\n <Input\n placeholder=\"MM/YY\"\n onChange={(e) => setPaymentMethod(prev => ({ ...prev, expiryDate: e.target.value }))}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n CVV *\n </label>\n <Input placeholder=\"123\" />\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n\n const renderReviewStep = () => (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">Order Review</h2>\n \n {/* Shipping Address Review */}\n <Card className=\"mb-6\">\n <CardHeader>\n <CardTitle className=\"flex items-center\">\n <MapPin className=\"h-5 w-5 mr-2\" />\n Shipping Address\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-gray-600\">\n <p>{shippingAddress.firstName} {shippingAddress.lastName}</p>\n <p>{shippingAddress.address}</p>\n <p>{shippingAddress.city}, {shippingAddress.state} {shippingAddress.zipCode}</p>\n <p>{shippingAddress.email}</p>\n </div>\n </CardContent>\n </Card>\n\n {/* Payment Method Review */}\n <Card className=\"mb-6\">\n <CardHeader>\n <CardTitle className=\"flex items-center\">\n <CreditCard className=\"h-5 w-5 mr-2\" />\n Payment Method\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-gray-600\">\n {paymentMethod.type === 'card' ? (\n <p>Credit Card ending in {paymentMethod.last4}</p>\n ) : (\n <p>PayPal</p>\n )}\n </div>\n </CardContent>\n </Card>\n\n {/* Order Items Review */}\n <Card>\n <CardHeader>\n <CardTitle>Order Items</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {cartItems.map((item) => (\n <div key={item.product.id} className=\"flex items-center space-x-4\">\n <img\n src={item.product.images[0]}\n alt={item.product.name}\n className=\"w-16 h-16 object-cover rounded-lg\"\n />\n <div className=\"flex-1\">\n <h4 className=\"font-medium text-gray-900\">{item.product.name}</h4>\n <p className=\"text-gray-600\">Quantity: {item.quantity}</p>\n </div>\n <div className=\"text-right\">\n <p className=\"font-medium text-gray-900\">\n ${(item.product.price * item.quantity).toFixed(2)}\n </p>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n );\n\n return (\n <div className=\"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8\">\n {/* Progress Indicator */}\n <div className=\"mb-8\">\n <div className=\"flex items-center justify-center\">\n {steps.map((step, index) => (\n <React.Fragment key={step.id}>\n <div className=\"flex items-center\">\n <div\n className={`flex items-center justify-center w-10 h-10 rounded-full border-2 ${\n currentStep >= step.id\n ? 'bg-primary-600 border-primary-600 text-white'\n : 'border-gray-300 text-gray-400'\n }`}\n >\n {currentStep > step.id ? (\n <Check className=\"h-5 w-5\" />\n ) : (\n <step.icon className=\"h-5 w-5\" />\n )}\n </div>\n <span\n className={`ml-2 text-sm font-medium ${\n currentStep >= step.id ? 'text-primary-600' : 'text-gray-400'\n }`}\n >\n {step.name}\n </span>\n </div>\n {index < steps.length - 1 && (\n <ChevronRight className=\"h-5 w-5 text-gray-400 mx-4\" />\n )}\n </React.Fragment>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-8\">\n {/* Main Content */}\n <div className=\"lg:col-span-2\">\n <Card className=\"flex flex-col h-[80vh]\">\n <CardContent className=\"p-8 flex-1 overflow-y-auto\">\n {currentStep === 1 && renderShippingStep()}\n {currentStep === 2 && renderPaymentStep()}\n {currentStep === 3 && renderReviewStep()}\n </CardContent>\n {/* Navigation Buttons */}\n <div className=\"flex justify-between p-8 pt-6 border-t border-gray-200 bg-white\">\n <Button\n variant=\"outline\"\n onClick={handlePrevStep}\n disabled={currentStep === 1}\n >\n Previous\n </Button>\n \n {currentStep < 3 ? (\n <Button variant=\"primary\" onClick={handleNextStep}>\n Next\n </Button>\n ) : (\n <Button\n variant=\"primary\"\n onClick={handlePlaceOrder}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : 'Place Order'}\n </Button>\n )}\n </div>\n </Card>\n </div>\n\n {/* Order Summary */}\n <div>\n <Card className=\"sticky top-4\">\n <CardHeader>\n <CardTitle>Order Summary</CardTitle>\n </CardHeader>\n <CardContent>\n {/* Cart Items */}\n <div className=\"space-y-3 mb-4\">\n {cartItems.map((item) => (\n <div key={item.product.id} className=\"flex items-center space-x-3\">\n <img\n src={item.product.images[0]}\n alt={item.product.name}\n className=\"w-12 h-12 object-cover rounded\"\n />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 truncate\">\n {item.product.name}\n </p>\n <p className=\"text-sm text-gray-600\">Qty: {item.quantity}</p>\n </div>\n <p className=\"text-sm font-medium text-gray-900\">\n ${(item.product.price * item.quantity).toFixed(2)}\n </p>\n </div>\n ))}\n </div>\n\n {/* Coupon Code */}\n <div className=\"mb-4 pb-4 border-b border-gray-200\">\n <div className=\"flex space-x-2\">\n <Input\n placeholder=\"Coupon code\"\n value={couponCode}\n onChange={(e) => setCouponCode(e.target.value)}\n disabled={!!appliedCoupon}\n />\n <Button\n variant=\"outline\"\n onClick={handleApplyCoupon}\n disabled={!!appliedCoupon || !couponCode}\n >\n Apply\n </Button>\n </div>\n {appliedCoupon && (\n <div className=\"flex items-center mt-2\">\n <Tag className=\"h-4 w-4 text-green-600 mr-1\" />\n <span className=\"text-sm text-green-600\">\n Coupon \"{appliedCoupon}\" applied\n </span>\n </div>\n )}\n </div>\n\n {/* Order Totals */}\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span className=\"text-gray-900\">${subtotal.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span className=\"text-gray-900\">\n {shipping === 0 ? 'Free' : `$${shipping.toFixed(2)}`}\n </span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Tax</span>\n <span className=\"text-gray-900\">${tax.toFixed(2)}</span>\n </div>\n {discount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Discount</span>\n <span className=\"text-green-600\">-${discount.toFixed(2)}</span>\n </div>\n )}\n <div className=\"flex justify-between text-lg font-semibold pt-2 border-t border-gray-200\">\n <span className=\"text-gray-900\">Total</span>\n <span className=\"text-gray-900\">${total.toFixed(2)}</span>\n </div>\n </div>\n\n {/* Security Badge */}\n <div className=\"flex items-center justify-center mt-6 pt-4 border-t border-gray-200\">\n <Lock className=\"h-4 w-4 text-gray-400 mr-2\" />\n <span className=\"text-xs text-gray-600\">Secure checkout</span>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n};"],"names":["_jsx","_jsxs","React"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import React__default from 'react';
2
3
  import { sampleProducts } from './data/sampleData.js';
3
4
  import { MarketplaceHeader } from './components/MarketplaceHeader.js';
4
5
  import { MarketplaceDashboard } from './components/MarketplaceDashboard.js';
@@ -6,10 +7,13 @@ import { MarketplaceSidebar } from './MarketplaceSidebar.js';
6
7
  import { AllProductsView } from './AllProductsView.js';
7
8
  import { SingleProductView } from './SingleProductView.js';
8
9
  import { CheckoutCompact } from './CheckoutCompact.js';
10
+ import { CheckoutComponent } from './CheckoutComponent.js';
11
+ import { Modal } from '../Modal/Modal.js';
9
12
  import { useMarketplaceState } from './hooks/useMarketplaceState.js';
10
13
  import { useCart } from './hooks/useCart.js';
11
14
  import { useProductNavigation } from './hooks/useProductNavigation.js';
12
15
  import { useSearch } from './hooks/useSearch.js';
16
+ import { useBreakpoint } from '../../hooks/useBreakpoint.js';
13
17
  import { sanitizeProduct } from './utils/sanitizeProduct.js';
14
18
 
15
19
  /**
@@ -17,8 +21,23 @@ import { sanitizeProduct } from './utils/sanitizeProduct.js';
17
21
  * Refactored to use modular components and custom hooks for better maintainability
18
22
  */
19
23
  const MarketplaceComponent = ({ userRole = 'buyer', products, cartItems: cartItemsProp, filters: filtersProp, onProductClick, onAddToCart, onRemoveFromCart, onFiltersChange, onClearFilters, className = '', }) => {
24
+ // Responsive sidebar initial state (mobile = collapsed)
25
+ const { currentBreakpoint, isBelow } = useBreakpoint();
26
+ const [sidebarInitialized, setSidebarInitialized] = React__default.useState(false);
20
27
  // State management hook (fallbacks for backward compatibility)
21
28
  const { sidebarCollapsed, currentView, selectedProduct, searchQuery, cartItems: cartItemsState, showCheckout, filters: filtersState, setSidebarCollapsed, setCurrentView, setSelectedProduct, setSearchQuery, setCartItems, setShowCheckout, setFilters, toggleSidebar, clearCart, resetFilters, } = useMarketplaceState();
29
+ // On mount, collapse sidebar if mobile and not already initialized
30
+ React__default.useEffect(() => {
31
+ if (!sidebarInitialized && isBelow('md')) {
32
+ setSidebarCollapsed(true);
33
+ setSidebarInitialized(true);
34
+ }
35
+ else if (!sidebarInitialized) {
36
+ setSidebarInitialized(true);
37
+ }
38
+ }, [sidebarInitialized, isBelow, setSidebarCollapsed]);
39
+ // State for full checkout modal
40
+ const [showFullCheckoutModal, setShowFullCheckoutModal] = React__default.useState(false);
22
41
  // Use props if provided, otherwise fallback to internal state/sample data
23
42
  const rawProductsData = products ?? sampleProducts;
24
43
  const productsData = Array.isArray(rawProductsData)
@@ -58,13 +77,23 @@ const MarketplaceComponent = ({ userRole = 'buyer', products, cartItems: cartIte
58
77
  (onAddToCart ?? addToCart)(product, quantity);
59
78
  setShowCheckout(true);
60
79
  };
61
- 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: onFiltersChange ?? setFilters, onClearFilters: 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: onAddToCart ?? addToCart, onViewAllProducts: navigateToProducts })), currentView === 'products' && (jsx(AllProductsView, { onProductClick: navigateToProduct, onAddToCart: onAddToCart ?? addToCart, products: productsData, filters: filters })), currentView === 'product' && selectedProduct && (jsx(SingleProductView, { product: (() => {
80
+ // State for mobile sidebar modal
81
+ const [showMobileSidebar, setShowMobileSidebar] = React__default.useState(false);
82
+ 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 }), jsx(Modal, { open: showMobileSidebar, onOpenChange: setShowMobileSidebar, size: "full", children: jsxs("div", { className: "h-full w-full bg-background overflow-y-auto p-4", children: [jsx(MarketplaceSidebar, { filters: filters, onFiltersChange: onFiltersChange ?? setFilters, onClearFilters: onClearFilters ?? resetFilters, collapsed: false, onToggleCollapse: () => setShowMobileSidebar(false), className: "w-full max-w-md mx-auto" }), jsxs("div", { className: "mt-6 flex justify-end gap-2", children: [jsx("button", { className: "px-4 py-2 rounded bg-secondary text-secondary-foreground", onClick: () => {
83
+ (onClearFilters ?? resetFilters)();
84
+ }, children: "Clear All" }), jsx("button", { className: "px-4 py-2 rounded bg-primary text-primary-foreground", onClick: () => setShowMobileSidebar(false), children: "Apply Filters" })] })] }) }), jsxs("div", { className: `w-full ${!isBelow('lg') ? 'flex' : ''}`, children: [(!isBelow('lg') && (currentView === 'products' || currentView === 'dashboard')) && (jsx(MarketplaceSidebar, { filters: filters, onFiltersChange: onFiltersChange ?? setFilters, onClearFilters: onClearFilters ?? resetFilters, collapsed: sidebarCollapsed, onToggleCollapse: toggleSidebar })), jsxs("main", { className: `relative p-6 ${isBelow('lg') ? 'w-full' : 'flex-1'}`, children: [currentView === 'dashboard' && (jsx(MarketplaceDashboard, { featuredProducts: featuredProducts, trendingProducts: trendingProducts, recentlyViewed: recentlyViewed, onProductClick: navigateToProduct, onAddToCart: onAddToCart ?? addToCart, onViewAllProducts: navigateToProducts, searchQuery: searchQuery, onSearch: handleSearch, setCurrentView: setCurrentView })), currentView === 'products' && (jsx(AllProductsView, { onProductClick: navigateToProduct, onAddToCart: onAddToCart ?? addToCart, products: productsData, filters: filters, searchQuery: searchQuery, setSearchQuery: setSearchQuery, onFiltersChange: setFilters, onClearFilters: resetFilters })), currentView === 'product' && selectedProduct && (jsx(SingleProductView, { product: (() => {
62
85
  const found = productsData.find((p) => String(p.id).trim() === String(selectedProduct.id).trim());
63
86
  if (!found) {
64
87
  console.error("MarketplaceComponent: No product found for selectedProduct.id:", selectedProduct.id, "Available ids:", productsData.map((p) => p.id));
65
88
  }
66
89
  return found;
67
- })(), onAddToCart: 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 }) }))] })] }));
90
+ })(), onAddToCart: 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, onViewFullCheckout: () => {
91
+ setShowFullCheckoutModal(true);
92
+ setShowCheckout(false);
93
+ } }) })), jsx(Modal, { open: showFullCheckoutModal, onOpenChange: (open) => setShowFullCheckoutModal(open), size: "xl", children: jsx(CheckoutComponent, { cartItems: cartItems, onOrderComplete: () => {
94
+ clearCart();
95
+ setShowFullCheckoutModal(false);
96
+ } }) })] })] }));
68
97
  };
69
98
 
70
99
  export { MarketplaceComponent };
@@ -1 +1 @@
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, CartItem, FilterOptions } from './types';\nimport { sanitizeProduct } from \"./utils/sanitizeProduct\";\n\n\nexport interface MarketplaceComponentProps {\n userRole?: 'buyer' | 'seller' | 'admin';\n products?: Product[];\n cartItems?: CartItem[];\n filters?: FilterOptions;\n onProductClick?: (product: Product) => void;\n onAddToCart?: (product: Product, quantity?: number) => void;\n onRemoveFromCart?: (productId: string) => void;\n onFiltersChange?: (filters: FilterOptions) => void;\n onClearFilters?: () => 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 products,\n cartItems: cartItemsProp,\n filters: filtersProp,\n onProductClick,\n onAddToCart,\n onRemoveFromCart,\n onFiltersChange,\n onClearFilters,\n className = '',\n}) => {\n // State management hook (fallbacks for backward compatibility)\n const {\n sidebarCollapsed,\n currentView,\n selectedProduct,\n searchQuery,\n cartItems: cartItemsState,\n showCheckout,\n filters: filtersState,\n setSidebarCollapsed,\n setCurrentView,\n setSelectedProduct,\n setSearchQuery,\n setCartItems,\n setShowCheckout,\n setFilters,\n toggleSidebar,\n clearCart,\n resetFilters,\n } = useMarketplaceState();\n\n // Use props if provided, otherwise fallback to internal state/sample data\n \n const rawProductsData: Product[] = products ?? sampleProducts;\n const productsData: Product[] = Array.isArray(rawProductsData)\n ? rawProductsData.map(sanitizeProduct)\n : [];\n const cartItems = cartItemsProp ?? cartItemsState;\n const filters = filtersProp ?? filtersState;\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: productsData,\n searchQuery,\n setSearchQuery,\n setCurrentView,\n });\n\n // Derived data\n const featuredProducts = productsData.slice(0, 4);\n const trendingProducts = productsData.slice(4, 8);\n const recentlyViewed = productsData.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 (onAddToCart ?? 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={onFiltersChange ?? setFilters}\n onClearFilters={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={onAddToCart ?? addToCart}\n onViewAllProducts={navigateToProducts}\n />\n )}\n \n {currentView === 'products' && (\n <AllProductsView\n onProductClick={navigateToProduct}\n onAddToCart={onAddToCart ?? addToCart}\n products={productsData}\n filters={filters}\n />\n )}\n \n {currentView === 'product' && selectedProduct && (\n <SingleProductView\n product={\n (() => {\n const found = productsData.find((p: Product) => String(p.id).trim() === String(selectedProduct.id).trim());\n if (!found) {\n console.error(\n \"MarketplaceComponent: No product found for selectedProduct.id:\",\n selectedProduct.id,\n \"Available ids:\",\n productsData.map((p: Product) => p.id)\n );\n }\n return found;\n })()\n }\n onAddToCart={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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"}
1
+ {"version":3,"file":"MarketplaceComponent.js","sources":["../../../src/components/Marketplace/MarketplaceComponent.tsx"],"sourcesContent":["import React from 'react';\r\nimport { sampleProducts } from './data/sampleData';\r\nimport { MarketplaceHeader } from './components/MarketplaceHeader';\r\nimport { MarketplaceDashboard } from './components/MarketplaceDashboard';\r\nimport { MarketplaceSidebar } from './MarketplaceSidebar';\r\nimport { AllProductsView } from './AllProductsView';\r\nimport { SingleProductView } from './SingleProductView';\r\nimport { CheckoutCompact } from './CheckoutCompact';\r\nimport { CheckoutComponent } from './CheckoutComponent';\r\nimport { Modal } from '../Modal/Modal';\r\nimport { useMarketplaceState } from './hooks/useMarketplaceState';\r\nimport { useCart } from './hooks/useCart';\r\nimport { useProductNavigation } from './hooks/useProductNavigation';\r\nimport { useSearch } from './hooks/useSearch';\r\nimport { useBreakpoint } from '../../hooks/useBreakpoint';\r\nimport type { Product, CartItem, FilterOptions } from './types';\r\nimport { sanitizeProduct } from \"./utils/sanitizeProduct\";\r\n\r\n\r\nexport interface MarketplaceComponentProps {\r\n userRole?: 'buyer' | 'seller' | 'admin';\r\n products?: Product[];\r\n cartItems?: CartItem[];\r\n filters?: FilterOptions;\r\n onProductClick?: (product: Product) => void;\r\n onAddToCart?: (product: Product, quantity?: number) => void;\r\n onRemoveFromCart?: (productId: string) => void;\r\n onFiltersChange?: (filters: FilterOptions) => void;\r\n onClearFilters?: () => void;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Main marketplace component orchestrating all marketplace functionality\r\n * Refactored to use modular components and custom hooks for better maintainability\r\n */\r\nexport const MarketplaceComponent: React.FC<MarketplaceComponentProps> = ({\r\n userRole = 'buyer',\r\n products,\r\n cartItems: cartItemsProp,\r\n filters: filtersProp,\r\n onProductClick,\r\n onAddToCart,\r\n onRemoveFromCart,\r\n onFiltersChange,\r\n onClearFilters,\r\n className = '',\r\n}) => {\r\n // Responsive sidebar initial state (mobile = collapsed)\r\n const { currentBreakpoint, isBelow } = useBreakpoint();\r\n const [sidebarInitialized, setSidebarInitialized] = React.useState(false);\r\n\r\n // State management hook (fallbacks for backward compatibility)\r\n const {\r\n sidebarCollapsed,\r\n currentView,\r\n selectedProduct,\r\n searchQuery,\r\n cartItems: cartItemsState,\r\n showCheckout,\r\n filters: filtersState,\r\n setSidebarCollapsed,\r\n setCurrentView,\r\n setSelectedProduct,\r\n setSearchQuery,\r\n setCartItems,\r\n setShowCheckout,\r\n setFilters,\r\n toggleSidebar,\r\n clearCart,\r\n resetFilters,\r\n } = useMarketplaceState();\r\n\r\n // On mount, collapse sidebar if mobile and not already initialized\r\n React.useEffect(() => {\r\n if (!sidebarInitialized && isBelow('md')) {\r\n setSidebarCollapsed(true);\r\n setSidebarInitialized(true);\r\n } else if (!sidebarInitialized) {\r\n setSidebarInitialized(true);\r\n }\r\n }, [sidebarInitialized, isBelow, setSidebarCollapsed]);\r\n\r\n // State for full checkout modal\r\n const [showFullCheckoutModal, setShowFullCheckoutModal] = React.useState(false);\r\n\r\n // Use props if provided, otherwise fallback to internal state/sample data\r\n \r\n const rawProductsData: Product[] = products ?? sampleProducts;\r\n const productsData: Product[] = Array.isArray(rawProductsData)\r\n ? rawProductsData.map(sanitizeProduct)\r\n : [];\r\n const cartItems = cartItemsProp ?? cartItemsState;\r\n const filters = filtersProp ?? filtersState;\r\n\r\n // Cart management hook\r\n const {\r\n addToCart,\r\n removeFromCart,\r\n updateQuantity,\r\n getCartTotal,\r\n getCartItemCount,\r\n isInCart,\r\n getCartItem,\r\n } = useCart({ cartItems, setCartItems });\r\n\r\n // Navigation hook\r\n const {\r\n navigateToProduct,\r\n navigateToProducts,\r\n navigateToDashboard,\r\n navigateToCheckout,\r\n } = useProductNavigation({\r\n setSelectedProduct,\r\n setCurrentView,\r\n onProductClick,\r\n });\r\n\r\n // Search hook\r\n const {\r\n searchResults,\r\n isSearching,\r\n handleSearch,\r\n clearSearch,\r\n } = useSearch({\r\n products: productsData,\r\n searchQuery,\r\n setSearchQuery,\r\n setCurrentView,\r\n });\r\n\r\n // Derived data\r\n const featuredProducts = productsData.slice(0, 4);\r\n const trendingProducts = productsData.slice(4, 8);\r\n const recentlyViewed = productsData.slice(8, 12);\r\n const cartItemCount = getCartItemCount();\r\n\r\n // Event handlers\r\n const handleCartClick = () => {\r\n setShowCheckout(!showCheckout);\r\n };\r\n\r\n const handleCheckoutComplete = (items: any[]) => {\r\n clearCart();\r\n setShowCheckout(false);\r\n };\r\n\r\n const handleBuyNow = (product: Product, quantity: number) => {\r\n (onAddToCart ?? addToCart)(product, quantity);\r\n setShowCheckout(true);\r\n };\r\n\r\n // State for mobile sidebar modal\r\n const [showMobileSidebar, setShowMobileSidebar] = React.useState(false);\r\n\r\n return (\r\n <div className={`min-h-screen bg-gray-50 ${className}`}>\r\n {/* Header */}\r\n <MarketplaceHeader\r\n searchQuery={searchQuery}\r\n onSearchChange={handleSearch}\r\n cartItemCount={cartItemCount}\r\n onCartClick={handleCartClick}\r\n onMenuToggle={toggleSidebar}\r\n userRole={userRole}\r\n />\r\n\r\n {/* Floating Filters Button for Mobile (removed as per user feedback) */}\r\n\r\n {/* Mobile Sidebar Modal */}\r\n <Modal\r\n open={showMobileSidebar}\r\n onOpenChange={setShowMobileSidebar}\r\n size=\"full\"\r\n >\r\n <div className=\"h-full w-full bg-background overflow-y-auto p-4\">\r\n <MarketplaceSidebar\r\n filters={filters}\r\n onFiltersChange={onFiltersChange ?? setFilters}\r\n onClearFilters={onClearFilters ?? resetFilters}\r\n collapsed={false}\r\n onToggleCollapse={() => setShowMobileSidebar(false)}\r\n className=\"w-full max-w-md mx-auto\"\r\n />\r\n <div className=\"mt-6 flex justify-end gap-2\">\r\n <button\r\n className=\"px-4 py-2 rounded bg-secondary text-secondary-foreground\"\r\n onClick={() => {\r\n (onClearFilters ?? resetFilters)();\r\n }}\r\n >\r\n Clear All\r\n </button>\r\n <button\r\n className=\"px-4 py-2 rounded bg-primary text-primary-foreground\"\r\n onClick={() => setShowMobileSidebar(false)}\r\n >\r\n Apply Filters\r\n </button>\r\n </div>\r\n </div>\r\n </Modal>\r\n\r\n <div className={`w-full ${!isBelow('lg') ? 'flex' : ''}`}>\r\n {/* Sidebar: Only render on desktop/tablet */}\r\n {(!isBelow('lg') && (currentView === 'products' || currentView === 'dashboard')) && (\r\n <MarketplaceSidebar\r\n filters={filters}\r\n onFiltersChange={onFiltersChange ?? setFilters}\r\n onClearFilters={onClearFilters ?? resetFilters}\r\n collapsed={sidebarCollapsed}\r\n onToggleCollapse={toggleSidebar}\r\n />\r\n )}\r\n\r\n {/* Main Content: Always full width on mobile */}\r\n <main className={`relative p-6 ${isBelow('lg') ? 'w-full' : 'flex-1'}`}>\r\n {currentView === 'dashboard' && (\r\n <MarketplaceDashboard\r\n featuredProducts={featuredProducts}\r\n trendingProducts={trendingProducts}\r\n recentlyViewed={recentlyViewed}\r\n onProductClick={navigateToProduct}\r\n onAddToCart={onAddToCart ?? addToCart}\r\n onViewAllProducts={navigateToProducts}\r\n searchQuery={searchQuery}\r\n onSearch={handleSearch}\r\n setCurrentView={setCurrentView}\r\n />\r\n )}\r\n \r\n {currentView === 'products' && (\r\n <AllProductsView\r\n onProductClick={navigateToProduct}\r\n onAddToCart={onAddToCart ?? addToCart}\r\n products={productsData}\r\n filters={filters}\r\n searchQuery={searchQuery}\r\n setSearchQuery={setSearchQuery}\r\n onFiltersChange={setFilters}\r\n onClearFilters={resetFilters}\r\n />\r\n )}\r\n \r\n {currentView === 'product' && selectedProduct && (\r\n <SingleProductView\r\n product={\r\n (() => {\r\n const found = productsData.find((p: Product) => String(p.id).trim() === String(selectedProduct.id).trim());\r\n if (!found) {\r\n console.error(\r\n \"MarketplaceComponent: No product found for selectedProduct.id:\",\r\n selectedProduct.id,\r\n \"Available ids:\",\r\n productsData.map((p: Product) => p.id)\r\n );\r\n }\r\n return found;\r\n })()\r\n }\r\n onAddToCart={onAddToCart ?? addToCart}\r\n onBuyNow={handleBuyNow}\r\n />\r\n )}\r\n </main>\r\n\r\n {/* Checkout Sidebar */}\r\n {showCheckout && (\r\n <div className=\"fixed right-4 top-20 z-50\">\r\n <CheckoutCompact\r\n cartItems={cartItems}\r\n onClose={() => setShowCheckout(false)}\r\n onCheckout={handleCheckoutComplete}\r\n onViewFullCheckout={() => {\r\n setShowFullCheckoutModal(true);\r\n setShowCheckout(false);\r\n }}\r\n />\r\n </div>\r\n )}\r\n\r\n {/* Full Checkout Modal */}\r\n <Modal\r\n open={showFullCheckoutModal}\r\n onOpenChange={(open) => setShowFullCheckoutModal(open)}\r\n size=\"xl\"\r\n >\r\n <CheckoutComponent\r\n cartItems={cartItems}\r\n onOrderComplete={() => {\r\n clearCart();\r\n setShowFullCheckoutModal(false);\r\n }}\r\n />\r\n </Modal>\r\n </div>\r\n </div>\r\n );\r\n};"],"names":["React","_jsxs","_jsx"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { useState } from 'react';
3
- import { Filter, X, Grid2x2, ChevronDown, ChevronRight, Tag, Star, Store, Sliders } from 'lucide-react';
3
+ import { Filter, Grid2x2, Tag, Star, Store, Sliders, X, ChevronDown, ChevronRight } from 'lucide-react';
4
4
  import { Button } from '../Button/Button.js';
5
5
  import { Input } from '../Input/Input.js';
6
6
  import { Card, CardContent, CardHeader, CardTitle } from '../Card/Card.js';
@@ -129,38 +129,38 @@ const MarketplaceSidebar = ({ filters, onFiltersChange, onClearFilters, classNam
129
129
  } }), jsx("span", { className: "text-sm text-gray-700 flex-1", children: category.name }), jsxs("span", { className: "text-xs text-gray-500", children: ["(", category.count, ")"] })] }), category.children && (jsx("button", { onClick: () => toggleCategory(category.id), className: "p-1 hover:bg-gray-100 rounded", children: expandedCategories.has(category.id) ? (jsx(ChevronDown, { className: "h-3 w-3 text-gray-400" })) : (jsx(ChevronRight, { className: "h-3 w-3 text-gray-400" })) }))] }), category.children && expandedCategories.has(category.id) && (jsx("div", { className: "mt-1", children: renderCategoryTree(category.children, level + 1) }))] }, category.id)));
130
130
  };
131
131
  if (collapsed) {
132
- return (jsx("div", { className: cn('w-16 flex-shrink-0', className), children: jsx(Card, { className: "sticky top-4", children: jsx(CardContent, { className: "p-4", children: jsxs("div", { className: "flex flex-col items-center space-y-4", children: [jsx(Button, { variant: "ghost", size: "sm", onClick: onToggleCollapse, className: "w-full", children: jsx(Filter, { className: "h-5 w-5" }) }), getActiveFiltersCount() > 0 && (jsx(Badge, { variant: "default", className: "text-xs", children: getActiveFiltersCount() }))] }) }) }) }));
132
+ return (jsx("div", { className: cn('w-16 flex-shrink-0 bg-background border-r border-border rounded-xl hidden lg:block', className), children: jsx("div", { className: "fixed top-16 left-0 h-[calc(100vh-4rem)] w-16 z-40 bg-background border-r border-border rounded-xl", children: jsx(Card, { className: "h-full shadow-none border-none bg-transparent", children: jsx(CardContent, { className: "p-2", children: jsxs("div", { className: "flex flex-col items-center space-y-3", children: [jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Expand filters", title: "Expand filters", onClick: onToggleCollapse, className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", children: jsx(Filter, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Categories", title: "Categories", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Grid2x2, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Price Range", title: "Price Range", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Tag, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Customer Rating", title: "Customer Rating", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Star, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Brands", title: "Brands", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Tag, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Sellers", title: "Sellers", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Store, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Availability", title: "Availability", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Sliders, { className: "h-5 w-5" }) }), getActiveFiltersCount() > 0 && (jsx(Badge, { variant: "default", className: "text-xs bg-primary text-primary-foreground mt-2", children: getActiveFiltersCount() }))] }) }) }) }) }));
133
133
  }
134
- return (jsx("div", { className: cn('w-80 flex-shrink-0', className), children: jsxs(Card, { className: "sticky top-4", children: [jsx(CardHeader, { className: "pb-3", children: jsxs("div", { className: "flex items-center justify-between", children: [jsxs(CardTitle, { className: "flex items-center text-lg", children: [jsx(Filter, { className: "h-5 w-5 mr-2" }), "Filters", getActiveFiltersCount() > 0 && (jsx(Badge, { variant: "default", className: "ml-2", children: getActiveFiltersCount() }))] }), jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Button, { variant: "ghost", size: "sm", onClick: onClearFilters, children: "Clear All" }), onToggleCollapse && (jsx(Button, { variant: "ghost", size: "sm", onClick: onToggleCollapse, children: jsx(X, { className: "h-4 w-4" }) }))] })] }) }), jsxs(CardContent, { className: "space-y-6 max-h-[calc(100vh-200px)] overflow-y-auto", children: [jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('categories'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Grid2x2, { className: "h-4 w-4 mr-2" }), "Categories"] }), expandedSections.has('categories') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('categories') && (jsx("div", { className: "space-y-1", children: renderCategoryTree(categoryTree) }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('price'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Tag, { className: "h-4 w-4 mr-2" }), "Price Range"] }), expandedSections.has('price') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('price') && (jsxs("div", { className: "space-y-3", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Input, { type: "number", placeholder: "Min", value: filters.priceRange[0], onChange: (e) => handleFilterChange('priceRange', [
135
- parseInt(e.target.value) || 0,
136
- filters.priceRange[1]
137
- ]), className: "w-20 text-sm" }), jsx("span", { className: "text-gray-400", children: "-" }), jsx(Input, { type: "number", placeholder: "Max", value: filters.priceRange[1], onChange: (e) => handleFilterChange('priceRange', [
138
- filters.priceRange[0],
139
- parseInt(e.target.value) || 1000
140
- ]), className: "w-20 text-sm" })] }), jsx("div", { className: "space-y-1", children: [
141
- { label: 'Under $25', range: [0, 25] },
142
- { label: '$25 - $50', range: [25, 50] },
143
- { label: '$50 - $100', range: [50, 100] },
144
- { label: '$100 - $200', range: [100, 200] },
145
- { label: 'Over $200', range: [200, 1000] },
146
- ].map((option) => (jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.priceRange[0] === option.range[0] &&
147
- filters.priceRange[1] === option.range[1], onChange: (e) => {
148
- if (e.target.checked) {
149
- handleFilterChange('priceRange', option.range);
150
- }
151
- } }), jsx("span", { className: "text-sm text-gray-700", children: option.label })] }, option.label))) })] }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('rating'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Star, { className: "h-4 w-4 mr-2" }), "Customer Rating"] }), expandedSections.has('rating') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('rating') && (jsx("div", { className: "space-y-2", children: [4, 3, 2, 1].map(rating => (jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.rating === rating, onChange: (e) => {
152
- handleFilterChange('rating', e.target.checked ? rating : 0);
153
- } }), jsxs("div", { className: "flex items-center space-x-1", children: [[1, 2, 3, 4, 5].map(star => (jsx(Star, { className: `h-4 w-4 ${star <= rating ? 'text-yellow-400 fill-current' : 'text-gray-300'}` }, star))), jsx("span", { className: "text-sm text-gray-700", children: "& up" })] })] }, rating))) }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('brands'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Tag, { className: "h-4 w-4 mr-2" }), "Brands"] }), expandedSections.has('brands') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('brands') && (jsx("div", { className: "space-y-2", children: brands.map(brand => (jsxs("label", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.brands.includes(brand.name), onChange: (e) => {
154
- const newBrands = e.target.checked
155
- ? [...filters.brands, brand.name]
156
- : filters.brands.filter(b => b !== brand.name);
157
- handleFilterChange('brands', newBrands);
158
- } }), jsx("span", { className: "text-sm text-gray-700", children: brand.name })] }), jsxs("span", { className: "text-xs text-gray-500", children: ["(", brand.count, ")"] })] }, brand.name))) }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('vendors'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Store, { className: "h-4 w-4 mr-2" }), "Sellers"] }), expandedSections.has('vendors') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('vendors') && (jsx("div", { className: "space-y-2", children: vendors.map(vendor => (jsxs("label", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.vendors.includes(vendor.name), onChange: (e) => {
159
- const newVendors = e.target.checked
160
- ? [...filters.vendors, vendor.name]
161
- : filters.vendors.filter(v => v !== vendor.name);
162
- handleFilterChange('vendors', newVendors);
163
- } }), jsxs("div", { children: [jsx("div", { className: "text-sm text-gray-700", children: vendor.name }), jsxs("div", { className: "flex items-center space-x-1", children: [jsx(Star, { className: "h-3 w-3 text-yellow-400 fill-current" }), jsx("span", { className: "text-xs text-gray-500", children: vendor.rating })] })] })] }), jsxs("span", { className: "text-xs text-gray-500", children: ["(", vendor.count, ")"] })] }, vendor.name))) }))] }), jsxs("div", { children: [jsxs("h3", { className: "font-medium text-gray-900 mb-3 flex items-center", children: [jsx(Sliders, { className: "h-4 w-4 mr-2" }), "Availability"] }), jsx("div", { className: "space-y-2", children: jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.inStock, onChange: (e) => handleFilterChange('inStock', e.target.checked) }), jsx("span", { className: "text-sm text-gray-700", children: "In Stock Only" })] }) })] }), getActiveFiltersCount() > 0 && (jsxs("div", { className: "pt-4 border-t border-gray-200", children: [jsxs("div", { className: "flex items-center justify-between mb-2", children: [jsx("h3", { className: "font-medium text-gray-900", children: "Active Filters" }), jsx(Button, { variant: "ghost", size: "sm", onClick: onClearFilters, children: "Clear All" })] }), jsxs("div", { className: "flex flex-wrap gap-2", children: [filters.categories.map(category => (jsxs(Badge, { variant: "outline", className: "text-xs", children: [category, jsx("button", { onClick: () => handleFilterChange('categories', filters.categories.filter(c => c !== category)), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] }, category))), filters.brands.map(brand => (jsxs(Badge, { variant: "outline", className: "text-xs", children: [brand, jsx("button", { onClick: () => handleFilterChange('brands', filters.brands.filter(b => b !== brand)), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] }, brand))), filters.rating > 0 && (jsxs(Badge, { variant: "outline", className: "text-xs", children: [filters.rating, "+ stars", jsx("button", { onClick: () => handleFilterChange('rating', 0), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] })), filters.inStock && (jsxs(Badge, { variant: "outline", className: "text-xs", children: ["In Stock", jsx("button", { onClick: () => handleFilterChange('inStock', false), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] }))] })] }))] })] }) }));
134
+ return (jsx("div", { className: cn('w-80 flex-shrink-0 hidden lg:block', className), children: jsx("div", { className: "fixed top-16 left-0 h-[calc(100vh-4rem)] w-80 z-30 bg-background border-r border-border pt-4", children: jsxs(Card, { className: "h-full shadow-none border-none bg-transparent", children: [jsx(CardHeader, { className: "pb-3", children: jsxs("div", { className: "flex items-center justify-between", children: [jsxs(CardTitle, { className: "flex items-center text-lg", children: [jsx(Filter, { className: "h-5 w-5 mr-2" }), "Filters", getActiveFiltersCount() > 0 && (jsx(Badge, { variant: "default", className: "ml-2", children: getActiveFiltersCount() }))] }), jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Button, { variant: "ghost", size: "sm", onClick: onClearFilters, children: "Clear All" }), onToggleCollapse && (jsx(Button, { variant: "ghost", size: "sm", onClick: onToggleCollapse, children: jsx(X, { className: "h-4 w-4" }) }))] })] }) }), jsxs(CardContent, { className: "space-y-6 max-h-[calc(100vh-200px)] overflow-y-auto", children: [jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('categories'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Grid2x2, { className: "h-4 w-4 mr-2" }), "Categories"] }), expandedSections.has('categories') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('categories') && (jsx("div", { className: "space-y-1", children: renderCategoryTree(categoryTree) }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('price'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Tag, { className: "h-4 w-4 mr-2" }), "Price Range"] }), expandedSections.has('price') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('price') && (jsxs("div", { className: "space-y-3", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Input, { type: "number", placeholder: "Min", value: filters.priceRange[0], onChange: (e) => handleFilterChange('priceRange', [
135
+ parseInt(e.target.value) || 0,
136
+ filters.priceRange[1]
137
+ ]), className: "w-20 text-sm" }), jsx("span", { className: "text-gray-400", children: "-" }), jsx(Input, { type: "number", placeholder: "Max", value: filters.priceRange[1], onChange: (e) => handleFilterChange('priceRange', [
138
+ filters.priceRange[0],
139
+ parseInt(e.target.value) || 1000
140
+ ]), className: "w-20 text-sm" })] }), jsx("div", { className: "space-y-1", children: [
141
+ { label: 'Under $25', range: [0, 25] },
142
+ { label: '$25 - $50', range: [25, 50] },
143
+ { label: '$50 - $100', range: [50, 100] },
144
+ { label: '$100 - $200', range: [100, 200] },
145
+ { label: 'Over $200', range: [200, 1000] },
146
+ ].map((option) => (jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.priceRange[0] === option.range[0] &&
147
+ filters.priceRange[1] === option.range[1], onChange: (e) => {
148
+ if (e.target.checked) {
149
+ handleFilterChange('priceRange', option.range);
150
+ }
151
+ } }), jsx("span", { className: "text-sm text-gray-700", children: option.label })] }, option.label))) })] }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('rating'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Star, { className: "h-4 w-4 mr-2" }), "Customer Rating"] }), expandedSections.has('rating') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('rating') && (jsx("div", { className: "space-y-2", children: [4, 3, 2, 1].map(rating => (jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.rating === rating, onChange: (e) => {
152
+ handleFilterChange('rating', e.target.checked ? rating : 0);
153
+ } }), jsxs("div", { className: "flex items-center space-x-1", children: [[1, 2, 3, 4, 5].map(star => (jsx(Star, { className: `h-4 w-4 ${star <= rating ? 'text-yellow-400 fill-current' : 'text-gray-300'}` }, star))), jsx("span", { className: "text-sm text-gray-700", children: "& up" })] })] }, rating))) }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('brands'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Tag, { className: "h-4 w-4 mr-2" }), "Brands"] }), expandedSections.has('brands') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('brands') && (jsx("div", { className: "space-y-2", children: brands.map(brand => (jsxs("label", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.brands.includes(brand.name), onChange: (e) => {
154
+ const newBrands = e.target.checked
155
+ ? [...filters.brands, brand.name]
156
+ : filters.brands.filter(b => b !== brand.name);
157
+ handleFilterChange('brands', newBrands);
158
+ } }), jsx("span", { className: "text-sm text-gray-700", children: brand.name })] }), jsxs("span", { className: "text-xs text-gray-500", children: ["(", brand.count, ")"] })] }, brand.name))) }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('vendors'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Store, { className: "h-4 w-4 mr-2" }), "Sellers"] }), expandedSections.has('vendors') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('vendors') && (jsx("div", { className: "space-y-2", children: vendors.map(vendor => (jsxs("label", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.vendors.includes(vendor.name), onChange: (e) => {
159
+ const newVendors = e.target.checked
160
+ ? [...filters.vendors, vendor.name]
161
+ : filters.vendors.filter(v => v !== vendor.name);
162
+ handleFilterChange('vendors', newVendors);
163
+ } }), jsxs("div", { children: [jsx("div", { className: "text-sm text-gray-700", children: vendor.name }), jsxs("div", { className: "flex items-center space-x-1", children: [jsx(Star, { className: "h-3 w-3 text-yellow-400 fill-current" }), jsx("span", { className: "text-xs text-gray-500", children: vendor.rating })] })] })] }), jsxs("span", { className: "text-xs text-gray-500", children: ["(", vendor.count, ")"] })] }, vendor.name))) }))] }), jsxs("div", { children: [jsxs("h3", { className: "font-medium text-gray-900 mb-3 flex items-center", children: [jsx(Sliders, { className: "h-4 w-4 mr-2" }), "Availability"] }), jsx("div", { className: "space-y-2", children: jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.inStock, onChange: (e) => handleFilterChange('inStock', e.target.checked) }), jsx("span", { className: "text-sm text-gray-700", children: "In Stock Only" })] }) })] }), getActiveFiltersCount() > 0 && (jsxs("div", { className: "pt-4 border-t border-gray-200", children: [jsxs("div", { className: "flex items-center justify-between mb-2", children: [jsx("h3", { className: "font-medium text-gray-900", children: "Active Filters" }), jsx(Button, { variant: "ghost", size: "sm", onClick: onClearFilters, children: "Clear All" })] }), jsxs("div", { className: "flex flex-wrap gap-2", children: [filters.categories.map(category => (jsxs(Badge, { variant: "outline", className: "text-xs", children: [category, jsx("button", { onClick: () => handleFilterChange('categories', filters.categories.filter(c => c !== category)), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] }, category))), filters.brands.map(brand => (jsxs(Badge, { variant: "outline", className: "text-xs", children: [brand, jsx("button", { onClick: () => handleFilterChange('brands', filters.brands.filter(b => b !== brand)), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] }, brand))), filters.rating > 0 && (jsxs(Badge, { variant: "outline", className: "text-xs", children: [filters.rating, "+ stars", jsx("button", { onClick: () => handleFilterChange('rating', 0), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] })), filters.inStock && (jsxs(Badge, { variant: "outline", className: "text-xs", children: ["In Stock", jsx("button", { onClick: () => handleFilterChange('inStock', false), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] }))] })] }))] })] }) }) }));
164
164
  };
165
165
 
166
166
  export { MarketplaceSidebar };