@rovela-ai/sdk 0.1.38 → 0.1.40
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.
- package/dist/admin/components/AdminGuard.d.ts.map +1 -1
- package/dist/admin/components/AdminGuard.js +6 -6
- package/dist/admin/components/AdminGuard.js.map +1 -1
- package/dist/admin/components/AdminLayout.d.ts +6 -18
- package/dist/admin/components/AdminLayout.d.ts.map +1 -1
- package/dist/admin/components/AdminLayout.js +7 -18
- package/dist/admin/components/AdminLayout.js.map +1 -1
- package/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +23 -2
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/AdminUserMenu.d.ts +14 -0
- package/dist/admin/components/AdminUserMenu.d.ts.map +1 -0
- package/dist/admin/components/AdminUserMenu.js +32 -0
- package/dist/admin/components/AdminUserMenu.js.map +1 -0
- package/dist/admin/components/index.d.ts +2 -0
- package/dist/admin/components/index.d.ts.map +1 -1
- package/dist/admin/components/index.js +2 -0
- package/dist/admin/components/index.js.map +1 -1
- package/dist/admin/styles/admin-theme.css +93 -12
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminGuard.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminGuard.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,QAAQ,EACR,UAA2B,EAC3B,YAAoB,EACpB,gBAAgB,GACjB,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"AdminGuard.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminGuard.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,QAAQ,EACR,UAA2B,EAC3B,YAAoB,EACpB,gBAAgB,GACjB,EAAE,eAAe,kDA+CjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC5C,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EACjC,OAAO,GAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAM;YAEd,CAAC;;EAYnC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { Fragment as _Fragment, jsx as _jsx
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
/**
|
|
4
4
|
* @rovela/sdk/admin/components/AdminGuard
|
|
5
5
|
*
|
|
@@ -47,12 +47,12 @@ export function AdminGuard({ children, fallback, redirectTo = '/admin/login', re
|
|
|
47
47
|
window.location.href = '/admin?error=forbidden';
|
|
48
48
|
}
|
|
49
49
|
}, [isAuthenticated, isLoading, isOwner, requireOwner, redirectTo]);
|
|
50
|
-
// Loading state
|
|
50
|
+
// Loading state - return null to let parent layout stay visible
|
|
51
|
+
// Next.js loading.tsx will handle the content area loading state
|
|
51
52
|
if (isLoading) {
|
|
52
|
-
if
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
return (_jsx("div", { className: "admin-page-bg flex min-h-screen items-center justify-center", children: _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "admin-spinner mx-auto h-8 w-8" }), _jsx("p", { className: "mt-4 text-sm admin-text-muted", children: "Loading..." })] }) }));
|
|
53
|
+
// Use custom loading component if provided, otherwise return null
|
|
54
|
+
// Returning null keeps the parent layout (sidebar, user menu) visible
|
|
55
|
+
return loadingComponent ? _jsx(_Fragment, { children: loadingComponent }) : null;
|
|
56
56
|
}
|
|
57
57
|
// Not authenticated
|
|
58
58
|
if (!isAuthenticated) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminGuard.js","sourceRoot":"","sources":["../../../src/admin/components/AdminGuard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAGpD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,QAAQ,EACR,QAAQ,EACR,UAAU,GAAG,cAAc,EAC3B,YAAY,GAAG,KAAK,EACpB,gBAAgB,GACA;IAChB,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAA;IAE9D,yCAAyC;IACzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS;YAAE,OAAM;QAErB,wCAAwC;QACxC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA;YACrE,MAAM,WAAW,GAAG,GAAG,UAAU,gBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAA;YAClF,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAA;YAClC,OAAM;QACR,CAAC;QAED,+BAA+B;QAC/B,IAAI,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,wBAAwB,CAAA;QACjD,CAAC;IACH,CAAC,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAA;IAEnE,
|
|
1
|
+
{"version":3,"file":"AdminGuard.js","sourceRoot":"","sources":["../../../src/admin/components/AdminGuard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAGpD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,QAAQ,EACR,QAAQ,EACR,UAAU,GAAG,cAAc,EAC3B,YAAY,GAAG,KAAK,EACpB,gBAAgB,GACA;IAChB,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAA;IAE9D,yCAAyC;IACzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS;YAAE,OAAM;QAErB,wCAAwC;QACxC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA;YACrE,MAAM,WAAW,GAAG,GAAG,UAAU,gBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAA;YAClF,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAA;YAClC,OAAM;QACR,CAAC;QAED,+BAA+B;QAC/B,IAAI,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,wBAAwB,CAAA;QACjD,CAAC;IACH,CAAC,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAA;IAEnE,gEAAgE;IAChE,iEAAiE;IACjE,IAAI,SAAS,EAAE,CAAC;QACd,kEAAkE;QAClE,sEAAsE;QACtE,OAAO,gBAAgB,CAAC,CAAC,CAAC,4BAAG,gBAAgB,GAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAC1D,CAAC;IAED,oBAAoB;IACpB,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,4BAAG,QAAQ,GAAI,CAAA;QACxB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,+BAA+B;IAC/B,IAAI,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,4BAAG,QAAQ,GAAI,CAAA;QACxB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,0DAA0D;IAC1D,OAAO,4BAAG,QAAQ,GAAI,CAAA;AACxB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAiC,EACjC,UAA6C,EAAE;IAE/C,SAAS,gBAAgB,CAAC,KAAQ;QAChC,OAAO,CACL,KAAC,UAAU,OAAK,OAAO,YACrB,KAAC,SAAS,OAAK,KAAK,GAAI,GACb,CACd,CAAA;IACH,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAA;IAC1E,gBAAgB,CAAC,WAAW,GAAG,iBAAiB,WAAW,GAAG,CAAA;IAE9D,OAAO,gBAAgB,CAAA;AACzB,CAAC"}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @rovela/sdk/admin/components/AdminLayout
|
|
3
3
|
*
|
|
4
|
-
* Admin dashboard layout with sidebar
|
|
4
|
+
* Admin dashboard layout with sidebar navigation.
|
|
5
5
|
* Applies the Rovela admin theme for consistent branding.
|
|
6
|
+
* User menu is rendered in the sidebar footer via AdminNav.
|
|
6
7
|
*/
|
|
7
8
|
import { type NavItem } from './AdminNav';
|
|
8
9
|
import type { AdminLayoutProps } from '../types';
|
|
9
10
|
import type { ReactNode } from 'react';
|
|
10
11
|
import '../styles/admin-theme.css';
|
|
11
12
|
interface ExtendedAdminLayoutProps extends AdminLayoutProps {
|
|
12
|
-
/** Page title for header */
|
|
13
|
-
title?: string;
|
|
14
13
|
/** Store name for sidebar */
|
|
15
14
|
storeName?: string;
|
|
16
15
|
/** Store URL for "View Store" link */
|
|
@@ -21,32 +20,21 @@ interface ExtendedAdminLayoutProps extends AdminLayoutProps {
|
|
|
21
20
|
logo?: ReactNode;
|
|
22
21
|
}
|
|
23
22
|
/**
|
|
24
|
-
* Admin dashboard layout with sidebar navigation
|
|
23
|
+
* Admin dashboard layout with sidebar navigation.
|
|
24
|
+
* User menu is integrated into the sidebar footer.
|
|
25
25
|
*
|
|
26
26
|
* @example
|
|
27
27
|
* ```tsx
|
|
28
28
|
* // In app/admin/layout.tsx
|
|
29
29
|
* export default function AdminLayout({ children }) {
|
|
30
30
|
* return (
|
|
31
|
-
* <AdminLayout
|
|
32
|
-
* storeName="My Store"
|
|
33
|
-
* activeNav="dashboard"
|
|
34
|
-
* >
|
|
31
|
+
* <AdminLayout storeName="My Store">
|
|
35
32
|
* {children}
|
|
36
33
|
* </AdminLayout>
|
|
37
34
|
* )
|
|
38
35
|
* }
|
|
39
|
-
*
|
|
40
|
-
* // In a specific page
|
|
41
|
-
* <AdminLayout
|
|
42
|
-
* title="Products"
|
|
43
|
-
* activeNav="products"
|
|
44
|
-
* storeName="My Store"
|
|
45
|
-
* >
|
|
46
|
-
* <ProductTable />
|
|
47
|
-
* </AdminLayout>
|
|
48
36
|
* ```
|
|
49
37
|
*/
|
|
50
|
-
export declare function AdminLayout({ children, activeNav,
|
|
38
|
+
export declare function AdminLayout({ children, activeNav, storeName, storeUrl, navItems, logo, className, }: ExtendedAdminLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
51
39
|
export {};
|
|
52
40
|
//# sourceMappingURL=AdminLayout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminLayout.tsx"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminLayout.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,2BAA2B,CAAA;AAMlC,UAAU,wBAAyB,SAAQ,gBAAgB;IACzD,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,SAAmB,EACnB,QAAc,EACd,QAAQ,EACR,IAAI,EACJ,SAAc,GACf,EAAE,wBAAwB,2CAsB1B"}
|
|
@@ -3,44 +3,33 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
/**
|
|
4
4
|
* @rovela/sdk/admin/components/AdminLayout
|
|
5
5
|
*
|
|
6
|
-
* Admin dashboard layout with sidebar
|
|
6
|
+
* Admin dashboard layout with sidebar navigation.
|
|
7
7
|
* Applies the Rovela admin theme for consistent branding.
|
|
8
|
+
* User menu is rendered in the sidebar footer via AdminNav.
|
|
8
9
|
*/
|
|
9
10
|
import { AdminNav } from './AdminNav';
|
|
10
|
-
import { AdminHeader } from './AdminHeader';
|
|
11
11
|
// Import Rovela admin theme CSS
|
|
12
12
|
import '../styles/admin-theme.css';
|
|
13
13
|
// =============================================================================
|
|
14
14
|
// Component
|
|
15
15
|
// =============================================================================
|
|
16
16
|
/**
|
|
17
|
-
* Admin dashboard layout with sidebar navigation
|
|
17
|
+
* Admin dashboard layout with sidebar navigation.
|
|
18
|
+
* User menu is integrated into the sidebar footer.
|
|
18
19
|
*
|
|
19
20
|
* @example
|
|
20
21
|
* ```tsx
|
|
21
22
|
* // In app/admin/layout.tsx
|
|
22
23
|
* export default function AdminLayout({ children }) {
|
|
23
24
|
* return (
|
|
24
|
-
* <AdminLayout
|
|
25
|
-
* storeName="My Store"
|
|
26
|
-
* activeNav="dashboard"
|
|
27
|
-
* >
|
|
25
|
+
* <AdminLayout storeName="My Store">
|
|
28
26
|
* {children}
|
|
29
27
|
* </AdminLayout>
|
|
30
28
|
* )
|
|
31
29
|
* }
|
|
32
|
-
*
|
|
33
|
-
* // In a specific page
|
|
34
|
-
* <AdminLayout
|
|
35
|
-
* title="Products"
|
|
36
|
-
* activeNav="products"
|
|
37
|
-
* storeName="My Store"
|
|
38
|
-
* >
|
|
39
|
-
* <ProductTable />
|
|
40
|
-
* </AdminLayout>
|
|
41
30
|
* ```
|
|
42
31
|
*/
|
|
43
|
-
export function AdminLayout({ children, activeNav,
|
|
44
|
-
return (_jsx("div", { className: `rovela-admin-theme ${className}`, children: _jsxs("div", { className: "admin-layout", children: [_jsx(AdminNav, { activeNav: activeNav, items: navItems, storeName: storeName, logo: logo }),
|
|
32
|
+
export function AdminLayout({ children, activeNav, storeName = 'Admin', storeUrl = '/', navItems, logo, className = '', }) {
|
|
33
|
+
return (_jsx("div", { className: `rovela-admin-theme ${className}`, children: _jsxs("div", { className: "admin-layout", children: [_jsx(AdminNav, { activeNav: activeNav, items: navItems, storeName: storeName, logo: logo, storeUrl: storeUrl }), _jsx("div", { className: "admin-layout-main", children: _jsx("main", { className: "admin-layout-content", children: children }) })] }) }));
|
|
45
34
|
}
|
|
46
35
|
//# sourceMappingURL=AdminLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminLayout.js","sourceRoot":"","sources":["../../../src/admin/components/AdminLayout.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ
|
|
1
|
+
{"version":3,"file":"AdminLayout.js","sourceRoot":"","sources":["../../../src/admin/components/AdminLayout.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAA;AAInD,gCAAgC;AAChC,OAAO,2BAA2B,CAAA;AAiBlC,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,SAAS,GAAG,OAAO,EACnB,QAAQ,GAAG,GAAG,EACd,QAAQ,EACR,IAAI,EACJ,SAAS,GAAG,EAAE,GACW;IACzB,OAAO,CACL,cAAK,SAAS,EAAE,sBAAsB,SAAS,EAAE,YAC/C,eAAK,SAAS,EAAC,cAAc,aAE3B,KAAC,QAAQ,IACP,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,GAClB,EAGF,cAAK,SAAS,EAAC,mBAAmB,YAChC,eAAM,SAAS,EAAC,sBAAsB,YACnC,QAAQ,GACJ,GACH,IACF,GACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminNav.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"AdminNav.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAU7C,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;AA+FD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,KAAK,EACL,SAAS,EAAE,aAAuB,EAClC,IAAI,EACJ,QAAc,EACd,SAAc,GACf,EAAE,aAAa,2CAoJf"}
|
|
@@ -10,8 +10,10 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
10
10
|
* and store name from StoreSettingsProvider (with prop fallback).
|
|
11
11
|
*/
|
|
12
12
|
import React from 'react';
|
|
13
|
+
import { usePathname } from 'next/navigation';
|
|
13
14
|
import { LayoutDashboard, Package, FolderOpen, ClipboardList, Users, Settings, ExternalLink } from 'lucide-react';
|
|
14
15
|
import { useStoreSettingsOptional } from '../../core';
|
|
16
|
+
import { AdminUserMenu } from './AdminUserMenu';
|
|
15
17
|
// =============================================================================
|
|
16
18
|
// Default Navigation Groups
|
|
17
19
|
// =============================================================================
|
|
@@ -75,6 +77,25 @@ function NavItemButton({ item, isActive, }) {
|
|
|
75
77
|
export function AdminNav({ activeNav, items, storeName: storeNameProp = 'Admin', logo, storeUrl = '/', className = '', }) {
|
|
76
78
|
// Get store settings from context (optional - works even outside provider)
|
|
77
79
|
const storeSettings = useStoreSettingsOptional();
|
|
80
|
+
// Auto-detect active nav from pathname when not explicitly provided
|
|
81
|
+
const pathname = usePathname();
|
|
82
|
+
const resolvedActiveNav = activeNav ?? (() => {
|
|
83
|
+
if (!pathname)
|
|
84
|
+
return undefined;
|
|
85
|
+
if (pathname === '/admin' || pathname === '/admin/')
|
|
86
|
+
return 'dashboard';
|
|
87
|
+
if (pathname.startsWith('/admin/products'))
|
|
88
|
+
return 'products';
|
|
89
|
+
if (pathname.startsWith('/admin/categories'))
|
|
90
|
+
return 'categories';
|
|
91
|
+
if (pathname.startsWith('/admin/orders'))
|
|
92
|
+
return 'orders';
|
|
93
|
+
if (pathname.startsWith('/admin/customers'))
|
|
94
|
+
return 'customers';
|
|
95
|
+
if (pathname.startsWith('/admin/settings'))
|
|
96
|
+
return 'settings';
|
|
97
|
+
return undefined;
|
|
98
|
+
})();
|
|
78
99
|
// Resolve store name: prop > context > default
|
|
79
100
|
const storeName = storeNameProp !== 'Admin' ? storeNameProp : (storeSettings?.storeName || storeNameProp);
|
|
80
101
|
// Get logo URL from environment variable (same pattern as storefront Header)
|
|
@@ -87,8 +108,8 @@ export function AdminNav({ activeNav, items, storeName: storeNameProp = 'Admin',
|
|
|
87
108
|
// Fallback: Store initial badge
|
|
88
109
|
_jsxs(_Fragment, { children: [_jsx("div", { className: "admin-sidebar-badge", children: storeName.charAt(0).toUpperCase() }), _jsxs("div", { className: "admin-sidebar-header-text", children: [_jsx("span", { className: "admin-sidebar-store-name", children: storeName }), _jsx("span", { className: "admin-sidebar-subtitle", children: "Admin Panel" })] })] }))) }), _jsx("div", { className: "admin-sidebar-nav", children: useGroups ? (
|
|
89
110
|
// Grouped navigation
|
|
90
|
-
_jsx("div", { className: "admin-sidebar-groups", children: defaultNavGroups.map((group) => (_jsxs("div", { className: "admin-sidebar-section", children: [_jsx("p", { className: "admin-sidebar-section-title", children: group.label }), _jsx("ul", { className: "admin-sidebar-items", children: group.items.map((item) => (_jsx("li", { children: _jsx(NavItemButton, { item: item, isActive:
|
|
111
|
+
_jsx("div", { className: "admin-sidebar-groups", children: defaultNavGroups.map((group) => (_jsxs("div", { className: "admin-sidebar-section", children: [_jsx("p", { className: "admin-sidebar-section-title", children: group.label }), _jsx("ul", { className: "admin-sidebar-items", children: group.items.map((item) => (_jsx("li", { children: _jsx(NavItemButton, { item: item, isActive: resolvedActiveNav === item.id }) }, item.id))) })] }, group.label))) })) : (
|
|
91
112
|
// Flat navigation (custom items)
|
|
92
|
-
_jsx("ul", { className: "admin-sidebar-items", children: items?.map((item) => (_jsx("li", { children: _jsx(NavItemButton, { item: item, isActive:
|
|
113
|
+
_jsx("ul", { className: "admin-sidebar-items", children: items?.map((item) => (_jsx("li", { children: _jsx(NavItemButton, { item: item, isActive: resolvedActiveNav === item.id }) }, item.id))) })) }), _jsx("div", { className: "admin-sidebar-footer", children: _jsxs("div", { className: "admin-sidebar-footer-content", children: [_jsx(NavItemButton, { item: settingsItem, isActive: resolvedActiveNav === 'settings' }), _jsxs("a", { href: storeUrl, target: "_blank", rel: "noopener noreferrer", className: "admin-sidebar-link", children: [_jsx(ExternalLink, { className: "admin-sidebar-item-icon" }), "View Store"] }), _jsx("div", { className: "admin-sidebar-user-menu", children: _jsx(AdminUserMenu, {}) }), _jsxs("a", { href: "https://rovela.ai", target: "_blank", rel: "noopener noreferrer", className: "admin-sidebar-powered-by", children: [_jsx("span", { children: "Powered by" }), _jsx(RovelaLogo, { className: "admin-rovela-logo" }), _jsx("span", { className: "admin-powered-by-name", children: "Rovela" })] })] }) })] }));
|
|
93
114
|
}
|
|
94
115
|
//# sourceMappingURL=AdminNav.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminNav.js","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;GAQG;AAEH,OAAO,KAAyB,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACjH,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"AdminNav.js","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface AdminUserMenuProps {
|
|
2
|
+
/** Custom className */
|
|
3
|
+
className?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Floating user menu with avatar and dropdown actions.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```tsx
|
|
10
|
+
* <AdminUserMenu />
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function AdminUserMenu({ className, }: AdminUserMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=AdminUserMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminUserMenu.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminUserMenu.tsx"],"names":[],"mappings":"AAiBA,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAc,GACf,EAAE,kBAAkB,2CAwEpB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* @rovela/sdk/admin/components/AdminUserMenu
|
|
5
|
+
*
|
|
6
|
+
* Floating user menu component for admin dashboard.
|
|
7
|
+
* Positioned in top-right corner, provides user info and actions.
|
|
8
|
+
*/
|
|
9
|
+
import { useState, useCallback } from 'react';
|
|
10
|
+
import { ChevronDown, Settings, LogOut } from 'lucide-react';
|
|
11
|
+
import { useAdminAuth } from '../hooks/useAdminAuth';
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Component
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Floating user menu with avatar and dropdown actions.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <AdminUserMenu />
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function AdminUserMenu({ className = '', }) {
|
|
24
|
+
const { admin, signOut } = useAdminAuth();
|
|
25
|
+
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
|
26
|
+
const handleSignOut = useCallback(async () => {
|
|
27
|
+
await signOut();
|
|
28
|
+
window.location.href = '/admin/login';
|
|
29
|
+
}, [signOut]);
|
|
30
|
+
return (_jsx("div", { className: `admin-user-menu ${className}`, children: _jsxs("div", { className: "admin-dropdown", children: [_jsxs("button", { onClick: () => setIsMenuOpen(!isMenuOpen), className: "admin-user-menu-btn", children: [_jsx("div", { className: "admin-avatar admin-avatar-sm", children: admin?.name?.charAt(0).toUpperCase() || 'A' }), _jsx("span", { className: "admin-user-menu-name", children: admin?.name || 'Admin' }), _jsx(ChevronDown, { className: `h-4 w-4 admin-text-muted transition-transform ${isMenuOpen ? 'rotate-180' : ''}` })] }), isMenuOpen && (_jsxs(_Fragment, { children: [_jsx("div", { className: "admin-dropdown-backdrop", onClick: () => setIsMenuOpen(false) }), _jsxs("div", { className: "admin-dropdown-content", children: [_jsxs("div", { className: "admin-dropdown-header", children: [_jsx("p", { className: "admin-dropdown-header-name", children: admin?.name }), _jsx("p", { className: "admin-dropdown-header-email", children: admin?.email }), admin?.role === 'owner' && (_jsx("span", { className: "admin-badge admin-badge-primary mt-2", children: "Owner" }))] }), _jsxs("div", { className: "py-1", children: [_jsxs("a", { href: "/admin/settings", className: "admin-dropdown-item", onClick: () => setIsMenuOpen(false), children: [_jsx(Settings, { className: "h-4 w-4", strokeWidth: 1.5 }), "Settings"] }), _jsx("div", { className: "admin-dropdown-divider" }), _jsxs("button", { onClick: handleSignOut, className: "admin-dropdown-item admin-dropdown-item-destructive w-full", children: [_jsx(LogOut, { className: "h-4 w-4", strokeWidth: 1.5 }), "Sign Out"] })] })] })] }))] }) }));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=AdminUserMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminUserMenu.js","sourceRoot":"","sources":["../../../src/admin/components/AdminUserMenu.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAWpD,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,SAAS,GAAG,EAAE,GACK;IACnB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAA;IACzC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEnD,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC3C,MAAM,OAAO,EAAE,CAAA;QACf,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,cAAc,CAAA;IACvC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,OAAO,CACL,cAAK,SAAS,EAAE,mBAAmB,SAAS,EAAE,YAC5C,eAAK,SAAS,EAAC,gBAAgB,aAC7B,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,EACzC,SAAS,EAAC,qBAAqB,aAE/B,cAAK,SAAS,EAAC,8BAA8B,YAC1C,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,GAAG,GACxC,EACN,eAAM,SAAS,EAAC,sBAAsB,YAAE,KAAK,EAAE,IAAI,IAAI,OAAO,GAAQ,EACtE,KAAC,WAAW,IACV,SAAS,EAAE,iDAAiD,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,GAC5F,IACK,EAGR,UAAU,IAAI,CACb,8BAEE,cACE,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GACnC,EAGF,eAAK,SAAS,EAAC,wBAAwB,aACrC,eAAK,SAAS,EAAC,uBAAuB,aACpC,YAAG,SAAS,EAAC,4BAA4B,YAAE,KAAK,EAAE,IAAI,GAAK,EAC3D,YAAG,SAAS,EAAC,6BAA6B,YAAE,KAAK,EAAE,KAAK,GAAK,EAC5D,KAAK,EAAE,IAAI,KAAK,OAAO,IAAI,CAC1B,eAAM,SAAS,EAAC,sCAAsC,sBAE/C,CACR,IACG,EAEN,eAAK,SAAS,EAAC,MAAM,aACnB,aACE,IAAI,EAAC,iBAAiB,EACtB,SAAS,EAAC,qBAAqB,EAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,aAEnC,KAAC,QAAQ,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,GAAG,GAAI,gBAEhD,EAEJ,cAAK,SAAS,EAAC,wBAAwB,GAAG,EAE1C,kBACE,OAAO,EAAE,aAAa,EACtB,SAAS,EAAC,4DAA4D,aAEtE,KAAC,MAAM,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,GAAG,GAAI,gBAEzC,IACL,IACF,IACL,CACJ,IACG,GACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -9,6 +9,8 @@ export { AdminSetupForm } from './AdminSetupForm';
|
|
|
9
9
|
export type { AdminSetupFormProps } from './AdminSetupForm';
|
|
10
10
|
export { AdminLayout } from './AdminLayout';
|
|
11
11
|
export { AdminNav } from './AdminNav';
|
|
12
|
+
export { AdminUserMenu } from './AdminUserMenu';
|
|
13
|
+
export type { AdminUserMenuProps } from './AdminUserMenu';
|
|
12
14
|
export { AdminHeader } from './AdminHeader';
|
|
13
15
|
export { StatsCards } from './StatsCards';
|
|
14
16
|
export { RecentOrders } from './RecentOrders';
|
|
@@ -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;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,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAMvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAMrE,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;AAM/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,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,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAGzD,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,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAMvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAMrE,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;AAM/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -14,6 +14,8 @@ export { AdminSetupForm } from './AdminSetupForm';
|
|
|
14
14
|
// =============================================================================
|
|
15
15
|
export { AdminLayout } from './AdminLayout';
|
|
16
16
|
export { AdminNav } from './AdminNav';
|
|
17
|
+
export { AdminUserMenu } from './AdminUserMenu';
|
|
18
|
+
// Legacy - kept for backwards compatibility
|
|
17
19
|
export { AdminHeader } from './AdminHeader';
|
|
18
20
|
// =============================================================================
|
|
19
21
|
// Dashboard Components
|
|
@@ -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;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;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,gFAAgF;AAChF,2CAA2C;AAC3C,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAG3D,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;AAE/C,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,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,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/C,4CAA4C;AAC5C,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;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,gFAAgF;AAChF,2CAA2C;AAC3C,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAG3D,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;AAE/C,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
--admin-sidebar: 36 20% 97%; /* Very light warm gray - blends with content */
|
|
33
33
|
--admin-sidebar-hover: 36 15% 93%; /* Subtle hover */
|
|
34
34
|
--admin-sidebar-border: 36 15% 88%; /* Very subtle border */
|
|
35
|
-
--admin-sidebar-active: 163
|
|
36
|
-
--admin-sidebar-active-text: 163 86%
|
|
35
|
+
--admin-sidebar-active: 163 86% 95%; /* Light primary bg for active */
|
|
36
|
+
--admin-sidebar-active-text: 163 86% 37%; /* Primary color text */
|
|
37
37
|
|
|
38
38
|
/* Text Colors */
|
|
39
39
|
--admin-foreground: 220 20% 14%; /* Near-black text */
|
|
@@ -234,8 +234,8 @@
|
|
|
234
234
|
--admin-sidebar: 200 10% 12%; /* Slightly lighter than content bg */
|
|
235
235
|
--admin-sidebar-hover: 200 10% 18%; /* Visible hover */
|
|
236
236
|
--admin-sidebar-border: 200 10% 20%; /* Subtle border */
|
|
237
|
-
--admin-sidebar-active: 163
|
|
238
|
-
--admin-sidebar-active-text: 163 86%
|
|
237
|
+
--admin-sidebar-active: 163 86% 15%; /* Dark primary bg for active */
|
|
238
|
+
--admin-sidebar-active-text: 163 86% 45%; /* Primary color text */
|
|
239
239
|
|
|
240
240
|
/* Text Colors - Inverted for dark mode */
|
|
241
241
|
--admin-foreground: 36 36% 95%; /* Cream text */
|
|
@@ -308,8 +308,8 @@
|
|
|
308
308
|
--admin-sidebar: 200 10% 12%; /* Slightly lighter than content bg */
|
|
309
309
|
--admin-sidebar-hover: 200 10% 18%; /* Visible hover */
|
|
310
310
|
--admin-sidebar-border: 200 10% 20%; /* Subtle border */
|
|
311
|
-
--admin-sidebar-active: 163
|
|
312
|
-
--admin-sidebar-active-text: 163 86%
|
|
311
|
+
--admin-sidebar-active: 163 86% 15%; /* Dark primary bg for active */
|
|
312
|
+
--admin-sidebar-active-text: 163 86% 45%; /* Primary color text */
|
|
313
313
|
|
|
314
314
|
/* Text Colors */
|
|
315
315
|
--admin-foreground: 36 36% 95%;
|
|
@@ -381,8 +381,8 @@
|
|
|
381
381
|
--admin-sidebar: 200 10% 12%; /* Slightly lighter than content bg */
|
|
382
382
|
--admin-sidebar-hover: 200 10% 18%; /* Visible hover */
|
|
383
383
|
--admin-sidebar-border: 200 10% 20%; /* Subtle border */
|
|
384
|
-
--admin-sidebar-active: 163
|
|
385
|
-
--admin-sidebar-active-text: 163 86%
|
|
384
|
+
--admin-sidebar-active: 163 86% 15%; /* Dark primary bg for active */
|
|
385
|
+
--admin-sidebar-active-text: 163 86% 45%; /* Primary color text */
|
|
386
386
|
|
|
387
387
|
/* Text Colors */
|
|
388
388
|
--admin-foreground: 36 36% 95%;
|
|
@@ -476,8 +476,9 @@
|
|
|
476
476
|
width: 100%;
|
|
477
477
|
}
|
|
478
478
|
|
|
479
|
-
/* Main content area -
|
|
479
|
+
/* Main content area - relative for floating user menu */
|
|
480
480
|
.rovela-admin-theme .admin-layout-main {
|
|
481
|
+
position: relative;
|
|
481
482
|
display: flex;
|
|
482
483
|
flex: 1;
|
|
483
484
|
flex-direction: column;
|
|
@@ -492,6 +493,38 @@
|
|
|
492
493
|
padding: var(--admin-space-6);
|
|
493
494
|
}
|
|
494
495
|
|
|
496
|
+
/* Floating user menu - top right corner */
|
|
497
|
+
.rovela-admin-theme .admin-user-menu {
|
|
498
|
+
position: absolute;
|
|
499
|
+
top: var(--admin-space-4);
|
|
500
|
+
right: var(--admin-space-6);
|
|
501
|
+
z-index: var(--admin-z-dropdown);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
.rovela-admin-theme .admin-user-menu-btn {
|
|
505
|
+
display: flex;
|
|
506
|
+
align-items: center;
|
|
507
|
+
gap: var(--admin-space-2);
|
|
508
|
+
padding: var(--admin-space-2) var(--admin-space-3);
|
|
509
|
+
background: hsl(var(--admin-card));
|
|
510
|
+
border: var(--admin-border-width) solid hsl(var(--admin-border));
|
|
511
|
+
border-radius: var(--admin-radius-lg);
|
|
512
|
+
cursor: pointer;
|
|
513
|
+
transition: var(--admin-transition-colors);
|
|
514
|
+
box-shadow: var(--admin-shadow-sm);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
.rovela-admin-theme .admin-user-menu-btn:hover {
|
|
518
|
+
background: hsl(var(--admin-background-subtle));
|
|
519
|
+
box-shadow: var(--admin-shadow-md);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
.rovela-admin-theme .admin-user-menu-name {
|
|
523
|
+
font-size: var(--admin-text-sm);
|
|
524
|
+
font-weight: var(--admin-font-medium);
|
|
525
|
+
color: hsl(var(--admin-foreground));
|
|
526
|
+
}
|
|
527
|
+
|
|
495
528
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
496
529
|
TYPOGRAPHY UTILITIES
|
|
497
530
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
@@ -1234,8 +1267,56 @@
|
|
|
1234
1267
|
opacity: 0.9;
|
|
1235
1268
|
}
|
|
1236
1269
|
|
|
1270
|
+
/* Sidebar user menu - positioned in footer */
|
|
1271
|
+
.rovela-admin-theme .admin-sidebar-user-menu {
|
|
1272
|
+
padding: var(--admin-space-2) 0;
|
|
1273
|
+
border-top: var(--admin-border-width) solid hsl(var(--admin-sidebar-border) / 0.3);
|
|
1274
|
+
margin-top: var(--admin-space-2);
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
/* Override user menu button styles for sidebar context */
|
|
1278
|
+
.rovela-admin-theme .admin-sidebar-user-menu .admin-user-menu {
|
|
1279
|
+
position: static;
|
|
1280
|
+
}
|
|
1281
|
+
|
|
1282
|
+
.rovela-admin-theme .admin-sidebar-user-menu .admin-user-menu-btn {
|
|
1283
|
+
width: 100%;
|
|
1284
|
+
background: transparent;
|
|
1285
|
+
border: none;
|
|
1286
|
+
box-shadow: none;
|
|
1287
|
+
padding: var(--admin-space-2) var(--admin-space-3);
|
|
1288
|
+
border-radius: var(--admin-radius-md);
|
|
1289
|
+
color: hsl(var(--admin-sidebar-foreground));
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
.rovela-admin-theme .admin-sidebar-user-menu .admin-user-menu-btn:hover {
|
|
1293
|
+
background: hsl(var(--admin-sidebar-hover));
|
|
1294
|
+
box-shadow: none;
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1297
|
+
.rovela-admin-theme .admin-sidebar-user-menu .admin-user-menu-name {
|
|
1298
|
+
color: hsl(var(--admin-sidebar-foreground));
|
|
1299
|
+
flex: 1;
|
|
1300
|
+
text-align: left;
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
.rovela-admin-theme .admin-sidebar-user-menu .admin-avatar {
|
|
1304
|
+
background: hsl(var(--admin-primary));
|
|
1305
|
+
color: hsl(var(--admin-primary-foreground));
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
/* Dropdown opens UPWARD in sidebar (near bottom of screen) */
|
|
1309
|
+
.rovela-admin-theme .admin-sidebar-user-menu .admin-dropdown-content {
|
|
1310
|
+
top: auto;
|
|
1311
|
+
bottom: 100%;
|
|
1312
|
+
margin-top: 0;
|
|
1313
|
+
margin-bottom: var(--admin-space-1);
|
|
1314
|
+
left: 0;
|
|
1315
|
+
right: 0;
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1237
1318
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
1238
|
-
HEADER COMPONENT
|
|
1319
|
+
HEADER COMPONENT (Legacy - kept for backwards compatibility)
|
|
1239
1320
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
1240
1321
|
|
|
1241
1322
|
.rovela-admin-theme .admin-header {
|
|
@@ -2207,10 +2288,10 @@
|
|
|
2207
2288
|
}
|
|
2208
2289
|
|
|
2209
2290
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
2210
|
-
HEADER EXTENDED COMPONENTS
|
|
2291
|
+
HEADER EXTENDED COMPONENTS (Legacy - kept for backwards compatibility)
|
|
2211
2292
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
2212
2293
|
|
|
2213
|
-
/* User menu button in header */
|
|
2294
|
+
/* User menu button in header (legacy) */
|
|
2214
2295
|
.rovela-admin-theme .admin-header-user-btn {
|
|
2215
2296
|
display: flex;
|
|
2216
2297
|
align-items: center;
|