diff options
| author | Shoubhit Dash <[email protected]> | 2026-04-03 20:06:33 +0530 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-04-03 14:36:33 +0000 |
| commit | 263dcf75b548810a149f08ea5e32e0f6754128d5 (patch) | |
| tree | a97b0608d780f813806221c4e131840de6320797 /packages/app/src/components/dialog-select-model.tsx | |
| parent | 7994dce0f20d0411689d4ef927be8f95f5cf508e (diff) | |
| download | opencode-263dcf75b548810a149f08ea5e32e0f6754128d5.tar.gz opencode-263dcf75b548810a149f08ea5e32e0f6754128d5.zip | |
fix: restore prompt focus after footer selection (#20841)
Diffstat (limited to 'packages/app/src/components/dialog-select-model.tsx')
| -rw-r--r-- | packages/app/src/components/dialog-select-model.tsx | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx index cb688c30a..fdef866a7 100644 --- a/packages/app/src/components/dialog-select-model.tsx +++ b/packages/app/src/components/dialog-select-model.tsx @@ -86,6 +86,7 @@ const ModelList: Component<{ } type ModelSelectorTriggerProps = Omit<ComponentProps<typeof Kobalte.Trigger>, "as" | "ref"> +type Dismiss = "escape" | "outside" | "select" | "manage" | "provider" export function ModelSelectorPopover(props: { provider?: string @@ -93,25 +94,31 @@ export function ModelSelectorPopover(props: { children?: JSX.Element triggerAs?: ValidComponent triggerProps?: ModelSelectorTriggerProps + onClose?: (cause: "escape" | "select") => void }) { const [store, setStore] = createStore<{ open: boolean - dismiss: "escape" | "outside" | null + dismiss: Dismiss | null }>({ open: false, dismiss: null, }) const dialog = useDialog() - const handleManage = () => { + const close = (dismiss: Dismiss) => { + setStore("dismiss", dismiss) setStore("open", false) + } + + const handleManage = () => { + close("manage") void import("./dialog-manage-models").then((x) => { dialog.show(() => <x.DialogManageModels />) }) } const handleConnectProvider = () => { - setStore("open", false) + close("provider") void import("./dialog-select-provider").then((x) => { dialog.show(() => <x.DialogSelectProvider />) }) @@ -136,21 +143,19 @@ export function ModelSelectorPopover(props: { <Kobalte.Content class="w-72 h-80 flex flex-col p-2 rounded-md border border-border-base bg-surface-raised-stronger-non-alpha shadow-md z-50 outline-none overflow-hidden" onEscapeKeyDown={(event) => { - setStore("dismiss", "escape") - setStore("open", false) + close("escape") event.preventDefault() event.stopPropagation() }} - onPointerDownOutside={() => { - setStore("dismiss", "outside") - setStore("open", false) - }} - onFocusOutside={() => { - setStore("dismiss", "outside") - setStore("open", false) - }} + onPointerDownOutside={() => close("outside")} + onFocusOutside={() => close("outside")} onCloseAutoFocus={(event) => { - if (store.dismiss === "outside") event.preventDefault() + const dismiss = store.dismiss + if (dismiss === "outside") event.preventDefault() + if (dismiss === "escape" || dismiss === "select") { + event.preventDefault() + props.onClose?.(dismiss) + } setStore("dismiss", null) }} > @@ -158,7 +163,7 @@ export function ModelSelectorPopover(props: { <ModelList provider={props.provider} model={props.model} - onSelect={() => setStore("open", false)} + onSelect={() => close("select")} class="p-1" action={ <div class="flex items-center gap-1"> |
