@beyondcorp/beyond-ui 1.2.53 → 1.2.57

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 (112) hide show
  1. package/dist/components/Blog/AllBlogsView.d.ts +8 -0
  2. package/dist/components/Blog/AllBlogsView.js +70 -0
  3. package/dist/components/Blog/AllBlogsView.js.map +1 -0
  4. package/dist/components/Blog/BlogCommentSection.d.ts +7 -0
  5. package/dist/components/Blog/BlogCommentSection.js +66 -0
  6. package/dist/components/Blog/BlogCommentSection.js.map +1 -0
  7. package/dist/components/Blog/BlogLayout.d.ts +11 -0
  8. package/dist/components/Blog/BlogLayout.js +29 -0
  9. package/dist/components/Blog/BlogLayout.js.map +1 -0
  10. package/dist/components/Blog/BlogShowcase.d.ts +2 -0
  11. package/dist/components/Blog/BlogShowcase.js +74 -0
  12. package/dist/components/Blog/BlogShowcase.js.map +1 -0
  13. package/dist/components/Blog/BlogSidebar.d.ts +10 -0
  14. package/dist/components/Blog/BlogSidebar.js +47 -0
  15. package/dist/components/Blog/BlogSidebar.js.map +1 -0
  16. package/dist/components/Blog/SingleBlogView.d.ts +8 -0
  17. package/dist/components/Blog/SingleBlogView.js +78 -0
  18. package/dist/components/Blog/SingleBlogView.js.map +1 -0
  19. package/dist/components/Blog/data/sampleData.d.ts +4 -0
  20. package/dist/components/Blog/data/sampleData.js +388 -0
  21. package/dist/components/Blog/data/sampleData.js.map +1 -0
  22. package/dist/components/Blog/hooks/index.d.ts +3 -0
  23. package/dist/components/Blog/hooks/useBlog.d.ts +22 -0
  24. package/dist/components/Blog/hooks/useBlog.js +148 -0
  25. package/dist/components/Blog/hooks/useBlog.js.map +1 -0
  26. package/dist/components/Blog/hooks/useBlogNavigation.d.ts +12 -0
  27. package/dist/components/Blog/hooks/useBlogNavigation.js +75 -0
  28. package/dist/components/Blog/hooks/useBlogNavigation.js.map +1 -0
  29. package/dist/components/Blog/hooks/useComments.d.ts +20 -0
  30. package/dist/components/Blog/hooks/useComments.js +108 -0
  31. package/dist/components/Blog/hooks/useComments.js.map +1 -0
  32. package/dist/components/Blog/index.d.ts +8 -0
  33. package/dist/components/Blog/types.d.ts +82 -0
  34. package/dist/components/CodeHighlight/CodeHighlight.d.ts +7 -0
  35. package/dist/components/CodeHighlight/CodeHighlight.js +18 -0
  36. package/dist/components/CodeHighlight/CodeHighlight.js.map +1 -0
  37. package/dist/components/CodeHighlight/index.d.ts +1 -0
  38. package/dist/components/Marketplace/AllProductsView.d.ts +3 -0
  39. package/dist/components/Marketplace/AllProductsView.js +7 -18
  40. package/dist/components/Marketplace/AllProductsView.js.map +1 -1
  41. package/dist/components/Marketplace/MarketplaceComponent.js +5 -1
  42. package/dist/components/Marketplace/MarketplaceComponent.js.map +1 -1
  43. package/dist/components/Marketplace/MarketplaceSidebar.js +31 -31
  44. package/dist/components/Marketplace/MarketplaceSidebar.js.map +1 -1
  45. package/dist/components/Marketplace/SingleProductView.js +3 -0
  46. package/dist/components/Marketplace/SingleProductView.js.map +1 -1
  47. package/dist/components/Marketplace/components/MarketplaceControls.d.ts +17 -0
  48. package/dist/components/Marketplace/components/MarketplaceControls.js +22 -0
  49. package/dist/components/Marketplace/components/MarketplaceControls.js.map +1 -0
  50. package/dist/components/Marketplace/components/MarketplaceDashboard.d.ts +3 -0
  51. package/dist/components/Marketplace/components/MarketplaceDashboard.js +20 -10
  52. package/dist/components/Marketplace/components/MarketplaceDashboard.js.map +1 -1
  53. package/dist/components/Marketplace/components/MarketplaceHeader.js +2 -3
  54. package/dist/components/Marketplace/components/MarketplaceHeader.js.map +1 -1
  55. package/dist/components/Marketplace/components/ProductCard.js +9 -2
  56. package/dist/components/Marketplace/components/ProductCard.js.map +1 -1
  57. package/dist/components/Marketplace/hooks/useScrollToTop.d.ts +10 -0
  58. package/dist/components/Marketplace/hooks/useScrollToTop.js +22 -0
  59. package/dist/components/Marketplace/hooks/useScrollToTop.js.map +1 -0
  60. package/dist/index.d.ts +2 -4
  61. package/dist/index.js +10 -4
  62. package/dist/styles.css +1 -1
  63. package/package.json +6 -1
  64. package/dist/components/AllProductsView/AllProductsView.d.ts +0 -14
  65. package/dist/components/AllProductsView/AllProductsView.js +0 -61
  66. package/dist/components/AllProductsView/AllProductsView.js.map +0 -1
  67. package/dist/components/AllProductsView/CardGroup.d.ts +0 -6
  68. package/dist/components/AllProductsView/CardGroup.js +0 -11
  69. package/dist/components/AllProductsView/CardGroup.js.map +0 -1
  70. package/dist/components/AllProductsView/ProductCard.d.ts +0 -11
  71. package/dist/components/AllProductsView/ProductCard.js +0 -13
  72. package/dist/components/AllProductsView/ProductCard.js.map +0 -1
  73. package/dist/components/AllProductsView/index.d.ts +0 -2
  74. package/dist/components/BlogFeedView/BlogFeedView.d.ts +0 -22
  75. package/dist/components/BlogFeedView/BlogFeedView.js +0 -29
  76. package/dist/components/BlogFeedView/BlogFeedView.js.map +0 -1
  77. package/dist/components/BlogFeedView/index.d.ts +0 -1
  78. package/dist/components/BlogLayout/BlogLayout.d.ts +0 -13
  79. package/dist/components/BlogLayout/BlogLayout.js +0 -20
  80. package/dist/components/BlogLayout/BlogLayout.js.map +0 -1
  81. package/dist/components/BlogLayout/index.d.ts +0 -1
  82. package/dist/components/BlogSidebar/BlogSidebar.d.ts +0 -19
  83. package/dist/components/BlogSidebar/BlogSidebar.js +0 -10
  84. package/dist/components/BlogSidebar/BlogSidebar.js.map +0 -1
  85. package/dist/components/BlogSidebar/index.d.ts +0 -1
  86. package/dist/components/Checkout/CheckoutPage.d.ts +0 -16
  87. package/dist/components/Checkout/CheckoutPage.js +0 -44
  88. package/dist/components/Checkout/CheckoutPage.js.map +0 -1
  89. package/dist/components/Checkout/CheckoutSidebar.d.ts +0 -15
  90. package/dist/components/Checkout/CheckoutSidebar.js +0 -25
  91. package/dist/components/Checkout/CheckoutSidebar.js.map +0 -1
  92. package/dist/components/Checkout/index.d.ts +0 -3
  93. package/dist/components/Checkout/types.d.ts +0 -21
  94. package/dist/components/CommerceSidebar/CommerceSidebar.d.ts +0 -20
  95. package/dist/components/CommerceSidebar/CommerceSidebar.js +0 -14
  96. package/dist/components/CommerceSidebar/CommerceSidebar.js.map +0 -1
  97. package/dist/components/CommerceSidebar/index.d.ts +0 -1
  98. package/dist/components/MarketplaceLayout/MarketplaceLayout.d.ts +0 -17
  99. package/dist/components/MarketplaceLayout/MarketplaceLayout.js +0 -22
  100. package/dist/components/MarketplaceLayout/MarketplaceLayout.js.map +0 -1
  101. package/dist/components/MarketplaceLayout/index.d.ts +0 -1
  102. package/dist/components/ProfileManagement/ProfileManagementPage.d.ts +0 -16
  103. package/dist/components/ProfileManagement/ProfileManagementPage.js +0 -65
  104. package/dist/components/ProfileManagement/ProfileManagementPage.js.map +0 -1
  105. package/dist/components/SingleBlogView/SingleBlogView.d.ts +0 -26
  106. package/dist/components/SingleBlogView/SingleBlogView.js +0 -17
  107. package/dist/components/SingleBlogView/SingleBlogView.js.map +0 -1
  108. package/dist/components/SingleBlogView/index.d.ts +0 -1
  109. package/dist/components/SingleProductView/SingleProductView.d.ts +0 -31
  110. package/dist/components/SingleProductView/SingleProductView.js +0 -34
  111. package/dist/components/SingleProductView/SingleProductView.js.map +0 -1
  112. package/dist/components/SingleProductView/index.d.ts +0 -1
