@beyondcorp/beyond-ui 1.2.51 → 1.2.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/dist/components/Blog/AllBlogsView.d.ts +8 -0
  2. package/dist/components/Blog/AllBlogsView.js +70 -0
  3. package/dist/components/Blog/AllBlogsView.js.map +1 -0
  4. package/dist/components/Blog/BlogCommentSection.d.ts +7 -0
  5. package/dist/components/Blog/BlogCommentSection.js +66 -0
  6. package/dist/components/Blog/BlogCommentSection.js.map +1 -0
  7. package/dist/components/Blog/BlogLayout.d.ts +11 -0
  8. package/dist/components/Blog/BlogLayout.js +29 -0
  9. package/dist/components/Blog/BlogLayout.js.map +1 -0
  10. package/dist/components/Blog/BlogShowcase.d.ts +2 -0
  11. package/dist/components/Blog/BlogShowcase.js +74 -0
  12. package/dist/components/Blog/BlogShowcase.js.map +1 -0
  13. package/dist/components/Blog/BlogSidebar.d.ts +10 -0
  14. package/dist/components/Blog/BlogSidebar.js +47 -0
  15. package/dist/components/Blog/BlogSidebar.js.map +1 -0
  16. package/dist/components/Blog/SingleBlogView.d.ts +8 -0
  17. package/dist/components/Blog/SingleBlogView.js +78 -0
  18. package/dist/components/Blog/SingleBlogView.js.map +1 -0
  19. package/dist/components/Blog/data/sampleData.d.ts +4 -0
  20. package/dist/components/Blog/data/sampleData.js +388 -0
  21. package/dist/components/Blog/data/sampleData.js.map +1 -0
  22. package/dist/components/Blog/hooks/index.d.ts +3 -0
  23. package/dist/components/Blog/hooks/useBlog.d.ts +22 -0
  24. package/dist/components/Blog/hooks/useBlog.js +148 -0
  25. package/dist/components/Blog/hooks/useBlog.js.map +1 -0
  26. package/dist/components/Blog/hooks/useBlogNavigation.d.ts +12 -0
  27. package/dist/components/Blog/hooks/useBlogNavigation.js +75 -0
  28. package/dist/components/Blog/hooks/useBlogNavigation.js.map +1 -0
  29. package/dist/components/Blog/hooks/useComments.d.ts +20 -0
  30. package/dist/components/Blog/hooks/useComments.js +108 -0
  31. package/dist/components/Blog/hooks/useComments.js.map +1 -0
  32. package/dist/components/Blog/index.d.ts +8 -0
  33. package/dist/components/Blog/types.d.ts +82 -0
  34. package/dist/components/CodeHighlight/CodeHighlight.d.ts +7 -0
  35. package/dist/components/CodeHighlight/CodeHighlight.js +18 -0
  36. package/dist/components/CodeHighlight/CodeHighlight.js.map +1 -0
  37. package/dist/components/CodeHighlight/index.d.ts +1 -0
  38. package/dist/components/Marketplace/AllProductsView.d.ts +6 -1
  39. package/dist/components/Marketplace/AllProductsView.js +42 -65
  40. package/dist/components/Marketplace/AllProductsView.js.map +1 -1
  41. package/dist/components/Marketplace/CheckoutCompact.d.ts +1 -0
  42. package/dist/components/Marketplace/CheckoutCompact.js +3 -3
  43. package/dist/components/Marketplace/CheckoutCompact.js.map +1 -1
  44. package/dist/components/Marketplace/CheckoutComponent.js +1 -1
  45. package/dist/components/Marketplace/CheckoutComponent.js.map +1 -1
  46. package/dist/components/Marketplace/MarketplaceComponent.js +31 -2
  47. package/dist/components/Marketplace/MarketplaceComponent.js.map +1 -1
  48. package/dist/components/Marketplace/MarketplaceSidebar.js +32 -32
  49. package/dist/components/Marketplace/MarketplaceSidebar.js.map +1 -1
  50. package/dist/components/Marketplace/SingleProductView.js +3 -0
  51. package/dist/components/Marketplace/SingleProductView.js.map +1 -1
  52. package/dist/components/Marketplace/components/MarketplaceControls.d.ts +17 -0
  53. package/dist/components/Marketplace/components/MarketplaceControls.js +22 -0
  54. package/dist/components/Marketplace/components/MarketplaceControls.js.map +1 -0
  55. package/dist/components/Marketplace/components/MarketplaceDashboard.d.ts +3 -0
  56. package/dist/components/Marketplace/components/MarketplaceDashboard.js +20 -10
  57. package/dist/components/Marketplace/components/MarketplaceDashboard.js.map +1 -1
  58. package/dist/components/Marketplace/components/MarketplaceHeader.js +2 -3
  59. package/dist/components/Marketplace/components/MarketplaceHeader.js.map +1 -1
  60. package/dist/components/Marketplace/components/ProductCard.js +9 -2
  61. package/dist/components/Marketplace/components/ProductCard.js.map +1 -1
  62. package/dist/components/Marketplace/hooks/useScrollToTop.d.ts +10 -0
  63. package/dist/components/Marketplace/hooks/useScrollToTop.js +22 -0
  64. package/dist/components/Marketplace/hooks/useScrollToTop.js.map +1 -0
  65. package/dist/index.d.ts +2 -4
  66. package/dist/index.js +10 -4
  67. package/dist/styles.css +1 -1
  68. package/package.json +6 -1
  69. package/dist/components/AllProductsView/AllProductsView.d.ts +0 -14
  70. package/dist/components/AllProductsView/AllProductsView.js +0 -61
  71. package/dist/components/AllProductsView/AllProductsView.js.map +0 -1
  72. package/dist/components/AllProductsView/CardGroup.d.ts +0 -6
  73. package/dist/components/AllProductsView/CardGroup.js +0 -11
  74. package/dist/components/AllProductsView/CardGroup.js.map +0 -1
  75. package/dist/components/AllProductsView/ProductCard.d.ts +0 -11
  76. package/dist/components/AllProductsView/ProductCard.js +0 -13
  77. package/dist/components/AllProductsView/ProductCard.js.map +0 -1
  78. package/dist/components/AllProductsView/index.d.ts +0 -2
  79. package/dist/components/BlogFeedView/BlogFeedView.d.ts +0 -22
  80. package/dist/components/BlogFeedView/BlogFeedView.js +0 -29
  81. package/dist/components/BlogFeedView/BlogFeedView.js.map +0 -1
  82. package/dist/components/BlogFeedView/index.d.ts +0 -1
  83. package/dist/components/BlogLayout/BlogLayout.d.ts +0 -13
  84. package/dist/components/BlogLayout/BlogLayout.js +0 -20
  85. package/dist/components/BlogLayout/BlogLayout.js.map +0 -1
  86. package/dist/components/BlogLayout/index.d.ts +0 -1
  87. package/dist/components/BlogSidebar/BlogSidebar.d.ts +0 -19
  88. package/dist/components/BlogSidebar/BlogSidebar.js +0 -10
  89. package/dist/components/BlogSidebar/BlogSidebar.js.map +0 -1
  90. package/dist/components/BlogSidebar/index.d.ts +0 -1
  91. package/dist/components/Checkout/CheckoutPage.d.ts +0 -16
  92. package/dist/components/Checkout/CheckoutPage.js +0 -44
  93. package/dist/components/Checkout/CheckoutPage.js.map +0 -1
  94. package/dist/components/Checkout/CheckoutSidebar.d.ts +0 -15
  95. package/dist/components/Checkout/CheckoutSidebar.js +0 -25
  96. package/dist/components/Checkout/CheckoutSidebar.js.map +0 -1
  97. package/dist/components/Checkout/index.d.ts +0 -3
  98. package/dist/components/Checkout/types.d.ts +0 -21
  99. package/dist/components/CommerceSidebar/CommerceSidebar.d.ts +0 -20
  100. package/dist/components/CommerceSidebar/CommerceSidebar.js +0 -14
  101. package/dist/components/CommerceSidebar/CommerceSidebar.js.map +0 -1
  102. package/dist/components/CommerceSidebar/index.d.ts +0 -1
  103. package/dist/components/MarketplaceLayout/MarketplaceLayout.d.ts +0 -17
  104. package/dist/components/MarketplaceLayout/MarketplaceLayout.js +0 -22
  105. package/dist/components/MarketplaceLayout/MarketplaceLayout.js.map +0 -1
  106. package/dist/components/MarketplaceLayout/index.d.ts +0 -1
  107. package/dist/components/ProfileManagement/ProfileManagementPage.d.ts +0 -16
  108. package/dist/components/ProfileManagement/ProfileManagementPage.js +0 -65
  109. package/dist/components/ProfileManagement/ProfileManagementPage.js.map +0 -1
  110. package/dist/components/SingleBlogView/SingleBlogView.d.ts +0 -26
  111. package/dist/components/SingleBlogView/SingleBlogView.js +0 -17
  112. package/dist/components/SingleBlogView/SingleBlogView.js.map +0 -1
  113. package/dist/components/SingleBlogView/index.d.ts +0 -1
  114. package/dist/components/SingleProductView/SingleProductView.d.ts +0 -31
  115. package/dist/components/SingleProductView/SingleProductView.js +0 -34
  116. package/dist/components/SingleProductView/SingleProductView.js.map +0 -1
  117. package/dist/components/SingleProductView/index.d.ts +0 -1
