@actuate-media/cms-admin 0.14.0 → 0.15.0

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.
@@ -15,7 +15,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
15
15
  * >= 1024 (desktop): stat cards 5-col, main grid is `1fr 320px`
16
16
  */
17
17
  import { useMemo, useState } from 'react';
18
- import { FileText, File as FileIcon, Image as ImageIcon, ClipboardList, Search, Plus, Upload, Globe, ExternalLink, Activity, AlertTriangle, Clock, Zap, Database, ChevronRight, Loader2, } from 'lucide-react';
18
+ import { FileText, File as FileIcon, Image as ImageIcon, ClipboardList, Search, Plus, Upload, Globe, ExternalLink, Activity, AlertTriangle, Clock, Zap, Database, ChevronRight, Loader2, TrendingUp, TrendingDown, Gauge, AlertCircle, } from 'lucide-react';
19
19
  import { useApiData } from '../lib/useApiData.js';
20
20
  // ─── helpers (kept top-level so they aren't re-created on every render) ──────
21
21
  function resolveCollections(config) {
@@ -59,6 +59,27 @@ function timeOfDayGreeting() {
59
59
  return 'Good afternoon';
60
60
  return 'Good evening';
61
61
  }
62
+ /**
63
+ * Return the user's first name for the greeting. Falls back to the
64
+ * email local-part, then a generic "there". Strips role-style names
65
+ * like "Admin" / "Administrator" / "Editor" — a literal
66
+ * `Good morning, Admin` reads as bot-output, not a person.
67
+ */
68
+ function firstNameForGreeting(session) {
69
+ const raw = (session?.user?.name ?? session?.name ?? '').trim();
70
+ const email = session?.user?.email ?? session?.email;
71
+ const generic = new Set(['admin', 'administrator', 'editor', 'user', 'root']);
72
+ if (raw) {
73
+ const first = raw.split(/\s+/)[0] ?? raw;
74
+ if (!generic.has(first.toLowerCase()))
75
+ return first;
76
+ }
77
+ if (typeof email === 'string' && email.length > 0) {
78
+ const local = email.split('@')[0] ?? email;
79
+ return local.charAt(0).toUpperCase() + local.slice(1);
80
+ }
81
+ return 'there';
82
+ }
62
83
  function todayDateString() {
63
84
  return new Date().toLocaleDateString('en-US', {
64
85
  weekday: 'long',
@@ -124,9 +145,11 @@ export function Dashboard({ config, session, onNavigate }) {
124
145
  const nav = (path) => onNavigate?.(path);
125
146
  const { data: stats, loading, error, exhausted, refetch } = useApiData('/stats');
126
147
  const { data: health } = useApiData('/health');
148
+ const { data: delivery, loading: deliveryLoading } = useApiData('/stats/api-delivery');
149
+ const { data: contentHealthData, loading: contentHealthLoading } = useApiData('/stats/content-health');
127
150
  const greeting = useMemo(() => timeOfDayGreeting(), []);
128
151
  const dateStr = useMemo(() => todayDateString(), []);
129
- const userName = session?.name ?? session?.email?.split('@')[0] ?? 'there';
152
+ const userName = useMemo(() => firstNameForGreeting(session), [session]);
130
153
  const collections = useMemo(() => resolveCollections(config), [config]);
131
154
  // ── Stat cards ──────────────────────────────────────────────────────────
132
155
  const statCards = useMemo(() => {
@@ -217,18 +240,23 @@ export function Dashboard({ config, session, onNavigate }) {
217
240
  return cards;
218
241
  }, [stats, collections]);
219
242
  // ── Quick actions ───────────────────────────────────────────────────────
220
- // "New Post" lives only in the hero CTA above; this row is the secondary
221
- // surface and intentionally omits the primary action to avoid the obvious
222
- // duplication. Order mirrors the natural authoring flow.
243
+ // 5-button strip matching the reference dashboard. The "+ New Post" entry
244
+ // intentionally duplicates the top-bar primary action: the top bar
245
+ // surface is for chrome-level navigation, the quick-action row is the
246
+ // dashboard's content-creation toolbar. Order mirrors the natural
247
+ // authoring flow (post → page → media → form → integration).
223
248
  const quickActions = useMemo(() => {
249
+ const posts = collections.find((c) => c.slug === 'posts' || c.type === 'post');
250
+ const postsSlug = posts?.slug ?? 'posts';
224
251
  const pages = collections.find((c) => c.slug === 'pages' || c.type === 'page');
225
- const items = [];
226
- if (pages)
227
- items.push({ label: 'New Page', icon: Plus, onClick: () => nav(`/${pages.slug}/new`) });
228
- items.push({ label: 'Upload Media', icon: Upload, onClick: () => nav('/media') });
229
- items.push({ label: 'New Form', icon: Plus, onClick: () => nav('/forms') });
230
- items.push({ label: 'Manage SEO', icon: Search, onClick: () => nav('/seo') });
231
- items.push({ label: 'View API', icon: Globe, onClick: () => nav('/api-keys') });
252
+ const pagesSlug = pages?.slug ?? 'pages';
253
+ const items = [
254
+ { label: 'New Post', icon: Plus, onClick: () => nav(`/${postsSlug}/new`) },
255
+ { label: 'New Page', icon: Plus, onClick: () => nav(`/${pagesSlug}/new`) },
256
+ { label: 'Upload Media', icon: Upload, onClick: () => nav('/media') },
257
+ { label: 'New Form', icon: Plus, onClick: () => nav('/forms') },
258
+ { label: 'View API', icon: Globe, onClick: () => nav('/api-keys') },
259
+ ];
232
260
  return items;
233
261
  }, [collections, onNavigate]); // eslint-disable-line react-hooks/exhaustive-deps
234
262
  // ── Recent activity ─────────────────────────────────────────────────────
@@ -264,57 +292,65 @@ export function Dashboard({ config, session, onNavigate }) {
264
292
  };
265
293
  });
266
294
  }, [stats, collections]);
267
- // ── Content health summary (derived from /stats) ────────────────────────
295
+ // ── Content health (sourced from /stats/content-health) ─────────────────
296
+ // Persisted by the nightly content-health cron. The four issue rows
297
+ // map 1:1 to ContentIssueType in the schema; the labels are
298
+ // user-facing and intentionally read like the reference dashboard.
268
299
  const contentHealth = useMemo(() => {
269
- const score = stats?.avgSeoScore ?? 0;
270
- const counts = stats?.statusCounts ?? {};
271
- const totalDrafts = counts['DRAFT'] ?? 0;
272
- const totalScheduled = counts['SCHEDULED'] ?? 0;
273
- const totalInReview = counts['IN_REVIEW'] ?? 0;
300
+ const counts = contentHealthData?.counts ?? {};
301
+ const score = contentHealthData?.score ?? 100;
302
+ const label = contentHealthData?.label ?? 'Good';
303
+ const tone = score >= 70 ? 'ok' : score >= 40 ? 'warn' : score > 0 ? 'err' : 'muted';
304
+ // Issue list — only render rows that have non-zero counts so the
305
+ // card stays compact when the corpus is healthy. The empty state
306
+ // below picks up when all four are zero.
274
307
  const issues = [];
275
- if (totalDrafts > 0) {
276
- issues.push({ label: 'Drafts pending publish', count: totalDrafts, tone: 'warn' });
277
- }
278
- if (totalInReview > 0) {
279
- issues.push({ label: 'Awaiting review', count: totalInReview, tone: 'warn' });
280
- }
281
- if (totalScheduled > 0) {
282
- issues.push({ label: 'Scheduled to publish', count: totalScheduled, tone: 'muted' });
283
- }
284
- if (score > 0 && score < 70) {
308
+ const missingMeta = counts['MISSING_META_DESCRIPTION'] ?? 0;
309
+ const brokenLinks = counts['BROKEN_INTERNAL_LINK'] ?? 0;
310
+ const missingAlt = counts['MISSING_ALT_TEXT'] ?? 0;
311
+ const outdated = counts['OUTDATED_CONTENT'] ?? 0;
312
+ if (missingMeta > 0)
285
313
  issues.push({
286
- label: 'Pages with weak SEO',
287
- count: Math.max(1, Math.round((70 - score) / 10)),
288
- tone: score < 40 ? 'err' : 'warn',
314
+ kind: 'MISSING_META_DESCRIPTION',
315
+ label: 'Missing meta descriptions',
316
+ count: missingMeta,
317
+ tone: 'warn',
318
+ });
319
+ if (brokenLinks > 0)
320
+ issues.push({
321
+ kind: 'BROKEN_INTERNAL_LINK',
322
+ label: 'Broken internal links',
323
+ count: brokenLinks,
324
+ tone: 'err',
325
+ });
326
+ if (missingAlt > 0)
327
+ issues.push({
328
+ kind: 'MISSING_ALT_TEXT',
329
+ label: 'Missing alt text',
330
+ count: missingAlt,
331
+ tone: 'warn',
332
+ });
333
+ if (outdated > 0)
334
+ issues.push({
335
+ kind: 'OUTDATED_CONTENT',
336
+ label: 'Outdated content (90+ days)',
337
+ count: outdated,
338
+ tone: 'warn',
289
339
  });
290
- }
291
340
  return {
292
341
  score,
293
- label: score >= 70 ? 'Good' : score >= 40 ? 'Fair' : score > 0 ? 'Poor' : 'No data',
294
- tone: score >= 70 ? 'ok' : score >= 40 ? 'warn' : score > 0 ? 'err' : 'muted',
342
+ label,
343
+ tone,
295
344
  issues,
345
+ hasData: contentHealthData !== null,
346
+ loading: contentHealthLoading,
296
347
  };
297
- }, [stats]);
298
- // ── Content delivery tiles ──────────────────────────────────────────────
299
- const delivery = useMemo(() => {
300
- const sched = stats?.statusCounts?.['SCHEDULED'] ?? 0;
301
- return {
302
- totalDocs: stats?.totalDocuments ?? 0,
303
- forms: stats?.formCount ?? 0,
304
- scheduled: sched,
305
- webhooks: {
306
- total: stats?.webhookCount ?? 0,
307
- active: stats?.webhookActiveCount ?? 0,
308
- },
309
- };
310
- }, [stats]);
348
+ }, [contentHealthData, contentHealthLoading]);
311
349
  const totalIssues = contentHealth.issues.reduce((s, i) => s + i.count, 0);
