@rovela-ai/sdk 0.1.20 → 0.1.21

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 (34) hide show
  1. package/dist/admin/components/AdminNav.d.ts +10 -3
  2. package/dist/admin/components/AdminNav.d.ts.map +1 -1
  3. package/dist/admin/components/AdminNav.js +78 -31
  4. package/dist/admin/components/AdminNav.js.map +1 -1
  5. package/dist/admin/components/LowStockAlert.d.ts +2 -2
  6. package/dist/admin/components/LowStockAlert.d.ts.map +1 -1
  7. package/dist/admin/components/LowStockAlert.js +16 -9
  8. package/dist/admin/components/LowStockAlert.js.map +1 -1
  9. package/dist/admin/components/OrderStatusChart.d.ts +21 -0
  10. package/dist/admin/components/OrderStatusChart.d.ts.map +1 -0
  11. package/dist/admin/components/OrderStatusChart.js +54 -0
  12. package/dist/admin/components/OrderStatusChart.js.map +1 -0
  13. package/dist/admin/components/RecentOrders.d.ts +1 -1
  14. package/dist/admin/components/RecentOrders.d.ts.map +1 -1
  15. package/dist/admin/components/RecentOrders.js +11 -10
  16. package/dist/admin/components/RecentOrders.js.map +1 -1
  17. package/dist/admin/components/RevenueChart.d.ts +23 -0
  18. package/dist/admin/components/RevenueChart.d.ts.map +1 -0
  19. package/dist/admin/components/RevenueChart.js +70 -0
  20. package/dist/admin/components/RevenueChart.js.map +1 -0
  21. package/dist/admin/components/StatsCards.d.ts +2 -2
  22. package/dist/admin/components/StatsCards.d.ts.map +1 -1
  23. package/dist/admin/components/StatsCards.js +18 -20
  24. package/dist/admin/components/StatsCards.js.map +1 -1
  25. package/dist/admin/components/index.d.ts +4 -0
  26. package/dist/admin/components/index.d.ts.map +1 -1
  27. package/dist/admin/components/index.js +2 -0
  28. package/dist/admin/components/index.js.map +1 -1
  29. package/dist/admin/index.d.ts +2 -2
  30. package/dist/admin/index.d.ts.map +1 -1
  31. package/dist/admin/index.js +1 -1
  32. package/dist/admin/index.js.map +1 -1
  33. package/dist/core/db/queries.d.ts +6 -6
  34. package/package.json +2 -1
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * @rovela/sdk/admin/components/AdminNav
3
3
  *
4
- * Admin sidebar navigation component.
4
+ * Admin sidebar navigation component with grouped navigation,
5
+ * elegant styling, and Rovela branding.
5
6
  */
6
7
  import { type ReactNode } from 'react';
