| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import { TextAttributes } from "@opentui/core"
- import { useTheme } from "../context/theme"
- import { useDialog, type DialogContext } from "./dialog"
- import { useKeyboard } from "@opentui/solid"
- export type DialogAlertProps = {
- title: string
- message: string
- onConfirm?: () => void
- }
- export function DialogAlert(props: DialogAlertProps) {
- const dialog = useDialog()
- const { theme } = useTheme()
- useKeyboard((evt) => {
- if (evt.name === "return") {
- props.onConfirm?.()
- dialog.clear()
- }
- })
- return (
- <box paddingLeft={2} paddingRight={2} gap={1}>
- <box flexDirection="row" justifyContent="space-between">
- <text attributes={TextAttributes.BOLD}>{props.title}</text>
- <text fg={theme.textMuted}>esc</text>
- </box>
- <box paddingBottom={1}>
- <text fg={theme.textMuted}>{props.message}</text>
- </box>
- <box flexDirection="row" justifyContent="flex-end" paddingBottom={1}>
- <box
- paddingLeft={3}
- paddingRight={3}
- backgroundColor={theme.primary}
- onMouseUp={() => {
- props.onConfirm?.()
- dialog.clear()
- }}
- >
- <text fg={theme.selectedListItemText}>ok</text>
- </box>
- </box>
- </box>
- )
- }
- DialogAlert.show = (dialog: DialogContext, title: string, message: string) => {
- return new Promise<void>((resolve) => {
- dialog.replace(
- () => <DialogAlert title={title} message={message} onConfirm={() => resolve()} />,
- () => resolve(),
- )
- })
- }
|