opencode/packages/tui/src/ui/dialog-export-result.tsx

57 lines
1.6 KiB
TypeScript

import { TextAttributes } from "@opentui/core"
import { Keymap } from "../context/keymap"
import { useTheme } from "../context/theme"
import { useDialog, type DialogContext } from "./dialog"
export function DialogExportResult(props: { path: string; onClose?: () => void }) {
const dialog = useDialog()
const { themeV2 } = useTheme().contextual("elevated")
const close = () => {
props.onClose?.()
dialog.clear()
}
Keymap.createLayer(() => ({
mode: "modal",
commands: [
{
bind: "return",
title: "Close export result",
group: "Dialog",
run: close,
},
],
}))
return (
<box paddingLeft={2} paddingRight={2} gap={1}>
<box flexDirection="row" justifyContent="space-between">
<text attributes={TextAttributes.BOLD} fg={themeV2.text.default}>
Session exported
</text>
<text fg={themeV2.text.subdued} onMouseUp={close}>
esc
</text>
</box>
<box>
<text fg={themeV2.text.default}>{props.path}</text>
</box>
<box flexDirection="row" justifyContent="flex-end" gap={1} paddingBottom={1}>
<box
paddingLeft={3}
paddingRight={3}
backgroundColor={themeV2.background.action.primary.focused}
onMouseUp={close}
>
<text fg={themeV2.text.action.primary.focused}>Close</text>
</box>
</box>
</box>
)
}
DialogExportResult.show = (dialog: DialogContext, path: string) =>
new Promise<void>((resolve) => {
dialog.replace(() => <DialogExportResult path={path} onClose={resolve} />, resolve)
})