7
8
  export interface NavItem {
@@ -10,6 +11,10 @@ export interface NavItem {
10
11
  href: string;
11
12
  icon?: ReactNode;
12
13
  }
14
+ export interface NavGroup {
15
+ label: string;
16
+ items: NavItem[];
17
+ }
13
18
  export interface AdminNavProps {
14
19
  /** Currently active nav item ID */
15
20
  activeNav?: string;
@@ -19,16 +24,18 @@ export interface AdminNavProps {
19
24
  storeName?: string;
20
25
  /** Logo element */
21
26
  logo?: ReactNode;
27
+ /** Store URL for "View Store" link */
28
+ storeUrl?: string;
22
29
  /** Custom className */
23
30
  className?: string;
24
31
  }
25
32
  /**
26
- * Admin sidebar navigation.
33
+ * Admin sidebar navigation with grouped sections and elegant styling.
27
34
  *
28
35
  * @example
29
36
  * ```tsx
30
37
  * <AdminNav activeNav="dashboard" storeName="My Store" />
31
38
  * ```
32
39
  */
33
- export declare function AdminNav({ activeNav, items, storeName, logo, className, }: AdminNavProps): import("react/jsx-runtime").JSX.Element;
40
+ export declare function AdminNav({ activeNav, items, storeName, logo, storeUrl, className, }: AdminNavProps): import("react/jsx-runtime").JSX.Element;
34
41
  //# sourceMappingURL=AdminNav.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminNav.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAM7C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;IACjB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiFD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,KAAuB,EACvB,SAAmB,EACnB,IAAI,EACJ,SAAc,GACf,EAAE,aAAa,2CA4Cf"}
1
+ {"version":3,"file":"AdminNav.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAM7C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;IACjB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA0KD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,KAAK,EACL,SAAmB,EACnB,IAAI,EACJ,QAAc,EACd,SAAc,GACf,EAAE,aAAa,2CAgGf"}
@@ -1,36 +1,60 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  // =============================================================================
4
- // Default Navigation Items
4
+ // Default Navigation Groups
5
5
  // =============================================================================
6
- const defaultNavItems = [
7
- { id: 'dashboard', label: 'Dashboard', href: '/admin' },
8
- { id: 'products', label: 'Products', href: '/admin/products' },
9
- { id: 'categories', label: 'Categories', href: '/admin/categories' },
10
- { id: 'orders', label: 'Orders', href: '/admin/orders' },
11
- { id: 'customers', label: 'Customers', href: '/admin/customers' },
12
- { id: 'settings', label: 'Settings', href: '/admin/settings' },
6
+ const defaultNavGroups = [
7
+ {
8
+ label: 'Main',
9
+ items: [
10
+ { id: 'dashboard', label: 'Dashboard', href: '/admin' },
11
+ ],
12
+ },
13
+ {
14
+ label: 'Catalog',
15
+ items: [
16
+ { id: 'products', label: 'Products', href: '/admin/products' },
17
+ { id: 'categories', label: 'Categories', href: '/admin/categories' },
18
+ ],
19
+ },
20
+ {
21
+ label: 'Sales',
22
+ items: [
23
+ { id: 'orders', label: 'Orders', href: '/admin/orders' },
24
+ { id: 'customers', label: 'Customers', href: '/admin/customers' },
25
+ ],
26
+ },
13
27
  ];
28
+ const settingsItem = { id: 'settings', label: 'Settings', href: '/admin/settings' };
14
29
  // =============================================================================
15
- // Icons (inline SVG to avoid dependencies)
30
+ // Icons (refined SVG icons)
16
31
  // =============================================================================
17
- function DashboardIcon() {
18
- return (_jsx("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z" }) }));
32
+ function DashboardIcon({ className = 'h-5 w-5' }) {
33
+ return (_jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3.75 6A2.25 2.25 0 016 3.75h2.25A2.25 2.25 0 0110.5 6v2.25a2.25 2.25 0 01-2.25 2.25H6a2.25 2.25 0 01-2.25-2.25V6zM3.75 15.75A2.25 2.25 0 016 13.5h2.25a2.25 2.25 0 012.25 2.25V18a2.25 2.25 0 01-2.25 2.25H6A2.25 2.25 0 013.75 18v-2.25zM13.5 6a2.25 2.25 0 012.25-2.25H18A2.25 2.25 0 0120.25 6v2.25A2.25 2.25 0 0118 10.5h-2.25a2.25 2.25 0 01-2.25-2.25V6zM13.5 15.75a2.25 2.25 0 012.25-2.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-2.25A2.25 2.25 0 0113.5 18v-2.25z" }) }));
19
34
  }
20
- function ProductsIcon() {
21
- return (_jsx("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4" }) }));
35
+ function ProductsIcon({ className = 'h-5 w-5' }) {
36
+ return (_jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M20.25 7.5l-.625 10.632a2.25 2.25 0 01-2.247 2.118H6.622a2.25 2.25 0 01-2.247-2.118L3.75 7.5M10 11.25h4M3.375 7.5h17.25c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z" }) }));
22
37
  }
23
- function CategoriesIcon() {
24
- return (_jsx("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z" }) }));
38
+ function CategoriesIcon({ className = 'h-5 w-5' }) {
39
+ return (_jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M2.25 12.75V12A2.25 2.25 0 014.5 9.75h15A2.25 2.25 0 0121.75 12v.75m-8.69-6.44l-2.12-2.12a1.5 1.5 0 00-1.061-.44H4.5A2.25 2.25 0 002.25 6v12a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9a2.25 2.25 0 00-2.25-2.25h-5.379a1.5 1.5 0 01-1.06-.44z" }) }));
25
40
  }
26
- function OrdersIcon() {
27
- return (_jsx("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" }) }));
41
+ function OrdersIcon({ className = 'h-5 w-5' }) {
42
+ return (_jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 002.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 00-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75 2.25 2.25 0 00-.1-.664m-5.8 0A2.251 2.251 0 0113.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25zM6.75 12h.008v.008H6.75V12zm0 3h.008v.008H6.75V15zm0 3h.008v.008H6.75V18z" }) }));
28
43
  }
29
- function CustomersIcon() {
30
- return (_jsx("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z" }) }));
44
+ function CustomersIcon({ className = 'h-5 w-5' }) {
45
+ return (_jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z" }) }));
31
46
  }
32
- function SettingsIcon() {
33
- return (_jsxs("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: [_jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" })] }));
47
+ function SettingsIcon({ className = 'h-5 w-5' }) {
48
+ return (_jsxs("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: [_jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z" }), _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" })] }));
49
+ }
50
+ function ExternalLinkIcon({ className = 'h-4 w-4' }) {
51
+ return (_jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M13.5 6H5.25A2.25 2.25 0 003 8.25v10.5A2.25 2.25 0 005.25 21h10.5A2.25 2.25 0 0018 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25" }) }));
52
+ }
53
+ // Rovela Logo Image
54
+ function RovelaLogo({ className = 'h-4 w-4' }) {
55
+ return (
56
+ // eslint-disable-next-line @next/next/no-img-element
57
+ _jsx("img", { src: "/rovela-logo.png", alt: "Rovela", className: className }));
34
58
  }
35
59
  const iconMap = {
36
60
  dashboard: DashboardIcon,
@@ -41,23 +65,46 @@ const iconMap = {
41
65
  settings: SettingsIcon,
42
66
  };
43
67
  // =============================================================================
68
+ // Nav Item Component
69
+ // =============================================================================
70
+ function NavItemButton({ item, isActive, }) {
71
+ const Icon = item.icon || iconMap[item.id];
72
+ return (_jsxs("a", { href: item.href, className: `
73
+ group flex items-center gap-3 rounded-lg px-3 py-2.5 text-sm font-medium
74
+ transition-all duration-200 ease-out
75
+ ${isActive
76
+ ? 'bg-primary/10 text-primary'
77
+ : 'text-muted-foreground hover:bg-accent hover:text-foreground'}
78
+ `, children: [_jsx("span", { className: `
79
+ absolute left-0 h-8 w-1 rounded-r-full bg-primary
80
+ transition-all duration-200
81
+ ${isActive ? 'opacity-100' : 'opacity-0'}
82
+ ` }), _jsx("span", { className: `
83
+ transition-transform duration-200
84
+ ${!isActive ? 'group-hover:translate-x-0.5' : ''}
85
+ `, children: typeof Icon === 'function' ? _jsx(Icon, { className: "h-5 w-5" }) : Icon }), _jsx("span", { className: `
86
+ transition-transform duration-200
87
+ ${!isActive ? 'group-hover:translate-x-0.5' : ''}
88
+ `, children: item.label })] }));
89
+ }
90
+ // =============================================================================
44
91
  // Component
45
92
  // =============================================================================
46
93
  /**
47
- * Admin sidebar navigation.
94
+ * Admin sidebar navigation with grouped sections and elegant styling.
48
95
  *
49
96
  * @example
50
97
  * ```tsx
51
98
  * <AdminNav activeNav="dashboard" storeName="My Store" />
52
99
  * ```
53
100
  */
54
- export function AdminNav({ activeNav, items = defaultNavItems, storeName = 'Admin', logo, className = '', }) {
55
- return (_jsxs("nav", { className: `flex h-full w-64 flex-col border-r border-border bg-card ${className}`, children: [_jsx("div", { className: "flex h-16 items-center border-b border-border px-6", children: logo || (_jsx("span", { className: "text-lg font-semibold text-foreground", children: storeName })) }), _jsx("div", { className: "flex-1 overflow-y-auto py-4", children: _jsx("ul", { className: "space-y-1 px-3", children: items.map((item) => {
56
- const isActive = activeNav === item.id;
57
- const Icon = item.icon || iconMap[item.id];
58
- return (_jsx("li", { children: _jsxs("a", { href: item.href, className: `flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors ${isActive
59
- ? 'bg-primary text-primary-foreground'
60
- : 'text-muted-foreground hover:bg-accent hover:text-accent-foreground'}`, children: [typeof Icon === 'function' ? _jsx(Icon, {}) : Icon, item.label] }) }, item.id));
61
- }) }) }), _jsx("div", { className: "border-t border-border p-4", children: _jsx("p", { className: "text-xs text-muted-foreground", children: "Powered by Rovela" }) })] }));
101
+ export function AdminNav({ activeNav, items, storeName = 'Admin', logo, storeUrl = '/', className = '', }) {
102
+ // If custom items provided, use flat list; otherwise use groups
103
+ const useGroups = !items;
104
+ return (_jsxs("nav", { className: `flex h-full w-64 flex-col bg-card ${className}`, children: [_jsx("div", { className: "flex h-16 items-center gap-3 border-b border-border px-5", children: logo || (_jsxs(_Fragment, { children: [_jsx("div", { className: "flex h-9 w-9 items-center justify-center rounded-lg bg-primary/10 text-primary font-semibold", children: storeName.charAt(0).toUpperCase() }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-sm font-semibold text-foreground leading-tight", children: storeName }), _jsx("span", { className: "text-xs text-muted-foreground", children: "Admin Panel" })] })] })) }), _jsx("div", { className: "flex-1 overflow-y-auto px-3 py-4", children: useGroups ? (
105
+ // Grouped navigation
106
+ _jsx("div", { className: "space-y-6", children: defaultNavGroups.map((group) => (_jsxs("div", { children: [_jsx("p", { className: "mb-2 px-3 text-xs font-semibold uppercase tracking-wider text-muted-foreground/70", children: group.label }), _jsx("ul", { className: "space-y-1", children: group.items.map((item) => (_jsx("li", { className: "relative", children: _jsx(NavItemButton, { item: item, isActive: activeNav === item.id }) }, item.id))) })] }, group.label))) })) : (
107
+ // Flat navigation (custom items)
108
+ _jsx("ul", { className: "space-y-1", children: items?.map((item) => (_jsx("li", { className: "relative", children: _jsx(NavItemButton, { item: item, isActive: activeNav === item.id }) }, item.id))) })) }), _jsx("div", { className: "border-t border-border px-3 py-3", children: _jsx("div", { className: "relative", children: _jsx(NavItemButton, { item: settingsItem, isActive: activeNav === 'settings' }) }) }), _jsxs("div", { className: "border-t border-border px-4 py-4 space-y-3", children: [_jsxs("a", { href: storeUrl, target: "_blank", rel: "noopener noreferrer", className: "flex items-center justify-center gap-2 rounded-lg border border-border px-3 py-2 text-sm font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground", children: [_jsx(ExternalLinkIcon, { className: "h-4 w-4" }), "View Store"] }), _jsxs("div", { className: "flex items-center justify-center gap-1.5 text-xs text-muted-foreground/60", children: [_jsx("span", { children: "Powered by" }), _jsx(RovelaLogo, { className: "h-4 w-4" }), _jsx("span", { className: "font-medium", children: "Rovela" })] })] })] }));
62
109
  }
63
110
  //# sourceMappingURL=AdminNav.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminNav.js","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AdminNav.js","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import type { LowStockAlertProps } from '../types';
2
2
  /**
3
- * Low stock alert widget for dashboard.
3
+ * Low stock alert widget for dashboard with success state.
4
4
  *
5
5
  * @example
6
6
  * ```tsx
7
7
  * <LowStockAlert threshold={10} viewAllHref="/admin/products?filter=low-stock" />
8
8
  * ```
9
9
  */
10
- export declare function LowStockAlert({ threshold, viewAllHref, className, }: LowStockAlertProps): import("react/jsx-runtime").JSX.Element | null;
10
+ export declare function LowStockAlert({ threshold, viewAllHref, className, }: LowStockAlertProps): import("react/jsx-runtime").JSX.Element;
11
11
  //# sourceMappingURL=LowStockAlert.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LowStockAlert.d.ts","sourceRoot":"","sources":["../../../src/admin/components/LowStockAlert.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAMlD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAc,EACd,WAA+B,EAC/B,SAAc,GACf,EAAE,kBAAkB,kDAiGpB"}
1
+ {"version":3,"file":"LowStockAlert.d.ts","sourceRoot":"","sources":["../../../src/admin/components/LowStockAlert.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AA0BlD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAc,EACd,WAA+B,EAC/B,SAAc,GACf,EAAE,kBAAkB,2CAoHpB"}
@@ -3,14 +3,23 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  /**
4
4
  * @rovela/sdk/admin/components/LowStockAlert
5
5
  *
6
- * Low stock inventory warning widget.
6
+ * Low stock inventory warning widget with theme-aware styling.
7
7
  */
8
8
  import { useAdminStats } from '../hooks/useAdminStats';
9
9
  // =============================================================================
10
+ // Icons
11
+ // =============================================================================
12
+ function AlertIcon({ className = 'h-5 w-5' }) {
13
+ return (_jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z" }) }));
14
+ }
15
+ function CheckIcon({ className = 'h-5 w-5' }) {
16
+ return (_jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }));
17
+ }
18
+ // =============================================================================
10
19
  // Component
11
20
  // =============================================================================
12
21
  /**
13
- * Low stock alert widget for dashboard.
22
+ * Low stock alert widget for dashboard with success state.
14
23
  *
15
24
  * @example
16
25
  * ```tsx
@@ -21,12 +30,10 @@ export function LowStockAlert({ threshold = 10, viewAllHref = '/admin/products',
21
30
  const { lowStock, isLoading } = useAdminStats({
22
31
  lowStockThreshold: threshold,
23
32
  });
24
- // Don't show if no low stock items
25
- if (!isLoading && lowStock.length === 0) {
26
- return null;
27
- }
28
- return (_jsxs("div", { className: `rounded-lg border border-border bg-card ${className}`, children: [_jsxs("div", { className: "flex items-center justify-between border-b border-border px-6 py-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("svg", { className: "h-5 w-5 text-amber-500", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }), _jsx("h3", { className: "text-lg font-medium text-foreground", children: "Low Stock Alert" }), !isLoading && (_jsxs("span", { className: "rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-800", children: [lowStock.length, " item", lowStock.length !== 1 ? 's' : ''] }))] }), _jsx("a", { href: viewAllHref, className: "text-sm text-primary hover:underline", children: "View all" })] }), _jsx("div", { className: "divide-y divide-border", children: isLoading ? (_jsx("div", { className: "p-6", children: _jsx("div", { className: "space-y-4", children: [...Array(3)].map((_, i) => (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-3 w-20 animate-pulse rounded bg-muted" })] }), _jsx("div", { className: "h-6 w-16 animate-pulse rounded bg-muted" })] }, i))) }) })) : (lowStock.slice(0, 5).map((item) => (_jsxs("div", { className: "flex items-center justify-between px-6 py-4 hover:bg-muted/50", children: [_jsxs("div", { children: [_jsx("a", { href: `/admin/products/${item.productId}`, className: "font-medium text-foreground hover:text-primary", children: item.productName }), _jsx("p", { className: "text-sm text-muted-foreground", children: item.variantName })] }), _jsx("div", { className: "flex items-center gap-2", children: _jsx("span", { className: `rounded-full px-2 py-1 text-xs font-medium ${item.inventory === 0
29
- ? 'bg-red-100 text-red-800'
30
- : 'bg-amber-100 text-amber-800'}`, children: item.inventory === 0 ? 'Out of stock' : `${item.inventory} left` }) })] }, item.variantId)))) }), !isLoading && lowStock.length > 5 && (_jsx("div", { className: "border-t border-border px-6 py-3 text-center", children: _jsxs("a", { href: viewAllHref, className: "text-sm text-primary hover:underline", children: ["+", lowStock.length - 5, " more items"] }) }))] }));
33
+ return (_jsxs("div", { className: `rounded-xl border border-border bg-card ${className}`, children: [_jsxs("div", { className: "flex items-center justify-between border-b border-border px-6 py-4", children: [_jsxs("div", { className: "flex items-center gap-3", children: [!isLoading && lowStock.length === 0 ? (_jsx("div", { className: "rounded-full bg-emerald-500/10 p-2", children: _jsx(CheckIcon, { className: "h-5 w-5 text-emerald-600 dark:text-emerald-400" }) })) : (_jsx("div", { className: "rounded-full bg-amber-500/10 p-2", children: _jsx(AlertIcon, { className: "h-5 w-5 text-amber-600 dark:text-amber-400" }) })), _jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold text-foreground", children: !isLoading && lowStock.length === 0 ? 'Inventory Healthy' : 'Low Stock Alert' }), _jsx("p", { className: "text-sm text-muted-foreground", children: !isLoading && lowStock.length === 0
34
+ ? 'All products are well stocked'
35
+ : `${lowStock.length} item${lowStock.length !== 1 ? 's' : ''} need attention` })] })] }), lowStock.length > 0 && (_jsxs("a", { href: viewAllHref, className: "inline-flex items-center gap-1 text-sm font-medium text-primary transition-colors hover:text-primary/80", children: ["View all", _jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })] }))] }), _jsxs("div", { children: [isLoading ? (_jsx("div", { className: "p-6", children: _jsx("div", { className: "space-y-4", children: [...Array(3)].map((_, i) => (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-3 w-20 animate-pulse rounded bg-muted" })] }), _jsx("div", { className: "h-6 w-16 animate-pulse rounded bg-muted" })] }, i))) }) })) : lowStock.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center justify-center py-12 text-center", children: [_jsx("div", { className: "rounded-full bg-emerald-500/10 p-4", children: _jsx(CheckIcon, { className: "h-8 w-8 text-emerald-600 dark:text-emerald-400" }) }), _jsx("p", { className: "mt-4 text-sm font-medium text-foreground", children: "All stocked up!" }), _jsxs("p", { className: "text-xs text-muted-foreground", children: ["No products below ", threshold, " units in stock"] })] })) : (_jsx("div", { className: "divide-y divide-border", children: lowStock.slice(0, 5).map((item) => (_jsxs("div", { className: "flex items-center justify-between px-6 py-4 transition-colors hover:bg-muted/50", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("a", { href: `/admin/products/${item.productId}`, className: "block truncate font-medium text-foreground transition-colors hover:text-primary", children: item.productName }), _jsx("p", { className: "truncate text-sm text-muted-foreground", children: item.variantName })] }), _jsx("div", { className: "ml-4 flex-shrink-0", children: _jsx("span", { className: `inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${item.inventory === 0
36
+ ? 'bg-red-500/10 text-red-600 dark:text-red-400'
37
+ : 'bg-amber-500/10 text-amber-600 dark:text-amber-400'}`, children: item.inventory === 0 ? 'Out of stock' : `${item.inventory} left` }) })] }, item.variantId))) })), !isLoading && lowStock.length > 5 && (_jsx("div", { className: "border-t border-border px-6 py-3 text-center", children: _jsxs("a", { href: viewAllHref, className: "text-sm font-medium text-primary transition-colors hover:text-primary/80", children: ["+", lowStock.length - 5, " more items"] }) }))] })] }));
31
38
  }
32
39
  //# sourceMappingURL=LowStockAlert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LowStockAlert.js","sourceRoot":"","sources":["../../../src/admin/components/LowStockAlert.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAGtD,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,SAAS,GAAG,EAAE,EACd,WAAW,GAAG,iBAAiB,EAC/B,SAAS,GAAG,EAAE,GACK;IACnB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;QAC5C,iBAAiB,EAAE,SAAS;KAC7B,CAAC,CAAA;IAEF,mCAAmC;IACnC,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAE,2CAA2C,SAAS,EAAE,aAEpE,eAAK,SAAS,EAAC,oEAAoE,aACjF,eAAK,SAAS,EAAC,yBAAyB,aACtC,cACE,SAAS,EAAC,wBAAwB,EAClC,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EACnB,MAAM,EAAC,cAAc,YAErB,eACE,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,CAAC,EACd,CAAC,EAAC,sIAAsI,GACxI,GACE,EACN,aAAI,SAAS,EAAC,qCAAqC,gCAAqB,EACvE,CAAC,SAAS,IAAI,CACb,gBAAM,SAAS,EAAC,0EAA0E,aACvF,QAAQ,CAAC,MAAM,WAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAClD,CACR,IACG,EACN,YAAG,IAAI,EAAE,WAAW,EAAE,SAAS,EAAC,sCAAsC,yBAElE,IACA,EAGN,cAAK,SAAS,EAAC,wBAAwB,YACpC,SAAS,CAAC,CAAC,CAAC,CACX,cAAK,SAAS,EAAC,KAAK,YAClB,cAAK,SAAS,EAAC,WAAW,YACvB,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAC3B,eAAa,SAAS,EAAC,mCAAmC,aACxD,eAAK,SAAS,EAAC,WAAW,aACxB,cAAK,SAAS,EAAC,yCAAyC,GAAG,EAC3D,cAAK,SAAS,EAAC,yCAAyC,GAAG,IACvD,EACN,cAAK,SAAS,EAAC,yCAAyC,GAAG,KALnD,CAAC,CAML,CACP,CAAC,GACE,GACF,CACP,CAAC,CAAC,CAAC,CACF,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACjC,eAEE,SAAS,EAAC,+DAA+D,aAEzE,0BACE,YACE,IAAI,EAAE,mBAAmB,IAAI,CAAC,SAAS,EAAE,EACzC,SAAS,EAAC,gDAAgD,YAEzD,IAAI,CAAC,WAAW,GACf,EACJ,YAAG,SAAS,EAAC,+BAA+B,YAAE,IAAI,CAAC,WAAW,GAAK,IAC/D,EACN,cAAK,SAAS,EAAC,yBAAyB,YACtC,eACE,SAAS,EAAE,8CACT,IAAI,CAAC,SAAS,KAAK,CAAC;oCAClB,CAAC,CAAC,yBAAyB;oCAC3B,CAAC,CAAC,6BACN,EAAE,YAED,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,OAAO,GAC5D,GACH,KAtBD,IAAI,CAAC,SAAS,CAuBf,CACP,CAAC,CACH,GACG,EAGL,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACpC,cAAK,SAAS,EAAC,8CAA8C,YAC3D,aAAG,IAAI,EAAE,WAAW,EAAE,SAAS,EAAC,sCAAsC,kBAClE,QAAQ,CAAC,MAAM,GAAG,CAAC,mBACnB,GACA,CACP,IACG,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"LowStockAlert.js","sourceRoot":"","sources":["../../../src/admin/components/LowStockAlert.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface OrderStatusChartProps {
2
+ /** Order counts by status */
3
+ data: {
4
+ status: string;
5
+ count: number;
6
+ }[];
7
+ /** Loading state */
8
+ isLoading?: boolean;
9
+ /** Custom className */
10
+ className?: string;
11
+ }
12
+ /**
13
+ * Order status donut chart showing breakdown by status.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * <OrderStatusChart data={ordersByStatus} isLoading={isLoading} />
18
+ * ```
19
+ */
20
+ export declare function OrderStatusChart({ data, isLoading, className, }: OrderStatusChartProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=OrderStatusChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderStatusChart.d.ts","sourceRoot":"","sources":["../../../src/admin/components/OrderStatusChart.tsx"],"names":[],"mappings":"AAcA,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,oBAAoB;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAkDD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,SAAiB,EACjB,SAAc,GACf,EAAE,qBAAqB,2CAqGvB"}
@@ -0,0 +1,54 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * @rovela/sdk/admin/components/OrderStatusChart
5
+ *
6
+ * Order status breakdown donut chart for dashboard.
7
+ */
8
+ import { Cell, Pie, PieChart, ResponsiveContainer, Tooltip } from 'recharts';
9
+ // =============================================================================
10
+ // Status Configuration
11
+ // =============================================================================
12
+ const statusConfig = {
13
+ pending: { label: 'Pending', color: 'hsl(45 93% 47%)' }, // Amber
14
+ paid: { label: 'Paid', color: 'hsl(142 76% 36%)' }, // Green
15
+ shipped: { label: 'Shipped', color: 'hsl(217 91% 60%)' }, // Blue
16
+ delivered: { label: 'Delivered', color: 'hsl(142 71% 45%)' }, // Emerald
17
+ cancelled: { label: 'Cancelled', color: 'hsl(0 84% 60%)' }, // Red
18
+ refunded: { label: 'Refunded', color: 'hsl(220 9% 46%)' }, // Gray
19
+ };
20
+ function CustomTooltip({ active, payload }) {
21
+ if (!active || !payload || !payload.length)
22
+ return null;
23
+ const data = payload[0].payload;
24
+ const config = statusConfig[data.status] || { label: data.status, color: 'hsl(220 9% 46%)' };
25
+ return (_jsxs("div", { className: "rounded-lg border border-border bg-card px-3 py-2 shadow-lg", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "h-3 w-3 rounded-full", style: { backgroundColor: config.color } }), _jsx("span", { className: "text-sm font-medium text-foreground", children: config.label })] }), _jsxs("p", { className: "mt-1 text-lg font-semibold text-foreground", children: [data.count.toLocaleString(), " orders"] })] }));
26
+ }
27
+ // =============================================================================
28
+ // Component
29
+ // =============================================================================
30
+ /**
31
+ * Order status donut chart showing breakdown by status.
32
+ *
33
+ * @example
34
+ * ```tsx
35
+ * <OrderStatusChart data={ordersByStatus} isLoading={isLoading} />
36
+ * ```
37
+ */
38
+ export function OrderStatusChart({ data, isLoading = false, className = '', }) {
39
+ // Process data with colors
40
+ const chartData = data.map((item) => ({
41
+ ...item,
42
+ color: statusConfig[item.status]?.color || 'hsl(220 9% 46%)',
43
+ label: statusConfig[item.status]?.label || item.status,
44
+ }));
45
+ // Calculate total
46
+ const totalOrders = data.reduce((sum, item) => sum + item.count, 0);
47
+ return (_jsxs("div", { className: `rounded-xl border border-border bg-card ${className}`, children: [_jsxs("div", { className: "border-b border-border px-6 py-4", children: [_jsx("h3", { className: "text-lg font-semibold text-foreground", children: "Order Status" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Distribution by status" })] }), _jsx("div", { className: "p-6", children: isLoading ? (_jsx("div", { className: "flex h-64 items-center justify-center", children: _jsx("div", { className: "h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent" }) })) : totalOrders === 0 ? (_jsxs("div", { className: "flex h-64 flex-col items-center justify-center text-center", children: [_jsx("svg", { className: "h-12 w-12 text-muted-foreground/30", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15.75 10.5V6a3.75 3.75 0 10-7.5 0v4.5m11.356-1.993l1.263 12c.07.665-.45 1.243-1.119 1.243H4.25a1.125 1.125 0 01-1.12-1.243l1.264-12A1.125 1.125 0 015.513 7.5h12.974c.576 0 1.059.435 1.119 1.007zM8.625 10.5a.375.375 0 11-.75 0 .375.375 0 01.75 0zm7.5 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z" }) }), _jsx("p", { className: "mt-4 text-sm text-muted-foreground", children: "No orders yet" }), _jsx("p", { className: "text-xs text-muted-foreground/70", children: "Order breakdown will appear here" })] })) : (_jsxs("div", { className: "flex items-center gap-6", children: [_jsxs("div", { className: "relative flex-shrink-0", children: [_jsx(ResponsiveContainer, { width: 180, height: 180, children: _jsxs(PieChart, { children: [_jsx(Pie, { data: chartData, cx: "50%", cy: "50%", innerRadius: 55, outerRadius: 80, paddingAngle: 2, dataKey: "count", children: chartData.map((entry, index) => (_jsx(Cell, { fill: entry.color }, `cell-${index}`))) }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) })] }) }), _jsxs("div", { className: "absolute inset-0 flex flex-col items-center justify-center", children: [_jsx("p", { className: "text-2xl font-bold text-foreground", children: totalOrders }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Total" })] })] }), _jsx("div", { className: "flex-1 space-y-2", children: chartData.map((item) => {
48
+ const percentage = totalOrders > 0
49
+ ? Math.round((item.count / totalOrders) * 100)
50
+ : 0;
51
+ return (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "h-3 w-3 rounded-full", style: { backgroundColor: item.color } }), _jsx("span", { className: "text-sm text-foreground", children: item.label })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-sm font-medium text-foreground", children: item.count }), _jsxs("span", { className: "text-xs text-muted-foreground", children: ["(", percentage, "%)"] })] })] }, item.status));
52
+ }) })] })) })] }));
53
+ }
54
+ //# sourceMappingURL=OrderStatusChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderStatusChart.js","sourceRoot":"","sources":["../../../src/admin/components/OrderStatusChart.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { RecentOrdersProps } from '../types';
2
2
  /**
3
- * Recent orders widget for dashboard.
3
+ * Recent orders widget for dashboard with elegant styling.
4
4
  *
5
5
  * @example
6
6
  * ```tsx
@@ -1 +1 @@
1
- {"version":3,"file":"RecentOrders.d.ts","sourceRoot":"","sources":["../../../src/admin/components/RecentOrders.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AA+BjD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAS,EACT,WAA6B,EAC7B,SAAc,GACf,EAAE,iBAAiB,2CAgGnB"}
1
+ {"version":3,"file":"RecentOrders.d.ts","sourceRoot":"","sources":["../../../src/admin/components/RecentOrders.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAgCjD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAS,EACT,WAA6B,EAC7B,SAAc,GACf,EAAE,iBAAiB,2CAgHnB"}
@@ -3,28 +3,29 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  /**
4
4
  * @rovela/sdk/admin/components/RecentOrders
5
5
  *
6
- * Recent orders table for dashboard.
6
+ * Recent orders table for dashboard with theme-aware styling.
7
7
  */
