openAgent
gitlabThe open source UNIVERSAL agent.
clone
https://gitlab.com/bitzzdev/openAgent.gitAIagentautomationopen-sourceuniversal-agent
import { TextAttributes } from "@opentui/core"import { useTheme } from "../context/theme"import { useDialog, type DialogContext } from "./dialog"import { createStore } from "solid-js/store"import { For } from "solid-js"import { Locale } from "../util/locale"import { useBindings } from "../keymap"export type DialogConfirmProps = {title: stringmessage: stringonConfirm?: () => voidonCancel?: () => voidlabel?: string}export type DialogConfirmResult = boolean | undefinedexport function DialogConfirm(props: DialogConfirmProps) {const dialog = useDialog()const { theme } = useTheme()const [store, setStore] = createStore({active: "confirm" as "confirm" | "cancel",})useBindings(() => ({bindings: [{key: "return",desc: "Confirm dialog selection",group: "Dialog",cmd: () => {if (store.active === "confirm") props.onConfirm?.()if (store.active === "cancel") props.onCancel?.()dialog.clear()},},{key: "left",desc: "Previous dialog option",group: "Dialog",cmd: () => {setStore("active", store.active === "confirm" ? "cancel" : "confirm")},},{key: "right",desc: "Next dialog option",group: "Dialog",cmd: () => {setStore("active", store.active === "confirm" ? "cancel" : "confirm")},},],}))return (<box paddingLeft={2} paddingRight={2} gap={1}><box flexDirection="row" justifyContent="space-between"><text attributes={TextAttributes.BOLD} fg={theme.text}>{props.title}</text><text fg={theme.textMuted} onMouseUp={() => dialog.clear()}>esc</text></box><box paddingBottom={1}><text fg={theme.textMuted}>{props.message}</text></box><box flexDirection="row" justifyContent="flex-end" paddingBottom={1}><For each={["cancel", "confirm"] as const}>{(key) => (<boxpaddingLeft={1}paddingRight={1}backgroundColor={key === store.active ? theme.primary : undefined}onMouseUp={() => {if (key === "confirm") props.onConfirm?.()if (key === "cancel") props.onCancel?.()dialog.clear()}}><text fg={key === store.active ? theme.selectedListItemText : theme.textMuted}>{Locale.titlecase(key === "cancel" ? (props.label ?? key) : key)}</text></box>)}</For></box></box>)}DialogConfirm.show = (dialog: DialogContext, title: string, message: string, label?: string) => {return new Promise<DialogConfirmResult>((resolve) => {dialog.replace(() => (<DialogConfirmtitle={title}message={message}onConfirm={() => resolve(true)}onCancel={() => resolve(false)}label={label}/>),() => resolve(undefined),)})}