{t("welcome.noRecentProjects")}
diff --git a/windows/tauri/src/features/panes/components/empty-editor-state.tsx b/windows/tauri/src/features/panes/components/empty-editor-state.tsx
index f9a0a916..8efe9bcd 100644
--- a/windows/tauri/src/features/panes/components/empty-editor-state.tsx
+++ b/windows/tauri/src/features/panes/components/empty-editor-state.tsx
@@ -1,194 +1,24 @@
-import {
- FileTextIcon as FileText,
- FolderOpenIcon as FolderOpen,
- GlobeHemisphereWestIcon as Globe,
- PlusIcon as Plus,
- SparkleIcon as Sparkles,
- TerminalWindowIcon as Terminal,
-} from "@/ui/icons";
-import { useCallback } from "react";
-import {
- BACKEND_UNAVAILABLE_TOOLTIP,
- isBackendCapabilityAvailable,
-} from "@/config/backend-capabilities";
-import { AgentLaunchInput } from "@/features/ai/components/agent-launcher";
-import { useNewAgentAction } from "@/features/ai/hooks/use-new-agent-action";
-import { useBufferStore } from "@/features/editor/stores/buffer.store";
-import { readFileContent } from "@/features/file-system/controllers/file-operations";
-import { openFile } from "@/features/file-system/controllers/platform";
-import { useFileSystemStore } from "@/features/file-system/stores/file-system.store";
-import { useSettingsStore } from "@/features/settings/stores/settings.store";
-import { Button } from "@/ui/button";
-import {
- ContextMenu,
- ContextMenuContent,
- ContextMenuItem,
- ContextMenuSeparator,
- ContextMenuTrigger,
-} from "@/ui/context-menu";
-import { Empty, EmptyHeader, EmptyMedia, EmptyTitle } from "@/ui/empty";
-import { ThinkingOrb } from "@/ui/thinking-orb";
-import Tooltip from "@/ui/tooltip";
-
-interface ActionItem {
- id: string;
- label: string;
- icon: React.ReactNode;
- action: () => void;
- disabled?: boolean;
- tooltip?: string;
-}
-
-const quickActionCardClassName =
- "h-9 min-w-0 w-full justify-start gap-2 overflow-hidden rounded-lg bg-accent/25 px-3 text-subtle-foreground hover:bg-accent/60 hover:text-foreground";
-
-const quickActionIconClassName =
- "flex size-4 shrink-0 items-center justify-center text-subtle-foreground group-hover:text-foreground";
+import { FileTextIcon, MagnifyingGlassIcon } from "@/ui/icons";
+import { useTranslation } from "@/i18n/locale-provider";
export function EmptyEditorState() {
- const isAgentAvailable = isBackendCapabilityAvailable("agent");
- const { openTerminalBuffer, openWebViewerBuffer, openBuffer } = useBufferStore.use.actions();
- const handleOpenFolder = useFileSystemStore.use.handleOpenFolder();
- const webViewerEnabled = useSettingsStore((state) => state.settings.coreFeatures.webViewer);
-
- const handleOpenTerminal = useCallback(() => {
- openTerminalBuffer();
- }, [openTerminalBuffer]);
-
- const handleOpenAgent = useNewAgentAction();
-
- const handleOpenWebViewer = useCallback(() => {
- openWebViewerBuffer("https://");
- }, [openWebViewerBuffer]);
-
- const handleNewFile = useCallback(() => {
- const id = `untitled-${Date.now()}`;
- openBuffer(id, "Untitled", "", false, undefined, false, true);
- }, [openBuffer]);
-
- const handleOpenFile = useCallback(async () => {
- try {
- const selected = await openFile();
- if (selected && typeof selected === "string") {
- const fileName = selected.split("/").pop() || selected;
- const content = await readFileContent(selected);
- openBuffer(selected, fileName, content);
- }
- } catch (error) {
- console.error("Failed to open file:", error);
- }
- }, [openBuffer]);
-
- const quickActions: ActionItem[] = [
- {
- id: "new-file",
- label: "New file",
- icon:
,
- action: handleNewFile,
- },
- {
- id: "find",
- label: "Open file",
- icon:
,
- action: handleOpenFile,
- },
- {
- id: "terminal",
- label: "New terminal",
- icon:
,
- action: handleOpenTerminal,
- disabled: !isBackendCapabilityAvailable("terminal"),
- tooltip: BACKEND_UNAVAILABLE_TOOLTIP,
- },
- {
- id: "research",
- label: webViewerEnabled ? "Open URL" : "Open folder",
- icon: webViewerEnabled ?
:
,
- action: webViewerEnabled ? handleOpenWebViewer : handleOpenFolder,
- },
- ];
+ const { t } = useTranslation();
return (
-
-
-
-
-
-
-
- Where should we begin?
-
-
- {isAgentAvailable ? (
-
- ) : (
-
-
-
- )}
-
-
- {quickActions.map((item) => (
-
- ))}
-
-
-
-
-
-
- New File
-
-
-
- Open Folder
-
- void handleOpenFile()}>
-
- Open File
-
-
-
-
- New Terminal
-
-
-
- New Agent
-
- {webViewerEnabled && (
-
-
- Open URL
-
- )}
-
-
+
+
+
+
+
+
+
+ {t("workbench.emptyEditorTitle")}
+
+
{t("workbench.emptyEditorDescription")}
+
+
);
}
diff --git a/windows/tauri/src/features/settings/components/macos-settings-panels.tsx b/windows/tauri/src/features/settings/components/macos-settings-panels.tsx
new file mode 100644
index 00000000..19f53d7e
--- /dev/null
+++ b/windows/tauri/src/features/settings/components/macos-settings-panels.tsx
@@ -0,0 +1,487 @@
+import { getVersion } from "@tauri-apps/api/app";
+import { useEffect, useState, type ReactNode } from "react";
+import { useUpdater } from "@/features/settings/hooks/use-updater";
+import { useSettingsStore } from "@/features/settings/stores/settings.store";
+import { useTranslation } from "@/i18n/locale-provider";
+import { Button } from "@/ui/button";
+import Switch from "@/ui/switch";
+
+export type MacSettingsCategory =
+ | "general"
+ | "editor"
+ | "keyboard"
+ | "terminal"
+ | "lsp"
+ | "ai"
+ | "updates";
+
+const controlClassName =
+ "h-8 rounded-md border border-input bg-background px-2.5 text-foreground outline-none focus:border-primary";
+
+function SettingsGroup({ title, children }: { title: string; children: ReactNode }) {
+ return (
+
+
+ {title}
+
+ {children}
+
+ );
+}
+
+function SettingsRow({
+ label,
+ description,
+ children,
+}: {
+ label: string;
+ description?: string;
+ children: ReactNode;
+}) {
+ return (
+
+
+
{label}
+ {description ? (
+
+ {description}
+
+ ) : null}
+
+
{children}
+
+ );
+}
+
+function GeneralPanel() {
+ const { t } = useTranslation();
+ const settings = useSettingsStore((state) => state.settings);
+ const updateSetting = useSettingsStore((state) => state.actions.updateSetting);
+ const [projectPlacement, setProjectPlacement] = useState(
+ settings.openFoldersInNewWindow ? "new-window" : "same-window",
+ );
+ const [gitPolicy, setGitPolicy] = useState("ask");
+ const [directoryPatterns, setDirectoryPatterns] = useState(
+ settings.hiddenDirectoryPatterns.join("\n"),
+ );
+ const [filePatterns, setFilePatterns] = useState(settings.hiddenFilePatterns.join("\n"));
+
+ const appearanceMode = settings.syncSystemTheme
+ ? "system"
+ : settings.theme.includes("light")
+ ? "light"
+ : "dark";
+
+ const applyVisibilityPatterns = () => {
+ const parse = (value: string) =>
+ value
+ .split(/\r?\n/)
+ .map((entry) => entry.trim())
+ .filter(Boolean);
+ void updateSetting("hiddenDirectoryPatterns", parse(directoryPatterns));
+ void updateSetting("hiddenFilePatterns", parse(filePatterns));
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void updateSetting("autoSave", checked)}
+ size="sm"
+ />
+
+
+
+
+
+
+
+
+
+
+
+ {t("settings.mac.hiddenPathsDescription")}
+
+
+
+
+
+
+
+
+ );
+}
+
+function EditorPanel() {
+ const { t } = useTranslation();
+ const settings = useSettingsStore((state) => state.settings);
+ const updateSetting = useSettingsStore((state) => state.actions.updateSetting);
+
+ return (
+
+
+
+ void updateSetting("fontSize", Number(event.target.value))}
+ />
+
+
+ void updateSetting("codeLens", checked)}
+ size="sm"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function KeyboardPanel() {
+ const { t } = useTranslation();
+ const settings = useSettingsStore((state) => state.settings);
+ const updateSetting = useSettingsStore((state) => state.actions.updateSetting);
+
+ return (
+
+
+
+
+
+
+
+
+
+ {t("settings.mac.shortcutsDescription")}
+
+
+
+ );
+}
+
+function TerminalPanel() {
+ const { t } = useTranslation();
+ const settings = useSettingsStore((state) => state.settings);
+ const updateSetting = useSettingsStore((state) => state.actions.updateSetting);
+
+ return (
+
+
+
+
+
+ );
+}
+
+function LspPanel() {
+ const { t } = useTranslation();
+ const settings = useSettingsStore((state) => state.settings);
+ const updateSetting = useSettingsStore((state) => state.actions.updateSetting);
+
+ return (
+
+
+
+ void updateSetting("autoCompletion", checked)}
+ size="sm"
+ />
+
+
+ void updateSetting("parameterHints", checked)}
+ size="sm"
+ />
+
+
+ void updateSetting("semanticTokens", checked)}
+ size="sm"
+ />
+
+
+
+
+ {t("settings.mac.detectedServersDescription")}
+
+
+
+ );
+}
+
+function AiPanel() {
+ const { t } = useTranslation();
+ const settings = useSettingsStore((state) => state.settings);
+ const updateSetting = useSettingsStore((state) => state.actions.updateSetting);
+
+ return (
+
+ );
+}
+
+function UpdatesPanel() {
+ const { t } = useTranslation();
+ const [appVersion, setAppVersion] = useState("");
+ const { checking, available, updateInfo, error, checkForUpdates } = useUpdater(false);
+
+ useEffect(() => {
+ void getVersion()
+ .then(setAppVersion)
+ .catch(() => setAppVersion(""));
+ }, []);
+
+ return (
+
+
+
+
+
+
+ {error
+ ? t("settings.mac.updateFailed")
+ : available
+ ? t("settings.mac.updateAvailable", { version: updateInfo?.version ?? "" })
+ : t("settings.mac.updateHint")}
+
+
+
+ );
+}
+
+export function MacSettingsPanel({ category }: { category: MacSettingsCategory }) {
+ switch (category) {
+ case "general":
+ return
;
+ case "editor":
+ return
;
+ case "keyboard":
+ return
;
+ case "terminal":
+ return
;
+ case "lsp":
+ return
;
+ case "ai":
+ return
;
+ case "updates":
+ return
;
+ }
+}
diff --git a/windows/tauri/src/features/settings/components/settings-dialog.tsx b/windows/tauri/src/features/settings/components/settings-dialog.tsx
index 456f33b6..dcdedd66 100644
--- a/windows/tauri/src/features/settings/components/settings-dialog.tsx
+++ b/windows/tauri/src/features/settings/components/settings-dialog.tsx
@@ -1,360 +1,134 @@
-import { CaretDownIcon as CaretDown, MagnifyingGlassIcon as Search } from "@/ui/icons";
-import { useCallback, useEffect, useMemo, useRef, useState } from "react";
+import { useEffect, useState } from "react";
+import type { SettingsTab } from "@/features/window/stores/ui-state.store";
+import { useUIState } from "@/features/window/stores/ui-state.store";
import { useSettingsStore } from "@/features/settings/stores/settings.store";
import { useTranslation } from "@/i18n/locale-provider";
-import {
- resolveSettingsAccess,
- resolveVisibleSettingsSection,
-} from "@/features/settings/lib/settings-access";
-import { filterVisibleSettingsTabs } from "@/features/settings/lib/settings-tab-visibility";
-import {
- getSettingSearchTargetKey,
- SETTINGS_SEARCH_TAB_LABELS,
-} from "@/features/settings/lib/settings-search";
-import { type SettingsTab, useUIState } from "@/features/window/stores/ui-state.store";
-import { Card } from "@/ui/card";
+import { Button } from "@/ui/button";
import Dialog from "@/ui/dialog";
-import { Dropdown, type MenuItem } from "@/ui/dropdown";
-import { Empty, EmptyDescription } from "@/ui/empty";
-import Input from "@/ui/input";
-import type { SearchResult } from "../types/search.types";
-import { SETTINGS_TAB_ITEMS, SettingsVerticalTabs } from "./settings-vertical-tabs";
-
-import { AdvancedSettings } from "./tabs/advanced-settings";
-import { AppearanceSettings } from "./tabs/appearance-settings";
-import { EditorSettings } from "./tabs/editor-settings";
-import { GeneralSettings } from "./tabs/general-settings";
-import { GitSettings } from "./tabs/git-settings";
-import { KeyboardSettings } from "./tabs/keyboard-settings";
-import { FileTreeSettings } from "./tabs/file-tree-settings";
-import { TerminalSettings } from "./tabs/terminal-settings";
+import {
+ ArrowClockwiseIcon,
+ CodeBlockIcon,
+ DatabaseIcon,
+ GearIcon,
+ GearSixIcon,
+ KeyboardIcon,
+ MagicWandIcon,
+ TerminalWindowIcon,
+ type Icon,
+} from "@/ui/icons";
+import { MacSettingsPanel, type MacSettingsCategory } from "./macos-settings-panels";
interface SettingsDialogProps {
isOpen: boolean;
onClose: () => void;
}
-function getSettingsTabLabelKey(tab: SettingsTab) {
- return `settings.tabs.${tab === "file-explorer" ? "files" : tab}`;
+interface CategoryItem {
+ id: MacSettingsCategory;
+ labelKey: string;
+ icon: Icon;
+}
+
+const categories: CategoryItem[] = [
+ { id: "general", labelKey: "settings.tabs.general", icon: GearSixIcon },
+ { id: "editor", labelKey: "settings.tabs.editor", icon: CodeBlockIcon },
+ { id: "keyboard", labelKey: "settings.tabs.keyboard", icon: KeyboardIcon },
+ { id: "terminal", labelKey: "settings.tabs.terminal", icon: TerminalWindowIcon },
+ { id: "lsp", labelKey: "settings.tabs.lsp", icon: DatabaseIcon },
+ { id: "ai", labelKey: "settings.tabs.aiCommit", icon: MagicWandIcon },
+ { id: "updates", labelKey: "settings.tabs.updates", icon: ArrowClockwiseIcon },
+];
+
+function categoryFromRequestedTab(tab: SettingsTab | null): MacSettingsCategory {
+ switch (tab) {
+ case "editor":
+ case "keyboard":
+ case "terminal":
+ case "ai":
+ return tab;
+ case "language":
+ return "lsp";
+ default:
+ return "general";
+ }
}
const SettingsDialog = ({ isOpen, onClose }: SettingsDialogProps) => {
- const { settingsInitialTab, setSettingsInitialTab } = useUIState();
const { t } = useTranslation();
- const [activeTab, setActiveTab] = useState
("general");
- const lastSettingsTab = useSettingsStore((state) => state.settings.lastSettingsTab);
- const updateSetting = useSettingsStore((state) => state.actions.updateSetting);
- const settingsAccess = resolveSettingsAccess(null);
- const { canShowEnterpriseSettings, canShowCollaborationSettings } = settingsAccess;
-
- const clearSearch = useSettingsStore((state) => state.actions.clearSearch);
- const searchQuery = useSettingsStore((state) => state.search.query);
- const searchResults = useSettingsStore((state) => state.search.results);
- const selectedResultId = useSettingsStore((state) => state.search.selectedResultId);
- const selectSearchResult = useSettingsStore((state) => state.actions.selectSearchResult);
- const setSearchQuery = useSettingsStore((state) => state.actions.setSearchQuery);
- const contentRef = useRef(null);
- const searchInputAnchorRef = useRef(null);
- const tabDropdownRef = useRef(null);
- const [isTabDropdownOpen, setIsTabDropdownOpen] = useState(false);
- const [isSearchDropdownOpen, setIsSearchDropdownOpen] = useState(false);
- const resolveVisibleTab = useCallback(
- (tab: SettingsTab) =>
- resolveVisibleSettingsSection(tab, {
- canShowCollaborationSettings,
- canShowEnterpriseSettings,
- }),
- [canShowCollaborationSettings, canShowEnterpriseSettings],
- );
- const visibleSearchResults = useMemo(
- () => searchResults.filter((result) => resolveVisibleTab(result.tab) === result.tab),
- [resolveVisibleTab, searchResults],
- );
- const visibleSearchDropdownResults = visibleSearchResults.slice(0, 12);
- const visibleTabs = filterVisibleSettingsTabs(SETTINGS_TAB_ITEMS, {
- ...settingsAccess,
- matchingTabs: null,
- });
- const activeTabItem =
- visibleTabs.find((tab) => tab.id === activeTab) ??
- SETTINGS_TAB_ITEMS.find((tab) => tab.id === activeTab) ??
- SETTINGS_TAB_ITEMS[0];
- const ActiveTabIcon = activeTabItem.icon;
- // Sync active tab with explicit requests, or fall back to the persisted last section.
- useEffect(() => {
- if (isOpen) {
- const requestedTab = settingsInitialTab ?? lastSettingsTab;
- const nextTab = resolveVisibleTab(requestedTab);
- setActiveTab(nextTab);
- void updateSetting("lastSettingsTab", nextTab);
- }
- }, [
- settingsInitialTab,
- lastSettingsTab,
- isOpen,
- canShowEnterpriseSettings,
- canShowCollaborationSettings,
- updateSetting,
- ]);
-
- const handleTabChange = (tab: SettingsTab) => {
- const nextTab = resolveVisibleTab(tab);
- setActiveTab(nextTab);
- setSettingsInitialTab(nextTab);
- void updateSetting("lastSettingsTab", nextTab);
- };
-
- const navigateToSearchResult = useCallback(
- (result: SearchResult) => {
- const nextTab = resolveVisibleTab(result.tab);
- if (nextTab !== result.tab) return;
-
- setActiveTab(nextTab);
- selectSearchResult(result.id);
- setIsSearchDropdownOpen(false);
- },
- [resolveVisibleTab, selectSearchResult],
- );
- const tabMenuItems: MenuItem[] = visibleTabs.map((tab) => {
- const Icon = tab.icon;
- return {
- id: tab.id,
- label: t(getSettingsTabLabelKey(tab.id)),
- icon: ,
- className: tab.id === activeTab ? "bg-accent text-foreground" : undefined,
- onClick: () => handleTabChange(tab.id),
- };
- });
-
- // Clear search when dialog closes
- useEffect(() => {
- if (!isOpen) {
- clearSearch();
- setIsSearchDropdownOpen(false);
- }
- }, [isOpen, clearSearch]);
+ const settingsInitialTab = useUIState((state) => state.settingsInitialTab);
+ const [activeCategory, setActiveCategory] = useState("general");
+ const resetToDefaults = useSettingsStore((state) => state.actions.resetToDefaults);
useEffect(() => {
if (!isOpen) return;
-
- const clearSearchHighlights = () => {
- const content = contentRef.current;
- if (!content) return;
-
- content
- .querySelectorAll("[data-settings-search-active='true']")
- .forEach((element) => element.removeAttribute("data-settings-search-active"));
- content
- .querySelectorAll("[data-settings-search-section-active='true']")
- .forEach((element) => element.removeAttribute("data-settings-search-section-active"));
- };
-
- if (!selectedResultId) {
- clearSearchHighlights();
- return;
- }
-
- const result = visibleSearchResults.find((item) => item.id === selectedResultId);
- if (!result || result.tab !== activeTab) {
- clearSearchHighlights();
- return;
- }
-
- const frameId = window.requestAnimationFrame(() => {
- const content = contentRef.current;
- if (!content) return;
-
- const sectionKey = getSettingSearchTargetKey(result.section);
- const rowKey = getSettingSearchTargetKey(result.label);
- const section = content.querySelector(
- `[data-settings-section-key="${sectionKey}"]`,
- );
- const target =
- section?.querySelector(`[data-setting-row-key="${rowKey}"]`) ?? section;
-
- if (!target) return;
-
- clearSearchHighlights();
- section?.setAttribute("data-settings-search-section-active", "true");
- target.setAttribute("data-settings-search-active", "true");
- target.scrollIntoView({ block: "center", inline: "nearest" });
- target.focus({ preventScroll: true });
- });
-
- return () => {
- window.cancelAnimationFrame(frameId);
- };
- }, [activeTab, isOpen, selectedResultId, visibleSearchResults]);
-
- useEffect(() => {
- if (!isOpen || !contentRef.current) return;
- contentRef.current.scrollLeft = 0;
- }, [activeTab, isOpen]);
-
- const renderTabContent = () => {
- switch (activeTab) {
- case "general":
- return ;
- case "editor":
- return ;
- case "git":
- return ;
- case "appearance":
- return ;
- case "keyboard":
- return ;
- case "advanced":
- return ;
- case "terminal":
- return ;
- case "file-explorer":
- return ;
- default:
- return ;
- }
- };
+ setActiveCategory(categoryFromRequestedTab(settingsInitialTab));
+ }, [isOpen, settingsInitialTab]);
if (!isOpen) return null;
- const activePanelId = `settings-panel-${activeTab}`;
- const activeTabId = `settings-tab-${activeTab}`;
+ const activeItem = categories.find((category) => category.id === activeCategory) ?? categories[0];
return (
- <>
-
- setIsTabDropdownOpen(false)}
- className="w-fit min-w-0"
- />
- 0}
- anchorRef={searchInputAnchorRef}
- anchorSide="bottom"
- anchorAlign="end"
- onClose={() => setIsSearchDropdownOpen(false)}
- matchAnchorWidth
- className="min-w-0"
- >
-
- {visibleSearchDropdownResults.length > 0 ? (
- visibleSearchDropdownResults.map((result) => {
- const isSelected = selectedResultId === result.id;
-
- return (
-
- );
- })
- ) : (
-
- {t("settings.noMatching")}
-
- )}
+ {t("settings.mac.restoreDefaults")}
+
+
-
- >
+ }
+ classNames={{
+ backdrop: "bg-black/55",
+ modal:
+ "h-[620px] w-[820px] max-h-[calc(100vh-32px)] max-w-[calc(100vw-32px)] border-border bg-background",
+ header: "h-11 border-border border-b bg-surface px-3 py-0",
+ content: "flex h-full p-0",
+ }}
+ >
+
+
+
+
+ {t(activeItem.labelKey)}
+
+
+
+
);
};
diff --git a/windows/tauri/src/features/settings/config/default-settings.ts b/windows/tauri/src/features/settings/config/default-settings.ts
index e10e3b02..7c98264f 100644
--- a/windows/tauri/src/features/settings/config/default-settings.ts
+++ b/windows/tauri/src/features/settings/config/default-settings.ts
@@ -111,7 +111,7 @@ export const defaultSettings: Settings = {
showActivityRailWorktrees: false,
showActivityRailProjectIcons: false,
collapsedActivityRailSections: [],
- sidebarWidth: 220,
+ sidebarWidth: 320,
showGitHubPullRequests: true,
showGitHubIssues: true,
showGitHubActions: true,
diff --git a/windows/tauri/src/features/window/components/title-bar/title-bar.tsx b/windows/tauri/src/features/window/components/title-bar/title-bar.tsx
index 9c931f51..32eb8022 100644
--- a/windows/tauri/src/features/window/components/title-bar/title-bar.tsx
+++ b/windows/tauri/src/features/window/components/title-bar/title-bar.tsx
@@ -29,11 +29,9 @@ import {
ListIcon,
MagnifyingGlassIcon,
PlayIcon,
- SidebarSimpleIcon,
TrashIcon,
WindowExpandIcon,
} from "@/ui/icons";
-import { Toggle } from "@/ui/toggle";
import Tooltip from "@/ui/tooltip";
import { cn } from "@/utils/cn";
import { IS_LINUX, IS_MAC, IS_WINDOWS } from "@/utils/platform";
@@ -63,11 +61,9 @@ const TitleBar = ({ showMinimal = false }: TitleBarProps) => {
const { t } = useTranslation();
const nativeMenuBar = useSettingsStore((state) => state.settings.nativeMenuBar);
const compactMenuBar = useSettingsStore((state) => state.settings.compactMenuBar);
- const activityRailExpanded = useSettingsStore((state) => state.settings.activityRailExpanded);
const headerTrailingItemsOrder = useSettingsStore(
(state) => state.settings.headerTrailingItemsOrder,
);
- const updateSetting = useSettingsStore((state) => state.actions.updateSetting);
const handleOpenFolder = useFileSystemStore((state) => state.handleOpenFolder);
const closeProject = useFileSystemStore((state) => state.closeProject);
const projectTabs = useWorkspaceTabsStore.use.projectTabs();
@@ -249,22 +245,7 @@ const TitleBar = ({ showMinimal = false }: TitleBarProps) => {
)
) : null;
- const sidebarToggle = (
- void updateSetting("activityRailExpanded", pressed)}
- aria-label={activityRailExpanded ? "Collapse activity bar" : "Expand activity bar"}
- size="xs"
- >
-
-
- );
-
- const headerTrailingItems: Array> = [
- ];
+ const headerTrailingItems: Array> = [];
const orderedTrailingItems = orderChromeItems(headerTrailingItems, headerTrailingItemsOrder);
const activeProject = projectTabs.find((project) => project.isActive);
@@ -278,7 +259,7 @@ const TitleBar = ({ showMinimal = false }: TitleBarProps) => {
className="max-w-56 justify-start gap-2 px-2"
onClick={() => setIsProjectPickerVisible(true)}
>
-
+
{projectLabel}
{branchItem?.content}
@@ -361,7 +342,6 @@ const TitleBar = ({ showMinimal = false }: TitleBarProps) => {
>
{menuItem}
- {sidebarToggle}
{macOSAlignedControls}
@@ -384,14 +364,9 @@ const TitleBar = ({ showMinimal = false }: TitleBarProps) => {
className="lithe-title-bar font-sans ui-text-chrome relative z-50 flex h-(--lithe-title-bar-height) items-center justify-between gap-(--lithe-chrome-gap) bg-transparent px-(--lithe-chrome-padding-inline) text-subtle-foreground"
>
-
- {menuItem}
- {sidebarToggle}
- {macOSAlignedControls}
-
+ {macOSAlignedControls}
- {workbenchActions}
{showAppWindowControls && (
diff --git a/windows/tauri/src/i18n/locale.ts b/windows/tauri/src/i18n/locale.ts
index 08c9c12c..187aa73a 100644
--- a/windows/tauri/src/i18n/locale.ts
+++ b/windows/tauri/src/i18n/locale.ts
@@ -12,8 +12,19 @@ const catalogs = {
"workbench.openProject": "Open Project",
"workbench.currentFile": "Current File",
"workbench.moreProjectActions": "More project actions",
+ "workbench.emptyEditorTitle": "Select a file to review",
+ "workbench.emptyEditorDescription": "Changes from external tools will appear automatically.",
"welcome.openProject": "Open Project",
"welcome.recentProjects": "Recent Projects",
+ "welcome.title": "Welcome to Lithe",
+ "welcome.projects": "Projects",
+ "welcome.searchProjects": "Search projects",
+ "welcome.clone": "Clone",
+ "welcome.open": "Open",
+ "welcome.checkUpdates": "Check for Updates",
+ "welcome.removeRecent": "Remove {name} from recent projects",
+ "welcome.noRecentProjects": "No recent projects",
+ "welcome.openFolderHint": "Open a folder to get started.",
"settings.displayLanguage": "Display Language",
"settings.displayLanguageDescription": "Choose the language used throughout Lithe.",
"settings.languageEnglish": "English",
@@ -28,35 +39,124 @@ const catalogs = {
"settings.tabs.terminal": "Terminal",
"settings.tabs.keyboard": "Keybindings",
"settings.tabs.advanced": "Advanced",
+ "settings.tabs.lsp": "LSP",
+ "settings.tabs.aiCommit": "AI & Commit",
+ "settings.tabs.updates": "Updates",
+ "settings.mac.categories": "Settings categories",
+ "settings.mac.restoreDefaults": "Restore Defaults",
+ "settings.mac.done": "Done",
+ "settings.mac.appearance": "Appearance",
+ "settings.mac.colorTheme": "Color theme",
+ "settings.mac.appearanceMode": "Appearance mode",
+ "settings.mac.appearanceDescription":
+ "Choose a color theme and whether Lithe follows the system appearance.",
+ "settings.mac.followSystem": "Follow System",
+ "settings.mac.light": "Light",
+ "settings.mac.dark": "Dark",
+ "settings.mac.language": "Language",
+ "settings.mac.languageDescription":
+ "The interface language changes immediately. English is the default.",
+ "settings.mac.projects": "Projects",
+ "settings.mac.openProjectsIn": "Open projects in",
+ "settings.mac.openProjectsDescription":
+ "Choose whether opening another project asks first, stays in this window, or creates a new window.",
+ "settings.mac.askEveryTime": "Ask Every Time",
+ "settings.mac.thisWindow": "This Window",
+ "settings.mac.newWindow": "New Window",
+ "settings.mac.files": "Files",
+ "settings.mac.autoSave": "Save changed files automatically",
+ "settings.mac.saveLocalChangesWith": "Save local changes with",
+ "settings.mac.gitPolicyDescription":
+ "Choose how local changes are protected before a Git operation.",
+ "settings.mac.hiddenPaths": "Hidden paths",
+ "settings.mac.hiddenPathsDescription":
+ "One entry per line. Directory names hide matching folders; file entries support * and ?.",
+ "settings.mac.directories": "Directories",
+ "settings.mac.filePatterns": "File patterns",
+ "settings.mac.apply": "Apply",
+ "settings.mac.display": "Display",
+ "settings.mac.fontSize": "Font size",
+ "settings.mac.showCodeVision": "Show usages and Git author",
+ "settings.mac.editorTabs": "Editor tabs",
+ "settings.mac.layout": "Layout",
+ "settings.mac.singleRow": "Single Row",
+ "settings.mac.wrapRows": "Wrap Rows",
+ "settings.mac.indentation": "Indentation",
+ "settings.mac.tabWidth": "Tab width",
+ "settings.mac.spaces": "spaces",
+ "settings.mac.keymapPreset": "Keymap",
+ "settings.mac.preset": "Preset",
+ "settings.mac.shortcuts": "Keyboard shortcuts",
+ "settings.mac.searchShortcuts": "Search shortcuts",
+ "settings.mac.shortcutsDescription":
+ "Select a keymap preset, then use the command palette to inspect and run available commands.",
+ "settings.mac.shell": "Shell",
+ "settings.mac.defaultShell": "Default shell",
+ "settings.mac.defaultShellDescription": "Used for new terminal sessions.",
+ "settings.mac.systemDefault": "System Default",
+ "settings.mac.languageServices": "Language services",
+ "settings.mac.autoCompletion": "Auto completion",
+ "settings.mac.autoCompletionDescription":
+ "Show completion suggestions from the active language server.",
+ "settings.mac.parameterHints": "Parameter hints",
+ "settings.mac.semanticHighlighting": "Semantic highlighting",
+ "settings.mac.detectedServers": "Detected language servers",
+ "settings.mac.detectedServersDescription":
+ "Language servers are detected from installed language extensions and start when a supported file opens.",
+ "settings.mac.aiProvider": "AI provider",
+ "settings.mac.provider": "Provider",
+ "settings.mac.apiUrl": "API URL",
+ "settings.mac.model": "Model",
+ "settings.mac.apiKey": "API key or token",
+ "settings.mac.apiKeyPlaceholder": "Stored securely by the app",
+ "settings.mac.saveKey": "Save Key",
+ "settings.mac.commitMessage": "Commit messages",
+ "settings.mac.enableAiCommit": "Generate commit messages with AI",
+ "settings.mac.softwareUpdate": "Software Update",
+ "settings.mac.currentVersion": "Current version: {version}",
+ "settings.mac.checkForUpdates": "Check for Updates",
+ "settings.mac.checking": "Checking…",
+ "settings.mac.updateFailed": "The update check failed. Try again later.",
+ "settings.mac.updateAvailable": "Version {version} is available.",
+ "settings.mac.updateHint": "Lithe can check for new preview and stable releases.",
"settings.git.integration": "Integration",
"settings.git.gitIntegration": "Git Integration",
- "settings.git.gitIntegrationDescription": "Enable source control management with Git repositories",
+ "settings.git.gitIntegrationDescription":
+ "Enable source control management with Git repositories",
"settings.git.autoRefresh": "Auto Refresh Git Status",
- "settings.git.autoRefreshDescription": "Refresh the Git view automatically after relevant file changes and Git events",
+ "settings.git.autoRefreshDescription":
+ "Refresh the Git view automatically after relevant file changes and Git events",
"settings.git.confirmDiscard": "Confirm Before Discard",
- "settings.git.confirmDiscardDescription": "Show a confirmation before discarding file or repository changes",
+ "settings.git.confirmDiscardDescription":
+ "Show a confirmation before discarding file or repository changes",
"settings.git.view": "Git View",
"settings.git.folderChanges": "Folder-Based Changes",
"settings.git.folderChangesDescription": "Show Git changes in a folder tree, similar to Files",
"settings.git.untracked": "Show Untracked Files",
"settings.git.untrackedDescription": "Display untracked files in the Git status panel",
"settings.git.stagedFirst": "Show Staged First",
- "settings.git.stagedFirstDescription": "Render staged changes above unstaged changes in the Git panel",
+ "settings.git.stagedFirstDescription":
+ "Render staged changes above unstaged changes in the Git panel",
"settings.git.openDiff": "Open Diff On Click",
- "settings.git.openDiffDescription": "Open the diff when clicking a changed file instead of opening the file directly",
+ "settings.git.openDiffDescription":
+ "Open the diff when clicking a changed file instead of opening the file directly",
"settings.git.compactBadges": "Compact Git Status Badges",
- "settings.git.compactBadgesDescription": "Use a denser layout for diff stats and staged labels in the Git panel",
+ "settings.git.compactBadgesDescription":
+ "Use a denser layout for diff stats and staged labels in the Git panel",
"settings.git.collapseEmpty": "Collapse Empty Sections",
- "settings.git.collapseEmptyDescription": "Hide empty Git sections like Staged Changes when they have no items",
+ "settings.git.collapseEmptyDescription":
+ "Hide empty Git sections like Staged Changes when they have no items",
"settings.git.rememberPanel": "Remember Last Git Panel Mode",
- "settings.git.rememberPanelDescription": "Restore the last open bottom Git panel section when reopening the Git view",
+ "settings.git.rememberPanelDescription":
+ "Restore the last open bottom Git panel section when reopening the Git view",
"settings.git.defaultDiff": "Default Diff View",
"settings.git.defaultDiffDescription": "Choose the default layout for Git diffs",
"settings.git.unified": "Unified",
"settings.git.split": "Split",
"settings.git.editor": "Editor",
"settings.git.inlineBlame": "Enable Inline Blame",
- "settings.git.inlineBlameDescription": "Show inline Git blame metadata for the current line in the editor",
+ "settings.git.inlineBlameDescription":
+ "Show inline Git blame metadata for the current line in the editor",
"settings.general.version": "Version",
"settings.general.versionDescription": "Check for updates and install the latest app version.",
"settings.general.downloading": "Downloading...",
@@ -72,7 +172,8 @@ const catalogs = {
"settings.general.upToDate": "Lithe {version} · App is up to date",
"settings.general.updateDownloadProgress": "Lithe update download progress",
"settings.general.terminalCommand": "Terminal Command",
- "settings.general.terminalCommandDescription": "Install the `lithe` command to open folders and files from your terminal.",
+ "settings.general.terminalCommandDescription":
+ "Install the `lithe` command to open folders and files from your terminal.",
"settings.general.uninstall": "Uninstall",
"settings.general.uninstalling": "Uninstalling...",
"settings.general.install": "Install",
@@ -83,22 +184,26 @@ const catalogs = {
"settings.general.importSettings": "Import Settings",
"settings.general.importSettingsDescription": "Import matching setup from another editor.",
"settings.general.reportBug": "Report a Bug",
- "settings.general.reportBugDescription": "Choose where to report an issue with environment details.",
+ "settings.general.reportBugDescription":
+ "Choose where to report an issue with environment details.",
"settings.general.open": "Open",
"settings.general.reportVia": "Report via...",
- "settings.general.noReportChannel": "No report channel matches \"{query}\".",
+ "settings.general.noReportChannel": 'No report channel matches "{query}".',
"settings.general.githubReportDescription": "Open a bug report issue",
- "settings.general.cliInstallFailed": "Failed to install CLI: {error}. You may need administrator privileges.",
+ "settings.general.cliInstallFailed":
+ "Failed to install CLI: {error}. You may need administrator privileges.",
"settings.general.cliUninstallFailed": "Failed to uninstall CLI: {error}",
"settings.general.installCommandCopied": "Install command copied to clipboard",
"settings.general.copyCommandFailed": "Failed to copy command: {error}",
"settings.general.latestVersion": "You're on the latest version",
"settings.general.reportTemplateCopied": "Report template copied",
"settings.general.prepareReportFailed": "Failed to prepare bug report",
- "settings.general.bugReportTemplate": "Environment\n\n- App: Lithe {version}\n- OS: {platform} {osVersion}\n\nProblem\n\nDescribe the issue here. Steps to reproduce, expected vs actual.\n",
+ "settings.general.bugReportTemplate":
+ "Environment\n\n- App: Lithe {version}\n- OS: {platform} {osVersion}\n\nProblem\n\nDescribe the issue here. Steps to reproduce, expected vs actual.\n",
"settings.files.display": "Display",
"settings.files.sortOrder": "Sort Order",
- "settings.files.sortOrderDescription": "Choose whether folders stay above files or everything sorts by name",
+ "settings.files.sortOrderDescription":
+ "Choose whether folders stay above files or everything sorts by name",
"settings.files.foldersFirst": "Folders First",
"settings.files.name": "Name",
"settings.files.indentSize": "Indent Size",
@@ -114,14 +219,16 @@ const catalogs = {
"settings.files.showHiddenFiles": "Show Hidden Files",
"settings.files.showHiddenFilesDescription": "Show dotfiles and hidden directories",
"settings.files.respectGitignore": "Respect .gitignore",
- "settings.files.respectGitignoreDescription": "Hide files matched by root and nested .gitignore files",
+ "settings.files.respectGitignoreDescription":
+ "Hide files matched by root and nested .gitignore files",
"settings.files.showGitStatus": "Show Git Status",
"settings.files.showGitStatusDescription": "Display Git color decorations beside changed files",
"settings.files.behavior": "Behavior",
"settings.files.autoReveal": "Auto Reveal Active File",
"settings.files.autoRevealDescription": "Expand and scroll Files to the active editor file",
"settings.files.confirmBeforeDelete": "Confirm Before Delete",
- "settings.files.confirmBeforeDeleteDescription": "Ask for confirmation before deleting a file or folder",
+ "settings.files.confirmBeforeDeleteDescription":
+ "Ask for confirmation before deleting a file or folder",
"settings.files.filters": "Filters",
"settings.files.hiddenFiles": "Hidden Files",
"settings.files.hiddenDirectories": "Hidden Directories",
@@ -132,7 +239,8 @@ const catalogs = {
"settings.editor.fontSize": "Font Size",
"settings.editor.fontSizeDescription": "Editor font size in pixels",
"settings.editor.fontLigatures": "Font Ligatures",
- "settings.editor.fontLigaturesDescription": "Use programming ligatures provided by the selected editor font",
+ "settings.editor.fontLigaturesDescription":
+ "Use programming ligatures provided by the selected editor font",
"settings.editor.italicComments": "Italic Comments",
"settings.editor.italicCommentsDescription": "Render code comments in italics",
"settings.editor.lineHeight": "Line Height",
@@ -152,19 +260,25 @@ const catalogs = {
"settings.editor.indentGuides": "Indent Guides",
"settings.editor.indentGuidesDescription": "Show vertical guides for indentation levels",
"settings.editor.highlightOccurrences": "Highlight Occurrences",
- "settings.editor.highlightOccurrencesDescription": "Highlight visible matches for the word under the cursor",
+ "settings.editor.highlightOccurrencesDescription":
+ "Highlight visible matches for the word under the cursor",
"settings.editor.relativeLineNumbers": "Relative Line Numbers",
- "settings.editor.relativeLineNumbersDescription": "Show relative numbers when Vim mode is active",
+ "settings.editor.relativeLineNumbersDescription":
+ "Show relative numbers when Vim mode is active",
"settings.editor.showMinimap": "Show Minimap",
- "settings.editor.showMinimapDescription": "Show a minimap overview on the right side of the editor",
+ "settings.editor.showMinimapDescription":
+ "Show a minimap overview on the right side of the editor",
"settings.editor.stickyScroll": "Sticky Scroll",
- "settings.editor.stickyScrollDescription": "Keep containing scopes visible at the top while scrolling",
+ "settings.editor.stickyScrollDescription":
+ "Keep containing scopes visible at the top while scrolling",
"settings.editor.bracketPairColorization": "Bracket Pair Colorization",
- "settings.editor.bracketPairColorizationDescription": "Use matching colors to distinguish nested bracket pairs",
+ "settings.editor.bracketPairColorizationDescription":
+ "Use matching colors to distinguish nested bracket pairs",
"settings.editor.smoothScrolling": "Smooth Scrolling",
"settings.editor.smoothScrollingDescription": "Animate editor scrolling between positions",
"settings.editor.scrollBeyondLastLine": "Scroll Beyond Last Line",
- "settings.editor.scrollBeyondLastLineDescription": "Allow scrolling the final line above the bottom of the editor",
+ "settings.editor.scrollBeyondLastLineDescription":
+ "Allow scrolling the final line above the bottom of the editor",
"settings.editor.cursorStyle": "Cursor Style",
"settings.editor.cursorStyleDescription": "Shape of the editor cursor outside Vim normal mode",
"settings.editor.cursorLine": "Line",
@@ -174,7 +288,8 @@ const catalogs = {
"settings.editor.cursorUnderline": "Underline",
"settings.editor.cursorThinUnderline": "Thin Underline",
"settings.editor.cursorBlinking": "Cursor Blinking",
- "settings.editor.cursorBlinkingDescription": "Animation used by the editor cursor outside Vim normal mode",
+ "settings.editor.cursorBlinkingDescription":
+ "Animation used by the editor cursor outside Vim normal mode",
"settings.editor.blink": "Blink",
"settings.editor.smooth": "Smooth",
"settings.editor.phase": "Phase",
@@ -183,14 +298,16 @@ const catalogs = {
"settings.editor.maxOpenTabs": "Max Open Tabs",
"settings.editor.maxOpenTabsDescription": "Maximum number of tabs before oldest closes",
"settings.editor.bufferCarousel": "Buffer Carousel",
- "settings.editor.bufferCarouselDescription": "Show open buffers as a horizontally scrollable carousel in the main view",
+ "settings.editor.bufferCarouselDescription":
+ "Show open buffers as a horizontally scrollable carousel in the main view",
"settings.editor.autoSave": "Auto Save",
"settings.editor.autoSaveDescription": "Automatically save files when editing",
"settings.editor.defaultLanguage": "Default Language",
"settings.editor.defaultLanguageDescription": "Default syntax highlighting for new files",
"settings.editor.autoDetect": "Auto Detect",
"settings.editor.autoDetectLanguage": "Auto-detect Language",
- "settings.editor.autoDetectLanguageDescription": "Automatically detect file language from extension",
+ "settings.editor.autoDetectLanguageDescription":
+ "Automatically detect file language from extension",
"settings.editor.formatOnSave": "Format on Save",
"settings.editor.formatOnSaveDescription": "Automatically format code when saving",
"settings.editor.lintOnSave": "Lint on Save",
@@ -200,26 +317,32 @@ const catalogs = {
"settings.editor.parameterHints": "Parameter Hints",
"settings.editor.parameterHintsDescription": "Show function parameter hints",
"settings.editor.inlayHints": "Inlay Hints",
- "settings.editor.inlayHintsDescription": "Show inline type and parameter hints from language servers",
+ "settings.editor.inlayHintsDescription":
+ "Show inline type and parameter hints from language servers",
"settings.editor.codeLens": "Code Lens",
"settings.editor.codeLensDescription": "Show inline code actions above symbols",
"settings.editor.semanticTokens": "Semantic Tokens",
"settings.editor.semanticTokensDescription": "Use language server semantic highlighting",
"settings.editor.symbolBreadcrumb": "Show Symbol in Breadcrumb",
- "settings.editor.symbolBreadcrumbDescription": "Show the containing function/class for the cursor position in the breadcrumb bar",
+ "settings.editor.symbolBreadcrumbDescription":
+ "Show the containing function/class for the cursor position in the breadcrumb bar",
"settings.appearance.theme": "Theme",
"settings.appearance.syncWithOs": "Sync With OS",
- "settings.appearance.syncWithOsDescription": "Automatically switch between your preferred light and dark themes",
+ "settings.appearance.syncWithOsDescription":
+ "Automatically switch between your preferred light and dark themes",
"settings.appearance.colorTheme": "Color Theme",
"settings.appearance.colorThemeDescription": "Choose your preferred color theme",
"settings.appearance.preferredLightTheme": "Preferred Light Theme",
- "settings.appearance.preferredLightThemeDescription": "Used when Sync With OS is enabled and the system appearance is light",
+ "settings.appearance.preferredLightThemeDescription":
+ "Used when Sync With OS is enabled and the system appearance is light",
"settings.appearance.preferredDarkTheme": "Preferred Dark Theme",
- "settings.appearance.preferredDarkThemeDescription": "Used when Sync With OS is enabled and the system appearance is dark",
+ "settings.appearance.preferredDarkThemeDescription":
+ "Used when Sync With OS is enabled and the system appearance is dark",
"settings.appearance.iconTheme": "Icon Theme",
"settings.appearance.iconThemeDescription": "Icons displayed in the file tree and tabs",
"settings.appearance.customThemes": "Custom Themes",
- "settings.appearance.customThemesDescription": "Import Lithe theme JSON or create one from an installed theme.",
+ "settings.appearance.customThemesDescription":
+ "Import Lithe theme JSON or create one from an installed theme.",
"settings.appearance.formatGuide": "Format guide",
"settings.appearance.create": "Create",
"settings.appearance.import": "Import",
@@ -231,56 +354,73 @@ const catalogs = {
"settings.appearance.removeCustomThemeFailed": "Failed to remove custom theme",
"settings.appearance.typography": "Typography",
"settings.appearance.uiFontFamily": "UI Font Family",
- "settings.appearance.uiFontFamilyDescription": "Font family for UI elements (file tree, markdown, etc.)",
+ "settings.appearance.uiFontFamilyDescription":
+ "Font family for UI elements (file tree, markdown, etc.)",
"settings.appearance.uiFontSize": "UI Font Size",
"settings.appearance.uiFontSizeDescription": "Adjust UI text and icon scale in 0.5px steps",
"settings.appearance.uiFontSizeAria": "UI font size: {size} pixels",
"settings.appearance.interface": "Interface",
"settings.appearance.reduceMotion": "Reduce Motion",
- "settings.appearance.reduceMotionDescription": "Reduce non-essential interface animations while keeping state changes visible",
+ "settings.appearance.reduceMotionDescription":
+ "Reduce non-essential interface animations while keeping state changes visible",
"settings.appearance.showStatusBar": "Show Status Bar",
- "settings.appearance.showStatusBarDescription": "Show app controls and status information along the bottom edge",
+ "settings.appearance.showStatusBarDescription":
+ "Show app controls and status information along the bottom edge",
"settings.appearance.showTabIcons": "Show Tab Icons",
"settings.appearance.showTabIconsDescription": "Show file and view icons in editor tabs",
"settings.appearance.tabCloseButtons": "Tab Close Buttons",
- "settings.appearance.tabCloseButtonsDescription": "Choose when unpinned tabs show their close button",
+ "settings.appearance.tabCloseButtonsDescription":
+ "Choose when unpinned tabs show their close button",
"settings.appearance.activeAndHovered": "Active and Hovered",
"settings.appearance.hoveredOnly": "Hovered Only",
"settings.appearance.always": "Always",
"settings.appearance.layout": "Layout",
"settings.appearance.windowChromeDensity": "Window Chrome Density",
- "settings.appearance.windowChromeDensityDescription": "Choose a focused or roomier scale for title bars, tabs, sidebars, and the footer",
+ "settings.appearance.windowChromeDensityDescription":
+ "Choose a focused or roomier scale for title bars, tabs, sidebars, and the footer",
"settings.appearance.focused": "Focused",
"settings.appearance.comfortable": "Comfortable",
"settings.appearance.expandedActivityBar": "Expanded Activity Bar",
- "settings.appearance.expandedActivityBarDescription": "Show labels beside icons in the activity bar",
+ "settings.appearance.expandedActivityBarDescription":
+ "Show labels beside icons in the activity bar",
"settings.appearance.activityBarWidth": "Activity Bar Width",
"settings.appearance.activityBarWidthDescription": "Set the width of the expanded activity bar",
"settings.appearance.activityBarWidthAria": "Activity bar width: {size} pixels",
"settings.appearance.sidebarWidth": "Sidebar Width",
- "settings.appearance.sidebarWidthDescription": "Set the default width used by left and right sidebars",
+ "settings.appearance.sidebarWidthDescription":
+ "Set the default width used by left and right sidebars",
"settings.appearance.sidebarWidthAria": "Sidebar width: {size} pixels",
"settings.appearance.nativeMenuBar": "Native Menu Bar",
- "settings.appearance.nativeMenuBarDescription": "Use the native menu bar or a custom UI menu bar",
+ "settings.appearance.nativeMenuBarDescription":
+ "Use the native menu bar or a custom UI menu bar",
"settings.appearance.compactMenuBar": "Compact Menu Bar",
- "settings.appearance.compactMenuBarDescription": "Requires UI menu bar; compact hamburger or full UI menu",
+ "settings.appearance.compactMenuBarDescription":
+ "Requires UI menu bar; compact hamburger or full UI menu",
"settings.appearance.windowTransparency": "Window Transparency",
- "settings.appearance.windowTransparencyDescription": "Use translucent app chrome and transparent native windows where supported",
+ "settings.appearance.windowTransparencyDescription":
+ "Use translucent app chrome and transparent native windows where supported",
"settings.appearance.openProjectsNewWindow": "Open Projects In New Window",
- "settings.appearance.openProjectsNewWindowDescription": "Open each new project in a separate window and disable activity-bar project switching",
+ "settings.appearance.openProjectsNewWindowDescription":
+ "Open each new project in a separate window and disable activity-bar project switching",
"settings.terminal.nerdFont": "Nerd Font",
"settings.terminal.custom": "Custom",
"settings.terminal.systemDefault": "System Default",
- "settings.terminal.fontHelp": "Note: Selected font must be installed on your system to work correctly. If icons are missing, try installing a Nerd Font.",
+ "settings.terminal.fontHelp":
+ "Note: Selected font must be installed on your system to work correctly. If icons are missing, try installing a Nerd Font.",
"settings.terminal.launch": "Launch",
- "settings.terminal.launchDescription": "Choose which shell and profile new terminal tabs should use by default.",
+ "settings.terminal.launchDescription":
+ "Choose which shell and profile new terminal tabs should use by default.",
"settings.terminal.defaultShell": "Default Shell",
- "settings.terminal.defaultShellDescription": "Fallback shell when a terminal profile does not override it.",
+ "settings.terminal.defaultShellDescription":
+ "Fallback shell when a terminal profile does not override it.",
"settings.terminal.defaultProfile": "Default Profile",
- "settings.terminal.defaultProfileDescription": "Used by the terminal toolbar button and Cmd+T when the terminal is focused.",
+ "settings.terminal.defaultProfileDescription":
+ "Used by the terminal toolbar button and Cmd+T when the terminal is focused.",
"settings.terminal.profiles": "Profiles",
- "settings.terminal.profilesDescription": "Create reusable launch presets with a shell override, startup directory, and optional startup commands.",
- "settings.terminal.profilesHelp": "Built-in profiles are generated from detected shells. Custom profiles appear in the terminal toolbar profile picker.",
+ "settings.terminal.profilesDescription":
+ "Create reusable launch presets with a shell override, startup directory, and optional startup commands.",
+ "settings.terminal.profilesHelp":
+ "Built-in profiles are generated from detected shells. Custom profiles appear in the terminal toolbar profile picker.",
"settings.terminal.addProfile": "Add Profile",
"settings.terminal.customProfile": "Custom Profile {number}",
"settings.terminal.noCustomProfiles": "No custom terminal profiles yet.",
@@ -290,14 +430,17 @@ const catalogs = {
"settings.terminal.profileNamePlaceholder": "My Profile",
"settings.terminal.profileShell": "Shell",
"settings.terminal.startupDirectory": "Startup Directory",
- "settings.terminal.startupDirectoryPlaceholder": "Leave empty to use the current workspace directory",
- "settings.terminal.startupDirectoryDescription": "Leave empty to use the current workspace directory.",
+ "settings.terminal.startupDirectoryPlaceholder":
+ "Leave empty to use the current workspace directory",
+ "settings.terminal.startupDirectoryDescription":
+ "Leave empty to use the current workspace directory.",
"settings.terminal.startupCommands": "Startup Commands",
"settings.terminal.startupCommandsPlaceholder": "One command per line",
"settings.terminal.startupCommandsDescription": "Enter one command per line.",
"settings.terminal.typography": "Typography",
"settings.terminal.fontFamily": "Font Family",
- "settings.terminal.fontFamilyDescription": "Font family for the integrated terminal. Select a Nerd Font for best icon support.",
+ "settings.terminal.fontFamilyDescription":
+ "Font family for the integrated terminal. Select a Nerd Font for best icon support.",
"settings.terminal.selectFont": "Select font...",
"settings.terminal.fontSize": "Font Size",
"settings.terminal.fontSizeDescription": "Terminal font size in pixels",
@@ -306,14 +449,18 @@ const catalogs = {
"settings.terminal.letterSpacing": "Letter Spacing",
"settings.terminal.letterSpacingDescription": "Additional spacing between characters",
"settings.terminal.scrollback": "Scrollback",
- "settings.terminal.scrollbackDescription": "How many lines of terminal history to keep in memory",
+ "settings.terminal.scrollbackDescription":
+ "How many lines of terminal history to keep in memory",
"settings.terminal.interaction": "Interaction",
"settings.terminal.altClickMovesCursor": "Alt Click Moves Cursor",
- "settings.terminal.altClickMovesCursorDescription": "Move the shell prompt cursor to the clicked position when supported",
+ "settings.terminal.altClickMovesCursorDescription":
+ "Move the shell prompt cursor to the clicked position when supported",
"settings.terminal.optionAsMeta": "Option as Meta",
- "settings.terminal.optionAsMetaDescription": "Treat the Option key as Meta in terminal applications on macOS",
+ "settings.terminal.optionAsMetaDescription":
+ "Treat the Option key as Meta in terminal applications on macOS",
"settings.terminal.rightClickSelectsWord": "Right Click Selects Word",
- "settings.terminal.rightClickSelectsWordDescription": "Select the word under the pointer before opening the context menu",
+ "settings.terminal.rightClickSelectsWordDescription":
+ "Select the word under the pointer before opening the context menu",
"settings.terminal.cursor": "Cursor",
"settings.terminal.cursorStyle": "Cursor Style",
"settings.terminal.cursorStyleDescription": "Shape of the cursor",
@@ -325,7 +472,8 @@ const catalogs = {
"settings.terminal.cursorWidth": "Cursor Width",
"settings.terminal.cursorWidthDescription": "Thickness of the bar or block cursor",
"settings.terminal.inactiveCursorStyle": "Inactive Cursor Style",
- "settings.terminal.inactiveCursorStyleDescription": "Appearance of the terminal cursor when the terminal is not focused",
+ "settings.terminal.inactiveCursorStyleDescription":
+ "Appearance of the terminal cursor when the terminal is not focused",
"settings.terminal.outline": "Outline",
"settings.terminal.hidden": "Hidden",
"settings.keyboard.resetToDefaults": "Reset to Defaults",
@@ -349,9 +497,11 @@ const catalogs = {
"settings.keyboard.vimMode": "Vim Mode",
"settings.keyboard.vimModeDescription": "Enable vim keybindings and commands",
"settings.keyboard.presetLabel": "Keybinding Preset",
- "settings.keyboard.presetDescription": "Apply a base shortcut style before your custom overrides.",
+ "settings.keyboard.presetDescription":
+ "Apply a base shortcut style before your custom overrides.",
"settings.keyboard.presetAria": "Keybinding preset",
- "settings.keyboard.presetIncomplete": "This preset is incomplete. {count} built-in command{suffix} still missing preset coverage.",
+ "settings.keyboard.presetIncomplete":
+ "This preset is incomplete. {count} built-in command{suffix} still missing preset coverage.",
"settings.keyboard.presetSingularSuffix": " is",
"settings.keyboard.presetPluralSuffix": "s are",
"settings.keyboard.editKeybindings": "Edit Keybindings",
@@ -374,16 +524,19 @@ const catalogs = {
"settings.advanced.exportSettings": "Export Settings",
"settings.advanced.exportSettingsDescription": "Save all app settings to a JSON file.",
"settings.advanced.importSettings": "Import Settings",
- "settings.advanced.importSettingsDescription": "Restore app settings from an Lithe settings JSON file.",
+ "settings.advanced.importSettingsDescription":
+ "Restore app settings from an Lithe settings JSON file.",
"settings.advanced.resetSettings": "Reset Settings",
"settings.advanced.resetSettingsDescription": "Reset all settings to their default values",
"settings.advanced.reset": "Reset",
"settings.advanced.telemetry": "Telemetry",
"settings.advanced.anonymousTelemetry": "Anonymous Usage Telemetry",
- "settings.advanced.telemetryDescription": "Lithe sends anonymous operational metadata for updates and, when enabled, heartbeats, extensions, and crashes; it never sends file paths, project names, prompts, or editor content.",
+ "settings.advanced.telemetryDescription":
+ "Lithe sends anonymous operational metadata for updates and, when enabled, heartbeats, extensions, and crashes; it never sends file paths, project names, prompts, or editor content.",
"settings.advanced.learnMore": "Learn more",
"settings.advanced.telemetryLog": "Telemetry Log",
- "settings.advanced.telemetryLogDescription": "Inspect the local queue and recent telemetry delivery results.",
+ "settings.advanced.telemetryLogDescription":
+ "Inspect the local queue and recent telemetry delivery results.",
"settings.advanced.hideLog": "Hide Log",
"settings.advanced.openLog": "Open Log",
"settings.advanced.clear": "Clear",
@@ -396,17 +549,21 @@ const catalogs = {
"settings.advanced.settingsImported": "Settings imported",
"settings.advanced.importFailed": "Failed to import settings: {error}",
"settings.advanced.feature.terminal.name": "Integrated Terminal",
- "settings.advanced.feature.terminal.description": "Built-in terminal for command line operations",
+ "settings.advanced.feature.terminal.description":
+ "Built-in terminal for command line operations",
"settings.advanced.feature.search.name": "Global Search",
"settings.advanced.feature.search.description": "Search across files and folders in workspace",
"settings.advanced.feature.diagnostics.name": "Diagnostics & Problems",
"settings.advanced.feature.diagnostics.description": "Code diagnostics and error reporting",
"settings.advanced.feature.outline.name": "Outline",
- "settings.advanced.feature.outline.description": "Document symbols and quick navigation for the active file",
+ "settings.advanced.feature.outline.description":
+ "Document symbols and quick navigation for the active file",
"settings.advanced.feature.breadcrumbs.name": "Breadcrumbs",
- "settings.advanced.feature.breadcrumbs.description": "File path navigation breadcrumbs in editor",
+ "settings.advanced.feature.breadcrumbs.description":
+ "File path navigation breadcrumbs in editor",
"settings.advanced.feature.persistentCommands.name": "Persistent Commands",
- "settings.advanced.feature.persistentCommands.description": "The last used commands appear at the top of the command palette",
+ "settings.advanced.feature.persistentCommands.description":
+ "The last used commands appear at the top of the command palette",
"settings.common.json": "JSON",
"settings.common.allFiles": "All Files",
},
@@ -419,8 +576,19 @@ const catalogs = {
"workbench.openProject": "打开项目",
"workbench.currentFile": "当前文件",
"workbench.moreProjectActions": "更多项目操作",
+ "workbench.emptyEditorTitle": "选择文件以查看",
+ "workbench.emptyEditorDescription": "外部工具产生的更改会自动显示。",
"welcome.openProject": "打开项目",
"welcome.recentProjects": "最近项目",
+ "welcome.title": "欢迎使用 Lithe",
+ "welcome.projects": "项目",
+ "welcome.searchProjects": "搜索项目",
+ "welcome.clone": "克隆",
+ "welcome.open": "打开",
+ "welcome.checkUpdates": "检查更新",
+ "welcome.removeRecent": "从最近项目中移除 {name}",
+ "welcome.noRecentProjects": "暂无最近项目",
+ "welcome.openFolderHint": "打开文件夹以开始使用。",
"settings.displayLanguage": "显示语言",
"settings.displayLanguageDescription": "选择 Lithe 界面使用的语言。",
"settings.languageEnglish": "English",
@@ -435,6 +603,81 @@ const catalogs = {
"settings.tabs.terminal": "终端",
"settings.tabs.keyboard": "快捷键",
"settings.tabs.advanced": "高级",
+ "settings.tabs.lsp": "LSP",
+ "settings.tabs.aiCommit": "AI 与提交",
+ "settings.tabs.updates": "更新",
+ "settings.mac.categories": "设置分类",
+ "settings.mac.restoreDefaults": "恢复默认设置",
+ "settings.mac.done": "完成",
+ "settings.mac.appearance": "外观",
+ "settings.mac.colorTheme": "配色主题",
+ "settings.mac.appearanceMode": "外观模式",
+ "settings.mac.appearanceDescription": "选择配色主题,并设置是否跟随系统外观。",
+ "settings.mac.followSystem": "跟随系统",
+ "settings.mac.light": "浅色",
+ "settings.mac.dark": "深色",
+ "settings.mac.language": "语言",
+ "settings.mac.languageDescription": "界面语言会立即生效。默认语言为英文。",
+ "settings.mac.projects": "项目",
+ "settings.mac.openProjectsIn": "项目打开方式",
+ "settings.mac.openProjectsDescription":
+ "选择打开其他项目时是每次询问、保留在此窗口,还是创建新窗口。",
+ "settings.mac.askEveryTime": "每次询问",
+ "settings.mac.thisWindow": "此窗口",
+ "settings.mac.newWindow": "新窗口",
+ "settings.mac.files": "文件",
+ "settings.mac.autoSave": "自动保存更改的文件",
+ "settings.mac.saveLocalChangesWith": "保存本地更改的方式",
+ "settings.mac.gitPolicyDescription": "选择执行 Git 操作前保护本地更改的方式。",
+ "settings.mac.hiddenPaths": "隐藏路径",
+ "settings.mac.hiddenPathsDescription":
+ "每行一项。目录名称会隐藏匹配的文件夹;文件条目支持 * 和 ?。",
+ "settings.mac.directories": "目录",
+ "settings.mac.filePatterns": "文件模式",
+ "settings.mac.apply": "应用",
+ "settings.mac.display": "显示",
+ "settings.mac.fontSize": "字体大小",
+ "settings.mac.showCodeVision": "显示用法与 Git 作者",
+ "settings.mac.editorTabs": "编辑器标签页",
+ "settings.mac.layout": "布局",
+ "settings.mac.singleRow": "单行",
+ "settings.mac.wrapRows": "多行换行",
+ "settings.mac.indentation": "缩进",
+ "settings.mac.tabWidth": "制表符宽度",
+ "settings.mac.spaces": "个空格",
+ "settings.mac.keymapPreset": "快捷键方案",
+ "settings.mac.preset": "预设",
+ "settings.mac.shortcuts": "键盘快捷键",
+ "settings.mac.searchShortcuts": "搜索快捷键",
+ "settings.mac.shortcutsDescription": "选择快捷键预设,然后使用命令面板查看和运行可用命令。",
+ "settings.mac.shell": "Shell",
+ "settings.mac.defaultShell": "默认 Shell",
+ "settings.mac.defaultShellDescription": "用于新的终端会话。",
+ "settings.mac.systemDefault": "系统默认",
+ "settings.mac.languageServices": "语言服务",
+ "settings.mac.autoCompletion": "自动补全",
+ "settings.mac.autoCompletionDescription": "显示活动语言服务器提供的补全建议。",
+ "settings.mac.parameterHints": "参数提示",
+ "settings.mac.semanticHighlighting": "语义高亮",
+ "settings.mac.detectedServers": "已检测语言服务器",
+ "settings.mac.detectedServersDescription":
+ "语言服务器由已安装的语言扩展检测,并在打开受支持文件时启动。",
+ "settings.mac.aiProvider": "AI 提供商",
+ "settings.mac.provider": "提供商",
+ "settings.mac.apiUrl": "API 地址",
+ "settings.mac.model": "模型",
+ "settings.mac.apiKey": "API 密钥或令牌",
+ "settings.mac.apiKeyPlaceholder": "由应用安全存储",
+ "settings.mac.saveKey": "保存密钥",
+ "settings.mac.commitMessage": "提交信息",
+ "settings.mac.enableAiCommit": "使用 AI 生成提交信息",
+ "settings.mac.softwareUpdate": "软件更新",
+ "settings.mac.currentVersion": "当前版本:{version}",
+ "settings.mac.checkForUpdates": "检查更新",
+ "settings.mac.checking": "正在检查…",
+ "settings.mac.updateFailed": "检查更新失败,请稍后重试。",
+ "settings.mac.updateAvailable": "版本 {version} 可用。",
+ "settings.mac.updateHint": "Lithe 可以检查新的预览版和稳定版。",
"settings.git.integration": "集成",
"settings.git.gitIntegration": "Git 集成",
"settings.git.gitIntegrationDescription": "启用 Git 仓库的源代码管理功能",
@@ -479,7 +722,8 @@ const catalogs = {
"settings.general.upToDate": "Lithe {version} · 应用已是最新版本",
"settings.general.updateDownloadProgress": "Lithe 更新下载进度",
"settings.general.terminalCommand": "终端命令",
- "settings.general.terminalCommandDescription": "安装 `lithe` 命令,以便从终端打开文件夹和文件。",
+ "settings.general.terminalCommandDescription":
+ "安装 `lithe` 命令,以便从终端打开文件夹和文件。",
"settings.general.uninstall": "卸载",
"settings.general.uninstalling": "正在卸载...",
"settings.general.install": "安装",
@@ -502,7 +746,8 @@ const catalogs = {
"settings.general.latestVersion": "您使用的是最新版本",
"settings.general.reportTemplateCopied": "报告模板已复制",
"settings.general.prepareReportFailed": "准备问题报告失败",
- "settings.general.bugReportTemplate": "环境\n\n- 应用:Lithe {version}\n- 操作系统:{platform} {osVersion}\n\n问题\n\n请在此描述问题。请提供复现步骤、预期结果和实际结果。\n",
+ "settings.general.bugReportTemplate":
+ "环境\n\n- 应用:Lithe {version}\n- 操作系统:{platform} {osVersion}\n\n问题\n\n请在此描述问题。请提供复现步骤、预期结果和实际结果。\n",
"settings.files.display": "显示",
"settings.files.sortOrder": "排序顺序",
"settings.files.sortOrderDescription": "选择文件夹始终排在文件之前,还是全部按名称排序",
@@ -620,7 +865,8 @@ const catalogs = {
"settings.appearance.colorTheme": "颜色主题",
"settings.appearance.colorThemeDescription": "选择偏好的颜色主题",
"settings.appearance.preferredLightTheme": "首选浅色主题",
- "settings.appearance.preferredLightThemeDescription": "启用与操作系统同步且系统外观为浅色时使用",
+ "settings.appearance.preferredLightThemeDescription":
+ "启用与操作系统同步且系统外观为浅色时使用",
"settings.appearance.preferredDarkTheme": "首选深色主题",
"settings.appearance.preferredDarkThemeDescription": "启用与操作系统同步且系统外观为深色时使用",
"settings.appearance.iconTheme": "图标主题",
@@ -656,7 +902,8 @@ const catalogs = {
"settings.appearance.always": "始终",
"settings.appearance.layout": "布局",
"settings.appearance.windowChromeDensity": "窗口框架密度",
- "settings.appearance.windowChromeDensityDescription": "为标题栏、标签页、侧边栏和页脚选择更紧凑或更宽松的尺寸",
+ "settings.appearance.windowChromeDensityDescription":
+ "为标题栏、标签页、侧边栏和页脚选择更紧凑或更宽松的尺寸",
"settings.appearance.focused": "紧凑",
"settings.appearance.comfortable": "舒适",
"settings.appearance.expandedActivityBar": "展开活动栏",
@@ -670,15 +917,18 @@ const catalogs = {
"settings.appearance.nativeMenuBar": "原生菜单栏",
"settings.appearance.nativeMenuBarDescription": "使用原生菜单栏或自定义界面菜单栏",
"settings.appearance.compactMenuBar": "紧凑菜单栏",
- "settings.appearance.compactMenuBarDescription": "需要界面菜单栏;使用紧凑汉堡菜单或完整界面菜单",
+ "settings.appearance.compactMenuBarDescription":
+ "需要界面菜单栏;使用紧凑汉堡菜单或完整界面菜单",
"settings.appearance.windowTransparency": "窗口透明度",
"settings.appearance.windowTransparencyDescription": "在支持时使用半透明应用框架和透明原生窗口",
"settings.appearance.openProjectsNewWindow": "在新窗口中打开项目",
- "settings.appearance.openProjectsNewWindowDescription": "在单独窗口中打开每个新项目,并禁用活动栏项目切换",
+ "settings.appearance.openProjectsNewWindowDescription":
+ "在单独窗口中打开每个新项目,并禁用活动栏项目切换",
"settings.terminal.nerdFont": "Nerd Font",
"settings.terminal.custom": "自定义",
"settings.terminal.systemDefault": "系统默认",
- "settings.terminal.fontHelp": "注意:所选字体必须已安装在系统中才能正常工作。如果缺少图标,请尝试安装 Nerd Font。",
+ "settings.terminal.fontHelp":
+ "注意:所选字体必须已安装在系统中才能正常工作。如果缺少图标,请尝试安装 Nerd Font。",
"settings.terminal.launch": "启动",
"settings.terminal.launchDescription": "选择新终端标签页默认使用的 Shell 和配置文件。",
"settings.terminal.defaultShell": "默认 Shell",
@@ -686,8 +936,10 @@ const catalogs = {
"settings.terminal.defaultProfile": "默认配置文件",
"settings.terminal.defaultProfileDescription": "终端获得焦点时由终端工具栏按钮和 Cmd+T 使用。",
"settings.terminal.profiles": "配置文件",
- "settings.terminal.profilesDescription": "创建可复用的启动预设,其中包含 Shell 覆盖、启动目录和可选启动命令。",
- "settings.terminal.profilesHelp": "内置配置文件根据检测到的 Shell 生成。自定义配置文件显示在终端工具栏的配置文件选择器中。",
+ "settings.terminal.profilesDescription":
+ "创建可复用的启动预设,其中包含 Shell 覆盖、启动目录和可选启动命令。",
+ "settings.terminal.profilesHelp":
+ "内置配置文件根据检测到的 Shell 生成。自定义配置文件显示在终端工具栏的配置文件选择器中。",
"settings.terminal.addProfile": "添加配置文件",
"settings.terminal.customProfile": "自定义配置文件 {number}",
"settings.terminal.noCustomProfiles": "尚无自定义终端配置文件。",
@@ -704,7 +956,8 @@ const catalogs = {
"settings.terminal.startupCommandsDescription": "每行输入一个命令。",
"settings.terminal.typography": "字体排印",
"settings.terminal.fontFamily": "字体",
- "settings.terminal.fontFamilyDescription": "集成终端使用的字体。选择 Nerd Font 以获得最佳图标支持。",
+ "settings.terminal.fontFamilyDescription":
+ "集成终端使用的字体。选择 Nerd Font 以获得最佳图标支持。",
"settings.terminal.selectFont": "选择字体...",
"settings.terminal.fontSize": "字体大小",
"settings.terminal.fontSizeDescription": "终端字体大小(像素)",
@@ -758,7 +1011,8 @@ const catalogs = {
"settings.keyboard.presetLabel": "快捷键预设",
"settings.keyboard.presetDescription": "在自定义覆盖前应用基础快捷键样式。",
"settings.keyboard.presetAria": "快捷键预设",
- "settings.keyboard.presetIncomplete": "此预设不完整。仍有 {count} 个内置命令{suffix}缺少预设覆盖。",
+ "settings.keyboard.presetIncomplete":
+ "此预设不完整。仍有 {count} 个内置命令{suffix}缺少预设覆盖。",
"settings.keyboard.presetSingularSuffix": "",
"settings.keyboard.presetPluralSuffix": "",
"settings.keyboard.editKeybindings": "编辑快捷键",
@@ -787,7 +1041,8 @@ const catalogs = {
"settings.advanced.reset": "重置",
"settings.advanced.telemetry": "遥测",
"settings.advanced.anonymousTelemetry": "匿名使用情况遥测",
- "settings.advanced.telemetryDescription": "Lithe 会发送用于更新的匿名运行元数据;启用后还会发送心跳、扩展和崩溃信息。它绝不会发送文件路径、项目名称、提示词或编辑器内容。",
+ "settings.advanced.telemetryDescription":
+ "Lithe 会发送用于更新的匿名运行元数据;启用后还会发送心跳、扩展和崩溃信息。它绝不会发送文件路径、项目名称、提示词或编辑器内容。",
"settings.advanced.learnMore": "了解更多",
"settings.advanced.telemetryLog": "遥测日志",
"settings.advanced.telemetryLogDescription": "检查本地队列和最近的遥测发送结果。",
diff --git a/windows/tauri/src/styles/theme.css b/windows/tauri/src/styles/theme.css
index 28b20736..e268b0bc 100644
--- a/windows/tauri/src/styles/theme.css
+++ b/windows/tauri/src/styles/theme.css
@@ -103,8 +103,8 @@
--ui-text-chrome: 13px;
--ui-text-sm: var(--app-ui-font-size);
--ui-text-base: var(--app-ui-font-size);
- --lithe-title-bar-height: 2rem;
- --lithe-footer-height: 1.75rem;
+ --lithe-title-bar-height: 2.5rem;
+ --lithe-footer-height: 1.5rem;
--lithe-pane-header-height: 2.75rem;
--lithe-tab-bar-height: var(--lithe-pane-header-height);
--lithe-tab-height: 1.75rem;