@@ -1,20 +0,0 @@
1
- import React from 'react';
2
- export interface CommerceSidebarProduct {
3
- id: string;
4
- name: string;
5
- image?: string;
6
- price: number;
7
- oldPrice?: number;
8
- discount?: string;
9
- inStock: boolean;
10
- categories?: string[];
11
- href?: string;
12
- }
13
- export interface CommerceSidebarProps {
14
- products: CommerceSidebarProduct[];
15
- title?: string;
16
- onProductClick?: (id: string) => void;
17
- onAddToCart?: (id: string) => void;
18
- className?: string;
19
- }
20
- export declare const CommerceSidebar: React.FC<CommerceSidebarProps>;
@@ -1,14 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { Card, CardHeader, CardTitle, CardContent } from '../Card/Card.js';
3
- import { Badge } from '../Badge/Badge.js';
4
- import { Avatar, AvatarImage, AvatarFallback } from '../Avatar/Avatar.js';
5
- import { Button } from '../Button/Button.js';
6
- import { cn } from '../../utils/cn.js';
7
-
8
- const CommerceSidebar = ({ products, title = 'Featured Products', onProductClick, onAddToCart, className, }) => (jsxs(Card, { className: cn('space-y-4', className), children: [jsx(CardHeader, { children: jsx(CardTitle, { children: title }) }), jsx(CardContent, { children: jsx("div", { className: "space-y-4", children: products.length === 0 ? (jsx("div", { className: "text-gray-500 text-center py-4", children: "No products found." })) : (products.map((product) => (jsxs("div", { className: "flex items-center space-x-3 cursor-pointer hover:bg-primary-50 rounded px-2 py-2 transition", onClick: () => onProductClick && onProductClick(product.id), children: [jsx(Avatar, { size: "sm", children: product.image ? (jsx(AvatarImage, { src: product.image })) : (jsx(AvatarFallback, { children: product.name ? product.name[0] : 'P' })) }), jsxs("div", { className: "flex-1 min-w-0", children: [jsx("div", { className: "font-medium text-gray-900 truncate", children: product.name }), jsxs("div", { className: "flex items-center space-x-2 text-xs text-gray-500", children: [jsx("span", { className: product.inStock ? 'text-success-600' : 'text-danger-600', children: product.inStock ? 'In Stock' : 'Out of Stock' }), product.discount && (jsx(Badge, { variant: "danger", children: product.discount }))] }), jsxs("div", { className: "flex items-center space-x-2 text-xs mt-1", children: [jsxs("span", { className: "font-bold text-primary-700", children: ["$", product.price.toFixed(2)] }), product.oldPrice && (jsxs("span", { className: "line-through text-gray-400", children: ["$", product.oldPrice.toFixed(2)] }))] }), product.categories && (jsx("div", { className: "flex flex-wrap gap-1 mt-1", children: product.categories.map((cat) => (jsx(Badge, { variant: "outline", className: "text-xs", children: cat }, cat))) }))] }), jsx(Button, { variant: "primary", size: "sm", onClick: e => {
9
- e.stopPropagation();
10
- onAddToCart && onAddToCart(product.id);
11
- }, disabled: !product.inStock, "aria-label": "Add to cart", children: "+" })] }, product.id)))) }) })] }));
12
-
13
- export { CommerceSidebar };
14
- //# sourceMappingURL=CommerceSidebar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommerceSidebar.js","sources":["../../../src/components/CommerceSidebar/CommerceSidebar.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Card, CardHeader, CardTitle, CardContent } from '../Card';\r\nimport { Badge } from '../Badge';\r\nimport { Avatar, AvatarImage, AvatarFallback } from '../Avatar';\r\nimport { Button } from '../Button';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface CommerceSidebarProduct {\r\n id: string;\r\n name: string;\r\n image?: string;\r\n price: number;\r\n oldPrice?: number;\r\n discount?: string;\r\n inStock: boolean;\r\n categories?: string[];\r\n href?: string;\r\n}\r\n\r\nexport interface CommerceSidebarProps {\r\n products: CommerceSidebarProduct[];\r\n title?: string;\r\n onProductClick?: (id: string) => void;\r\n onAddToCart?: (id: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport const CommerceSidebar: React.FC<CommerceSidebarProps> = ({\r\n products,\r\n title = 'Featured Products',\r\n onProductClick,\r\n onAddToCart,\r\n className,\r\n}) => (\r\n <Card className={cn('space-y-4', className)}>\r\n <CardHeader>\r\n <CardTitle>{title}</CardTitle>\r\n </CardHeader>\r\n <CardContent>\r\n <div className=\"space-y-4\">\r\n {products.length === 0 ? (\r\n <div className=\"text-gray-500 text-center py-4\">No products found.</div>\r\n ) : (\r\n products.map((product) => (\r\n <div\r\n key={product.id}\r\n className=\"flex items-center space-x-3 cursor-pointer hover:bg-primary-50 rounded px-2 py-2 transition\"\r\n onClick={() => onProductClick && onProductClick(product.id)}\r\n >\r\n <Avatar size=\"sm\">\r\n {product.image ? (\r\n <AvatarImage src={product.image} />\r\n ) : (\r\n <AvatarFallback>\r\n {product.name ? product.name[0] : 'P'}\r\n </AvatarFallback>\r\n )}\r\n </Avatar>\r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"font-medium text-gray-900 truncate\">{product.name}</div>\r\n <div className=\"flex items-center space-x-2 text-xs text-gray-500\">\r\n <span className={product.inStock ? 'text-success-600' : 'text-danger-600'}>\r\n {product.inStock ? 'In Stock' : 'Out of Stock'}\r\n </span>\r\n {product.discount && (\r\n <Badge variant=\"danger\">{product.discount}</Badge>\r\n )}\r\n </div>\r\n <div className=\"flex items-center space-x-2 text-xs mt-1\">\r\n <span className=\"font-bold text-primary-700\">${product.price.toFixed(2)}</span>\r\n {product.oldPrice && (\r\n <span className=\"line-through text-gray-400\">${product.oldPrice.toFixed(2)}</span>\r\n )}\r\n </div>\r\n {product.categories && (\r\n <div className=\"flex flex-wrap gap-1 mt-1\">\r\n {product.categories.map((cat) => (\r\n <Badge key={cat} variant=\"outline\" className=\"text-xs\">\r\n {cat}\r\n </Badge>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n <Button\r\n variant=\"primary\"\r\n size=\"sm\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n onAddToCart && onAddToCart(product.id);\r\n }}\r\n disabled={!product.inStock}\r\n aria-label=\"Add to cart\"\r\n >\r\n +\r\n </Button>\r\n </div>\r\n ))\r\n )}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n);"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -1 +0,0 @@
1
- export * from './CommerceSidebar';
@@ -1,17 +0,0 @@
1
- import React from 'react';
2
- import type { CartItem } from '../Checkout/types';
3
- import type { ProductData } from '../SingleProductView/SingleProductView';
4
- export interface MarketplaceLayoutProps {
5
- products: ProductData[];
6
- cartItems: CartItem[];
7
- cartOpen?: boolean;
8
- onCartOpenChange?: (open: boolean) => void;
9
- onProductClick?: (id: string) => void;
10
- onAddToCart?: (id: string) => void;
11
- onRemoveFromCart?: (id: string) => void;
12
- onProceedToCheckout?: () => void;
13
- selectedProduct?: ProductData | null;
14
- children?: React.ReactNode;
15
- className?: string;
16
- }
17
- export declare const MarketplaceLayout: React.FC<MarketplaceLayoutProps>;
@@ -1,22 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { PageLayout, PageHeader, PageLayoutContent, PageSidebar } from '../PageLayout/PageLayout.js';
3
- import '../Button/Button.js';
4
- import '../Card/Card.js';
5
- import '../Badge/Badge.js';
6
- import '../Input/Input.js';
7
- import '../Avatar/Avatar.js';
8
- import 'lucide-react';
9
- import 'react';
10
- import '../Tabs/Tabs.js';
11
- import '../Toast/Toast.js';
12
- import { CommerceSidebar } from '../CommerceSidebar/CommerceSidebar.js';
13
- import { AllProductsView } from '../AllProductsView/AllProductsView.js';
14
- import { CheckoutSidebar } from '../Checkout/CheckoutSidebar.js';
15
- import { cn } from '../../utils/cn.js';
16
-
17
- const MarketplaceLayout = ({ products, cartItems, cartOpen, onCartOpenChange, onProductClick, onAddToCart, onRemoveFromCart, onProceedToCheckout, selectedProduct, children, className, }) => {
18
- return (jsxs(PageLayout, { variant: "centered", maxWidth: "xl", className: cn(className), children: [jsx(PageHeader, { children: jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex items-center h-16", children: jsx("span", { className: "font-bold text-xl", children: "Marketplace" }) }) }), jsxs(PageLayoutContent, { layout: "sidebar", spacing: "lg", children: [!selectedProduct && (jsx(PageSidebar, { position: "left", width: "md", children: jsx(CommerceSidebar, { products: products, onProductClick: onProductClick, onAddToCart: onAddToCart }) })), jsx("main", { className: "flex-1", children: children ? (children) : (jsx(AllProductsView, { products: products, onProductClick: onProductClick, onAddToCart: onAddToCart })) }), jsx(PageSidebar, { position: "right", width: "md", children: jsx(CheckoutSidebar, { cartItems: cartItems, open: typeof cartOpen === 'boolean' ? cartOpen : true, onOpenChange: onCartOpenChange || (() => { }), onRemoveItem: onRemoveFromCart, onProceedToCheckout: onProceedToCheckout }) })] })] }));
19
- };
20
-
21
- export { MarketplaceLayout };
22
- //# sourceMappingURL=MarketplaceLayout.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarketplaceLayout.js","sources":["../../../src/components/MarketplaceLayout/MarketplaceLayout.tsx"],"sourcesContent":["import React from 'react';\r\nimport {\r\n PageLayout,\r\n PageHeader,\r\n PageLayoutContent,\r\n PageSidebar,\r\n} from '../PageLayout';\r\nimport { CommerceSidebar } from '../CommerceSidebar/CommerceSidebar';\r\nimport { AllProductsView } from '../AllProductsView/AllProductsView';\r\nimport { CheckoutSidebar } from '../Checkout/CheckoutSidebar';\r\nimport type { CartItem } from '../Checkout/types';\r\nimport type { ProductData } from '../SingleProductView/SingleProductView';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface MarketplaceLayoutProps {\r\n products: ProductData[];\r\n cartItems: CartItem[];\r\n cartOpen?: boolean;\r\n onCartOpenChange?: (open: boolean) => void;\r\n onProductClick?: (id: string) => void;\r\n onAddToCart?: (id: string) => void;\r\n onRemoveFromCart?: (id: string) => void;\r\n onProceedToCheckout?: () => void;\r\n selectedProduct?: ProductData | null;\r\n children?: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const MarketplaceLayout: React.FC<MarketplaceLayoutProps> = ({\r\n products,\r\n cartItems,\r\n cartOpen,\r\n onCartOpenChange,\r\n onProductClick,\r\n onAddToCart,\r\n onRemoveFromCart,\r\n onProceedToCheckout,\r\n selectedProduct,\r\n children,\r\n className,\r\n}) => {\r\n return (\r\n <PageLayout variant=\"centered\" maxWidth=\"xl\" className={cn(className)}>\r\n <PageHeader>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex items-center h-16\">\r\n <span className=\"font-bold text-xl\">Marketplace</span>\r\n </div>\r\n </PageHeader>\r\n <PageLayoutContent layout=\"sidebar\" spacing=\"lg\">\r\n {!selectedProduct && (\r\n <PageSidebar position=\"left\" width=\"md\">\r\n <CommerceSidebar\r\n products={products}\r\n onProductClick={onProductClick}\r\n onAddToCart={onAddToCart}\r\n />\r\n </PageSidebar>\r\n )}\r\n <main className=\"flex-1\">\r\n {children ? (\r\n children\r\n ) : (\r\n <AllProductsView\r\n products={products}\r\n onProductClick={onProductClick}\r\n onAddToCart={onAddToCart}\r\n />\r\n )}\r\n </main>\r\n <PageSidebar position=\"right\" width=\"md\">\r\n <CheckoutSidebar\r\n cartItems={cartItems}\r\n open={typeof cartOpen === 'boolean' ? cartOpen : true}\r\n onOpenChange={onCartOpenChange || (() => {})}\r\n onRemoveItem={onRemoveFromCart}\r\n onProceedToCheckout={onProceedToCheckout}\r\n />\r\n </PageSidebar>\r\n </PageLayoutContent>\r\n </PageLayout>\r\n );\r\n};"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;;;;AA4BO,MAAM,iBAAiB,GAAqC,CAAC,EAClE,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,QAAQ,EACR,SAAS,GACV,KAAI;AACH,IAAA,QACEA,IAAA,CAAC,UAAU,EAAA,EAAC,OAAO,EAAC,UAAU,EAAC,QAAQ,EAAC,IAAI,EAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAA,QAAA,EAAA,CACnEC,GAAA,CAAC,UAAU,cACTA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+DAA+D,EAAA,QAAA,EAC5EA,cAAM,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,CAAmB,GAClD,EAAA,CACK,EACbD,KAAC,iBAAiB,EAAA,EAAC,MAAM,EAAC,SAAS,EAAC,OAAO,EAAC,IAAI,EAAA,QAAA,EAAA,CAC7C,CAAC,eAAe,KACfC,GAAA,CAAC,WAAW,EAAA,EAAC,QAAQ,EAAC,MAAM,EAAC,KAAK,EAAC,IAAI,EAAA,QAAA,EACrCA,GAAA,CAAC,eAAe,EAAA,EACd,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,GACxB,EAAA,CACU,CACf,EACDA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,QAAQ,EAAA,QAAA,EACrB,QAAQ,IACP,QAAQ,KAERA,GAAA,CAAC,eAAe,EAAA,EACd,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EAAA,CACxB,CACH,EAAA,CACI,EACPA,IAAC,WAAW,EAAA,EAAC,QAAQ,EAAC,OAAO,EAAC,KAAK,EAAC,IAAI,EAAA,QAAA,EACtCA,IAAC,eAAe,EAAA,EACd,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,OAAO,QAAQ,KAAK,SAAS,GAAG,QAAQ,GAAG,IAAI,EACrD,YAAY,EAAE,gBAAgB,KAAK,MAAK,EAAE,CAAC,CAAC,EAC5C,YAAY,EAAE,gBAAgB,EAC9B,mBAAmB,EAAE,mBAAmB,EAAA,CACxC,GACU,CAAA,EAAA,CACI,CAAA,EAAA,CACT;AAEjB;;;;"}
@@ -1 +0,0 @@
1
- export * from './MarketplaceLayout';
@@ -1,16 +0,0 @@
1
- import * as React from "react";
2
- export interface ProfileManagementPageProps {
3
- user?: {
4
- name?: string;
5
- email?: string;
6
- avatarUrl?: string;
7
- };
8
- onUpdate?: (data: {
9
- name: string;
10
- email: string;
11
- avatarUrl?: string;
12
- }) => void;
13
- avatarUploadHandler?: (file: File) => Promise<string>;
14
- themeOverrides?: Record<string, any>;
15
- }
16
- export declare const ProfileManagementPage: React.FC<ProfileManagementPageProps>;
@@ -1,65 +0,0 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import * as React from 'react';
3
- import { Card } from '../Card/Card.js';
4
- import { Avatar, AvatarImage, AvatarFallback } from '../Avatar/Avatar.js';
5
- import { Input } from '../Input/Input.js';
6
- import { Button } from '../Button/Button.js';
7
- import { useAuth } from '../../contexts/AuthContext.js';
8
-
9
- const ProfileManagementPage = ({ user: userProp, onUpdate, avatarUploadHandler, themeOverrides, }) => {
10
- // Context-aware fallback
11
- let contextUser;
12
- try {
13
- const context = useAuth();
14
- contextUser = context.user;
15
- }
16
- catch {
17
- // Not using context
18
- }
19
- const user = userProp || contextUser || {};
20
- const [form, setForm] = React.useState({
21
- name: user.name || "",
22
- email: user.email || "",
23
- avatarUrl: "avatarUrl" in user ? user.avatarUrl || "" : "",
24
- });
25
- const [editing, setEditing] = React.useState(false);
26
- const [avatarPreview, setAvatarPreview] = React.useState(form.avatarUrl);
27
- const handleEdit = () => setEditing(true);
28
- const handleCancel = () => {
29
- setEditing(false);
30
- setForm({
31
- name: user.name || "",
32
- email: user.email || "",
33
- avatarUrl: "avatarUrl" in user ? user.avatarUrl || "" : "",
34
- });
35
- setAvatarPreview("avatarUrl" in user ? user.avatarUrl || "" : "");
36
- };
37
- const handleChange = (e) => {
38
- setForm({ ...form, [e.target.name]: e.target.value });
39
- };
40
- const handleAvatarChange = async (e) => {
41
- if (e.target.files && e.target.files[0]) {
42
- const file = e.target.files[0];
43
- if (avatarUploadHandler) {
44
- const url = await avatarUploadHandler(file);
45
- setAvatarPreview(url);
46
- setForm({ ...form, avatarUrl: url });
47
- }
48
- else {
49
- // Local preview only
50
- setAvatarPreview(URL.createObjectURL(file));
51
- }
52
- }
53
- };
54
- const handleSave = () => {
55
- setEditing(false);
56
- if (onUpdate) {
57
- onUpdate(form);
58
- }
59
- };
60
- return (jsx(Card, { className: "max-w-lg mx-auto mt-10 p-8 bg-white shadow-lg rounded-xl", children: jsx("div", { className: "flex flex-col items-center space-y-4", children: jsxs("div", { className: "flex flex-col items-center space-y-4", children: [jsxs("div", { className: "relative", children: [jsxs(Avatar, { size: "lg", children: [jsx(AvatarImage, { src: avatarPreview }), jsx(AvatarFallback, { children: form.name ? form.name[0] : "U" })] }), editing && (jsx("input", { type: "file", accept: "image/*", onChange: handleAvatarChange, className: "absolute bottom-0 left-0 w-full text-xs", style: { opacity: 0, cursor: "pointer" } }))] }), jsxs("div", { className: "w-full space-y-4", children: [jsx(Input, { name: "name", value: form.name, onChange: handleChange, disabled: !editing, className: "w-full", placeholder: "Name" }), jsx(Input, { name: "email", value: form.email, onChange: handleChange, disabled: !editing, className: "w-full", placeholder: "Email", type: "email" })] }), jsx("div", { className: "flex space-x-2 mt-4", children: !editing ? (jsx(Button, { variant: "primary", onClick: handleEdit, children: "Edit Profile" })) : (jsxs(Fragment, { children: [jsx(Button, { variant: "success", onClick: handleSave, children: "Save" }), jsx(Button, { variant: "secondary", onClick: handleCancel, children: "Cancel" })] })) })] }) }) }));
61
- };
62
- ProfileManagementPage.displayName = "ProfileManagementPage";
63
-
64
- export { ProfileManagementPage };
65
- //# sourceMappingURL=ProfileManagementPage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProfileManagementPage.js","sources":["../../../src/components/ProfileManagement/ProfileManagementPage.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { Card } from \"../Card\";\r\nimport { Avatar, AvatarImage, AvatarFallback } from \"../Avatar\";\r\nimport { Input } from \"../Input\";\r\nimport { Button } from \"../Button\";\r\nimport { useAuth } from \"../../contexts/AuthContext\";\r\n\r\nexport interface ProfileManagementPageProps {\r\n user?: {\r\n name?: string;\r\n email?: string;\r\n avatarUrl?: string;\r\n };\r\n onUpdate?: (data: { name: string; email: string; avatarUrl?: string }) => void;\r\n avatarUploadHandler?: (file: File) => Promise<string>;\r\n themeOverrides?: Record<string, any>;\r\n}\r\n\r\nexport const ProfileManagementPage: React.FC<ProfileManagementPageProps> = ({\r\n user: userProp,\r\n onUpdate,\r\n avatarUploadHandler,\r\n themeOverrides,\r\n}) => {\r\n // Context-aware fallback\r\n let contextUser;\r\n try {\r\n const context = useAuth();\r\n contextUser = context.user;\r\n } catch {\r\n // Not using context\r\n }\r\n const user = userProp || contextUser || {};\r\n const [form, setForm] = React.useState({\r\n name: user.name || \"\",\r\n email: user.email || \"\",\r\n avatarUrl: \"avatarUrl\" in user ? (user as any).avatarUrl || \"\" : \"\",\r\n });\r\n const [editing, setEditing] = React.useState(false);\r\n const [avatarPreview, setAvatarPreview] = React.useState(form.avatarUrl);\r\n\r\n const handleEdit = () => setEditing(true);\r\n const handleCancel = () => {\r\n setEditing(false);\r\n setForm({\r\n name: user.name || \"\",\r\n email: user.email || \"\",\r\n avatarUrl: \"avatarUrl\" in user ? (user as any).avatarUrl || \"\" : \"\",\r\n });\r\n setAvatarPreview(\"avatarUrl\" in user ? (user as any).avatarUrl || \"\" : \"\");\r\n };\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setForm({ ...form, [e.target.name]: e.target.value });\r\n };\r\n const handleAvatarChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (e.target.files && e.target.files[0]) {\r\n const file = e.target.files[0];\r\n if (avatarUploadHandler) {\r\n const url = await avatarUploadHandler(file);\r\n setAvatarPreview(url);\r\n setForm({ ...form, avatarUrl: url });\r\n } else {\r\n // Local preview only\r\n setAvatarPreview(URL.createObjectURL(file));\r\n }\r\n }\r\n };\r\n const handleSave = () => {\r\n setEditing(false);\r\n if (onUpdate) {\r\n onUpdate(form);\r\n }\r\n };\r\n\r\n return (\r\n <Card className=\"max-w-lg mx-auto mt-10 p-8 bg-white shadow-lg rounded-xl\">\r\n <div className=\"flex flex-col items-center space-y-4\">\r\n <div className=\"flex flex-col items-center space-y-4\">\r\n <div className=\"relative\">\r\n <Avatar size=\"lg\">\r\n <AvatarImage src={avatarPreview} />\r\n <AvatarFallback>\r\n {form.name ? form.name[0] : \"U\"}\r\n </AvatarFallback>\r\n </Avatar>\r\n {editing && (\r\n <input\r\n type=\"file\"\r\n accept=\"image/*\"\r\n onChange={handleAvatarChange}\r\n className=\"absolute bottom-0 left-0 w-full text-xs\"\r\n style={{ opacity: 0, cursor: \"pointer\" }}\r\n />\r\n )}\r\n </div>\r\n <div className=\"w-full space-y-4\">\r\n <Input\r\n name=\"name\"\r\n value={form.name}\r\n onChange={handleChange}\r\n disabled={!editing}\r\n className=\"w-full\"\r\n placeholder=\"Name\"\r\n />\r\n <Input\r\n name=\"email\"\r\n value={form.email}\r\n onChange={handleChange}\r\n disabled={!editing}\r\n className=\"w-full\"\r\n placeholder=\"Email\"\r\n type=\"email\"\r\n />\r\n </div>\r\n <div className=\"flex space-x-2 mt-4\">\r\n {!editing ? (\r\n <Button variant=\"primary\" onClick={handleEdit}>\r\n Edit Profile\r\n </Button>\r\n ) : (\r\n <>\r\n <Button variant=\"success\" onClick={handleSave}>\r\n Save\r\n </Button>\r\n <Button variant=\"secondary\" onClick={handleCancel}>\r\n Cancel\r\n </Button>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </Card>\r\n );\r\n};\r\n\r\nProfileManagementPage.displayName = \"ProfileManagementPage\";"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import React from 'react';
2
- export interface BlogAuthor {
3
- name: string;
4
- avatar?: string;
5
- bio?: string;
6
- }
7
- export interface BlogPost {
8
- title: string;
9
- content: React.ReactNode;
10
- date: string;
11
- readTime?: string;
12
- featuredImage?: string;
13
- categories?: string[];
14
- tags?: string[];
15
- author: BlogAuthor;
16
- relatedPosts?: {
17
- title: string;
18
- date: string;
19
- href?: string;
20
- }[];
21
- }
22
- export interface SingleBlogViewProps {
23
- post: BlogPost;
24
- className?: string;
25
- }
26
- export declare const SingleBlogView: React.FC<SingleBlogViewProps>;
@@ -1,17 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { PageLayout, PageHeader, PageLayoutContent, PageContent, PageSidebar, PageFooter } from '../PageLayout/PageLayout.js';
3
- import { Button } from '../Button/Button.js';
4
- import { Card, CardHeader, CardTitle, CardContent } from '../Card/Card.js';
5
- import { Badge } from '../Badge/Badge.js';
6
- import { Input } from '../Input/Input.js';
7
- import { AvatarImage, AvatarFallback, Avatar } from '../Avatar/Avatar.js';
8
- import { Calendar, Mail, Tag } from 'lucide-react';
9
- import 'react';
10
- import '../Tabs/Tabs.js';
11
- import '../Toast/Toast.js';
12
- import { cn } from '../../utils/cn.js';
13
-
14
- const SingleBlogView = ({ post, className }) => (jsxs(PageLayout, { variant: "blog", maxWidth: "xl", className: cn(className), children: [jsx(PageHeader, { children: jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: jsxs("div", { className: "flex items-center justify-between h-16", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsxs("div", { className: "w-8 h-8 bg-primary-600 rounded-lg flex items-center justify-center", children: [jsx(AvatarImage, { src: post.author.avatar }), jsx(AvatarFallback, { children: post.author.name ? post.author.name[0] : 'A' })] }), jsx("span", { className: "font-bold text-xl", children: "Blog" })] }), jsxs("nav", { className: "flex items-center space-x-6", children: [jsx("a", { href: "#", className: "text-gray-700 hover:text-primary-600", children: "Home" }), jsx("a", { href: "#", className: "text-gray-700 hover:text-primary-600", children: "Categories" }), jsx("a", { href: "#", className: "text-gray-700 hover:text-primary-600", children: "About" })] })] }) }) }), jsxs(PageLayoutContent, { layout: "sidebar", spacing: "lg", children: [jsxs(PageContent, { maxWidth: "full", className: "lg:flex-1", children: [jsxs("article", { className: "prose prose-lg max-w-none", children: [jsxs("header", { className: "mb-8", children: [jsx("div", { className: "flex items-center space-x-2 mb-4", children: post.categories?.map((cat, i) => (jsx(Badge, { variant: i === 0 ? 'default' : 'outline', children: cat }, cat))) }), jsx("h1", { className: "text-4xl font-bold text-gray-900 mb-4", children: post.title }), jsxs("div", { className: "flex items-center space-x-4 text-gray-600 mb-6", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Avatar, { size: "sm", children: post.author.avatar ? (jsx(AvatarImage, { src: post.author.avatar })) : (jsx(AvatarFallback, { children: post.author.name ? post.author.name[0] : 'A' })) }), jsx("span", { children: post.author.name })] }), jsxs("div", { className: "flex items-center space-x-1", children: [jsx(Calendar, { className: "h-4 w-4" }), jsx("span", { children: post.date })] }), post.readTime && jsx("span", { children: post.readTime })] })] }), post.featuredImage && (jsx("div", { className: "aspect-video bg-gray-100 rounded-lg mb-8 flex items-center justify-center", children: jsx("img", { src: post.featuredImage, alt: "Featured", className: "object-cover h-full w-full rounded" }) })), jsx("div", { className: "space-y-6 text-gray-700 leading-relaxed", children: post.content })] }), post.author.bio && (jsx("div", { className: "mt-12 p-6 bg-gray-50 rounded-lg", children: jsxs("div", { className: "flex items-start space-x-4", children: [jsx(Avatar, { size: "lg", children: post.author.avatar ? (jsx(AvatarImage, { src: post.author.avatar })) : (jsx(AvatarFallback, { children: post.author.name ? post.author.name[0] : 'A' })) }), jsxs("div", { children: [jsx("h3", { className: "font-semibold text-gray-900 mb-2", children: post.author.name }), jsx("p", { className: "text-gray-600 mb-3", children: post.author.bio }), jsxs("div", { className: "flex space-x-4", children: [jsx(Button, { variant: "outline", size: "sm", children: "Follow" }), jsx(Button, { variant: "ghost", size: "sm", children: jsx(Mail, { className: "h-4 w-4" }) })] })] })] }) }))] }), jsx(PageSidebar, { position: "right", width: "md", children: jsxs("div", { className: "space-y-6", children: [jsxs(Card, { children: [jsx(CardHeader, { children: jsx(CardTitle, { children: "Search" }) }), jsx(CardContent, { children: jsx(Input, { placeholder: "Search articles..." }) })] }), post.categories && (jsxs(Card, { children: [jsx(CardHeader, { children: jsx(CardTitle, { children: "Categories" }) }), jsx(CardContent, { children: jsx("div", { className: "space-y-2", children: post.categories.map((cat) => (jsx("div", { className: "flex items-center justify-between", children: jsx("a", { href: "#", className: "text-gray-700 hover:text-primary-600", children: cat }) }, cat))) }) })] })), post.relatedPosts && (jsxs(Card, { children: [jsx(CardHeader, { children: jsx(CardTitle, { children: "Recent Posts" }) }), jsx(CardContent, { children: jsx("div", { className: "space-y-4", children: post.relatedPosts.map((rel, idx) => (jsxs("div", { children: [jsx("a", { href: rel.href || '#', className: "text-gray-900 hover:text-primary-600 font-medium block mb-1", children: rel.title }), jsx("p", { className: "text-sm text-gray-500", children: rel.date })] }, idx))) }) })] })), post.tags && (jsxs(Card, { children: [jsx(CardHeader, { children: jsx(CardTitle, { children: "Tags" }) }), jsx(CardContent, { children: jsx("div", { className: "flex flex-wrap gap-2", children: post.tags.map((tag) => (jsxs(Badge, { variant: "outline", className: "cursor-pointer hover:bg-primary-50", children: [jsx(Tag, { className: "h-3 w-3 mr-1" }), tag] }, tag))) }) })] }))] }) })] }), jsx(PageFooter, { variant: "minimal", children: jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center", children: jsx("p", { className: "text-gray-600", children: "\u00A9 2024 Blog. All rights reserved." }) }) })] }));
15
-
16
- export { SingleBlogView };
17
- //# sourceMappingURL=SingleBlogView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SingleBlogView.js","sources":["../../../src/components/SingleBlogView/SingleBlogView.tsx"],"sourcesContent":["import React from 'react';\r\nimport {\r\n PageLayout,\r\n PageHeader,\r\n PageLayoutContent,\r\n PageContent,\r\n PageSidebar,\r\n PageFooter,\r\n} from '../PageLayout';\r\nimport { Card, CardHeader, CardTitle, CardContent } from '../Card';\r\nimport { Badge } from '../Badge';\r\nimport { Button } from '../Button';\r\nimport { Input } from '../Input';\r\nimport { Avatar, AvatarImage, AvatarFallback } from '../Avatar';\r\nimport { Calendar, Mail, Tag } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface BlogAuthor {\r\n name: string;\r\n avatar?: string;\r\n bio?: string;\r\n}\r\n\r\nexport interface BlogPost {\r\n title: string;\r\n content: React.ReactNode;\r\n date: string;\r\n readTime?: string;\r\n featuredImage?: string;\r\n categories?: string[];\r\n tags?: string[];\r\n author: BlogAuthor;\r\n relatedPosts?: { title: string; date: string; href?: string }[];\r\n}\r\n\r\nexport interface SingleBlogViewProps {\r\n post: BlogPost;\r\n className?: string;\r\n}\r\n\r\nexport const SingleBlogView: React.FC<SingleBlogViewProps> = ({ post, className }) => (\r\n <PageLayout variant=\"blog\" maxWidth=\"xl\" className={cn(className)}>\r\n <PageHeader>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n <div className=\"flex items-center justify-between h-16\">\r\n <div className=\"flex items-center space-x-2\">\r\n <div className=\"w-8 h-8 bg-primary-600 rounded-lg flex items-center justify-center\">\r\n <AvatarImage src={post.author.avatar} />\r\n <AvatarFallback>\r\n {post.author.name ? post.author.name[0] : 'A'}\r\n </AvatarFallback>\r\n </div>\r\n <span className=\"font-bold text-xl\">Blog</span>\r\n </div>\r\n <nav className=\"flex items-center space-x-6\">\r\n <a href=\"#\" className=\"text-gray-700 hover:text-primary-600\">Home</a>\r\n <a href=\"#\" className=\"text-gray-700 hover:text-primary-600\">Categories</a>\r\n <a href=\"#\" className=\"text-gray-700 hover:text-primary-600\">About</a>\r\n </nav>\r\n </div>\r\n </div>\r\n </PageHeader>\r\n\r\n <PageLayoutContent layout=\"sidebar\" spacing=\"lg\">\r\n {/* Main Content */}\r\n <PageContent maxWidth=\"full\" className=\"lg:flex-1\">\r\n <article className=\"prose prose-lg max-w-none\">\r\n <header className=\"mb-8\">\r\n <div className=\"flex items-center space-x-2 mb-4\">\r\n {post.categories?.map((cat, i) => (\r\n <Badge key={cat} variant={i === 0 ? 'default' : 'outline'}>\r\n {cat}\r\n </Badge>\r\n ))}\r\n </div>\r\n <h1 className=\"text-4xl font-bold text-gray-900 mb-4\">\r\n {post.title}\r\n </h1>\r\n <div className=\"flex items-center space-x-4 text-gray-600 mb-6\">\r\n <div className=\"flex items-center space-x-2\">\r\n <Avatar size=\"sm\">\r\n {post.author.avatar ? (\r\n <AvatarImage src={post.author.avatar} />\r\n ) : (\r\n <AvatarFallback>\r\n {post.author.name ? post.author.name[0] : 'A'}\r\n </AvatarFallback>\r\n )}\r\n </Avatar>\r\n <span>{post.author.name}</span>\r\n </div>\r\n <div className=\"flex items-center space-x-1\">\r\n <Calendar className=\"h-4 w-4\" />\r\n <span>{post.date}</span>\r\n </div>\r\n {post.readTime && <span>{post.readTime}</span>}\r\n </div>\r\n </header>\r\n {post.featuredImage && (\r\n <div className=\"aspect-video bg-gray-100 rounded-lg mb-8 flex items-center justify-center\">\r\n <img\r\n src={post.featuredImage}\r\n alt=\"Featured\"\r\n className=\"object-cover h-full w-full rounded\"\r\n />\r\n </div>\r\n )}\r\n <div className=\"space-y-6 text-gray-700 leading-relaxed\">\r\n {post.content}\r\n </div>\r\n </article>\r\n {/* Author Bio */}\r\n {post.author.bio && (\r\n <div className=\"mt-12 p-6 bg-gray-50 rounded-lg\">\r\n <div className=\"flex items-start space-x-4\">\r\n <Avatar size=\"lg\">\r\n {post.author.avatar ? (\r\n <AvatarImage src={post.author.avatar} />\r\n ) : (\r\n <AvatarFallback>\r\n {post.author.name ? post.author.name[0] : 'A'}\r\n </AvatarFallback>\r\n )}\r\n </Avatar>\r\n <div>\r\n <h3 className=\"font-semibold text-gray-900 mb-2\">{post.author.name}</h3>\r\n <p className=\"text-gray-600 mb-3\">{post.author.bio}</p>\r\n <div className=\"flex space-x-4\">\r\n <Button variant=\"outline\" size=\"sm\">Follow</Button>\r\n <Button variant=\"ghost\" size=\"sm\">\r\n <Mail className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </PageContent>\r\n {/* Sidebar */}\r\n <PageSidebar position=\"right\" width=\"md\">\r\n <div className=\"space-y-6\">\r\n {/* Search */}\r\n <Card>\r\n <CardHeader>\r\n <CardTitle>Search</CardTitle>\r\n </CardHeader>\r\n <CardContent>\r\n <Input placeholder=\"Search articles...\" />\r\n </CardContent>\r\n </Card>\r\n {/* Categories */}\r\n {post.categories && (\r\n <Card>\r\n <CardHeader>\r\n <CardTitle>Categories</CardTitle>\r\n </CardHeader>\r\n <CardContent>\r\n <div className=\"space-y-2\">\r\n {post.categories.map((cat) => (\r\n <div key={cat} className=\"flex items-center justify-between\">\r\n <a href=\"#\" className=\"text-gray-700 hover:text-primary-600\">\r\n {cat}\r\n </a>\r\n </div>\r\n ))}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n )}\r\n {/* Related Posts */}\r\n {post.relatedPosts && (\r\n <Card>\r\n <CardHeader>\r\n <CardTitle>Recent Posts</CardTitle>\r\n </CardHeader>\r\n <CardContent>\r\n <div className=\"space-y-4\">\r\n {post.relatedPosts.map((rel, idx) => (\r\n <div key={idx}>\r\n <a\r\n href={rel.href || '#'}\r\n className=\"text-gray-900 hover:text-primary-600 font-medium block mb-1\"\r\n >\r\n {rel.title}\r\n </a>\r\n <p className=\"text-sm text-gray-500\">{rel.date}</p>\r\n </div>\r\n ))}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n )}\r\n {/* Tags */}\r\n {post.tags && (\r\n <Card>\r\n <CardHeader>\r\n <CardTitle>Tags</CardTitle>\r\n </CardHeader>\r\n <CardContent>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {post.tags.map((tag) => (\r\n <Badge key={tag} variant=\"outline\" className=\"cursor-pointer hover:bg-primary-50\">\r\n <Tag className=\"h-3 w-3 mr-1\" />\r\n {tag}\r\n </Badge>\r\n ))}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n )}\r\n </div>\r\n </PageSidebar>\r\n </PageLayoutContent>\r\n <PageFooter variant=\"minimal\">\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center\">\r\n <p className=\"text-gray-600\">&copy; 2024 Blog. All rights reserved.</p>\r\n </div>\r\n </PageFooter>\r\n </PageLayout>\r\n);"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -1 +0,0 @@
1
- export * from './SingleBlogView';
@@ -1,31 +0,0 @@
1
- import React from 'react';
2
- export interface ProductReview {
3
- user: string;
4
- avatar?: string;
5
- rating: number;
6
- comment: string;
7
- date: string;
8
- }
9
- export interface ProductData {
10
- id: string;
11
- name: string;
12
- description: string;
13
- images: string[];
14
- price: number;
15
- oldPrice?: number;
16
- discount?: string;
17
- inStock: boolean;
18
- features: string[];
19
- colors?: string[];
20
- reviews?: ProductReview[];
21
- }
22
- export interface SingleProductViewProps {
23
- product: ProductData;
24
- onAddToCart?: (productId: string) => void;
25
- onWishlist?: (productId: string) => void;
26
- onShare?: (productId: string) => void;
27
- showReviews?: boolean;
28
- showColorOptions?: boolean;
29
- className?: string;
30
- }
31
- export declare const SingleProductView: React.FC<SingleProductViewProps>;
@@ -1,34 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { useState } from 'react';
3
- import { PageLayout, PageHeader, PageLayoutContent } from '../PageLayout/PageLayout.js';
4
- import { Button } from '../Button/Button.js';
5
- import { Card } from '../Card/Card.js';
6
- import { Badge } from '../Badge/Badge.js';
7
- import { Input } from '../Input/Input.js';
8
- import { Avatar, AvatarImage, AvatarFallback } from '../Avatar/Avatar.js';
9
- import { ShoppingCart, Star, Heart, Share2, CheckCircle } from 'lucide-react';
10
- import { Tabs, TabsList, TabsTrigger, TabsContent } from '../Tabs/Tabs.js';
11
- import '../Toast/Toast.js';
12
- import { Modal } from '../Modal/Modal.js';
13
- import { useBreakpoint } from '../../hooks/useBreakpoint.js';
14
- import { useToggle } from '../../hooks/useToggle.js';
15
- import { cn } from '../../utils/cn.js';
16
-
17
- const SingleProductView = ({ product, onAddToCart, onWishlist, onShare, showReviews = true, showColorOptions = true, className, }) => {
18
- const [selectedImage, setSelectedImage] = useState(product.images[0]);
19
- const [imageModalOpen, toggleImageModal] = useToggle(false);
20
- const [selectedColor, setSelectedColor] = useState(product.colors ? product.colors[0] : undefined);
21
- const { currentBreakpoint, isBelow } = useBreakpoint();
22
- isBelow('md');
23
- return (jsxs(PageLayout, { variant: "product", maxWidth: "xl", className: cn(className), children: [jsx(PageHeader, { children: jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: jsxs("div", { className: "flex items-center justify-between h-16", children: [jsx("div", { className: "flex items-center space-x-2" }), jsxs("div", { className: "flex items-center space-x-4", children: [jsx(Input, { placeholder: "Search products...", className: "w-full sm:w-64" }), jsx(Button, { variant: "outline", children: "Cart" })] })] }) }) }), jsxs(PageLayoutContent, { layout: "centered", spacing: "lg", children: [jsxs("div", { className: "grid grid-cols-1 gap-8 lg:grid-cols-2 lg:gap-12", children: [jsxs("div", { children: [jsx("div", { className: "aspect-square bg-gray-100 rounded-lg mb-4 flex items-center justify-center cursor-pointer w-full max-w-xs sm:max-w-sm md:max-w-md lg:max-w-lg mx-auto", onClick: toggleImageModal, children: selectedImage ? (jsx("img", { src: selectedImage, alt: product.name, className: "object-contain w-full h-full max-h-64 max-w-xs sm:max-w-sm md:max-w-md lg:max-w-lg" })) : (jsxs("div", { className: "text-center text-gray-500", children: [jsx(ShoppingCart, { className: "h-16 w-16 mx-auto mb-2" }), jsx("p", { children: "Product Image" })] })) }), jsx("div", { className: "grid grid-cols-4 gap-2 max-w-xs sm:max-w-sm md:max-w-md lg:max-w-lg mx-auto", children: product.images.map((img, i) => (jsx("div", { className: cn('aspect-square bg-gray-100 rounded border-2 border-transparent hover:border-primary-500 cursor-pointer', selectedImage === img && 'border-primary-500'), onClick: () => setSelectedImage(img), children: jsx("img", { src: img, alt: `Thumbnail ${i + 1}`, className: "object-cover h-full w-full rounded" }) }, img))) }), jsx(Modal, { open: imageModalOpen, onOpenChange: toggleImageModal, children: jsx("div", { className: "flex items-center justify-center p-4", children: jsx("img", { src: selectedImage, alt: product.name, className: "object-contain w-full h-full max-h-96 max-w-lg" }) }) })] }), jsxs("div", { className: "px-2 sm:px-0", children: [jsxs("div", { className: "flex items-center space-x-2 mb-2", children: [jsx(Badge, { variant: product.inStock ? 'success' : 'danger', children: product.inStock ? 'In Stock' : 'Out of Stock' }), jsx(Badge, { variant: "outline", children: "Free Shipping" })] }), jsx("h1", { className: "text-3xl font-bold text-gray-900 mb-4", children: product.name }), jsxs("div", { className: "flex items-center space-x-2 mb-4", children: [jsx("div", { className: "flex items-center", children: [1, 2, 3, 4, 5].map((star) => (jsx(Star, { className: cn('h-5 w-5', product.reviews && product.reviews.length > 0
24
- ? 'text-yellow-400 fill-current'
25
- : 'text-gray-300') }, star))) }), jsxs("span", { className: "text-gray-600", children: ["(", product.reviews ? product.reviews.length : 0, " reviews)"] })] }), jsxs("div", { className: "mb-6", children: [jsxs("span", { className: "text-3xl font-bold text-gray-900", children: ["$", product.price.toFixed(2)] }), product.oldPrice && (jsxs("span", { className: "text-lg text-gray-500 line-through ml-2", children: ["$", product.oldPrice.toFixed(2)] })), product.discount && (jsx(Badge, { variant: "danger", className: "ml-2", children: product.discount }))] }), jsx("p", { className: "text-gray-600 mb-6 leading-relaxed", children: product.description }), showColorOptions && product.colors && product.colors.length > 0 && (jsx("div", { className: "space-y-4 mb-8", children: jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: "Color" }), jsx("div", { className: "flex flex-wrap gap-2", children: product.colors.map((color) => (jsx("button", { className: cn('px-4 py-2 border border-gray-300 rounded-lg hover:border-primary-500 focus:border-primary-500', selectedColor === color && 'border-primary-500'), onClick: () => setSelectedColor(color), type: "button", children: color }, color))) })] }) })), jsxs("div", { className: "flex flex-col sm:flex-row gap-2 sm:gap-4 mb-6", children: [jsxs(Button, { variant: "primary", size: "lg", className: "flex-1", onClick: () => onAddToCart && onAddToCart(product.id), disabled: !product.inStock, children: [jsx(ShoppingCart, { className: "mr-2 h-5 w-5" }), "Add to Cart"] }), jsx(Button, { variant: "outline", size: "lg", onClick: () => onWishlist && onWishlist(product.id), children: jsx(Heart, { className: "h-5 w-5" }) }), jsx(Button, { variant: "outline", size: "lg", onClick: () => onShare && onShare(product.id), children: jsx(Share2, { className: "h-5 w-5" }) })] }), jsxs("div", { className: "border-t pt-6", children: [jsx("h3", { className: "font-semibold text-gray-900 mb-3", children: "Key Features" }), jsx("ul", { className: "space-y-2 text-gray-600", children: product.features.map((feature, idx) => (jsxs("li", { className: "flex items-center", children: [jsx(CheckCircle, { className: "h-4 w-4 text-green-500 mr-2" }), feature] }, idx))) })] })] })] }), jsx("div", { className: "mt-8 sm:mt-12", children: (() => {
26
- const [tabValue, setTabValue] = useState('details');
27
- return (jsxs(Tabs, { value: tabValue, onValueChange: setTabValue, children: [jsxs(TabsList, { children: [jsx(TabsTrigger, { value: "details", children: "Details" }), showReviews && jsx(TabsTrigger, { value: "reviews", children: "Reviews" })] }), jsx(TabsContent, { value: "details", children: jsxs("div", { children: [jsx("h4", { className: "font-semibold text-gray-900 mb-2", children: "Product Details" }), jsx("p", { className: "text-gray-600", children: product.description })] }) }), showReviews && (jsx(TabsContent, { value: "reviews", children: jsxs("div", { children: [jsx("h4", { className: "font-semibold text-gray-900 mb-4", children: "Customer Reviews" }), product.reviews && product.reviews.length > 0 ? (jsx("div", { className: "space-y-6", children: product.reviews.map((review, idx) => (jsxs(Card, { className: "p-4", children: [jsxs("div", { className: "flex flex-col sm:flex-row sm:items-center sm:space-x-3 mb-2 gap-2", children: [jsx(Avatar, { size: "sm", children: review.avatar ? (jsx(AvatarImage, { src: review.avatar })) : (jsx(AvatarFallback, { children: review.user[0] })) }), jsx("span", { className: "font-medium text-gray-900", children: review.user }), jsx("span", { className: "text-xs text-gray-500", children: review.date })] }), jsx("div", { className: "flex items-center mb-2", children: [1, 2, 3, 4, 5].map((star) => (jsx(Star, { className: cn('h-4 w-4', review.rating >= star
28
- ? 'text-yellow-400 fill-current'
29
- : 'text-gray-300') }, star))) }), jsx("p", { className: "text-gray-700", children: review.comment })] }, idx))) })) : (jsx("p", { className: "text-gray-500", children: "No reviews yet." }))] }) }))] }));
30
- })() })] })] }));
31
- };
32
-
33
- export { SingleProductView };
34
- //# sourceMappingURL=SingleProductView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SingleProductView.js","sources":["../../../src/components/SingleProductView/SingleProductView.tsx"],"sourcesContent":["import React, { useState } from 'react';\r\nimport {\r\n PageLayout,\r\n PageHeader,\r\n PageLayoutContent,\r\n} from '../PageLayout';\r\nimport { Badge } from '../Badge';\r\nimport { Button } from '../Button';\r\nimport { Card } from '../Card';\r\nimport { Input } from '../Input';\r\nimport { Avatar, AvatarImage, AvatarFallback } from '../Avatar';\r\nimport { Modal } from '../Modal';\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../Tabs';\r\nimport { Star, ShoppingCart, Heart, Share2, CheckCircle } from 'lucide-react';\r\nimport { useBreakpoint } from '../../hooks/useBreakpoint';\r\nimport { useToggle } from '../../hooks/useToggle';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface ProductReview {\r\n user: string;\r\n avatar?: string;\r\n rating: number;\r\n comment: string;\r\n date: string;\r\n}\r\n\r\nexport interface ProductData {\r\n id: string;\r\n name: string;\r\n description: string;\r\n images: string[];\r\n price: number;\r\n oldPrice?: number;\r\n discount?: string;\r\n inStock: boolean;\r\n features: string[];\r\n colors?: string[];\r\n reviews?: ProductReview[];\r\n}\r\n\r\nexport interface SingleProductViewProps {\r\n product: ProductData;\r\n onAddToCart?: (productId: string) => void;\r\n onWishlist?: (productId: string) => void;\r\n onShare?: (productId: string) => void;\r\n showReviews?: boolean;\r\n showColorOptions?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const SingleProductView: React.FC<SingleProductViewProps> = ({\r\n product,\r\n onAddToCart,\r\n onWishlist,\r\n onShare,\r\n showReviews = true,\r\n showColorOptions = true,\r\n className,\r\n}) => {\r\n const [selectedImage, setSelectedImage] = useState(product.images[0]);\r\n const [imageModalOpen, toggleImageModal] = useToggle(false);\r\n const [selectedColor, setSelectedColor] = useState(\r\n product.colors ? product.colors[0] : undefined\r\n );\r\n const { currentBreakpoint, isBelow } = useBreakpoint();\r\n const isMobile = isBelow('md');\r\n\r\n return (\r\n <PageLayout variant=\"product\" maxWidth=\"xl\" className={cn(className)}>\r\n {/* Header */}\r\n <PageHeader>\r\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\r\n <div className=\"flex items-center justify-between h-16\">\r\n <div className=\"flex items-center space-x-2\">\r\n {/* <ShoppingCart className=\"h-6 w-6 text-primary-600\" />\r\n <span className=\"font-bold text-xl\">Store</span> */}\r\n </div>\r\n <div className=\"flex items-center space-x-4\">\r\n <Input\r\n placeholder=\"Search products...\"\r\n className=\"w-full sm:w-64\"\r\n />\r\n <Button variant=\"outline\">Cart</Button>\r\n </div>\r\n </div>\r\n </div>\r\n </PageHeader>\r\n\r\n {/* Product Content */}\r\n <PageLayoutContent layout=\"centered\" spacing=\"lg\">\r\n <div className=\"grid grid-cols-1 gap-8 lg:grid-cols-2 lg:gap-12\">\r\n {/* Product Images */}\r\n <div>\r\n <div\r\n className=\"aspect-square bg-gray-100 rounded-lg mb-4 flex items-center justify-center cursor-pointer w-full max-w-xs sm:max-w-sm md:max-w-md lg:max-w-lg mx-auto\"\r\n onClick={toggleImageModal}\r\n >\r\n {selectedImage ? (\r\n <img\r\n src={selectedImage}\r\n alt={product.name}\r\n className=\"object-contain w-full h-full max-h-64 max-w-xs sm:max-w-sm md:max-w-md lg:max-w-lg\"\r\n />\r\n ) : (\r\n <div className=\"text-center text-gray-500\">\r\n <ShoppingCart className=\"h-16 w-16 mx-auto mb-2\" />\r\n <p>Product Image</p>\r\n </div>\r\n )}\r\n </div>\r\n <div className=\"grid grid-cols-4 gap-2 max-w-xs sm:max-w-sm md:max-w-md lg:max-w-lg mx-auto\">\r\n {product.images.map((img, i) => (\r\n <div\r\n key={img}\r\n className={cn(\r\n 'aspect-square bg-gray-100 rounded border-2 border-transparent hover:border-primary-500 cursor-pointer',\r\n selectedImage === img && 'border-primary-500'\r\n )}\r\n onClick={() => setSelectedImage(img)}\r\n >\r\n <img\r\n src={img}\r\n alt={`Thumbnail ${i + 1}`}\r\n className=\"object-cover h-full w-full rounded\"\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n <Modal open={imageModalOpen} onOpenChange={toggleImageModal}>\r\n <div className=\"flex items-center justify-center p-4\">\r\n <img\r\n src={selectedImage}\r\n alt={product.name}\r\n className=\"object-contain w-full h-full max-h-96 max-w-lg\"\r\n />\r\n </div>\r\n </Modal>\r\n </div>\r\n\r\n {/* Product Details */}\r\n <div className=\"px-2 sm:px-0\">\r\n <div className=\"flex items-center space-x-2 mb-2\">\r\n <Badge variant={product.inStock ? 'success' : 'danger'}>\r\n {product.inStock ? 'In Stock' : 'Out of Stock'}\r\n </Badge>\r\n <Badge variant=\"outline\">Free Shipping</Badge>\r\n </div>\r\n\r\n <h1 className=\"text-3xl font-bold text-gray-900 mb-4\">\r\n {product.name}\r\n </h1>\r\n\r\n <div className=\"flex items-center space-x-2 mb-4\">\r\n <div className=\"flex items-center\">\r\n {[1, 2, 3, 4, 5].map((star) => (\r\n <Star\r\n key={star}\r\n className={cn(\r\n 'h-5 w-5',\r\n product.reviews && product.reviews.length > 0\r\n ? 'text-yellow-400 fill-current'\r\n : 'text-gray-300'\r\n )}\r\n />\r\n ))}\r\n </div>\r\n <span className=\"text-gray-600\">\r\n ({product.reviews ? product.reviews.length : 0} reviews)\r\n </span>\r\n </div>\r\n\r\n <div className=\"mb-6\">\r\n <span className=\"text-3xl font-bold text-gray-900\">\r\n ${product.price.toFixed(2)}\r\n </span>\r\n {product.oldPrice && (\r\n <span className=\"text-lg text-gray-500 line-through ml-2\">\r\n ${product.oldPrice.toFixed(2)}\r\n </span>\r\n )}\r\n {product.discount && (\r\n <Badge variant=\"danger\" className=\"ml-2\">\r\n {product.discount}\r\n </Badge>\r\n )}\r\n </div>\r\n\r\n <p className=\"text-gray-600 mb-6 leading-relaxed\">\r\n {product.description}\r\n </p>\r\n\r\n {showColorOptions && product.colors && product.colors.length > 0 && (\r\n <div className=\"space-y-4 mb-8\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\r\n Color\r\n </label>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {product.colors.map((color) => (\r\n <button\r\n key={color}\r\n className={cn(\r\n 'px-4 py-2 border border-gray-300 rounded-lg hover:border-primary-500 focus:border-primary-500',\r\n selectedColor === color && 'border-primary-500'\r\n )}\r\n onClick={() => setSelectedColor(color)}\r\n type=\"button\"\r\n >\r\n {color}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"flex flex-col sm:flex-row gap-2 sm:gap-4 mb-6\">\r\n <Button\r\n variant=\"primary\"\r\n size=\"lg\"\r\n className=\"flex-1\"\r\n onClick={() => onAddToCart && onAddToCart(product.id)}\r\n disabled={!product.inStock}\r\n >\r\n <ShoppingCart className=\"mr-2 h-5 w-5\" />\r\n Add to Cart\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n size=\"lg\"\r\n onClick={() => onWishlist && onWishlist(product.id)}\r\n >\r\n <Heart className=\"h-5 w-5\" />\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n size=\"lg\"\r\n onClick={() => onShare && onShare(product.id)}\r\n >\r\n <Share2 className=\"h-5 w-5\" />\r\n </Button>\r\n </div>\r\n\r\n <div className=\"border-t pt-6\">\r\n <h3 className=\"font-semibold text-gray-900 mb-3\">Key Features</h3>\r\n <ul className=\"space-y-2 text-gray-600\">\r\n {product.features.map((feature, idx) => (\r\n <li key={idx} className=\"flex items-center\">\r\n <CheckCircle className=\"h-4 w-4 text-green-500 mr-2\" />\r\n {feature}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Tabs for Details/Reviews */}\r\n <div className=\"mt-8 sm:mt-12\">\r\n {(() => {\r\n const [tabValue, setTabValue] = useState('details');\r\n return (\r\n <Tabs value={tabValue} onValueChange={setTabValue}>\r\n <TabsList>\r\n <TabsTrigger value=\"details\">Details</TabsTrigger>\r\n {showReviews && <TabsTrigger value=\"reviews\">Reviews</TabsTrigger>}\r\n </TabsList>\r\n <TabsContent value=\"details\">\r\n <div>\r\n <h4 className=\"font-semibold text-gray-900 mb-2\">\r\n Product Details\r\n </h4>\r\n <p className=\"text-gray-600\">{product.description}</p>\r\n </div>\r\n </TabsContent>\r\n {showReviews && (\r\n <TabsContent value=\"reviews\">\r\n <div>\r\n <h4 className=\"font-semibold text-gray-900 mb-4\">\r\n Customer Reviews\r\n </h4>\r\n {product.reviews && product.reviews.length > 0 ? (\r\n <div className=\"space-y-6\">\r\n {product.reviews.map((review, idx) => (\r\n <Card key={idx} className=\"p-4\">\r\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:space-x-3 mb-2 gap-2\">\r\n <Avatar size=\"sm\">\r\n {review.avatar ? (\r\n <AvatarImage src={review.avatar} />\r\n ) : (\r\n <AvatarFallback>\r\n {review.user[0]}\r\n </AvatarFallback>\r\n )}\r\n </Avatar>\r\n <span className=\"font-medium text-gray-900\">\r\n {review.user}\r\n </span>\r\n <span className=\"text-xs text-gray-500\">\r\n {review.date}\r\n </span>\r\n </div>\r\n <div className=\"flex items-center mb-2\">\r\n {[1, 2, 3, 4, 5].map((star) => (\r\n <Star\r\n key={star}\r\n className={cn(\r\n 'h-4 w-4',\r\n review.rating >= star\r\n ? 'text-yellow-400 fill-current'\r\n : 'text-gray-300'\r\n )}\r\n />\r\n ))}\r\n </div>\r\n <p className=\"text-gray-700\">{review.comment}</p>\r\n </Card>\r\n ))}\r\n </div>\r\n ) : (\r\n <p className=\"text-gray-500\">No reviews yet.</p>\r\n )}\r\n </div>\r\n </TabsContent>\r\n )}\r\n </Tabs>\r\n );\r\n })()}\r\n </div>\r\n </PageLayoutContent>\r\n </PageLayout>\r\n );\r\n};"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -1 +0,0 @@
1
- export * from './SingleProductView';