@@ -77,7 +77,11 @@ const MarketplaceComponent = ({ userRole = 'buyer', products, cartItems: cartIte
77
77
  (onAddToCart ?? addToCart)(product, quantity);
78
78
  setShowCheckout(true);
79
79
  };
80
- return (jsxs("div", { className: `min-h-screen bg-gray-50 ${className}`, children: [jsx(MarketplaceHeader, { searchQuery: searchQuery, onSearchChange: handleSearch, cartItemCount: cartItemCount, onCartClick: handleCartClick, onMenuToggle: toggleSidebar, userRole: userRole }), jsxs("div", { className: "flex", children: [(currentView === 'products' || currentView === 'dashboard') && (jsx(MarketplaceSidebar, { filters: filters, onFiltersChange: onFiltersChange ?? setFilters, onClearFilters: onClearFilters ?? resetFilters, collapsed: sidebarCollapsed, onToggleCollapse: toggleSidebar })), jsxs("main", { className: "flex-1 p-6", children: [currentView === 'dashboard' && (jsx(MarketplaceDashboard, { featuredProducts: featuredProducts, trendingProducts: trendingProducts, recentlyViewed: recentlyViewed, onProductClick: navigateToProduct, onAddToCart: onAddToCart ?? addToCart, onViewAllProducts: navigateToProducts })), currentView === 'products' && (jsx(AllProductsView, { onProductClick: navigateToProduct, onAddToCart: onAddToCart ?? addToCart, products: productsData, filters: filters, onFiltersChange: setFilters, onClearFilters: resetFilters })), currentView === 'product' && selectedProduct && (jsx(SingleProductView, { product: (() => {
80
+ // State for mobile sidebar modal
81
+ const [showMobileSidebar, setShowMobileSidebar] = React__default.useState(false);
82
+ return (jsxs("div", { className: `min-h-screen bg-gray-50 ${className}`, children: [jsx(MarketplaceHeader, { searchQuery: searchQuery, onSearchChange: handleSearch, cartItemCount: cartItemCount, onCartClick: handleCartClick, onMenuToggle: toggleSidebar, userRole: userRole }), jsx(Modal, { open: showMobileSidebar, onOpenChange: setShowMobileSidebar, size: "full", children: jsxs("div", { className: "h-full w-full bg-background overflow-y-auto p-4", children: [jsx(MarketplaceSidebar, { filters: filters, onFiltersChange: onFiltersChange ?? setFilters, onClearFilters: onClearFilters ?? resetFilters, collapsed: false, onToggleCollapse: () => setShowMobileSidebar(false), className: "w-full max-w-md mx-auto" }), jsxs("div", { className: "mt-6 flex justify-end gap-2", children: [jsx("button", { className: "px-4 py-2 rounded bg-secondary text-secondary-foreground", onClick: () => {
83
+ (onClearFilters ?? resetFilters)();
84
+ }, children: "Clear All" }), jsx("button", { className: "px-4 py-2 rounded bg-primary text-primary-foreground", onClick: () => setShowMobileSidebar(false), children: "Apply Filters" })] })] }) }), jsxs("div", { className: `w-full ${!isBelow('lg') ? 'flex' : ''}`, children: [(!isBelow('lg') && (currentView === 'products' || currentView === 'dashboard')) && (jsx(MarketplaceSidebar, { filters: filters, onFiltersChange: onFiltersChange ?? setFilters, onClearFilters: onClearFilters ?? resetFilters, collapsed: sidebarCollapsed, onToggleCollapse: toggleSidebar })), jsxs("main", { className: `relative p-6 ${isBelow('lg') ? 'w-full' : 'flex-1'}`, children: [currentView === 'dashboard' && (jsx(MarketplaceDashboard, { featuredProducts: featuredProducts, trendingProducts: trendingProducts, recentlyViewed: recentlyViewed, onProductClick: navigateToProduct, onAddToCart: onAddToCart ?? addToCart, onViewAllProducts: navigateToProducts, searchQuery: searchQuery, onSearch: handleSearch, setCurrentView: setCurrentView })), currentView === 'products' && (jsx(AllProductsView, { onProductClick: navigateToProduct, onAddToCart: onAddToCart ?? addToCart, products: productsData, filters: filters, searchQuery: searchQuery, setSearchQuery: setSearchQuery, onFiltersChange: setFilters, onClearFilters: resetFilters })), currentView === 'product' && selectedProduct && (jsx(SingleProductView, { product: (() => {
81
85
  const found = productsData.find((p) => String(p.id).trim() === String(selectedProduct.id).trim());
82
86
  if (!found) {
83
87
  console.error("MarketplaceComponent: No product found for selectedProduct.id:", selectedProduct.id, "Available ids:", productsData.map((p) => p.id));
@@ -1 +1 @@
1
- {"version":3,"file":"MarketplaceComponent.js","sources":["../../../src/components/Marketplace/MarketplaceComponent.tsx"],"sourcesContent":["import React from 'react';\nimport { sampleProducts } from './data/sampleData';\nimport { MarketplaceHeader } from './components/MarketplaceHeader';\nimport { MarketplaceDashboard } from './components/MarketplaceDashboard';\nimport { MarketplaceSidebar } from './MarketplaceSidebar';\nimport { AllProductsView } from './AllProductsView';\nimport { SingleProductView } from './SingleProductView';\nimport { CheckoutCompact } from './CheckoutCompact';\nimport { 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 return (\n <div className={`min-h-screen bg-gray-50 ${className}`}>\n {/* Header */}\n <MarketplaceHeader\n searchQuery={searchQuery}\n onSearchChange={handleSearch}\n cartItemCount={cartItemCount}\n onCartClick={handleCartClick}\n onMenuToggle={toggleSidebar}\n userRole={userRole}\n />\n\n <div className=\"flex\">\n {/* Sidebar */}\n {(currentView === 'products' || currentView === 'dashboard') && (\n <MarketplaceSidebar\n filters={filters}\n onFiltersChange={onFiltersChange ?? setFilters}\n onClearFilters={onClearFilters ?? resetFilters}\n collapsed={sidebarCollapsed}\n onToggleCollapse={toggleSidebar}\n />\n )}\n\n {/* Main Content */}\n <main className=\"flex-1 p-6\">\n {currentView === 'dashboard' && (\n <MarketplaceDashboard\n featuredProducts={featuredProducts}\n trendingProducts={trendingProducts}\n recentlyViewed={recentlyViewed}\n onProductClick={navigateToProduct}\n onAddToCart={onAddToCart ?? addToCart}\n onViewAllProducts={navigateToProducts}\n />\n )}\n \n {currentView === 'products' && (\n <AllProductsView\n onProductClick={navigateToProduct}\n onAddToCart={onAddToCart ?? addToCart}\n products={productsData}\n filters={filters}\n 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":"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"}
1
+ {"version":3,"file":"MarketplaceComponent.js","sources":["../../../src/components/Marketplace/MarketplaceComponent.tsx"],"sourcesContent":["import React from 'react';\r\nimport { sampleProducts } from './data/sampleData';\r\nimport { MarketplaceHeader } from './components/MarketplaceHeader';\r\nimport { MarketplaceDashboard } from './components/MarketplaceDashboard';\r\nimport { MarketplaceSidebar } from './MarketplaceSidebar';\r\nimport { AllProductsView } from './AllProductsView';\r\nimport { SingleProductView } from './SingleProductView';\r\nimport { CheckoutCompact } from './CheckoutCompact';\r\nimport { CheckoutComponent } from './CheckoutComponent';\r\nimport { Modal } from '../Modal/Modal';\r\nimport { useMarketplaceState } from './hooks/useMarketplaceState';\r\nimport { useCart } from './hooks/useCart';\r\nimport { useProductNavigation } from './hooks/useProductNavigation';\r\nimport { useSearch } from './hooks/useSearch';\r\nimport { useBreakpoint } from '../../hooks/useBreakpoint';\r\nimport type { Product, CartItem, FilterOptions } from './types';\r\nimport { sanitizeProduct } from \"./utils/sanitizeProduct\";\r\n\r\n\r\nexport interface MarketplaceComponentProps {\r\n userRole?: 'buyer' | 'seller' | 'admin';\r\n products?: Product[];\r\n cartItems?: CartItem[];\r\n filters?: FilterOptions;\r\n onProductClick?: (product: Product) => void;\r\n onAddToCart?: (product: Product, quantity?: number) => void;\r\n onRemoveFromCart?: (productId: string) => void;\r\n onFiltersChange?: (filters: FilterOptions) => void;\r\n onClearFilters?: () => void;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Main marketplace component orchestrating all marketplace functionality\r\n * Refactored to use modular components and custom hooks for better maintainability\r\n */\r\nexport const MarketplaceComponent: React.FC<MarketplaceComponentProps> = ({\r\n userRole = 'buyer',\r\n products,\r\n cartItems: cartItemsProp,\r\n filters: filtersProp,\r\n onProductClick,\r\n onAddToCart,\r\n onRemoveFromCart,\r\n onFiltersChange,\r\n onClearFilters,\r\n className = '',\r\n}) => {\r\n // Responsive sidebar initial state (mobile = collapsed)\r\n const { currentBreakpoint, isBelow } = useBreakpoint();\r\n const [sidebarInitialized, setSidebarInitialized] = React.useState(false);\r\n\r\n // State management hook (fallbacks for backward compatibility)\r\n const {\r\n sidebarCollapsed,\r\n currentView,\r\n selectedProduct,\r\n searchQuery,\r\n cartItems: cartItemsState,\r\n showCheckout,\r\n filters: filtersState,\r\n setSidebarCollapsed,\r\n setCurrentView,\r\n setSelectedProduct,\r\n setSearchQuery,\r\n setCartItems,\r\n setShowCheckout,\r\n setFilters,\r\n toggleSidebar,\r\n clearCart,\r\n resetFilters,\r\n } = useMarketplaceState();\r\n\r\n // On mount, collapse sidebar if mobile and not already initialized\r\n React.useEffect(() => {\r\n if (!sidebarInitialized && isBelow('md')) {\r\n setSidebarCollapsed(true);\r\n setSidebarInitialized(true);\r\n } else if (!sidebarInitialized) {\r\n setSidebarInitialized(true);\r\n }\r\n }, [sidebarInitialized, isBelow, setSidebarCollapsed]);\r\n\r\n // State for full checkout modal\r\n const [showFullCheckoutModal, setShowFullCheckoutModal] = React.useState(false);\r\n\r\n // Use props if provided, otherwise fallback to internal state/sample data\r\n \r\n const rawProductsData: Product[] = products ?? sampleProducts;\r\n const productsData: Product[] = Array.isArray(rawProductsData)\r\n ? rawProductsData.map(sanitizeProduct)\r\n : [];\r\n const cartItems = cartItemsProp ?? cartItemsState;\r\n const filters = filtersProp ?? filtersState;\r\n\r\n // Cart management hook\r\n const {\r\n addToCart,\r\n removeFromCart,\r\n updateQuantity,\r\n getCartTotal,\r\n getCartItemCount,\r\n isInCart,\r\n getCartItem,\r\n } = useCart({ cartItems, setCartItems });\r\n\r\n // Navigation hook\r\n const {\r\n navigateToProduct,\r\n navigateToProducts,\r\n navigateToDashboard,\r\n navigateToCheckout,\r\n } = useProductNavigation({\r\n setSelectedProduct,\r\n setCurrentView,\r\n onProductClick,\r\n });\r\n\r\n // Search hook\r\n const {\r\n searchResults,\r\n isSearching,\r\n handleSearch,\r\n clearSearch,\r\n } = useSearch({\r\n products: productsData,\r\n searchQuery,\r\n setSearchQuery,\r\n setCurrentView,\r\n });\r\n\r\n // Derived data\r\n const featuredProducts = productsData.slice(0, 4);\r\n const trendingProducts = productsData.slice(4, 8);\r\n const recentlyViewed = productsData.slice(8, 12);\r\n const cartItemCount = getCartItemCount();\r\n\r\n // Event handlers\r\n const handleCartClick = () => {\r\n setShowCheckout(!showCheckout);\r\n };\r\n\r\n const handleCheckoutComplete = (items: any[]) => {\r\n clearCart();\r\n setShowCheckout(false);\r\n };\r\n\r\n const handleBuyNow = (product: Product, quantity: number) => {\r\n (onAddToCart ?? addToCart)(product, quantity);\r\n setShowCheckout(true);\r\n };\r\n\r\n // State for mobile sidebar modal\r\n const [showMobileSidebar, setShowMobileSidebar] = React.useState(false);\r\n\r\n return (\r\n <div className={`min-h-screen bg-gray-50 ${className}`}>\r\n {/* Header */}\r\n <MarketplaceHeader\r\n searchQuery={searchQuery}\r\n onSearchChange={handleSearch}\r\n cartItemCount={cartItemCount}\r\n onCartClick={handleCartClick}\r\n onMenuToggle={toggleSidebar}\r\n userRole={userRole}\r\n />\r\n\r\n {/* Floating Filters Button for Mobile (removed as per user feedback) */}\r\n\r\n {/* Mobile Sidebar Modal */}\r\n <Modal\r\n open={showMobileSidebar}\r\n onOpenChange={setShowMobileSidebar}\r\n size=\"full\"\r\n >\r\n <div className=\"h-full w-full bg-background overflow-y-auto p-4\">\r\n <MarketplaceSidebar\r\n filters={filters}\r\n onFiltersChange={onFiltersChange ?? setFilters}\r\n onClearFilters={onClearFilters ?? resetFilters}\r\n collapsed={false}\r\n onToggleCollapse={() => setShowMobileSidebar(false)}\r\n className=\"w-full max-w-md mx-auto\"\r\n />\r\n <div className=\"mt-6 flex justify-end gap-2\">\r\n <button\r\n className=\"px-4 py-2 rounded bg-secondary text-secondary-foreground\"\r\n onClick={() => {\r\n (onClearFilters ?? resetFilters)();\r\n }}\r\n >\r\n Clear All\r\n </button>\r\n <button\r\n className=\"px-4 py-2 rounded bg-primary text-primary-foreground\"\r\n onClick={() => setShowMobileSidebar(false)}\r\n >\r\n Apply Filters\r\n </button>\r\n </div>\r\n </div>\r\n </Modal>\r\n\r\n <div className={`w-full ${!isBelow('lg') ? 'flex' : ''}`}>\r\n {/* Sidebar: Only render on desktop/tablet */}\r\n {(!isBelow('lg') && (currentView === 'products' || currentView === 'dashboard')) && (\r\n <MarketplaceSidebar\r\n filters={filters}\r\n onFiltersChange={onFiltersChange ?? setFilters}\r\n onClearFilters={onClearFilters ?? resetFilters}\r\n collapsed={sidebarCollapsed}\r\n onToggleCollapse={toggleSidebar}\r\n />\r\n )}\r\n\r\n {/* Main Content: Always full width on mobile */}\r\n <main className={`relative p-6 ${isBelow('lg') ? 'w-full' : 'flex-1'}`}>\r\n {currentView === 'dashboard' && (\r\n <MarketplaceDashboard\r\n featuredProducts={featuredProducts}\r\n trendingProducts={trendingProducts}\r\n recentlyViewed={recentlyViewed}\r\n onProductClick={navigateToProduct}\r\n onAddToCart={onAddToCart ?? addToCart}\r\n onViewAllProducts={navigateToProducts}\r\n searchQuery={searchQuery}\r\n onSearch={handleSearch}\r\n setCurrentView={setCurrentView}\r\n />\r\n )}\r\n \r\n {currentView === 'products' && (\r\n <AllProductsView\r\n onProductClick={navigateToProduct}\r\n onAddToCart={onAddToCart ?? addToCart}\r\n products={productsData}\r\n filters={filters}\r\n searchQuery={searchQuery}\r\n setSearchQuery={setSearchQuery}\r\n onFiltersChange={setFilters}\r\n onClearFilters={resetFilters}\r\n />\r\n )}\r\n \r\n {currentView === 'product' && selectedProduct && (\r\n <SingleProductView\r\n product={\r\n (() => {\r\n const found = productsData.find((p: Product) => String(p.id).trim() === String(selectedProduct.id).trim());\r\n if (!found) {\r\n console.error(\r\n \"MarketplaceComponent: No product found for selectedProduct.id:\",\r\n selectedProduct.id,\r\n \"Available ids:\",\r\n productsData.map((p: Product) => p.id)\r\n );\r\n }\r\n return found;\r\n })()\r\n }\r\n onAddToCart={onAddToCart ?? addToCart}\r\n onBuyNow={handleBuyNow}\r\n />\r\n )}\r\n </main>\r\n\r\n {/* Checkout Sidebar */}\r\n {showCheckout && (\r\n <div className=\"fixed right-4 top-20 z-50\">\r\n <CheckoutCompact\r\n cartItems={cartItems}\r\n onClose={() => setShowCheckout(false)}\r\n onCheckout={handleCheckoutComplete}\r\n onViewFullCheckout={() => {\r\n setShowFullCheckoutModal(true);\r\n setShowCheckout(false);\r\n }}\r\n />\r\n </div>\r\n )}\r\n\r\n {/* Full Checkout Modal */}\r\n <Modal\r\n open={showFullCheckoutModal}\r\n onOpenChange={(open) => setShowFullCheckoutModal(open)}\r\n size=\"xl\"\r\n >\r\n <CheckoutComponent\r\n cartItems={cartItems}\r\n onOrderComplete={() => {\r\n clearCart();\r\n setShowFullCheckoutModal(false);\r\n }}\r\n />\r\n </Modal>\r\n </div>\r\n </div>\r\n );\r\n};"],"names":["React","_jsxs","_jsx"],"mappings":"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"}
@@ -129,38 +129,38 @@ const MarketplaceSidebar = ({ filters, onFiltersChange, onClearFilters, classNam
129
129
  } }), jsx("span", { className: "text-sm text-gray-700 flex-1", children: category.name }), jsxs("span", { className: "text-xs text-gray-500", children: ["(", category.count, ")"] })] }), category.children && (jsx("button", { onClick: () => toggleCategory(category.id), className: "p-1 hover:bg-gray-100 rounded", children: expandedCategories.has(category.id) ? (jsx(ChevronDown, { className: "h-3 w-3 text-gray-400" })) : (jsx(ChevronRight, { className: "h-3 w-3 text-gray-400" })) }))] }), category.children && expandedCategories.has(category.id) && (jsx("div", { className: "mt-1", children: renderCategoryTree(category.children, level + 1) }))] }, category.id)));
130
130
  };
131
131
  if (collapsed) {
132
- return (jsx("div", { className: cn('w-16 flex-shrink-0 bg-background border-r border-border rounded-xl', className), children: jsx(Card, { className: "sticky top-4", children: jsx(CardContent, { className: "p-2", children: jsxs("div", { className: "flex flex-col items-center space-y-3", children: [jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Expand filters", title: "Expand filters", onClick: onToggleCollapse, className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", children: jsx(Filter, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Categories", title: "Categories", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Grid2x2, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Price Range", title: "Price Range", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Tag, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Customer Rating", title: "Customer Rating", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Star, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Brands", title: "Brands", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Tag, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Sellers", title: "Sellers", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Store, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Availability", title: "Availability", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Sliders, { className: "h-5 w-5" }) }), getActiveFiltersCount() > 0 && (jsx(Badge, { variant: "default", className: "text-xs bg-primary text-primary-foreground mt-2", children: getActiveFiltersCount() }))] }) }) }) }));
132
+ return (jsx("div", { className: cn('w-16 flex-shrink-0 bg-background border-r border-border rounded-xl hidden lg:block', className), children: jsx("div", { className: "fixed top-16 left-0 h-[calc(100vh-4rem)] w-16 z-40 bg-background border-r border-border rounded-xl", children: jsx(Card, { className: "h-full shadow-none border-none bg-transparent", children: jsx(CardContent, { className: "p-2", children: jsxs("div", { className: "flex flex-col items-center space-y-3", children: [jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Expand filters", title: "Expand filters", onClick: onToggleCollapse, className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", children: jsx(Filter, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Categories", title: "Categories", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Grid2x2, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Price Range", title: "Price Range", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Tag, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Customer Rating", title: "Customer Rating", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Star, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Brands", title: "Brands", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Tag, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Sellers", title: "Sellers", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Store, { className: "h-5 w-5" }) }), jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Availability", title: "Availability", className: "w-10 h-10 flex items-center justify-center text-muted-foreground hover:bg-accent focus:ring-2 focus:ring-primary rounded-lg", tabIndex: 0, children: jsx(Sliders, { className: "h-5 w-5" }) }), getActiveFiltersCount() > 0 && (jsx(Badge, { variant: "default", className: "text-xs bg-primary text-primary-foreground mt-2", children: getActiveFiltersCount() }))] }) }) }) }) }));
133
133
  }
134
- return (jsx("div", { className: cn('w-80 flex-shrink-0', className), children: jsxs(Card, { className: "sticky top-4", children: [jsx(CardHeader, { className: "pb-3", children: jsxs("div", { className: "flex items-center justify-between", children: [jsxs(CardTitle, { className: "flex items-center text-lg", children: [jsx(Filter, { className: "h-5 w-5 mr-2" }), "Filters", getActiveFiltersCount() > 0 && (jsx(Badge, { variant: "default", className: "ml-2", children: getActiveFiltersCount() }))] }), jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Button, { variant: "ghost", size: "sm", onClick: onClearFilters, children: "Clear All" }), onToggleCollapse && (jsx(Button, { variant: "ghost", size: "sm", onClick: onToggleCollapse, children: jsx(X, { className: "h-4 w-4" }) }))] })] }) }), jsxs(CardContent, { className: "space-y-6 max-h-[calc(100vh-200px)] overflow-y-auto", children: [jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('categories'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Grid2x2, { className: "h-4 w-4 mr-2" }), "Categories"] }), expandedSections.has('categories') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('categories') && (jsx("div", { className: "space-y-1", children: renderCategoryTree(categoryTree) }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('price'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Tag, { className: "h-4 w-4 mr-2" }), "Price Range"] }), expandedSections.has('price') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('price') && (jsxs("div", { className: "space-y-3", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Input, { type: "number", placeholder: "Min", value: filters.priceRange[0], onChange: (e) => handleFilterChange('priceRange', [
135
- parseInt(e.target.value) || 0,
136
- filters.priceRange[1]
137
- ]), className: "w-20 text-sm" }), jsx("span", { className: "text-gray-400", children: "-" }), jsx(Input, { type: "number", placeholder: "Max", value: filters.priceRange[1], onChange: (e) => handleFilterChange('priceRange', [
138
- filters.priceRange[0],
139
- parseInt(e.target.value) || 1000
140
- ]), className: "w-20 text-sm" })] }), jsx("div", { className: "space-y-1", children: [
141
- { label: 'Under $25', range: [0, 25] },
142
- { label: '$25 - $50', range: [25, 50] },
143
- { label: '$50 - $100', range: [50, 100] },
144
- { label: '$100 - $200', range: [100, 200] },
145
- { label: 'Over $200', range: [200, 1000] },
146
- ].map((option) => (jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.priceRange[0] === option.range[0] &&
147
- filters.priceRange[1] === option.range[1], onChange: (e) => {
148
- if (e.target.checked) {
149
- handleFilterChange('priceRange', option.range);
150
- }
151
- } }), jsx("span", { className: "text-sm text-gray-700", children: option.label })] }, option.label))) })] }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('rating'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Star, { className: "h-4 w-4 mr-2" }), "Customer Rating"] }), expandedSections.has('rating') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('rating') && (jsx("div", { className: "space-y-2", children: [4, 3, 2, 1].map(rating => (jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.rating === rating, onChange: (e) => {
152
- handleFilterChange('rating', e.target.checked ? rating : 0);
153
- } }), jsxs("div", { className: "flex items-center space-x-1", children: [[1, 2, 3, 4, 5].map(star => (jsx(Star, { className: `h-4 w-4 ${star <= rating ? 'text-yellow-400 fill-current' : 'text-gray-300'}` }, star))), jsx("span", { className: "text-sm text-gray-700", children: "& up" })] })] }, rating))) }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('brands'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Tag, { className: "h-4 w-4 mr-2" }), "Brands"] }), expandedSections.has('brands') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('brands') && (jsx("div", { className: "space-y-2", children: brands.map(brand => (jsxs("label", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.brands.includes(brand.name), onChange: (e) => {
154
- const newBrands = e.target.checked
155
- ? [...filters.brands, brand.name]
156
- : filters.brands.filter(b => b !== brand.name);
157
- handleFilterChange('brands', newBrands);
158
- } }), jsx("span", { className: "text-sm text-gray-700", children: brand.name })] }), jsxs("span", { className: "text-xs text-gray-500", children: ["(", brand.count, ")"] })] }, brand.name))) }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('vendors'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Store, { className: "h-4 w-4 mr-2" }), "Sellers"] }), expandedSections.has('vendors') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('vendors') && (jsx("div", { className: "space-y-2", children: vendors.map(vendor => (jsxs("label", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.vendors.includes(vendor.name), onChange: (e) => {
159
- const newVendors = e.target.checked
160
- ? [...filters.vendors, vendor.name]
161
- : filters.vendors.filter(v => v !== vendor.name);
162
- handleFilterChange('vendors', newVendors);
163
- } }), jsxs("div", { children: [jsx("div", { className: "text-sm text-gray-700", children: vendor.name }), jsxs("div", { className: "flex items-center space-x-1", children: [jsx(Star, { className: "h-3 w-3 text-yellow-400 fill-current" }), jsx("span", { className: "text-xs text-gray-500", children: vendor.rating })] })] })] }), jsxs("span", { className: "text-xs text-gray-500", children: ["(", vendor.count, ")"] })] }, vendor.name))) }))] }), jsxs("div", { children: [jsxs("h3", { className: "font-medium text-gray-900 mb-3 flex items-center", children: [jsx(Sliders, { className: "h-4 w-4 mr-2" }), "Availability"] }), jsx("div", { className: "space-y-2", children: jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.inStock, onChange: (e) => handleFilterChange('inStock', e.target.checked) }), jsx("span", { className: "text-sm text-gray-700", children: "In Stock Only" })] }) })] }), getActiveFiltersCount() > 0 && (jsxs("div", { className: "pt-4 border-t border-gray-200", children: [jsxs("div", { className: "flex items-center justify-between mb-2", children: [jsx("h3", { className: "font-medium text-gray-900", children: "Active Filters" }), jsx(Button, { variant: "ghost", size: "sm", onClick: onClearFilters, children: "Clear All" })] }), jsxs("div", { className: "flex flex-wrap gap-2", children: [filters.categories.map(category => (jsxs(Badge, { variant: "outline", className: "text-xs", children: [category, jsx("button", { onClick: () => handleFilterChange('categories', filters.categories.filter(c => c !== category)), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] }, category))), filters.brands.map(brand => (jsxs(Badge, { variant: "outline", className: "text-xs", children: [brand, jsx("button", { onClick: () => handleFilterChange('brands', filters.brands.filter(b => b !== brand)), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] }, brand))), filters.rating > 0 && (jsxs(Badge, { variant: "outline", className: "text-xs", children: [filters.rating, "+ stars", jsx("button", { onClick: () => handleFilterChange('rating', 0), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] })), filters.inStock && (jsxs(Badge, { variant: "outline", className: "text-xs", children: ["In Stock", jsx("button", { onClick: () => handleFilterChange('inStock', false), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] }))] })] }))] })] }) }));
134
+ return (jsx("div", { className: cn('w-80 flex-shrink-0 hidden lg:block', className), children: jsx("div", { className: "fixed top-16 left-0 h-[calc(100vh-4rem)] w-80 z-30 bg-background border-r border-border pt-4", children: jsxs(Card, { className: "h-full shadow-none border-none bg-transparent", children: [jsx(CardHeader, { className: "pb-3", children: jsxs("div", { className: "flex items-center justify-between", children: [jsxs(CardTitle, { className: "flex items-center text-lg", children: [jsx(Filter, { className: "h-5 w-5 mr-2" }), "Filters", getActiveFiltersCount() > 0 && (jsx(Badge, { variant: "default", className: "ml-2", children: getActiveFiltersCount() }))] }), jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Button, { variant: "ghost", size: "sm", onClick: onClearFilters, children: "Clear All" }), onToggleCollapse && (jsx(Button, { variant: "ghost", size: "sm", onClick: onToggleCollapse, children: jsx(X, { className: "h-4 w-4" }) }))] })] }) }), jsxs(CardContent, { className: "space-y-6 max-h-[calc(100vh-200px)] overflow-y-auto", children: [jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('categories'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Grid2x2, { className: "h-4 w-4 mr-2" }), "Categories"] }), expandedSections.has('categories') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('categories') && (jsx("div", { className: "space-y-1", children: renderCategoryTree(categoryTree) }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('price'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Tag, { className: "h-4 w-4 mr-2" }), "Price Range"] }), expandedSections.has('price') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('price') && (jsxs("div", { className: "space-y-3", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Input, { type: "number", placeholder: "Min", value: filters.priceRange[0], onChange: (e) => handleFilterChange('priceRange', [
135
+ parseInt(e.target.value) || 0,
136
+ filters.priceRange[1]
137
+ ]), className: "w-20 text-sm" }), jsx("span", { className: "text-gray-400", children: "-" }), jsx(Input, { type: "number", placeholder: "Max", value: filters.priceRange[1], onChange: (e) => handleFilterChange('priceRange', [
138
+ filters.priceRange[0],
139
+ parseInt(e.target.value) || 1000
140
+ ]), className: "w-20 text-sm" })] }), jsx("div", { className: "space-y-1", children: [
141
+ { label: 'Under $25', range: [0, 25] },
142
+ { label: '$25 - $50', range: [25, 50] },
143
+ { label: '$50 - $100', range: [50, 100] },
144
+ { label: '$100 - $200', range: [100, 200] },
145
+ { label: 'Over $200', range: [200, 1000] },
146
+ ].map((option) => (jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.priceRange[0] === option.range[0] &&
147
+ filters.priceRange[1] === option.range[1], onChange: (e) => {
148
+ if (e.target.checked) {
149
+ handleFilterChange('priceRange', option.range);
150
+ }
151
+ } }), jsx("span", { className: "text-sm text-gray-700", children: option.label })] }, option.label))) })] }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('rating'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Star, { className: "h-4 w-4 mr-2" }), "Customer Rating"] }), expandedSections.has('rating') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('rating') && (jsx("div", { className: "space-y-2", children: [4, 3, 2, 1].map(rating => (jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.rating === rating, onChange: (e) => {
152
+ handleFilterChange('rating', e.target.checked ? rating : 0);
153
+ } }), jsxs("div", { className: "flex items-center space-x-1", children: [[1, 2, 3, 4, 5].map(star => (jsx(Star, { className: `h-4 w-4 ${star <= rating ? 'text-yellow-400 fill-current' : 'text-gray-300'}` }, star))), jsx("span", { className: "text-sm text-gray-700", children: "& up" })] })] }, rating))) }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('brands'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Tag, { className: "h-4 w-4 mr-2" }), "Brands"] }), expandedSections.has('brands') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('brands') && (jsx("div", { className: "space-y-2", children: brands.map(brand => (jsxs("label", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.brands.includes(brand.name), onChange: (e) => {
154
+ const newBrands = e.target.checked
155
+ ? [...filters.brands, brand.name]
156
+ : filters.brands.filter(b => b !== brand.name);
157
+ handleFilterChange('brands', newBrands);
158
+ } }), jsx("span", { className: "text-sm text-gray-700", children: brand.name })] }), jsxs("span", { className: "text-xs text-gray-500", children: ["(", brand.count, ")"] })] }, brand.name))) }))] }), jsxs("div", { children: [jsxs("button", { onClick: () => toggleSection('vendors'), className: "flex items-center justify-between w-full mb-3", children: [jsxs("h3", { className: "font-medium text-gray-900 flex items-center", children: [jsx(Store, { className: "h-4 w-4 mr-2" }), "Sellers"] }), expandedSections.has('vendors') ? (jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-gray-400" }))] }), expandedSections.has('vendors') && (jsx("div", { className: "space-y-2", children: vendors.map(vendor => (jsxs("label", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.vendors.includes(vendor.name), onChange: (e) => {
159
+ const newVendors = e.target.checked
160
+ ? [...filters.vendors, vendor.name]
161
+ : filters.vendors.filter(v => v !== vendor.name);
162
+ handleFilterChange('vendors', newVendors);
163
+ } }), jsxs("div", { children: [jsx("div", { className: "text-sm text-gray-700", children: vendor.name }), jsxs("div", { className: "flex items-center space-x-1", children: [jsx(Star, { className: "h-3 w-3 text-yellow-400 fill-current" }), jsx("span", { className: "text-xs text-gray-500", children: vendor.rating })] })] })] }), jsxs("span", { className: "text-xs text-gray-500", children: ["(", vendor.count, ")"] })] }, vendor.name))) }))] }), jsxs("div", { children: [jsxs("h3", { className: "font-medium text-gray-900 mb-3 flex items-center", children: [jsx(Sliders, { className: "h-4 w-4 mr-2" }), "Availability"] }), jsx("div", { className: "space-y-2", children: jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.inStock, onChange: (e) => handleFilterChange('inStock', e.target.checked) }), jsx("span", { className: "text-sm text-gray-700", children: "In Stock Only" })] }) })] }), getActiveFiltersCount() > 0 && (jsxs("div", { className: "pt-4 border-t border-gray-200", children: [jsxs("div", { className: "flex items-center justify-between mb-2", children: [jsx("h3", { className: "font-medium text-gray-900", children: "Active Filters" }), jsx(Button, { variant: "ghost", size: "sm", onClick: onClearFilters, children: "Clear All" })] }), jsxs("div", { className: "flex flex-wrap gap-2", children: [filters.categories.map(category => (jsxs(Badge, { variant: "outline", className: "text-xs", children: [category, jsx("button", { onClick: () => handleFilterChange('categories', filters.categories.filter(c => c !== category)), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] }, category))), filters.brands.map(brand => (jsxs(Badge, { variant: "outline", className: "text-xs", children: [brand, jsx("button", { onClick: () => handleFilterChange('brands', filters.brands.filter(b => b !== brand)), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] }, brand))), filters.rating > 0 && (jsxs(Badge, { variant: "outline", className: "text-xs", children: [filters.rating, "+ stars", jsx("button", { onClick: () => handleFilterChange('rating', 0), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] })), filters.inStock && (jsxs(Badge, { variant: "outline", className: "text-xs", children: ["In Stock", jsx("button", { onClick: () => handleFilterChange('inStock', false), className: "ml-1 hover:text-red-600", children: jsx(X, { className: "h-3 w-3" }) })] }))] })] }))] })] }) }) }));
164
164
  };