8
8
  import { useAdminStats } from '../hooks/useAdminStats';
9
9
  // =============================================================================
10
10
  // Status Badge
11
11
  // =============================================================================
12
12
  function StatusBadge({ status }) {
13
+ // Theme-aware status styles using CSS variables
13
14
  const statusStyles = {
14
- pending: 'bg-yellow-100 text-yellow-800',
15
- paid: 'bg-green-100 text-green-800',
16
- shipped: 'bg-blue-100 text-blue-800',
17
- delivered: 'bg-green-100 text-green-800',
18
- cancelled: 'bg-red-100 text-red-800',
19
- refunded: 'bg-gray-100 text-gray-800',
15
+ pending: 'bg-amber-500/10 text-amber-600 dark:text-amber-400',
16
+ paid: 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400',
17
+ shipped: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',
18
+ delivered: 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400',
19
+ cancelled: 'bg-red-500/10 text-red-600 dark:text-red-400',
20
+ refunded: 'bg-muted text-muted-foreground',
20
21
  };
21
- return (_jsx("span", { className: `inline-flex rounded-full px-2 py-1 text-xs font-medium ${statusStyles[status] || 'bg-gray-100 text-gray-800'}`, children: status.charAt(0).toUpperCase() + status.slice(1) }));
22
+ return (_jsx("span", { className: `inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${statusStyles[status] || 'bg-muted text-muted-foreground'}`, children: status.charAt(0).toUpperCase() + status.slice(1) }));
22
23
  }
