From 2c17a980ffdc019d46b9e48a22bf719c009075e0 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 17 Feb 2026 17:06:21 +0000 Subject: [PATCH] refactor(ui): extract dock prompt shell --- packages/app/src/components/question-dock.tsx | 316 +++++++++--------- .../src/pages/session/session-prompt-dock.tsx | 104 +++--- packages/ui/src/components/dock-prompt.tsx | 21 ++ packages/ui/src/components/message-part.css | 125 ++++++- 4 files changed, 336 insertions(+), 230 deletions(-) create mode 100644 packages/ui/src/components/dock-prompt.tsx diff --git a/packages/app/src/components/question-dock.tsx b/packages/app/src/components/question-dock.tsx index 1a0bbbe97..cd2e495b1 100644 --- a/packages/app/src/components/question-dock.tsx +++ b/packages/app/src/components/question-dock.tsx @@ -1,6 +1,7 @@ import { For, Show, createMemo, onCleanup, onMount, type Component } from "solid-js" import { createStore } from "solid-js/store" import { Button } from "@opencode-ai/ui/button" +import { DockPrompt } from "@opencode-ai/ui/dock-prompt" import { Icon } from "@opencode-ai/ui/icon" import { showToast } from "@opencode-ai/ui/toast" import type { QuestionAnswer, QuestionRequest } from "@opencode-ai/sdk/v2" @@ -232,9 +233,11 @@ export const QuestionDock: Component<{ request: QuestionRequest }> = (props) => } return ( -
(root = el)}> -
-
+ (root = el)} + header={ + <>
{summary()}
@@ -254,172 +257,169 @@ export const QuestionDock: Component<{ request: QuestionRequest }> = (props) => )}
-
- -
-
{question()?.question}
- {language.t("ui.question.singleHint")}
}> -
{language.t("ui.question.multiHint")}
- -
- - {(opt, i) => { - const picked = () => store.answers[store.tab]?.includes(opt.label) ?? false - return ( - - ) - }} - - - - - - {language.t("ui.messagePart.option.typeOwnAnswer")} - - {input() || language.t("ui.question.custom.placeholder")} - - - - } - > -
+ } + footer={ + <> + +
+ 0}> + + + +
+ + } + > +
{question()?.question}
+ {language.t("ui.question.singleHint")}
}> +
{language.t("ui.question.multiHint")}
+ +
+ + {(opt, i) => { + const picked = () => store.answers[store.tab]?.includes(opt.label) ?? false + return ( +