@beyondcorp/beyond-ui 1.2.83 → 1.2.85

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 (59) hide show
  1. package/README.md +394 -394
  2. package/dist/components/Alert/Alert.example.js.map +1 -1
  3. package/dist/components/Auth/LoginForm.example.js.map +1 -1
  4. package/dist/components/Auth/PasswordResetForm.example.js.map +1 -1
  5. package/dist/components/Auth/PasswordResetForm.js.map +1 -1
  6. package/dist/components/Auth/ProtectedRoute.example.js.map +1 -1
  7. package/dist/components/Auth/SignupForm.example.js.map +1 -1
  8. package/dist/components/Avatar/Avatar.example.js.map +1 -1
  9. package/dist/components/Badge/Badge.example.js.map +1 -1
  10. package/dist/components/Blog/BlogShowcase.js +36 -36
  11. package/dist/components/Blog/BlogShowcase.js.map +1 -1
  12. package/dist/components/Button/Button.example.js.map +1 -1
  13. package/dist/components/Card/Card.example.js.map +1 -1
  14. package/dist/components/Card/Card.js.map +1 -1
  15. package/dist/components/Checkbox/Checkbox.example.js.map +1 -1
  16. package/dist/components/CodeHighlight/CodeHighlight.js.map +1 -1
  17. package/dist/components/ComponentShowcase/ComponentShowcase.js.map +1 -1
  18. package/dist/components/ComponentShowcase/componentDocs.js +21 -21
  19. package/dist/components/ComponentShowcase/componentDocs.js.map +1 -1
  20. package/dist/components/ComponentShowcase/showcaseRegistry.js.map +1 -1
  21. package/dist/components/DashboardGrid/DashboardGrid.example.js.map +1 -1
  22. package/dist/components/DashboardGrid/DashboardGrid.js.map +1 -1
  23. package/dist/components/DashboardHeader/DashboardHeader.example.js.map +1 -1
  24. package/dist/components/DashboardLayout/DashboardLayout.example.js.map +1 -1
  25. package/dist/components/DashboardLayout/DashboardLayout.js.map +1 -1
  26. package/dist/components/DataTable/DataTable.js +2 -2
  27. package/dist/components/DataTable/DataTable.js.map +1 -1
  28. package/dist/components/Image/Image.js.map +1 -1
  29. package/dist/components/Input/Input.example.js.map +1 -1
  30. package/dist/components/Marketplace/AllProductsView.js.map +1 -1
  31. package/dist/components/Marketplace/MarketplaceComponent.js.map +1 -1
  32. package/dist/components/Marketplace/MarketplaceSidebar.js.map +1 -1
  33. package/dist/components/Marketplace/components/MarketplaceControls.js.map +1 -1
  34. package/dist/components/Marketplace/components/MarketplaceHeader.js.map +1 -1
  35. package/dist/components/Marketplace/components/ProductCard.js.map +1 -1
  36. package/dist/components/Marketplace/hooks/useScrollToTop.js.map +1 -1
  37. package/dist/components/Marketplace/utils/sanitizeProduct.js.map +1 -1
  38. package/dist/components/Modal/Modal.example.js.map +1 -1
  39. package/dist/components/Modal/Modal.js.map +1 -1
  40. package/dist/components/Navbar/Navbar.example.js.map +1 -1
  41. package/dist/components/NightModeSwitch/NightModeSwitch.js.map +1 -1
  42. package/dist/components/ProfileManagement/EditModal.js.map +1 -1
  43. package/dist/components/ProfileManagement/ProfileCard.js.map +1 -1
  44. package/dist/components/Radio/Radio.js.map +1 -1
  45. package/dist/components/Select/Select.js.map +1 -1
  46. package/dist/components/Sidebar/LogoutButton.js.map +1 -1
  47. package/dist/components/Sidebar/ProfileButton.js.map +1 -1
  48. package/dist/components/Sidebar/Sidebar.example.js.map +1 -1
  49. package/dist/components/Sidebar/Sidebar.js.map +1 -1
  50. package/dist/components/Sidebar/SidebarHeader.js.map +1 -1
  51. package/dist/components/Skeleton/Skeleton.example.js.map +1 -1
  52. package/dist/components/Spinner/Spinner.example.js.map +1 -1
  53. package/dist/components/StatsCard/StatsCard.example.js.map +1 -1
  54. package/dist/components/Switch/Switch.example.js.map +1 -1
  55. package/dist/components/Tabs/Tabs.example.js.map +1 -1
  56. package/dist/components/Textarea/Textarea.example.js.map +1 -1
  57. package/dist/components/Toast/Toast.example.js.map +1 -1
  58. package/dist/hooks/useIntersectionObserver.js.map +1 -1
  59. package/package.json +113 -113
