diff options
| author | Kit Langton <[email protected]> | 2026-02-09 06:55:54 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-09 05:55:54 -0600 |
| commit | 993ac55e39964c400f1ca2f48eeaf1220e5d1bcb (patch) | |
| tree | ef469e2aa809bcc0a300c04981e9e213b8ee76b0 /packages/app/src/pages/layout | |
| parent | 93a11ddedf697c9b673dd59628cee3db48ac67d0 (diff) | |
| download | opencode-993ac55e39964c400f1ca2f48eeaf1220e5d1bcb.tar.gz opencode-993ac55e39964c400f1ca2f48eeaf1220e5d1bcb.zip | |
fix(app): allow creating sessions on touch devices (#12765)
Diffstat (limited to 'packages/app/src/pages/layout')
| -rw-r--r-- | packages/app/src/pages/layout/sidebar-workspace.tsx | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/packages/app/src/pages/layout/sidebar-workspace.tsx b/packages/app/src/pages/layout/sidebar-workspace.tsx index d4ada4f85..a7a33f25e 100644 --- a/packages/app/src/pages/layout/sidebar-workspace.tsx +++ b/packages/app/src/pages/layout/sidebar-workspace.tsx @@ -2,6 +2,7 @@ import { useNavigate, useParams } from "@solidjs/router" import { createEffect, createMemo, For, Show, type Accessor, type JSX } from "solid-js" import { createStore } from "solid-js/store" import { createSortable } from "@thisbeyond/solid-dnd" +import { createMediaQuery } from "@solid-primitives/media" import { base64Encode } from "@opencode-ai/util/encode" import { getFilename } from "@opencode-ai/util/path" import { Button } from "@opencode-ai/ui/button" @@ -114,7 +115,8 @@ export const SortableWorkspace = (props: { const busy = createMemo(() => props.ctx.isBusy(props.directory)) const wasBusy = createMemo((prev) => prev || busy(), false) const loading = createMemo(() => open() && !booted() && sessions().length === 0 && !wasBusy()) - const showNew = createMemo(() => !loading() && (sessions().length === 0 || (active() && !params.id))) + const touch = createMediaQuery("(hover: none)") + const showNew = createMemo(() => !loading() && (touch() || sessions().length === 0 || (active() && !params.id))) const loadMore = async () => { setWorkspaceStore("limit", (limit) => limit + 5) await globalSync.project.loadSessions(props.directory) @@ -270,23 +272,25 @@ export const SortableWorkspace = (props: { </DropdownMenu.Content> </DropdownMenu.Portal> </DropdownMenu> - <Tooltip value={language.t("command.session.new")} placement="top"> - <IconButton - icon="plus-small" - variant="ghost" - class="size-6 rounded-md opacity-0 pointer-events-none group-hover/workspace:opacity-100 group-hover/workspace:pointer-events-auto group-focus-within/workspace:opacity-100 group-focus-within/workspace:pointer-events-auto" - data-action="workspace-new-session" - data-workspace={base64Encode(props.directory)} - aria-label={language.t("command.session.new")} - onClick={(event) => { - event.preventDefault() - event.stopPropagation() - props.ctx.setHoverSession(undefined) - props.ctx.clearHoverProjectSoon() - navigate(`/${slug()}/session`) - }} - /> - </Tooltip> + <Show when={!touch()}> + <Tooltip value={language.t("command.session.new")} placement="top"> + <IconButton + icon="plus-small" + variant="ghost" + class="size-6 rounded-md opacity-0 pointer-events-none group-hover/workspace:opacity-100 group-hover/workspace:pointer-events-auto group-focus-within/workspace:opacity-100 group-focus-within/workspace:pointer-events-auto" + data-action="workspace-new-session" + data-workspace={base64Encode(props.directory)} + aria-label={language.t("command.session.new")} + onClick={(event) => { + event.preventDefault() + event.stopPropagation() + props.ctx.setHoverSession(undefined) + props.ctx.clearHoverProjectSoon() + navigate(`/${slug()}/session`) + }} + /> + </Tooltip> + </Show> </div> </div> </div> |
