@rovela-ai/sdk 0.3.10 → 0.3.12

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.
@@ -1,2 +1,2 @@
1
- export declare function AdminBarBanner(): import("react/jsx-runtime").JSX.Element | null;
1
+ export declare function AdminBarBanner(): import("react").ReactPortal | null;
2
2
  //# sourceMappingURL=AdminBarBanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminBarBanner.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminBarBanner.tsx"],"names":[],"mappings":"AAoJA,wBAAgB,cAAc,mDAgD7B"}
1
+ {"version":3,"file":"AdminBarBanner.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminBarBanner.tsx"],"names":[],"mappings":"AAqDA,wBAAgB,cAAc,uCAyH7B"}
@@ -3,154 +3,253 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  /**
4
4
  * @rovela/sdk/admin/components/AdminBarBanner
5
5
  *
6
- * Shopify-style admin bar that sits above the storefront header whenever a
7
- * signed-in admin browses the public store. Customers and anonymous
6
+ * Linear/Vercel-style admin session bar shown above the storefront whenever
7
+ * a signed-in admin browses the public store. Customers and anonymous
8
8
  * visitors never see it.
9
9
  *
10
- * Design rules:
10
+ * Design rules (unchanged from v1):
11
11
  *
12
- * 1. Self-gating the component takes no props. It renders `null` when
13
- * the session is loading, when there is no admin role on the session,
14
- * or when the user is inside the admin dashboard (`/admin/*`). Safe to
15
- * mount unconditionally at the root of a customer layout.
12
+ * 1. Self-gating. No props. Renders `null` while loading, for sessions
13
+ * without a role, and on /admin/*.
16
14
  *
17
- * 2. Theme-proof styling colors, spacing, radius, and shadows are
18
- * hard-coded via inline `style` objects rather than Tailwind tokens or
19
- * `admin-*` classes. Claude Code aggressively rewrites the storefront
20
- * theme; inline styles survive every theme edit. This is intentional
21
- * — the admin bar is "platform chrome" and should look identical
22
- * across every merchant's store.
15
+ * 2. Portal-rendered to <html>. Combined with a `translateZ(0)` on
16
+ * <body> and a 40px body margin, fixed/sticky store chrome is pushed
17
+ * below the bar instead of overlapping it.
23
18
  *
24
- * 3. Navigation only clicking "Admin dashboard" sends a full-page nav
25
- * to `/admin`, which is gated server-side by `requireAdmin()`. A
26
- * deactivated admin whose JWT is still valid will land on
27
- * `/admin/login`; this bar is never the authorization gate.
19
+ * 3. Theme-proof. Inline styles + one scoped <style> element.
20
+ *
21
+ * 4. Navigation-only. Server-side guards still authorize.
22
+ *
23
+ * v2 changes:
24
+ * - Two actions instead of one: "Edit store" (rovela.ai/generate/{id})
25
+ * and "Manage store" (/admin). Both open in a new tab.
26
+ * - "Edit store" only renders when NEXT_PUBLIC_ROVELA_PROJECT_ID is set.
27
+ * This gives a graceful degradation path for stores whose env var
28
+ * hasn't propagated yet.
29
+ * - Rovela logo (same CDN asset as AdminNav sidebar footer) as the
30
+ * Edit-store glyph; Lucide LayoutDashboard as the Manage-store glyph.
28
31
  */
29
- import { useCallback } from 'react';
30
- import { usePathname, useRouter } from 'next/navigation';
32
+ import { useEffect, useState } from 'react';
33
+ import { createPortal } from 'react-dom';
34
+ import { usePathname } from 'next/navigation';
35
+ import { LayoutDashboard } from 'lucide-react';
31
36
  import { useAdminAuth } from '../hooks/useAdminAuth';
32
37
  import { roleLabel } from '../permissions';
33
38
  // =============================================================================
34
- // Styles
39
+ // Constants
35
40
  // =============================================================================