23
24
  // =============================================================================
24
25
  // Component
25
26
  // =============================================================================
26
27
  /**
27
- * Recent orders widget for dashboard.
28
+ * Recent orders widget for dashboard with elegant styling.
28
29
  *
29
30
  * @example
30
31
  * ```tsx
@@ -50,6 +51,6 @@ export function RecentOrders({ limit = 5, viewAllHref = '/admin/orders', classNa
50
51
  currency: 'USD',
51
52
  }).format(parseFloat(value));
52
53
  };
53
- return (_jsxs("div", { className: `rounded-lg border border-border bg-card ${className}`, children: [_jsxs("div", { className: "flex items-center justify-between border-b border-border px-6 py-4", children: [_jsx("h3", { className: "text-lg font-medium text-foreground", children: "Recent Orders" }), _jsx("a", { href: viewAllHref, className: "text-sm text-primary hover:underline", children: "View all" })] }), _jsx("div", { className: "overflow-x-auto", children: isLoading ? (_jsx("div", { className: "p-6", children: _jsx("div", { className: "space-y-4", children: [...Array(limit)].map((_, i) => (_jsxs("div", { className: "flex items-center gap-4", children: [_jsx("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-4 w-16 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })] }, i))) }) })) : recentOrders.length === 0 ? (_jsx("div", { className: "py-12 text-center", children: _jsx("p", { className: "text-muted-foreground", children: "No orders yet" }) })) : (_jsxs("table", { className: "w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-border bg-muted/50 text-left text-xs font-medium uppercase text-muted-foreground", children: [_jsx("th", { className: "px-6 py-3", children: "Order" }), _jsx("th", { className: "px-6 py-3", children: "Customer" }), _jsx("th", { className: "px-6 py-3", children: "Status" }), _jsx("th", { className: "px-6 py-3", children: "Total" }), _jsx("th", { className: "px-6 py-3", children: "Date" })] }) }), _jsx("tbody", { className: "divide-y divide-border", children: recentOrders.map((order) => (_jsxs("tr", { className: "hover:bg-muted/50", children: [_jsx("td", { className: "whitespace-nowrap px-6 py-4", children: _jsxs("a", { href: `/admin/orders/${order.id}`, className: "font-medium text-primary hover:underline", children: ["#", order.id.slice(-8).toUpperCase()] }) }), _jsx("td", { className: "whitespace-nowrap px-6 py-4 text-sm text-foreground", children: order.email }), _jsx("td", { className: "whitespace-nowrap px-6 py-4", children: _jsx(StatusBadge, { status: order.status }) }), _jsx("td", { className: "whitespace-nowrap px-6 py-4 text-sm font-medium text-foreground", children: formatCurrency(order.total) }), _jsx("td", { className: "whitespace-nowrap px-6 py-4 text-sm text-muted-foreground", children: formatDate(order.createdAt) })] }, order.id))) })] })) })] }));
54
+ return (_jsxs("div", { className: `rounded-xl border border-border bg-card ${className}`, children: [_jsxs("div", { className: "flex items-center justify-between border-b border-border px-6 py-4", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold text-foreground", children: "Recent Orders" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Latest customer orders" })] }), _jsxs("a", { href: viewAllHref, className: "inline-flex items-center gap-1 text-sm font-medium text-primary transition-colors hover:text-primary/80", children: ["View all", _jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })] })] }), _jsx("div", { className: "overflow-x-auto", children: isLoading ? (_jsx("div", { className: "p-6", children: _jsx("div", { className: "space-y-4", children: [...Array(limit)].map((_, i) => (_jsxs("div", { className: "flex items-center gap-4", children: [_jsx("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-4 w-16 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })] }, i))) }) })) : recentOrders.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center justify-center py-12 text-center", children: [_jsx("svg", { className: "h-12 w-12 text-muted-foreground/30", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15.75 10.5V6a3.75 3.75 0 10-7.5 0v4.5m11.356-1.993l1.263 12c.07.665-.45 1.243-1.119 1.243H4.25a1.125 1.125 0 01-1.12-1.243l1.264-12A1.125 1.125 0 015.513 7.5h12.974c.576 0 1.059.435 1.119 1.007zM8.625 10.5a.375.375 0 11-.75 0 .375.375 0 01.75 0zm7.5 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z" }) }), _jsx("p", { className: "mt-4 text-sm text-muted-foreground", children: "No orders yet" }), _jsx("p", { className: "text-xs text-muted-foreground/70", children: "Orders will appear here as they come in" })] })) : (_jsxs("table", { className: "w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-border text-left text-xs font-medium uppercase tracking-wider text-muted-foreground", children: [_jsx("th", { className: "px-6 py-3", children: "Order" }), _jsx("th", { className: "px-6 py-3", children: "Customer" }), _jsx("th", { className: "px-6 py-3", children: "Status" }), _jsx("th", { className: "px-6 py-3 text-right", children: "Total" }), _jsx("th", { className: "px-6 py-3 text-right", children: "Date" })] }) }), _jsx("tbody", { className: "divide-y divide-border", children: recentOrders.map((order) => (_jsxs("tr", { className: "group transition-colors hover:bg-muted/50", children: [_jsx("td", { className: "whitespace-nowrap px-6 py-4", children: _jsxs("a", { href: `/admin/orders/${order.id}`, className: "font-medium text-primary transition-colors hover:text-primary/80", children: ["#", order.id.slice(-8).toUpperCase()] }) }), _jsx("td", { className: "whitespace-nowrap px-6 py-4 text-sm text-foreground", children: order.email }), _jsx("td", { className: "whitespace-nowrap px-6 py-4", children: _jsx(StatusBadge, { status: order.status }) }), _jsx("td", { className: "whitespace-nowrap px-6 py-4 text-right text-sm font-medium text-foreground", children: formatCurrency(order.total) }), _jsx("td", { className: "whitespace-nowrap px-6 py-4 text-right text-sm text-muted-foreground", children: formatDate(order.createdAt) })] }, order.id))) })] })) })] }));
54
55
  }
55
56
  //# sourceMappingURL=RecentOrders.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RecentOrders.js","sourceRoot":"","sources":["../../../src/admin/components/RecentOrders.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RecentOrders.js","sourceRoot":"","sources":["../../../src/admin/components/RecentOrders.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface RevenueChartProps {
2
+ /** Revenue data by day */
3
+ data: {
4
+ date: string;
5
+ revenue: number;
6
+ }[];
7
+ /** Loading state */
8
+ isLoading?: boolean;
9
+ /** Currency code for formatting */
10
+ currency?: string;
11
+ /** Custom className */
12
+ className?: string;
13
+ }
14
+ /**
15
+ * Revenue chart showing last 30 days of revenue data.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <RevenueChart data={revenueByDay} isLoading={isLoading} />
20
+ * ```
21
+ */
22
+ export declare function RevenueChart({ data, isLoading, currency, className, }: RevenueChartProps): import("react/jsx-runtime").JSX.Element;
23
+ //# sourceMappingURL=RevenueChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RevenueChart.d.ts","sourceRoot":"","sources":["../../../src/admin/components/RevenueChart.tsx"],"names":[],"mappings":"AAsBA,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,oBAAoB;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA+CD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,SAAiB,EACjB,QAAgB,EAChB,SAAc,GACf,EAAE,iBAAiB,2CAiHnB"}
@@ -0,0 +1,70 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * @rovela/sdk/admin/components/RevenueChart
5
+ *
6
+ * 30-day revenue line chart for dashboard.
7
+ */
8
+ import { Area, AreaChart, CartesianGrid, ResponsiveContainer, Tooltip, XAxis, YAxis, } from 'recharts';
9
+ function CustomTooltip({ active, payload, label, currency }) {
10
+ if (!active || !payload || !payload.length)
11
+ return null;
12
+ const formatCurrency = (value) => {
13
+ return new Intl.NumberFormat('en-US', {
14
+ style: 'currency',
15
+ currency,
16
+ minimumFractionDigits: 0,
17
+ maximumFractionDigits: 0,
18
+ }).format(value);
19
+ };
20
+ const formatDate = (dateStr) => {
21
+ const date = new Date(dateStr);
22
+ return date.toLocaleDateString('en-US', {
23
+ month: 'short',
24
+ day: 'numeric',
25
+ });
26
+ };
27
+ return (_jsxs("div", { className: "rounded-lg border border-border bg-card px-3 py-2 shadow-lg", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: label ? formatDate(label) : '' }), _jsx("p", { className: "text-sm font-semibold text-foreground", children: formatCurrency(payload[0].value) })] }));
28
+ }
29
+ // =============================================================================
30
+ // Component
31
+ // =============================================================================
32
+ /**
33
+ * Revenue chart showing last 30 days of revenue data.
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * <RevenueChart data={revenueByDay} isLoading={isLoading} />
38
+ * ```
39
+ */
40
+ export function RevenueChart({ data, isLoading = false, currency = 'USD', className = '', }) {
41
+ const formatCurrency = (value) => {
42
+ return new Intl.NumberFormat('en-US', {
43
+ style: 'currency',
44
+ currency,
45
+ notation: 'compact',
46
+ minimumFractionDigits: 0,
47
+ maximumFractionDigits: 1,
48
+ }).format(value);
49
+ };
50
+ const formatXAxis = (dateStr) => {
51
+ const date = new Date(dateStr);
52
+ return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
53
+ };
54
+ // Calculate total revenue
55
+ const totalRevenue = data.reduce((sum, item) => sum + item.revenue, 0);
56
+ // Show only every 5th label on x-axis to avoid crowding
57
+ const tickFormatter = (value, index) => {
58
+ if (index % 5 === 0 || index === data.length - 1) {
59
+ return formatXAxis(value);
60
+ }
61
+ return '';
62
+ };
63
+ return (_jsxs("div", { className: `rounded-xl border border-border bg-card ${className}`, children: [_jsxs("div", { className: "flex items-center justify-between border-b border-border px-6 py-4", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold text-foreground", children: "Revenue" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Last 30 days" })] }), !isLoading && (_jsxs("div", { className: "text-right", children: [_jsx("p", { className: "text-2xl font-bold text-foreground", children: new Intl.NumberFormat('en-US', {
64
+ style: 'currency',
65
+ currency,
66
+ minimumFractionDigits: 0,
67
+ maximumFractionDigits: 0,
68
+ }).format(totalRevenue) }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Total" })] }))] }), _jsx("div", { className: "p-6", children: isLoading ? (_jsx("div", { className: "flex h-64 items-center justify-center", children: _jsx("div", { className: "h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent" }) })) : data.length === 0 ? (_jsxs("div", { className: "flex h-64 flex-col items-center justify-center text-center", children: [_jsx("svg", { className: "h-12 w-12 text-muted-foreground/30", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z" }) }), _jsx("p", { className: "mt-4 text-sm text-muted-foreground", children: "No revenue data yet" }), _jsx("p", { className: "text-xs text-muted-foreground/70", children: "Revenue will appear here after your first sale" })] })) : (_jsx(ResponsiveContainer, { width: "100%", height: 256, children: _jsxs(AreaChart, { data: data, margin: { top: 10, right: 10, left: 0, bottom: 0 }, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: "revenueGradient", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: "hsl(var(--primary))", stopOpacity: 0.3 }), _jsx("stop", { offset: "100%", stopColor: "hsl(var(--primary))", stopOpacity: 0 })] }) }), _jsx(CartesianGrid, { strokeDasharray: "3 3", vertical: false, stroke: "hsl(var(--border))" }), _jsx(XAxis, { dataKey: "date", tickFormatter: tickFormatter, axisLine: false, tickLine: false, tick: { fill: 'hsl(var(--muted-foreground))', fontSize: 12 }, dy: 10 }), _jsx(YAxis, { tickFormatter: formatCurrency, axisLine: false, tickLine: false, tick: { fill: 'hsl(var(--muted-foreground))', fontSize: 12 }, width: 60 }), _jsx(Tooltip, { content: _jsx(CustomTooltip, { currency: currency }) }), _jsx(Area, { type: "monotone", dataKey: "revenue", stroke: "hsl(var(--primary))", strokeWidth: 2, fill: "url(#revenueGradient)" })] }) })) })] }));
69
+ }
70
+ //# sourceMappingURL=RevenueChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RevenueChart.js","sourceRoot":"","sources":["../../../src/admin/components/RevenueChart.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * @rovela/sdk/admin/components/StatsCards
3
3
  *
