Buckets:
| import { TextAttributes } from "@opentui/core" | |
| import { useTheme } from "../context/theme" | |
| import { useDialog, type DialogContext } from "./dialog" | |
| import { useBindings } from "../keymap" | |
| export type DialogAlertProps = { | |
| title: string | |
| message: string | |
| onConfirm?: () => void | |
| } | |
| export function DialogAlert(props: DialogAlertProps) { | |
| const dialog = useDialog() | |
| const { theme } = useTheme() | |
| useBindings(() => ({ | |
| bindings: [ | |
| { | |
| key: "return", | |
| desc: "Confirm alert", | |
| group: "Dialog", | |
| cmd: () => { | |
| props.onConfirm?.() | |
| dialog.clear() | |
| }, | |
| }, | |
| ], | |
| })) | |
| 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}> | |
| <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(), | |
| ) | |
| }) | |
| } | |
Xet Storage Details
- Size:
- 1.74 kB
- Xet hash:
- fa2dbfb7388bfd5f1942479ba3f378d67009924f7b25500248646875d97b7e5e
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.