165
165
 
166
166
  export { MarketplaceSidebar };
@@ -1 +1 @@
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', className)}>\n <Card className=\"sticky top-4\">\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 );\n }\n\n return (\n <div className={cn('w-80 flex-shrink-0', className)}>\n <Card className=\"sticky top-4\">\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 );\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';\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":";;;;;;;;;;AA0BA,MAAM,YAAY,GAAmB;AACnC,IAAA;AACE,QAAA,EAAE,EAAE,aAAa;AACjB,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,QAAQ,EAAE;YACR,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE;YACrD,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;YAC7C,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE;YACnD,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;YAC7C,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE;AACtD,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,EAAE,EAAE,UAAU;AACd,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,QAAQ,EAAE;YACR,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE;YACjD,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,EAAE;YACtD,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACzC,EAAE,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE;AACtE,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,EAAE,EAAE,MAAM;AACV,QAAA,IAAI,EAAE,eAAe;AACrB,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,QAAQ,EAAE;YACR,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;YACjD,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9C,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE;YACtD,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE;AACtD,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,EAAE,EAAE,QAAQ;AACZ,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,QAAQ,EAAE;YACR,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE;YACvD,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE,EAAE;YACxD,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5D,SAAA;AACF,KAAA;CACF;AAED,MAAM,MAAM,GAAG;AACb,IAAA,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,IAAA,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,IAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7B,IAAA,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AACzB,IAAA,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,IAAA,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;CAC5B;AAED,MAAM,OAAO,GAAG;IACd,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IACnD,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IAC/C,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IACnD,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IAClD,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;CACrD;MAEY,kBAAkB,GAAsC,CAAC,EACpE,OAAO,EACP,eAAe,EACf,cAAc,EACd,SAAS,GAAG,EAAE,EACd,SAAS,GAAG,KAAK,EACjB,gBAAgB,GACjB,KAAI;AACH,IAAA,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAc,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IACnG,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CACtD,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CACrD;AAED,IAAA,MAAM,cAAc,GAAG,CAAC,UAAkB,KAAI;QAC5C,qBAAqB,CAAC,IAAI,IAAG;AAC3B,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC1B,gBAAA,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;YAC3B;iBAAO;AACL,gBAAA,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YACxB;AACA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,MAAM,aAAa,GAAG,CAAC,SAAiB,KAAI;QAC1C,mBAAmB,CAAC,IAAI,IAAG;AACzB,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACzB,gBAAA,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YAC1B;iBAAO;AACL,gBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;YACvB;AACA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,MAAM,kBAAkB,GAAG,CAAC,UAA+B,EAAE,KAAU,KAAI;AACzE,QAAA,eAAe,CAAC;AACd,YAAA,GAAG,OAAO;YACV,CAAC,UAAU,GAAG,KAAK;AACpB,SAAA,CAAC;AACJ,IAAA,CAAC;IAED,MAAM,qBAAqB,GAAG,MAAK;QACjC,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM;AACrE,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM;AAC7D,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM;AAC/D,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,IAAI,CAAC;QAClC,IAAI,OAAO,CAAC,OAAO;YAAE,KAAK,IAAI,CAAC;AAC/B,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;YAAE,KAAK,IAAI,CAAC;AACzE,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;IAED,MAAM,kBAAkB,GAAG,CAAC,UAA0B,EAAE,KAAK,GAAG,CAAC,KAAI;QACnE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,MAC7BA,IAAA,CAAA,KAAA,EAAA,EAAuB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,EAAA,QAAA,EAAA,CAC3DA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wCAAwC,EAAA,QAAA,EAAA,CACrDA,IAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,mDAAmD,EAAA,QAAA,EAAA,CAClEC,GAAA,CAAC,QAAQ,EAAA,EACP,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EACjD,QAAQ,EAAE,CAAC,CAAC,KAAI;AACd,wCAAA,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;8CAC3B,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;AACrC,8CAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;AACrD,wCAAA,kBAAkB,CAAC,YAAY,EAAE,aAAa,CAAC;oCACjD,CAAC,EAAA,CACD,EACFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,8BAA8B,EAAA,QAAA,EAAE,QAAQ,CAAC,IAAI,EAAA,CAAQ,EACrED,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CAAA,GAAA,EAAG,QAAQ,CAAC,KAAK,EAAA,GAAA,CAAA,EAAA,CAAS,CAAA,EAAA,CAC3D,EACP,QAAQ,CAAC,QAAQ,KAChBC,gBACE,OAAO,EAAE,MAAM,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,EAC1C,SAAS,EAAC,+BAA+B,EAAA,QAAA,EAExC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAClCA,GAAA,CAAC,WAAW,IAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,KAEjDA,GAAA,CAAC,YAAY,EAAA,EAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,CACnD,EAAA,CACM,CACV,CAAA,EAAA,CACG,EACL,QAAQ,CAAC,QAAQ,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KACvDA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,MAAM,EAAA,QAAA,EAClB,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,EAAA,CAC7C,CACP,CAAA,EAAA,EAhCO,QAAQ,CAAC,EAAE,CAiCf,CACP,CAAC;AACJ,IAAA,CAAC;IAED,IAAI,SAAS,EAAE;AACb,QAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,oFAAoF,EAAE,SAAS,CAAC,EAAA,QAAA,EAEjHA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oGAAoG,EAAA,QAAA,EACjHA,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAC7DA,IAAC,WAAW,EAAA,EAAC,SAAS,EAAC,KAAK,EAAA,QAAA,EAC1BD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sCAAsC,EAAA,QAAA,EAAA,CAErDC,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EAAA,YAAA,EACE,gBAAgB,EAC3B,KAAK,EAAC,gBAAgB,EACtB,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAC,6HAA6H,EAAA,QAAA,EAEvIA,GAAA,CAAC,MAAM,EAAA,EAAC,SAAS,EAAC,SAAS,GAAG,EAAA,CACvB,EAETA,GAAA,CAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EAAA,YAAA,EACE,YAAY,EACvB,KAAK,EAAC,YAAY,EAClB,SAAS,EAAC,6HAA6H,EACvI,QAAQ,EAAE,CAAC,EAAA,QAAA,EAEXA,GAAA,CAACC,OAAI,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EAAA,CACrB,EAETD,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EAAA,YAAA,EACE,aAAa,EACxB,KAAK,EAAC,aAAa,EACnB,SAAS,EAAC,6HAA6H,EACvI,QAAQ,EAAE,CAAC,EAAA,QAAA,EAEXA,IAAC,GAAG,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EAAA,CACpB,EAETA,IAAC,MAAM,EAAA,EACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,gBACE,iBAAiB,EAC5B,KAAK,EAAC,iBAAiB,EACvB,SAAS,EAAC,6HAA6H,EACvI,QAAQ,EAAE,CAAC,YAEXA,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EAAA,CACrB,EAETA,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EAAA,YAAA,EACE,QAAQ,EACnB,KAAK,EAAC,QAAQ,EACd,SAAS,EAAC,6HAA6H,EACvI,QAAQ,EAAE,CAAC,EAAA,QAAA,EAEXA,GAAA,CAAC,GAAG,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EAAA,CACpB,EAETA,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EAAA,YAAA,EACE,SAAS,EACpB,KAAK,EAAC,SAAS,EACf,SAAS,EAAC,6HAA6H,EACvI,QAAQ,EAAE,CAAC,EAAA,QAAA,EAEXA,GAAA,CAAC,KAAK,IAAC,SAAS,EAAC,SAAS,EAAA,CAAG,GACtB,EAETA,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EAAA,YAAA,EACE,cAAc,EACzB,KAAK,EAAC,cAAc,EACpB,SAAS,EAAC,6HAA6H,EACvI,QAAQ,EAAE,CAAC,EAAA,QAAA,EAEXA,GAAA,CAAC,OAAO,EAAA,EAAC,SAAS,EAAC,SAAS,GAAG,EAAA,CACxB,EAER,qBAAqB,EAAE,GAAG,CAAC,KAC1BA,GAAA,CAAC,KAAK,EAAA,EAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,iDAAiD,YACjF,qBAAqB,EAAE,EAAA,CAClB,CACT,IACG,EAAA,CACM,EAAA,CACT,EAAA,CACD,EAAA,CACF;IAEV;AAEA,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,oCAAoC,EAAE,SAAS,CAAC,YAGjEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8FAA8F,YAC3GD,IAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAC7DC,GAAA,CAAC,UAAU,IAAC,SAAS,EAAC,MAAM,EAAA,QAAA,EAC5BD,cAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAChDA,IAAA,CAAC,SAAS,EAAA,EAAC,SAAS,EAAC,2BAA2B,aAC9CC,GAAA,CAAC,MAAM,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAAA,SAAA,EAElC,qBAAqB,EAAE,GAAG,CAAC,KAC1BA,IAAC,KAAK,EAAA,EAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,MAAM,YACtC,qBAAqB,EAAE,EAAA,CAClB,CACT,IACS,EACZD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,aAC1CC,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,cAAc,0BAEhD,EACR,gBAAgB,KACfA,IAAC,MAAM,EAAA,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,gBAAgB,EAAA,QAAA,EACzDA,IAAC,CAAC,EAAA,EAAC,SAAS,EAAC,SAAS,GAAG,EAAA,CAClB,CACV,CAAA,EAAA,CACG,CAAA,EAAA,CACF,GACK,EAEbD,IAAA,CAAC,WAAW,EAAA,EAAC,SAAS,EAAC,qDAAqD,EAAA,QAAA,EAAA,CAE1EA,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEA,iBACE,OAAO,EAAE,MAAM,aAAa,CAAC,YAAY,CAAC,EAC1C,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAEzDA,aAAI,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAAA,CACzDC,IAACC,OAAI,EAAA,EAAC,SAAS,EAAC,cAAc,GAAG,EAAA,YAAA,CAAA,EAAA,CAE9B,EACJ,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,IACjCD,GAAA,CAAC,WAAW,IAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,KAEjDA,IAAC,YAAY,EAAA,EAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,CACnD,CAAA,EAAA,CACM,EACR,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,KACjCA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACvB,kBAAkB,CAAC,YAAY,CAAC,EAAA,CAC7B,CACP,CAAA,EAAA,CACG,EAGND,yBACEA,IAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,aAAa,CAAC,OAAO,CAAC,EACrC,SAAS,EAAC,+CAA+C,aAEzDA,IAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,6CAA6C,aACzDC,GAAA,CAAC,GAAG,IAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAAA,aAAA,CAAA,EAAA,CAE7B,EACJ,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,IAC5BA,GAAA,CAAC,WAAW,EAAA,EAAC,SAAS,EAAC,uBAAuB,GAAG,KAEjDA,GAAA,CAAC,YAAY,EAAA,EAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,CACnD,CAAA,EAAA,CACM,EACR,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,KAC5BD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC1CC,GAAA,CAAC,KAAK,IACJ,IAAI,EAAC,QAAQ,EACb,WAAW,EAAC,KAAK,EACjB,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAC5B,QAAQ,EAAE,CAAC,CAAC,KAAK,kBAAkB,CAAC,YAAY,EAAE;4DAChD,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAC7B,4DAAA,OAAO,CAAC,UAAU,CAAC,CAAC;AACrB,yDAAA,CAAC,EACF,SAAS,EAAC,cAAc,EAAA,CACxB,EACFA,cAAM,SAAS,EAAC,eAAe,EAAA,QAAA,EAAA,GAAA,EAAA,CAAS,EACxCA,IAAC,KAAK,EAAA,EACJ,IAAI,EAAC,QAAQ,EACb,WAAW,EAAC,KAAK,EACjB,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAC5B,QAAQ,EAAE,CAAC,CAAC,KAAK,kBAAkB,CAAC,YAAY,EAAE;AAChD,4DAAA,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;4DACrB,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;yDAC7B,CAAC,EACF,SAAS,EAAC,cAAc,EAAA,CACxB,CAAA,EAAA,CACE,EAGNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACvB;oDACC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;oDACtC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;oDACvC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE;oDACzC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;oDAC3C,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;AAC3C,iDAAA,CAAC,GAAG,CAAC,CAAC,MAAM,MACXD,IAAA,CAAA,OAAA,EAAA,EAA0B,SAAS,EAAC,6BAA6B,aAC/DC,GAAA,CAAC,QAAQ,EAAA,EACP,OAAO,EACL,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,gEAAA,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAE3C,QAAQ,EAAE,CAAC,CAAC,KAAI;AACd,gEAAA,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;AACpB,oEAAA,kBAAkB,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;gEAChD;AACF,4DAAA,CAAC,EAAA,CACD,EACFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAE,MAAM,CAAC,KAAK,EAAA,CAAQ,CAAA,EAAA,EAZnD,MAAM,CAAC,KAAK,CAahB,CACT,CAAC,EAAA,CACE,CAAA,EAAA,CACF,CACP,IACG,EAGND,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEA,IAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,aAAa,CAAC,QAAQ,CAAC,EACtC,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAEzDA,IAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAAA,CACzDC,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAAA,iBAAA,CAAA,EAAA,CAE9B,EACJ,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAC7BA,GAAA,CAAC,WAAW,IAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,KAEjDA,GAAA,CAAC,YAAY,EAAA,EAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,CACnD,CAAA,EAAA,CACM,EACR,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAC7BA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACvB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KACtBD,IAAA,CAAA,OAAA,EAAA,EAAoB,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CACzDC,GAAA,CAAC,QAAQ,EAAA,EACP,OAAO,EAAE,OAAO,CAAC,MAAM,KAAK,MAAM,EAClC,QAAQ,EAAE,CAAC,CAAC,KAAI;AACd,wDAAA,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC;AAC7D,oDAAA,CAAC,GACD,EACFD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,aACzC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KACvBC,IAAC,IAAI,EAAA,EAEH,SAAS,EAAE,CAAA,QAAA,EACT,IAAI,IAAI,MAAM,GAAG,8BAA8B,GAAG,eACpD,CAAA,CAAE,EAAA,EAHG,IAAI,CAIT,CACH,CAAC,EACFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,MAAA,EAAA,CAAY,IAC/C,CAAA,EAAA,EAjBI,MAAM,CAkBV,CACT,CAAC,GACE,CACP,CAAA,EAAA,CACG,EAGND,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEA,IAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,aAAa,CAAC,QAAQ,CAAC,EACtC,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAEzDA,aAAI,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAAA,CACzDC,GAAA,CAAC,GAAG,EAAA,EAAC,SAAS,EAAC,cAAc,GAAG,EAAA,QAAA,CAAA,EAAA,CAE7B,EACJ,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAC7BA,GAAA,CAAC,WAAW,IAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,KAEjDA,GAAA,CAAC,YAAY,EAAA,EAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,CACnD,CAAA,EAAA,CACM,EACR,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAC7BA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACvB,MAAM,CAAC,GAAG,CAAC,KAAK,KACfD,IAAA,CAAA,OAAA,EAAA,EAAwB,SAAS,EAAC,mCAAmC,aACnEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC1CC,GAAA,CAAC,QAAQ,IACP,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAC5C,QAAQ,EAAE,CAAC,CAAC,KAAI;AACd,gEAAA,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;sEACvB,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI;AAChC,sEAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC;AAChD,gEAAA,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC;AACzC,4DAAA,CAAC,EAAA,CACD,EACFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAE,KAAK,CAAC,IAAI,EAAA,CAAQ,CAAA,EAAA,CACvD,EACND,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CAAA,GAAA,EAAG,KAAK,CAAC,KAAK,EAAA,GAAA,CAAA,EAAA,CAAS,CAAA,EAAA,EAbpD,KAAK,CAAC,IAAI,CAcd,CACT,CAAC,EAAA,CACE,CACP,CAAA,EAAA,CACG,EAGNA,yBACEA,IAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,aAAa,CAAC,SAAS,CAAC,EACvC,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAEzDA,IAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAAA,CACzDC,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,eAE/B,EACJ,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,IAC9BA,GAAA,CAAC,WAAW,EAAA,EAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,KAEjDA,IAAC,YAAY,EAAA,EAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,CACnD,CAAA,EAAA,CACM,EACR,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,KAC9BA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACvB,OAAO,CAAC,GAAG,CAAC,MAAM,KACjBD,IAAA,CAAA,OAAA,EAAA,EAAyB,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CACpEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC1CC,GAAA,CAAC,QAAQ,EAAA,EACP,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAC9C,QAAQ,EAAE,CAAC,CAAC,KAAI;AACd,gEAAA,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;sEACxB,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI;AAClC,sEAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC;AAClD,gEAAA,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC;4DAC3C,CAAC,EAAA,CACD,EACFD,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,YAAE,MAAM,CAAC,IAAI,EAAA,CAAO,EAC1DD,cAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC1CC,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,sCAAsC,EAAA,CAAG,EACzDA,cAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAE,MAAM,CAAC,MAAM,EAAA,CAAQ,IAC1D,CAAA,EAAA,CACF,CAAA,EAAA,CACF,EACND,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CAAA,GAAA,EAAG,MAAM,CAAC,KAAK,EAAA,GAAA,CAAA,EAAA,CAAS,KAnBrD,MAAM,CAAC,IAAI,CAoBf,CACT,CAAC,EAAA,CACE,CACP,IACG,EAGNA,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEA,aAAI,SAAS,EAAC,kDAAkD,EAAA,QAAA,EAAA,CAC9DC,GAAA,CAAC,OAAO,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAAA,cAAA,CAAA,EAAA,CAEjC,EACLA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACxBD,gBAAO,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC5CC,GAAA,CAAC,QAAQ,IACP,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,QAAQ,EAAE,CAAC,CAAC,KAAK,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAA,CAChE,EACFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,eAAA,EAAA,CAAqB,IACtD,EAAA,CACJ,CAAA,EAAA,CACF,EAGL,qBAAqB,EAAE,GAAG,CAAC,KAC1BD,cAAK,SAAS,EAAC,+BAA+B,EAAA,QAAA,EAAA,CAC5CA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wCAAwC,EAAA,QAAA,EAAA,CACrDC,YAAI,SAAS,EAAC,2BAA2B,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAoB,EAC7DA,IAAC,MAAM,EAAA,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,CAEhD,CAAA,EAAA,CACL,EACND,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sBAAsB,EAAA,QAAA,EAAA,CAClC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,KAC9BA,IAAA,CAAC,KAAK,IAAgB,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAA,QAAA,EAAA,CACxD,QAAQ,EACTC,GAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,kBAAkB,CAAC,YAAY,EAC5C,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAC/C,EACD,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAEnCA,IAAC,CAAC,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,GAClB,CAAA,EAAA,EATC,QAAQ,CAUZ,CACT,CAAC,EACD,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,KACvBD,KAAC,KAAK,EAAA,EAAa,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,aACrD,KAAK,EACNC,gBACE,OAAO,EAAE,MAAM,kBAAkB,CAAC,QAAQ,EACxC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CACxC,EACD,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAEnCA,GAAA,CAAC,CAAC,IAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EAAA,CAClB,KATC,KAAK,CAUT,CACT,CAAC,EACD,OAAO,CAAC,MAAM,GAAG,CAAC,KACjBD,KAAC,KAAK,EAAA,EAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAA,QAAA,EAAA,CACzC,OAAO,CAAC,MAAM,EAAA,SAAA,EACfC,GAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAC9C,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAEnCA,IAAC,CAAC,EAAA,EAAC,SAAS,EAAC,SAAS,GAAG,EAAA,CAClB,CAAA,EAAA,CACH,CACT,EACA,OAAO,CAAC,OAAO,KACdD,KAAC,KAAK,EAAA,EAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAA,QAAA,EAAA,CAAA,UAAA,EAE1CC,GAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,EACnD,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAEnCA,IAAC,CAAC,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,GAClB,CAAA,EAAA,CACH,CACT,IACG,CAAA,EAAA,CACF,CACP,IACW,CAAA,EAAA,CACP,EAAA,CACH,EAAA,CACF;AAEV;;;;"}
@@ -9,6 +9,7 @@ import { Input } from '../Input/Input.js';
9
9
  import { Tabs, TabsList, TabsTrigger, TabsContent } from '../Tabs/Tabs.js';
10
10
  import { showToast } from '../Toast/Toast.js';
11
11
  import { sampleProducts, sampleReviews } from './data/sampleData.js';
12
+ import { useScrollToTop } from './hooks/useScrollToTop.js';
12
13
 
13
14
  const SingleProductView = ({ product, reviews, relatedProducts, onAddToCart, onBuyNow, }) => {
14
15
  const productsData = sampleProducts;
@@ -35,6 +36,8 @@ const SingleProductView = ({ product, reviews, relatedProducts, onAddToCart, onB
35
36
  const [quantity, setQuantity] = useState(1);
36
37
  const [isWishlisted, setIsWishlisted] = useState(false);
37
38
  const [selectedTab, setSelectedTab] = useState('description');
39
+ // Scroll to top on product change/mount
40
+ useScrollToTop([productData?.id]);
38
41
  const handleAddToCart = () => {
39
42
  onAddToCart?.(productData, quantity);
40
43
  showToast.success(`Added ${quantity} item(s) to cart!`);