summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Hill <[email protected]>2026-03-07 11:39:43 +0000
committerGitHub <[email protected]>2026-03-07 05:39:43 -0600
commit6b99dd50b6117061ccc41c491e8b1bf1b63fc9d0 (patch)
treec03d4e6e7d6d419341d635ab7591758fc14314a3
parentc53c9d4e4e14f2bce31c083a9244f91a073e5cea (diff)
downloadopencode-6b99dd50b6117061ccc41c491e8b1bf1b63fc9d0.tar.gz
opencode-6b99dd50b6117061ccc41c491e8b1bf1b63fc9d0.zip
tui: align session empty states (#16412)
-rw-r--r--packages/app/src/components/session/session-new-view.tsx60
-rw-r--r--packages/app/src/i18n/ar.ts1
-rw-r--r--packages/app/src/i18n/br.ts1
-rw-r--r--packages/app/src/i18n/bs.ts1
-rw-r--r--packages/app/src/i18n/da.ts1
-rw-r--r--packages/app/src/i18n/de.ts1
-rw-r--r--packages/app/src/i18n/en.ts1
-rw-r--r--packages/app/src/i18n/es.ts1
-rw-r--r--packages/app/src/i18n/fr.ts1
-rw-r--r--packages/app/src/i18n/ja.ts1
-rw-r--r--packages/app/src/i18n/ko.ts1
-rw-r--r--packages/app/src/i18n/no.ts1
-rw-r--r--packages/app/src/i18n/pl.ts1
-rw-r--r--packages/app/src/i18n/ru.ts1
-rw-r--r--packages/app/src/i18n/th.ts1
-rw-r--r--packages/app/src/i18n/tr.ts1
-rw-r--r--packages/app/src/i18n/zh.ts1
-rw-r--r--packages/app/src/i18n/zht.ts1
-rw-r--r--packages/app/src/pages/session.tsx6
-rw-r--r--packages/app/src/pages/session/session-side-panel.tsx2
20 files changed, 54 insertions, 31 deletions
diff --git a/packages/app/src/components/session/session-new-view.tsx b/packages/app/src/components/session/session-new-view.tsx
index f2ecd5150..5eb9314e8 100644
--- a/packages/app/src/components/session/session-new-view.tsx
+++ b/packages/app/src/components/session/session-new-view.tsx
@@ -8,8 +8,7 @@ import { getDirectory, getFilename } from "@opencode-ai/util/path"
const MAIN_WORKTREE = "main"
const CREATE_WORKTREE = "create"
-const ROOT_CLASS =
- "size-full flex flex-col justify-end items-start gap-4 flex-[1_0_0] self-stretch max-w-200 mx-auto 2xl:max-w-[1000px] px-6 pb-16"
+const ROOT_CLASS = "size-full flex flex-col"
interface NewSessionViewProps {
worktree: string
@@ -50,33 +49,40 @@ export function NewSessionView(props: NewSessionViewProps) {
return (
<div class={ROOT_CLASS}>
- <div class="text-20-medium text-text-weaker">{language.t("command.session.new")}</div>
- <div class="flex justify-center items-start gap-3 min-h-5">
- <Icon name="folder" size="small" class="mt-0.5 shrink-0" />
- <div class="text-12-medium text-text-weak select-text leading-5">
- {getDirectory(projectRoot())}
- <span class="text-text-strong">{getFilename(projectRoot())}</span>
- </div>
- </div>
- <div class="flex justify-center items-start gap-3 min-h-5">
- <Icon name="branch" size="small" class="mt-0.5 shrink-0" />
- <div class="text-12-medium text-text-weak select-text leading-5">{label(current())}</div>
- </div>
- <Show when={sync.project}>
- {(project) => (
- <div class="flex justify-center items-start gap-3 min-h-5">
- <Icon name="pencil-line" size="small" class="mt-0.5 shrink-0" />
- <div class="text-12-medium text-text-weak leading-5">
- {language.t("session.new.lastModified")}&nbsp;
- <span class="text-text-strong">
- {DateTime.fromMillis(project().time.updated ?? project().time.created)
- .setLocale(language.intl())
- .toRelative()}
- </span>
+ <div class="h-12 shrink-0" aria-hidden />
+ <div class="flex-1 px-6 pb-30 flex items-center justify-center text-center">
+ <div class="w-full max-w-200 flex flex-col items-center text-center gap-4">
+ <div class="text-20-medium text-text-strong">{language.t("session.new.title")}</div>
+ <div class="w-full flex flex-col gap-4 items-center">
+ <div class="flex items-start justify-center gap-3 min-h-5">
+ <div class="text-12-medium text-text-weak select-text leading-5 min-w-0 max-w-160 break-words text-center">
+ {getDirectory(projectRoot())}
+ <span class="text-text-strong">{getFilename(projectRoot())}</span>
+ </div>
</div>
+ <div class="flex items-start justify-center gap-1.5 min-h-5">
+ <Icon name="branch" size="small" class="mt-0.5 shrink-0" />
+ <div class="text-12-medium text-text-weak select-text leading-5 min-w-0 max-w-160 break-words text-center">
+ {label(current())}
+ </div>
+ </div>
+ <Show when={sync.project}>
+ {(project) => (
+ <div class="flex items-start justify-center gap-3 min-h-5">
+ <div class="text-12-medium text-text-weak leading-5 min-w-0 max-w-160 break-words text-center">
+ {language.t("session.new.lastModified")}&nbsp;
+ <span class="text-text-strong">
+ {DateTime.fromMillis(project().time.updated ?? project().time.created)
+ .setLocale(language.intl())
+ .toRelative()}
+ </span>
+ </div>
+ </div>
+ )}
+ </Show>
</div>
- )}
- </Show>
+ </div>
+ </div>
</div>
)
}
diff --git a/packages/app/src/i18n/ar.ts b/packages/app/src/i18n/ar.ts
index 16f2fbf49..c9b92db50 100644
--- a/packages/app/src/i18n/ar.ts
+++ b/packages/app/src/i18n/ar.ts
@@ -456,6 +456,7 @@ export const dict = {
"session.todo.title": "المهام",
"session.todo.collapse": "طي",
"session.todo.expand": "توسيع",
+ "session.new.title": "ابنِ أي شيء",
"session.new.worktree.main": "الفرع الرئيسي",
"session.new.worktree.mainWithBranch": "الفرع الرئيسي ({{branch}})",
"session.new.worktree.create": "إنشاء شجرة عمل جديدة",
diff --git a/packages/app/src/i18n/br.ts b/packages/app/src/i18n/br.ts
index 26cf433e0..951edf0a5 100644
--- a/packages/app/src/i18n/br.ts
+++ b/packages/app/src/i18n/br.ts
@@ -459,6 +459,7 @@ export const dict = {
"session.todo.title": "Tarefas",
"session.todo.collapse": "Recolher",
"session.todo.expand": "Expandir",
+ "session.new.title": "Crie qualquer coisa",
"session.new.worktree.main": "Branch principal",
"session.new.worktree.mainWithBranch": "Branch principal ({{branch}})",
"session.new.worktree.create": "Criar novo worktree",
diff --git a/packages/app/src/i18n/bs.ts b/packages/app/src/i18n/bs.ts
index 6c8198bd7..e8bdcde59 100644
--- a/packages/app/src/i18n/bs.ts
+++ b/packages/app/src/i18n/bs.ts
@@ -515,6 +515,7 @@ export const dict = {
"session.todo.collapse": "Sažmi",
"session.todo.expand": "Proširi",
+ "session.new.title": "Napravi bilo šta",
"session.new.worktree.main": "Glavna grana",
"session.new.worktree.mainWithBranch": "Glavna grana ({{branch}})",
"session.new.worktree.create": "Kreiraj novi worktree",
diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts
index 11da68176..5ea52a5c9 100644
--- a/packages/app/src/i18n/da.ts
+++ b/packages/app/src/i18n/da.ts
@@ -510,6 +510,7 @@ export const dict = {
"session.todo.collapse": "Skjul",
"session.todo.expand": "Udvid",
+ "session.new.title": "Byg hvad som helst",
"session.new.worktree.main": "Hovedgren",
"session.new.worktree.mainWithBranch": "Hovedgren ({{branch}})",
"session.new.worktree.create": "Opret nyt worktree",
diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts
index 51b9ec353..a6cf8045c 100644
--- a/packages/app/src/i18n/de.ts
+++ b/packages/app/src/i18n/de.ts
@@ -467,6 +467,7 @@ export const dict = {
"session.todo.title": "Aufgaben",
"session.todo.collapse": "Einklappen",
"session.todo.expand": "Ausklappen",
+ "session.new.title": "Baue, was du willst",
"session.new.worktree.main": "Haupt-Branch",
"session.new.worktree.mainWithBranch": "Haupt-Branch ({{branch}})",
"session.new.worktree.create": "Neuen Worktree erstellen",
diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts
index c278d6270..97a572f1c 100644
--- a/packages/app/src/i18n/en.ts
+++ b/packages/app/src/i18n/en.ts
@@ -531,6 +531,7 @@ export const dict = {
"session.todo.collapse": "Collapse",
"session.todo.expand": "Expand",
+ "session.new.title": "Build anything",
"session.new.worktree.main": "Main branch",
"session.new.worktree.mainWithBranch": "Main branch ({{branch}})",
"session.new.worktree.create": "Create new worktree",
diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts
index 2665a8085..77ef7970c 100644
--- a/packages/app/src/i18n/es.ts
+++ b/packages/app/src/i18n/es.ts
@@ -516,6 +516,7 @@ export const dict = {
"session.todo.collapse": "Contraer",
"session.todo.expand": "Expandir",
+ "session.new.title": "Construye lo que quieras",
"session.new.worktree.main": "Rama principal",
"session.new.worktree.mainWithBranch": "Rama principal ({{branch}})",
"session.new.worktree.create": "Crear nuevo árbol de trabajo",
diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts
index 1e67db193..c887f9ee8 100644
--- a/packages/app/src/i18n/fr.ts
+++ b/packages/app/src/i18n/fr.ts
@@ -463,6 +463,7 @@ export const dict = {
"session.todo.title": "Tâches",
"session.todo.collapse": "Réduire",
"session.todo.expand": "Développer",
+ "session.new.title": "Créez ce que vous voulez",
"session.new.worktree.main": "Branche principale",
"session.new.worktree.mainWithBranch": "Branche principale ({{branch}})",
"session.new.worktree.create": "Créer un nouvel arbre de travail",
diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts
index ecd38d332..9ddb6baf4 100644
--- a/packages/app/src/i18n/ja.ts
+++ b/packages/app/src/i18n/ja.ts
@@ -457,6 +457,7 @@ export const dict = {
"session.todo.title": "ToDo",
"session.todo.collapse": "折りたたむ",
"session.todo.expand": "展開",
+ "session.new.title": "何でも作る",
"session.new.worktree.main": "メインブランチ",
"session.new.worktree.mainWithBranch": "メインブランチ ({{branch}})",
"session.new.worktree.create": "新しいワークツリーを作成",
diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts
index 8f54b8abd..1e35106d1 100644
--- a/packages/app/src/i18n/ko.ts
+++ b/packages/app/src/i18n/ko.ts
@@ -459,6 +459,7 @@ export const dict = {
"session.todo.title": "할 일",
"session.todo.collapse": "접기",
"session.todo.expand": "펼치기",
+ "session.new.title": "무엇이든 만들기",
"session.new.worktree.main": "메인 브랜치",
"session.new.worktree.mainWithBranch": "메인 브랜치 ({{branch}})",
"session.new.worktree.create": "새 작업 트리 생성",
diff --git a/packages/app/src/i18n/no.ts b/packages/app/src/i18n/no.ts
index 0c94046eb..d9dac8ee5 100644
--- a/packages/app/src/i18n/no.ts
+++ b/packages/app/src/i18n/no.ts
@@ -516,6 +516,7 @@ export const dict = {
"session.todo.collapse": "Skjul",
"session.todo.expand": "Utvid",
+ "session.new.title": "Bygg hva som helst",
"session.new.worktree.main": "Hovedgren",
"session.new.worktree.mainWithBranch": "Hovedgren ({{branch}})",
"session.new.worktree.create": "Opprett nytt worktree",
diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts
index 59c0513be..b63fe5ee4 100644
--- a/packages/app/src/i18n/pl.ts
+++ b/packages/app/src/i18n/pl.ts
@@ -458,6 +458,7 @@ export const dict = {
"session.todo.title": "Zadania",
"session.todo.collapse": "Zwiń",
"session.todo.expand": "Rozwiń",
+ "session.new.title": "Zbuduj cokolwiek",
"session.new.worktree.main": "Główna gałąź",
"session.new.worktree.mainWithBranch": "Główna gałąź ({{branch}})",
"session.new.worktree.create": "Utwórz nowe drzewo robocze",
diff --git a/packages/app/src/i18n/ru.ts b/packages/app/src/i18n/ru.ts
index 2071eaae7..aadb926d2 100644
--- a/packages/app/src/i18n/ru.ts
+++ b/packages/app/src/i18n/ru.ts
@@ -514,6 +514,7 @@ export const dict = {
"session.todo.collapse": "Свернуть",
"session.todo.expand": "Развернуть",
+ "session.new.title": "Создавайте что угодно",
"session.new.worktree.main": "Основная ветка",
"session.new.worktree.mainWithBranch": "Основная ветка ({{branch}})",
"session.new.worktree.create": "Создать новый worktree",
diff --git a/packages/app/src/i18n/th.ts b/packages/app/src/i18n/th.ts
index 987155553..6a25a356a 100644
--- a/packages/app/src/i18n/th.ts
+++ b/packages/app/src/i18n/th.ts
@@ -511,6 +511,7 @@ export const dict = {
"session.todo.collapse": "ย่อ",
"session.todo.expand": "ขยาย",
+ "session.new.title": "สร้างอะไรก็ได้",
"session.new.worktree.main": "สาขาหลัก",
"session.new.worktree.mainWithBranch": "สาขาหลัก ({{branch}})",
"session.new.worktree.create": "สร้าง worktree ใหม่",
diff --git a/packages/app/src/i18n/tr.ts b/packages/app/src/i18n/tr.ts
index 701ee0919..50e559832 100644
--- a/packages/app/src/i18n/tr.ts
+++ b/packages/app/src/i18n/tr.ts
@@ -523,6 +523,7 @@ export const dict = {
"session.todo.collapse": "Daralt",
"session.todo.expand": "Genişlet",
+ "session.new.title": "İstediğini yap",
"session.new.worktree.main": "Ana dal",
"session.new.worktree.mainWithBranch": "Ana dal ({{branch}})",
"session.new.worktree.create": "Yeni çalışma ağacı oluştur",
diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts
index e72d4c0e3..1f88a8222 100644
--- a/packages/app/src/i18n/zh.ts
+++ b/packages/app/src/i18n/zh.ts
@@ -510,6 +510,7 @@ export const dict = {
"session.todo.title": "待办事项",
"session.todo.collapse": "折叠",
"session.todo.expand": "展开",
+ "session.new.title": "构建任何东西",
"session.new.worktree.main": "主分支",
"session.new.worktree.mainWithBranch": "主分支({{branch}})",
"session.new.worktree.create": "创建新的 worktree",
diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts
index 70421dfe1..a75e8ef47 100644
--- a/packages/app/src/i18n/zht.ts
+++ b/packages/app/src/i18n/zht.ts
@@ -507,6 +507,7 @@ export const dict = {
"session.todo.collapse": "折疊",
"session.todo.expand": "展開",
+ "session.new.title": "建構任何東西",
"session.new.worktree.main": "主分支",
"session.new.worktree.mainWithBranch": "主分支 ({{branch}})",
"session.new.worktree.create": "建立新的 worktree",
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx
index 578dadecf..077ab544d 100644
--- a/packages/app/src/pages/session.tsx
+++ b/packages/app/src/pages/session.tsx
@@ -790,7 +790,7 @@ export default function Page() {
}
const emptyTurn = () => (
- <div class="h-full pb-30 flex flex-col items-center justify-center text-center gap-6">
+ <div class="h-full pb-64 flex flex-col items-center justify-center text-center gap-6">
<div class="text-14-regular text-text-weak max-w-56">{language.t("session.review.noChanges")}</div>
</div>
)
@@ -905,7 +905,7 @@ export default function Page() {
diffStyle: layout.review.diffStyle(),
onDiffStyleChange: layout.review.setDiffStyle,
loadingClass: "px-6 py-4 text-text-weak",
- emptyClass: "h-full pb-30 flex flex-col items-center justify-center text-center gap-6",
+ emptyClass: "h-full pb-64 flex flex-col items-center justify-center text-center gap-6",
})}
</div>
</div>
@@ -1274,7 +1274,7 @@ export default function Page() {
container: "px-4",
},
loadingClass: "px-4 py-4 text-text-weak",
- emptyClass: "h-full pb-30 flex flex-col items-center justify-center text-center gap-6",
+ emptyClass: "h-full pb-64 flex flex-col items-center justify-center text-center gap-6",
})}
scroll={ui.scroll}
onResumeScroll={resumeScroll}
diff --git a/packages/app/src/pages/session/session-side-panel.tsx b/packages/app/src/pages/session/session-side-panel.tsx
index ce8b35d04..ffb6ab2e7 100644
--- a/packages/app/src/pages/session/session-side-panel.tsx
+++ b/packages/app/src/pages/session/session-side-panel.tsx
@@ -96,7 +96,7 @@ export function SessionSidePanel(props: {
const empty = (msg: string) => (
<div class="h-full flex flex-col">
<div class="h-12 shrink-0" aria-hidden />
- <div class="flex-1 pb-30 flex items-center justify-center text-center">
+ <div class="flex-1 pb-64 flex items-center justify-center text-center">
<div class="text-12-regular text-text-weak">{msg}</div>
</div>
</div>