diff --git a/packages/tui/src/component/dialog-integration.tsx b/packages/tui/src/component/dialog-integration.tsx
index 258f2e821af..0a92aedf4fa 100644
--- a/packages/tui/src/component/dialog-integration.tsx
+++ b/packages/tui/src/component/dialog-integration.tsx
@@ -805,26 +805,31 @@ function OAuthView(props: {
}) {
const theme = useTheme().surface("dialog")
return (
-
-
-
- {(url) => (
-
-
-
- {(instructions) => {instructions()}}
-
-
- )}
-
- {props.message}
-
-
+ }
+ footer={
+
+ }
+ >
+
+
+ {(url) => (
+
+
+
+ {(instructions) => {instructions()}}
+
+
+ )}
+
+ {props.message}
+
+
)
}
@@ -973,91 +978,98 @@ function StringChoiceField(props: {
],
}))
return (
-
- (store.editing ? back() : dialog.clear())} />
- {(description) => {description()}}
- row.description).length,
- Math.max(3, Math.floor(dimensions().height / 2) - 6),
- )}
- scrollbarOptions={{ visible: false }}
- ref={(value: ScrollBoxRenderable) => {
- scroll = value
- }}
- >
-
- {(row, index) => (
- select(index())}>
-
- {index() + 1}. {row.label}
-
-
- {(description) => (
-
- {description()}
-
- )}
-
-
- )}
-
- select(rows.length)}>
- {rows.length + 1}.
- {store.text || "Type your own answer"}}
- >
-
-
-
- select(rows.length + 1)}>
- {rows.length + 2}. Skip
-
+ (store.editing ? back() : dialog.clear())} />}
+ footer={
+ submit(textarea()?.plainText.trim() || undefined) },
+ { title: "back", key: "esc", onTrigger: back },
+ ]
+ : [
+ { title: "select", key: "↑/↓" },
+ { title: "confirm", key: "enter", onTrigger: () => select(store.selected) },
+ { title: "cancel", key: "esc", onTrigger: () => dialog.clear() },
+ ]
+ }
+ />
+ }
+ >
+
+
+ {(description) => {description()}}
-
- {(error) => {error()}}
- submit(textarea()?.plainText.trim() || undefined) },
- { title: "back", key: "esc", onTrigger: back },
- ]
- : [
- { title: "select", key: "↑/↓" },
- { title: "confirm", key: "enter", onTrigger: () => select(store.selected) },
- { title: "cancel", key: "esc", onTrigger: () => dialog.clear() },
- ]
- }
- />
-
+ row.description).length,
+ Math.max(3, Math.floor(dimensions().height / 2) - 6),
+ )}
+ scrollbarOptions={{ visible: false }}
+ ref={(value: ScrollBoxRenderable) => {
+ scroll = value
+ }}
+ >
+
+ {(row, index) => (
+ select(index())}>
+
+ {index() + 1}. {row.label}
+
+
+ {(description) => (
+
+ {description()}
+
+ )}
+
+
+ )}
+
+ select(rows.length)}>
+ {rows.length + 1}.
+ {store.text || "Type your own answer"}}
+ >
+
+
+
+ select(rows.length + 1)}>
+ {rows.length + 2}. Skip
+
+
+
+ {(error) => {error()}}
+
+
)
}
diff --git a/packages/tui/src/ui/dialog-prompt.tsx b/packages/tui/src/ui/dialog-prompt.tsx
index c7759adba18..eb528759085 100644
--- a/packages/tui/src/ui/dialog-prompt.tsx
+++ b/packages/tui/src/ui/dialog-prompt.tsx
@@ -1,7 +1,7 @@
import { TextareaRenderable } from "@opentui/core"
import { Keymap } from "../context/keymap"
import { useTheme } from "../context/theme"
-import { DIALOG_INSET, DialogFooter, DialogHeader, useDialog, type DialogSize } from "./dialog"
+import { DialogFooter, DialogHeader, DialogLayout, useDialog, type DialogSize } from "./dialog"
import { Show, createEffect, createSignal, onMount, type JSX } from "solid-js"
import { Spinner } from "../component/spinner"
import { useConfig } from "../config"
@@ -118,13 +118,30 @@ export function DialogPrompt(props: DialogPromptProps) {
})
return (
-
- {
- if (!props.busy) (props.onCancel ?? dialog.clear)()
- }}
- />
+ {
+ if (!props.busy) (props.onCancel ?? dialog.clear)()
+ }}
+ />
+ }
+ footer={
+ processing…}>
+ ({
+ title: action.title,
+ command: action.command,
+ onTrigger: () => action.onTrigger(handle),
+ })),
+ ]}
+ />
+
+ }
+ >
{props.description?.()}
-
- processing…}>
- ({
- title: action.title,
- command: action.command,
- onTrigger: () => action.onTrigger(handle),
- })),
- ]}
- />
-
-
-
+
)
}