mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-13 14:02:16 +00:00
Bring Hermes-Setup.exe's UI onto the shared design tokens (self-contained, no
desktop-component coupling) and add two capabilities:
- design: flat stage rows (running step opaque, rest muted), neutral check /
destructive cross, running fourier-flow Loader, hairline --stroke-nous
borders, fill-less log panel; ported BrandMark (nous-girl) + HackeryButton +
Loader standalone; re-synced button variants; de-boxed success/failure.
- theme: follow the OS light/dark via the authoritative Tauri window theme
(theme.ts + onThemeChanged, core🪟allow-theme), with Nous dark seed
colors in styles.css so the --ui-*/--dt-* chain derives correctly.
- updates: split the monolithic "Updating" bar into handoff -> download ->
rebuild (+ install on macOS) stages via a shared update_stages() builder, a
live elapsed timer on the running stage, and a dev-only fake-boot preview
(gated on import.meta.env.DEV, stripped from the shipped bundle).
36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import { Loader2 } from 'lucide-react'
|
|
|
|
import { cn } from '../lib/utils'
|
|
|
|
/*
|
|
* HackeryButton — the onboarding "Begin" CTA, ported standalone.
|
|
*
|
|
* Bracketed [ LABEL ], mono/uppercase, primary accent on a --stroke-nous hairline.
|
|
* Lifted from apps/desktop's desktop-onboarding-overlay.tsx (sans the exit-scramble
|
|
* choreography, which is overlay-specific). Self-contained: cn + lucide only.
|
|
*/
|
|
export function HackeryButton({
|
|
className,
|
|
label,
|
|
loading,
|
|
...props
|
|
}: Omit<React.ComponentProps<'button'>, 'children'> & { label: React.ReactNode; loading?: boolean }) {
|
|
return (
|
|
<button
|
|
{...props}
|
|
className={cn(
|
|
'group inline-flex cursor-pointer items-center gap-2 rounded-md border border-(--stroke-nous) px-6 py-2.5',
|
|
'font-mono text-xs font-semibold uppercase text-primary',
|
|
'transition-all duration-150 hover:border-primary/60 hover:bg-primary/[0.06]',
|
|
'disabled:pointer-events-none disabled:opacity-50',
|
|
className
|
|
)}
|
|
type="button"
|
|
>
|
|
<span className="text-primary/40 transition-colors group-hover:text-primary">[</span>
|
|
{loading ? <Loader2 className="size-3 animate-spin" /> : null}
|
|
<span className="-mr-[0.25em] pl-[0.25em] tracking-[0.25em]">{label}</span>
|
|
<span className="text-primary/40 transition-colors group-hover:text-primary">]</span>
|
|
</button>
|
|
)
|
|
}
|