@adea-ai/ui 0.10.9 → 0.10.10
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/components/version-dialog.js +4 -4
- package/dist/components/workspace-logo.d.ts +1 -1
- package/dist/components/workspace-logo.js +2 -2
- package/package.json +1 -1
- package/src/components/version-dialog.tsx +7 -7
- package/src/components/workspace-logo.tsx +2 -2
- package/src/styles/theme.css +7 -0
|
@@ -14,7 +14,7 @@ function errorMessage(caught, fallback) {
|
|
|
14
14
|
}
|
|
15
15
|
function phaseLabel(update, fallbackVersion) {
|
|
16
16
|
if (!update)
|
|
17
|
-
return `
|
|
17
|
+
return `Adea v${fallbackVersion}`;
|
|
18
18
|
if (update.phase === "checking")
|
|
19
19
|
return "Checking for updates…";
|
|
20
20
|
if (update.phase === "available" && update.available_version) {
|
|
@@ -25,7 +25,7 @@ function phaseLabel(update, fallbackVersion) {
|
|
|
25
25
|
}
|
|
26
26
|
if (update.phase === "failed")
|
|
27
27
|
return `Version ${update.current_version} · Retry`;
|
|
28
|
-
return `
|
|
28
|
+
return `Adea v${update.current_version || fallbackVersion}`;
|
|
29
29
|
}
|
|
30
30
|
function isUpdateBusy(update) {
|
|
31
31
|
return (update?.phase === "checking" ||
|
|
@@ -126,11 +126,11 @@ export function VersionDialog({ adapter, fallbackVersion = "0.1.0", onOpenChange
|
|
|
126
126
|
const currentChangelog = useMemo(() => plainTextFromMarkdown(update?.changelog || "Changelog is loading…"), [update?.changelog]);
|
|
127
127
|
const releaseNotes = update?.release_notes ? plainTextFromMarkdown(update.release_notes) : "";
|
|
128
128
|
const busyFromSnapshot = isUpdateBusy(update);
|
|
129
|
-
return (_jsxs(Dialog, { open: open, onOpenChange: setOpen, children: [controlledOpen === undefined ? (_jsxs(DialogTrigger, { render: _jsx(Button, { type: "button", variant: "ghost", size: "sm", "aria-label": "Open version and updates dialog", "aria-haspopup": "dialog", onClick: () => setOpen(true) }), children: [update?.phase === "available" ? (_jsx(Sparkles, { "aria-hidden": "true" })) : (_jsx(FileText, { "aria-hidden": "true" })), phaseLabel(update, fallbackVersion)] })) : null, _jsxs(DialogContent, { className: "max-w-3xl", children: [_jsx(DialogHeader, { children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground", children: _jsx(Sparkles, { className: "size-5", "aria-hidden": "true" }) }), _jsxs("div", { children: [_jsx(DialogTitle, { children: "Version & updates" }), _jsx(DialogDescription, { children: "Keep
|
|
129
|
+
return (_jsxs(Dialog, { open: open, onOpenChange: setOpen, children: [controlledOpen === undefined ? (_jsxs(DialogTrigger, { render: _jsx(Button, { type: "button", variant: "ghost", size: "sm", "aria-label": "Open version and updates dialog", "aria-haspopup": "dialog", onClick: () => setOpen(true) }), children: [update?.phase === "available" ? (_jsx(Sparkles, { "aria-hidden": "true" })) : (_jsx(FileText, { "aria-hidden": "true" })), phaseLabel(update, fallbackVersion)] })) : null, _jsxs(DialogContent, { className: "max-w-3xl", children: [_jsx(DialogHeader, { children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground", children: _jsx(Sparkles, { className: "size-5", "aria-hidden": "true" }) }), _jsxs("div", { children: [_jsx(DialogTitle, { children: "Version & updates" }), _jsx(DialogDescription, { children: "Keep Adea current and review what changed in each release." })] })] }) }), _jsxs("div", { className: "min-h-0 space-y-5 overflow-y-auto p-6", children: [_jsx("section", { className: "rounded-xl border bg-background/45 p-4", "aria-label": "Version status", children: _jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsx("p", { className: "text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground", children: "Installed version" }), _jsxs("p", { className: "text-xl font-semibold tracking-tight", children: ["v", update?.current_version || fallbackVersion] }), _jsx("p", { className: "text-sm text-muted-foreground", children: update?.phase === "current"
|
|
130
130
|
? "You are running the latest desktop release."
|
|
131
131
|
: update?.phase === "available" && update.available_version
|
|
132
132
|
? `A newer desktop release, v${update.available_version}, is ready.`
|
|
133
133
|
: desktopRuntime
|
|
134
134
|
? "Check the release channel for the latest signed build."
|
|
135
|
-
: "Open this dialog inside the desktop app to check for updates." })] }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", disabled: !desktopRuntime || busy || busyFromSnapshot, onClick: () => void checkForUpdates(), children: [busy || busyFromSnapshot ? (_jsx(LoaderCircle, { className: "animate-spin", "aria-hidden": "true" })) : (_jsx(RefreshCw, { "aria-hidden": "true" })), "Check latest version"] })] }) }), update?.phase === "available" && update.available_version ? (_jsx("section", { className: "rounded-xl border border-primary/35 bg-primary/8 p-4", "aria-label": "Available update", children: _jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsxs("p", { className: "flex items-center gap-2 text-sm font-semibold", children: [_jsx(Sparkles, { className: "size-4 text-primary", "aria-hidden": "true" }), "Version ", update.available_version, " is ready"] }), _jsx("p", { className: "text-sm text-muted-foreground", children: "The signed installer will be verified before
|
|
135
|
+
: "Open this dialog inside the desktop app to check for updates." })] }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", disabled: !desktopRuntime || busy || busyFromSnapshot, onClick: () => void checkForUpdates(), children: [busy || busyFromSnapshot ? (_jsx(LoaderCircle, { className: "animate-spin", "aria-hidden": "true" })) : (_jsx(RefreshCw, { "aria-hidden": "true" })), "Check latest version"] })] }) }), update?.phase === "available" && update.available_version ? (_jsx("section", { className: "rounded-xl border border-primary/35 bg-primary/8 p-4", "aria-label": "Available update", children: _jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsxs("p", { className: "flex items-center gap-2 text-sm font-semibold", children: [_jsx(Sparkles, { className: "size-4 text-primary", "aria-hidden": "true" }), "Version ", update.available_version, " is ready"] }), _jsx("p", { className: "text-sm text-muted-foreground", children: "The signed installer will be verified before Adea restarts." }), formatReleaseDate(update.release_date) ? (_jsxs("p", { className: "text-xs text-muted-foreground", children: ["Released ", formatReleaseDate(update.release_date)] })) : null] }), _jsxs(Button, { type: "button", size: "sm", disabled: busy || busyFromSnapshot, onClick: () => void install(), children: [busy || busyFromSnapshot ? (_jsx(LoaderCircle, { className: "animate-spin", "aria-hidden": "true" })) : (_jsx(Download, { "aria-hidden": "true" })), "Install and restart"] })] }) })) : null, update?.phase === "current" ? (_jsxs("p", { className: "flex items-center gap-2 text-sm text-emerald-700 dark:text-emerald-300", role: "status", children: [_jsx(Check, { className: "size-4", "aria-hidden": "true" }), "Adea is up to date."] })) : null, error ? (_jsx("p", { className: "rounded-lg border border-destructive/35 bg-destructive/8 px-3 py-2 text-sm text-destructive", role: "alert", children: error })) : null, releaseNotes ? (_jsxs("section", { className: "space-y-2", "aria-labelledby": "adea-release-notes", children: [_jsxs("div", { children: [_jsx("h2", { id: "adea-release-notes", className: "text-sm font-semibold", children: "What changed in this release" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Release notes are shown as readable text." })] }), _jsx("div", { className: "max-h-52 overflow-y-auto whitespace-pre-wrap rounded-xl border bg-background/45 p-4 font-mono text-xs leading-5 text-muted-foreground", children: releaseNotes })] })) : null, _jsxs("section", { className: "space-y-2", "aria-labelledby": "agent-hq-changelog", children: [_jsxs("div", { children: [_jsx("h2", { id: "agent-hq-changelog", className: "text-sm font-semibold", children: "Installed changelog" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "A plain-text history of the installed channel." })] }), _jsx("div", { className: "max-h-72 overflow-y-auto whitespace-pre-wrap rounded-xl border bg-background/45 p-4 font-mono text-xs leading-5 text-muted-foreground", children: currentChangelog })] })] }), _jsxs(DialogFooter, { children: [update?.github_url ? (_jsxs(Button, { type: "button", variant: "ghost", size: "sm", onClick: () => window.open(update.github_url, "_blank", "noopener,noreferrer"), children: [_jsx(ExternalLink, { "aria-hidden": "true" }), "View releases"] })) : null, _jsx(DialogClose, { render: _jsx(Button, { type: "button", variant: "outline", size: "sm" }), children: "Close" })] })] })] }));
|
|
136
136
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { SVGProps } from "react";
|
|
2
|
-
/** The canonical
|
|
2
|
+
/** The canonical Adea mark used by web, desktop, and dialogs. */
|
|
3
3
|
export declare function WorkspaceLogo(props: SVGProps<SVGSVGElement>): import("react").JSX.Element;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/** The canonical
|
|
2
|
+
/** The canonical Adea mark used by web, desktop, and dialogs. */
|
|
3
3
|
export function WorkspaceLogo(props) {
|
|
4
|
-
return (_jsxs("svg", { viewBox: "0 0 64 64", role: "img", "aria-label": "
|
|
4
|
+
return (_jsxs("svg", { viewBox: "0 0 64 64", role: "img", "aria-label": "Adea", ...props, children: [_jsx("rect", { width: "64", height: "64", rx: "16", fill: "#111827" }), _jsx("path", { d: "M10 16h7v13h9V16h7v32h-7V36h-9v12h-7z", fill: "#f8fafc" }), _jsx("path", { d: "M45 16c-7.18 0-13 6-13 16s5.82 16 13 16c7.18 0 13-6 13-16s-5.82-16-13-16Zm0 7c3.42 0 6 3.46 6 9s-2.58 9-6 9-6-3.46-6-9 2.58-9 6-9Z", fill: "#f8fafc", fillRule: "evenodd" }), _jsx("path", { d: "m45 35 11 11-4 4-11-11z", fill: "#f8fafc" })] }));
|
|
5
5
|
}
|
package/package.json
CHANGED
|
@@ -60,7 +60,7 @@ function errorMessage(caught: unknown, fallback: string): string {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
function phaseLabel(update: SharedDesktopUpdate | null, fallbackVersion: string): string {
|
|
63
|
-
if (!update) return `
|
|
63
|
+
if (!update) return `Adea v${fallbackVersion}`;
|
|
64
64
|
if (update.phase === "checking") return "Checking for updates…";
|
|
65
65
|
if (update.phase === "available" && update.available_version) {
|
|
66
66
|
return `Update v${update.available_version} available`;
|
|
@@ -69,7 +69,7 @@ function phaseLabel(update: SharedDesktopUpdate | null, fallbackVersion: string)
|
|
|
69
69
|
return "Installing update…";
|
|
70
70
|
}
|
|
71
71
|
if (update.phase === "failed") return `Version ${update.current_version} · Retry`;
|
|
72
|
-
return `
|
|
72
|
+
return `Adea v${update.current_version || fallbackVersion}`;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
function isUpdateBusy(update: SharedDesktopUpdate | null): boolean {
|
|
@@ -215,7 +215,7 @@ export function VersionDialog({
|
|
|
215
215
|
<div>
|
|
216
216
|
<DialogTitle>Version & updates</DialogTitle>
|
|
217
217
|
<DialogDescription>
|
|
218
|
-
Keep
|
|
218
|
+
Keep Adea current and review what changed in each release.
|
|
219
219
|
</DialogDescription>
|
|
220
220
|
</div>
|
|
221
221
|
</div>
|
|
@@ -270,7 +270,7 @@ export function VersionDialog({
|
|
|
270
270
|
Version {update.available_version} is ready
|
|
271
271
|
</p>
|
|
272
272
|
<p className="text-sm text-muted-foreground">
|
|
273
|
-
The signed installer will be verified before
|
|
273
|
+
The signed installer will be verified before Adea restarts.
|
|
274
274
|
</p>
|
|
275
275
|
{formatReleaseDate(update.release_date) ? (
|
|
276
276
|
<p className="text-xs text-muted-foreground">
|
|
@@ -301,7 +301,7 @@ export function VersionDialog({
|
|
|
301
301
|
role="status"
|
|
302
302
|
>
|
|
303
303
|
<Check className="size-4" aria-hidden="true" />
|
|
304
|
-
|
|
304
|
+
Adea is up to date.
|
|
305
305
|
</p>
|
|
306
306
|
) : null}
|
|
307
307
|
{error ? (
|
|
@@ -314,9 +314,9 @@ export function VersionDialog({
|
|
|
314
314
|
) : null}
|
|
315
315
|
|
|
316
316
|
{releaseNotes ? (
|
|
317
|
-
<section className="space-y-2" aria-labelledby="
|
|
317
|
+
<section className="space-y-2" aria-labelledby="adea-release-notes">
|
|
318
318
|
<div>
|
|
319
|
-
<h2 id="
|
|
319
|
+
<h2 id="adea-release-notes" className="text-sm font-semibold">
|
|
320
320
|
What changed in this release
|
|
321
321
|
</h2>
|
|
322
322
|
<p className="text-xs text-muted-foreground">
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { SVGProps } from "react";
|
|
2
2
|
|
|
3
|
-
/** The canonical
|
|
3
|
+
/** The canonical Adea mark used by web, desktop, and dialogs. */
|
|
4
4
|
export function WorkspaceLogo(props: SVGProps<SVGSVGElement>) {
|
|
5
5
|
return (
|
|
6
|
-
<svg viewBox="0 0 64 64" role="img" aria-label="
|
|
6
|
+
<svg viewBox="0 0 64 64" role="img" aria-label="Adea" {...props}>
|
|
7
7
|
<rect width="64" height="64" rx="16" fill="#111827" />
|
|
8
8
|
<path d="M10 16h7v13h9V16h7v32h-7V36h-9v12h-7z" fill="#f8fafc" />
|
|
9
9
|
<path
|
package/src/styles/theme.css
CHANGED
|
@@ -80,6 +80,13 @@
|
|
|
80
80
|
border-color: var(--border);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
+
/* Product expectation (see cursor-check.spec.ts): every enabled button
|
|
84
|
+
shows the pointer cursor regardless of Tailwind preflight defaults. */
|
|
85
|
+
button:not(:disabled),
|
|
86
|
+
[role="button"]:not([aria-disabled="true"]) {
|
|
87
|
+
cursor: pointer;
|
|
88
|
+
}
|
|
89
|
+
|
|
83
90
|
html,
|
|
84
91
|
body {
|
|
85
92
|
min-height: 100%;
|