mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-25 17:18:11 +00:00
Add the in-window floating pet (sprite, speech bubble, contact shadow, profile-scoped, resize-safe) and a pop-out always-on-top overlay window with gestures and notifications. Add the Cmd+K pet picker page plus the appearance gallery and size slider in settings. Includes the pet stores, electron overlay wiring, i18n strings, and store tests.
117 lines
3.5 KiB
TypeScript
117 lines
3.5 KiB
TypeScript
import { Command as CommandPrimitive } from 'cmdk'
|
|
import * as React from 'react'
|
|
|
|
import { SearchIcon } from '@/lib/icons'
|
|
import { cn } from '@/lib/utils'
|
|
|
|
function Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>) {
|
|
return (
|
|
<CommandPrimitive
|
|
className={cn(
|
|
'flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground',
|
|
className
|
|
)}
|
|
data-slot="command"
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
interface CommandInputProps extends React.ComponentProps<typeof CommandPrimitive.Input> {
|
|
/** Inline trailing slot, rendered on the right of the search row. */
|
|
right?: React.ReactNode
|
|
}
|
|
|
|
function CommandInput({ className, right, ...props }: CommandInputProps) {
|
|
return (
|
|
<div className="flex h-11 items-center gap-2 border-b border-border px-3" data-slot="command-input-wrapper">
|
|
<SearchIcon className="size-4 shrink-0 text-muted-foreground" />
|
|
<CommandPrimitive.Input
|
|
className={cn(
|
|
'flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',
|
|
className
|
|
)}
|
|
data-slot="command-input"
|
|
{...props}
|
|
/>
|
|
{right}
|
|
</div>
|
|
)
|
|
}
|
|
|
|
function CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) {
|
|
return (
|
|
<CommandPrimitive.List
|
|
className={cn('max-h-100 overflow-y-auto overflow-x-hidden', className)}
|
|
data-slot="command-list"
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function CommandEmpty({ ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>) {
|
|
return (
|
|
<CommandPrimitive.Empty
|
|
className="py-6 text-center text-sm text-muted-foreground"
|
|
data-slot="command-empty"
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>) {
|
|
return (
|
|
<CommandPrimitive.Group
|
|
className={cn(
|
|
'overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:sticky **:[[cmdk-group-heading]]:top-0 **:[[cmdk-group-heading]]:z-10 **:[[cmdk-group-heading]]:bg-popover **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground',
|
|
className
|
|
)}
|
|
data-slot="command-group"
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>) {
|
|
return (
|
|
<CommandPrimitive.Separator
|
|
className={cn('-mx-1 h-px bg-border', className)}
|
|
data-slot="command-separator"
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function CommandItem({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>) {
|
|
return (
|
|
<CommandPrimitive.Item
|
|
className={cn(
|
|
'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50',
|
|
className
|
|
)}
|
|
data-slot="command-item"
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function CommandShortcut({ className, ...props }: React.ComponentProps<'span'>) {
|
|
return (
|
|
<span
|
|
className={cn('ml-auto text-xs tracking-widest text-muted-foreground', className)}
|
|
data-slot="command-shortcut"
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
export {
|
|
Command,
|
|
CommandEmpty,
|
|
CommandGroup,
|
|
CommandInput,
|
|
CommandItem,
|
|
CommandList,
|
|
CommandSeparator,
|
|
CommandShortcut
|
|
}
|