4
- * Dashboard statistics cards.
4
+ * Dashboard statistics cards with elegant design and theme-aware colors.
5
5
  */
6
6
  import type { StatsCardsProps } from '../types';
7
7
  /**
8
- * Dashboard statistics cards showing key metrics.
8
+ * Dashboard statistics cards showing key metrics with elegant design.
9
9
  *
10
10
  * @example
11
11
  * ```tsx
@@ -1 +1 @@
1
- {"version":3,"file":"StatsCards.d.ts","sourceRoot":"","sources":["../../../src/admin/components/StatsCards.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AA0C/C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,SAAiB,EACjB,QAAgB,EAChB,SAAc,GACf,EAAE,eAAe,2CAuEjB"}
1
+ {"version":3,"file":"StatsCards.d.ts","sourceRoot":"","sources":["../../../src/admin/components/StatsCards.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AA0C/C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,SAAiB,EACjB,QAAgB,EAChB,SAAc,GACf,EAAE,eAAe,2CA2FjB"}
@@ -3,23 +3,23 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  // =============================================================================
4
4
  // Icons
5
5
  // =============================================================================
6
- function RevenueIcon() {
7
- return (_jsx("svg", { className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }));
6
+ function RevenueIcon({ className = 'h-6 w-6' }) {
7
+ return (_jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M2.25 18.75a60.07 60.07 0 0115.797 2.101c.727.198 1.453-.342 1.453-1.096V18.75M3.75 4.5v.75A.75.75 0 013 6h-.75m0 0v-.375c0-.621.504-1.125 1.125-1.125H20.25M2.25 6v9m18-10.5v.75c0 .414.336.75.75.75h.75m-1.5-1.5h.375c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-.375m1.5-1.5H21a.75.75 0 00-.75.75v.75m0 0H3.75m0 0h-.375a1.125 1.125 0 01-1.125-1.125V15m1.5 1.5v-.75A.75.75 0 003 15h-.75M15 10.5a3 3 0 11-6 0 3 3 0 016 0zm3 0h.008v.008H18V10.5zm-12 0h.008v.008H6V10.5z" }) }));
8
8
  }
9
- function OrdersIcon() {
10
- return (_jsx("svg", { className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z" }) }));
9
+ function OrdersIcon({ className = 'h-6 w-6' }) {
10
+ return (_jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15.75 10.5V6a3.75 3.75 0 10-7.5 0v4.5m11.356-1.993l1.263 12c.07.665-.45 1.243-1.119 1.243H4.25a1.125 1.125 0 01-1.12-1.243l1.264-12A1.125 1.125 0 015.513 7.5h12.974c.576 0 1.059.435 1.119 1.007zM8.625 10.5a.375.375 0 11-.75 0 .375.375 0 01.75 0zm7.5 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z" }) }));
11
11
  }
12
- function CustomersIcon() {
13
- return (_jsx("svg", { className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" }) }));
12
+ function CustomersIcon({ className = 'h-6 w-6' }) {
13
+ return (_jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z" }) }));
14
14
  }
15
- function ProductsIcon() {
16
- return (_jsx("svg", { className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4" }) }));
15
+ function ProductsIcon({ className = 'h-6 w-6' }) {
16
+ return (_jsx("svg", { className: className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M20.25 7.5l-.625 10.632a2.25 2.25 0 01-2.247 2.118H6.622a2.25 2.25 0 01-2.247-2.118L3.75 7.5M10 11.25h4M3.375 7.5h17.25c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z" }) }));
17
17
  }
18
18
  // =============================================================================
19
19
  // Component
20
20
  // =============================================================================
21
21
  /**
22
- * Dashboard statistics cards showing key metrics.
22
+ * Dashboard statistics cards showing key metrics with elegant design.
23
23
  *
24
24
  * @example
25
25
  * ```tsx
@@ -38,42 +38,40 @@ export function StatsCards({ stats, isLoading = false, currency = 'USD', classNa
38
38
  return new Intl.NumberFormat('en-US', {
39
39
  style: 'currency',
40
40
  currency,
41
+ minimumFractionDigits: 0,
42
+ maximumFractionDigits: 0,
41
43
  }).format(value);
42
44
  };
43
45
  const cards = [
44
46
  {
45
- label: 'Revenue',
47
+ label: 'Total Revenue',
46
48
  value: stats?.revenue ?? 0,
47
49
  format: formatCurrency,
48
50
  icon: RevenueIcon,
49
- color: 'text-green-600',
50
- bgColor: 'bg-green-100',
51
+ href: '/admin/orders',
51
52
  },
52
53
  {
53
- label: 'Orders',
54
+ label: 'Total Orders',
54
55
  value: stats?.orders ?? 0,
55
56
  format: (v) => v.toLocaleString(),
56
57
  icon: OrdersIcon,
57
- color: 'text-blue-600',
58
- bgColor: 'bg-blue-100',
58
+ href: '/admin/orders',
59
59
  },
60
60
  {
61
61
  label: 'Customers',
62
62
  value: stats?.customers ?? 0,
63
63
  format: (v) => v.toLocaleString(),
64
64
  icon: CustomersIcon,
65
- color: 'text-purple-600',
66
- bgColor: 'bg-purple-100',
65
+ href: '/admin/customers',
67
66
  },
68
67
  {
69
68
  label: 'Products',
70
69
  value: stats?.products ?? 0,
71
70
  format: (v) => v.toLocaleString(),
72
71
  icon: ProductsIcon,
73
- color: 'text-orange-600',
74
- bgColor: 'bg-orange-100',
72
+ href: '/admin/products',
75
73
  },
76
74
  ];
77
- return (_jsx("div", { className: `grid gap-4 sm:grid-cols-2 lg:grid-cols-4 ${className}`, children: cards.map((card) => (_jsx("div", { className: "rounded-lg border border-border bg-card p-6", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-muted-foreground", children: card.label }), isLoading ? (_jsx("div", { className: "mt-2 h-8 w-24 animate-pulse rounded bg-muted" })) : (_jsx("p", { className: "mt-2 text-2xl font-semibold text-foreground", children: card.format(card.value) }))] }), _jsx("div", { className: `rounded-full p-3 ${card.bgColor}`, children: _jsx(card.icon, {}) })] }) }, card.label))) }));
75
+ return (_jsx("div", { className: `grid gap-4 sm:grid-cols-2 lg:grid-cols-4 ${className}`, children: cards.map((card) => (_jsxs("a", { href: card.href, className: "group relative overflow-hidden rounded-xl border border-border bg-card p-6 transition-all duration-200 hover:shadow-lg hover:shadow-primary/5 hover:-translate-y-0.5", children: [_jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-primary/5 via-transparent to-transparent opacity-0 transition-opacity duration-200 group-hover:opacity-100" }), _jsxs("div", { className: "relative flex items-start justify-between", children: [_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-sm font-medium text-muted-foreground", children: card.label }), isLoading ? (_jsx("div", { className: "h-9 w-28 animate-pulse rounded-md bg-muted" })) : (_jsx("p", { className: "text-3xl font-bold tracking-tight text-foreground", children: card.format(card.value) }))] }), _jsx("div", { className: "rounded-xl bg-primary/10 p-3 text-primary transition-colors group-hover:bg-primary/15", children: _jsx(card.icon, { className: "h-6 w-6" }) })] }), _jsxs("div", { className: "relative mt-4 flex items-center text-xs font-medium text-muted-foreground transition-colors group-hover:text-primary", children: [_jsx("span", { children: "View details" }), _jsx("svg", { className: "ml-1 h-3 w-3 transition-transform group-hover:translate-x-0.5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })] })] }, card.label))) }));
78
76
  }
79
77
  //# sourceMappingURL=StatsCards.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatsCards.js","sourceRoot":"","sources":["../../../src/admin/components/StatsCards.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StatsCards.js","sourceRoot":"","sources":["../../../src/admin/components/StatsCards.tsx"],"names":[],"mappings":"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"}
@@ -13,6 +13,10 @@ export { AdminHeader } from './AdminHeader';
13
13
  export { StatsCards } from './StatsCards';
14
14
  export { RecentOrders } from './RecentOrders';
15
15
  export { LowStockAlert } from './LowStockAlert';
16
+ export { RevenueChart } from './RevenueChart';
17
+ export type { RevenueChartProps } from './RevenueChart';
18
+ export { OrderStatusChart } from './OrderStatusChart';
19
+ export type { OrderStatusChartProps } from './OrderStatusChart';
16
20
  export { ProductTable } from './ProductTable';
17
21
  export { ProductForm } from './ProductForm';
18
22
  export { InventoryEditor } from './InventoryEditor';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAM3D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAM3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAM/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAMnD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAM7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAMjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAM7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAM3D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAM3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAM/D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAMnD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAM7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAMjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAM7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
@@ -21,6 +21,8 @@ export { AdminHeader } from './AdminHeader';
21
21
  export { StatsCards } from './StatsCards';
22
22
  export { RecentOrders } from './RecentOrders';
23
23
  export { LowStockAlert } from './LowStockAlert';
24
+ export { RevenueChart } from './RevenueChart';
25
+ export { OrderStatusChart } from './OrderStatusChart';
24
26
  // =============================================================================
25
27
  // Product Components
26
28
  // =============================================================================
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGjD,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,gFAAgF;AAChF,2CAA2C;AAC3C,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGjD,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,gFAAgF;AAChF,2CAA2C;AAC3C,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
@@ -60,6 +60,6 @@ export { authenticateAdmin, createAdmin, updateAdminPassword, findAdminForSessio
60
60
  export { createAdminAuthHandlers, getProducts, createProduct, getProduct, updateProduct, deleteProduct, addVariant, updateVariantHandler, deleteVariantHandler, getOrders, getOrder, updateOrder, processRefund, getStats, getCategories, createCategory, getCategory, updateCategory, deleteCategory, getCustomers, getCustomer, setupAdmin, checkAdminExists, } from './api';
61
61
  export { useAdminAuth, useAdminStats, useAdminProducts, useAdminOrders, useAdminCategories, } from './hooks';
62
62
  export type { CategoryTreeItem } from './hooks/useAdminCategories';
63
- export { AdminGuard, AdminLoginForm, AdminSetupForm, AdminLayout, AdminNav, AdminHeader, StatsCards, RecentOrders, LowStockAlert, ProductTable, ProductForm, InventoryEditor, CategorySelect, CategoryForm, SEOPreview, TagInput, VariantManager, OrderTable, OrderDetails, RefundDialog, StoreSettings, } from './components';
64
- export type { AdminSetupFormProps } from './components';
63
+ export { AdminGuard, AdminLoginForm, AdminSetupForm, AdminLayout, AdminNav, AdminHeader, StatsCards, RecentOrders, LowStockAlert, RevenueChart, OrderStatusChart, ProductTable, ProductForm, InventoryEditor, CategorySelect, CategoryForm, SEOPreview, TagInput, VariantManager, OrderTable, OrderDetails, RefundDialog, StoreSettings, } from './components';
64
+ export type { AdminSetupFormProps, RevenueChartProps, OrderStatusChartProps, } from './components';
65
65
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAMH,YAAY,EAEV,WAAW,EACX,aAAa,EACb,SAAS,EACT,KAAK,EACL,SAAS,EACT,OAAO,EACP,cAAc,EACd,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,QAAQ,EACR,OAAO,EAGP,aAAa,EAGb,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,iBAAiB,EAGjB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EAGrB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAGlB,sBAAsB,EAGtB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,SAAS,CAAA;AAMhB,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,UAAU,CAAA;AAMjB,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,WAAW,GACZ,MAAM,UAAU,CAAA;AAOjB,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,UAAU,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,QAAQ,EACR,aAAa,EACb,cAAc,EACd,WAAW,EACX,cAAc,EACd,cAAc,EACd,YAAY,EACZ,WAAW,EAEX,UAAU,EAEV,gBAAgB,GACjB,MAAM,OAAO,CAAA;AAMd,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,kBAAkB,GACnB,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAMlE,OAAO,EAEL,UAAU,EACV,cAAc,EACd,cAAc,EAEd,WAAW,EACX,QAAQ,EACR,WAAW,EAEX,UAAU,EACV,YAAY,EACZ,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,eAAe,EAEf,cAAc,EACd,YAAY,EAEZ,UAAU,EACV,QAAQ,EACR,cAAc,EAEd,UAAU,EACV,YAAY,EACZ,YAAY,EAEZ,aAAa,GACd,MAAM,cAAc,CAAA;AAGrB,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAMH,YAAY,EAEV,WAAW,EACX,aAAa,EACb,SAAS,EACT,KAAK,EACL,SAAS,EACT,OAAO,EACP,cAAc,EACd,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,QAAQ,EACR,OAAO,EAGP,aAAa,EAGb,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,iBAAiB,EAGjB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EAGrB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAGlB,sBAAsB,EAGtB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,SAAS,CAAA;AAMhB,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,UAAU,CAAA;AAMjB,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,WAAW,GACZ,MAAM,UAAU,CAAA;AAOjB,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,UAAU,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,QAAQ,EACR,aAAa,EACb,cAAc,EACd,WAAW,EACX,cAAc,EACd,cAAc,EACd,YAAY,EACZ,WAAW,EAEX,UAAU,EAEV,gBAAgB,GACjB,MAAM,OAAO,CAAA;AAMd,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,kBAAkB,GACnB,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAMlE,OAAO,EAEL,UAAU,EACV,cAAc,EACd,cAAc,EAEd,WAAW,EACX,QAAQ,EACR,WAAW,EAEX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,gBAAgB,EAEhB,YAAY,EACZ,WAAW,EACX,eAAe,EAEf,cAAc,EACd,YAAY,EAEZ,UAAU,EACV,QAAQ,EACR,cAAc,EAEd,UAAU,EACV,YAAY,EACZ,YAAY,EAEZ,aAAa,GACd,MAAM,cAAc,CAAA;AAGrB,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,cAAc,CAAA"}
@@ -84,7 +84,7 @@ AdminGuard, AdminLoginForm, AdminSetupForm,
84
84
  // Layout
85
85
  AdminLayout, AdminNav, AdminHeader,
86
86
  // Dashboard
87
- StatsCards, RecentOrders, LowStockAlert,
87
+ StatsCards, RecentOrders, LowStockAlert, RevenueChart, OrderStatusChart,
88
88
  // Products
89
89
  ProductTable, ProductForm, InventoryEditor,
90
90
  // Categories
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAqFH,gFAAgF;AAChF,2BAA2B;AAC3B,gFAAgF;AAEhF,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,UAAU,CAAA;AAEjB,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,WAAW,GACZ,MAAM,UAAU,CAAA;AAEjB,gFAAgF;AAChF,mDAAmD;AACnD,0EAA0E;AAC1E,gFAAgF;AAEhF,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,UAAU,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,QAAQ,EACR,aAAa,EACb,cAAc,EACd,WAAW,EACX,cAAc,EACd,cAAc,EACd,YAAY,EACZ,WAAW;AACX,oCAAoC;AACpC,UAAU;AACV,gCAAgC;AAChC,gBAAgB,GACjB,MAAM,OAAO,CAAA;AAEd,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,kBAAkB,GACnB,MAAM,SAAS,CAAA;AAIhB,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,OAAO;AACL,OAAO;AACP,UAAU,EACV,cAAc,EACd,cAAc;AACd,SAAS;AACT,WAAW,EACX,QAAQ,EACR,WAAW;AACX,YAAY;AACZ,UAAU,EACV,YAAY,EACZ,aAAa;AACb,WAAW;AACX,YAAY,EACZ,WAAW,EACX,eAAe;AACf,aAAa;AACb,cAAc,EACd,YAAY;AACZ,gCAAgC;AAChC,UAAU,EACV,QAAQ,EACR,cAAc;AACd,SAAS;AACT,UAAU,EACV,YAAY,EACZ,YAAY;AACZ,WAAW;AACX,aAAa,GACd,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAqFH,gFAAgF;AAChF,2BAA2B;AAC3B,gFAAgF;AAEhF,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,UAAU,CAAA;AAEjB,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,WAAW,GACZ,MAAM,UAAU,CAAA;AAEjB,gFAAgF;AAChF,mDAAmD;AACnD,0EAA0E;AAC1E,gFAAgF;AAEhF,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,UAAU,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,QAAQ,EACR,aAAa,EACb,cAAc,EACd,WAAW,EACX,cAAc,EACd,cAAc,EACd,YAAY,EACZ,WAAW;AACX,oCAAoC;AACpC,UAAU;AACV,gCAAgC;AAChC,gBAAgB,GACjB,MAAM,OAAO,CAAA;AAEd,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,kBAAkB,GACnB,MAAM,SAAS,CAAA;AAIhB,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,OAAO;AACL,OAAO;AACP,UAAU,EACV,cAAc,EACd,cAAc;AACd,SAAS;AACT,WAAW,EACX,QAAQ,EACR,WAAW;AACX,YAAY;AACZ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,gBAAgB;AAChB,WAAW;AACX,YAAY,EACZ,WAAW,EACX,eAAe;AACf,aAAa;AACb,cAAc,EACd,YAAY;AACZ,gCAAgC;AAChC,UAAU,EACV,QAAQ,EACR,cAAc;AACd,SAAS;AACT,UAAU,EACV,YAAY,EACZ,YAAY;AACZ,WAAW;AACX,aAAa,GACd,MAAM,cAAc,CAAA"}
@@ -371,17 +371,17 @@ export declare function getRecentOrders(limit?: number): Promise<{
371
371
  * Create a new order
372
372
  */