312
350
  // ── Render ──────────────────────────────────────────────────────────────
313
351
  if (loading && !stats) {
314
352
  return (_jsx("div", { className: "flex h-64 items-center justify-center p-4 sm:p-6", children: _jsx(Loader2, { className: "h-6 w-6 animate-spin text-violet-600" }) }));
315
353
  }
316
- const heroPostSlug = collections.find((c) => c.slug === 'posts' || c.type === 'post')?.slug ?? 'posts';
317
- const siteUrl = config?.site?.url ?? config?.seo?.siteUrl ?? null;
318
354
  return (_jsxs("div", { className: "w-full space-y-5 p-4 sm:p-6 lg:px-8", children: [health && health.status === 'degraded' && (_jsxs("div", { className: "flex items-start gap-3 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-900 dark:bg-blue-950/40", children: [_jsx(Database, { className: "mt-0.5 h-5 w-5 shrink-0 text-blue-600 dark:text-blue-400" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "text-sm font-medium text-blue-900 dark:text-blue-200", children: "Database setup required" }), _jsx("p", { className: "mt-0.5 text-xs text-blue-700 dark:text-blue-300", children: !health.databaseConnected
319
355
  ? 'Cannot connect to the database. Check your DATABASE_URL environment variable.'
320
356
  : !health.secretConfigured
@@ -322,7 +358,7 @@ export function Dashboard({ config, session, onNavigate }) {
322
358
  : `Some CMS models are missing: ${Object.entries(health.models)
323
359
  .filter(([, v]) => !v)
324
360
  .map(([k]) => k)
325
- .join(', ')}. Run your database migrations.` })] })] })), error && exhausted && (_jsxs("div", { className: "flex items-center gap-3 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-900 dark:bg-amber-950/40", children: [_jsx(AlertTriangle, { className: "h-5 w-5 shrink-0 text-amber-600 dark:text-amber-400" }), _jsx("span", { className: "flex-1 text-sm text-amber-800 dark:text-amber-200", children: "Some dashboard data may be unavailable." }), _jsx("button", { onClick: refetch, className: "rounded-lg border border-amber-300 px-3 py-1 text-sm text-amber-700 transition-colors hover:bg-amber-100 dark:border-amber-700 dark:text-amber-200 dark:hover:bg-amber-900/40", children: "Retry" })] })), _jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("h1", { className: "text-foreground text-xl font-semibold tracking-tight sm:text-2xl", children: [greeting, ", ", userName, " ", _jsx("span", { "aria-hidden": true, children: "\uD83D\uDC4B" })] }), _jsxs("p", { className: "text-muted-foreground mt-0.5 text-sm", children: [dateStr, totalIssues > 0 && (_jsxs("span", { className: "hidden sm:inline", children: [' · ', totalIssues, " content item", totalIssues === 1 ? '' : 's', " need attention"] }))] })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsxs("button", { onClick: () => nav(`/${heroPostSlug}/new`), className: "inline-flex items-center gap-1.5 rounded-lg bg-violet-600 px-3.5 py-2 text-sm font-medium text-white transition-colors hover:bg-violet-700", children: [_jsx(Plus, { className: "h-3.5 w-3.5" }), " New Post"] }), siteUrl && (_jsxs("a", { href: siteUrl, target: "_blank", rel: "noopener noreferrer", className: "border-border bg-card hover:bg-accent hover:text-accent-foreground hidden items-center gap-1.5 rounded-lg border px-3 py-2 text-sm transition-colors sm:inline-flex", children: [_jsx(ExternalLink, { className: "h-3.5 w-3.5" }), " View Site"] }))] })] }), _jsx("div", { className: "-mx-1 flex gap-2 overflow-x-auto px-1 pb-1 [scrollbar-width:thin]", children: quickActions.map((a) => (_jsxs("button", { onClick: a.onClick, className: "border-border bg-card inline-flex shrink-0 items-center gap-1.5 rounded-lg border px-3.5 py-2 text-sm shadow-sm transition-colors hover:border-violet-400 hover:bg-violet-50 hover:text-violet-700 dark:hover:bg-violet-950/40 dark:hover:text-violet-300", children: [_jsx(a.icon, { className: "h-3.5 w-3.5" }), a.label] }, a.label))) }), _jsx("div", { className: "grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-5", children: statCards.map((card) => {
361
+ .join(', ')}. Run your database migrations.` })] })] })), error && exhausted && (_jsxs("div", { className: "flex items-center gap-3 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-900 dark:bg-amber-950/40", children: [_jsx(AlertTriangle, { className: "h-5 w-5 shrink-0 text-amber-600 dark:text-amber-400" }), _jsx("span", { className: "flex-1 text-sm text-amber-800 dark:text-amber-200", children: "Some dashboard data may be unavailable." }), _jsx("button", { onClick: refetch, className: "rounded-lg border border-amber-300 px-3 py-1 text-sm text-amber-700 transition-colors hover:bg-amber-100 dark:border-amber-700 dark:text-amber-200 dark:hover:bg-amber-900/40", children: "Retry" })] })), _jsxs("div", { className: "flex flex-col gap-1 sm:gap-0.5", children: [_jsxs("h1", { className: "text-foreground text-xl font-semibold tracking-tight sm:text-2xl", children: [greeting, ", ", userName, " ", _jsx("span", { "aria-hidden": true, children: "\uD83D\uDC4B" })] }), _jsxs("p", { className: "text-muted-foreground text-sm", children: [dateStr, totalIssues > 0 && (_jsxs("span", { className: "hidden sm:inline", children: [' · ', totalIssues, " content item", totalIssues === 1 ? '' : 's', " need attention"] }))] })] }), _jsx("div", { className: "-mx-1 flex gap-2 overflow-x-auto px-1 pb-1 [scrollbar-width:thin]", children: quickActions.map((a) => (_jsxs("button", { onClick: a.onClick, className: "border-border bg-card inline-flex shrink-0 items-center gap-1.5 rounded-lg border px-3.5 py-2 text-sm shadow-sm transition-colors hover:border-violet-400 hover:bg-violet-50 hover:text-violet-700 dark:hover:bg-violet-950/40 dark:hover:text-violet-300", children: [_jsx(a.icon, { className: "h-3.5 w-3.5" }), a.label] }, a.label))) }), _jsx("div", { className: "grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-5", children: statCards.map((card) => {
326
362
  const Inner = (_jsxs(_Fragment, { children: [_jsx("div", { className: `mb-3 flex h-8 w-8 items-center justify-center rounded-lg ${card.iconBg}`, children: _jsx(card.icon, { className: `h-4 w-4 ${card.iconColor}` }) }), _jsxs("div", { className: "flex items-baseline gap-1", children: [_jsx("span", { className: "text-foreground text-2xl leading-none font-semibold tracking-tight", children: card.value }), card.unit && (_jsx("span", { className: "text-muted-foreground text-sm font-medium", children: card.unit }))] }), _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: card.label }), card.hint && (_jsx("p", { className: `mt-1.5 text-[11px] ${card.hintUp ? 'text-emerald-600 dark:text-emerald-400' : 'text-muted-foreground'}`, children: card.hint }))] }));
327
363
  return card.href ? (_jsx("button", { type: "button", onClick: () => nav(card.href), className: "bg-card border-border rounded-xl border p-4 text-left shadow-sm transition-shadow hover:shadow-md", children: Inner }, card.label)) : (_jsx("div", { className: "bg-card border-border rounded-xl border p-4 shadow-sm", children: Inner }, card.label));
328
364
  }) }), _jsxs("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-[minmax(0,1fr)_320px]", children: [_jsxs("section", { className: "bg-card border-border overflow-hidden rounded-xl border shadow-sm", children: [_jsxs("header", { className: "border-border flex items-center justify-between border-b px-4 py-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h2", { className: "text-foreground text-sm font-semibold", children: "Recent Activity" }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-xs", children: "Last 7 days across all content" })] }), _jsx("button", { className: "text-xs font-medium text-violet-600 hover:underline dark:text-violet-400", onClick: () => setActivityLimit((n) => (n >= 20 ? 8 : 20)), children: activity.length >= 20 ? 'Show less' : 'View all' })] }), activity.length === 0 ? (_jsx(EmptyState, { icon: Activity, title: "No activity yet", subtitle: "Content changes will appear here as your team works." })) : (_jsx("ul", { role: "list", className: "divide-border divide-y", children: activity.map((it) => (_jsx("li", { className: "hover:bg-accent/50 cursor-pointer px-4 py-3 transition-colors", onClick: () => nav(`/${it.collection}/${it.id}`), children: _jsxs("div", { className: "flex min-w-0 items-start gap-3", children: [_jsx("div", { className: "mt-0.5 flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-[11px] font-bold text-white", style: { background: it.avatar.color }, "aria-hidden": true, children: it.avatar.initials }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("p", { className: "text-foreground truncate text-sm leading-snug", children: [_jsxs("span", { className: "font-semibold", children: ["\u201C", it.title || 'Untitled', "\u201D"] }), ' ', _jsxs("span", { className: "text-muted-foreground", children: ["\u2014 ", it.typeLabel] })] }), _jsxs("div", { className: "text-muted-foreground mt-1 flex flex-wrap items-center gap-2 text-[11px]", children: [_jsx("span", { className: `inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-medium ${it.statusInfo.cls}`, children: it.statusInfo.label }), _jsx("span", { className: "max-w-[120px] truncate", children: it.author }), _jsx("span", { "aria-hidden": true, children: "\u00B7" }), _jsx("span", { children: it.relTime })] })] })] }) }, it.id))) }))] }), _jsxs("aside", { className: "flex min-w-0 flex-col gap-4", children: [_jsxs("section", { className: "bg-card border-border overflow-hidden rounded-xl border shadow-sm", children: [_jsxs("header", { className: "border-border flex items-center justify-between border-b px-4 py-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h2", { className: "text-foreground text-sm font-semibold", children: "Publishing Queue" }), _jsxs("p", { className: "text-muted-foreground mt-0.5 text-xs", children: [publishQueue.length, " item", publishQueue.length === 1 ? '' : 's', " scheduled"] })] }), _jsx("button", { className: "text-xs font-medium text-violet-600 hover:underline disabled:cursor-default disabled:no-underline disabled:opacity-50 dark:text-violet-400", disabled: publishQueue.length === 0, onClick: () => {
@@ -352,21 +388,59 @@ export function Dashboard({ config, session, onNavigate }) {
352
388
  ? 'text-red-600 dark:text-red-400'
353
389
  : iss.tone === 'warn'
354
390
  ? 'text-amber-600 dark:text-amber-400'
355
- : 'text-muted-foreground'}`, children: iss.count }), _jsx(ChevronRight, { className: "text-muted-foreground/60 h-3.5 w-3.5 shrink-0" })] }, i))) }))] })] })] }), _jsxs("section", { className: "bg-card border-border overflow-hidden rounded-xl border shadow-sm", children: [_jsxs("header", { className: "border-border flex items-center justify-between border-b px-4 py-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h2", { className: "text-foreground text-sm font-semibold", children: "Content Delivery" }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-xs", children: "Real-time platform activity" })] }), _jsxs("button", { className: "inline-flex items-center gap-1 text-xs font-medium text-violet-600 hover:underline dark:text-violet-400", onClick: () => nav('/api-keys'), children: ["API docs ", _jsx(ExternalLink, { className: "h-3 w-3" })] })] }), _jsxs("div", { className: "divide-border grid grid-cols-2 divide-x divide-y lg:grid-cols-4 lg:divide-y-0", children: [_jsx(DeliveryTile, { icon: Activity, label: "Total Documents", value: delivery.totalDocs.toLocaleString(), sub: "across all collections" }), _jsx(DeliveryTile, { icon: Clock, label: "Scheduled Posts", value: delivery.scheduled.toLocaleString(), sub: delivery.scheduled > 0 ? 'in publishing queue' : 'none queued', tone: delivery.scheduled > 0 ? 'ok' : 'muted' }), _jsx(DeliveryTile, { icon: ClipboardList, label: "Form Responses", value: delivery.forms.toLocaleString(), sub: delivery.forms > 0 ? 'total received' : 'none yet', tone: delivery.forms > 0 ? 'ok' : 'muted' }), _jsx(DeliveryTile, { icon: Zap, label: "Active Webhooks", value: `${delivery.webhooks.active} / ${delivery.webhooks.total || 0}`, sub: delivery.webhooks.total === 0
356
- ? 'none configured'
357
- : delivery.webhooks.active === delivery.webhooks.total
358
- ? 'all active'
359
- : `${delivery.webhooks.total - delivery.webhooks.active} paused`, tone: delivery.webhooks.total === 0
360
- ? 'muted'
361
- : delivery.webhooks.active === delivery.webhooks.total
362
- ? 'ok'
363
- : 'warn' })] })] })] }));
391
+ : 'text-muted-foreground'}`, children: iss.count }), _jsx(ChevronRight, { className: "text-muted-foreground/60 h-3.5 w-3.5 shrink-0" })] }, i))) }))] })] })] }), _jsxs("section", { className: "bg-card border-border overflow-hidden rounded-xl border shadow-sm", children: [_jsxs("header", { className: "border-border flex items-center justify-between border-b px-4 py-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h2", { className: "text-foreground text-sm font-semibold", children: "Delivery API" }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-xs", children: "Headless content delivery \u00B7 last 24 hours" })] }), _jsxs("button", { className: "inline-flex items-center gap-1 text-xs font-medium text-violet-600 hover:underline dark:text-violet-400", onClick: () => nav('/api-keys'), children: ["API docs ", _jsx(ExternalLink, { className: "h-3 w-3" })] })] }), _jsx(DeliveryGrid, { delivery: delivery, loading: deliveryLoading })] })] }));
392
+ }
393
+ // ─── Delivery API grid ──────────────────────────────────────────────────────
394
+ function DeliveryGrid({ delivery, loading }) {
395
+ if (loading && !delivery) {
396
+ return (_jsx("div", { className: "divide-border grid grid-cols-2 divide-x divide-y lg:grid-cols-4 lg:divide-y-0", "aria-busy": true, children: [0, 1, 2, 3].map((i) => (_jsxs("div", { className: "px-4 py-3.5", children: [_jsx("div", { className: "bg-muted mb-2 h-3 w-24 rounded" }), _jsx("div", { className: "bg-muted mb-1.5 h-7 w-20 rounded" }), _jsx("div", { className: "bg-muted h-3 w-28 rounded" })] }, i))) }));
397
+ }
398
+ const hasData = delivery?.hasData ?? false;
399
+ const requests = delivery?.requests24h ?? 0;
400
+ const delta = delivery?.deltaPercent ?? null;
401
+ const errorRate = delivery?.errorRate ?? 0;
402
+ const avgLatency = delivery?.avgLatencyMs ?? 0;
403
+ const p95Latency = delivery?.p95LatencyMs ?? 0;
404
+ const webhookTotal = delivery?.webhookCount ?? 0;
405
+ const webhookActive = delivery?.webhookActiveCount ?? 0;
406
+ // Pretty-print large numbers (14_823 → "14.8K") so the tile stays
407
+ // readable at the dashboard's compact density.
408
+ const requestsLabel = formatLargeNumber(requests);
409
+ const errorRatePct = (errorRate * 100).toFixed(2);
410
+ return (_jsxs("div", { className: "divide-border grid grid-cols-2 divide-x divide-y lg:grid-cols-4 lg:divide-y-0", children: [_jsx(DeliveryTile, { icon: Activity, label: "API Requests (24h)", value: hasData ? requestsLabel : '—', sub: !hasData
411
+ ? 'no traffic recorded yet'
412
+ : delta === null
413
+ ? 'no prior baseline'
414
+ : `${delta >= 0 ? '+' : ''}${delta.toFixed(1)}% vs yesterday`, subIcon: hasData && typeof delta === 'number'
415
+ ? delta >= 0
416
+ ? TrendingUp
417
+ : TrendingDown
418
+ : undefined, tone: hasData ? (delta && delta >= 0 ? 'ok' : 'muted') : 'muted' }), _jsx(DeliveryTile, { icon: AlertCircle, label: "Error Rate", value: hasData ? `${errorRatePct}%` : '—', sub: !hasData
419
+ ? 'no traffic recorded yet'
420
+ : errorRate < 0.005
421
+ ? 'healthy'
422
+ : errorRate < 0.05
423
+ ? 'elevated'
424
+ : 'investigate', tone: !hasData ? 'muted' : errorRate < 0.005 ? 'ok' : errorRate < 0.05 ? 'warn' : 'err' }), _jsx(DeliveryTile, { icon: Gauge, label: "Avg Response Time", value: hasData ? `${Math.round(avgLatency)}ms` : '—', sub: hasData ? `p95: ${p95Latency}ms` : 'no traffic recorded yet', tone: !hasData ? 'muted' : avgLatency < 200 ? 'ok' : avgLatency < 600 ? 'warn' : 'err' }), _jsx(DeliveryTile, { icon: Zap, label: "Active Webhooks", value: `${webhookActive} / ${webhookTotal}`, sub: webhookTotal === 0
425
+ ? 'none configured'
426
+ : webhookActive === webhookTotal
427
+ ? 'All active'
428
+ : `${webhookTotal - webhookActive} paused`, tone: webhookTotal === 0 ? 'muted' : webhookActive === webhookTotal ? 'ok' : 'warn' })] }));
429
+ }
430
+ function formatLargeNumber(n) {
431
+ if (n < 1000)
432
+ return n.toLocaleString();
433
+ if (n < 10_000)
434
+ return `${(n / 1000).toFixed(1)}K`;
435
+ if (n < 1_000_000)
436
+ return `${(n / 1000).toFixed(0)}K`;
437
+ return `${(n / 1_000_000).toFixed(1)}M`;
364
438
  }
365
439
  // ─── Sub-components (kept in-file: smaller bundle, no extra module hops) ────
366
440
  function EmptyState({ icon: Icon, title, subtitle, compact = false, }) {
367
441
  return (_jsxs("div", { className: `flex flex-col items-center justify-center gap-1.5 text-center ${compact ? 'px-4 py-6' : 'px-6 py-10'}`, children: [_jsx(Icon, { className: "text-muted-foreground/50 mb-1 h-7 w-7", "aria-hidden": true }), _jsx("p", { className: "text-foreground text-sm font-semibold", children: title }), _jsx("p", { className: "text-muted-foreground max-w-xs text-xs", children: subtitle })] }));
368
442
  }
369
- function DeliveryTile({ icon: Icon, label, value, sub, tone = 'muted', }) {
443
+ function DeliveryTile({ icon: Icon, label, value, sub, subIcon: SubIcon, tone = 'muted', }) {
370
444
  const subTone = tone === 'ok'
371
445
  ? 'text-emerald-600 dark:text-emerald-400'
372
446
  : tone === 'warn'
@@ -374,6 +448,6 @@ function DeliveryTile({ icon: Icon, label, value, sub, tone = 'muted', }) {
374
448
  : tone === 'err'
375
449
  ? 'text-red-600 dark:text-red-400'
376
450
  : 'text-muted-foreground';
377
- return (_jsxs("div", { className: "px-4 py-3.5", children: [_jsxs("div", { className: "text-muted-foreground mb-1 flex items-center gap-1.5", children: [_jsx(Icon, { className: "h-3.5 w-3.5", "aria-hidden": true }), _jsx("span", { className: "text-[11px] font-medium", children: label })] }), _jsx("p", { className: "text-foreground text-xl leading-tight font-semibold tracking-tight", children: value }), sub && _jsx("p", { className: `mt-0.5 text-[11px] ${subTone}`, children: sub })] }));
451
+ return (_jsxs("div", { className: "px-4 py-3.5", children: [_jsxs("div", { className: "text-muted-foreground mb-1 flex items-center gap-1.5", children: [_jsx(Icon, { className: "h-3.5 w-3.5", "aria-hidden": true }), _jsx("span", { className: "text-[11px] font-medium", children: label })] }), _jsx("p", { className: "text-foreground text-xl leading-tight font-semibold tracking-tight", children: value }), sub && (_jsxs("p", { className: `mt-0.5 inline-flex items-center gap-1 text-[11px] ${subTone}`, children: [SubIcon && _jsx(SubIcon, { className: "h-3 w-3 shrink-0", "aria-hidden": true }), sub] }))] }));
378
452
  }
379
453
  //# sourceMappingURL=Dashboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../src/views/Dashboard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../src/views/Dashboard.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actuate-media/cms-admin",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/actuate-media/actuatecms.git",
@@ -87,7 +87,7 @@
87
87
  "tailwindcss": "^4.0.0",
88
88
  "typescript": "^5.7.0",
89
89
  "vitest": "^3.0.0",
90
- "@actuate-media/cms-core": "0.25.0",
90
+ "@actuate-media/cms-core": "0.26.0",
91
91
  "@actuate-media/component-blocks": "0.2.0"
92
92
  },
93
93
  "scripts": {
@@ -100,12 +100,18 @@ export function NotificationBell({
100
100
  // Set of notification IDs we've already rendered. The SSE handler
101
101
  // consults this synchronously so duplicate deliveries (REST refresh
102
102
  // + SSE push, or two SSE retries) don't double-bump the badge.
103
- // Kept in sync with `items` via an effect — the items state is the
104
- // source of truth; this ref is a derived O(1) lookup index.
103
+ //
104
+ // The ref is updated **synchronously** at every call site that
105
+ // changes the set of items (REST refresh, SSE push, dropdown clear).
106
+ // A prior implementation reconciled it via `useEffect([items])`,
107
+ // but that effect runs *after* React commits — so an SSE push that
108
+ // arrives between the REST list resolving (`items` mutated) and the
109
+ // effect running would read a stale ref, fall through the
110
+ // de-dup gate, and append a duplicate row. The reproducible
111
+ // regression was caught by the test
112
+ // `does not double-count a notification that arrives via both
113
+ // SSE and REST`.
105
114
  const seenIdsRef = useRef<Set<string>>(new Set())