36
- //
37
- // Inline style objects keep the bar immune to storefront CSS resets, global
38
- // Tailwind classes, and aggressive theme rewrites. Values match Shopify's
39
- // merchant bar roughly: high-contrast dark background, 40px tall, left/right
40
- // padding that respects safe areas on mobile.
41
41
  const BAR_HEIGHT_PX = 40;
42
- const barStyle = {
43
- position: 'relative',
44
- zIndex: 60,
45
- width: '100%',
46
- minHeight: `${BAR_HEIGHT_PX}px`,
47
- display: 'flex',
48
- alignItems: 'center',
49
- justifyContent: 'space-between',
50
- gap: '12px',
51
- padding: '0 16px',
52
- background: '#0B0B0F',
42
+ const PORTAL_ROOT_ID = 'rovela-admin-bar-root';
43
+ const STYLE_TAG_ID = 'rovela-admin-bar-style';
44
+ const DEFAULT_ROVELA_URL = 'https://rovela.ai';
45
+ const ROVELA_LOGO_SRC = 'https://rovela.ai/logo.png';
46
+ // =============================================================================
47
+ // Component
48
+ // =============================================================================
49
+ export function AdminBarBanner() {
50
+ const pathname = usePathname();
51
+ const { admin, isAuthenticated, isLoading } = useAdminAuth();
52
+ const [portalRoot, setPortalRoot] = useState(null);
53
+ const visible = !isLoading &&
54
+ isAuthenticated &&
55
+ Boolean(admin?.role) &&
56
+ !pathname?.startsWith('/admin');
57
+ useEffect(() => {
58
+ if (typeof document === 'undefined')
59
+ return;
60
+ if (!visible)
61
+ return;
62
+ // --- Portal root (<html> child, sibling of <body>) ---
63
+ let root = document.getElementById(PORTAL_ROOT_ID);
64
+ let ownsRoot = false;
65
+ if (!root) {
66
+ root = document.createElement('div');
67
+ root.id = PORTAL_ROOT_ID;
68
+ document.documentElement.appendChild(root);
69
+ ownsRoot = true;
70
+ }
71
+ setPortalRoot(root);
72
+ // --- Scoped global stylesheet (pseudo-states + responsive hides) ---
73
+ let styleEl = document.getElementById(STYLE_TAG_ID);
74
+ let ownsStyle = false;
75
+ if (!styleEl) {
76
+ styleEl = document.createElement('style');
77
+ styleEl.id = STYLE_TAG_ID;
78
+ styleEl.textContent = GLOBAL_CSS;
79
+ document.head.appendChild(styleEl);
80
+ ownsStyle = true;
81
+ }
82
+ // --- Push the storefront down + reparent fixed descendants ---
83
+ const prevBodyMarginTop = document.body.style.marginTop;
84
+ const prevBodyTransform = document.body.style.transform;
85
+ document.body.style.marginTop = `${BAR_HEIGHT_PX}px`;
86
+ document.body.style.transform = 'translateZ(0)';
87
+ return () => {
88
+ document.body.style.marginTop = prevBodyMarginTop;
89
+ document.body.style.transform = prevBodyTransform;
90
+ if (ownsStyle && styleEl?.parentNode) {
91
+ styleEl.parentNode.removeChild(styleEl);
92
+ }
93
+ if (ownsRoot && root?.parentNode) {
94
+ root.parentNode.removeChild(root);
95
+ }
96
+ setPortalRoot(null);
97
+ };
98
+ }, [visible]);
99
+ if (!visible || !portalRoot || !admin)
100
+ return null;
101
+ const role = roleLabel(admin.role).toLowerCase();
102
+ // Deep-link to Rovela platform. Only shown when the project ID env var is
103
+ // present — which is the case for every store that has redeployed since
104
+ // the env var was added to buildStoreEnvVars(). Older stores see only the
105
+ // "Manage store" button until their next rebuild.
106
+ const projectId = getEnv('NEXT_PUBLIC_ROVELA_PROJECT_ID');
107
+ const rovelaBase = getEnv('NEXT_PUBLIC_ROVELA_URL') || DEFAULT_ROVELA_URL;
108
+ const editUrl = projectId ? `${rovelaBase.replace(/\/$/, '')}/generate/${projectId}` : null;
109
+ return createPortal(_jsx("div", { "data-rovela-admin-bar": "", style: wrapStyle, children: _jsxs("div", { style: innerStyle, children: [_jsxs("div", { style: leftGroupStyle, children: [_jsx("span", { "aria-hidden": "true", style: dotStyle }), _jsx("span", { "data-rovela-tablet-only": "", style: labelStyle, children: "Admin session" }), _jsx("span", { "aria-hidden": "true", "data-rovela-desktop-only": "", style: dividerStyle, children: "\u00B7" }), _jsx("span", { "data-rovela-desktop-only": "", style: roleStyle, children: role })] }), _jsxs("div", { style: actionsStyle, children: [editUrl && (_jsxs("a", { href: editUrl, target: "_blank", rel: "noopener noreferrer", "data-rovela-action": "", "aria-label": "Edit store in Rovela", style: buttonStyle, children: [_jsx("img", { src: ROVELA_LOGO_SRC, alt: "", "aria-hidden": "true", style: rovelaIconStyle }), _jsx("span", { "data-rovela-desktop-only": "", children: "Edit store" })] })), _jsxs("a", { href: "/admin", target: "_blank", rel: "noopener noreferrer", "data-rovela-action": "", "aria-label": "Open the admin dashboard", style: buttonStyle, children: [_jsx(LayoutDashboard, { "aria-hidden": "true", style: lucideIconStyle, strokeWidth: 1.8 }), _jsx("span", { "data-rovela-desktop-only": "", children: "Manage store" })] })] })] }) }), portalRoot);
110
+ }
111
+ // =============================================================================
112
+ // Helpers
113
+ // =============================================================================
114
+ /**
115
+ * `NEXT_PUBLIC_*` vars get statically inlined by Next.js when a component
116
+ * is bundled, so reading via `process.env[name]` with a dynamic key does
117
+ * not work in the SDK (no direct access to the compile-time substitution).
118
+ * We read the literal strings so the bundler can substitute them.
119
+ */
120
+ function getEnv(key) {
121
+ if (key === 'NEXT_PUBLIC_ROVELA_PROJECT_ID')
122
+ return process.env.NEXT_PUBLIC_ROVELA_PROJECT_ID;
123
+ if (key === 'NEXT_PUBLIC_ROVELA_URL')
124
+ return process.env.NEXT_PUBLIC_ROVELA_URL;
125
+ return undefined;
126
+ }
127
+ // =============================================================================
128
+ // Styles
129
+ // =============================================================================
130
+ const wrapStyle = {
131
+ position: 'fixed',
132
+ top: 0,
133
+ left: 0,
134
+ right: 0,
135
+ height: `${BAR_HEIGHT_PX}px`,
136
+ zIndex: 2147483647,
137
+ background: 'rgba(10, 10, 12, 0.85)',
138
+ backdropFilter: 'blur(12px) saturate(140%)',
139
+ WebkitBackdropFilter: 'blur(12px) saturate(140%)',
140
+ borderBottom: '1px solid rgba(255, 255, 255, 0.06)',
53
141
  color: '#FFFFFF',
54
142
  fontFamily: 'ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
55
143
  fontSize: '13px',
56
144
  lineHeight: 1.3,
57
- borderBottom: '1px solid rgba(255, 255, 255, 0.08)',
145
+ letterSpacing: '-0.005em',
58
146
  boxSizing: 'border-box',
59
147
  };
60
- const labelStyle = {
148
+ const innerStyle = {
149
+ maxWidth: '1280px',
150
+ height: '100%',
151
+ margin: '0 auto',
152
+ padding: '0 16px',
153
+ display: 'flex',
154
+ alignItems: 'center',
155
+ justifyContent: 'space-between',
156
+ gap: '12px',
157
+ boxSizing: 'border-box',
158
+ };
159
+ const leftGroupStyle = {
61
160
  display: 'inline-flex',
62
161
  alignItems: 'center',
63
162
  gap: '8px',
64
163
  minWidth: 0,
65
164
  overflow: 'hidden',
66
- textOverflow: 'ellipsis',
67
- whiteSpace: 'nowrap',
68
165
  };
69
166
  const dotStyle = {
70
167
  width: '6px',
71
168
  height: '6px',
72
169
  borderRadius: '9999px',
73
170
  background: '#22C55E',
171
+ boxShadow: '0 0 0 0 rgba(34, 197, 94, 0.6)',
172
+ animation: 'rab-pulse 2.4s infinite',
74
173
  flexShrink: 0,
75
174
  };
76
- const actionsStyle = {
77
- display: 'inline-flex',
78
- alignItems: 'center',
79
- gap: '8px',
80
- flexShrink: 0,
175
+ const labelStyle = {
176
+ color: 'rgba(255, 255, 255, 0.92)',
177
+ fontWeight: 500,
178
+ whiteSpace: 'nowrap',
179
+ };
180
+ const dividerStyle = {
181
+ color: 'rgba(255, 255, 255, 0.3)',
182
+ };
183
+ const roleStyle = {
184
+ color: 'rgba(255, 255, 255, 0.55)',
185
+ whiteSpace: 'nowrap',
81
186
  };
82
- const linkStyle = {
187
+ const actionsStyle = {
83
188
  display: 'inline-flex',
84
189
  alignItems: 'center',
85
190
  gap: '6px',
86
- height: '28px',
87
- padding: '0 10px',
88
- borderRadius: '6px',
89
- fontSize: '12px',
90
- fontWeight: 500,
91
- color: '#0B0B0F',
92
- background: '#FFFFFF',
93
- textDecoration: 'none',
94
- border: '1px solid #FFFFFF',
95
- cursor: 'pointer',
96
- whiteSpace: 'nowrap',
191
+ flexShrink: 0,
97
192
  };
98
- const ghostButtonStyle = {
193
+ const buttonStyle = {
99
194
  display: 'inline-flex',
100
195
  alignItems: 'center',
101
196
  gap: '6px',
102
197
  height: '28px',
103
198
  padding: '0 10px',
104
199
  borderRadius: '6px',
105
- fontSize: '12px',
200
+ fontSize: '12.5px',
106
201
  fontWeight: 500,
107
202
  color: '#FFFFFF',
108
- background: 'transparent',
109
- border: '1px solid rgba(255, 255, 255, 0.2)',
203
+ background: 'rgba(255, 255, 255, 0.1)',
204
+ border: '1px solid rgba(255, 255, 255, 0.12)',
205
+ textDecoration: 'none',
110
206
  cursor: 'pointer',
111
207
  whiteSpace: 'nowrap',
112
- fontFamily: 'inherit',
208
+ flexShrink: 0,
209
+ transition: 'background 120ms ease, border-color 120ms ease',
113
210
  };
114
- const roleBadgeStyle = {
115
- display: 'inline-flex',
116
- alignItems: 'center',
117
- padding: '2px 8px',
118
- borderRadius: '9999px',
119
- background: 'rgba(255, 255, 255, 0.1)',
120
- fontSize: '11px',
121
- fontWeight: 600,
122
- letterSpacing: '0.02em',
123
- textTransform: 'uppercase',
211
+ const rovelaIconStyle = {
212
+ width: '14px',
213
+ height: '14px',
214
+ objectFit: 'contain',
215
+ // Force the logo to render pure white so it reads correctly on the dark bar
216
+ filter: 'brightness(0) invert(1)',
124
217
  flexShrink: 0,
125
218
  };
126
- const nameStyle = {
127
- opacity: 0.85,
128
- overflow: 'hidden',
129
- textOverflow: 'ellipsis',
130
- whiteSpace: 'nowrap',
219
+ const lucideIconStyle = {
220
+ width: '14px',
221
+ height: '14px',
222
+ flexShrink: 0,
131
223
  };
132
- // =============================================================================
133
- // Component
134
- // =============================================================================
135
- export function AdminBarBanner() {
136
- const pathname = usePathname();
137
- const router = useRouter();
138
- const { admin, isAuthenticated, isLoading, signOut } = useAdminAuth();
139
- const handleSignOut = useCallback(async () => {
140
- await signOut();
141
- // Refresh Server Components so any admin-gated UI re-renders against
142
- // the now-unauthenticated session without a full page reload.
143
- router.refresh();
144
- }, [signOut, router]);
145
- // --- Self-gating: never render on admin routes, while loading, or when
146
- // the session does not carry an admin role. ---
147
- if (pathname?.startsWith('/admin'))
148
- return null;
149
- if (isLoading)
150
- return null;
151
- if (!isAuthenticated || !admin?.role)
152
- return null;
153
- const displayName = admin.name?.trim() || admin.email || 'Admin';
154
- return (_jsxs("div", { role: "region", "aria-label": "Admin session", "data-rovela-admin-bar": "", style: barStyle, children: [_jsxs("div", { style: labelStyle, children: [_jsx("span", { "aria-hidden": "true", style: dotStyle }), _jsx("span", { style: roleBadgeStyle, children: roleLabel(admin.role) }), _jsxs("span", { style: nameStyle, children: ["Signed in as ", displayName] })] }), _jsxs("div", { style: actionsStyle, children: [_jsx("a", { href: "/admin", style: linkStyle, "aria-label": "Open admin dashboard", children: "Admin dashboard" }), _jsx("button", { type: "button", onClick: handleSignOut, style: ghostButtonStyle, "aria-label": "Sign out of admin", children: "Sign out" })] })] }));
224
+ // Scoped under [data-rovela-admin-bar] so no rules can escape into the
225
+ // storefront. Injected on mount, removed on unmount.
226
+ //
227
+ // Responsive hide rules:
228
+ // - [data-rovela-desktop-only] hidden below 640px (role tag, button labels)
229
+ // - [data-rovela-tablet-only] hidden below 480px ("Admin session" label)
230
+ const GLOBAL_CSS = `
231
+ @keyframes rab-pulse {
232
+ 0% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.55); }
233
+ 70% { box-shadow: 0 0 0 6px rgba(34, 197, 94, 0); }
234
+ 100% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0); }
235
+ }
236
+ [data-rovela-admin-bar] a[data-rovela-action]:hover {
237
+ background: rgba(255, 255, 255, 0.18) !important;
238
+ border-color: rgba(255, 255, 255, 0.2) !important;
239
+ }
240
+ [data-rovela-admin-bar] a[data-rovela-action]:focus-visible {
241
+ outline: 2px solid rgba(255, 255, 255, 0.6);
242
+ outline-offset: 2px;
243
+ }
244
+ @media (max-width: 639px) {
245
+ [data-rovela-admin-bar] [data-rovela-desktop-only] { display: none !important; }
246
+ }
247
+ @media (max-width: 479px) {
248
+ [data-rovela-admin-bar] [data-rovela-tablet-only] { display: none !important; }
249
+ [data-rovela-admin-bar] a[data-rovela-action] { padding: 0 8px; }
250
+ }
251
+ @media (prefers-reduced-motion: reduce) {
252
+ [data-rovela-admin-bar] [aria-hidden="true"] { animation: none !important; }
155
253
  }
254
+ `;
156
255
  //# sourceMappingURL=AdminBarBanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminBarBanner.js","sourceRoot":"","sources":["../../../src/admin/components/AdminBarBanner.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AdminBarBanner.js","sourceRoot":"","sources":["../../../src/admin/components/AdminBarBanner.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rovela-ai/sdk",
3
- "version": "0.3.10",
3
+ "version": "0.3.12",
4
4
  "description": "Rovela SDK - Pre-built e-commerce components for AI-powered store generation",
5
5
  "type": "module",
6
6
  "license": "MIT",