diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx
index 41754166..3a41100c 100644
--- a/src/renderer/App.tsx
+++ b/src/renderer/App.tsx
@@ -2139,6 +2139,11 @@ const AppContent: React.FC = () => {
onToggleEditor={() => setShowEditorMode(!showEditorMode)}
showEditorButton={Boolean(activeTask)}
isEditorOpen={showEditorMode}
+ projects={projects}
+ selectedProject={selectedProject}
+ activeTask={activeTask}
+ onSelectProject={handleSelectProject}
+ onSelectTask={handleSelectTask}
/>
)}
= ({ path, align = 'right' }) => {
type="button"
variant="ghost"
size="sm"
- className="h-8 gap-1 px-2 text-muted-foreground hover:bg-background/80"
+ className={[
+ 'h-7 gap-1.5 px-2 text-[13px] font-medium leading-none text-muted-foreground hover:bg-background/70 hover:text-foreground',
+ open ? 'bg-background/80 text-foreground' : '',
+ ].join(' ')}
onClick={async () => {
const newState = !open;
void import('../../lib/telemetryClient').then(({ captureTelemetry }) => {
@@ -141,7 +144,9 @@ const OpenInMenu: React.FC
= ({ path, align = 'right' }) => {
>
Open in
diff --git a/src/renderer/components/titlebar/Titlebar.tsx b/src/renderer/components/titlebar/Titlebar.tsx
index d3a28d6c..f7fb33ff 100644
--- a/src/renderer/components/titlebar/Titlebar.tsx
+++ b/src/renderer/components/titlebar/Titlebar.tsx
@@ -14,6 +14,8 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../ui/
import OpenInMenu from './OpenInMenu';
import FeedbackModal from '../FeedbackModal';
import BrowserToggleButton from './BrowserToggleButton';
+import TitlebarContext from './TitlebarContext';
+import type { Project, Task } from '../../types/app';
interface GithubUser {
login?: string;
@@ -38,6 +40,11 @@ interface TitlebarProps {
onToggleEditor?: () => void;
showEditorButton?: boolean;
isEditorOpen?: boolean;
+ projects: Project[];
+ selectedProject: Project | null;
+ activeTask: Task | null;
+ onSelectProject: (project: Project) => void;
+ onSelectTask: (task: Task) => void;
}
const Titlebar: React.FC = ({
@@ -56,6 +63,11 @@ const Titlebar: React.FC = ({
onToggleEditor,
showEditorButton = false,
isEditorOpen = false,
+ projects,
+ selectedProject,
+ activeTask,
+ onSelectProject,
+ onSelectTask,
}) => {
const [isFeedbackOpen, setIsFeedbackOpen] = useState(false);
const feedbackButtonRef = useRef(null);
@@ -115,6 +127,17 @@ const Titlebar: React.FC = ({
return (
<>
+
{currentPath ?
: null}
{showEditorButton ? (
diff --git a/src/renderer/components/titlebar/TitlebarContext.tsx b/src/renderer/components/titlebar/TitlebarContext.tsx
new file mode 100644
index 00000000..8da7374e
--- /dev/null
+++ b/src/renderer/components/titlebar/TitlebarContext.tsx
@@ -0,0 +1,108 @@
+import React from 'react';
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select';
+import type { Project, Task } from '../../types/app';
+
+interface TitlebarContextProps {
+ projects: Project[];
+ selectedProject: Project | null;
+ activeTask: Task | null;
+ onSelectProject: (project: Project) => void;
+ onSelectTask: (task: Task) => void;
+}
+
+const TitlebarContext: React.FC
= ({
+ projects,
+ selectedProject,
+ activeTask,
+ onSelectProject,
+ onSelectTask,
+}) => {
+ if (!selectedProject) {
+ return ;
+ }
+
+ const tasks = selectedProject?.tasks ?? [];
+ const projectValue = selectedProject.id;
+ const taskValue = activeTask?.id;
+ const projectLabel = selectedProject.name;
+ const taskLabel = activeTask?.name ?? '';
+ const selectContentClassName = 'w-[min(280px,90vw)]';
+
+ const handleProjectChange = (value: string) => {
+ const nextProject = projects.find((project) => project.id === value);
+ if (nextProject) {
+ onSelectProject(nextProject);
+ }
+ };
+
+ const handleTaskChange = (value: string) => {
+ const nextTask = tasks.find((task) => task.id === value);
+ if (nextTask) {
+ onSelectTask(nextTask);
+ }
+ };
+
+ return (
+
+
+
+
+
/
+
+
+
+
+ );
+};
+
+export default TitlebarContext;