@@ -1 +1 @@
1
- {"version":3,"file":"AllProductsView.js","sources":["../../../src/components/Marketplace/AllProductsView.tsx"],"sourcesContent":["import React, { useState, useMemo } from 'react';\r\nimport { Search, Filter, Grid2x2 as Grid, List, Star, ShoppingCart } from 'lucide-react';\r\nimport { MarketplaceControls } from './components/MarketplaceControls';\r\nimport { Button } from '../Button';\r\nimport { Badge } from '../Badge';\r\nimport { Modal, ModalHeader, ModalTitle, ModalContent, ModalFooter } from '../Modal';\r\nimport { Checkbox } from '../Checkbox';\r\nimport { showToast } from '../Toast';\r\nimport type { Product, FilterOptions, SortOption } from './types';\r\nimport { sampleProducts } from './data/sampleData';\r\nimport { ProductCard } from './components/ProductCard';\r\n\r\ninterface AllProductsViewProps {\r\n products?: Product[];\r\n filters: FilterOptions;\r\n searchQuery: string;\r\n setSearchQuery?: (query: string) => void;\r\n shouldFocusSearch?: boolean;\r\n onProductClick?: (product: Product) => void;\r\n onAddToCart?: (product: Product) => void;\r\n onFiltersChange: (filters: FilterOptions) => void;\r\n onClearFilters: () => void;\r\n}\r\n\r\nconst sortOptions: SortOption[] = [\r\n { value: 'relevance', label: 'Most Relevant' },\r\n { value: 'price-low', label: 'Price: Low to High' },\r\n { value: 'price-high', label: 'Price: High to Low' },\r\n { value: 'rating', label: 'Highest Rated' },\r\n { value: 'newest', label: 'Newest First' },\r\n { value: 'popular', label: 'Most Popular' },\r\n];\r\n\r\nexport const AllProductsView: React.FC<AllProductsViewProps> = ({\r\n products,\r\n filters: filtersProp,\r\n searchQuery,\r\n setSearchQuery,\r\n shouldFocusSearch,\r\n onProductClick,\r\n onAddToCart,\r\n onFiltersChange,\r\n onClearFilters,\r\n}) => {\r\n const productsData = products ?? sampleProducts;\r\n const [sortBy, setSortBy] = useState('relevance');\r\n const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid');\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [showFilters, setShowFilters] = useState(false);\r\n const [quickViewProduct, setQuickViewProduct] = useState<Product | null>(null);\r\n const [wishlist, setWishlist] = useState<Set<string>>(new Set());\r\n\r\n // Use filters and handlers from props only\r\n const filters = filtersProp;\r\n\r\n const itemsPerPage = 12;\r\n\r\n // Get unique filter options from products\r\n const filterOptions = useMemo(() => {\r\n const categories = [...new Set(productsData.map((p: Product) => p.category))];\r\n const brands = [...new Set(productsData.map((p: Product) => p.brand))];\r\n const vendors = [...new Set(productsData.map((p: Product) => p.vendor.name))];\r\n\r\n return { categories, brands, vendors };\r\n }, [productsData]);\r\n\r\n // Filter and sort products\r\n const filteredProducts = useMemo(() => {\r\n let filtered = productsData.filter((product: Product) => {\r\n // Search query\r\n if (searchQuery && !product.name.toLowerCase().includes(searchQuery.toLowerCase()) &&\r\n !product.description.toLowerCase().includes(searchQuery.toLowerCase())) {\r\n return false;\r\n }\r\n\r\n // Category filter\r\n if (filters.categories.length > 0 && !filters.categories.includes(product.category)) {\r\n return false;\r\n }\r\n\r\n // Brand filter\r\n if (filters.brands.length > 0 && !filters.brands.includes(product.brand)) {\r\n return false;\r\n }\r\n\r\n // Price range\r\n if (product.price < filters.priceRange[0] || product.price > filters.priceRange[1]) {\r\n return false;\r\n }\r\n\r\n // Rating filter\r\n if (filters.rating > 0 && product.rating < filters.rating) {\r\n return false;\r\n }\r\n\r\n // In stock filter\r\n if (filters.inStock && !product.inStock) {\r\n return false;\r\n }\r\n\r\n // Vendor filter\r\n if (filters.vendors.length > 0 && !filters.vendors.includes(product.vendor.name)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n // Sort products\r\n switch (sortBy) {\r\n case 'price-low':\r\n filtered.sort((a: Product, b: Product) => a.price - b.price);\r\n break;\r\n case 'price-high':\r\n filtered.sort((a: Product, b: Product) => b.price - a.price);\r\n break;\r\n case 'rating':\r\n filtered.sort((a: Product, b: Product) => b.rating - a.rating);\r\n break;\r\n case 'newest':\r\n // Assuming newer products have higher IDs\r\n filtered.sort((a: Product, b: Product) => parseInt(b.id) - parseInt(a.id));\r\n break;\r\n case 'popular':\r\n filtered.sort((a: Product, b: Product) => b.reviewCount - a.reviewCount);\r\n break;\r\n default:\r\n // Keep original order for relevance\r\n break;\r\n }\r\n\r\n return filtered;\r\n }, [productsData, searchQuery, filters, sortBy]);\r\n\r\n // Paginate products\r\n const paginatedProducts = useMemo(() => {\r\n const startIndex = (currentPage - 1) * itemsPerPage;\r\n return filteredProducts.slice(startIndex, startIndex + itemsPerPage);\r\n }, [filteredProducts, currentPage]);\r\n\r\n const totalPages = Math.ceil(filteredProducts.length / itemsPerPage);\r\n\r\n const handleFilterChange = (filterType: keyof FilterOptions, value: any) => {\r\n const newFilters = {\r\n ...filters,\r\n [filterType]: value,\r\n };\r\n onFiltersChange(newFilters);\r\n setCurrentPage(1); // Reset to first page when filters change\r\n };\r\n\r\n const handleClearFilters = () => {\r\n onClearFilters();\r\n setCurrentPage(1);\r\n };\r\n\r\n const toggleWishlist = (productId: string) => {\r\n setWishlist(prev => {\r\n const newWishlist = new Set(prev);\r\n if (newWishlist.has(productId)) {\r\n newWishlist.delete(productId);\r\n showToast.info('Removed from wishlist');\r\n } else {\r\n newWishlist.add(productId);\r\n showToast.success('Added to wishlist');\r\n }\r\n return newWishlist;\r\n });\r\n };\r\n\r\n const handleAddToCart = (product: Product) => {\r\n onAddToCart?.(product);\r\n showToast.success(`${product.name} added to cart!`);\r\n };\r\n\r\n // Remove local ProductCard in favor of reusable ProductCard\r\n\r\n return (\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\">\r\n {/* Header */}\r\n <div className=\"flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between mb-8\">\r\n <div>\r\n <h1 className=\"text-3xl font-bold text-gray-900 mb-2\">All Products</h1>\r\n <p className=\"text-gray-600\">\r\n Showing {filteredProducts.length} of {productsData.length} products\r\n </p>\r\n </div>\r\n \r\n {/* Search and Controls */}\r\n <MarketplaceControls\r\n searchQuery={searchQuery}\r\n onSearchChange={setSearchQuery ? setSearchQuery : () => {}}\r\n shouldFocusSearch={shouldFocusSearch}\r\n sortBy={sortBy}\r\n onSortChange={setSortBy}\r\n viewMode={viewMode}\r\n onViewModeChange={setViewMode}\r\n onShowFilters={() => setShowFilters(true)}\r\n sortOptions={sortOptions}\r\n />\r\n </div>\r\n\r\n <div className=\"flex gap-8\">\r\n\r\n {/* Products Grid */}\r\n <div className=\"flex-1\">\r\n {paginatedProducts.length === 0 ? (\r\n <div className=\"text-center py-12\">\r\n <div className=\"text-gray-400 mb-4\">\r\n <Search className=\"h-16 w-16 mx-auto\" />\r\n </div>\r\n <h3 className=\"text-lg font-medium text-gray-900 mb-2\">No products found</h3>\r\n <p className=\"text-gray-600 mb-4\">\r\n Try adjusting your search or filter criteria\r\n </p>\r\n <Button variant=\"outline\" onClick={handleClearFilters}>\r\n Clear Filters\r\n </Button>\r\n </div>\r\n ) : (\r\n <>\r\n <div className={`grid gap-3 sm:gap-6 ${\r\n viewMode === 'grid'\r\n ? 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4'\r\n : 'grid-cols-1'\r\n }`}>\r\n {paginatedProducts.map((product: Product) => (\r\n <div className=\"w-full max-w-xs mx-auto sm:max-w-none\" key={product.id}>\r\n <ProductCard\r\n product={product}\r\n onProductClick={onProductClick}\r\n onAddToCart={handleAddToCart}\r\n onQuickView={() => setQuickViewProduct(product)}\r\n onToggleWishlist={toggleWishlist}\r\n isWishlisted={wishlist.has(product.id)}\r\n showQuickActions={true}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Pagination */}\r\n {totalPages > 1 && (\r\n <div className=\"flex flex-wrap items-center justify-center gap-2 mt-8 sm:mt-12\">\r\n <Button\r\n variant=\"outline\"\r\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\r\n disabled={currentPage === 1}\r\n >\r\n Previous\r\n </Button>\r\n \r\n {Array.from({ length: Math.min(5, totalPages) }, (_, i) => {\r\n const page = i + 1;\r\n return (\r\n <Button\r\n key={page}\r\n variant={currentPage === page ? 'primary' : 'outline'}\r\n onClick={() => setCurrentPage(page)}\r\n >\r\n {page}\r\n </Button>\r\n );\r\n })}\r\n \r\n <Button\r\n variant=\"outline\"\r\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\r\n disabled={currentPage === totalPages}\r\n >\r\n Next\r\n </Button>\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Mobile Filters Modal */}\r\n <Modal open={showFilters} onOpenChange={setShowFilters}>\r\n <ModalHeader>\r\n <ModalTitle>Filters</ModalTitle>\r\n </ModalHeader>\r\n <ModalContent>\r\n {/* Same filter content as sidebar but in modal */}\r\n <div className=\"space-y-6\">\r\n {/* Categories */}\r\n <div>\r\n <h4 className=\"font-medium text-gray-900 mb-3\">Categories</h4>\r\n <div className=\"space-y-2\">\r\n {(filterOptions.categories as string[]).map((category, idx) => (\r\n <label key={category} className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={filters.categories.includes(category)}\r\n onChange={(e) => {\r\n const alreadyChecked = filters.categories.includes(category);\r\n const newCategories = e.target.checked\r\n ? alreadyChecked\r\n ? filters.categories\r\n : [...filters.categories, category]\r\n : filters.categories.filter((c: string) => c !== category);\r\n handleFilterChange('categories', newCategories);\r\n }}\r\n />\r\n <span className=\"text-sm text-gray-700\">{category}</span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n {/* Brands */}\r\n <div>\r\n <h4 className=\"font-medium text-gray-900 mb-3\">Brands</h4>\r\n <div className=\"space-y-2\">\r\n {(filterOptions.brands as string[]).map((brand, idx) => (\r\n <label key={brand} className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={filters.brands.includes(brand)}\r\n onChange={(e) => {\r\n const alreadyChecked = filters.brands.includes(brand);\r\n const newBrands = e.target.checked\r\n ? alreadyChecked\r\n ? filters.brands\r\n : [...filters.brands, brand]\r\n : filters.brands.filter((b: string) => b !== brand);\r\n handleFilterChange('brands', newBrands);\r\n }}\r\n />\r\n <span className=\"text-sm text-gray-700\">{brand}</span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n {/* Vendors */}\r\n <div>\r\n <h4 className=\"font-medium text-gray-900 mb-3\">Vendors</h4>\r\n <div className=\"space-y-2\">\r\n {(filterOptions.vendors as string[]).map((vendor, idx) => (\r\n <label key={vendor} className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={filters.vendors.includes(vendor)}\r\n onChange={(e) => {\r\n const alreadyChecked = filters.vendors.includes(vendor);\r\n const newVendors = e.target.checked\r\n ? alreadyChecked\r\n ? filters.vendors\r\n : [...filters.vendors, vendor]\r\n : filters.vendors.filter((v: string) => v !== vendor);\r\n handleFilterChange('vendors', newVendors);\r\n }}\r\n />\r\n <span className=\"text-sm text-gray-700\">{vendor}</span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </ModalContent>\r\n <ModalFooter>\r\n <Button variant=\"outline\" onClick={handleClearFilters}>\r\n Clear All\r\n </Button>\r\n <Button variant=\"primary\" onClick={() => setShowFilters(false)}>\r\n Apply Filters\r\n </Button>\r\n </ModalFooter>\r\n </Modal>\r\n\r\n {/* Quick View Modal */}\r\n <Modal open={!!quickViewProduct} onOpenChange={() => setQuickViewProduct(null)} size=\"lg\">\r\n {quickViewProduct && (\r\n <>\r\n <ModalHeader>\r\n <ModalTitle>{quickViewProduct.name}</ModalTitle>\r\n </ModalHeader>\r\n <ModalContent>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\r\n <div className=\"aspect-square bg-gray-100 rounded-lg overflow-hidden\">\r\n <img\r\n src={quickViewProduct.images[0]}\r\n alt={quickViewProduct.name}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n </div>\r\n <div>\r\n <div className=\"flex items-center space-x-1 mb-2\">\r\n <Star className=\"h-4 w-4 text-yellow-400 fill-current\" />\r\n <span className=\"text-sm text-gray-600\">\r\n {quickViewProduct.rating} ({quickViewProduct.reviewCount} reviews)\r\n </span>\r\n </div>\r\n <div className=\"flex items-center space-x-2 mb-4\">\r\n <span className=\"text-2xl font-bold text-gray-900\">\r\n ${quickViewProduct.price.toFixed(2)}\r\n </span>\r\n {quickViewProduct.originalPrice && (\r\n <span className=\"text-lg text-gray-500 line-through\">\r\n ${quickViewProduct.originalPrice.toFixed(2)}\r\n </span>\r\n )}\r\n </div>\r\n <p className=\"text-gray-600 mb-4\">{quickViewProduct.description}</p>\r\n <Badge variant={quickViewProduct.inStock ? 'success' : 'danger'} className=\"mb-4\">\r\n {quickViewProduct.inStock ? 'In Stock' : 'Out of Stock'}\r\n </Badge>\r\n </div>\r\n </div>\r\n </ModalContent>\r\n <ModalFooter>\r\n <Button variant=\"outline\" onClick={() => onProductClick?.(quickViewProduct)}>\r\n View Details\r\n </Button>\r\n <Button \r\n variant=\"primary\" \r\n onClick={() => handleAddToCart(quickViewProduct)}\r\n disabled={!quickViewProduct.inStock}\r\n >\r\n <ShoppingCart className=\"mr-2 h-4 w-4\" />\r\n Add to Cart\r\n </Button>\r\n </ModalFooter>\r\n </>\r\n )}\r\n </Modal>\r\n </div>\r\n );\r\n};"],"names":["_jsxs","_jsx","_Fragment"],"mappings":";;;;;;;;;;;;AAwBA,MAAM,WAAW,GAAiB;AAChC,IAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE;AAC9C,IAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,EAAE;AACnD,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB,EAAE;AACpD,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE;AAC3C,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE;AAC1C,IAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE;CAC5C;AAEM,MAAM,eAAe,GAAmC,CAAC,EAC9D,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,eAAe,EACf,cAAc,GACf,KAAI;AACH,IAAA,MAAM,YAAY,GAAG,QAAQ,IAAI,cAAc;IAC/C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC;IACjD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAkB,MAAM,CAAC;IACjE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACrD,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAiB,IAAI,CAAC;AAC9E,IAAA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAc,IAAI,GAAG,EAAE,CAAC;;IAGhE,MAAM,OAAO,GAAG,WAAW;IAE3B,MAAM,YAAY,GAAG,EAAE;;AAGvB,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;QACjC,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAU,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAU,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAU,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAE7E,QAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;AACxC,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;;AAGlB,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAK;QACpC,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,OAAgB,KAAI;;AAEtD,YAAA,IAAI,WAAW,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC9E,gBAAA,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE;AAC1E,gBAAA,OAAO,KAAK;YACd;;YAGA,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACnF,gBAAA,OAAO,KAAK;YACd;;YAGA,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxE,gBAAA,OAAO,KAAK;YACd;;YAGA,IAAI,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AAClF,gBAAA,OAAO,KAAK;YACd;;AAGA,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE;AACzD,gBAAA,OAAO,KAAK;YACd;;YAGA,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACvC,gBAAA,OAAO,KAAK;YACd;;YAGA,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAChF,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;;QAGF,QAAQ,MAAM;AACZ,YAAA,KAAK,WAAW;AACd,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;gBAC5D;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;gBAC5D;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;gBAC9D;AACF,YAAA,KAAK,QAAQ;;gBAEX,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,CAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1E;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;gBACxE;;AAMJ,QAAA,OAAO,QAAQ;IACjB,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;;AAGhD,IAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAK;QACrC,MAAM,UAAU,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,YAAY;QACnD,OAAO,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,YAAY,CAAC;AACtE,IAAA,CAAC,EAAE,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;AAEnC,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,YAAY,CAAC;AAEpE,IAAA,MAAM,kBAAkB,GAAG,CAAC,UAA+B,EAAE,KAAU,KAAI;AACzE,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,GAAG,OAAO;YACV,CAAC,UAAU,GAAG,KAAK;SACpB;QACD,eAAe,CAAC,UAAU,CAAC;AAC3B,QAAA,cAAc,CAAC,CAAC,CAAC,CAAC;AACpB,IAAA,CAAC;IAED,MAAM,kBAAkB,GAAG,MAAK;AAC9B,QAAA,cAAc,EAAE;QAChB,cAAc,CAAC,CAAC,CAAC;AACnB,IAAA,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,CAAC,SAAiB,KAAI;QAC3C,WAAW,CAAC,IAAI,IAAG;AACjB,YAAA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAC9B,gBAAA,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;AAC7B,gBAAA,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC;YACzC;iBAAO;AACL,gBAAA,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;AAC1B,gBAAA,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC;YACxC;AACA,YAAA,OAAO,WAAW;AACpB,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,MAAM,eAAe,GAAG,CAAC,OAAgB,KAAI;AAC3C,QAAA,WAAW,GAAG,OAAO,CAAC;QACtB,SAAS,CAAC,OAAO,CAAC,CAAA,EAAG,OAAO,CAAC,IAAI,CAAA,eAAA,CAAiB,CAAC;AACrD,IAAA,CAAC;;AAID,IAAA,QACEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6CAA6C,aAE1DA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yEAAyE,aACtFA,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEC,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,uCAAuC,6BAAkB,EACvED,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,eAAe,EAAA,QAAA,EAAA,CAAA,UAAA,EACjB,gBAAgB,CAAC,MAAM,UAAM,YAAY,CAAC,MAAM,EAAA,WAAA,CAAA,EAAA,CACvD,IACA,EAGNC,GAAA,CAAC,mBAAmB,EAAA,EAClB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,GAAG,cAAc,GAAG,QAAO,CAAC,EAC1D,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,SAAS,EACvB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,WAAW,EAC7B,aAAa,EAAE,MAAM,cAAc,CAAC,IAAI,CAAC,EACzC,WAAW,EAAE,WAAW,EAAA,CACxB,IACE,EAENA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,YAAY,EAAA,QAAA,EAGzBA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,QAAQ,YACpB,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAC7BD,cAAK,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAA,CAChCC,aAAK,SAAS,EAAC,oBAAoB,EAAA,QAAA,EACjCA,GAAA,CAAC,MAAM,EAAA,EAAC,SAAS,EAAC,mBAAmB,GAAG,EAAA,CACpC,EACNA,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,wCAAwC,EAAA,QAAA,EAAA,mBAAA,EAAA,CAAuB,EAC7EA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,6DAE7B,EACJA,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,CAE5C,CAAA,EAAA,CACL,KAEND,4BACEC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,oBAAA,EACd,QAAQ,KAAK;AACX,sCAAE;AACF,sCAAE,aACN,CAAA,CAAE,EAAA,QAAA,EACC,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAgB,MACtCA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACpDA,GAAA,CAAC,WAAW,EAAA,EACV,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,eAAe,EAC5B,WAAW,EAAE,MAAM,mBAAmB,CAAC,OAAO,CAAC,EAC/C,gBAAgB,EAAE,cAAc,EAChC,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EACtC,gBAAgB,EAAE,IAAI,EAAA,CACtB,EAAA,EATwD,OAAO,CAAC,EAAE,CAUhE,CACP,CAAC,EAAA,CACE,EAGL,UAAU,GAAG,CAAC,KACbD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gEAAgE,EAAA,QAAA,EAAA,CAC7EC,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,MAAM,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,EAC5D,QAAQ,EAAE,WAAW,KAAK,CAAC,EAAA,QAAA,EAAA,UAAA,EAAA,CAGpB,EAER,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACxD,wCAAA,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC;AAClB,wCAAA,QACEA,GAAA,CAAC,MAAM,EAAA,EAEL,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,SAAS,GAAG,SAAS,EACrD,OAAO,EAAE,MAAM,cAAc,CAAC,IAAI,CAAC,YAElC,IAAI,EAAA,EAJA,IAAI,CAKF;oCAEb,CAAC,CAAC,EAEFA,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,MAAM,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,EACrE,QAAQ,EAAE,WAAW,KAAK,UAAU,EAAA,QAAA,EAAA,MAAA,EAAA,CAG7B,CAAA,EAAA,CACL,CACP,CAAA,EAAA,CACA,CACJ,EAAA,CACG,EAAA,CACF,EAGND,IAAA,CAAC,KAAK,EAAA,EAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAA,QAAA,EAAA,CACpDC,GAAA,CAAC,WAAW,EAAA,EAAA,QAAA,EACVA,GAAA,CAAC,UAAU,0BAAqB,EAAA,CACpB,EACdA,GAAA,CAAC,YAAY,EAAA,EAAA,QAAA,EAEXD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CAExBA,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEC,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAAA,YAAA,EAAA,CAAgB,EAC9DA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACtB,aAAa,CAAC,UAAuB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,MACxDD,IAAA,CAAA,OAAA,EAAA,EAAsB,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC3DC,GAAA,CAAC,QAAQ,EAAA,EACP,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC9C,QAAQ,EAAE,CAAC,CAAC,KAAI;4DACd,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC5D,4DAAA,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;AAC7B,kEAAE;sEACE,OAAO,CAAC;sEACR,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ;AACpC,kEAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAS,KAAK,CAAC,KAAK,QAAQ,CAAC;AAC5D,4DAAA,kBAAkB,CAAC,YAAY,EAAE,aAAa,CAAC;AACjD,wDAAA,CAAC,EAAA,CACD,EACFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAE,QAAQ,EAAA,CAAQ,CAAA,EAAA,EAb/C,QAAQ,CAcZ,CACT,CAAC,EAAA,CACE,CAAA,EAAA,CACF,EAEND,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEC,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAAA,QAAA,EAAA,CAAY,EAC1DA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACtB,aAAa,CAAC,MAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,MACjDD,IAAA,CAAA,OAAA,EAAA,EAAmB,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CACxDC,IAAC,QAAQ,EAAA,EACP,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EACvC,QAAQ,EAAE,CAAC,CAAC,KAAI;4DACd,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AACrD,4DAAA,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;AACzB,kEAAE;sEACE,OAAO,CAAC;sEACR,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK;AAC7B,kEAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAS,KAAK,CAAC,KAAK,KAAK,CAAC;AACrD,4DAAA,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC;AACzC,wDAAA,CAAC,EAAA,CACD,EACFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAE,KAAK,EAAA,CAAQ,CAAA,EAAA,EAb5C,KAAK,CAcT,CACT,CAAC,EAAA,CACE,CAAA,EAAA,CACF,EAEND,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEC,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAAA,SAAA,EAAA,CAAa,EAC3DA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACtB,aAAa,CAAC,OAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,MACnDD,IAAA,CAAA,OAAA,EAAA,EAAoB,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CACzDC,IAAC,QAAQ,EAAA,EACP,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EACzC,QAAQ,EAAE,CAAC,CAAC,KAAI;4DACd,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AACvD,4DAAA,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;AAC1B,kEAAE;sEACE,OAAO,CAAC;sEACR,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM;AAC/B,kEAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAS,KAAK,CAAC,KAAK,MAAM,CAAC;AACvD,4DAAA,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC;AAC3C,wDAAA,CAAC,EAAA,CACD,EACFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAE,MAAM,EAAA,CAAQ,KAb7C,MAAM,CAcV,CACT,CAAC,GACE,CAAA,EAAA,CACF,CAAA,EAAA,CACF,EAAA,CACO,EACfD,IAAA,CAAC,WAAW,EAAA,EAAA,QAAA,EAAA,CACVC,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,kBAAkB,EAAA,QAAA,EAAA,WAAA,EAAA,CAE5C,EACTA,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,EAAA,QAAA,EAAA,eAAA,EAAA,CAErD,CAAA,EAAA,CACG,IACR,EAGRA,GAAA,CAAC,KAAK,EAAA,EAAC,IAAI,EAAE,CAAC,CAAC,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAC,IAAI,EAAA,QAAA,EACtF,gBAAgB,KACfD,IAAA,CAAAE,QAAA,EAAA,EAAA,QAAA,EAAA,CACED,IAAC,WAAW,EAAA,EAAA,QAAA,EACVA,GAAA,CAAC,UAAU,cAAE,gBAAgB,CAAC,IAAI,EAAA,CAAc,GACpC,EACdA,GAAA,CAAC,YAAY,EAAA,EAAA,QAAA,EACXD,cAAK,SAAS,EAAC,uCAAuC,EAAA,QAAA,EAAA,CACpDC,aAAK,SAAS,EAAC,sDAAsD,EAAA,QAAA,EACnEA,aACE,GAAG,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAC/B,GAAG,EAAE,gBAAgB,CAAC,IAAI,EAC1B,SAAS,EAAC,4BAA4B,GACtC,EAAA,CACE,EACND,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAA,CAC/CC,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,sCAAsC,GAAG,EACzDD,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpC,gBAAgB,CAAC,MAAM,QAAI,gBAAgB,CAAC,WAAW,EAAA,WAAA,CAAA,EAAA,CACnD,CAAA,EAAA,CACH,EACNA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAA,CAC/CA,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAA,CAAA,GAAA,EAC9C,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAC9B,EACN,gBAAgB,CAAC,aAAa,KAC7BA,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,oCAAoC,EAAA,QAAA,EAAA,CAAA,GAAA,EAChD,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CACtC,CACR,IACG,EACNC,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAE,gBAAgB,CAAC,WAAW,GAAK,EACpEA,GAAA,CAAC,KAAK,EAAA,EAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,GAAG,SAAS,GAAG,QAAQ,EAAE,SAAS,EAAC,MAAM,EAAA,QAAA,EAC9E,gBAAgB,CAAC,OAAO,GAAG,UAAU,GAAG,cAAc,GACjD,CAAA,EAAA,CACJ,CAAA,EAAA,CACF,EAAA,CACO,EACfD,KAAC,WAAW,EAAA,EAAA,QAAA,EAAA,CACVC,GAAA,CAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,MAAM,cAAc,GAAG,gBAAgB,CAAC,6BAElE,EACTD,IAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,MAAM,eAAe,CAAC,gBAAgB,CAAC,EAChD,QAAQ,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAA,QAAA,EAAA,CAEnCC,GAAA,CAAC,YAAY,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAAA,aAAA,CAAA,EAAA,CAElC,IACG,CAAA,EAAA,CACb,CACJ,EAAA,CACK,CAAA,EAAA,CACJ;AAEV;;;;"}
1
+ {"version":3,"file":"AllProductsView.js","sources":["../../../src/components/Marketplace/AllProductsView.tsx"],"sourcesContent":["import React, { useState, useMemo } from 'react';\nimport { Search, Filter, Grid2x2 as Grid, List, Star, ShoppingCart } from 'lucide-react';\nimport { MarketplaceControls } from './components/MarketplaceControls';\nimport { Button } from '../Button';\nimport { Badge } from '../Badge';\nimport { Modal, ModalHeader, ModalTitle, ModalContent, ModalFooter } from '../Modal';\nimport { Checkbox } from '../Checkbox';\nimport { showToast } from '../Toast';\nimport type { Product, FilterOptions, SortOption } from './types';\nimport { sampleProducts } from './data/sampleData';\nimport { ProductCard } from './components/ProductCard';\n\ninterface AllProductsViewProps {\n products?: Product[];\n filters: FilterOptions;\n searchQuery: string;\n setSearchQuery?: (query: string) => void;\n shouldFocusSearch?: boolean;\n onProductClick?: (product: Product) => void;\n onAddToCart?: (product: Product) => void;\n onFiltersChange: (filters: FilterOptions) => void;\n onClearFilters: () => void;\n}\n\nconst sortOptions: SortOption[] = [\n { value: 'relevance', label: 'Most Relevant' },\n { value: 'price-low', label: 'Price: Low to High' },\n { value: 'price-high', label: 'Price: High to Low' },\n { value: 'rating', label: 'Highest Rated' },\n { value: 'newest', label: 'Newest First' },\n { value: 'popular', label: 'Most Popular' },\n];\n\nexport const AllProductsView: React.FC<AllProductsViewProps> = ({\n products,\n filters: filtersProp,\n searchQuery,\n setSearchQuery,\n shouldFocusSearch,\n onProductClick,\n onAddToCart,\n onFiltersChange,\n onClearFilters,\n}) => {\n const productsData = products ?? sampleProducts;\n const [sortBy, setSortBy] = useState('relevance');\n const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid');\n const [currentPage, setCurrentPage] = useState(1);\n const [showFilters, setShowFilters] = useState(false);\n const [quickViewProduct, setQuickViewProduct] = useState<Product | null>(null);\n const [wishlist, setWishlist] = useState<Set<string>>(new Set());\n\n // Use filters and handlers from props only\n const filters = filtersProp;\n\n const itemsPerPage = 12;\n\n // Get unique filter options from products\n const filterOptions = useMemo(() => {\n const categories = [...new Set(productsData.map((p: Product) => p.category))];\n const brands = [...new Set(productsData.map((p: Product) => p.brand))];\n const vendors = [...new Set(productsData.map((p: Product) => p.vendor.name))];\n\n return { categories, brands, vendors };\n }, [productsData]);\n\n // Filter and sort products\n const filteredProducts = useMemo(() => {\n let filtered = productsData.filter((product: Product) => {\n // Search query\n if (searchQuery && !product.name.toLowerCase().includes(searchQuery.toLowerCase()) &&\n !product.description.toLowerCase().includes(searchQuery.toLowerCase())) {\n return false;\n }\n\n // Category filter\n if (filters.categories.length > 0 && !filters.categories.includes(product.category)) {\n return false;\n }\n\n // Brand filter\n if (filters.brands.length > 0 && !filters.brands.includes(product.brand)) {\n return false;\n }\n\n // Price range\n if (product.price < filters.priceRange[0] || product.price > filters.priceRange[1]) {\n return false;\n }\n\n // Rating filter\n if (filters.rating > 0 && product.rating < filters.rating) {\n return false;\n }\n\n // In stock filter\n if (filters.inStock && !product.inStock) {\n return false;\n }\n\n // Vendor filter\n if (filters.vendors.length > 0 && !filters.vendors.includes(product.vendor.name)) {\n return false;\n }\n\n return true;\n });\n\n // Sort products\n switch (sortBy) {\n case 'price-low':\n filtered.sort((a: Product, b: Product) => a.price - b.price);\n break;\n case 'price-high':\n filtered.sort((a: Product, b: Product) => b.price - a.price);\n break;\n case 'rating':\n filtered.sort((a: Product, b: Product) => b.rating - a.rating);\n break;\n case 'newest':\n // Assuming newer products have higher IDs\n filtered.sort((a: Product, b: Product) => parseInt(b.id) - parseInt(a.id));\n break;\n case 'popular':\n filtered.sort((a: Product, b: Product) => b.reviewCount - a.reviewCount);\n break;\n default:\n // Keep original order for relevance\n break;\n }\n\n return filtered;\n }, [productsData, searchQuery, filters, sortBy]);\n\n // Paginate products\n const paginatedProducts = useMemo(() => {\n const startIndex = (currentPage - 1) * itemsPerPage;\n return filteredProducts.slice(startIndex, startIndex + itemsPerPage);\n }, [filteredProducts, currentPage]);\n\n const totalPages = Math.ceil(filteredProducts.length / itemsPerPage);\n\n const handleFilterChange = (filterType: keyof FilterOptions, value: any) => {\n const newFilters = {\n ...filters,\n [filterType]: value,\n };\n onFiltersChange(newFilters);\n setCurrentPage(1); // Reset to first page when filters change\n };\n\n const handleClearFilters = () => {\n onClearFilters();\n setCurrentPage(1);\n };\n\n const toggleWishlist = (productId: string) => {\n setWishlist(prev => {\n const newWishlist = new Set(prev);\n if (newWishlist.has(productId)) {\n newWishlist.delete(productId);\n showToast.info('Removed from wishlist');\n } else {\n newWishlist.add(productId);\n showToast.success('Added to wishlist');\n }\n return newWishlist;\n });\n };\n\n const handleAddToCart = (product: Product) => {\n onAddToCart?.(product);\n showToast.success(`${product.name} added to cart!`);\n };\n\n // Remove local ProductCard in favor of reusable ProductCard\n\n return (\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\">\n {/* Header */}\n <div className=\"flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between mb-8\">\n <div>\n <h1 className=\"text-3xl font-bold text-gray-900 mb-2\">All Products</h1>\n <p className=\"text-gray-600\">\n Showing {filteredProducts.length} of {productsData.length} products\n </p>\n </div>\n \n {/* Search and Controls */}\n <MarketplaceControls\n searchQuery={searchQuery}\n onSearchChange={setSearchQuery ? setSearchQuery : () => {}}\n shouldFocusSearch={shouldFocusSearch}\n sortBy={sortBy}\n onSortChange={setSortBy}\n viewMode={viewMode}\n onViewModeChange={setViewMode}\n onShowFilters={() => setShowFilters(true)}\n sortOptions={sortOptions}\n />\n </div>\n\n <div className=\"flex gap-8\">\n\n {/* Products Grid */}\n <div className=\"flex-1\">\n {paginatedProducts.length === 0 ? (\n <div className=\"text-center py-12\">\n <div className=\"text-gray-400 mb-4\">\n <Search className=\"h-16 w-16 mx-auto\" />\n </div>\n <h3 className=\"text-lg font-medium text-gray-900 mb-2\">No products found</h3>\n <p className=\"text-gray-600 mb-4\">\n Try adjusting your search or filter criteria\n </p>\n <Button variant=\"outline\" onClick={handleClearFilters}>\n Clear Filters\n </Button>\n </div>\n ) : (\n <>\n <div className={`grid gap-3 sm:gap-6 ${\n viewMode === 'grid'\n ? 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4'\n : 'grid-cols-1'\n }`}>\n {paginatedProducts.map((product: Product) => (\n <div className=\"w-full max-w-xs mx-auto sm:max-w-none\" key={product.id}>\n <ProductCard\n product={product}\n onProductClick={onProductClick}\n onAddToCart={handleAddToCart}\n onQuickView={() => setQuickViewProduct(product)}\n onToggleWishlist={toggleWishlist}\n isWishlisted={wishlist.has(product.id)}\n showQuickActions={true}\n />\n </div>\n ))}\n </div>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <div className=\"flex flex-wrap items-center justify-center gap-2 mt-8 sm:mt-12\">\n <Button\n variant=\"outline\"\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\n disabled={currentPage === 1}\n >\n Previous\n </Button>\n \n {Array.from({ length: Math.min(5, totalPages) }, (_, i) => {\n const page = i + 1;\n return (\n <Button\n key={page}\n variant={currentPage === page ? 'primary' : 'outline'}\n onClick={() => setCurrentPage(page)}\n >\n {page}\n </Button>\n );\n })}\n \n <Button\n variant=\"outline\"\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\n disabled={currentPage === totalPages}\n >\n Next\n </Button>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n\n {/* Mobile Filters Modal */}\n <Modal open={showFilters} onOpenChange={setShowFilters}>\n <ModalHeader>\n <ModalTitle>Filters</ModalTitle>\n </ModalHeader>\n <ModalContent>\n {/* Same filter content as sidebar but in modal */}\n <div className=\"space-y-6\">\n {/* Categories */}\n <div>\n <h4 className=\"font-medium text-gray-900 mb-3\">Categories</h4>\n <div className=\"space-y-2\">\n {(filterOptions.categories as string[]).map((category, idx) => (\n <label key={category} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.categories.includes(category)}\n onChange={(e) => {\n const alreadyChecked = filters.categories.includes(category);\n const newCategories = e.target.checked\n ? alreadyChecked\n ? filters.categories\n : [...filters.categories, category]\n : filters.categories.filter((c: string) => c !== category);\n handleFilterChange('categories', newCategories);\n }}\n />\n <span className=\"text-sm text-gray-700\">{category}</span>\n </label>\n ))}\n </div>\n </div>\n {/* Brands */}\n <div>\n <h4 className=\"font-medium text-gray-900 mb-3\">Brands</h4>\n <div className=\"space-y-2\">\n {(filterOptions.brands as string[]).map((brand, idx) => (\n <label key={brand} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.brands.includes(brand)}\n onChange={(e) => {\n const alreadyChecked = filters.brands.includes(brand);\n const newBrands = e.target.checked\n ? alreadyChecked\n ? filters.brands\n : [...filters.brands, brand]\n : filters.brands.filter((b: string) => b !== brand);\n handleFilterChange('brands', newBrands);\n }}\n />\n <span className=\"text-sm text-gray-700\">{brand}</span>\n </label>\n ))}\n </div>\n </div>\n {/* Vendors */}\n <div>\n <h4 className=\"font-medium text-gray-900 mb-3\">Vendors</h4>\n <div className=\"space-y-2\">\n {(filterOptions.vendors as string[]).map((vendor, idx) => (\n <label key={vendor} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.vendors.includes(vendor)}\n onChange={(e) => {\n const alreadyChecked = filters.vendors.includes(vendor);\n const newVendors = e.target.checked\n ? alreadyChecked\n ? filters.vendors\n : [...filters.vendors, vendor]\n : filters.vendors.filter((v: string) => v !== vendor);\n handleFilterChange('vendors', newVendors);\n }}\n />\n <span className=\"text-sm text-gray-700\">{vendor}</span>\n </label>\n ))}\n </div>\n </div>\n </div>\n </ModalContent>\n <ModalFooter>\n <Button variant=\"outline\" onClick={handleClearFilters}>\n Clear All\n </Button>\n <Button variant=\"primary\" onClick={() => setShowFilters(false)}>\n Apply Filters\n </Button>\n </ModalFooter>\n </Modal>\n\n {/* Quick View Modal */}\n <Modal open={!!quickViewProduct} onOpenChange={() => setQuickViewProduct(null)} size=\"lg\">\n {quickViewProduct && (\n <>\n <ModalHeader>\n <ModalTitle>{quickViewProduct.name}</ModalTitle>\n </ModalHeader>\n <ModalContent>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div className=\"aspect-square bg-gray-100 rounded-lg overflow-hidden\">\n <img\n src={quickViewProduct.images[0]}\n alt={quickViewProduct.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <div>\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 {quickViewProduct.rating} ({quickViewProduct.reviewCount} reviews)\n </span>\n </div>\n <div className=\"flex items-center space-x-2 mb-4\">\n <span className=\"text-2xl font-bold text-gray-900\">\n ${quickViewProduct.price.toFixed(2)}\n </span>\n {quickViewProduct.originalPrice && (\n <span className=\"text-lg text-gray-500 line-through\">\n ${quickViewProduct.originalPrice.toFixed(2)}\n </span>\n )}\n </div>\n <p className=\"text-gray-600 mb-4\">{quickViewProduct.description}</p>\n <Badge variant={quickViewProduct.inStock ? 'success' : 'danger'} className=\"mb-4\">\n {quickViewProduct.inStock ? 'In Stock' : 'Out of Stock'}\n </Badge>\n </div>\n </div>\n </ModalContent>\n <ModalFooter>\n <Button variant=\"outline\" onClick={() => onProductClick?.(quickViewProduct)}>\n View Details\n </Button>\n <Button \n variant=\"primary\" \n onClick={() => handleAddToCart(quickViewProduct)}\n disabled={!quickViewProduct.inStock}\n >\n <ShoppingCart className=\"mr-2 h-4 w-4\" />\n Add to Cart\n </Button>\n </ModalFooter>\n </>\n )}\n </Modal>\n </div>\n );\n};"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
@@ -1 +1 @@
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
+ {"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 { CheckoutComponent } from './CheckoutComponent';\nimport { Modal } from '../Modal/Modal';\nimport { useMarketplaceState } from './hooks/useMarketplaceState';\nimport { useCart } from './hooks/useCart';\nimport { useProductNavigation } from './hooks/useProductNavigation';\nimport { useSearch } from './hooks/useSearch';\nimport { useBreakpoint } from '../../hooks/useBreakpoint';\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 // Responsive sidebar initial state (mobile = collapsed)\n const { currentBreakpoint, isBelow } = useBreakpoint();\n const [sidebarInitialized, setSidebarInitialized] = React.useState(false);\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 // On mount, collapse sidebar if mobile and not already initialized\n React.useEffect(() => {\n if (!sidebarInitialized && isBelow('md')) {\n setSidebarCollapsed(true);\n setSidebarInitialized(true);\n } else if (!sidebarInitialized) {\n setSidebarInitialized(true);\n }\n }, [sidebarInitialized, isBelow, setSidebarCollapsed]);\n\n // State for full checkout modal\n const [showFullCheckoutModal, setShowFullCheckoutModal] = React.useState(false);\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 // State for mobile sidebar modal\n const [showMobileSidebar, setShowMobileSidebar] = React.useState(false);\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 {/* Floating Filters Button for Mobile (removed as per user feedback) */}\n\n {/* Mobile Sidebar Modal */}\n <Modal\n open={showMobileSidebar}\n onOpenChange={setShowMobileSidebar}\n size=\"full\"\n >\n <div className=\"h-full w-full bg-background overflow-y-auto p-4\">\n <MarketplaceSidebar\n filters={filters}\n onFiltersChange={onFiltersChange ?? setFilters}\n onClearFilters={onClearFilters ?? resetFilters}\n collapsed={false}\n onToggleCollapse={() => setShowMobileSidebar(false)}\n className=\"w-full max-w-md mx-auto\"\n />\n <div className=\"mt-6 flex justify-end gap-2\">\n <button\n className=\"px-4 py-2 rounded bg-secondary text-secondary-foreground\"\n onClick={() => {\n (onClearFilters ?? resetFilters)();\n }}\n >\n Clear All\n </button>\n <button\n className=\"px-4 py-2 rounded bg-primary text-primary-foreground\"\n onClick={() => setShowMobileSidebar(false)}\n >\n Apply Filters\n </button>\n </div>\n </div>\n </Modal>\n\n <div className={`w-full ${!isBelow('lg') ? 'flex' : ''}`}>\n {/* Sidebar: Only render on desktop/tablet */}\n {(!isBelow('lg') && (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: Always full width on mobile */}\n <main className={`relative p-6 ${isBelow('lg') ? 'w-full' : 'flex-1'}`}>\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 searchQuery={searchQuery}\n onSearch={handleSearch}\n setCurrentView={setCurrentView}\n />\n )}\n \n {currentView === 'products' && (\n <AllProductsView\n onProductClick={navigateToProduct}\n onAddToCart={onAddToCart ?? addToCart}\n products={productsData}\n filters={filters}\n searchQuery={searchQuery}\n setSearchQuery={setSearchQuery}\n onFiltersChange={setFilters}\n onClearFilters={resetFilters}\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 onViewFullCheckout={() => {\n setShowFullCheckoutModal(true);\n setShowCheckout(false);\n }}\n />\n </div>\n )}\n\n {/* Full Checkout Modal */}\n <Modal\n open={showFullCheckoutModal}\n onOpenChange={(open) => setShowFullCheckoutModal(open)}\n size=\"xl\"\n >\n <CheckoutComponent\n cartItems={cartItems}\n onOrderComplete={() => {\n clearCart();\n setShowFullCheckoutModal(false);\n }}\n />\n </Modal>\n </div>\n </div>\n );\n};"],"names":["React","_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;AAgCA;;;AAGG;AACI,MAAM,oBAAoB,GAAwC,CAAC,EACxE,QAAQ,GAAG,OAAO,EAClB,QAAQ,EACR,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,WAAW,EACpB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,SAAS,GAAG,EAAE,GACf,KAAI;;IAEH,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE;AACtD,IAAA,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAGA,cAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGzE,IAAA,MAAM,EACJ,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,WAAW,EACX,SAAS,EAAE,cAAc,EACzB,YAAY,EACZ,OAAO,EAAE,YAAY,EACrB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,UAAU,EACV,aAAa,EACb,SAAS,EACT,YAAY,GACb,GAAG,mBAAmB,EAAE;;AAGzB,IAAAA,cAAK,CAAC,SAAS,CAAC,MAAK;QACnB,IAAI,CAAC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;YACxC,mBAAmB,CAAC,IAAI,CAAC;YACzB,qBAAqB,CAAC,IAAI,CAAC;QAC7B;aAAO,IAAI,CAAC,kBAAkB,EAAE;YAC9B,qBAAqB,CAAC,IAAI,CAAC;QAC7B;IACF,CAAC,EAAE,CAAC,kBAAkB,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;;AAGtD,IAAA,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAGA,cAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAI/E,IAAA,MAAM,eAAe,GAAc,QAAQ,IAAI,cAAc;AAC7D,IAAA,MAAM,YAAY,GAAc,KAAK,CAAC,OAAO,CAAC,eAAe;AAC3D,UAAE,eAAe,CAAC,GAAG,CAAC,eAAe;UACnC,EAAE;AACN,IAAA,MAAM,SAAS,GAAG,aAAa,IAAI,cAAc;AACjD,IAAA,MAAM,OAAO,GAAG,WAAW,IAAI,YAAY;;IAG3C,MAAM,EACJ,SAAS,EACT,cAAc,EACd,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,WAAW,GACZ,GAAG,OAAO,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;;IAGxC,MAAM,EACJ,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GACnB,GAAG,oBAAoB,CAAC;QACvB,kBAAkB;QAClB,cAAc;QACd,cAAc;AACf,KAAA,CAAC;;IAGF,MAAM,EACJ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,GAAG,SAAS,CAAC;AACZ,QAAA,QAAQ,EAAE,YAAY;QACtB,WAAW;QACX,cAAc;QACd,cAAc;AACf,KAAA,CAAC;;IAGF,MAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAChD,IAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE;;IAGxC,MAAM,eAAe,GAAG,MAAK;AAC3B,QAAA,eAAe,CAAC,CAAC,YAAY,CAAC;AAChC,IAAA,CAAC;AAED,IAAA,MAAM,sBAAsB,GAAG,CAAC,KAAY,KAAI;AAC9C,QAAA,SAAS,EAAE;QACX,eAAe,CAAC,KAAK,CAAC;AACxB,IAAA,CAAC;AAED,IAAA,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,QAAgB,KAAI;QAC1D,CAAC,WAAW,IAAI,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC;QAC7C,eAAe,CAAC,IAAI,CAAC;AACvB,IAAA,CAAC;;AAGD,IAAA,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAGA,cAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAEvE,QACEC,cAAK,SAAS,EAAE,2BAA2B,SAAS,CAAA,CAAE,EAAA,QAAA,EAAA,CAEpDC,GAAA,CAAC,iBAAiB,EAAA,EAChB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,YAAY,EAC5B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,eAAe,EAC5B,YAAY,EAAE,aAAa,EAC3B,QAAQ,EAAE,QAAQ,EAAA,CAClB,EAKFA,GAAA,CAAC,KAAK,EAAA,EACJ,IAAI,EAAE,iBAAiB,EACvB,YAAY,EAAE,oBAAoB,EAClC,IAAI,EAAC,MAAM,EAAA,QAAA,EAEXD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iDAAiD,EAAA,QAAA,EAAA,CAC9DC,GAAA,CAAC,kBAAkB,EAAA,EACjB,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,eAAe,IAAI,UAAU,EAC9C,cAAc,EAAE,cAAc,IAAI,YAAY,EAC9C,SAAS,EAAE,KAAK,EAChB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC,KAAK,CAAC,EACnD,SAAS,EAAC,yBAAyB,EAAA,CACnC,EACFD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC1CC,GAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,0DAA0D,EACpE,OAAO,EAAE,MAAK;AACZ,wCAAA,CAAC,cAAc,IAAI,YAAY,GAAG;oCACpC,CAAC,EAAA,QAAA,EAAA,WAAA,EAAA,CAGM,EACTA,GAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,sDAAsD,EAChE,OAAO,EAAE,MAAM,oBAAoB,CAAC,KAAK,CAAC,EAAA,QAAA,EAAA,eAAA,EAAA,CAGnC,CAAA,EAAA,CACL,IACF,EAAA,CACA,EAERD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,OAAA,EAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,EAAE,EAAE,EAAA,QAAA,EAAA,CAErD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,WAAW,KAAK,UAAU,IAAI,WAAW,KAAK,WAAW,CAAC,MAC7EC,GAAA,CAAC,kBAAkB,EAAA,EACjB,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,eAAe,IAAI,UAAU,EAC9C,cAAc,EAAE,cAAc,IAAI,YAAY,EAC9C,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,aAAa,GAC/B,CACH,EAGDD,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,CAAA,aAAA,EAAgB,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAA,CAAE,EAAA,QAAA,EAAA,CACnE,WAAW,KAAK,WAAW,KAC1BC,GAAA,CAAC,oBAAoB,EAAA,EACnB,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,iBAAiB,EACjC,WAAW,EAAE,WAAW,IAAI,SAAS,EACrC,iBAAiB,EAAE,kBAAkB,EACrC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,YAAY,EACtB,cAAc,EAAE,cAAc,EAAA,CAC9B,CACH,EAEA,WAAW,KAAK,UAAU,KACzBA,GAAA,CAAC,eAAe,EAAA,EACd,cAAc,EAAE,iBAAiB,EACjC,WAAW,EAAE,WAAW,IAAI,SAAS,EACrC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,UAAU,EAC3B,cAAc,EAAE,YAAY,EAAA,CAC5B,CACH,EAEA,WAAW,KAAK,SAAS,IAAI,eAAe,KAC3CA,GAAA,CAAC,iBAAiB,IAChB,OAAO,EACL,CAAC,MAAK;AACJ,oCAAA,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAU,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oCAC1G,IAAI,CAAC,KAAK,EAAE;wCACV,OAAO,CAAC,KAAK,CACX,gEAAgE,EAChE,eAAe,CAAC,EAAE,EAClB,gBAAgB,EAChB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAU,KAAK,CAAC,CAAC,EAAE,CAAC,CACvC;oCACH;AACA,oCAAA,OAAO,KAAK;gCACd,CAAC,GAAG,EAEN,WAAW,EAAE,WAAW,IAAI,SAAS,EACrC,QAAQ,EAAE,YAAY,EAAA,CACtB,CACH,IACI,EAGN,YAAY,KACXA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,2BAA2B,EAAA,QAAA,EACxCA,IAAC,eAAe,EAAA,EACd,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,eAAe,CAAC,KAAK,CAAC,EACrC,UAAU,EAAE,sBAAsB,EAClC,kBAAkB,EAAE,MAAK;gCACvB,wBAAwB,CAAC,IAAI,CAAC;gCAC9B,eAAe,CAAC,KAAK,CAAC;AACxB,4BAAA,CAAC,GACD,EAAA,CACE,CACP,EAGDA,GAAA,CAAC,KAAK,EAAA,EACJ,IAAI,EAAE,qBAAqB,EAC3B,YAAY,EAAE,CAAC,IAAI,KAAK,wBAAwB,CAAC,IAAI,CAAC,EACtD,IAAI,EAAC,IAAI,EAAA,QAAA,EAETA,GAAA,CAAC,iBAAiB,EAAA,EAChB,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,MAAK;AACpB,gCAAA,SAAS,EAAE;gCACX,wBAAwB,CAAC,KAAK,CAAC;AACjC,4BAAA,CAAC,EAAA,CACD,EAAA,CACI,CAAA,EAAA,CACJ,CAAA,EAAA,CACF;AAEV;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarketplaceSidebar.js","sources":["../../../src/components/Marketplace/MarketplaceSidebar.tsx"],"sourcesContent":["import React, { useState } from 'react';\r\nimport { ChevronDown, ChevronRight, Star, X, Filter, Sliders, Tag, Store, Grid2x2 as Grid } from 'lucide-react';\r\nimport { Button } from '../Button';\r\nimport { Input } from '../Input';\r\nimport { Card, CardHeader, CardTitle, CardContent } from '../Card';\r\nimport { Badge } from '../Badge';\r\nimport { Checkbox } from '../Checkbox';\r\nimport { cn } from '../../utils/cn';\r\nimport type { FilterOptions } from './types';\r\n\r\ninterface MarketplaceSidebarProps {\r\n filters: FilterOptions;\r\n onFiltersChange: (filters: FilterOptions) => void;\r\n onClearFilters: () => void;\r\n className?: string;\r\n collapsed?: boolean;\r\n onToggleCollapse?: () => void;\r\n}\r\n\r\ninterface CategoryNode {\r\n id: string;\r\n name: string;\r\n count: number;\r\n children?: CategoryNode[];\r\n}\r\n\r\nconst categoryTree: CategoryNode[] = [\r\n {\r\n id: 'electronics',\r\n name: 'Electronics',\r\n count: 156,\r\n children: [\r\n { id: 'smartphones', name: 'Smartphones', count: 45 },\r\n { id: 'laptops', name: 'Laptops', count: 32 },\r\n { id: 'headphones', name: 'Headphones', count: 28 },\r\n { id: 'cameras', name: 'Cameras', count: 21 },\r\n { id: 'accessories', name: 'Accessories', count: 30 },\r\n ],\r\n },\r\n {\r\n id: 'clothing',\r\n name: 'Clothing & Fashion',\r\n count: 234,\r\n children: [\r\n { id: 'mens', name: \"Men's Clothing\", count: 89 },\r\n { id: 'womens', name: \"Women's Clothing\", count: 112 },\r\n { id: 'shoes', name: 'Shoes', count: 67 },\r\n { id: 'accessories-fashion', name: 'Fashion Accessories', count: 45 },\r\n ],\r\n },\r\n {\r\n id: 'home',\r\n name: 'Home & Garden',\r\n count: 178,\r\n children: [\r\n { id: 'furniture', name: 'Furniture', count: 56 },\r\n { id: 'decor', name: 'Home Decor', count: 43 },\r\n { id: 'kitchen', name: 'Kitchen & Dining', count: 38 },\r\n { id: 'garden', name: 'Garden & Outdoor', count: 41 },\r\n ],\r\n },\r\n {\r\n id: 'sports',\r\n name: 'Sports & Outdoors',\r\n count: 145,\r\n children: [\r\n { id: 'fitness', name: 'Fitness Equipment', count: 34 },\r\n { id: 'outdoor', name: 'Outdoor Recreation', count: 52 },\r\n { id: 'sports-apparel', name: 'Sports Apparel', count: 59 },\r\n ],\r\n },\r\n];\r\n\r\nconst brands = [\r\n { name: 'Apple', count: 45 },\r\n { name: 'Samsung', count: 38 },\r\n { name: 'Nike', count: 67 },\r\n { name: 'Adidas', count: 54 },\r\n { name: 'Sony', count: 32 },\r\n { name: 'LG', count: 28 },\r\n { name: 'Canon', count: 21 },\r\n { name: 'Dell', count: 19 },\r\n];\r\n\r\nconst vendors = [\r\n { name: 'TechWorld Store', count: 89, rating: 4.8 },\r\n { name: 'Fashion Hub', count: 76, rating: 4.6 },\r\n { name: 'Home Essentials', count: 65, rating: 4.7 },\r\n { name: 'Sports Central', count: 54, rating: 4.5 },\r\n { name: 'Electronics Plus', count: 43, rating: 4.9 },\r\n];\r\n\r\nexport const MarketplaceSidebar: React.FC<MarketplaceSidebarProps> = ({\r\n filters,\r\n onFiltersChange,\r\n onClearFilters,\r\n className = '',\r\n collapsed = false,\r\n onToggleCollapse,\r\n}) => {\r\n const [expandedCategories, setExpandedCategories] = useState<Set<string>>(new Set(['electronics']));\r\n const [expandedSections, setExpandedSections] = useState<Set<string>>(\r\n new Set(['categories', 'price', 'rating', 'brands'])\r\n );\r\n\r\n const toggleCategory = (categoryId: string) => {\r\n setExpandedCategories(prev => {\r\n const newSet = new Set(prev);\r\n if (newSet.has(categoryId)) {\r\n newSet.delete(categoryId);\r\n } else {\r\n newSet.add(categoryId);\r\n }\r\n return newSet;\r\n });\r\n };\r\n\r\n const toggleSection = (sectionId: string) => {\r\n setExpandedSections(prev => {\r\n const newSet = new Set(prev);\r\n if (newSet.has(sectionId)) {\r\n newSet.delete(sectionId);\r\n } else {\r\n newSet.add(sectionId);\r\n }\r\n return newSet;\r\n });\r\n };\r\n\r\n const handleFilterChange = (filterType: keyof FilterOptions, value: any) => {\r\n onFiltersChange({\r\n ...filters,\r\n [filterType]: value,\r\n });\r\n };\r\n\r\n const getActiveFiltersCount = () => {\r\n let count = 0;\r\n if (filters.categories.length > 0) count += filters.categories.length;\r\n if (filters.brands.length > 0) count += filters.brands.length;\r\n if (filters.vendors.length > 0) count += filters.vendors.length;\r\n if (filters.rating > 0) count += 1;\r\n if (filters.inStock) count += 1;\r\n if (filters.priceRange[0] > 0 || filters.priceRange[1] < 1000) count += 1;\r\n return count;\r\n };\r\n\r\n const renderCategoryTree = (categories: CategoryNode[], level = 0) => {\r\n return categories.map((category) => (\r\n <div key={category.id} className={cn('', level > 0 && 'ml-4')}>\r\n <div className=\"flex items-center justify-between py-1\">\r\n <label className=\"flex items-center space-x-2 flex-1 cursor-pointer\">\r\n <Checkbox\r\n checked={filters.categories.includes(category.id)}\r\n onChange={(e) => {\r\n const newCategories = e.target.checked\r\n ? [...filters.categories, category.id]\r\n : filters.categories.filter(c => c !== category.id);\r\n handleFilterChange('categories', newCategories);\r\n }}\r\n />\r\n <span className=\"text-sm text-gray-700 flex-1\">{category.name}</span>\r\n <span className=\"text-xs text-gray-500\">({category.count})</span>\r\n </label>\r\n {category.children && (\r\n <button\r\n onClick={() => toggleCategory(category.id)}\r\n className=\"p-1 hover:bg-gray-100 rounded\"\r\n >\r\n {expandedCategories.has(category.id) ? (\r\n <ChevronDown className=\"h-3 w-3 text-gray-400\" />\r\n ) : (\r\n <ChevronRight className=\"h-3 w-3 text-gray-400\" />\r\n )}\r\n </button>\r\n )}\r\n </div>\r\n {category.children && expandedCategories.has(category.id) && (\r\n <div className=\"mt-1\">\r\n {renderCategoryTree(category.children, level + 1)}\r\n </div>\r\n )}\r\n </div>\r\n ));\r\n };\r\n\r\n if (collapsed) {\r\n return (\r\n <div className={cn('w-16 flex-shrink-0 bg-background border-r border-border rounded-xl hidden lg:block', className)}>\r\n {/* Fixed minimized sidebar for desktop */}\r\n <div className=\"fixed top-16 left-0 h-[calc(100vh-4rem)] w-16 z-40 bg-background border-r border-border rounded-xl\">\r\n <Card className=\"h-full shadow-none border-none bg-transparent\">\r\n <CardContent className=\"p-2\">\r\n <div className=\"flex flex-col items-center space-y-3\">\r\n {/* Main Filter Icon (Expand) */}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n aria-label=\"Expand filters\"\r\n title=\"Expand filters\"\r\n onClick={onToggleCollapse}\r\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\r\n >\r\n <Filter className=\"h-5 w-5\" />\r\n </Button>\r\n {/* Categories */}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n aria-label=\"Categories\"\r\n title=\"Categories\"\r\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\r\n tabIndex={0}\r\n >\r\n <Grid className=\"h-5 w-5\" />\r\n </Button>\r\n {/* Price */}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n aria-label=\"Price Range\"\r\n title=\"Price Range\"\r\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\r\n tabIndex={0}\r\n >\r\n <Tag className=\"h-5 w-5\" />\r\n </Button>\r\n {/* Rating */}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n aria-label=\"Customer Rating\"\r\n title=\"Customer Rating\"\r\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\r\n tabIndex={0}\r\n >\r\n <Star className=\"h-5 w-5\" />\r\n </Button>\r\n {/* Brands */}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n aria-label=\"Brands\"\r\n title=\"Brands\"\r\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\r\n tabIndex={0}\r\n >\r\n <Tag className=\"h-5 w-5\" />\r\n </Button>\r\n {/* Vendors */}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n aria-label=\"Sellers\"\r\n title=\"Sellers\"\r\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\r\n tabIndex={0}\r\n >\r\n <Store className=\"h-5 w-5\" />\r\n </Button>\r\n {/* Availability */}\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n aria-label=\"Availability\"\r\n title=\"Availability\"\r\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\r\n tabIndex={0}\r\n >\r\n <Sliders className=\"h-5 w-5\" />\r\n </Button>\r\n {/* Active Filter Count Badge */}\r\n {getActiveFiltersCount() > 0 && (\r\n <Badge variant=\"default\" className=\"text-xs bg-primary text-primary-foreground mt-2\">\r\n {getActiveFiltersCount()}\r\n </Badge>\r\n )}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={cn('w-80 flex-shrink-0 hidden lg:block', className)}>\r\n {/* Fixed sidebar for desktop */}\r\n {/* Adjust top offset to match navbar height (e.g., 64px = 16 * 4) */}\r\n <div className=\"fixed top-16 left-0 h-[calc(100vh-4rem)] w-80 z-30 bg-background border-r border-border pt-4\">\r\n <Card className=\"h-full shadow-none border-none bg-transparent\">\r\n <CardHeader className=\"pb-3\">\r\n <div className=\"flex items-center justify-between\">\r\n <CardTitle className=\"flex items-center text-lg\">\r\n <Filter className=\"h-5 w-5 mr-2\" />\r\n Filters\r\n {getActiveFiltersCount() > 0 && (\r\n <Badge variant=\"default\" className=\"ml-2\">\r\n {getActiveFiltersCount()}\r\n </Badge>\r\n )}\r\n </CardTitle>\r\n <div className=\"flex items-center space-x-2\">\r\n <Button variant=\"ghost\" size=\"sm\" onClick={onClearFilters}>\r\n Clear All\r\n </Button>\r\n {onToggleCollapse && (\r\n <Button variant=\"ghost\" size=\"sm\" onClick={onToggleCollapse}>\r\n <X className=\"h-4 w-4\" />\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n </CardHeader>\r\n\r\n <CardContent className=\"space-y-6 max-h-[calc(100vh-200px)] overflow-y-auto\">\r\n {/* Categories */}\r\n <div>\r\n <button\r\n onClick={() => toggleSection('categories')}\r\n className=\"flex items-center justify-between w-full mb-3\"\r\n >\r\n <h3 className=\"font-medium text-gray-900 flex items-center\">\r\n <Grid className=\"h-4 w-4 mr-2\" />\r\n Categories\r\n </h3>\r\n {expandedSections.has('categories') ? (\r\n <ChevronDown className=\"h-4 w-4 text-gray-400\" />\r\n ) : (\r\n <ChevronRight className=\"h-4 w-4 text-gray-400\" />\r\n )}\r\n </button>\r\n {expandedSections.has('categories') && (\r\n <div className=\"space-y-1\">\r\n {renderCategoryTree(categoryTree)}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Price Range */}\r\n <div>\r\n <button\r\n onClick={() => toggleSection('price')}\r\n className=\"flex items-center justify-between w-full mb-3\"\r\n >\r\n <h3 className=\"font-medium text-gray-900 flex items-center\">\r\n <Tag className=\"h-4 w-4 mr-2\" />\r\n Price Range\r\n </h3>\r\n {expandedSections.has('price') ? (\r\n <ChevronDown className=\"h-4 w-4 text-gray-400\" />\r\n ) : (\r\n <ChevronRight className=\"h-4 w-4 text-gray-400\" />\r\n )}\r\n </button>\r\n {expandedSections.has('price') && (\r\n <div className=\"space-y-3\">\r\n <div className=\"flex items-center space-x-2\">\r\n <Input\r\n type=\"number\"\r\n placeholder=\"Min\"\r\n value={filters.priceRange[0]}\r\n onChange={(e) => handleFilterChange('priceRange', [\r\n parseInt(e.target.value) || 0,\r\n filters.priceRange[1]\r\n ])}\r\n className=\"w-20 text-sm\"\r\n />\r\n <span className=\"text-gray-400\">-</span>\r\n <Input\r\n type=\"number\"\r\n placeholder=\"Max\"\r\n value={filters.priceRange[1]}\r\n onChange={(e) => handleFilterChange('priceRange', [\r\n filters.priceRange[0],\r\n parseInt(e.target.value) || 1000\r\n ])}\r\n className=\"w-20 text-sm\"\r\n />\r\n </div>\r\n \r\n {/* Quick Price Ranges */}\r\n <div className=\"space-y-1\">\r\n {[\r\n { label: 'Under $25', range: [0, 25] },\r\n { label: '$25 - $50', range: [25, 50] },\r\n { label: '$50 - $100', range: [50, 100] },\r\n { label: '$100 - $200', range: [100, 200] },\r\n { label: 'Over $200', range: [200, 1000] },\r\n ].map((option) => (\r\n <label key={option.label} className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={\r\n filters.priceRange[0] === option.range[0] &&\r\n filters.priceRange[1] === option.range[1]\r\n }\r\n onChange={(e) => {\r\n if (e.target.checked) {\r\n handleFilterChange('priceRange', option.range);\r\n }\r\n }}\r\n />\r\n <span className=\"text-sm text-gray-700\">{option.label}</span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Rating */}\r\n <div>\r\n <button\r\n onClick={() => toggleSection('rating')}\r\n className=\"flex items-center justify-between w-full mb-3\"\r\n >\r\n <h3 className=\"font-medium text-gray-900 flex items-center\">\r\n <Star className=\"h-4 w-4 mr-2\" />\r\n Customer Rating\r\n </h3>\r\n {expandedSections.has('rating') ? (\r\n <ChevronDown className=\"h-4 w-4 text-gray-400\" />\r\n ) : (\r\n <ChevronRight className=\"h-4 w-4 text-gray-400\" />\r\n )}\r\n </button>\r\n {expandedSections.has('rating') && (\r\n <div className=\"space-y-2\">\r\n {[4, 3, 2, 1].map(rating => (\r\n <label key={rating} className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={filters.rating === rating}\r\n onChange={(e) => {\r\n handleFilterChange('rating', e.target.checked ? rating : 0);\r\n }}\r\n />\r\n <div className=\"flex items-center space-x-1\">\r\n {[1, 2, 3, 4, 5].map(star => (\r\n <Star\r\n key={star}\r\n className={`h-4 w-4 ${\r\n star <= rating ? 'text-yellow-400 fill-current' : 'text-gray-300'\r\n }`}\r\n />\r\n ))}\r\n <span className=\"text-sm text-gray-700\">& up</span>\r\n </div>\r\n </label>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Brands */}\r\n <div>\r\n <button\r\n onClick={() => toggleSection('brands')}\r\n className=\"flex items-center justify-between w-full mb-3\"\r\n >\r\n <h3 className=\"font-medium text-gray-900 flex items-center\">\r\n <Tag className=\"h-4 w-4 mr-2\" />\r\n Brands\r\n </h3>\r\n {expandedSections.has('brands') ? (\r\n <ChevronDown className=\"h-4 w-4 text-gray-400\" />\r\n ) : (\r\n <ChevronRight className=\"h-4 w-4 text-gray-400\" />\r\n )}\r\n </button>\r\n {expandedSections.has('brands') && (\r\n <div className=\"space-y-2\">\r\n {brands.map(brand => (\r\n <label key={brand.name} className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={filters.brands.includes(brand.name)}\r\n onChange={(e) => {\r\n const newBrands = e.target.checked\r\n ? [...filters.brands, brand.name]\r\n : filters.brands.filter(b => b !== brand.name);\r\n handleFilterChange('brands', newBrands);\r\n }}\r\n />\r\n <span className=\"text-sm text-gray-700\">{brand.name}</span>\r\n </div>\r\n <span className=\"text-xs text-gray-500\">({brand.count})</span>\r\n </label>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Vendors */}\r\n <div>\r\n <button\r\n onClick={() => toggleSection('vendors')}\r\n className=\"flex items-center justify-between w-full mb-3\"\r\n >\r\n <h3 className=\"font-medium text-gray-900 flex items-center\">\r\n <Store className=\"h-4 w-4 mr-2\" />\r\n Sellers\r\n </h3>\r\n {expandedSections.has('vendors') ? (\r\n <ChevronDown className=\"h-4 w-4 text-gray-400\" />\r\n ) : (\r\n <ChevronRight className=\"h-4 w-4 text-gray-400\" />\r\n )}\r\n </button>\r\n {expandedSections.has('vendors') && (\r\n <div className=\"space-y-2\">\r\n {vendors.map(vendor => (\r\n <label key={vendor.name} className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={filters.vendors.includes(vendor.name)}\r\n onChange={(e) => {\r\n const newVendors = e.target.checked\r\n ? [...filters.vendors, vendor.name]\r\n : filters.vendors.filter(v => v !== vendor.name);\r\n handleFilterChange('vendors', newVendors);\r\n }}\r\n />\r\n <div>\r\n <div className=\"text-sm text-gray-700\">{vendor.name}</div>\r\n <div className=\"flex items-center space-x-1\">\r\n <Star className=\"h-3 w-3 text-yellow-400 fill-current\" />\r\n <span className=\"text-xs text-gray-500\">{vendor.rating}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <span className=\"text-xs text-gray-500\">({vendor.count})</span>\r\n </label>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Availability */}\r\n <div>\r\n <h3 className=\"font-medium text-gray-900 mb-3 flex items-center\">\r\n <Sliders className=\"h-4 w-4 mr-2\" />\r\n Availability\r\n </h3>\r\n <div className=\"space-y-2\">\r\n <label className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={filters.inStock}\r\n onChange={(e) => handleFilterChange('inStock', e.target.checked)}\r\n />\r\n <span className=\"text-sm text-gray-700\">In Stock Only</span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n {/* Active Filters Summary */}\r\n {getActiveFiltersCount() > 0 && (\r\n <div className=\"pt-4 border-t border-gray-200\">\r\n <div className=\"flex items-center justify-between mb-2\">\r\n <h3 className=\"font-medium text-gray-900\">Active Filters</h3>\r\n <Button variant=\"ghost\" size=\"sm\" onClick={onClearFilters}>\r\n Clear All\r\n </Button>\r\n </div>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {filters.categories.map(category => (\r\n <Badge key={category} variant=\"outline\" className=\"text-xs\">\r\n {category}\r\n <button\r\n onClick={() => handleFilterChange('categories', \r\n filters.categories.filter(c => c !== category)\r\n )}\r\n className=\"ml-1 hover:text-red-600\"\r\n >\r\n <X className=\"h-3 w-3\" />\r\n </button>\r\n </Badge>\r\n ))}\r\n {filters.brands.map(brand => (\r\n <Badge key={brand} variant=\"outline\" className=\"text-xs\">\r\n {brand}\r\n <button\r\n onClick={() => handleFilterChange('brands', \r\n filters.brands.filter(b => b !== brand)\r\n )}\r\n className=\"ml-1 hover:text-red-600\"\r\n >\r\n <X className=\"h-3 w-3\" />\r\n </button>\r\n </Badge>\r\n ))}\r\n {filters.rating > 0 && (\r\n <Badge variant=\"outline\" className=\"text-xs\">\r\n {filters.rating}+ stars\r\n <button\r\n onClick={() => handleFilterChange('rating', 0)}\r\n className=\"ml-1 hover:text-red-600\"\r\n >\r\n <X className=\"h-3 w-3\" />\r\n </button>\r\n </Badge>\r\n )}\r\n {filters.inStock && (\r\n <Badge variant=\"outline\" className=\"text-xs\">\r\n In Stock\r\n <button\r\n onClick={() => handleFilterChange('inStock', false)}\r\n className=\"ml-1 hover:text-red-600\"\r\n >\r\n <X className=\"h-3 w-3\" />\r\n </button>\r\n </Badge>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </CardContent>\r\n </Card>\r\n </div>\r\n </div>\r\n );\r\n};"],"names":["_jsxs","_jsx","Grid"],"mappings":"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"}
1
+ {"version":3,"file":"MarketplaceSidebar.js","sources":["../../../src/components/Marketplace/MarketplaceSidebar.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { ChevronDown, ChevronRight, Star, X, Filter, Sliders, Tag, Store, Grid2x2 as Grid } 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 { cn } from '../../utils/cn';\nimport type { FilterOptions } from './types';\n\ninterface MarketplaceSidebarProps {\n filters: FilterOptions;\n onFiltersChange: (filters: FilterOptions) => void;\n onClearFilters: () => void;\n className?: string;\n collapsed?: boolean;\n onToggleCollapse?: () => void;\n}\n\ninterface CategoryNode {\n id: string;\n name: string;\n count: number;\n children?: CategoryNode[];\n}\n\nconst categoryTree: CategoryNode[] = [\n {\n id: 'electronics',\n name: 'Electronics',\n count: 156,\n children: [\n { id: 'smartphones', name: 'Smartphones', count: 45 },\n { id: 'laptops', name: 'Laptops', count: 32 },\n { id: 'headphones', name: 'Headphones', count: 28 },\n { id: 'cameras', name: 'Cameras', count: 21 },\n { id: 'accessories', name: 'Accessories', count: 30 },\n ],\n },\n {\n id: 'clothing',\n name: 'Clothing & Fashion',\n count: 234,\n children: [\n { id: 'mens', name: \"Men's Clothing\", count: 89 },\n { id: 'womens', name: \"Women's Clothing\", count: 112 },\n { id: 'shoes', name: 'Shoes', count: 67 },\n { id: 'accessories-fashion', name: 'Fashion Accessories', count: 45 },\n ],\n },\n {\n id: 'home',\n name: 'Home & Garden',\n count: 178,\n children: [\n { id: 'furniture', name: 'Furniture', count: 56 },\n { id: 'decor', name: 'Home Decor', count: 43 },\n { id: 'kitchen', name: 'Kitchen & Dining', count: 38 },\n { id: 'garden', name: 'Garden & Outdoor', count: 41 },\n ],\n },\n {\n id: 'sports',\n name: 'Sports & Outdoors',\n count: 145,\n children: [\n { id: 'fitness', name: 'Fitness Equipment', count: 34 },\n { id: 'outdoor', name: 'Outdoor Recreation', count: 52 },\n { id: 'sports-apparel', name: 'Sports Apparel', count: 59 },\n ],\n },\n];\n\nconst brands = [\n { name: 'Apple', count: 45 },\n { name: 'Samsung', count: 38 },\n { name: 'Nike', count: 67 },\n { name: 'Adidas', count: 54 },\n { name: 'Sony', count: 32 },\n { name: 'LG', count: 28 },\n { name: 'Canon', count: 21 },\n { name: 'Dell', count: 19 },\n];\n\nconst vendors = [\n { name: 'TechWorld Store', count: 89, rating: 4.8 },\n { name: 'Fashion Hub', count: 76, rating: 4.6 },\n { name: 'Home Essentials', count: 65, rating: 4.7 },\n { name: 'Sports Central', count: 54, rating: 4.5 },\n { name: 'Electronics Plus', count: 43, rating: 4.9 },\n];\n\nexport const MarketplaceSidebar: React.FC<MarketplaceSidebarProps> = ({\n filters,\n onFiltersChange,\n onClearFilters,\n className = '',\n collapsed = false,\n onToggleCollapse,\n}) => {\n const [expandedCategories, setExpandedCategories] = useState<Set<string>>(new Set(['electronics']));\n const [expandedSections, setExpandedSections] = useState<Set<string>>(\n new Set(['categories', 'price', 'rating', 'brands'])\n );\n\n const toggleCategory = (categoryId: string) => {\n setExpandedCategories(prev => {\n const newSet = new Set(prev);\n if (newSet.has(categoryId)) {\n newSet.delete(categoryId);\n } else {\n newSet.add(categoryId);\n }\n return newSet;\n });\n };\n\n const toggleSection = (sectionId: string) => {\n setExpandedSections(prev => {\n const newSet = new Set(prev);\n if (newSet.has(sectionId)) {\n newSet.delete(sectionId);\n } else {\n newSet.add(sectionId);\n }\n return newSet;\n });\n };\n\n const handleFilterChange = (filterType: keyof FilterOptions, value: any) => {\n onFiltersChange({\n ...filters,\n [filterType]: value,\n });\n };\n\n const getActiveFiltersCount = () => {\n let count = 0;\n if (filters.categories.length > 0) count += filters.categories.length;\n if (filters.brands.length > 0) count += filters.brands.length;\n if (filters.vendors.length > 0) count += filters.vendors.length;\n if (filters.rating > 0) count += 1;\n if (filters.inStock) count += 1;\n if (filters.priceRange[0] > 0 || filters.priceRange[1] < 1000) count += 1;\n return count;\n };\n\n const renderCategoryTree = (categories: CategoryNode[], level = 0) => {\n return categories.map((category) => (\n <div key={category.id} className={cn('', level > 0 && 'ml-4')}>\n <div className=\"flex items-center justify-between py-1\">\n <label className=\"flex items-center space-x-2 flex-1 cursor-pointer\">\n <Checkbox\n checked={filters.categories.includes(category.id)}\n onChange={(e) => {\n const newCategories = e.target.checked\n ? [...filters.categories, category.id]\n : filters.categories.filter(c => c !== category.id);\n handleFilterChange('categories', newCategories);\n }}\n />\n <span className=\"text-sm text-gray-700 flex-1\">{category.name}</span>\n <span className=\"text-xs text-gray-500\">({category.count})</span>\n </label>\n {category.children && (\n <button\n onClick={() => toggleCategory(category.id)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n {expandedCategories.has(category.id) ? (\n <ChevronDown className=\"h-3 w-3 text-gray-400\" />\n ) : (\n <ChevronRight className=\"h-3 w-3 text-gray-400\" />\n )}\n </button>\n )}\n </div>\n {category.children && expandedCategories.has(category.id) && (\n <div className=\"mt-1\">\n {renderCategoryTree(category.children, level + 1)}\n </div>\n )}\n </div>\n ));\n };\n\n if (collapsed) {\n return (\n <div className={cn('w-16 flex-shrink-0 bg-background border-r border-border rounded-xl hidden lg:block', className)}>\n {/* Fixed minimized sidebar for desktop */}\n <div className=\"fixed top-16 left-0 h-[calc(100vh-4rem)] w-16 z-40 bg-background border-r border-border rounded-xl\">\n <Card className=\"h-full shadow-none border-none bg-transparent\">\n <CardContent className=\"p-2\">\n <div className=\"flex flex-col items-center space-y-3\">\n {/* Main Filter Icon (Expand) */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Expand filters\"\n title=\"Expand filters\"\n onClick={onToggleCollapse}\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\n >\n <Filter className=\"h-5 w-5\" />\n </Button>\n {/* Categories */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Categories\"\n title=\"Categories\"\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\n tabIndex={0}\n >\n <Grid className=\"h-5 w-5\" />\n </Button>\n {/* Price */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Price Range\"\n title=\"Price Range\"\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\n tabIndex={0}\n >\n <Tag className=\"h-5 w-5\" />\n </Button>\n {/* Rating */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Customer Rating\"\n title=\"Customer Rating\"\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\n tabIndex={0}\n >\n <Star className=\"h-5 w-5\" />\n </Button>\n {/* Brands */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Brands\"\n title=\"Brands\"\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\n tabIndex={0}\n >\n <Tag className=\"h-5 w-5\" />\n </Button>\n {/* Vendors */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Sellers\"\n title=\"Sellers\"\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\n tabIndex={0}\n >\n <Store className=\"h-5 w-5\" />\n </Button>\n {/* Availability */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Availability\"\n title=\"Availability\"\n className=\"w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg\"\n tabIndex={0}\n >\n <Sliders className=\"h-5 w-5\" />\n </Button>\n {/* Active Filter Count Badge */}\n {getActiveFiltersCount() > 0 && (\n <Badge variant=\"default\" className=\"text-xs bg-primary text-primary-foreground mt-2\">\n {getActiveFiltersCount()}\n </Badge>\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn('w-80 flex-shrink-0 hidden lg:block', className)}>\n {/* Fixed sidebar for desktop */}\n {/* Adjust top offset to match navbar height (e.g., 64px = 16 * 4) */}\n <div className=\"fixed top-16 left-0 h-[calc(100vh-4rem)] w-80 z-30 bg-background border-r border-border pt-4\">\n <Card className=\"h-full shadow-none border-none bg-transparent\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"flex items-center text-lg\">\n <Filter className=\"h-5 w-5 mr-2\" />\n Filters\n {getActiveFiltersCount() > 0 && (\n <Badge variant=\"default\" className=\"ml-2\">\n {getActiveFiltersCount()}\n </Badge>\n )}\n </CardTitle>\n <div className=\"flex items-center space-x-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={onClearFilters}>\n Clear All\n </Button>\n {onToggleCollapse && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onToggleCollapse}>\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </div>\n </CardHeader>\n\n <CardContent className=\"space-y-6 max-h-[calc(100vh-200px)] overflow-y-auto\">\n {/* Categories */}\n <div>\n <button\n onClick={() => toggleSection('categories')}\n className=\"flex items-center justify-between w-full mb-3\"\n >\n <h3 className=\"font-medium text-gray-900 flex items-center\">\n <Grid className=\"h-4 w-4 mr-2\" />\n Categories\n </h3>\n {expandedSections.has('categories') ? (\n <ChevronDown className=\"h-4 w-4 text-gray-400\" />\n ) : (\n <ChevronRight className=\"h-4 w-4 text-gray-400\" />\n )}\n </button>\n {expandedSections.has('categories') && (\n <div className=\"space-y-1\">\n {renderCategoryTree(categoryTree)}\n </div>\n )}\n </div>\n\n {/* Price Range */}\n <div>\n <button\n onClick={() => toggleSection('price')}\n className=\"flex items-center justify-between w-full mb-3\"\n >\n <h3 className=\"font-medium text-gray-900 flex items-center\">\n <Tag className=\"h-4 w-4 mr-2\" />\n Price Range\n </h3>\n {expandedSections.has('price') ? (\n <ChevronDown className=\"h-4 w-4 text-gray-400\" />\n ) : (\n <ChevronRight className=\"h-4 w-4 text-gray-400\" />\n )}\n </button>\n {expandedSections.has('price') && (\n <div className=\"space-y-3\">\n <div className=\"flex items-center space-x-2\">\n <Input\n type=\"number\"\n placeholder=\"Min\"\n value={filters.priceRange[0]}\n onChange={(e) => handleFilterChange('priceRange', [\n parseInt(e.target.value) || 0,\n filters.priceRange[1]\n ])}\n className=\"w-20 text-sm\"\n />\n <span className=\"text-gray-400\">-</span>\n <Input\n type=\"number\"\n placeholder=\"Max\"\n value={filters.priceRange[1]}\n onChange={(e) => handleFilterChange('priceRange', [\n filters.priceRange[0],\n parseInt(e.target.value) || 1000\n ])}\n className=\"w-20 text-sm\"\n />\n </div>\n \n {/* Quick Price Ranges */}\n <div className=\"space-y-1\">\n {[\n { label: 'Under $25', range: [0, 25] },\n { label: '$25 - $50', range: [25, 50] },\n { label: '$50 - $100', range: [50, 100] },\n { label: '$100 - $200', range: [100, 200] },\n { label: 'Over $200', range: [200, 1000] },\n ].map((option) => (\n <label key={option.label} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={\n filters.priceRange[0] === option.range[0] &&\n filters.priceRange[1] === option.range[1]\n }\n onChange={(e) => {\n if (e.target.checked) {\n handleFilterChange('priceRange', option.range);\n }\n }}\n />\n <span className=\"text-sm text-gray-700\">{option.label}</span>\n </label>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {/* Rating */}\n <div>\n <button\n onClick={() => toggleSection('rating')}\n className=\"flex items-center justify-between w-full mb-3\"\n >\n <h3 className=\"font-medium text-gray-900 flex items-center\">\n <Star className=\"h-4 w-4 mr-2\" />\n Customer Rating\n </h3>\n {expandedSections.has('rating') ? (\n <ChevronDown className=\"h-4 w-4 text-gray-400\" />\n ) : (\n <ChevronRight className=\"h-4 w-4 text-gray-400\" />\n )}\n </button>\n {expandedSections.has('rating') && (\n <div className=\"space-y-2\">\n {[4, 3, 2, 1].map(rating => (\n <label key={rating} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.rating === rating}\n onChange={(e) => {\n handleFilterChange('rating', e.target.checked ? rating : 0);\n }}\n />\n <div className=\"flex items-center space-x-1\">\n {[1, 2, 3, 4, 5].map(star => (\n <Star\n key={star}\n className={`h-4 w-4 ${\n star <= rating ? 'text-yellow-400 fill-current' : 'text-gray-300'\n }`}\n />\n ))}\n <span className=\"text-sm text-gray-700\">& up</span>\n </div>\n </label>\n ))}\n </div>\n )}\n </div>\n\n {/* Brands */}\n <div>\n <button\n onClick={() => toggleSection('brands')}\n className=\"flex items-center justify-between w-full mb-3\"\n >\n <h3 className=\"font-medium text-gray-900 flex items-center\">\n <Tag className=\"h-4 w-4 mr-2\" />\n Brands\n </h3>\n {expandedSections.has('brands') ? (\n <ChevronDown className=\"h-4 w-4 text-gray-400\" />\n ) : (\n <ChevronRight className=\"h-4 w-4 text-gray-400\" />\n )}\n </button>\n {expandedSections.has('brands') && (\n <div className=\"space-y-2\">\n {brands.map(brand => (\n <label key={brand.name} className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.brands.includes(brand.name)}\n onChange={(e) => {\n const newBrands = e.target.checked\n ? [...filters.brands, brand.name]\n : filters.brands.filter(b => b !== brand.name);\n handleFilterChange('brands', newBrands);\n }}\n />\n <span className=\"text-sm text-gray-700\">{brand.name}</span>\n </div>\n <span className=\"text-xs text-gray-500\">({brand.count})</span>\n </label>\n ))}\n </div>\n )}\n </div>\n\n {/* Vendors */}\n <div>\n <button\n onClick={() => toggleSection('vendors')}\n className=\"flex items-center justify-between w-full mb-3\"\n >\n <h3 className=\"font-medium text-gray-900 flex items-center\">\n <Store className=\"h-4 w-4 mr-2\" />\n Sellers\n </h3>\n {expandedSections.has('vendors') ? (\n <ChevronDown className=\"h-4 w-4 text-gray-400\" />\n ) : (\n <ChevronRight className=\"h-4 w-4 text-gray-400\" />\n )}\n </button>\n {expandedSections.has('vendors') && (\n <div className=\"space-y-2\">\n {vendors.map(vendor => (\n <label key={vendor.name} className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.vendors.includes(vendor.name)}\n onChange={(e) => {\n const newVendors = e.target.checked\n ? [...filters.vendors, vendor.name]\n : filters.vendors.filter(v => v !== vendor.name);\n handleFilterChange('vendors', newVendors);\n }}\n />\n <div>\n <div className=\"text-sm text-gray-700\">{vendor.name}</div>\n <div className=\"flex items-center space-x-1\">\n <Star className=\"h-3 w-3 text-yellow-400 fill-current\" />\n <span className=\"text-xs text-gray-500\">{vendor.rating}</span>\n </div>\n </div>\n </div>\n <span className=\"text-xs text-gray-500\">({vendor.count})</span>\n </label>\n ))}\n </div>\n )}\n </div>\n\n {/* Availability */}\n <div>\n <h3 className=\"font-medium text-gray-900 mb-3 flex items-center\">\n <Sliders className=\"h-4 w-4 mr-2\" />\n Availability\n </h3>\n <div className=\"space-y-2\">\n <label className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.inStock}\n onChange={(e) => handleFilterChange('inStock', e.target.checked)}\n />\n <span className=\"text-sm text-gray-700\">In Stock Only</span>\n </label>\n </div>\n </div>\n\n {/* Active Filters Summary */}\n {getActiveFiltersCount() > 0 && (\n <div className=\"pt-4 border-t border-gray-200\">\n <div className=\"flex items-center justify-between mb-2\">\n <h3 className=\"font-medium text-gray-900\">Active Filters</h3>\n <Button variant=\"ghost\" size=\"sm\" onClick={onClearFilters}>\n Clear All\n </Button>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {filters.categories.map(category => (\n <Badge key={category} variant=\"outline\" className=\"text-xs\">\n {category}\n <button\n onClick={() => handleFilterChange('categories', \n filters.categories.filter(c => c !== category)\n )}\n className=\"ml-1 hover:text-red-600\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </Badge>\n ))}\n {filters.brands.map(brand => (\n <Badge key={brand} variant=\"outline\" className=\"text-xs\">\n {brand}\n <button\n onClick={() => handleFilterChange('brands', \n filters.brands.filter(b => b !== brand)\n )}\n className=\"ml-1 hover:text-red-600\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </Badge>\n ))}\n {filters.rating > 0 && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {filters.rating}+ stars\n <button\n onClick={() => handleFilterChange('rating', 0)}\n className=\"ml-1 hover:text-red-600\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </Badge>\n )}\n {filters.inStock && (\n <Badge variant=\"outline\" className=\"text-xs\">\n In Stock\n <button\n onClick={() => handleFilterChange('inStock', false)}\n className=\"ml-1 hover:text-red-600\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </Badge>\n )}\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n </div>\n );\n};"],"names":["_jsxs","_jsx","Grid"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarketplaceControls.js","sources":["../../../../src/components/Marketplace/components/MarketplaceControls.tsx"],"sourcesContent":["import { Search, Filter, Grid2x2 as Grid, List } from 'lucide-react';\r\nimport { Button } from '../../Button';\r\nimport { Input } from '../../Input';\r\n\r\nexport interface MarketplaceControlsProps {\r\n searchQuery: string;\r\n onSearchChange: (value: string) => void;\r\n shouldFocusSearch?: boolean;\r\n sortBy: string;\r\n onSortChange: (value: string) => void;\r\n viewMode: 'grid' | 'list';\r\n onViewModeChange: (mode: 'grid' | 'list') => void;\r\n onShowFilters: () => void;\r\n sortOptions: { value: string; label: string }[];\r\n className?: string;\r\n}\r\n\r\nimport React, { useRef, useEffect } from 'react';\r\n\r\nexport const MarketplaceControls: React.FC<MarketplaceControlsProps> = ({\r\n searchQuery,\r\n onSearchChange,\r\n shouldFocusSearch,\r\n sortBy,\r\n onSortChange,\r\n viewMode,\r\n onViewModeChange,\r\n onShowFilters,\r\n sortOptions,\r\n className = '',\r\n}) => {\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n if (shouldFocusSearch && inputRef.current) {\r\n inputRef.current.focus();\r\n // Move cursor to end\r\n const val = inputRef.current.value;\r\n inputRef.current.value = '';\r\n inputRef.current.value = val;\r\n }\r\n }, [shouldFocusSearch]);\r\n\r\n return (\r\n <div className={`flex flex-col gap-2 sm:flex-row sm:items-center sm:space-x-4 mt-2 lg:mt-0 w-full sm:w-auto ${className}`}>\r\n <div className=\"relative w-full sm:w-auto\">\r\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400\" />\r\n <Input\r\n ref={inputRef}\r\n placeholder=\"Search products...\"\r\n value={searchQuery}\r\n onChange={(e) => onSearchChange(e.target.value)}\r\n className=\"pl-10 w-full sm:w-64\"\r\n />\r\n </div>\r\n <select\r\n value={sortBy}\r\n onChange={(e) => onSortChange(e.target.value)}\r\n className=\"border border-gray-300 rounded-lg px-3 py-2 bg-white w-full sm:w-auto\"\r\n >\r\n {sortOptions.map(option => (\r\n <option key={option.value} value={option.value}>\r\n {option.label}\r\n </option>\r\n ))}\r\n </select>\r\n <div className=\"flex items-center bg-gray-100 rounded-lg p-1 w-full sm:w-auto\">\r\n <Button\r\n variant={viewMode === 'grid' ? 'primary' : 'ghost'}\r\n size=\"sm\"\r\n onClick={() => onViewModeChange('grid')}\r\n className=\"flex-1 sm:flex-none\"\r\n >\r\n <Grid className=\"h-4 w-4\" />\r\n </Button>\r\n <Button\r\n variant={viewMode === 'list' ? 'primary' : 'ghost'}\r\n size=\"sm\"\r\n onClick={() => onViewModeChange('list')}\r\n className=\"flex-1 sm:flex-none\"\r\n >\r\n <List className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n <Button\r\n variant=\"outline\"\r\n onClick={onShowFilters}\r\n className=\"sm:w-auto w-full lg:hidden\"\r\n >\r\n <Filter className=\"mr-2 h-4 w-4\" />\r\n Filters\r\n </Button>\r\n </div>\r\n );\r\n};"],"names":["_jsxs","_jsx","Grid"],"mappings":";;;;;;AAmBO,MAAM,mBAAmB,GAAuC,CAAC,EACtE,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,SAAS,GAAG,EAAE,GACf,KAAI;AACH,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC;IAE/C,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,iBAAiB,IAAI,QAAQ,CAAC,OAAO,EAAE;AACzC,YAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE;;AAExB,YAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK;AAClC,YAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE;AAC3B,YAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG;QAC9B;AACF,IAAA,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAEvB,QACEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,2FAAA,EAA8F,SAAS,CAAA,CAAE,EAAA,QAAA,EAAA,CACvHA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,2BAA2B,aACxCC,GAAA,CAAC,MAAM,EAAA,EAAC,SAAS,EAAC,0EAA0E,EAAA,CAAG,EAC/FA,GAAA,CAAC,KAAK,EAAA,EACJ,GAAG,EAAE,QAAQ,EACb,WAAW,EAAC,oBAAoB,EAChC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC/C,SAAS,EAAC,sBAAsB,EAAA,CAChC,IACE,EACNA,GAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC7C,SAAS,EAAC,uEAAuE,EAAA,QAAA,EAEhF,WAAW,CAAC,GAAG,CAAC,MAAM,KACrBA,GAAA,CAAA,QAAA,EAAA,EAA2B,KAAK,EAAE,MAAM,CAAC,KAAK,EAAA,QAAA,EAC3C,MAAM,CAAC,KAAK,EAAA,EADF,MAAM,CAAC,KAAK,CAEhB,CACV,CAAC,EAAA,CACK,EACTD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+DAA+D,aAC5EC,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAE,QAAQ,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,EAClD,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,EACvC,SAAS,EAAC,qBAAqB,EAAA,QAAA,EAE/BA,IAACC,OAAI,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,GACrB,EACTD,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAE,QAAQ,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,EAClD,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,EACvC,SAAS,EAAC,qBAAqB,EAAA,QAAA,EAE/BA,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,GACrB,CAAA,EAAA,CACL,EACND,IAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,CAEtCC,GAAA,CAAC,MAAM,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAAA,SAAA,CAAA,EAAA,CAE5B,CAAA,EAAA,CACL;AAEV;;;;"}
1
+ {"version":3,"file":"MarketplaceControls.js","sources":["../../../../src/components/Marketplace/components/MarketplaceControls.tsx"],"sourcesContent":["import { Search, Filter, Grid2x2 as Grid, List } from 'lucide-react';\nimport { Button } from '../../Button';\nimport { Input } from '../../Input';\n\nexport interface MarketplaceControlsProps {\n searchQuery: string;\n onSearchChange: (value: string) => void;\n shouldFocusSearch?: boolean;\n sortBy: string;\n onSortChange: (value: string) => void;\n viewMode: 'grid' | 'list';\n onViewModeChange: (mode: 'grid' | 'list') => void;\n onShowFilters: () => void;\n sortOptions: { value: string; label: string }[];\n className?: string;\n}\n\nimport React, { useRef, useEffect } from 'react';\n\nexport const MarketplaceControls: React.FC<MarketplaceControlsProps> = ({\n searchQuery,\n onSearchChange,\n shouldFocusSearch,\n sortBy,\n onSortChange,\n viewMode,\n onViewModeChange,\n onShowFilters,\n sortOptions,\n className = '',\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (shouldFocusSearch && inputRef.current) {\n inputRef.current.focus();\n // Move cursor to end\n const val = inputRef.current.value;\n inputRef.current.value = '';\n inputRef.current.value = val;\n }\n }, [shouldFocusSearch]);\n\n return (\n <div className={`flex flex-col gap-2 sm:flex-row sm:items-center sm:space-x-4 mt-2 lg:mt-0 w-full sm:w-auto ${className}`}>\n <div className=\"relative w-full sm:w-auto\">\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400\" />\n <Input\n ref={inputRef}\n placeholder=\"Search products...\"\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n className=\"pl-10 w-full sm:w-64\"\n />\n </div>\n <select\n value={sortBy}\n onChange={(e) => onSortChange(e.target.value)}\n className=\"border border-gray-300 rounded-lg px-3 py-2 bg-white w-full sm:w-auto\"\n >\n {sortOptions.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <div className=\"flex items-center bg-gray-100 rounded-lg p-1 w-full sm:w-auto\">\n <Button\n variant={viewMode === 'grid' ? 'primary' : 'ghost'}\n size=\"sm\"\n onClick={() => onViewModeChange('grid')}\n className=\"flex-1 sm:flex-none\"\n >\n <Grid className=\"h-4 w-4\" />\n </Button>\n <Button\n variant={viewMode === 'list' ? 'primary' : 'ghost'}\n size=\"sm\"\n onClick={() => onViewModeChange('list')}\n className=\"flex-1 sm:flex-none\"\n >\n <List className=\"h-4 w-4\" />\n </Button>\n </div>\n <Button\n variant=\"outline\"\n onClick={onShowFilters}\n className=\"sm:w-auto w-full lg:hidden\"\n >\n <Filter className=\"mr-2 h-4 w-4\" />\n Filters\n </Button>\n </div>\n );\n};"],"names":["_jsxs","_jsx","Grid"],"mappings":";;;;;;AAmBO,MAAM,mBAAmB,GAAuC,CAAC,EACtE,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,SAAS,GAAG,EAAE,GACf,KAAI;AACH,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC;IAE/C,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,iBAAiB,IAAI,QAAQ,CAAC,OAAO,EAAE;AACzC,YAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE;;AAExB,YAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK;AAClC,YAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE;AAC3B,YAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG;QAC9B;AACF,IAAA,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAEvB,QACEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,2FAAA,EAA8F,SAAS,CAAA,CAAE,EAAA,QAAA,EAAA,CACvHA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,2BAA2B,aACxCC,GAAA,CAAC,MAAM,EAAA,EAAC,SAAS,EAAC,0EAA0E,EAAA,CAAG,EAC/FA,GAAA,CAAC,KAAK,EAAA,EACJ,GAAG,EAAE,QAAQ,EACb,WAAW,EAAC,oBAAoB,EAChC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC/C,SAAS,EAAC,sBAAsB,EAAA,CAChC,IACE,EACNA,GAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC7C,SAAS,EAAC,uEAAuE,EAAA,QAAA,EAEhF,WAAW,CAAC,GAAG,CAAC,MAAM,KACrBA,GAAA,CAAA,QAAA,EAAA,EAA2B,KAAK,EAAE,MAAM,CAAC,KAAK,EAAA,QAAA,EAC3C,MAAM,CAAC,KAAK,EAAA,EADF,MAAM,CAAC,KAAK,CAEhB,CACV,CAAC,EAAA,CACK,EACTD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+DAA+D,aAC5EC,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAE,QAAQ,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,EAClD,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,EACvC,SAAS,EAAC,qBAAqB,EAAA,QAAA,EAE/BA,IAACC,OAAI,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,GACrB,EACTD,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAE,QAAQ,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,EAClD,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,EACvC,SAAS,EAAC,qBAAqB,EAAA,QAAA,EAE/BA,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,GACrB,CAAA,EAAA,CACL,EACND,IAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,CAEtCC,GAAA,CAAC,MAAM,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAAA,SAAA,CAAA,EAAA,CAE5B,CAAA,EAAA,CACL;AAEV;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarketplaceHeader.js","sources":["../../../../src/components/Marketplace/components/MarketplaceHeader.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Search, ShoppingCart, Bell, Menu, Package } from 'lucide-react';\r\nimport { Button } from '../../Button';\r\nimport { Input } from '../../Input';\r\nimport { Badge } from '../../Badge';\r\nimport { Avatar, AvatarImage, AvatarFallback } from '../../Avatar';\r\n\r\nexport interface MarketplaceHeaderProps {\r\n searchQuery: string;\r\n onSearchChange: (query: string) => void;\r\n cartItemCount: number;\r\n onCartClick: () => void;\r\n onMenuToggle: () => void;\r\n userRole?: 'buyer' | 'seller' | 'admin';\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Marketplace header component with search, cart, and user controls\r\n * Extracted from main marketplace component for reusability\r\n */\r\nexport const MarketplaceHeader: React.FC<MarketplaceHeaderProps> = ({\r\n searchQuery,\r\n onSearchChange,\r\n cartItemCount,\r\n onCartClick,\r\n onMenuToggle,\r\n userRole = 'buyer',\r\n className = '',\r\n}) => {\r\n return (\r\n <header className={`bg-white border-b border-gray-200 sticky top-0 z-40 ${className}`}>\r\n <div className=\"px-6 py-4\">\r\n <div className=\"flex items-center justify-between\">\r\n {/* Left Section */}\r\n <div className=\"flex items-center space-x-4\">\r\n \r\n <div className=\"flex items-center space-x-3\">\r\n <div className=\"w-8 h-8 bg-primary-600 rounded-lg flex items-center justify-center\">\r\n <Package className=\"h-5 w-5 text-white\" />\r\n </div>\r\n <div>\r\n <h1 className=\"font-bold text-xl text-gray-900\">MarketPlace</h1>\r\n <p className=\"text-xs text-gray-500\">Your digital marketplace</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n \r\n\r\n {/* Right Section */}\r\n <div className=\"flex items-center space-x-3\">\r\n {/* Cart */}\r\n <div className=\"relative\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={onCartClick}\r\n className=\"relative\"\r\n >\r\n <ShoppingCart className=\"h-5 w-5\" />\r\n {cartItemCount > 0 && (\r\n <Badge \r\n variant=\"danger\" \r\n className=\"absolute -top-1 -right-1 h-5 w-5 text-xs p-0 flex items-center justify-center\"\r\n >\r\n {cartItemCount}\r\n </Badge>\r\n )}\r\n </Button>\r\n </div>\r\n\r\n {/* Notifications */}\r\n <Button variant=\"ghost\" size=\"sm\" className=\"relative\">\r\n <Bell className=\"h-5 w-5\" />\r\n <Badge \r\n variant=\"danger\" \r\n className=\"absolute -top-1 -right-1 h-4 w-4 text-xs p-0 flex items-center justify-center\"\r\n >\r\n 3\r\n </Badge>\r\n </Button>\r\n\r\n {/* User Profile */}\r\n <div className=\"flex items-center space-x-3 pl-3 border-l border-gray-200\">\r\n <div className=\"hidden sm:block text-right\">\r\n <p className=\"text-sm font-medium text-gray-900\">John Doe</p>\r\n <p className=\"text-xs text-gray-500 capitalize\">{userRole}</p>\r\n </div>\r\n <Avatar size=\"sm\">\r\n <AvatarImage src=\"https://images.pexels.com/photos/774909/pexels-photo-774909.jpeg?auto=compress&cs=tinysrgb&w=64\" />\r\n <AvatarFallback>JD</AvatarFallback>\r\n </Avatar>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </header>\r\n );\r\n};"],"names":["_jsx","_jsxs"],"mappings":";;;;;;AAiBA;;;AAGG;AACI,MAAM,iBAAiB,GAAqC,CAAC,EAClE,WAAW,EACX,cAAc,EACd,aAAa,EACb,WAAW,EACX,YAAY,EACZ,QAAQ,GAAG,OAAO,EAClB,SAAS,GAAG,EAAE,GACf,KAAI;IACH,QACEA,gBAAQ,SAAS,EAAE,uDAAuD,SAAS,CAAA,CAAE,YACnFA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACxBC,cAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAEhDD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAE1CC,cAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC1CD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oEAAoE,EAAA,QAAA,EACjFA,GAAA,CAAC,OAAO,EAAA,EAAC,SAAS,EAAC,oBAAoB,GAAG,EAAA,CACtC,EACNC,yBACED,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAAA,aAAA,EAAA,CAAiB,EAChEA,WAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,0BAAA,EAAA,CAA6B,CAAA,EAAA,CAC7D,IACF,EAAA,CACF,EAKNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,aAE1CD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,EAAA,QAAA,EACvBC,KAAC,MAAM,EAAA,EACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,WAAW,EACpB,SAAS,EAAC,UAAU,EAAA,QAAA,EAAA,CAEpBD,GAAA,CAAC,YAAY,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EACnC,aAAa,GAAG,CAAC,KAChBA,GAAA,CAAC,KAAK,EAAA,EACJ,OAAO,EAAC,QAAQ,EAChB,SAAS,EAAC,+EAA+E,EAAA,QAAA,EAExF,aAAa,EAAA,CACR,CACT,IACM,EAAA,CACL,EAGNC,KAAC,MAAM,EAAA,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,UAAU,EAAA,QAAA,EAAA,CACpDD,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EAC5BA,IAAC,KAAK,EAAA,EACJ,OAAO,EAAC,QAAQ,EAChB,SAAS,EAAC,+EAA+E,EAAA,QAAA,EAAA,GAAA,EAAA,CAGnF,CAAA,EAAA,CACD,EAGTC,cAAK,SAAS,EAAC,2DAA2D,EAAA,QAAA,EAAA,CACxEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,CACzCD,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,UAAA,EAAA,CAAa,EAC7DA,WAAG,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAE,QAAQ,EAAA,CAAK,CAAA,EAAA,CAC1D,EACNC,IAAA,CAAC,MAAM,EAAA,EAAC,IAAI,EAAC,IAAI,EAAA,QAAA,EAAA,CACfD,IAAC,WAAW,EAAA,EAAC,GAAG,EAAC,iGAAiG,EAAA,CAAG,EACrHA,GAAA,CAAC,cAAc,qBAAoB,CAAA,EAAA,CAC5B,CAAA,EAAA,CACL,IACF,CAAA,EAAA,CACF,EAAA,CACF,EAAA,CACC;AAEb;;;;"}
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 \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 \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":";;;;;;AAiBA;;;AAGG;AACI,MAAM,iBAAiB,GAAqC,CAAC,EAClE,WAAW,EACX,cAAc,EACd,aAAa,EACb,WAAW,EACX,YAAY,EACZ,QAAQ,GAAG,OAAO,EAClB,SAAS,GAAG,EAAE,GACf,KAAI;IACH,QACEA,gBAAQ,SAAS,EAAE,uDAAuD,SAAS,CAAA,CAAE,YACnFA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACxBC,cAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAEhDD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAE1CC,cAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC1CD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oEAAoE,EAAA,QAAA,EACjFA,GAAA,CAAC,OAAO,EAAA,EAAC,SAAS,EAAC,oBAAoB,GAAG,EAAA,CACtC,EACNC,yBACED,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAAA,aAAA,EAAA,CAAiB,EAChEA,WAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,0BAAA,EAAA,CAA6B,CAAA,EAAA,CAC7D,IACF,EAAA,CACF,EAKNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,aAE1CD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,EAAA,QAAA,EACvBC,KAAC,MAAM,EAAA,EACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,WAAW,EACpB,SAAS,EAAC,UAAU,EAAA,QAAA,EAAA,CAEpBD,GAAA,CAAC,YAAY,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EACnC,aAAa,GAAG,CAAC,KAChBA,GAAA,CAAC,KAAK,EAAA,EACJ,OAAO,EAAC,QAAQ,EAChB,SAAS,EAAC,+EAA+E,EAAA,QAAA,EAExF,aAAa,EAAA,CACR,CACT,IACM,EAAA,CACL,EAGNC,KAAC,MAAM,EAAA,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,UAAU,EAAA,QAAA,EAAA,CACpDD,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EAC5BA,IAAC,KAAK,EAAA,EACJ,OAAO,EAAC,QAAQ,EAChB,SAAS,EAAC,+EAA+E,EAAA,QAAA,EAAA,GAAA,EAAA,CAGnF,CAAA,EAAA,CACD,EAGTC,cAAK,SAAS,EAAC,2DAA2D,EAAA,QAAA,EAAA,CACxEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,CACzCD,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,UAAA,EAAA,CAAa,EAC7DA,WAAG,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAE,QAAQ,EAAA,CAAK,CAAA,EAAA,CAC1D,EACNC,IAAA,CAAC,MAAM,EAAA,EAAC,IAAI,EAAC,IAAI,EAAA,QAAA,EAAA,CACfD,IAAC,WAAW,EAAA,EAAC,GAAG,EAAC,iGAAiG,EAAA,CAAG,EACrHA,GAAA,CAAC,cAAc,qBAAoB,CAAA,EAAA,CAC5B,CAAA,EAAA,CACL,IACF,CAAA,EAAA,CACF,EAAA,CACF,EAAA,CACC;AAEb;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProductCard.js","sources":["../../../../src/components/Marketplace/components/ProductCard.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Star, Heart, ShoppingCart, Eye } from 'lucide-react';\r\nimport { Button } from '../../Button';\r\nimport { Card, CardContent } from '../../Card';\r\nimport { Badge } from '../../Badge';\r\nimport { Image } from '../../Image';\r\nimport type { Product } from '../types';\r\nimport { useBreakpoint } from '../../../hooks/useBreakpoint';\r\n\r\nexport interface ProductCardProps {\r\n product: Product;\r\n onProductClick?: (product: Product) => void;\r\n onAddToCart?: (product: Product) => void;\r\n onQuickView?: (product: Product) => void;\r\n onToggleWishlist?: (productId: string) => void;\r\n isWishlisted?: boolean;\r\n showQuickActions?: boolean;\r\n className?: string;\r\n}\r\n\r\n/** Quick Actions Subcomponent */\r\nconst ProductQuickActions: React.FC<{\r\n isWishlisted: boolean;\r\n onToggleWishlist: (e: React.MouseEvent) => void;\r\n onQuickView: (e: React.MouseEvent) => void;\r\n isMobile: boolean;\r\n}> = ({ isWishlisted, onToggleWishlist, onQuickView, isMobile }) => (\r\n <div\r\n className={`flex ${isMobile ? 'flex-row gap-2 absolute bottom-2 left-2 z-10' : ''}`}\r\n aria-label=\"Product quick actions\"\r\n >\r\n <Button\r\n variant=\"ghost\"\r\n size={isMobile ? 'md' : 'sm'}\r\n onClick={onToggleWishlist}\r\n className={`bg-white/80 hover:bg-white rounded-full p-2 focus:outline-none focus:ring-2 focus:ring-primary transition ${\r\n isMobile ? '' : 'opacity-0 group-hover:opacity-100 absolute top-2 right-2'\r\n }`}\r\n aria-label={isWishlisted ? 'Remove from wishlist' : 'Add to wishlist'}\r\n tabIndex={0}\r\n >\r\n <Heart className={`h-5 w-5 ${isWishlisted ? 'fill-current text-red-500' : ''}`} />\r\n </Button>\r\n <Button\r\n variant=\"ghost\"\r\n size={isMobile ? 'md' : 'sm'}\r\n onClick={onQuickView}\r\n className={`bg-white/80 hover:bg-white rounded-full p-2 focus:outline-none focus:ring-2 focus:ring-primary transition ${\r\n isMobile ? '' : 'opacity-0 group-hover:opacity-100 absolute bottom-2 right-2'\r\n }`}\r\n aria-label=\"Quick view\"\r\n tabIndex={0}\r\n >\r\n <Eye className=\"h-5 w-5\" />\r\n </Button>\r\n </div>\r\n);\r\n\r\n/** Overlay Subcomponent */\r\nconst ProductOverlay: React.FC<{\r\n discount?: number;\r\n inStock: boolean;\r\n}> = ({ discount, inStock }) => (\r\n <>\r\n {discount && (\r\n <Badge variant=\"danger\" className=\"absolute top-2 left-2 text-xs px-2 py-1\">\r\n -{discount}%\r\n </Badge>\r\n )}\r\n {!inStock && (\r\n <div className=\"absolute inset-0 bg-black/50 flex items-center justify-center z-20\">\r\n <Badge variant=\"secondary\" className=\"text-xs px-2 py-1\">Out of Stock</Badge>\r\n </div>\r\n )}\r\n </>\r\n);\r\n\r\n/**\r\n * Reusable product card component for displaying product information\r\n * Used across different marketplace views (grid, list, featured, etc.)\r\n */\r\nexport const ProductCard: React.FC<ProductCardProps> = ({\r\n product,\r\n onProductClick,\r\n onAddToCart,\r\n onQuickView,\r\n onToggleWishlist,\r\n isWishlisted = false,\r\n showQuickActions = true,\r\n className = '',\r\n}) => {\r\n const { isBelow } = useBreakpoint();\r\n const isMobile = isBelow('md');\r\n\r\n const handleProductClick = () => {\r\n onProductClick?.(product);\r\n };\r\n\r\n const handleAddToCart = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n onAddToCart?.(product);\r\n };\r\n\r\n const handleQuickView = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n onQuickView?.(product);\r\n };\r\n\r\n const handleToggleWishlist = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n onToggleWishlist?.(product.id);\r\n };\r\n\r\n return (\r\n <Card\r\n className={`group hover:shadow-lg transition-all duration-300 cursor-pointer flex flex-col max-h-[28rem] ${className}`}\r\n tabIndex={0}\r\n aria-label={`Product card for ${product.name}`}\r\n >\r\n <div className=\"relative aspect-square bg-gray-100 rounded-t-lg overflow-hidden\">\r\n <Image\r\n src={product.images[0]}\r\n alt={product.name}\r\n className=\"w-full h-full object-cover group-hover:scale-105 transition-transform duration-300\"\r\n onClick={handleProductClick}\r\n draggable={false}\r\n />\r\n\r\n {/* Overlays */}\r\n <ProductOverlay discount={product.discount} inStock={product.inStock} />\r\n\r\n {/* Quick Actions */}\r\n {showQuickActions && (\r\n <ProductQuickActions\r\n isWishlisted={isWishlisted}\r\n onToggleWishlist={handleToggleWishlist}\r\n onQuickView={handleQuickView}\r\n isMobile={isMobile}\r\n />\r\n )}\r\n </div>\r\n\r\n <CardContent className=\"p-3 sm:p-4 flex-1 flex flex-col\">\r\n <div className=\"mb-2\">\r\n <h3\r\n className=\"font-medium text-gray-900 line-clamp-2 cursor-pointer hover:text-primary-600 text-base sm:text-lg\"\r\n onClick={handleProductClick}\r\n tabIndex={0}\r\n aria-label={`View details for ${product.name}`}\r\n >\r\n {product.name}\r\n </h3>\r\n <p className=\"text-sm text-gray-600 line-clamp-1\">{product.brand}</p>\r\n </div>\r\n\r\n {/* Rating */}\r\n <div className=\"flex items-center space-x-1 mb-2\">\r\n <Star className=\"h-4 w-4 text-yellow-400 fill-current\" />\r\n <span className=\"text-sm text-gray-600\">\r\n {product.rating} ({product.reviewCount})\r\n </span>\r\n </div>\r\n\r\n {/* Price */}\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <div className=\"flex items-center space-x-2\">\r\n <span className=\"text-lg font-bold text-gray-900\">\r\n ${product.price.toFixed(2)}\r\n </span>\r\n {product.originalPrice && (\r\n <span className=\"text-sm text-gray-500 line-through\">\r\n ${product.originalPrice.toFixed(2)}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"mt-auto\">\r\n {/* Add to Cart Button */}\r\n <Button\r\n variant=\"primary\"\r\n size={isMobile ? 'md' : 'sm'}\r\n onClick={handleAddToCart}\r\n disabled={!product.inStock}\r\n className=\"w-full\"\r\n aria-label=\"Add to cart\"\r\n >\r\n <ShoppingCart className=\"mr-2 h-4 w-4\" />\r\n Add to Cart\r\n </Button>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n );\r\n};"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"ProductCard.js","sources":["../../../../src/components/Marketplace/components/ProductCard.tsx"],"sourcesContent":["import React from 'react';\nimport { Star, Heart, ShoppingCart, Eye } from 'lucide-react';\nimport { Button } from '../../Button';\nimport { Card, CardContent } from '../../Card';\nimport { Badge } from '../../Badge';\nimport { Image } from '../../Image';\nimport type { Product } from '../types';\nimport { useBreakpoint } from '../../../hooks/useBreakpoint';\n\nexport interface ProductCardProps {\n product: Product;\n onProductClick?: (product: Product) => void;\n onAddToCart?: (product: Product) => void;\n onQuickView?: (product: Product) => void;\n onToggleWishlist?: (productId: string) => void;\n isWishlisted?: boolean;\n showQuickActions?: boolean;\n className?: string;\n}\n\n/** Quick Actions Subcomponent */\nconst ProductQuickActions: React.FC<{\n isWishlisted: boolean;\n onToggleWishlist: (e: React.MouseEvent) => void;\n onQuickView: (e: React.MouseEvent) => void;\n isMobile: boolean;\n}> = ({ isWishlisted, onToggleWishlist, onQuickView, isMobile }) => (\n <div\n className={`flex ${isMobile ? 'flex-row gap-2 absolute bottom-2 left-2 z-10' : ''}`}\n aria-label=\"Product quick actions\"\n >\n <Button\n variant=\"ghost\"\n size={isMobile ? 'md' : 'sm'}\n onClick={onToggleWishlist}\n className={`bg-white/80 hover:bg-white rounded-full p-2 focus:outline-none focus:ring-2 focus:ring-primary transition ${\n isMobile ? '' : 'opacity-0 group-hover:opacity-100 absolute top-2 right-2'\n }`}\n aria-label={isWishlisted ? 'Remove from wishlist' : 'Add to wishlist'}\n tabIndex={0}\n >\n <Heart className={`h-5 w-5 ${isWishlisted ? 'fill-current text-red-500' : ''}`} />\n </Button>\n <Button\n variant=\"ghost\"\n size={isMobile ? 'md' : 'sm'}\n onClick={onQuickView}\n className={`bg-white/80 hover:bg-white rounded-full p-2 focus:outline-none focus:ring-2 focus:ring-primary transition ${\n isMobile ? '' : 'opacity-0 group-hover:opacity-100 absolute bottom-2 right-2'\n }`}\n aria-label=\"Quick view\"\n tabIndex={0}\n >\n <Eye className=\"h-5 w-5\" />\n </Button>\n </div>\n);\n\n/** Overlay Subcomponent */\nconst ProductOverlay: React.FC<{\n discount?: number;\n inStock: boolean;\n}> = ({ discount, inStock }) => (\n <>\n {discount && (\n <Badge variant=\"danger\" className=\"absolute top-2 left-2 text-xs px-2 py-1\">\n -{discount}%\n </Badge>\n )}\n {!inStock && (\n <div className=\"absolute inset-0 bg-black/50 flex items-center justify-center z-20\">\n <Badge variant=\"secondary\" className=\"text-xs px-2 py-1\">Out of Stock</Badge>\n </div>\n )}\n </>\n);\n\n/**\n * Reusable product card component for displaying product information\n * Used across different marketplace views (grid, list, featured, etc.)\n */\nexport const ProductCard: React.FC<ProductCardProps> = ({\n product,\n onProductClick,\n onAddToCart,\n onQuickView,\n onToggleWishlist,\n isWishlisted = false,\n showQuickActions = true,\n className = '',\n}) => {\n const { isBelow } = useBreakpoint();\n const isMobile = isBelow('md');\n\n const handleProductClick = () => {\n onProductClick?.(product);\n };\n\n const handleAddToCart = (e: React.MouseEvent) => {\n e.stopPropagation();\n onAddToCart?.(product);\n };\n\n const handleQuickView = (e: React.MouseEvent) => {\n e.stopPropagation();\n onQuickView?.(product);\n };\n\n const handleToggleWishlist = (e: React.MouseEvent) => {\n e.stopPropagation();\n onToggleWishlist?.(product.id);\n };\n\n return (\n <Card\n className={`group hover:shadow-lg transition-all duration-300 cursor-pointer flex flex-col max-h-[28rem] ${className}`}\n tabIndex={0}\n aria-label={`Product card for ${product.name}`}\n >\n <div className=\"relative aspect-square bg-gray-100 rounded-t-lg overflow-hidden\">\n <Image\n src={product.images[0]}\n alt={product.name}\n className=\"w-full h-full object-cover group-hover:scale-105 transition-transform duration-300\"\n onClick={handleProductClick}\n draggable={false}\n />\n\n {/* Overlays */}\n <ProductOverlay discount={product.discount} inStock={product.inStock} />\n\n {/* Quick Actions */}\n {showQuickActions && (\n <ProductQuickActions\n isWishlisted={isWishlisted}\n onToggleWishlist={handleToggleWishlist}\n onQuickView={handleQuickView}\n isMobile={isMobile}\n />\n )}\n </div>\n\n <CardContent className=\"p-3 sm:p-4 flex-1 flex flex-col\">\n <div className=\"mb-2\">\n <h3\n className=\"font-medium text-gray-900 line-clamp-2 cursor-pointer hover:text-primary-600 text-base sm:text-lg\"\n onClick={handleProductClick}\n tabIndex={0}\n aria-label={`View details for ${product.name}`}\n >\n {product.name}\n </h3>\n <p className=\"text-sm text-gray-600 line-clamp-1\">{product.brand}</p>\n </div>\n\n {/* Rating */}\n <div className=\"flex items-center space-x-1 mb-2\">\n <Star className=\"h-4 w-4 text-yellow-400 fill-current\" />\n <span className=\"text-sm text-gray-600\">\n {product.rating} ({product.reviewCount})\n </span>\n </div>\n\n {/* Price */}\n <div className=\"flex items-center justify-between mb-3\">\n <div className=\"flex items-center space-x-2\">\n <span className=\"text-lg font-bold text-gray-900\">\n ${product.price.toFixed(2)}\n </span>\n {product.originalPrice && (\n <span className=\"text-sm text-gray-500 line-through\">\n ${product.originalPrice.toFixed(2)}\n </span>\n )}\n </div>\n </div>\n\n <div className=\"mt-auto\">\n {/* Add to Cart Button */}\n <Button\n variant=\"primary\"\n size={isMobile ? 'md' : 'sm'}\n onClick={handleAddToCart}\n disabled={!product.inStock}\n className=\"w-full\"\n aria-label=\"Add to cart\"\n >\n <ShoppingCart className=\"mr-2 h-4 w-4\" />\n Add to Cart\n </Button>\n </div>\n </CardContent>\n </Card>\n );\n};"],"names":["_jsxs","_jsx"],"mappings":"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"}