@@ -4,7 +4,7 @@ import { Select } from "../Select";
44import { Loader2 , Wand2 } from "lucide-react" ;
55import { cn } from "@/common/lib/utils" ;
66import { Tooltip , TooltipTrigger , TooltipContent } from "../ui/tooltip" ;
7- import { SSHIcon , WorktreeIcon , LocalIcon } from "../icons/RuntimeIcons" ;
7+ import { SSHIcon , WorktreeIcon , LocalIcon , DockerIcon } from "../icons/RuntimeIcons" ;
88import { DocsLink } from "../DocsLink" ;
99import type { WorkspaceNameState } from "@/browser/hooks/useWorkspaceName" ;
1010
@@ -17,9 +17,11 @@ interface CreationControlsProps {
1717 runtimeMode : RuntimeMode ;
1818 defaultRuntimeMode : RuntimeMode ;
1919 sshHost : string ;
20+ dockerImage : string ;
2021 onRuntimeModeChange : ( mode : RuntimeMode ) => void ;
2122 onSetDefaultRuntime : ( mode : RuntimeMode ) => void ;
2223 onSshHostChange : ( host : string ) => void ;
24+ onDockerImageChange : ( image : string ) => void ;
2325 disabled : boolean ;
2426 /** Project name to display as header */
2527 projectName : string ;
@@ -80,6 +82,17 @@ const RUNTIME_OPTIONS: Array<{
8082 idleClass :
8183 "bg-transparent text-muted border-transparent hover:border-[var(--color-runtime-ssh)]/40" ,
8284 } ,
85+ {
86+ value : RUNTIME_MODE . DOCKER ,
87+ label : "Docker" ,
88+ description : "Run in Docker container" ,
89+ docsPath : "/runtime/docker" ,
90+ Icon : DockerIcon ,
91+ activeClass :
92+ "bg-[var(--color-runtime-docker)]/20 text-[var(--color-runtime-docker-text)] border-[var(--color-runtime-docker)]/60" ,
93+ idleClass :
94+ "bg-transparent text-muted border-transparent hover:border-[var(--color-runtime-docker)]/40" ,
95+ } ,
8396] ;
8497
8598function RuntimeButtonGroup ( props : RuntimeButtonGroupProps ) {
@@ -268,7 +281,11 @@ export function CreationControls(props: CreationControlsProps) {
268281 defaultMode = { props . defaultRuntimeMode }
269282 onSetDefault = { props . onSetDefaultRuntime }
270283 disabled = { props . disabled }
271- disabledModes = { isNonGitRepo ? [ RUNTIME_MODE . WORKTREE , RUNTIME_MODE . SSH ] : undefined }
284+ disabledModes = {
285+ isNonGitRepo
286+ ? [ RUNTIME_MODE . WORKTREE , RUNTIME_MODE . SSH , RUNTIME_MODE . DOCKER ]
287+ : undefined
288+ }
272289 />
273290
274291 { /* Branch selector - shown for worktree/SSH */ }
@@ -306,6 +323,21 @@ export function CreationControls(props: CreationControlsProps) {
306323 />
307324 </ div >
308325 ) }
326+
327+ { /* Docker Image Input */ }
328+ { props . runtimeMode === RUNTIME_MODE . DOCKER && (
329+ < div className = "flex items-center gap-2" >
330+ < label className = "text-muted-foreground text-xs" > image</ label >
331+ < input
332+ type = "text"
333+ value = { props . dockerImage }
334+ onChange = { ( e ) => props . onDockerImageChange ( e . target . value ) }
335+ placeholder = "ubuntu:22.04"
336+ disabled = { props . disabled }
337+ className = "bg-bg-dark text-foreground border-border-medium focus:border-accent h-7 w-36 rounded-md border px-2 text-sm focus:outline-none disabled:opacity-50"
338+ />
339+ </ div >
340+ ) }
309341 </ div >
310342 </ div >
311343 </ div >
0 commit comments