106
- useEffect(() => {
107
- seenIdsRef.current = new Set(items.map((n) => n.id))
108
- }, [items])
109
115
  useEffect(() => {
110
116
  return () => {
111
117
  mountedRef.current = false
@@ -130,8 +136,10 @@ export function NotificationBell({
130
136
  if (!out.ok) {
131
137
  onError?.(out.error)
132
138
  setItems([])
139
+ seenIdsRef.current = new Set()
133
140
  } else {
134
141
  setItems(out.result)
142
+ seenIdsRef.current = new Set(out.result.map((n) => n.id))
135
143
  }
136
144
  setLoading(false)
137
145
  },
@@ -154,14 +162,26 @@ export function NotificationBell({
154
162
  const handle = api.subscribe({
155
163
  onNotification: (n) => {
156
164
  if (!mountedRef.current) return
157
- // Defensive: SSE events can race with REST refreshes (or with
158
- // their own retries). The seen-id ref is updated
159
- // synchronously so a second delivery of the same row is a
160
- // no-op for BOTH `items` and the unread badge — guarding only
161
- // setItems would still let the counter drift.
165
+ // SSE events can race with REST refreshes (or with their own
166
+ // retries). Two gates close the door on duplicates:
167
+ // 1. **Synchronous ref check** fast-path that also
168
+ // gates the unread badge bump, so a second delivery of
169
+ // the same row never drifts the counter. The ref is
170
+ // maintained synchronously by `refreshList` so the
171
+ // check sees a consistent snapshot.
172
+ // 2. **Inner setItems check** — final safety net. The
173
+ // updater sees the latest `arr` snapshot React has
174
+ // queued, which may differ from the ref if a
175
+ // `refreshList` resolved between this handler's ref
176
+ // read and the updater running. Without it, an
177
+ // interleaved REST refresh could leave `items` with a
178
+ // duplicate row.
162
179
  if (seenIdsRef.current.has(n.id)) return
163
180
  seenIdsRef.current.add(n.id)
164
- setItems((arr) => [n, ...arr])
181
+ setItems((arr) => {
182
+ if (arr.some((existing) => existing.id === n.id)) return arr
183
+ return [n, ...arr]
184
+ })
165
185
  if (!n.readAt) setUnread((v) => v + 1)
166
186
  },
167
187
  onError: () => {