@beyondcorp/beyond-ui 1.2.83 → 1.2.87

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 (67) hide show
  1. package/README.md +394 -394
  2. package/dist/components/Alert/Alert.example.js.map +1 -1
  3. package/dist/components/Auth/LoginForm.example.js.map +1 -1
  4. package/dist/components/Auth/PasswordResetForm.example.js.map +1 -1
  5. package/dist/components/Auth/PasswordResetForm.js.map +1 -1
  6. package/dist/components/Auth/ProtectedRoute.example.js.map +1 -1
  7. package/dist/components/Auth/SignupForm.example.js.map +1 -1
  8. package/dist/components/Avatar/Avatar.example.js.map +1 -1
  9. package/dist/components/Badge/Badge.example.js.map +1 -1
  10. package/dist/components/Blog/BlogShowcase.js +36 -36
  11. package/dist/components/Blog/BlogShowcase.js.map +1 -1
  12. package/dist/components/Button/Button.example.js.map +1 -1
  13. package/dist/components/Card/Card.example.js.map +1 -1
  14. package/dist/components/Card/Card.js.map +1 -1
  15. package/dist/components/Checkbox/Checkbox.example.js.map +1 -1
  16. package/dist/components/CodeHighlight/CodeHighlight.js.map +1 -1
  17. package/dist/components/ComponentShowcase/ComponentShowcase.js.map +1 -1
  18. package/dist/components/ComponentShowcase/componentDocs.js +21 -21
  19. package/dist/components/ComponentShowcase/componentDocs.js.map +1 -1
  20. package/dist/components/ComponentShowcase/showcaseRegistry.js.map +1 -1
  21. package/dist/components/DashboardGrid/DashboardGrid.example.js.map +1 -1
  22. package/dist/components/DashboardGrid/DashboardGrid.js.map +1 -1
  23. package/dist/components/DashboardHeader/DashboardHeader.example.js.map +1 -1
  24. package/dist/components/DashboardHeader/DashboardHeader.js +5 -5
  25. package/dist/components/DashboardHeader/DashboardHeader.js.map +1 -1
  26. package/dist/components/DashboardLayout/DashboardLayout.example.js.map +1 -1
  27. package/dist/components/DashboardLayout/DashboardLayout.js +1 -1
  28. package/dist/components/DashboardLayout/DashboardLayout.js.map +1 -1
  29. package/dist/components/DataTable/DataTable.js +9 -9
  30. package/dist/components/DataTable/DataTable.js.map +1 -1
  31. package/dist/components/Image/Image.js.map +1 -1
  32. package/dist/components/Input/Input.example.js.map +1 -1
  33. package/dist/components/Marketplace/AllProductsView.js.map +1 -1
  34. package/dist/components/Marketplace/MarketplaceComponent.js.map +1 -1
  35. package/dist/components/Marketplace/MarketplaceSidebar.js.map +1 -1
  36. package/dist/components/Marketplace/components/MarketplaceControls.js.map +1 -1
  37. package/dist/components/Marketplace/components/MarketplaceHeader.js.map +1 -1
  38. package/dist/components/Marketplace/components/ProductCard.js.map +1 -1
  39. package/dist/components/Marketplace/hooks/useScrollToTop.js.map +1 -1
  40. package/dist/components/Marketplace/utils/sanitizeProduct.js.map +1 -1
  41. package/dist/components/Modal/Modal.example.js.map +1 -1
  42. package/dist/components/Modal/Modal.js +3 -3
  43. package/dist/components/Modal/Modal.js.map +1 -1
  44. package/dist/components/Navbar/Navbar.example.js.map +1 -1
  45. package/dist/components/NightModeSwitch/NightModeSwitch.js.map +1 -1
  46. package/dist/components/ProfileManagement/EditModal.js.map +1 -1
  47. package/dist/components/ProfileManagement/ProfileCard.js +1 -1
  48. package/dist/components/ProfileManagement/ProfileCard.js.map +1 -1
  49. package/dist/components/Radio/Radio.js.map +1 -1
  50. package/dist/components/Select/Select.js.map +1 -1
  51. package/dist/components/Sidebar/LogoutButton.js.map +1 -1
  52. package/dist/components/Sidebar/ProfileButton.js.map +1 -1
  53. package/dist/components/Sidebar/Sidebar.example.js.map +1 -1
  54. package/dist/components/Sidebar/Sidebar.js +5 -5
  55. package/dist/components/Sidebar/Sidebar.js.map +1 -1
  56. package/dist/components/Sidebar/SidebarHeader.js +1 -1
  57. package/dist/components/Sidebar/SidebarHeader.js.map +1 -1
  58. package/dist/components/Skeleton/Skeleton.example.js.map +1 -1
  59. package/dist/components/Spinner/Spinner.example.js.map +1 -1
  60. package/dist/components/StatsCard/StatsCard.example.js.map +1 -1
  61. package/dist/components/Switch/Switch.example.js.map +1 -1
  62. package/dist/components/Tabs/Tabs.example.js.map +1 -1
  63. package/dist/components/Textarea/Textarea.example.js.map +1 -1
  64. package/dist/components/Toast/Toast.example.js.map +1 -1
  65. package/dist/hooks/useIntersectionObserver.js.map +1 -1
  66. package/dist/styles.css +1 -1
  67. package/package.json +113 -113
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.js","sources":["../../../src/components/DataTable/DataTable.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { useState, useMemo, useCallback } from \"react\";\r\nimport { \r\n ChevronUp, \r\n ChevronDown, \r\n Search, \r\n Filter, \r\n ChevronLeft, \r\n ChevronRight,\r\n ChevronsLeft,\r\n ChevronsRight,\r\n MoreHorizontal,\r\n Check,\r\n Minus\r\n} from \"lucide-react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"../../utils/cn\";\r\nimport { Button } from \"../Button\";\r\nimport { Input } from \"../Input\";\r\nimport { Checkbox } from \"../Checkbox\";\r\nimport { Badge } from \"../Badge\";\r\nimport { Spinner } from \"../Spinner\";\r\nimport { Skeleton } from \"../Skeleton\";\r\nimport { Card, CardContent } from \"../Card\";\r\nimport { useBreakpoint } from \"../../hooks/useBreakpoint\";\r\nimport { Select } from \"../Select\";\r\nimport type {\r\n DataTableProps,\r\n Column,\r\n FilterValue,\r\n SortConfig,\r\n PaginationConfig,\r\n RowSelection\r\n} from \"./DataTable.types\";\r\n\r\nconst tableVariants = cva(\r\n \"w-full border-collapse bg-white\",\r\n {\r\n variants: {\r\n size: {\r\n small: \"text-xs\",\r\n middle: \"text-sm\",\r\n large: \"text-base\",\r\n },\r\n bordered: {\r\n true: \"border border-gray-200\",\r\n false: \"\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"middle\",\r\n bordered: false,\r\n },\r\n }\r\n);\r\n\r\nconst cellVariants = cva(\r\n \"border-b border-gray-200 transition-colors\",\r\n {\r\n variants: {\r\n size: {\r\n small: \"px-2 py-1\",\r\n middle: \"px-4 py-3\",\r\n large: \"px-6 py-4\",\r\n },\r\n align: {\r\n left: \"text-left\",\r\n center: \"text-center\",\r\n right: \"text-right\",\r\n },\r\n type: {\r\n header: \"bg-gray-50 font-semibold text-gray-900 border-b-2 border-gray-200\",\r\n body: \"text-gray-700 hover:bg-gray-50\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"middle\",\r\n align: \"left\",\r\n type: \"body\",\r\n },\r\n }\r\n);\r\n\r\n// Filter component for individual columns\r\nconst ColumnFilter = <T extends Record<string, any>>({\r\n column,\r\n value,\r\n onChange,\r\n}: {\r\n column: Column<T>;\r\n value: any;\r\n onChange: (value: any) => void;\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [tempValue, setTempValue] = useState(value || '');\r\n\r\n const handleApply = () => {\r\n onChange(tempValue);\r\n setIsOpen(false);\r\n };\r\n\r\n const handleClear = () => {\r\n setTempValue('');\r\n onChange('');\r\n setIsOpen(false);\r\n };\r\n\r\n if (!column.filterable) return null;\r\n\r\n return (\r\n <div className=\"relative inline-block\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => setIsOpen(!isOpen)}\r\n className={cn(\r\n \"p-1 h-6 w-6\",\r\n value && \"text-primary-600\"\r\n )}\r\n >\r\n <Filter className=\"h-3 w-3\" />\r\n </Button>\r\n \r\n {isOpen && (\r\n <>\r\n <div \r\n className=\"fixed inset-0 z-10\" \r\n onClick={() => setIsOpen(false)}\r\n />\r\n <div className=\"absolute top-full left-0 z-20 mt-1 bg-white border border-gray-200 rounded-lg shadow-lg p-3 min-w-[200px]\">\r\n {column.filterType === 'select' && column.filterOptions ? (\r\n <div className=\"space-y-2\">\r\n {column.filterOptions.map((option) => (\r\n <label key={option.value} className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={tempValue === option.value}\r\n onChange={() => setTempValue(\r\n tempValue === option.value ? '' : option.value\r\n )}\r\n />\r\n <span className=\"text-sm\">{option.label}</span>\r\n </label>\r\n ))}\r\n </div>\r\n ) : (\r\n <Input\r\n placeholder={`Filter ${column.title}`}\r\n value={tempValue}\r\n onChange={(e) => setTempValue(e.target.value)}\r\n className=\"mb-2\"\r\n />\r\n )}\r\n \r\n <div className=\"flex justify-end space-x-2 mt-3\">\r\n <Button variant=\"ghost\" size=\"sm\" onClick={handleClear}>\r\n Clear\r\n </Button>\r\n <Button variant=\"primary\" size=\"sm\" onClick={handleApply}>\r\n Apply\r\n </Button>\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// Pagination component\r\nconst TablePagination: React.FC<{\r\n pagination: PaginationConfig;\r\n onChange: (page: number, pageSize: number) => void;\r\n}> = ({ pagination, onChange }) => {\r\n const { current, pageSize, total, showSizeChanger = true, pageSizeOptions = [10, 20, 50, 100] } = pagination;\r\n const totalPages = Math.ceil(total / pageSize);\r\n const startRecord = (current - 1) * pageSize + 1;\r\n const endRecord = Math.min(current * pageSize, total);\r\n\r\n const getPageNumbers = () => {\r\n const pages = [];\r\n const maxVisible = 5;\r\n \r\n if (totalPages <= maxVisible) {\r\n for (let i = 1; i <= totalPages; i++) {\r\n pages.push(i);\r\n }\r\n } else {\r\n const start = Math.max(1, current - 2);\r\n const end = Math.min(totalPages, start + maxVisible - 1);\r\n \r\n for (let i = start; i <= end; i++) {\r\n pages.push(i);\r\n }\r\n }\r\n \r\n return pages;\r\n };\r\n\r\n // Convert pageSizeOptions to SelectOption format\r\n const selectOptions = pageSizeOptions.map(size => ({\r\n label: String(size),\r\n value: String(size),\r\n }));\r\n\r\n return (\r\n <div className=\"flex items-center justify-between px-4 py-3 bg-background border-t border-border\">\r\n <div className=\"flex items-center space-x-4\">\r\n <span className=\"text-sm text-foreground\">\r\n Showing {startRecord} to {endRecord} of {total} results\r\n </span>\r\n \r\n {showSizeChanger && (\r\n <div className=\"flex items-center space-x-2\">\r\n <span className=\"text-sm text-foreground\">Show</span>\r\n <Select\r\n options={selectOptions}\r\n value={String(pageSize)}\r\n onChange={e => onChange(1, Number(e.target.value))}\r\n variant=\"default\"\r\n selectSize=\"sm\"\r\n aria-label=\"Select number of items per page\"\r\n />\r\n <span className=\"text-sm text-foreground\">per page</span>\r\n </div>\r\n )}\r\n </div>\r\n \r\n <div className=\"flex items-center space-x-1\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => onChange(1, pageSize)}\r\n disabled={current === 1}\r\n aria-label=\"First page\"\r\n >\r\n <ChevronsLeft className=\"h-4 w-4\" />\r\n </Button>\r\n \r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => onChange(current - 1, pageSize)}\r\n disabled={current === 1}\r\n aria-label=\"Previous page\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </Button>\r\n \r\n {getPageNumbers().map(page => (\r\n <Button\r\n key={page}\r\n variant={current === page ? \"primary\" : \"ghost\"}\r\n size=\"sm\"\r\n onClick={() => onChange(page, pageSize)}\r\n className=\"min-w-[32px]\"\r\n aria-label={`Go to page ${page}`}\r\n >\r\n {page}\r\n </Button>\r\n ))}\r\n \r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => onChange(current + 1, pageSize)}\r\n disabled={current === totalPages}\r\n aria-label=\"Next page\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </Button>\r\n \r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => onChange(totalPages, pageSize)}\r\n disabled={current === totalPages}\r\n aria-label=\"Last page\"\r\n >\r\n <ChevronsRight className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport const DataTable = <T extends Record<string, any>>({\r\n columns,\r\n dataSource,\r\n loading = false,\r\n rowKey = 'id',\r\n pagination = { current: 1, pageSize: 10, total: 0 },\r\n rowSelection,\r\n size = 'middle',\r\n bordered = false,\r\n showHeader = true,\r\n title,\r\n footer,\r\n className,\r\n onSort,\r\n onFilter,\r\n onChange,\r\n ...props\r\n}: DataTableProps<T>) => {\r\n const [sortConfig, setSortConfig] = useState<SortConfig>({ key: '', direction: null });\r\n const [filters, setFilters] = useState<FilterValue>({});\r\n const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>(\r\n rowSelection?.selectedRowKeys || []\r\n );\r\n\r\n // Get row key function\r\n const getRowKey = useCallback((record: T, index: number): React.Key => {\r\n if (typeof rowKey === 'function') {\r\n return rowKey(record);\r\n }\r\n return record[rowKey] || index;\r\n }, [rowKey]);\r\n\r\n // Handle sorting\r\n const handleSort = useCallback((columnKey: string) => {\r\n let newDirection: 'asc' | 'desc' | null;\r\n if (sortConfig.key !== columnKey) {\r\n newDirection = 'asc';\r\n } else if (sortConfig.direction === 'asc') {\r\n newDirection = 'desc';\r\n } else if (sortConfig.direction === 'desc') {\r\n newDirection = null;\r\n } else {\r\n newDirection = 'asc';\r\n }\r\n const newSortConfig: SortConfig = { key: columnKey, direction: newDirection };\r\n setSortConfig(newSortConfig);\r\n onSort?.(newSortConfig);\r\n onChange?.(pagination as PaginationConfig, filters, newSortConfig);\r\n }, [sortConfig, pagination, filters, onSort, onChange]);\r\n\r\n // Handle filtering\r\n const handleFilter = useCallback((columnKey: string, value: any) => {\r\n const newFilters = { ...filters };\r\n if (value === '' || value === null || value === undefined) {\r\n delete newFilters[columnKey];\r\n } else {\r\n newFilters[columnKey] = value;\r\n }\r\n \r\n setFilters(newFilters);\r\n onFilter?.(newFilters);\r\n onChange?.(pagination as PaginationConfig, newFilters, sortConfig);\r\n }, [filters, pagination, sortConfig, onFilter, onChange]);\r\n\r\n // Handle row selection\r\n const handleRowSelect = useCallback((record: T, selected: boolean) => {\r\n const key = getRowKey(record, 0);\r\n let newSelectedKeys: React.Key[];\r\n \r\n if (rowSelection?.type === 'radio') {\r\n newSelectedKeys = selected ? [key] : [];\r\n } else {\r\n newSelectedKeys = selected \r\n ? [...selectedRowKeys, key]\r\n : selectedRowKeys.filter(k => k !== key);\r\n }\r\n \r\n setSelectedRowKeys(newSelectedKeys);\r\n const selectedRows = dataSource.filter(item => \r\n newSelectedKeys.includes(getRowKey(item, 0))\r\n );\r\n \r\n rowSelection?.onChange?.(newSelectedKeys, selectedRows);\r\n rowSelection?.onSelect?.(record, selected, selectedRows, {} as Event);\r\n }, [selectedRowKeys, rowSelection, dataSource, getRowKey]);\r\n\r\n // Handle select all\r\n const handleSelectAll = useCallback((selected: boolean) => {\r\n const newSelectedKeys = selected \r\n ? dataSource.map((item, index) => getRowKey(item, index))\r\n : [];\r\n \r\n setSelectedRowKeys(newSelectedKeys);\r\n const selectedRows = selected ? dataSource : [];\r\n \r\n rowSelection?.onChange?.(newSelectedKeys, selectedRows);\r\n rowSelection?.onSelectAll?.(selected, selectedRows, dataSource);\r\n }, [dataSource, rowSelection, getRowKey]);\r\n\r\n // Filter and sort data\r\n const processedData = useMemo(() => {\r\n let result = [...dataSource];\r\n \r\n // Apply filters\r\n Object.entries(filters).forEach(([key, value]) => {\r\n if (value !== '' && value !== null && value !== undefined) {\r\n result = result.filter(item => {\r\n const itemValue = item[key];\r\n if (typeof itemValue === 'string') {\r\n return itemValue.toLowerCase().includes(String(value).toLowerCase());\r\n }\r\n return itemValue === value;\r\n });\r\n }\r\n });\r\n \r\n // Apply sorting\r\n if (sortConfig.key && sortConfig.direction) {\r\n result.sort((a, b) => {\r\n const aValue = a[sortConfig.key];\r\n const bValue = b[sortConfig.key];\r\n \r\n if (aValue === bValue) return 0;\r\n \r\n const comparison = aValue < bValue ? -1 : 1;\r\n return sortConfig.direction === 'asc' ? comparison : -comparison;\r\n });\r\n }\r\n \r\n return result;\r\n }, [dataSource, filters, sortConfig]);\r\n\r\n // Pagination logic\r\n const paginatedData = useMemo(() => {\r\n if (!pagination) return processedData;\r\n \r\n const { current, pageSize } = pagination;\r\n const startIndex = (current - 1) * pageSize;\r\n return processedData.slice(startIndex, startIndex + pageSize);\r\n }, [processedData, pagination]);\r\n\r\n // Update pagination total\r\n const currentPagination = useMemo(() => {\r\n if (!pagination) return false;\r\n return {\r\n ...pagination,\r\n total: processedData.length,\r\n };\r\n }, [pagination, processedData.length]);\r\n\r\n // Selection state\r\n const isAllSelected = selectedRowKeys.length === dataSource.length && dataSource.length > 0;\r\n const isIndeterminate = selectedRowKeys.length > 0 && selectedRowKeys.length < dataSource.length;\r\n\r\n if (loading) {\r\n return (\r\n <div className={cn(\"w-full\", className)}>\r\n {title && <div className=\"mb-4\">{title()}</div>}\r\n <div className=\"border border-gray-200 rounded-lg overflow-hidden\">\r\n <div className=\"p-4 space-y-3\">\r\n {Array.from({ length: 5 }).map((_, i) => (\r\n <div key={i} className=\"flex space-x-4\">\r\n <Skeleton className=\"h-4 w-8\" />\r\n <Skeleton className=\"h-4 flex-1\" />\r\n <Skeleton className=\"h-4 w-24\" />\r\n <Skeleton className=\"h-4 w-16\" />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Mobile-first responsive: useBreakpoint to switch between table and card layouts\r\n const { isBelow } = useBreakpoint();\r\n\r\n return (\r\n <div className={cn(\"w-full\", className)}>\r\n {title && <div className=\"mb-4\">{title()}</div>}\r\n\r\n <div className=\"border border-gray-200 rounded-lg overflow-hidden\">\r\n {/* Card layout for mobile */}\r\n {isBelow('md') ? (\r\n <div className=\"space-y-4 p-2\">\r\n {paginatedData.length === 0 ? (\r\n <div className=\"text-gray-500 text-center py-8\">\r\n <div className=\"text-4xl mb-2\">📋</div>\r\n <div>No data available</div>\r\n </div>\r\n ) : (\r\n paginatedData.map((record, index) => {\r\n const key = getRowKey(record, index);\r\n const isSelected = selectedRowKeys.includes(key);\r\n\r\n return (\r\n <Card\r\n key={key}\r\n variant={isSelected ? \"elevated\" : \"default\"}\r\n padding=\"sm\"\r\n className={cn(\r\n \"transition-shadow\",\r\n isSelected && \"border-primary-600 shadow-lg\"\r\n )}\r\n >\r\n <CardContent className=\"space-y-2\">\r\n {rowSelection && (\r\n <div className=\"flex items-center mb-2\">\r\n <Checkbox\r\n checked={isSelected}\r\n onChange={(e) => handleRowSelect(record, e.target.checked)}\r\n {...rowSelection.getCheckboxProps?.(record)}\r\n />\r\n <span className=\"ml-2 text-xs text-gray-500\">Select</span>\r\n </div>\r\n )}\r\n {columns.map((column) => (\r\n <div key={column.key} className=\"flex justify-between items-center py-1 border-b last:border-b-0\">\r\n <span className=\"font-medium text-gray-700\">{column.title}</span>\r\n <span className=\"text-gray-900\">\r\n {column.render\r\n ? column.render(record[column.dataIndex], record, index)\r\n : String(record[column.dataIndex] || '')\r\n }\r\n </span>\r\n </div>\r\n ))}\r\n </CardContent>\r\n </Card>\r\n );\r\n })\r\n )}\r\n </div>\r\n ) : (\r\n // Table layout for desktop/tablet\r\n <div className=\"overflow-x-auto\">\r\n <table className={cn(tableVariants({ size, bordered }))}>\r\n {showHeader && (\r\n <thead>\r\n <tr>\r\n {rowSelection && (\r\n <th className={cn(cellVariants({ size, type: \"header\" }), \"w-12\")}>\r\n {rowSelection.type !== 'radio' && (\r\n <Checkbox\r\n checked={isAllSelected}\r\n onChange={(e) => handleSelectAll(e.target.checked)}\r\n className={cn(isIndeterminate && \"indeterminate\")}\r\n />\r\n )}\r\n </th>\r\n )}\r\n \r\n {columns.map((column) => (\r\n <th\r\n key={column.key}\r\n className={cn(\r\n cellVariants({\r\n size,\r\n align: column.align,\r\n type: \"header\"\r\n }),\r\n column.width && `w-[${column.width}]`\r\n )}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center space-x-2\">\r\n <span>{column.title}</span>\r\n {column.sortable && (\r\n <button\r\n onClick={() => handleSort(column.key)}\r\n className=\"flex flex-col items-center hover:text-primary-600\"\r\n >\r\n <ChevronUp\r\n className={cn(\r\n \"h-3 w-3\",\r\n sortConfig.key === column.key && sortConfig.direction === 'asc'\r\n ? \"text-primary-600\"\r\n : \"text-gray-400\"\r\n )}\r\n />\r\n <ChevronDown\r\n className={cn(\r\n \"h-3 w-3 -mt-1\",\r\n sortConfig.key === column.key && sortConfig.direction === 'desc'\r\n ? \"text-primary-600\"\r\n : \"text-gray-400\"\r\n )}\r\n />\r\n </button>\r\n )}\r\n </div>\r\n \r\n <ColumnFilter\r\n column={column}\r\n value={filters[column.key]}\r\n onChange={(value) => handleFilter(column.key, value)}\r\n />\r\n </div>\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n )}\r\n \r\n <tbody>\r\n {paginatedData.length === 0 ? (\r\n <tr>\r\n <td\r\n colSpan={columns.length + (rowSelection ? 1 : 0)}\r\n className={cn(cellVariants({ size, align: \"center\" }), \"py-8\")}\r\n >\r\n <div className=\"text-gray-500\">\r\n <div className=\"text-4xl mb-2\">📋</div>\r\n <div>No data available</div>\r\n </div>\r\n </td>\r\n </tr>\r\n ) : (\r\n paginatedData.map((record, index) => {\r\n const key = getRowKey(record, index);\r\n const isSelected = selectedRowKeys.includes(key);\r\n \r\n return (\r\n <tr\r\n key={key}\r\n className={cn(\r\n \"hover:bg-gray-50 transition-colors\",\r\n isSelected && \"bg-primary-50\"\r\n )}\r\n {...(props.onRow?.(record, index) ?? {})}\r\n >\r\n {rowSelection && (\r\n <td className={cn(cellVariants({ size }))}>\r\n <Checkbox\r\n checked={isSelected}\r\n onChange={(e) => handleRowSelect(record, e.target.checked)}\r\n {...rowSelection.getCheckboxProps?.(record)}\r\n />\r\n </td>\r\n )}\r\n \r\n {columns.map((column) => (\r\n <td\r\n key={column.key}\r\n className={cn(cellVariants({\r\n size,\r\n align: column.align\r\n }))}\r\n >\r\n {column.render\r\n ? column.render(record[column.dataIndex], record, index)\r\n : String(record[column.dataIndex] || '')\r\n }\r\n </td>\r\n ))}\r\n </tr>\r\n );\r\n })\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n {/* Always show pagination controls below data */}\r\n {currentPagination && (\r\n <div className=\"pt-2\">\r\n <TablePagination\r\n pagination={currentPagination}\r\n onChange={(page, pageSize) => {\r\n const newPagination = { ...currentPagination, current: page, pageSize };\r\n onChange?.(newPagination, filters, sortConfig);\r\n }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n\r\n {footer && <div className=\"mt-4\">{footer()}</div>}\r\n </div>\r\n );\r\n};\r\n\r\nDataTable.displayName = \"DataTable\";"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"DataTable.js","sources":["../../../src/components/DataTable/DataTable.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useState, useMemo, useCallback } from \"react\";\nimport { \n ChevronUp, \n ChevronDown, \n Search, \n Filter, \n ChevronLeft, \n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n MoreHorizontal,\n Check,\n Minus\n} from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\nimport { Button } from \"../Button\";\nimport { Input } from \"../Input\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Badge } from \"../Badge\";\nimport { Spinner } from \"../Spinner\";\nimport { Skeleton } from \"../Skeleton\";\nimport { Card, CardContent } from \"../Card\";\nimport { useBreakpoint } from \"../../hooks/useBreakpoint\";\nimport { Select } from \"../Select\";\nimport type {\n DataTableProps,\n Column,\n FilterValue,\n SortConfig,\n PaginationConfig,\n RowSelection\n} from \"./DataTable.types\";\n\nconst tableVariants = cva(\n \"w-full border-collapse bg-white dark:bg-gray-900\",\n {\n variants: {\n size: {\n small: \"text-xs\",\n middle: \"text-sm\",\n large: \"text-base\",\n },\n bordered: {\n true: \"border border-gray-200 dark:border-gray-800\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"middle\",\n bordered: false,\n },\n }\n);\n\nconst cellVariants = cva(\n \"border-b border-gray-200 dark:border-gray-800 transition-colors\",\n {\n variants: {\n size: {\n small: \"px-2 py-1\",\n middle: \"px-4 py-3\",\n large: \"px-6 py-4\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n type: {\n header: \"bg-gray-50 dark:bg-gray-800/50 font-semibold text-gray-900 dark:text-gray-100 border-b-2 border-gray-200 dark:border-gray-800\",\n body: \"text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800/50\",\n },\n },\n defaultVariants: {\n size: \"middle\",\n align: \"left\",\n type: \"body\",\n },\n }\n);\n\n// Filter component for individual columns\nconst ColumnFilter = <T extends Record<string, any>>({\n column,\n value,\n onChange,\n}: {\n column: Column<T>;\n value: any;\n onChange: (value: any) => void;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [tempValue, setTempValue] = useState(value || '');\n\n const handleApply = () => {\n onChange(tempValue);\n setIsOpen(false);\n };\n\n const handleClear = () => {\n setTempValue('');\n onChange('');\n setIsOpen(false);\n };\n\n if (!column.filterable) return null;\n\n return (\n <div className=\"relative inline-block\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n \"p-1 h-6 w-6\",\n value && \"text-primary-600\"\n )}\n >\n <Filter className=\"h-3 w-3\" />\n </Button>\n \n {isOpen && (\n <>\n <div \n className=\"fixed inset-0 z-10\" \n onClick={() => setIsOpen(false)}\n />\n <div className=\"absolute top-full left-0 z-20 mt-1 bg-white border border-gray-200 rounded-lg shadow-lg p-3 min-w-[200px]\">\n {column.filterType === 'select' && column.filterOptions ? (\n <div className=\"space-y-2\">\n {column.filterOptions.map((option) => (\n <label key={option.value} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={tempValue === option.value}\n onChange={() => setTempValue(\n tempValue === option.value ? '' : option.value\n )}\n />\n <span className=\"text-sm\">{option.label}</span>\n </label>\n ))}\n </div>\n ) : (\n <Input\n placeholder={`Filter ${column.title}`}\n value={tempValue}\n onChange={(e) => setTempValue(e.target.value)}\n className=\"mb-2\"\n />\n )}\n \n <div className=\"flex justify-end space-x-2 mt-3\">\n <Button variant=\"ghost\" size=\"sm\" onClick={handleClear}>\n Clear\n </Button>\n <Button variant=\"primary\" size=\"sm\" onClick={handleApply}>\n Apply\n </Button>\n </div>\n </div>\n </>\n )}\n </div>\n );\n};\n\n// Pagination component\nconst TablePagination: React.FC<{\n pagination: PaginationConfig;\n onChange: (page: number, pageSize: number) => void;\n}> = ({ pagination, onChange }) => {\n const { current, pageSize, total, showSizeChanger = true, pageSizeOptions = [10, 20, 50, 100] } = pagination;\n const totalPages = Math.ceil(total / pageSize);\n const startRecord = (current - 1) * pageSize + 1;\n const endRecord = Math.min(current * pageSize, total);\n\n const getPageNumbers = () => {\n const pages = [];\n const maxVisible = 5;\n \n if (totalPages <= maxVisible) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n const start = Math.max(1, current - 2);\n const end = Math.min(totalPages, start + maxVisible - 1);\n \n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n }\n \n return pages;\n };\n\n // Convert pageSizeOptions to SelectOption format\n const selectOptions = pageSizeOptions.map(size => ({\n label: String(size),\n value: String(size),\n }));\n\n return (\n <div className=\"flex items-center justify-between px-4 py-3 bg-background border-t border-border\">\n <div className=\"flex items-center space-x-4\">\n <span className=\"text-sm text-foreground\">\n Showing {startRecord} to {endRecord} of {total} results\n </span>\n \n {showSizeChanger && (\n <div className=\"flex items-center space-x-2\">\n <span className=\"text-sm text-foreground\">Show</span>\n <Select\n options={selectOptions}\n value={String(pageSize)}\n onChange={e => onChange(1, Number(e.target.value))}\n variant=\"default\"\n selectSize=\"sm\"\n aria-label=\"Select number of items per page\"\n />\n <span className=\"text-sm text-foreground\">per page</span>\n </div>\n )}\n </div>\n \n <div className=\"flex items-center space-x-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(1, pageSize)}\n disabled={current === 1}\n aria-label=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(current - 1, pageSize)}\n disabled={current === 1}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n \n {getPageNumbers().map(page => (\n <Button\n key={page}\n variant={current === page ? \"primary\" : \"ghost\"}\n size=\"sm\"\n onClick={() => onChange(page, pageSize)}\n className=\"min-w-[32px]\"\n aria-label={`Go to page ${page}`}\n >\n {page}\n </Button>\n ))}\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(current + 1, pageSize)}\n disabled={current === totalPages}\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(totalPages, pageSize)}\n disabled={current === totalPages}\n aria-label=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n );\n};\n\nexport const DataTable = <T extends Record<string, any>>({\n columns,\n dataSource,\n loading = false,\n rowKey = 'id',\n pagination = { current: 1, pageSize: 10, total: 0 },\n rowSelection,\n size = 'middle',\n bordered = false,\n showHeader = true,\n title,\n footer,\n className,\n onSort,\n onFilter,\n onChange,\n ...props\n}: DataTableProps<T>) => {\n const [sortConfig, setSortConfig] = useState<SortConfig>({ key: '', direction: null });\n const [filters, setFilters] = useState<FilterValue>({});\n const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>(\n rowSelection?.selectedRowKeys || []\n );\n\n // Get row key function\n const getRowKey = useCallback((record: T, index: number): React.Key => {\n if (typeof rowKey === 'function') {\n return rowKey(record);\n }\n return record[rowKey] || index;\n }, [rowKey]);\n\n // Handle sorting\n const handleSort = useCallback((columnKey: string) => {\n let newDirection: 'asc' | 'desc' | null;\n if (sortConfig.key !== columnKey) {\n newDirection = 'asc';\n } else if (sortConfig.direction === 'asc') {\n newDirection = 'desc';\n } else if (sortConfig.direction === 'desc') {\n newDirection = null;\n } else {\n newDirection = 'asc';\n }\n const newSortConfig: SortConfig = { key: columnKey, direction: newDirection };\n setSortConfig(newSortConfig);\n onSort?.(newSortConfig);\n onChange?.(pagination as PaginationConfig, filters, newSortConfig);\n }, [sortConfig, pagination, filters, onSort, onChange]);\n\n // Handle filtering\n const handleFilter = useCallback((columnKey: string, value: any) => {\n const newFilters = { ...filters };\n if (value === '' || value === null || value === undefined) {\n delete newFilters[columnKey];\n } else {\n newFilters[columnKey] = value;\n }\n \n setFilters(newFilters);\n onFilter?.(newFilters);\n onChange?.(pagination as PaginationConfig, newFilters, sortConfig);\n }, [filters, pagination, sortConfig, onFilter, onChange]);\n\n // Handle row selection\n const handleRowSelect = useCallback((record: T, selected: boolean) => {\n const key = getRowKey(record, 0);\n let newSelectedKeys: React.Key[];\n \n if (rowSelection?.type === 'radio') {\n newSelectedKeys = selected ? [key] : [];\n } else {\n newSelectedKeys = selected \n ? [...selectedRowKeys, key]\n : selectedRowKeys.filter(k => k !== key);\n }\n \n setSelectedRowKeys(newSelectedKeys);\n const selectedRows = dataSource.filter(item => \n newSelectedKeys.includes(getRowKey(item, 0))\n );\n \n rowSelection?.onChange?.(newSelectedKeys, selectedRows);\n rowSelection?.onSelect?.(record, selected, selectedRows, {} as Event);\n }, [selectedRowKeys, rowSelection, dataSource, getRowKey]);\n\n // Handle select all\n const handleSelectAll = useCallback((selected: boolean) => {\n const newSelectedKeys = selected \n ? dataSource.map((item, index) => getRowKey(item, index))\n : [];\n \n setSelectedRowKeys(newSelectedKeys);\n const selectedRows = selected ? dataSource : [];\n \n rowSelection?.onChange?.(newSelectedKeys, selectedRows);\n rowSelection?.onSelectAll?.(selected, selectedRows, dataSource);\n }, [dataSource, rowSelection, getRowKey]);\n\n // Filter and sort data\n const processedData = useMemo(() => {\n let result = [...dataSource];\n \n // Apply filters\n Object.entries(filters).forEach(([key, value]) => {\n if (value !== '' && value !== null && value !== undefined) {\n result = result.filter(item => {\n const itemValue = item[key];\n if (typeof itemValue === 'string') {\n return itemValue.toLowerCase().includes(String(value).toLowerCase());\n }\n return itemValue === value;\n });\n }\n });\n \n // Apply sorting\n if (sortConfig.key && sortConfig.direction) {\n result.sort((a, b) => {\n const aValue = a[sortConfig.key];\n const bValue = b[sortConfig.key];\n \n if (aValue === bValue) return 0;\n \n const comparison = aValue < bValue ? -1 : 1;\n return sortConfig.direction === 'asc' ? comparison : -comparison;\n });\n }\n \n return result;\n }, [dataSource, filters, sortConfig]);\n\n // Pagination logic\n const paginatedData = useMemo(() => {\n if (!pagination) return processedData;\n \n const { current, pageSize } = pagination;\n const startIndex = (current - 1) * pageSize;\n return processedData.slice(startIndex, startIndex + pageSize);\n }, [processedData, pagination]);\n\n // Update pagination total\n const currentPagination = useMemo(() => {\n if (!pagination) return false;\n return {\n ...pagination,\n total: processedData.length,\n };\n }, [pagination, processedData.length]);\n\n // Selection state\n const isAllSelected = selectedRowKeys.length === dataSource.length && dataSource.length > 0;\n const isIndeterminate = selectedRowKeys.length > 0 && selectedRowKeys.length < dataSource.length;\n\n // Mobile-first responsive: useBreakpoint to switch between table and card layouts\n const { isBelow } = useBreakpoint();\n\n if (loading) {\n return (\n <div className={cn(\"w-full\", className)}>\n {title && <div className=\"mb-4\">{title()}</div>}\n <div className=\"border border-gray-200 dark:border-gray-800 rounded-lg overflow-hidden\">\n <div className=\"p-4 space-y-3\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"flex space-x-4\">\n <Skeleton className=\"h-4 w-8\" />\n <Skeleton className=\"h-4 flex-1\" />\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-4 w-16\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(\"w-full\", className)}>\n {title && <div className=\"mb-4\">{title()}</div>}\n\n <div className=\"border border-gray-200 dark:border-gray-800 rounded-lg overflow-hidden\">\n {/* Card layout for mobile */}\n {isBelow('md') ? (\n <div className=\"space-y-4 p-2\">\n {paginatedData.length === 0 ? (\n <div className=\"text-gray-500 dark:text-gray-400 text-center py-8\">\n <div className=\"text-4xl mb-2\">📋</div>\n <div>No data available</div>\n </div>\n ) : (\n paginatedData.map((record, index) => {\n const key = getRowKey(record, index);\n const isSelected = selectedRowKeys.includes(key);\n\n return (\n <Card\n key={key}\n variant={isSelected ? \"elevated\" : \"default\"}\n padding=\"sm\"\n className={cn(\n \"transition-shadow\",\n isSelected && \"border-primary-600 shadow-lg\"\n )}\n >\n <CardContent className=\"space-y-2\">\n {rowSelection && (\n <div className=\"flex items-center mb-2\">\n <Checkbox\n checked={isSelected}\n onChange={(e) => handleRowSelect(record, e.target.checked)}\n {...rowSelection.getCheckboxProps?.(record)}\n />\n <span className=\"ml-2 text-xs text-gray-500\">Select</span>\n </div>\n )}\n {columns.map((column) => (\n <div key={column.key} className=\"flex justify-between items-center py-1 border-b last:border-b-0\">\n <span className=\"font-medium text-gray-700\">{column.title}</span>\n <span className=\"text-gray-900\">\n {column.render\n ? column.render(record[column.dataIndex], record, index)\n : String(record[column.dataIndex] || '')\n }\n </span>\n </div>\n ))}\n </CardContent>\n </Card>\n );\n })\n )}\n </div>\n ) : (\n // Table layout for desktop/tablet\n <div className=\"overflow-x-auto\">\n <table className={cn(tableVariants({ size, bordered }))}>\n {showHeader && (\n <thead>\n <tr>\n {rowSelection && (\n <th className={cn(cellVariants({ size, type: \"header\" }), \"w-12\")}>\n {rowSelection.type !== 'radio' && (\n <Checkbox\n checked={isAllSelected}\n onChange={(e) => handleSelectAll(e.target.checked)}\n className={cn(isIndeterminate && \"indeterminate\")}\n />\n )}\n </th>\n )}\n \n {columns.map((column) => (\n <th\n key={column.key}\n className={cn(\n cellVariants({\n size,\n align: column.align,\n type: \"header\"\n }),\n column.width && `w-[${column.width}]`\n )}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-2\">\n <span>{column.title}</span>\n {column.sortable && (\n <button\n onClick={() => handleSort(column.key)}\n className=\"flex flex-col items-center hover:text-primary-600\"\n >\n <ChevronUp\n className={cn(\n \"h-3 w-3\",\n sortConfig.key === column.key && sortConfig.direction === 'asc'\n ? \"text-primary-600\"\n : \"text-gray-400\"\n )}\n />\n <ChevronDown\n className={cn(\n \"h-3 w-3 -mt-1\",\n sortConfig.key === column.key && sortConfig.direction === 'desc'\n ? \"text-primary-600\"\n : \"text-gray-400\"\n )}\n />\n </button>\n )}\n </div>\n \n <ColumnFilter\n column={column}\n value={filters[column.key]}\n onChange={(value) => handleFilter(column.key, value)}\n />\n </div>\n </th>\n ))}\n </tr>\n </thead>\n )}\n \n <tbody>\n {paginatedData.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length + (rowSelection ? 1 : 0)}\n className={cn(cellVariants({ size, align: \"center\" }), \"py-8\")}\n >\n <div className=\"text-gray-500\">\n <div className=\"text-4xl mb-2\">📋</div>\n <div>No data available</div>\n </div>\n </td>\n </tr>\n ) : (\n paginatedData.map((record, index) => {\n const key = getRowKey(record, index);\n const isSelected = selectedRowKeys.includes(key);\n \n return (\n <tr\n key={key}\n className={cn(\n \"hover:bg-gray-50 transition-colors\",\n isSelected && \"bg-primary-50\"\n )}\n {...(props.onRow?.(record, index) ?? {})}\n >\n {rowSelection && (\n <td className={cn(cellVariants({ size }))}>\n <Checkbox\n checked={isSelected}\n onChange={(e) => handleRowSelect(record, e.target.checked)}\n {...rowSelection.getCheckboxProps?.(record)}\n />\n </td>\n )}\n \n {columns.map((column) => (\n <td\n key={column.key}\n className={cn(cellVariants({\n size,\n align: column.align\n }))}\n >\n {column.render\n ? column.render(record[column.dataIndex], record, index)\n : String(record[column.dataIndex] || '')\n }\n </td>\n ))}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n )}\n {/* Always show pagination controls below data */}\n {currentPagination && (\n <div className=\"pt-2\">\n <TablePagination\n pagination={currentPagination}\n onChange={(page, pageSize) => {\n const newPagination = { ...currentPagination, current: page, pageSize };\n onChange?.(newPagination, filters, sortConfig);\n }}\n />\n </div>\n )}\n </div>\n\n {footer && <div className=\"mt-4\">{footer()}</div>}\n </div>\n );\n};\n\nDataTable.displayName = \"DataTable\";"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Image.js","sources":["../../../src/components/Image/Image.tsx"],"sourcesContent":["import React, { useState } from \"react\";\r\nimport { Skeleton } from \"../Skeleton\";\r\nimport { Spinner } from \"../Spinner\";\r\nimport { useIntersectionObserver } from \"../../hooks/useIntersectionObserver\";\r\n\r\nexport interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\r\n src: string;\r\n alt: string;\r\n className?: string;\r\n fallbackSrc?: string;\r\n skeletonClassName?: string;\r\n}\r\n\r\nconst DEFAULT_PLACEHOLDER =\r\n \"https://res.cloudinary.com/dmpposta9/image/upload/v1759505259/beyond/beyond%20ui/beyond-ui-logo-part-with-bg_1_wydfry.png\";\r\nexport const Image: React.FC<ImageProps> = ({\r\n src,\r\n alt,\r\n className = \"\",\r\n fallbackSrc = DEFAULT_PLACEHOLDER,\r\n skeletonClassName = \"w-full h-full\",\r\n ...imgProps\r\n}) => {\r\n const [loaded, setLoaded] = useState(false);\r\n const [error, setError] = useState(false);\r\n const [containerRef, inView] = useIntersectionObserver<HTMLDivElement>({ threshold: 0.1, freezeOnceVisible: true });\r\n\r\n // Only load image if inView (or fallback if IntersectionObserver unsupported)\r\n const shouldLoad = inView;\r\n\r\n return (\r\n <div ref={containerRef} className={`relative ${className}`}>\r\n {!loaded && !error && (\r\n <div className={`absolute inset-0 flex items-center justify-center ${skeletonClassName}`}>\r\n <Skeleton className=\"w-full h-full absolute inset-0\" />\r\n <Spinner className=\"relative z-10 w-8 h-8 text-primary-500\" />\r\n </div>\r\n )}\r\n {shouldLoad && (\r\n <img\r\n src={error ? fallbackSrc : src}\r\n alt={alt}\r\n // loading=\"lazy\"\r\n style={loaded ? {} : { display: \"none\" }}\r\n onLoad={() => setLoaded(true)}\r\n onError={() => setError(true)}\r\n draggable={imgProps.draggable ?? false}\r\n {...imgProps}\r\n className={`absolute inset-0 w-full h-full object-cover transition-transform duration-300 ${loaded ? \"\" : \"hidden\"}`}\r\n />\r\n )}\r\n </div>\r\n );\r\n};"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAaA,MAAM,mBAAmB,GACvB,2HAA2H;AACtH,MAAM,KAAK,GAAyB,CAAC,EAC1C,GAAG,EACH,GAAG,EACH,SAAS,GAAG,EAAE,EACd,WAAW,GAAG,mBAAmB,EACjC,iBAAiB,GAAG,eAAe,EACnC,GAAG,QAAQ,EACZ,KAAI;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC3C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACzC,IAAA,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,uBAAuB,CAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;;IAGnH,MAAM,UAAU,GAAG,MAAM;AAEzB,IAAA,QACEA,IAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,CAAA,SAAA,EAAY,SAAS,CAAA,CAAE,EAAA,QAAA,EAAA,CACvD,CAAC,MAAM,IAAI,CAAC,KAAK,KAChBA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,kDAAA,EAAqD,iBAAiB,CAAA,CAAE,EAAA,QAAA,EAAA,CACtFC,GAAA,CAAC,QAAQ,IAAC,SAAS,EAAC,gCAAgC,EAAA,CAAG,EACvDA,GAAA,CAAC,OAAO,EAAA,EAAC,SAAS,EAAC,wCAAwC,EAAA,CAAG,CAAA,EAAA,CAC1D,CACP,EACA,UAAU,KACTA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,KAAK,GAAG,WAAW,GAAG,GAAG,EAC9B,GAAG,EAAE,GAAG;;AAER,gBAAA,KAAK,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EACxC,MAAM,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,EAC7B,OAAO,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,EAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,KAAK,EAAA,GAClC,QAAQ,EACZ,SAAS,EAAE,CAAA,8EAAA,EAAiF,MAAM,GAAG,EAAE,GAAG,QAAQ,CAAA,CAAE,EAAA,CACpH,CACH,CAAA,EAAA,CACG;AAEV;;;;"}
1
+ {"version":3,"file":"Image.js","sources":["../../../src/components/Image/Image.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { Skeleton } from \"../Skeleton\";\nimport { Spinner } from \"../Spinner\";\nimport { useIntersectionObserver } from \"../../hooks/useIntersectionObserver\";\n\nexport interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n src: string;\n alt: string;\n className?: string;\n fallbackSrc?: string;\n skeletonClassName?: string;\n}\n\nconst DEFAULT_PLACEHOLDER =\n \"https://res.cloudinary.com/dmpposta9/image/upload/v1759505259/beyond/beyond%20ui/beyond-ui-logo-part-with-bg_1_wydfry.png\";\nexport const Image: React.FC<ImageProps> = ({\n src,\n alt,\n className = \"\",\n fallbackSrc = DEFAULT_PLACEHOLDER,\n skeletonClassName = \"w-full h-full\",\n ...imgProps\n}) => {\n const [loaded, setLoaded] = useState(false);\n const [error, setError] = useState(false);\n const [containerRef, inView] = useIntersectionObserver<HTMLDivElement>({ threshold: 0.1, freezeOnceVisible: true });\n\n // Only load image if inView (or fallback if IntersectionObserver unsupported)\n const shouldLoad = inView;\n\n return (\n <div ref={containerRef} className={`relative ${className}`}>\n {!loaded && !error && (\n <div className={`absolute inset-0 flex items-center justify-center ${skeletonClassName}`}>\n <Skeleton className=\"w-full h-full absolute inset-0\" />\n <Spinner className=\"relative z-10 w-8 h-8 text-primary-500\" />\n </div>\n )}\n {shouldLoad && (\n <img\n src={error ? fallbackSrc : src}\n alt={alt}\n // loading=\"lazy\"\n style={loaded ? {} : { display: \"none\" }}\n onLoad={() => setLoaded(true)}\n onError={() => setError(true)}\n draggable={imgProps.draggable ?? false}\n {...imgProps}\n className={`absolute inset-0 w-full h-full object-cover transition-transform duration-300 ${loaded ? \"\" : \"hidden\"}`}\n />\n )}\n </div>\n );\n};"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAaA,MAAM,mBAAmB,GACvB,2HAA2H;AACtH,MAAM,KAAK,GAAyB,CAAC,EAC1C,GAAG,EACH,GAAG,EACH,SAAS,GAAG,EAAE,EACd,WAAW,GAAG,mBAAmB,EACjC,iBAAiB,GAAG,eAAe,EACnC,GAAG,QAAQ,EACZ,KAAI;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC3C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACzC,IAAA,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,uBAAuB,CAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;;IAGnH,MAAM,UAAU,GAAG,MAAM;AAEzB,IAAA,QACEA,IAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,CAAA,SAAA,EAAY,SAAS,CAAA,CAAE,EAAA,QAAA,EAAA,CACvD,CAAC,MAAM,IAAI,CAAC,KAAK,KAChBA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,kDAAA,EAAqD,iBAAiB,CAAA,CAAE,EAAA,QAAA,EAAA,CACtFC,GAAA,CAAC,QAAQ,IAAC,SAAS,EAAC,gCAAgC,EAAA,CAAG,EACvDA,GAAA,CAAC,OAAO,EAAA,EAAC,SAAS,EAAC,wCAAwC,EAAA,CAAG,CAAA,EAAA,CAC1D,CACP,EACA,UAAU,KACTA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,KAAK,GAAG,WAAW,GAAG,GAAG,EAC9B,GAAG,EAAE,GAAG;;AAER,gBAAA,KAAK,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EACxC,MAAM,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,EAC7B,OAAO,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,EAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,KAAK,EAAA,GAClC,QAAQ,EACZ,SAAS,EAAE,CAAA,8EAAA,EAAiF,MAAM,GAAG,EAAE,GAAG,QAAQ,CAAA,CAAE,EAAA,CACpH,CACH,CAAA,EAAA,CACG;AAEV;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Input.example.js","sources":["../../../src/components/Input/Input.example.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { Input } from \"./Input\";\r\n\r\nexport const InputExample: React.FC = () => (\r\n <div className=\"space-y-4 max-w-md\">\r\n <Input placeholder=\"Default input\" />\r\n <Input placeholder=\"Success state\" variant=\"success\" />\r\n <Input placeholder=\"Error state\" variant=\"error\" />\r\n <div className=\"space-y-2\">\r\n <Input placeholder=\"Small\" inputSize=\"sm\" />\r\n <Input placeholder=\"Medium\" inputSize=\"md\" />\r\n <Input placeholder=\"Large\" inputSize=\"lg\" />\r\n </div>\r\n </div>\r\n);"],"names":["_jsxs","_jsx"],"mappings":";;;AAGO,MAAM,YAAY,GAAa,OACpCA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oBAAoB,aACjCC,GAAA,CAAC,KAAK,IAAC,WAAW,EAAC,eAAe,EAAA,CAAG,EACrCA,GAAA,CAAC,KAAK,IAAC,WAAW,EAAC,eAAe,EAAC,OAAO,EAAC,SAAS,EAAA,CAAG,EACvDA,GAAA,CAAC,KAAK,IAAC,WAAW,EAAC,aAAa,EAAC,OAAO,EAAC,OAAO,EAAA,CAAG,EACnDD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,aACxBC,GAAA,CAAC,KAAK,IAAC,WAAW,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAA,CAAG,EAC5CA,GAAA,CAAC,KAAK,IAAC,WAAW,EAAC,QAAQ,EAAC,SAAS,EAAC,IAAI,GAAG,EAC7CA,GAAA,CAAC,KAAK,EAAA,EAAC,WAAW,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,GAAG,CAAA,EAAA,CACxC,CAAA,EAAA,CACF;;;;"}
1
+ {"version":3,"file":"Input.example.js","sources":["../../../src/components/Input/Input.example.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Input } from \"./Input\";\n\nexport const InputExample: React.FC = () => (\n <div className=\"space-y-4 max-w-md\">\n <Input placeholder=\"Default input\" />\n <Input placeholder=\"Success state\" variant=\"success\" />\n <Input placeholder=\"Error state\" variant=\"error\" />\n <div className=\"space-y-2\">\n <Input placeholder=\"Small\" inputSize=\"sm\" />\n <Input placeholder=\"Medium\" inputSize=\"md\" />\n <Input placeholder=\"Large\" inputSize=\"lg\" />\n </div>\n </div>\n);"],"names":["_jsxs","_jsx"],"mappings":";;;AAGO,MAAM,YAAY,GAAa,OACpCA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oBAAoB,aACjCC,GAAA,CAAC,KAAK,IAAC,WAAW,EAAC,eAAe,EAAA,CAAG,EACrCA,GAAA,CAAC,KAAK,IAAC,WAAW,EAAC,eAAe,EAAC,OAAO,EAAC,SAAS,EAAA,CAAG,EACvDA,GAAA,CAAC,KAAK,IAAC,WAAW,EAAC,aAAa,EAAC,OAAO,EAAC,OAAO,EAAA,CAAG,EACnDD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,aACxBC,GAAA,CAAC,KAAK,IAAC,WAAW,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAA,CAAG,EAC5CA,GAAA,CAAC,KAAK,IAAC,WAAW,EAAC,QAAQ,EAAC,SAAS,EAAC,IAAI,GAAG,EAC7CA,GAAA,CAAC,KAAK,EAAA,EAAC,WAAW,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,GAAG,CAAA,EAAA,CACxC,CAAA,EAAA,CACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AllProductsView.js","sources":["../../../src/components/Marketplace/AllProductsView.tsx"],"sourcesContent":["import React, { useState, useMemo } from 'react';\r\nimport { Search, Filter, Grid2x2 as Grid, List, Star, ShoppingCart } from 'lucide-react';\r\nimport { MarketplaceControls } from './components/MarketplaceControls';\r\nimport { Button } from '../Button';\r\nimport { Badge } from '../Badge';\r\nimport { Modal, ModalHeader, ModalTitle, ModalContent, ModalFooter } from '../Modal';\r\nimport { Checkbox } from '../Checkbox';\r\nimport { showToast } from '../Toast';\r\nimport type { Product, FilterOptions, SortOption } from './types';\r\nimport { sampleProducts } from './data/sampleData';\r\nimport { ProductCard } from './components/ProductCard';\r\n\r\ninterface AllProductsViewProps {\r\n products?: Product[];\r\n filters: FilterOptions;\r\n searchQuery: string;\r\n setSearchQuery?: (query: string) => void;\r\n shouldFocusSearch?: boolean;\r\n onProductClick?: (product: Product) => void;\r\n onAddToCart?: (product: Product) => void;\r\n onFiltersChange: (filters: FilterOptions) => void;\r\n onClearFilters: () => void;\r\n}\r\n\r\nconst sortOptions: SortOption[] = [\r\n { value: 'relevance', label: 'Most Relevant' },\r\n { value: 'price-low', label: 'Price: Low to High' },\r\n { value: 'price-high', label: 'Price: High to Low' },\r\n { value: 'rating', label: 'Highest Rated' },\r\n { value: 'newest', label: 'Newest First' },\r\n { value: 'popular', label: 'Most Popular' },\r\n];\r\n\r\nexport const AllProductsView: React.FC<AllProductsViewProps> = ({\r\n products,\r\n filters: filtersProp,\r\n searchQuery,\r\n setSearchQuery,\r\n shouldFocusSearch,\r\n onProductClick,\r\n onAddToCart,\r\n onFiltersChange,\r\n onClearFilters,\r\n}) => {\r\n const productsData = products ?? sampleProducts;\r\n const [sortBy, setSortBy] = useState('relevance');\r\n const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid');\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [showFilters, setShowFilters] = useState(false);\r\n const [quickViewProduct, setQuickViewProduct] = useState<Product | null>(null);\r\n const [wishlist, setWishlist] = useState<Set<string>>(new Set());\r\n\r\n // Use filters and handlers from props only\r\n const filters = filtersProp;\r\n\r\n const itemsPerPage = 12;\r\n\r\n // Get unique filter options from products\r\n const filterOptions = useMemo(() => {\r\n const categories = [...new Set(productsData.map((p: Product) => p.category))];\r\n const brands = [...new Set(productsData.map((p: Product) => p.brand))];\r\n const vendors = [...new Set(productsData.map((p: Product) => p.vendor.name))];\r\n\r\n return { categories, brands, vendors };\r\n }, [productsData]);\r\n\r\n // Filter and sort products\r\n const filteredProducts = useMemo(() => {\r\n let filtered = productsData.filter((product: Product) => {\r\n // Search query\r\n if (searchQuery && !product.name.toLowerCase().includes(searchQuery.toLowerCase()) &&\r\n !product.description.toLowerCase().includes(searchQuery.toLowerCase())) {\r\n return false;\r\n }\r\n\r\n // Category filter\r\n if (filters.categories.length > 0 && !filters.categories.includes(product.category)) {\r\n return false;\r\n }\r\n\r\n // Brand filter\r\n if (filters.brands.length > 0 && !filters.brands.includes(product.brand)) {\r\n return false;\r\n }\r\n\r\n // Price range\r\n if (product.price < filters.priceRange[0] || product.price > filters.priceRange[1]) {\r\n return false;\r\n }\r\n\r\n // Rating filter\r\n if (filters.rating > 0 && product.rating < filters.rating) {\r\n return false;\r\n }\r\n\r\n // In stock filter\r\n if (filters.inStock && !product.inStock) {\r\n return false;\r\n }\r\n\r\n // Vendor filter\r\n if (filters.vendors.length > 0 && !filters.vendors.includes(product.vendor.name)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n // Sort products\r\n switch (sortBy) {\r\n case 'price-low':\r\n filtered.sort((a: Product, b: Product) => a.price - b.price);\r\n break;\r\n case 'price-high':\r\n filtered.sort((a: Product, b: Product) => b.price - a.price);\r\n break;\r\n case 'rating':\r\n filtered.sort((a: Product, b: Product) => b.rating - a.rating);\r\n break;\r\n case 'newest':\r\n // Assuming newer products have higher IDs\r\n filtered.sort((a: Product, b: Product) => parseInt(b.id) - parseInt(a.id));\r\n break;\r\n case 'popular':\r\n filtered.sort((a: Product, b: Product) => b.reviewCount - a.reviewCount);\r\n break;\r\n default:\r\n // Keep original order for relevance\r\n break;\r\n }\r\n\r\n return filtered;\r\n }, [productsData, searchQuery, filters, sortBy]);\r\n\r\n // Paginate products\r\n const paginatedProducts = useMemo(() => {\r\n const startIndex = (currentPage - 1) * itemsPerPage;\r\n return filteredProducts.slice(startIndex, startIndex + itemsPerPage);\r\n }, [filteredProducts, currentPage]);\r\n\r\n const totalPages = Math.ceil(filteredProducts.length / itemsPerPage);\r\n\r\n const handleFilterChange = (filterType: keyof FilterOptions, value: any) => {\r\n const newFilters = {\r\n ...filters,\r\n [filterType]: value,\r\n };\r\n onFiltersChange(newFilters);\r\n setCurrentPage(1); // Reset to first page when filters change\r\n };\r\n\r\n const handleClearFilters = () => {\r\n onClearFilters();\r\n setCurrentPage(1);\r\n };\r\n\r\n const toggleWishlist = (productId: string) => {\r\n setWishlist(prev => {\r\n const newWishlist = new Set(prev);\r\n if (newWishlist.has(productId)) {\r\n newWishlist.delete(productId);\r\n showToast.info('Removed from wishlist');\r\n } else {\r\n newWishlist.add(productId);\r\n showToast.success('Added to wishlist');\r\n }\r\n return newWishlist;\r\n });\r\n };\r\n\r\n const handleAddToCart = (product: Product) => {\r\n onAddToCart?.(product);\r\n showToast.success(`${product.name} added to cart!`);\r\n };\r\n\r\n // Remove local ProductCard in favor of reusable ProductCard\r\n\r\n return (\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\">\r\n {/* Header */}\r\n <div className=\"flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between mb-8\">\r\n <div>\r\n <h1 className=\"text-3xl font-bold text-gray-900 mb-2\">All Products</h1>\r\n <p className=\"text-gray-600\">\r\n Showing {filteredProducts.length} of {productsData.length} products\r\n </p>\r\n </div>\r\n \r\n {/* Search and Controls */}\r\n <MarketplaceControls\r\n searchQuery={searchQuery}\r\n onSearchChange={setSearchQuery ? setSearchQuery : () => {}}\r\n shouldFocusSearch={shouldFocusSearch}\r\n sortBy={sortBy}\r\n onSortChange={setSortBy}\r\n viewMode={viewMode}\r\n onViewModeChange={setViewMode}\r\n onShowFilters={() => setShowFilters(true)}\r\n sortOptions={sortOptions}\r\n />\r\n </div>\r\n\r\n <div className=\"flex gap-8\">\r\n\r\n {/* Products Grid */}\r\n <div className=\"flex-1\">\r\n {paginatedProducts.length === 0 ? (\r\n <div className=\"text-center py-12\">\r\n <div className=\"text-gray-400 mb-4\">\r\n <Search className=\"h-16 w-16 mx-auto\" />\r\n </div>\r\n <h3 className=\"text-lg font-medium text-gray-900 mb-2\">No products found</h3>\r\n <p className=\"text-gray-600 mb-4\">\r\n Try adjusting your search or filter criteria\r\n </p>\r\n <Button variant=\"outline\" onClick={handleClearFilters}>\r\n Clear Filters\r\n </Button>\r\n </div>\r\n ) : (\r\n <>\r\n <div className={`grid gap-3 sm:gap-6 ${\r\n viewMode === 'grid'\r\n ? 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4'\r\n : 'grid-cols-1'\r\n }`}>\r\n {paginatedProducts.map((product: Product) => (\r\n <div className=\"w-full max-w-xs mx-auto sm:max-w-none\" key={product.id}>\r\n <ProductCard\r\n product={product}\r\n onProductClick={onProductClick}\r\n onAddToCart={handleAddToCart}\r\n onQuickView={() => setQuickViewProduct(product)}\r\n onToggleWishlist={toggleWishlist}\r\n isWishlisted={wishlist.has(product.id)}\r\n showQuickActions={true}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Pagination */}\r\n {totalPages > 1 && (\r\n <div className=\"flex flex-wrap items-center justify-center gap-2 mt-8 sm:mt-12\">\r\n <Button\r\n variant=\"outline\"\r\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\r\n disabled={currentPage === 1}\r\n >\r\n Previous\r\n </Button>\r\n \r\n {Array.from({ length: Math.min(5, totalPages) }, (_, i) => {\r\n const page = i + 1;\r\n return (\r\n <Button\r\n key={page}\r\n variant={currentPage === page ? 'primary' : 'outline'}\r\n onClick={() => setCurrentPage(page)}\r\n >\r\n {page}\r\n </Button>\r\n );\r\n })}\r\n \r\n <Button\r\n variant=\"outline\"\r\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\r\n disabled={currentPage === totalPages}\r\n >\r\n Next\r\n </Button>\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Mobile Filters Modal */}\r\n <Modal open={showFilters} onOpenChange={setShowFilters}>\r\n <ModalHeader>\r\n <ModalTitle>Filters</ModalTitle>\r\n </ModalHeader>\r\n <ModalContent>\r\n {/* Same filter content as sidebar but in modal */}\r\n <div className=\"space-y-6\">\r\n {/* Categories */}\r\n <div>\r\n <h4 className=\"font-medium text-gray-900 mb-3\">Categories</h4>\r\n <div className=\"space-y-2\">\r\n {(filterOptions.categories as string[]).map((category, idx) => (\r\n <label key={category} className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={filters.categories.includes(category)}\r\n onChange={(e) => {\r\n const alreadyChecked = filters.categories.includes(category);\r\n const newCategories = e.target.checked\r\n ? alreadyChecked\r\n ? filters.categories\r\n : [...filters.categories, category]\r\n : filters.categories.filter((c: string) => c !== category);\r\n handleFilterChange('categories', newCategories);\r\n }}\r\n />\r\n <span className=\"text-sm text-gray-700\">{category}</span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n {/* Brands */}\r\n <div>\r\n <h4 className=\"font-medium text-gray-900 mb-3\">Brands</h4>\r\n <div className=\"space-y-2\">\r\n {(filterOptions.brands as string[]).map((brand, idx) => (\r\n <label key={brand} className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={filters.brands.includes(brand)}\r\n onChange={(e) => {\r\n const alreadyChecked = filters.brands.includes(brand);\r\n const newBrands = e.target.checked\r\n ? alreadyChecked\r\n ? filters.brands\r\n : [...filters.brands, brand]\r\n : filters.brands.filter((b: string) => b !== brand);\r\n handleFilterChange('brands', newBrands);\r\n }}\r\n />\r\n <span className=\"text-sm text-gray-700\">{brand}</span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n {/* Vendors */}\r\n <div>\r\n <h4 className=\"font-medium text-gray-900 mb-3\">Vendors</h4>\r\n <div className=\"space-y-2\">\r\n {(filterOptions.vendors as string[]).map((vendor, idx) => (\r\n <label key={vendor} className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n checked={filters.vendors.includes(vendor)}\r\n onChange={(e) => {\r\n const alreadyChecked = filters.vendors.includes(vendor);\r\n const newVendors = e.target.checked\r\n ? alreadyChecked\r\n ? filters.vendors\r\n : [...filters.vendors, vendor]\r\n : filters.vendors.filter((v: string) => v !== vendor);\r\n handleFilterChange('vendors', newVendors);\r\n }}\r\n />\r\n <span className=\"text-sm text-gray-700\">{vendor}</span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </ModalContent>\r\n <ModalFooter>\r\n <Button variant=\"outline\" onClick={handleClearFilters}>\r\n Clear All\r\n </Button>\r\n <Button variant=\"primary\" onClick={() => setShowFilters(false)}>\r\n Apply Filters\r\n </Button>\r\n </ModalFooter>\r\n </Modal>\r\n\r\n {/* Quick View Modal */}\r\n <Modal open={!!quickViewProduct} onOpenChange={() => setQuickViewProduct(null)} size=\"lg\">\r\n {quickViewProduct && (\r\n <>\r\n <ModalHeader>\r\n <ModalTitle>{quickViewProduct.name}</ModalTitle>\r\n </ModalHeader>\r\n <ModalContent>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\r\n <div className=\"aspect-square bg-gray-100 rounded-lg overflow-hidden\">\r\n <img\r\n src={quickViewProduct.images[0]}\r\n alt={quickViewProduct.name}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n </div>\r\n <div>\r\n <div className=\"flex items-center space-x-1 mb-2\">\r\n <Star className=\"h-4 w-4 text-yellow-400 fill-current\" />\r\n <span className=\"text-sm text-gray-600\">\r\n {quickViewProduct.rating} ({quickViewProduct.reviewCount} reviews)\r\n </span>\r\n </div>\r\n <div className=\"flex items-center space-x-2 mb-4\">\r\n <span className=\"text-2xl font-bold text-gray-900\">\r\n ${quickViewProduct.price.toFixed(2)}\r\n </span>\r\n {quickViewProduct.originalPrice && (\r\n <span className=\"text-lg text-gray-500 line-through\">\r\n ${quickViewProduct.originalPrice.toFixed(2)}\r\n </span>\r\n )}\r\n </div>\r\n <p className=\"text-gray-600 mb-4\">{quickViewProduct.description}</p>\r\n <Badge variant={quickViewProduct.inStock ? 'success' : 'danger'} className=\"mb-4\">\r\n {quickViewProduct.inStock ? 'In Stock' : 'Out of Stock'}\r\n </Badge>\r\n </div>\r\n </div>\r\n </ModalContent>\r\n <ModalFooter>\r\n <Button variant=\"outline\" onClick={() => onProductClick?.(quickViewProduct)}>\r\n View Details\r\n </Button>\r\n <Button \r\n variant=\"primary\" \r\n onClick={() => handleAddToCart(quickViewProduct)}\r\n disabled={!quickViewProduct.inStock}\r\n >\r\n <ShoppingCart className=\"mr-2 h-4 w-4\" />\r\n Add to Cart\r\n </Button>\r\n </ModalFooter>\r\n </>\r\n )}\r\n </Modal>\r\n </div>\r\n );\r\n};"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"AllProductsView.js","sources":["../../../src/components/Marketplace/AllProductsView.tsx"],"sourcesContent":["import React, { useState, useMemo } from 'react';\nimport { Search, Filter, Grid2x2 as Grid, List, Star, ShoppingCart } from 'lucide-react';\nimport { MarketplaceControls } from './components/MarketplaceControls';\nimport { Button } from '../Button';\nimport { Badge } from '../Badge';\nimport { Modal, ModalHeader, ModalTitle, ModalContent, ModalFooter } from '../Modal';\nimport { Checkbox } from '../Checkbox';\nimport { showToast } from '../Toast';\nimport type { Product, FilterOptions, SortOption } from './types';\nimport { sampleProducts } from './data/sampleData';\nimport { ProductCard } from './components/ProductCard';\n\ninterface AllProductsViewProps {\n products?: Product[];\n filters: FilterOptions;\n searchQuery: string;\n setSearchQuery?: (query: string) => void;\n shouldFocusSearch?: boolean;\n onProductClick?: (product: Product) => void;\n onAddToCart?: (product: Product) => void;\n onFiltersChange: (filters: FilterOptions) => void;\n onClearFilters: () => void;\n}\n\nconst sortOptions: SortOption[] = [\n { value: 'relevance', label: 'Most Relevant' },\n { value: 'price-low', label: 'Price: Low to High' },\n { value: 'price-high', label: 'Price: High to Low' },\n { value: 'rating', label: 'Highest Rated' },\n { value: 'newest', label: 'Newest First' },\n { value: 'popular', label: 'Most Popular' },\n];\n\nexport const AllProductsView: React.FC<AllProductsViewProps> = ({\n products,\n filters: filtersProp,\n searchQuery,\n setSearchQuery,\n shouldFocusSearch,\n onProductClick,\n onAddToCart,\n onFiltersChange,\n onClearFilters,\n}) => {\n const productsData = products ?? sampleProducts;\n const [sortBy, setSortBy] = useState('relevance');\n const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid');\n const [currentPage, setCurrentPage] = useState(1);\n const [showFilters, setShowFilters] = useState(false);\n const [quickViewProduct, setQuickViewProduct] = useState<Product | null>(null);\n const [wishlist, setWishlist] = useState<Set<string>>(new Set());\n\n // Use filters and handlers from props only\n const filters = filtersProp;\n\n const itemsPerPage = 12;\n\n // Get unique filter options from products\n const filterOptions = useMemo(() => {\n const categories = [...new Set(productsData.map((p: Product) => p.category))];\n const brands = [...new Set(productsData.map((p: Product) => p.brand))];\n const vendors = [...new Set(productsData.map((p: Product) => p.vendor.name))];\n\n return { categories, brands, vendors };\n }, [productsData]);\n\n // Filter and sort products\n const filteredProducts = useMemo(() => {\n let filtered = productsData.filter((product: Product) => {\n // Search query\n if (searchQuery && !product.name.toLowerCase().includes(searchQuery.toLowerCase()) &&\n !product.description.toLowerCase().includes(searchQuery.toLowerCase())) {\n return false;\n }\n\n // Category filter\n if (filters.categories.length > 0 && !filters.categories.includes(product.category)) {\n return false;\n }\n\n // Brand filter\n if (filters.brands.length > 0 && !filters.brands.includes(product.brand)) {\n return false;\n }\n\n // Price range\n if (product.price < filters.priceRange[0] || product.price > filters.priceRange[1]) {\n return false;\n }\n\n // Rating filter\n if (filters.rating > 0 && product.rating < filters.rating) {\n return false;\n }\n\n // In stock filter\n if (filters.inStock && !product.inStock) {\n return false;\n }\n\n // Vendor filter\n if (filters.vendors.length > 0 && !filters.vendors.includes(product.vendor.name)) {\n return false;\n }\n\n return true;\n });\n\n // Sort products\n switch (sortBy) {\n case 'price-low':\n filtered.sort((a: Product, b: Product) => a.price - b.price);\n break;\n case 'price-high':\n filtered.sort((a: Product, b: Product) => b.price - a.price);\n break;\n case 'rating':\n filtered.sort((a: Product, b: Product) => b.rating - a.rating);\n break;\n case 'newest':\n // Assuming newer products have higher IDs\n filtered.sort((a: Product, b: Product) => parseInt(b.id) - parseInt(a.id));\n break;\n case 'popular':\n filtered.sort((a: Product, b: Product) => b.reviewCount - a.reviewCount);\n break;\n default:\n // Keep original order for relevance\n break;\n }\n\n return filtered;\n }, [productsData, searchQuery, filters, sortBy]);\n\n // Paginate products\n const paginatedProducts = useMemo(() => {\n const startIndex = (currentPage - 1) * itemsPerPage;\n return filteredProducts.slice(startIndex, startIndex + itemsPerPage);\n }, [filteredProducts, currentPage]);\n\n const totalPages = Math.ceil(filteredProducts.length / itemsPerPage);\n\n const handleFilterChange = (filterType: keyof FilterOptions, value: any) => {\n const newFilters = {\n ...filters,\n [filterType]: value,\n };\n onFiltersChange(newFilters);\n setCurrentPage(1); // Reset to first page when filters change\n };\n\n const handleClearFilters = () => {\n onClearFilters();\n setCurrentPage(1);\n };\n\n const toggleWishlist = (productId: string) => {\n setWishlist(prev => {\n const newWishlist = new Set(prev);\n if (newWishlist.has(productId)) {\n newWishlist.delete(productId);\n showToast.info('Removed from wishlist');\n } else {\n newWishlist.add(productId);\n showToast.success('Added to wishlist');\n }\n return newWishlist;\n });\n };\n\n const handleAddToCart = (product: Product) => {\n onAddToCart?.(product);\n showToast.success(`${product.name} added to cart!`);\n };\n\n // Remove local ProductCard in favor of reusable ProductCard\n\n return (\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\">\n {/* Header */}\n <div className=\"flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between mb-8\">\n <div>\n <h1 className=\"text-3xl font-bold text-gray-900 mb-2\">All Products</h1>\n <p className=\"text-gray-600\">\n Showing {filteredProducts.length} of {productsData.length} products\n </p>\n </div>\n \n {/* Search and Controls */}\n <MarketplaceControls\n searchQuery={searchQuery}\n onSearchChange={setSearchQuery ? setSearchQuery : () => {}}\n shouldFocusSearch={shouldFocusSearch}\n sortBy={sortBy}\n onSortChange={setSortBy}\n viewMode={viewMode}\n onViewModeChange={setViewMode}\n onShowFilters={() => setShowFilters(true)}\n sortOptions={sortOptions}\n />\n </div>\n\n <div className=\"flex gap-8\">\n\n {/* Products Grid */}\n <div className=\"flex-1\">\n {paginatedProducts.length === 0 ? (\n <div className=\"text-center py-12\">\n <div className=\"text-gray-400 mb-4\">\n <Search className=\"h-16 w-16 mx-auto\" />\n </div>\n <h3 className=\"text-lg font-medium text-gray-900 mb-2\">No products found</h3>\n <p className=\"text-gray-600 mb-4\">\n Try adjusting your search or filter criteria\n </p>\n <Button variant=\"outline\" onClick={handleClearFilters}>\n Clear Filters\n </Button>\n </div>\n ) : (\n <>\n <div className={`grid gap-3 sm:gap-6 ${\n viewMode === 'grid'\n ? 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4'\n : 'grid-cols-1'\n }`}>\n {paginatedProducts.map((product: Product) => (\n <div className=\"w-full max-w-xs mx-auto sm:max-w-none\" key={product.id}>\n <ProductCard\n product={product}\n onProductClick={onProductClick}\n onAddToCart={handleAddToCart}\n onQuickView={() => setQuickViewProduct(product)}\n onToggleWishlist={toggleWishlist}\n isWishlisted={wishlist.has(product.id)}\n showQuickActions={true}\n />\n </div>\n ))}\n </div>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <div className=\"flex flex-wrap items-center justify-center gap-2 mt-8 sm:mt-12\">\n <Button\n variant=\"outline\"\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\n disabled={currentPage === 1}\n >\n Previous\n </Button>\n \n {Array.from({ length: Math.min(5, totalPages) }, (_, i) => {\n const page = i + 1;\n return (\n <Button\n key={page}\n variant={currentPage === page ? 'primary' : 'outline'}\n onClick={() => setCurrentPage(page)}\n >\n {page}\n </Button>\n );\n })}\n \n <Button\n variant=\"outline\"\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\n disabled={currentPage === totalPages}\n >\n Next\n </Button>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n\n {/* Mobile Filters Modal */}\n <Modal open={showFilters} onOpenChange={setShowFilters}>\n <ModalHeader>\n <ModalTitle>Filters</ModalTitle>\n </ModalHeader>\n <ModalContent>\n {/* Same filter content as sidebar but in modal */}\n <div className=\"space-y-6\">\n {/* Categories */}\n <div>\n <h4 className=\"font-medium text-gray-900 mb-3\">Categories</h4>\n <div className=\"space-y-2\">\n {(filterOptions.categories as string[]).map((category, idx) => (\n <label key={category} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.categories.includes(category)}\n onChange={(e) => {\n const alreadyChecked = filters.categories.includes(category);\n const newCategories = e.target.checked\n ? alreadyChecked\n ? filters.categories\n : [...filters.categories, category]\n : filters.categories.filter((c: string) => c !== category);\n handleFilterChange('categories', newCategories);\n }}\n />\n <span className=\"text-sm text-gray-700\">{category}</span>\n </label>\n ))}\n </div>\n </div>\n {/* Brands */}\n <div>\n <h4 className=\"font-medium text-gray-900 mb-3\">Brands</h4>\n <div className=\"space-y-2\">\n {(filterOptions.brands as string[]).map((brand, idx) => (\n <label key={brand} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.brands.includes(brand)}\n onChange={(e) => {\n const alreadyChecked = filters.brands.includes(brand);\n const newBrands = e.target.checked\n ? alreadyChecked\n ? filters.brands\n : [...filters.brands, brand]\n : filters.brands.filter((b: string) => b !== brand);\n handleFilterChange('brands', newBrands);\n }}\n />\n <span className=\"text-sm text-gray-700\">{brand}</span>\n </label>\n ))}\n </div>\n </div>\n {/* Vendors */}\n <div>\n <h4 className=\"font-medium text-gray-900 mb-3\">Vendors</h4>\n <div className=\"space-y-2\">\n {(filterOptions.vendors as string[]).map((vendor, idx) => (\n <label key={vendor} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.vendors.includes(vendor)}\n onChange={(e) => {\n const alreadyChecked = filters.vendors.includes(vendor);\n const newVendors = e.target.checked\n ? alreadyChecked\n ? filters.vendors\n : [...filters.vendors, vendor]\n : filters.vendors.filter((v: string) => v !== vendor);\n handleFilterChange('vendors', newVendors);\n }}\n />\n <span className=\"text-sm text-gray-700\">{vendor}</span>\n </label>\n ))}\n </div>\n </div>\n </div>\n </ModalContent>\n <ModalFooter>\n <Button variant=\"outline\" onClick={handleClearFilters}>\n Clear All\n </Button>\n <Button variant=\"primary\" onClick={() => setShowFilters(false)}>\n Apply Filters\n </Button>\n </ModalFooter>\n </Modal>\n\n {/* Quick View Modal */}\n <Modal open={!!quickViewProduct} onOpenChange={() => setQuickViewProduct(null)} size=\"lg\">\n {quickViewProduct && (\n <>\n <ModalHeader>\n <ModalTitle>{quickViewProduct.name}</ModalTitle>\n </ModalHeader>\n <ModalContent>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div className=\"aspect-square bg-gray-100 rounded-lg overflow-hidden\">\n <img\n src={quickViewProduct.images[0]}\n alt={quickViewProduct.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <div>\n <div className=\"flex items-center space-x-1 mb-2\">\n <Star className=\"h-4 w-4 text-yellow-400 fill-current\" />\n <span className=\"text-sm text-gray-600\">\n {quickViewProduct.rating} ({quickViewProduct.reviewCount} reviews)\n </span>\n </div>\n <div className=\"flex items-center space-x-2 mb-4\">\n <span className=\"text-2xl font-bold text-gray-900\">\n ${quickViewProduct.price.toFixed(2)}\n </span>\n {quickViewProduct.originalPrice && (\n <span className=\"text-lg text-gray-500 line-through\">\n ${quickViewProduct.originalPrice.toFixed(2)}\n </span>\n )}\n </div>\n <p className=\"text-gray-600 mb-4\">{quickViewProduct.description}</p>\n <Badge variant={quickViewProduct.inStock ? 'success' : 'danger'} className=\"mb-4\">\n {quickViewProduct.inStock ? 'In Stock' : 'Out of Stock'}\n </Badge>\n </div>\n </div>\n </ModalContent>\n <ModalFooter>\n <Button variant=\"outline\" onClick={() => onProductClick?.(quickViewProduct)}>\n View Details\n </Button>\n <Button \n variant=\"primary\" \n onClick={() => handleAddToCart(quickViewProduct)}\n disabled={!quickViewProduct.inStock}\n >\n <ShoppingCart className=\"mr-2 h-4 w-4\" />\n Add to Cart\n </Button>\n </ModalFooter>\n </>\n )}\n </Modal>\n </div>\n );\n};"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarketplaceComponent.js","sources":["../../../src/components/Marketplace/MarketplaceComponent.tsx"],"sourcesContent":["import React from 'react';\r\nimport { sampleProducts } from './data/sampleData';\r\nimport { MarketplaceHeader } from './components/MarketplaceHeader';\r\nimport { MarketplaceDashboard } from './components/MarketplaceDashboard';\r\nimport { MarketplaceSidebar } from './MarketplaceSidebar';\r\nimport { AllProductsView } from './AllProductsView';\r\nimport { SingleProductView } from './SingleProductView';\r\nimport { CheckoutCompact } from './CheckoutCompact';\r\nimport { CheckoutComponent } from './CheckoutComponent';\r\nimport { Modal } from '../Modal/Modal';\r\nimport { useMarketplaceState } from './hooks/useMarketplaceState';\r\nimport { useCart } from './hooks/useCart';\r\nimport { useProductNavigation } from './hooks/useProductNavigation';\r\nimport { useSearch } from './hooks/useSearch';\r\nimport { useBreakpoint } from '../../hooks/useBreakpoint';\r\nimport type { Product, CartItem, FilterOptions } from './types';\r\nimport { sanitizeProduct } from \"./utils/sanitizeProduct\";\r\n\r\n\r\nexport interface MarketplaceComponentProps {\r\n userRole?: 'buyer' | 'seller' | 'admin';\r\n products?: Product[];\r\n cartItems?: CartItem[];\r\n filters?: FilterOptions;\r\n onProductClick?: (product: Product) => void;\r\n onAddToCart?: (product: Product, quantity?: number) => void;\r\n onRemoveFromCart?: (productId: string) => void;\r\n onFiltersChange?: (filters: FilterOptions) => void;\r\n onClearFilters?: () => void;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Main marketplace component orchestrating all marketplace functionality\r\n * Refactored to use modular components and custom hooks for better maintainability\r\n */\r\nexport const MarketplaceComponent: React.FC<MarketplaceComponentProps> = ({\r\n userRole = 'buyer',\r\n products,\r\n cartItems: cartItemsProp,\r\n filters: filtersProp,\r\n onProductClick,\r\n onAddToCart,\r\n onRemoveFromCart,\r\n onFiltersChange,\r\n onClearFilters,\r\n className = '',\r\n}) => {\r\n // Responsive sidebar initial state (mobile = collapsed)\r\n const { currentBreakpoint, isBelow } = useBreakpoint();\r\n const [sidebarInitialized, setSidebarInitialized] = React.useState(false);\r\n\r\n // State management hook (fallbacks for backward compatibility)\r\n const {\r\n sidebarCollapsed,\r\n currentView,\r\n selectedProduct,\r\n searchQuery,\r\n cartItems: cartItemsState,\r\n showCheckout,\r\n filters: filtersState,\r\n setSidebarCollapsed,\r\n setCurrentView,\r\n setSelectedProduct,\r\n setSearchQuery,\r\n setCartItems,\r\n setShowCheckout,\r\n setFilters,\r\n toggleSidebar,\r\n clearCart,\r\n resetFilters,\r\n } = useMarketplaceState();\r\n\r\n // On mount, collapse sidebar if mobile and not already initialized\r\n React.useEffect(() => {\r\n if (!sidebarInitialized && isBelow('md')) {\r\n setSidebarCollapsed(true);\r\n setSidebarInitialized(true);\r\n } else if (!sidebarInitialized) {\r\n setSidebarInitialized(true);\r\n }\r\n }, [sidebarInitialized, isBelow, setSidebarCollapsed]);\r\n\r\n // State for full checkout modal\r\n const [showFullCheckoutModal, setShowFullCheckoutModal] = React.useState(false);\r\n\r\n // Use props if provided, otherwise fallback to internal state/sample data\r\n \r\n const rawProductsData: Product[] = products ?? sampleProducts;\r\n const productsData: Product[] = Array.isArray(rawProductsData)\r\n ? rawProductsData.map(sanitizeProduct)\r\n : [];\r\n const cartItems = cartItemsProp ?? cartItemsState;\r\n const filters = filtersProp ?? filtersState;\r\n\r\n // Cart management hook\r\n const {\r\n addToCart,\r\n removeFromCart,\r\n updateQuantity,\r\n getCartTotal,\r\n getCartItemCount,\r\n isInCart,\r\n getCartItem,\r\n } = useCart({ cartItems, setCartItems });\r\n\r\n // Navigation hook\r\n const {\r\n navigateToProduct,\r\n navigateToProducts,\r\n navigateToDashboard,\r\n navigateToCheckout,\r\n } = useProductNavigation({\r\n setSelectedProduct,\r\n setCurrentView,\r\n onProductClick,\r\n });\r\n\r\n // Search hook\r\n const {\r\n searchResults,\r\n isSearching,\r\n handleSearch,\r\n clearSearch,\r\n } = useSearch({\r\n products: productsData,\r\n searchQuery,\r\n setSearchQuery,\r\n setCurrentView,\r\n });\r\n\r\n // Derived data\r\n const featuredProducts = productsData.slice(0, 4);\r\n const trendingProducts = productsData.slice(4, 8);\r\n const recentlyViewed = productsData.slice(8, 12);\r\n const cartItemCount = getCartItemCount();\r\n\r\n // Event handlers\r\n const handleCartClick = () => {\r\n setShowCheckout(!showCheckout);\r\n };\r\n\r\n const handleCheckoutComplete = (items: any[]) => {\r\n clearCart();\r\n setShowCheckout(false);\r\n };\r\n\r\n const handleBuyNow = (product: Product, quantity: number) => {\r\n (onAddToCart ?? addToCart)(product, quantity);\r\n setShowCheckout(true);\r\n };\r\n\r\n // State for mobile sidebar modal\r\n const [showMobileSidebar, setShowMobileSidebar] = React.useState(false);\r\n\r\n return (\r\n <div className={`min-h-screen bg-gray-50 ${className}`}>\r\n {/* Header */}\r\n <MarketplaceHeader\r\n searchQuery={searchQuery}\r\n onSearchChange={handleSearch}\r\n cartItemCount={cartItemCount}\r\n onCartClick={handleCartClick}\r\n onMenuToggle={toggleSidebar}\r\n userRole={userRole}\r\n />\r\n\r\n {/* Floating Filters Button for Mobile (removed as per user feedback) */}\r\n\r\n {/* Mobile Sidebar Modal */}\r\n <Modal\r\n open={showMobileSidebar}\r\n onOpenChange={setShowMobileSidebar}\r\n size=\"full\"\r\n >\r\n <div className=\"h-full w-full bg-background overflow-y-auto p-4\">\r\n <MarketplaceSidebar\r\n filters={filters}\r\n onFiltersChange={onFiltersChange ?? setFilters}\r\n onClearFilters={onClearFilters ?? resetFilters}\r\n collapsed={false}\r\n onToggleCollapse={() => setShowMobileSidebar(false)}\r\n className=\"w-full max-w-md mx-auto\"\r\n />\r\n <div className=\"mt-6 flex justify-end gap-2\">\r\n <button\r\n className=\"px-4 py-2 rounded bg-secondary text-secondary-foreground\"\r\n onClick={() => {\r\n (onClearFilters ?? resetFilters)();\r\n }}\r\n >\r\n Clear All\r\n </button>\r\n <button\r\n className=\"px-4 py-2 rounded bg-primary text-primary-foreground\"\r\n onClick={() => setShowMobileSidebar(false)}\r\n >\r\n Apply Filters\r\n </button>\r\n </div>\r\n </div>\r\n </Modal>\r\n\r\n <div className={`w-full ${!isBelow('lg') ? 'flex' : ''}`}>\r\n {/* Sidebar: Only render on desktop/tablet */}\r\n {(!isBelow('lg') && (currentView === 'products' || currentView === 'dashboard')) && (\r\n <MarketplaceSidebar\r\n filters={filters}\r\n onFiltersChange={onFiltersChange ?? setFilters}\r\n onClearFilters={onClearFilters ?? resetFilters}\r\n collapsed={sidebarCollapsed}\r\n onToggleCollapse={toggleSidebar}\r\n />\r\n )}\r\n\r\n {/* Main Content: Always full width on mobile */}\r\n <main className={`relative p-6 ${isBelow('lg') ? 'w-full' : 'flex-1'}`}>\r\n {currentView === 'dashboard' && (\r\n <MarketplaceDashboard\r\n featuredProducts={featuredProducts}\r\n trendingProducts={trendingProducts}\r\n recentlyViewed={recentlyViewed}\r\n onProductClick={navigateToProduct}\r\n onAddToCart={onAddToCart ?? addToCart}\r\n onViewAllProducts={navigateToProducts}\r\n searchQuery={searchQuery}\r\n onSearch={handleSearch}\r\n setCurrentView={setCurrentView}\r\n />\r\n )}\r\n \r\n {currentView === 'products' && (\r\n <AllProductsView\r\n onProductClick={navigateToProduct}\r\n onAddToCart={onAddToCart ?? addToCart}\r\n products={productsData}\r\n filters={filters}\r\n searchQuery={searchQuery}\r\n setSearchQuery={setSearchQuery}\r\n onFiltersChange={setFilters}\r\n onClearFilters={resetFilters}\r\n />\r\n )}\r\n \r\n {currentView === 'product' && selectedProduct && (\r\n <SingleProductView\r\n product={\r\n (() => {\r\n const found = productsData.find((p: Product) => String(p.id).trim() === String(selectedProduct.id).trim());\r\n if (!found) {\r\n console.error(\r\n \"MarketplaceComponent: No product found for selectedProduct.id:\",\r\n selectedProduct.id,\r\n \"Available ids:\",\r\n productsData.map((p: Product) => p.id)\r\n );\r\n }\r\n return found;\r\n })()\r\n }\r\n onAddToCart={onAddToCart ?? addToCart}\r\n onBuyNow={handleBuyNow}\r\n />\r\n )}\r\n </main>\r\n\r\n {/* Checkout Sidebar */}\r\n {showCheckout && (\r\n <div className=\"fixed right-4 top-20 z-50\">\r\n <CheckoutCompact\r\n cartItems={cartItems}\r\n onClose={() => setShowCheckout(false)}\r\n onCheckout={handleCheckoutComplete}\r\n onViewFullCheckout={() => {\r\n setShowFullCheckoutModal(true);\r\n setShowCheckout(false);\r\n }}\r\n />\r\n </div>\r\n )}\r\n\r\n {/* Full Checkout Modal */}\r\n <Modal\r\n open={showFullCheckoutModal}\r\n onOpenChange={(open) => setShowFullCheckoutModal(open)}\r\n size=\"xl\"\r\n >\r\n <CheckoutComponent\r\n cartItems={cartItems}\r\n onOrderComplete={() => {\r\n clearCart();\r\n setShowFullCheckoutModal(false);\r\n }}\r\n />\r\n </Modal>\r\n </div>\r\n </div>\r\n );\r\n};"],"names":["React","_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"MarketplaceComponent.js","sources":["../../../src/components/Marketplace/MarketplaceComponent.tsx"],"sourcesContent":["import React from 'react';\nimport { sampleProducts } from './data/sampleData';\nimport { MarketplaceHeader } from './components/MarketplaceHeader';\nimport { MarketplaceDashboard } from './components/MarketplaceDashboard';\nimport { MarketplaceSidebar } from './MarketplaceSidebar';\nimport { AllProductsView } from './AllProductsView';\nimport { SingleProductView } from './SingleProductView';\nimport { CheckoutCompact } from './CheckoutCompact';\nimport { CheckoutComponent } from './CheckoutComponent';\nimport { Modal } from '../Modal/Modal';\nimport { useMarketplaceState } from './hooks/useMarketplaceState';\nimport { useCart } from './hooks/useCart';\nimport { useProductNavigation } from './hooks/useProductNavigation';\nimport { useSearch } from './hooks/useSearch';\nimport { useBreakpoint } from '../../hooks/useBreakpoint';\nimport type { Product, CartItem, FilterOptions } from './types';\nimport { sanitizeProduct } from \"./utils/sanitizeProduct\";\n\n\nexport interface MarketplaceComponentProps {\n userRole?: 'buyer' | 'seller' | 'admin';\n products?: Product[];\n cartItems?: CartItem[];\n filters?: FilterOptions;\n onProductClick?: (product: Product) => void;\n onAddToCart?: (product: Product, quantity?: number) => void;\n onRemoveFromCart?: (productId: string) => void;\n onFiltersChange?: (filters: FilterOptions) => void;\n onClearFilters?: () => void;\n className?: string;\n}\n\n/**\n * Main marketplace component orchestrating all marketplace functionality\n * Refactored to use modular components and custom hooks for better maintainability\n */\nexport const MarketplaceComponent: React.FC<MarketplaceComponentProps> = ({\n userRole = 'buyer',\n products,\n cartItems: cartItemsProp,\n filters: filtersProp,\n onProductClick,\n onAddToCart,\n onRemoveFromCart,\n onFiltersChange,\n onClearFilters,\n className = '',\n}) => {\n // Responsive sidebar initial state (mobile = collapsed)\n const { currentBreakpoint, isBelow } = useBreakpoint();\n const [sidebarInitialized, setSidebarInitialized] = React.useState(false);\n\n // State management hook (fallbacks for backward compatibility)\n const {\n sidebarCollapsed,\n currentView,\n selectedProduct,\n searchQuery,\n cartItems: cartItemsState,\n showCheckout,\n filters: filtersState,\n setSidebarCollapsed,\n setCurrentView,\n setSelectedProduct,\n setSearchQuery,\n setCartItems,\n setShowCheckout,\n setFilters,\n toggleSidebar,\n clearCart,\n resetFilters,\n } = useMarketplaceState();\n\n // On mount, collapse sidebar if mobile and not already initialized\n React.useEffect(() => {\n if (!sidebarInitialized && isBelow('md')) {\n setSidebarCollapsed(true);\n setSidebarInitialized(true);\n } else if (!sidebarInitialized) {\n setSidebarInitialized(true);\n }\n }, [sidebarInitialized, isBelow, setSidebarCollapsed]);\n\n // State for full checkout modal\n const [showFullCheckoutModal, setShowFullCheckoutModal] = React.useState(false);\n\n // Use props if provided, otherwise fallback to internal state/sample data\n \n const rawProductsData: Product[] = products ?? sampleProducts;\n const productsData: Product[] = Array.isArray(rawProductsData)\n ? rawProductsData.map(sanitizeProduct)\n : [];\n const cartItems = cartItemsProp ?? cartItemsState;\n const filters = filtersProp ?? filtersState;\n\n // Cart management hook\n const {\n addToCart,\n removeFromCart,\n updateQuantity,\n getCartTotal,\n getCartItemCount,\n isInCart,\n getCartItem,\n } = useCart({ cartItems, setCartItems });\n\n // Navigation hook\n const {\n navigateToProduct,\n navigateToProducts,\n navigateToDashboard,\n navigateToCheckout,\n } = useProductNavigation({\n setSelectedProduct,\n setCurrentView,\n onProductClick,\n });\n\n // Search hook\n const {\n searchResults,\n isSearching,\n handleSearch,\n clearSearch,\n } = useSearch({\n products: productsData,\n searchQuery,\n setSearchQuery,\n setCurrentView,\n });\n\n // Derived data\n const featuredProducts = productsData.slice(0, 4);\n const trendingProducts = productsData.slice(4, 8);\n const recentlyViewed = productsData.slice(8, 12);\n const cartItemCount = getCartItemCount();\n\n // Event handlers\n const handleCartClick = () => {\n setShowCheckout(!showCheckout);\n };\n\n const handleCheckoutComplete = (items: any[]) => {\n clearCart();\n setShowCheckout(false);\n };\n\n const handleBuyNow = (product: Product, quantity: number) => {\n (onAddToCart ?? addToCart)(product, quantity);\n setShowCheckout(true);\n };\n\n // State for mobile sidebar modal\n const [showMobileSidebar, setShowMobileSidebar] = React.useState(false);\n\n return (\n <div className={`min-h-screen bg-gray-50 ${className}`}>\n {/* Header */}\n <MarketplaceHeader\n searchQuery={searchQuery}\n onSearchChange={handleSearch}\n cartItemCount={cartItemCount}\n onCartClick={handleCartClick}\n onMenuToggle={toggleSidebar}\n userRole={userRole}\n />\n\n {/* Floating Filters Button for Mobile (removed as per user feedback) */}\n\n {/* Mobile Sidebar Modal */}\n <Modal\n open={showMobileSidebar}\n onOpenChange={setShowMobileSidebar}\n size=\"full\"\n >\n <div className=\"h-full w-full bg-background overflow-y-auto p-4\">\n <MarketplaceSidebar\n filters={filters}\n onFiltersChange={onFiltersChange ?? setFilters}\n onClearFilters={onClearFilters ?? resetFilters}\n collapsed={false}\n onToggleCollapse={() => setShowMobileSidebar(false)}\n className=\"w-full max-w-md mx-auto\"\n />\n <div className=\"mt-6 flex justify-end gap-2\">\n <button\n className=\"px-4 py-2 rounded bg-secondary text-secondary-foreground\"\n onClick={() => {\n (onClearFilters ?? resetFilters)();\n }}\n >\n Clear All\n </button>\n <button\n className=\"px-4 py-2 rounded bg-primary text-primary-foreground\"\n onClick={() => setShowMobileSidebar(false)}\n >\n Apply Filters\n </button>\n </div>\n </div>\n </Modal>\n\n <div className={`w-full ${!isBelow('lg') ? 'flex' : ''}`}>\n {/* Sidebar: Only render on desktop/tablet */}\n {(!isBelow('lg') && (currentView === 'products' || currentView === 'dashboard')) && (\n <MarketplaceSidebar\n filters={filters}\n onFiltersChange={onFiltersChange ?? setFilters}\n onClearFilters={onClearFilters ?? resetFilters}\n collapsed={sidebarCollapsed}\n onToggleCollapse={toggleSidebar}\n />\n )}\n\n {/* Main Content: Always full width on mobile */}\n <main className={`relative p-6 ${isBelow('lg') ? 'w-full' : 'flex-1'}`}>\n {currentView === 'dashboard' && (\n <MarketplaceDashboard\n featuredProducts={featuredProducts}\n trendingProducts={trendingProducts}\n recentlyViewed={recentlyViewed}\n onProductClick={navigateToProduct}\n onAddToCart={onAddToCart ?? addToCart}\n onViewAllProducts={navigateToProducts}\n searchQuery={searchQuery}\n onSearch={handleSearch}\n setCurrentView={setCurrentView}\n />\n )}\n \n {currentView === 'products' && (\n <AllProductsView\n onProductClick={navigateToProduct}\n onAddToCart={onAddToCart ?? addToCart}\n products={productsData}\n filters={filters}\n searchQuery={searchQuery}\n setSearchQuery={setSearchQuery}\n onFiltersChange={setFilters}\n onClearFilters={resetFilters}\n />\n )}\n \n {currentView === 'product' && selectedProduct && (\n <SingleProductView\n product={\n (() => {\n const found = productsData.find((p: Product) => String(p.id).trim() === String(selectedProduct.id).trim());\n if (!found) {\n console.error(\n \"MarketplaceComponent: No product found for selectedProduct.id:\",\n selectedProduct.id,\n \"Available ids:\",\n productsData.map((p: Product) => p.id)\n );\n }\n return found;\n })()\n }\n onAddToCart={onAddToCart ?? addToCart}\n onBuyNow={handleBuyNow}\n />\n )}\n </main>\n\n {/* Checkout Sidebar */}\n {showCheckout && (\n <div className=\"fixed right-4 top-20 z-50\">\n <CheckoutCompact\n cartItems={cartItems}\n onClose={() => setShowCheckout(false)}\n onCheckout={handleCheckoutComplete}\n onViewFullCheckout={() => {\n setShowFullCheckoutModal(true);\n setShowCheckout(false);\n }}\n />\n </div>\n )}\n\n {/* Full Checkout Modal */}\n <Modal\n open={showFullCheckoutModal}\n onOpenChange={(open) => setShowFullCheckoutModal(open)}\n size=\"xl\"\n >\n <CheckoutComponent\n cartItems={cartItems}\n onOrderComplete={() => {\n clearCart();\n setShowFullCheckoutModal(false);\n }}\n />\n </Modal>\n </div>\n </div>\n );\n};"],"names":["React","_jsxs","_jsx"],"mappings":"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"}