373
373
  export declare function createOrder(data: Omit<schema.NewOrder, 'tenantId'>): Promise<{
374
+ status: "pending" | "paid" | "shipped" | "delivered" | "cancelled" | "refunded";
375
+ email: string;
374
376
  id: string;
377
+ total: string;
375
378
  tenantId: string;
376
- status: "pending" | "paid" | "shipped" | "delivered" | "cancelled" | "refunded";
377
379
  createdAt: Date;
378
380
  updatedAt: Date;
379
381
  customerId: string | null;
380
- email: string;
381
382
  subtotal: string;
382
383
  tax: string;
383
384
  shipping: string;
384
- total: string;
385
385
  shippingAddress: {
386
386
  firstName: string;
387
387
  lastName: string;
@@ -410,15 +410,15 @@ export declare function createOrder(data: Omit<schema.NewOrder, 'tenantId'>): Pr
410
410
  * Create order items for an order
411
411
  */
412
412
  export declare function createOrderItems(items: schema.NewOrderItem[]): Promise<{
413
- id: string;
414
413
  name: string;
414
+ id: string;
415
+ attributes: Record<string, string> | null;
416
+ quantity: number;
415
417
  price: string;
416
418
  createdAt: Date;
417
419
  productId: string;
418
- attributes: Record<string, string> | null;
419
420
  orderId: string;
420
421
  variantId: string | null;
421
- quantity: number;
422
422
  }[]>;
423
423
  /**
424
424
  * Update order status
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rovela-ai/sdk",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "description": "Rovela SDK - Pre-built e-commerce components for AI-powered store generation",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -166,6 +166,7 @@
166
166
  "drizzle-orm": "^0.44.3",
167
167
  "nanoid": "^5.0.9",
168
168
  "next-auth": "^4.24.11",
169
+ "recharts": "^3.5.1",
169
170
  "resend": "^6.0.0",
170
171
  "stripe": "^20.0.0",
171
172
  "tailwind-merge": "^3.3.1",