diff --git a/packages/app/src/components/prompt-input-v2.tsx b/packages/app/src/components/prompt-input-v2.tsx index 481b7922cf3..aafbb0c7c35 100644 --- a/packages/app/src/components/prompt-input-v2.tsx +++ b/packages/app/src/components/prompt-input-v2.tsx @@ -37,6 +37,7 @@ export type PromptInputV2ComposerProps = { class?: string controller: PromptInputV2ComposerController borderUnderlay?: boolean + accentSubmit?: boolean } export type PromptInputV2ControllerProps = Omit @@ -53,6 +54,7 @@ export function PromptInputV2Composer(props: PromptInputV2ComposerProps) {
- + diff --git a/packages/app/src/pages/new-session/new-session-workspace-controller.ts b/packages/app/src/pages/new-session/new-session-workspace-controller.ts index efcda27b6ac..6453f5b50dc 100644 --- a/packages/app/src/pages/new-session/new-session-workspace-controller.ts +++ b/packages/app/src/pages/new-session/new-session-workspace-controller.ts @@ -5,7 +5,12 @@ import { useServerSync } from "@/context/server-sync" import { useSettings } from "@/context/settings" import { useSync } from "@/context/sync" import { pathKey } from "@/utils/path-key" -import { isWorkspaceSelection, workspaceDefaultSelection, workspaceDirectories } from "@/utils/workspace" +import { + isWorkspaceDirectory, + isWorkspaceSelection, + workspaceDefaultSelection, + workspaceDirectories, +} from "@/utils/workspace" export function resolveNewSessionWorktree(input: { enabled: boolean @@ -87,6 +92,11 @@ export function createNewSessionWorkspaceController(input: { return { selection: { value, + workspace: createMemo(() => { + const project = sync().project + const current = value() + return current === "create" || (!!project && isWorkspaceDirectory(project, current)) + }), reset: () => input.setSelected(undefined), remember, set: (worktree: string) => { diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index e71997689c9..813e85ab99e 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -37,6 +37,7 @@ import { createAutoScroll } from "@opencode-ai/ui/hooks" import { previewSelectedLines } from "@opencode-ai/session-ui/pierre/selection-bridge" import { Button } from "@opencode-ai/ui/button" import { showToast } from "@/utils/toast" +import { isWorkspaceDirectory } from "@/utils/workspace" import { base64Encode, checksum } from "@opencode-ai/core/util/encode" import { useLocation, useNavigate, useParams, useSearchParams } from "@solidjs/router" import { NewSessionView, SessionHeader } from "@/components/session" @@ -533,6 +534,7 @@ export default function Page() { } const info = createMemo(() => (params.id ? sync().session.get(params.id) : undefined)) + const workspaceSession = createMemo(() => isWorkspaceDirectory(sync().project, info()?.directory ?? sdk().directory)) const isChildSession = createMemo(() => !!info()?.parentID) const canReview = createMemo(() => !!sync().project) const reviewTab = createMemo(() => isDesktop()) @@ -2270,7 +2272,9 @@ export default function Page() { setFollowup("paused", id, true) }, }) - return + return ( + + ) }} } diff --git a/packages/session-ui/src/v2/components/prompt-input/index.tsx b/packages/session-ui/src/v2/components/prompt-input/index.tsx index f7cf181d5cc..66cae4f5f17 100644 --- a/packages/session-ui/src/v2/components/prompt-input/index.tsx +++ b/packages/session-ui/src/v2/components/prompt-input/index.tsx @@ -36,6 +36,7 @@ export type PromptInputV2Mode = "normal" | "shell" export type PromptInputV2Props = { controller: PromptInputV2Interaction + accentSubmit?: boolean disabled?: boolean readOnly?: boolean borderUnderlay?: boolean @@ -258,6 +259,7 @@ export function PromptInputV2(props: PromptInputV2Props) { mode={state.mode} stopping={view.submit.stopping()} disabled={!props.controller.canSubmit()} + accent={props.accentSubmit} sendLabel={i18n.t("ui.promptInput.send")} stopLabel={i18n.t("ui.promptInput.stop")} onSubmit={props.controller.submit} @@ -673,6 +675,7 @@ export function PromptInputV2SubmitButton(props: { mode: PromptInputV2Mode stopping: boolean disabled: boolean + accent?: boolean sendLabel: string stopLabel: string onSubmit: () => void @@ -691,13 +694,16 @@ export function PromptInputV2SubmitButton(props: { tabIndex={props.mode === "normal" ? undefined : -1} icon={props.stopping ? "stop" : props.mode === "shell" ? "arrow-undo-down" : "arrow-up"} variant="primary" - class="size-7 rounded-md p-[6px] text-v2-text-text-contrast shadow-[var(--v2-elevation-button-contrast)] disabled:opacity-40 disabled:text-v2-icon-icon-muted" + class="size-7 rounded-md p-[6px] shadow-[var(--v2-elevation-button-contrast)] disabled:opacity-50" + classList={{ + "text-v2-text-text-contrast": !!props.accent && !props.stopping && !props.disabled, + "text-v2-icon-icon-muted": !props.accent || props.stopping || props.disabled, + }} style={{ - "background-image": props.stopping - ? "linear-gradient(180deg,var(--v2-alpha-light-20) 0%,var(--v2-alpha-light-0) 100%),linear-gradient(90deg,var(--v2-state-bg-danger) 0%,var(--v2-state-bg-danger) 100%)" - : props.disabled - ? "linear-gradient(180deg,var(--v2-alpha-light-20) 0%,var(--v2-alpha-light-0) 100%),linear-gradient(90deg,var(--v2-background-bg-contrast) 0%,var(--v2-background-bg-contrast) 100%)" - : "linear-gradient(180deg,var(--v2-alpha-light-20) 0%,var(--v2-alpha-light-0) 100%),linear-gradient(90deg,var(--v2-background-bg-accent) 0%,var(--v2-background-bg-accent) 100%)", + "background-image": + props.accent && !props.stopping && !props.disabled + ? "linear-gradient(180deg,var(--v2-alpha-light-20) 0%,var(--v2-alpha-light-0) 100%),linear-gradient(90deg,var(--v2-background-bg-accent) 0%,var(--v2-background-bg-accent) 100%)" + : "linear-gradient(180deg,var(--v2-alpha-light-20) 0%,var(--v2-alpha-light-0) 100%),linear-gradient(90deg,var(--v2-background-bg-contrast) 0%,var(--v2-background-bg-contrast) 100%)", }} aria-label={props.stopping ? props.stopLabel : props.sendLabel} onClick={(event) => {