@parhelia/core 0.1.11873 → 0.1.11955
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents-view/AgentsInbox.d.ts +1 -1
- package/dist/agents-view/AgentsInbox.js +15 -2
- package/dist/agents-view/AgentsInbox.js.map +1 -1
- package/dist/agents-view/AgentsSidebar.d.ts +20 -0
- package/dist/agents-view/AgentsSidebar.js +21 -0
- package/dist/agents-view/AgentsSidebar.js.map +1 -0
- package/dist/agents-view/AgentsView.d.ts +6 -7
- package/dist/agents-view/AgentsView.js +63 -25
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/agents-view/AgentsWorkspaceView.d.ts +2 -6
- package/dist/agents-view/AgentsWorkspaceView.js +242 -112
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/components/ui/context-menu.js +24 -9
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/select.js +1 -1
- package/dist/components/ui/select.js.map +1 -1
- package/dist/config/config.js +15 -11
- package/dist/config/config.js.map +1 -1
- package/dist/editor/ContentTree.js +2 -2
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/ContextMenu.js +11 -5
- package/dist/editor/ContextMenu.js.map +1 -1
- package/dist/editor/FieldListField.js +1 -1
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/MobileLayout.js +19 -9
- package/dist/editor/MobileLayout.js.map +1 -1
- package/dist/editor/ai/AgentStatusBadge.d.ts +1 -1
- package/dist/editor/ai/AgentStatusBadge.js +18 -2
- package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.js +342 -55
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/AiResponseMessage.js +46 -4
- package/dist/editor/ai/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/ContextInfoBar.js +151 -5
- package/dist/editor/ai/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/EditOperationsPanel.d.ts +2 -1
- package/dist/editor/ai/EditOperationsPanel.js +6 -1
- package/dist/editor/ai/EditOperationsPanel.js.map +1 -1
- package/dist/editor/ai/dialogs/AgentDialogHandler.js +64 -15
- package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
- package/dist/editor/ai/dialogs/QuestionnaireInline.js +111 -20
- package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
- package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +24 -0
- package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
- package/dist/editor/ai/useAgentStatus.d.ts +1 -0
- package/dist/editor/ai/useAgentStatus.js +74 -29
- package/dist/editor/ai/useAgentStatus.js.map +1 -1
- package/dist/editor/client/EditorShell.js +72 -8
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/hooks/useQuota.d.ts +7 -0
- package/dist/editor/client/hooks/useQuota.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js +10 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.js +3 -30
- package/dist/editor/client/pageModelBuilder.js.map +1 -1
- package/dist/editor/client/ui/EditorChrome.js +31 -1
- package/dist/editor/client/ui/EditorChrome.js.map +1 -1
- package/dist/editor/commands/componentCommands.js +106 -6
- package/dist/editor/commands/componentCommands.js.map +1 -1
- package/dist/editor/commands/itemCommands.d.ts +1 -0
- package/dist/editor/commands/itemCommands.js +28 -1
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/componentTreeHelper.js +22 -2
- package/dist/editor/componentTreeHelper.js.map +1 -1
- package/dist/editor/insertMenuItems.d.ts +4 -0
- package/dist/editor/insertMenuItems.js +66 -0
- package/dist/editor/insertMenuItems.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js +1 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenus.js +8 -1
- package/dist/editor/page-editor-chrome/FrameMenus.js.map +1 -1
- package/dist/editor/page-editor-chrome/InlineEditor.js +25 -11
- package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +32 -17
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +17 -11
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
- package/dist/editor/page-viewer/EditorForm.js +6 -5
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +49 -1
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.js +5 -0
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.js.map +1 -1
- package/dist/editor/pageModel.d.ts +2 -0
- package/dist/editor/reviews/CreateReviewConfirmStep.d.ts +16 -0
- package/dist/editor/reviews/CreateReviewConfirmStep.js +37 -0
- package/dist/editor/reviews/CreateReviewConfirmStep.js.map +1 -0
- package/dist/editor/reviews/CreateReviewDetailsStep.d.ts +51 -0
- package/dist/editor/reviews/CreateReviewDetailsStep.js +121 -0
- package/dist/editor/reviews/CreateReviewDetailsStep.js.map +1 -0
- package/dist/editor/reviews/CreateReviewDialog.js +260 -173
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/CreateReviewSuccessStep.d.ts +6 -0
- package/dist/editor/reviews/CreateReviewSuccessStep.js +8 -0
- package/dist/editor/reviews/CreateReviewSuccessStep.js.map +1 -0
- package/dist/editor/reviews/DecisionsMatrix.js +96 -25
- package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
- package/dist/editor/reviews/MultiReviewManager.js +25 -3
- package/dist/editor/reviews/MultiReviewManager.js.map +1 -1
- package/dist/editor/reviews/PagesPanel.js +31 -15
- package/dist/editor/reviews/PagesPanel.js.map +1 -1
- package/dist/editor/reviews/ReviewCard.js +13 -7
- package/dist/editor/reviews/ReviewCard.js.map +1 -1
- package/dist/editor/reviews/ReviewDetail.js +2 -2
- package/dist/editor/reviews/ReviewDetail.js.map +1 -1
- package/dist/editor/reviews/ReviewsList.js +7 -3
- package/dist/editor/reviews/ReviewsList.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +14 -1
- package/dist/editor/services/agentService.js +27 -1
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/aiService.d.ts +39 -1
- package/dist/editor/services/aiService.js +12 -2
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/services/serviceHelper.d.ts +1 -1
- package/dist/editor/services/serviceHelper.js +2 -1
- package/dist/editor/services/serviceHelper.js.map +1 -1
- package/dist/editor/settings/About.js +1 -1
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/QuotaInfo.js +202 -4
- package/dist/editor/settings/QuotaInfo.js.map +1 -1
- package/dist/editor/settings/panels/SearchConfigPanel.js +11 -13
- package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
- package/dist/editor/settings/status/useStartupChecks.js +2 -1
- package/dist/editor/settings/status/useStartupChecks.js.map +1 -1
- package/dist/editor/sidebar/ComponentTree.js +26 -20
- package/dist/editor/sidebar/ComponentTree.js.map +1 -1
- package/dist/editor/sidebar/MobileWorkspacePopover.d.ts +16 -0
- package/dist/editor/sidebar/MobileWorkspacePopover.js +35 -0
- package/dist/editor/sidebar/MobileWorkspacePopover.js.map +1 -0
- package/dist/editor/sidebar/NavigationSidebar.js +30 -14
- package/dist/editor/sidebar/NavigationSidebar.js.map +1 -1
- package/dist/editor/ui/ItemNameDialogNew.js +8 -8
- package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
- package/dist/editor/ui/SharedFolderSelectorDialog.d.ts +11 -0
- package/dist/editor/ui/SharedFolderSelectorDialog.js +79 -0
- package/dist/editor/ui/SharedFolderSelectorDialog.js.map +1 -0
- package/dist/editor/ui/SimpleTabs.js +1 -1
- package/dist/editor/ui/SimpleTabs.js.map +1 -1
- package/dist/editor/ui/Splitter.js +4 -2
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/editor/ui/TreeListSelector.d.ts +2 -1
- package/dist/editor/ui/TreeListSelector.js +2 -2
- package/dist/editor/ui/TreeListSelector.js.map +1 -1
- package/dist/editor/utils.js +42 -0
- package/dist/editor/utils.js.map +1 -1
- package/dist/editor/views/EditorSlot.js +7 -8
- package/dist/editor/views/EditorSlot.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/wizard/steps/ImportModelDialog.js +24 -22
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
- package/dist/splash-screen/NewPage.js +2 -2
- package/dist/splash-screen/NewPage.js.map +1 -1
- package/dist/splash-screen/RecentPages.js +1 -1
- package/dist/splash-screen/RecentPages.js.map +1 -1
- package/dist/task-board/TaskBoardWorkspace.d.ts +1 -0
- package/dist/task-board/TaskBoardWorkspace.js +1094 -0
- package/dist/task-board/TaskBoardWorkspace.js.map +1 -0
- package/dist/task-board/components/AddDependencyDialog.d.ts +8 -0
- package/dist/task-board/components/AddDependencyDialog.js +53 -0
- package/dist/task-board/components/AddDependencyDialog.js.map +1 -0
- package/dist/task-board/components/AssignAgentDialog.d.ts +7 -0
- package/dist/task-board/components/AssignAgentDialog.js +96 -0
- package/dist/task-board/components/AssignAgentDialog.js.map +1 -0
- package/dist/task-board/components/CommentsList.d.ts +3 -0
- package/dist/task-board/components/CommentsList.js +36 -0
- package/dist/task-board/components/CommentsList.js.map +1 -0
- package/dist/task-board/components/CreateProjectDialog.d.ts +7 -0
- package/dist/task-board/components/CreateProjectDialog.js +175 -0
- package/dist/task-board/components/CreateProjectDialog.js.map +1 -0
- package/dist/task-board/components/CreateTaskDialog.d.ts +7 -0
- package/dist/task-board/components/CreateTaskDialog.js +76 -0
- package/dist/task-board/components/CreateTaskDialog.js.map +1 -0
- package/dist/task-board/components/ProjectAgentsPanel.d.ts +4 -0
- package/dist/task-board/components/ProjectAgentsPanel.js +159 -0
- package/dist/task-board/components/ProjectAgentsPanel.js.map +1 -0
- package/dist/task-board/components/ProjectDashboard.d.ts +25 -0
- package/dist/task-board/components/ProjectDashboard.js +91 -0
- package/dist/task-board/components/ProjectDashboard.js.map +1 -0
- package/dist/task-board/components/ProjectList.d.ts +7 -0
- package/dist/task-board/components/ProjectList.js +74 -0
- package/dist/task-board/components/ProjectList.js.map +1 -0
- package/dist/task-board/components/ProjectSettingsDialog.d.ts +8 -0
- package/dist/task-board/components/ProjectSettingsDialog.js +146 -0
- package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -0
- package/dist/task-board/components/TaskAgentPanel.d.ts +10 -0
- package/dist/task-board/components/TaskAgentPanel.js +42 -0
- package/dist/task-board/components/TaskAgentPanel.js.map +1 -0
- package/dist/task-board/components/TaskAssigneePicker.d.ts +12 -0
- package/dist/task-board/components/TaskAssigneePicker.js +115 -0
- package/dist/task-board/components/TaskAssigneePicker.js.map +1 -0
- package/dist/task-board/components/TaskBoardTitlebar.d.ts +1 -0
- package/dist/task-board/components/TaskBoardTitlebar.js +60 -0
- package/dist/task-board/components/TaskBoardTitlebar.js.map +1 -0
- package/dist/task-board/components/TaskCard.d.ts +9 -0
- package/dist/task-board/components/TaskCard.js +24 -0
- package/dist/task-board/components/TaskCard.js.map +1 -0
- package/dist/task-board/components/TaskDetailDialog.d.ts +11 -0
- package/dist/task-board/components/TaskDetailDialog.js +8 -0
- package/dist/task-board/components/TaskDetailDialog.js.map +1 -0
- package/dist/task-board/components/TaskDetailPanel.d.ts +13 -0
- package/dist/task-board/components/TaskDetailPanel.js +322 -0
- package/dist/task-board/components/TaskDetailPanel.js.map +1 -0
- package/dist/task-board/components/TaskRow.d.ts +9 -0
- package/dist/task-board/components/TaskRow.js +25 -0
- package/dist/task-board/components/TaskRow.js.map +1 -0
- package/dist/task-board/index.d.ts +15 -0
- package/dist/task-board/index.js +18 -0
- package/dist/task-board/index.js.map +1 -0
- package/dist/task-board/services/taskService.d.ts +52 -0
- package/dist/task-board/services/taskService.js +74 -0
- package/dist/task-board/services/taskService.js.map +1 -0
- package/dist/task-board/taskAgentConfig.d.ts +7 -0
- package/dist/task-board/taskAgentConfig.js +43 -0
- package/dist/task-board/taskAgentConfig.js.map +1 -0
- package/dist/task-board/taskAgentLink.d.ts +2 -0
- package/dist/task-board/taskAgentLink.js +35 -0
- package/dist/task-board/taskAgentLink.js.map +1 -0
- package/dist/task-board/taskBoardNavStore.d.ts +35 -0
- package/dist/task-board/taskBoardNavStore.js +42 -0
- package/dist/task-board/taskBoardNavStore.js.map +1 -0
- package/dist/task-board/taskExecutionStatus.d.ts +12 -0
- package/dist/task-board/taskExecutionStatus.js +96 -0
- package/dist/task-board/taskExecutionStatus.js.map +1 -0
- package/dist/task-board/taskStatus.d.ts +2 -0
- package/dist/task-board/taskStatus.js +26 -0
- package/dist/task-board/taskStatus.js.map +1 -0
- package/dist/task-board/types.d.ts +169 -0
- package/dist/task-board/types.js +2 -0
- package/dist/task-board/types.js.map +1 -0
- package/dist/task-board/utils/projectHierarchy.d.ts +13 -0
- package/dist/task-board/utils/projectHierarchy.js +34 -0
- package/dist/task-board/utils/projectHierarchy.js.map +1 -0
- package/dist/task-board/views/KanbanView.d.ts +14 -0
- package/dist/task-board/views/KanbanView.js +136 -0
- package/dist/task-board/views/KanbanView.js.map +1 -0
- package/dist/task-board/views/ListView.d.ts +13 -0
- package/dist/task-board/views/ListView.js +74 -0
- package/dist/task-board/views/ListView.js.map +1 -0
- package/dist/task-board/views/PlanningView.d.ts +7 -0
- package/dist/task-board/views/PlanningView.js +112 -0
- package/dist/task-board/views/PlanningView.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { toast } from "sonner";
|
|
4
|
+
import { Button } from "../../components/ui/button";
|
|
5
|
+
import { Dialog, DialogContent, DialogFooter } from "../../components/ui/dialog";
|
|
6
|
+
import { StyledDialogTitle } from "../../components/ui/styled-dialog-title";
|
|
7
|
+
import { Input } from "../../components/ui/input";
|
|
8
|
+
import { Label } from "../../components/ui/label";
|
|
9
|
+
import { Select } from "../../components/ui/select";
|
|
10
|
+
import { Textarea } from "../../components/ui/textarea";
|
|
11
|
+
import { Settings } from "lucide-react";
|
|
12
|
+
import { addProjectMember, getProjectMembers, removeProjectMember, updateProject, } from "../services/taskService";
|
|
13
|
+
export function ProjectSettingsDialog(props) {
|
|
14
|
+
const { open, onOpenChange, projectId, selectedProject, onChanged } = props;
|
|
15
|
+
const [members, setMembers] = useState([]);
|
|
16
|
+
const [loading, setLoading] = useState(false);
|
|
17
|
+
const [savingProject, setSavingProject] = useState(false);
|
|
18
|
+
const [titleInput, setTitleInput] = useState("");
|
|
19
|
+
const [descriptionInput, setDescriptionInput] = useState("");
|
|
20
|
+
const [costLimitInput, setCostLimitInput] = useState("");
|
|
21
|
+
const [statusInput, setStatusInput] = useState("Active");
|
|
22
|
+
const [memberType, setMemberType] = useState("User");
|
|
23
|
+
const [memberIdentifier, setMemberIdentifier] = useState("");
|
|
24
|
+
const [permission, setPermission] = useState("Viewer");
|
|
25
|
+
const canManage = selectedProject?.permission === "Owner";
|
|
26
|
+
const title = useMemo(() => selectedProject?.project.title ?? "Project", [selectedProject]);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (!open || !selectedProject)
|
|
29
|
+
return;
|
|
30
|
+
setTitleInput(selectedProject.project.title ?? "");
|
|
31
|
+
setDescriptionInput(selectedProject.project.description ?? "");
|
|
32
|
+
setCostLimitInput(selectedProject.project.costLimit == null ? "" : String(selectedProject.project.costLimit));
|
|
33
|
+
setStatusInput(selectedProject.project.status ?? "Active");
|
|
34
|
+
}, [open, selectedProject]);
|
|
35
|
+
const refreshMembers = async () => {
|
|
36
|
+
if (!projectId)
|
|
37
|
+
return;
|
|
38
|
+
setLoading(true);
|
|
39
|
+
try {
|
|
40
|
+
const result = await getProjectMembers(projectId);
|
|
41
|
+
if (result.type !== "success") {
|
|
42
|
+
toast.error(result.summary || "Failed to load members");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
setMembers(result.data || []);
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
setLoading(false);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (!open)
|
|
53
|
+
return;
|
|
54
|
+
void refreshMembers();
|
|
55
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
56
|
+
}, [open, projectId]);
|
|
57
|
+
const submitAdd = async () => {
|
|
58
|
+
if (!projectId)
|
|
59
|
+
return;
|
|
60
|
+
if (!canManage) {
|
|
61
|
+
toast.error("Only owners can manage members");
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (!memberIdentifier.trim()) {
|
|
65
|
+
toast.error("Member identifier is required");
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const result = await addProjectMember({
|
|
69
|
+
projectId,
|
|
70
|
+
memberType,
|
|
71
|
+
memberIdentifier: memberIdentifier.trim(),
|
|
72
|
+
permission,
|
|
73
|
+
});
|
|
74
|
+
if (result.type !== "success") {
|
|
75
|
+
toast.error(result.summary || "Failed to add member");
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
toast.success("Member added");
|
|
79
|
+
setMemberIdentifier("");
|
|
80
|
+
await refreshMembers();
|
|
81
|
+
await onChanged();
|
|
82
|
+
};
|
|
83
|
+
const submitProjectSettings = async () => {
|
|
84
|
+
if (!projectId)
|
|
85
|
+
return;
|
|
86
|
+
if (!canManage) {
|
|
87
|
+
toast.error("Only owners can edit project settings");
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (!titleInput.trim()) {
|
|
91
|
+
toast.error("Project title is required");
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const parsedCostLimit = costLimitInput.trim() ? Number(costLimitInput) : null;
|
|
95
|
+
if (parsedCostLimit != null && Number.isNaN(parsedCostLimit)) {
|
|
96
|
+
toast.error("Cost limit must be a number");
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
setSavingProject(true);
|
|
100
|
+
try {
|
|
101
|
+
const result = await updateProject({
|
|
102
|
+
projectId,
|
|
103
|
+
title: titleInput.trim(),
|
|
104
|
+
description: descriptionInput.trim() ? descriptionInput.trim() : "",
|
|
105
|
+
costLimit: parsedCostLimit,
|
|
106
|
+
status: statusInput,
|
|
107
|
+
});
|
|
108
|
+
if (result.type !== "success") {
|
|
109
|
+
toast.error(result.summary || "Failed to update project");
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
toast.success("Project settings updated");
|
|
113
|
+
await onChanged();
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
setSavingProject(false);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const submitRemove = async (memberId) => {
|
|
120
|
+
if (!canManage)
|
|
121
|
+
return;
|
|
122
|
+
const result = await removeProjectMember(memberId);
|
|
123
|
+
if (result.type !== "success") {
|
|
124
|
+
toast.error(result.summary || "Failed to remove member");
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
toast.success("Member removed");
|
|
128
|
+
await refreshMembers();
|
|
129
|
+
await onChanged();
|
|
130
|
+
};
|
|
131
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "max-w-2xl", children: [_jsx(StyledDialogTitle, { icon: _jsx(Settings, { strokeWidth: 1 }), title: "Project Settings", subtitle: title }), _jsxs("div", { className: "grid gap-6 p-6", children: [_jsxs("div", { className: "grid gap-4 rounded-md border p-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx("div", { className: "text-sm font-semibold", children: "General" }), _jsx("div", { className: "text-xs text-muted-foreground", children: "Update project name, description, and budget limit." })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "projectSettingsTitle", children: "Title" }), _jsx(Input, { id: "projectSettingsTitle", value: titleInput, onChange: (e) => setTitleInput(e.target.value), disabled: !canManage || savingProject, placeholder: "Project title" })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "projectSettingsDescription", children: "Description" }), _jsx(Textarea, { id: "projectSettingsDescription", value: descriptionInput, onChange: (e) => setDescriptionInput(e.target.value), disabled: !canManage || savingProject, placeholder: "Optional description", rows: 3 })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "projectSettingsCostLimit", children: "Cost limit" }), _jsx(Input, { id: "projectSettingsCostLimit", value: costLimitInput, onChange: (e) => setCostLimitInput(e.target.value), disabled: !canManage || savingProject, placeholder: "Unlimited" })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "projectSettingsStatus", children: "Status" }), _jsx(Select, { id: "projectSettingsStatus", value: statusInput, onValueChange: (v) => setStatusInput(v), disabled: !canManage || savingProject, options: [
|
|
132
|
+
{ value: "Planning", label: "Planning" },
|
|
133
|
+
{ value: "PlanPending", label: "Plan Pending" },
|
|
134
|
+
{ value: "Active", label: "Active" },
|
|
135
|
+
{ value: "Finished", label: "Finished" },
|
|
136
|
+
{ value: "Archived", label: "Archived" },
|
|
137
|
+
] })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx("div", { className: "text-sm font-semibold", children: "Members" }), _jsx("div", { className: "text-xs text-muted-foreground", children: "Owners can add users or roles to this project." })] }), _jsxs("div", { className: "grid grid-cols-12 gap-2", children: [_jsxs("div", { className: "col-span-3", children: [_jsx(Label, { children: "Type" }), _jsx(Select, { value: memberType, onValueChange: (v) => setMemberType(v), options: [
|
|
138
|
+
{ value: "User", label: "User" },
|
|
139
|
+
{ value: "Role", label: "Role" },
|
|
140
|
+
] })] }), _jsxs("div", { className: "col-span-5", children: [_jsx(Label, { children: "Identifier" }), _jsx(Input, { value: memberIdentifier, onChange: (e) => setMemberIdentifier(e.target.value), placeholder: memberType === "User" ? "sitecore\\john" : "sitecore\\Author" })] }), _jsxs("div", { className: "col-span-3", children: [_jsx(Label, { children: "Permission" }), _jsx(Select, { value: permission, onValueChange: (v) => setPermission(v), options: [
|
|
141
|
+
{ value: "Viewer", label: "Viewer" },
|
|
142
|
+
{ value: "Editor", label: "Editor" },
|
|
143
|
+
{ value: "Owner", label: "Owner" },
|
|
144
|
+
] })] }), _jsx("div", { className: "col-span-1 flex items-end", children: _jsx(Button, { size: "icon", onClick: submitAdd, disabled: !canManage, children: "+" }) })] }), _jsx("div", { className: "max-h-72 overflow-auto rounded-md border", children: loading ? (_jsx("div", { className: "p-3 text-sm text-muted-foreground", children: "Loading\u2026" })) : members.length === 0 ? (_jsx("div", { className: "p-3 text-sm text-muted-foreground", children: "No members" })) : (_jsx("div", { className: "divide-y", children: members.map((m) => (_jsxs("div", { className: "flex items-center justify-between gap-2 p-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "truncate text-sm font-medium", children: m.memberIdentifier }), _jsxs("div", { className: "truncate text-xs text-muted-foreground", children: [m.memberType, " \u2022 ", m.permission] })] }), _jsx(Button, { variant: "secondary", onClick: () => submitRemove(m.memberId), disabled: !canManage, children: "Remove" })] }, m.memberId))) })) })] }), _jsxs(DialogFooter, { className: "flex items-center justify-end gap-2 p-6 pt-0", children: [_jsx(Button, { onClick: submitProjectSettings, disabled: !canManage || savingProject || !titleInput.trim(), children: savingProject ? "Saving..." : "Save Changes" }), _jsx(Button, { variant: "outline", onClick: () => onOpenChange(false), children: "Close" })] })] }) }));
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=ProjectSettingsDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectSettingsDialog.js","sourceRoot":"","sources":["../../../src/task-board/components/ProjectSettingsDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type TaskAgentPanelMode = "no-task-selected" | "no-agent" | "agent";
|
|
2
|
+
export declare function TaskAgentPanel(props: {
|
|
3
|
+
agentId: string | null;
|
|
4
|
+
mode: TaskAgentPanelMode;
|
|
5
|
+
label?: string;
|
|
6
|
+
onAssignAgent?: () => void;
|
|
7
|
+
canAssignAgent?: boolean;
|
|
8
|
+
assignAgentDisabledReason?: string;
|
|
9
|
+
onStartPlanning?: () => void | Promise<void>;
|
|
10
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { Bot, Play, UserPlus } from "lucide-react";
|
|
4
|
+
import { Button } from "../../components/ui/button";
|
|
5
|
+
import { AgentTerminal } from "../../editor/ai/AgentTerminal";
|
|
6
|
+
import { loadAiProfiles } from "../../editor/services/aiService";
|
|
7
|
+
export function TaskAgentPanel(props) {
|
|
8
|
+
const { agentId, mode, label, onAssignAgent, canAssignAgent = true, assignAgentDisabledReason, onStartPlanning } = props;
|
|
9
|
+
const [profiles, setProfiles] = useState([]);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
let cancelled = false;
|
|
12
|
+
loadAiProfiles().then((p) => {
|
|
13
|
+
if (!cancelled)
|
|
14
|
+
setProfiles(p);
|
|
15
|
+
});
|
|
16
|
+
return () => {
|
|
17
|
+
cancelled = true;
|
|
18
|
+
};
|
|
19
|
+
}, []);
|
|
20
|
+
const agentStub = useMemo(() => {
|
|
21
|
+
if (!agentId)
|
|
22
|
+
return null;
|
|
23
|
+
return {
|
|
24
|
+
id: agentId,
|
|
25
|
+
name: "",
|
|
26
|
+
userId: "",
|
|
27
|
+
updatedDate: "",
|
|
28
|
+
status: "running",
|
|
29
|
+
};
|
|
30
|
+
}, [agentId]);
|
|
31
|
+
// ── empty states ──
|
|
32
|
+
if (mode === "no-task-selected") {
|
|
33
|
+
return (_jsxs("div", { className: "flex h-full flex-col border-l bg-white", children: [_jsxs("div", { className: "flex items-center gap-2 border-b px-4 py-3", children: [_jsx(Bot, { className: "h-5 w-5 text-muted-foreground" }), _jsx("div", { className: "text-sm font-semibold", children: label || "Agent" })] }), _jsxs("div", { className: "flex flex-1 flex-col items-center justify-center gap-3 p-6 text-center", children: [_jsx(Bot, { className: "h-10 w-10 text-muted-foreground/40" }), _jsxs("div", { className: "grid gap-1", children: [_jsx("div", { className: "text-sm font-medium text-muted-foreground", children: "No task selected" }), _jsx("div", { className: "text-xs text-muted-foreground", children: "Click on a task to see its agent here." })] })] })] }));
|
|
34
|
+
}
|
|
35
|
+
if (!agentStub) {
|
|
36
|
+
// mode === "no-agent"
|
|
37
|
+
return (_jsxs("div", { className: "flex h-full flex-col border-l bg-white", children: [_jsxs("div", { className: "flex items-center gap-2 border-b px-4 py-3", children: [_jsx(Bot, { className: "h-5 w-5 text-muted-foreground" }), _jsx("div", { className: "text-sm font-semibold", children: label || "Agent" })] }), _jsxs("div", { className: "flex flex-1 flex-col items-center justify-center gap-4 p-6 text-center", children: [_jsx(Bot, { className: "h-10 w-10 text-muted-foreground/40" }), _jsxs("div", { className: "grid gap-1", children: [_jsxs("div", { className: "flex items-center justify-center gap-2", children: [_jsx("div", { className: "text-sm font-medium text-muted-foreground", children: "No agent assigned" }), onAssignAgent && (_jsxs(Button, { variant: "outline", size: "sm", onClick: onAssignAgent, disabled: !canAssignAgent, title: !canAssignAgent ? assignAgentDisabledReason : undefined, children: [_jsx(UserPlus, { className: "mr-2 h-4 w-4" }), "Assign and run agent"] }))] }), _jsx("div", { className: "text-xs text-muted-foreground", children: "This task does not have an agent assigned yet." }), !canAssignAgent && assignAgentDisabledReason && (_jsx("div", { className: "text-xs text-amber-600", children: assignAgentDisabledReason }))] }), onStartPlanning && (_jsxs(Button, { variant: "default", size: "sm", onClick: onStartPlanning, children: [_jsx(Play, { className: "mr-1 h-4 w-4" }), "Start Planning"] }))] })] }));
|
|
38
|
+
}
|
|
39
|
+
// ── agent terminal ──
|
|
40
|
+
return (_jsx("div", { className: "flex h-full flex-col border-l bg-white", children: _jsx(AgentTerminal, { agentStub: agentStub, profiles: profiles, isActive: true, compact: true, hideGreeting: true }) }));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=TaskAgentPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskAgentPanel.js","sourceRoot":"","sources":["../../../src/task-board/components/TaskAgentPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TaskAssigneeSelection } from "../types";
|
|
2
|
+
type TaskAssigneePickerProps = {
|
|
3
|
+
projectId: string;
|
|
4
|
+
assigneeType?: "Human" | "Agent" | null;
|
|
5
|
+
value?: string | null;
|
|
6
|
+
displayValue?: string | null;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
onChange: (next: TaskAssigneeSelection | null) => void;
|
|
9
|
+
placeholder?: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function TaskAssigneePicker({ projectId, assigneeType, value, displayValue, disabled, onChange, placeholder, }: TaskAssigneePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { Check, ChevronDown, Loader2, UserRound, X } from "lucide-react";
|
|
4
|
+
import { Button } from "../../components/ui/button";
|
|
5
|
+
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "../../components/ui/command";
|
|
6
|
+
import { Popover, PopoverContent, PopoverTrigger } from "../../components/ui/popover";
|
|
7
|
+
import { searchTaskAssignableUsers } from "../services/taskService";
|
|
8
|
+
import { loadAiProfiles } from "../../editor/services/aiService";
|
|
9
|
+
const MIN_QUERY_LENGTH = 2;
|
|
10
|
+
export function TaskAssigneePicker({ projectId, assigneeType = null, value, displayValue, disabled = false, onChange, placeholder = "Assign user", }) {
|
|
11
|
+
const [open, setOpen] = useState(false);
|
|
12
|
+
const [query, setQuery] = useState("");
|
|
13
|
+
const [loading, setLoading] = useState(false);
|
|
14
|
+
const [loadingProfiles, setLoadingProfiles] = useState(false);
|
|
15
|
+
const [results, setResults] = useState([]);
|
|
16
|
+
const [profiles, setProfiles] = useState([]);
|
|
17
|
+
const triggerRef = useRef(null);
|
|
18
|
+
const [portalContainer, setPortalContainer] = useState(null);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (!open)
|
|
21
|
+
return;
|
|
22
|
+
const trimmed = query.trim();
|
|
23
|
+
if (trimmed.length < MIN_QUERY_LENGTH) {
|
|
24
|
+
setResults([]);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
let cancelled = false;
|
|
28
|
+
const handle = window.setTimeout(async () => {
|
|
29
|
+
setLoading(true);
|
|
30
|
+
try {
|
|
31
|
+
const result = await searchTaskAssignableUsers(projectId, trimmed, 20);
|
|
32
|
+
if (!cancelled) {
|
|
33
|
+
setResults(result.type === "success" ? (result.data ?? []) : []);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
if (!cancelled)
|
|
38
|
+
setLoading(false);
|
|
39
|
+
}
|
|
40
|
+
}, 250);
|
|
41
|
+
return () => {
|
|
42
|
+
cancelled = true;
|
|
43
|
+
window.clearTimeout(handle);
|
|
44
|
+
};
|
|
45
|
+
}, [open, projectId, query]);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (!open)
|
|
48
|
+
return;
|
|
49
|
+
let cancelled = false;
|
|
50
|
+
setLoadingProfiles(true);
|
|
51
|
+
loadAiProfiles()
|
|
52
|
+
.then((items) => {
|
|
53
|
+
if (cancelled)
|
|
54
|
+
return;
|
|
55
|
+
setProfiles(items || []);
|
|
56
|
+
})
|
|
57
|
+
.finally(() => {
|
|
58
|
+
if (!cancelled)
|
|
59
|
+
setLoadingProfiles(false);
|
|
60
|
+
});
|
|
61
|
+
return () => {
|
|
62
|
+
cancelled = true;
|
|
63
|
+
};
|
|
64
|
+
}, [open]);
|
|
65
|
+
const currentLabel = useMemo(() => {
|
|
66
|
+
if (!value)
|
|
67
|
+
return "";
|
|
68
|
+
const fromResults = results.find((item) => item.userName.toLowerCase() === value.toLowerCase());
|
|
69
|
+
return fromResults?.displayName || displayValue || value;
|
|
70
|
+
}, [displayValue, results, value]);
|
|
71
|
+
const handleSelectUser = (next) => {
|
|
72
|
+
onChange({
|
|
73
|
+
assigneeType: "Human",
|
|
74
|
+
assigneeId: next.userName,
|
|
75
|
+
displayName: next.displayName || next.userName,
|
|
76
|
+
description: next.email || null,
|
|
77
|
+
});
|
|
78
|
+
setOpen(false);
|
|
79
|
+
};
|
|
80
|
+
const handleSelectProfile = (profile) => {
|
|
81
|
+
onChange({
|
|
82
|
+
assigneeType: "Agent",
|
|
83
|
+
assigneeId: profile.id,
|
|
84
|
+
displayName: profile.displayTitle || profile.name,
|
|
85
|
+
description: profile.description || null,
|
|
86
|
+
});
|
|
87
|
+
setOpen(false);
|
|
88
|
+
};
|
|
89
|
+
const canSearch = query.trim().length >= MIN_QUERY_LENGTH;
|
|
90
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
91
|
+
const filteredProfiles = useMemo(() => {
|
|
92
|
+
if (!normalizedQuery)
|
|
93
|
+
return profiles;
|
|
94
|
+
return profiles.filter((profile) => {
|
|
95
|
+
const title = (profile.displayTitle || profile.name || "").toLowerCase();
|
|
96
|
+
const desc = (profile.description || "").toLowerCase();
|
|
97
|
+
return (title.includes(normalizedQuery) ||
|
|
98
|
+
desc.includes(normalizedQuery) ||
|
|
99
|
+
profile.id.toLowerCase().includes(normalizedQuery));
|
|
100
|
+
});
|
|
101
|
+
}, [profiles, normalizedQuery]);
|
|
102
|
+
return (_jsxs(Popover, { open: open, onOpenChange: (nextOpen) => {
|
|
103
|
+
if (nextOpen && triggerRef.current) {
|
|
104
|
+
const dialogContent = triggerRef.current.closest('[data-slot="dialog-content"]');
|
|
105
|
+
setPortalContainer(dialogContent);
|
|
106
|
+
}
|
|
107
|
+
setOpen(nextOpen);
|
|
108
|
+
}, enableIframeClickDetection: false, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { ref: triggerRef, size: "sm", variant: "outline", className: "h-[29px] w-[220px] justify-between rounded-md bg-gray-5 text-xs font-medium", disabled: disabled, children: [_jsx("span", { className: "truncate text-left", children: currentLabel || placeholder }), _jsx(ChevronDown, { className: "h-3.5 w-3.5 opacity-60" })] }) }), _jsx(PopoverContent, { className: "w-[300px] p-0", align: "start", container: portalContainer, onMouseDown: (event) => event.stopPropagation(), onClick: (event) => event.stopPropagation(), children: _jsxs(Command, { shouldFilter: false, children: [_jsx(CommandInput, { value: query, onValueChange: setQuery, placeholder: "Search users...", className: "h-8 text-xs", autoFocus: true }), _jsxs(CommandList, { className: "max-h-64", children: [!value && !canSearch && (_jsx(CommandGroup, { children: _jsxs(CommandItem, { disabled: true, className: "text-muted-foreground", children: ["Type at least ", MIN_QUERY_LENGTH, " characters"] }) })), value && (_jsx(CommandGroup, { heading: "Current", children: _jsxs(CommandItem, { onSelect: () => {
|
|
109
|
+
onChange(null);
|
|
110
|
+
setOpen(false);
|
|
111
|
+
}, children: [_jsx(X, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Clear assignee" })] }) })), _jsx(CommandGroup, { heading: "Agent profiles", children: loadingProfiles ? (_jsxs(CommandItem, { disabled: true, children: [_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin" }), _jsx("span", { children: "Loading agent profiles..." })] })) : (filteredProfiles.map((profile) => (_jsxs(CommandItem, { value: profile.id, onSelect: () => handleSelectProfile(profile), children: [_jsx(UserRound, { className: "h-3.5 w-3.5" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "truncate", children: profile.displayTitle || profile.name }), _jsx("div", { className: "truncate text-[10px] text-muted-foreground", children: profile.description || profile.id })] }), assigneeType === "Agent" &&
|
|
112
|
+
value?.toLowerCase() === profile.id.toLowerCase() && (_jsx(Check, { className: "h-3.5 w-3.5" }))] }, profile.id)))) }), canSearch && (_jsx(CommandGroup, { heading: "Users", children: loading ? (_jsxs(CommandItem, { disabled: true, children: [_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin" }), _jsx("span", { children: "Searching users..." })] })) : (results.map((user) => (_jsxs(CommandItem, { value: user.userName, onSelect: () => handleSelectUser(user), children: [_jsx(UserRound, { className: "h-3.5 w-3.5" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "truncate", children: user.displayName || user.userName }), _jsxs("div", { className: "truncate text-[10px] text-muted-foreground", children: [user.userName, user.email ? ` • ${user.email}` : ""] })] }), assigneeType === "Human" &&
|
|
113
|
+
value?.toLowerCase() === user.userName.toLowerCase() && (_jsx(Check, { className: "h-3.5 w-3.5" }))] }, user.userName)))) })), canSearch && !loading && results.length === 0 && filteredProfiles.length === 0 && (_jsx(CommandEmpty, { children: "No users found" }))] })] }) })] }));
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=TaskAssigneePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskAssigneePicker.js","sourceRoot":"","sources":["../../../src/task-board/components/TaskAssigneePicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function TaskBoardTitlebar(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState, useSyncExternalStore } from "react";
|
|
3
|
+
import { Button } from "../../components/ui/button";
|
|
4
|
+
import { Input } from "../../components/ui/input";
|
|
5
|
+
import { ChevronDown, Loader2, Play, Plus, RefreshCw, Settings, FolderPlus, Trash2, LayoutGrid, Shield, Search, SquarePen, } from "lucide-react";
|
|
6
|
+
import { Popover, PopoverContent, PopoverTrigger, } from "../../components/ui/popover";
|
|
7
|
+
import { cn } from "../../lib/utils";
|
|
8
|
+
import { subscribeTaskBoardNav, getTaskBoardNavSnapshot, } from "../taskBoardNavStore";
|
|
9
|
+
import { useEditContext } from "../../editor/client/editContext";
|
|
10
|
+
import { SimpleIconButton } from "../../editor/ui/SimpleIconButton";
|
|
11
|
+
export function TaskBoardTitlebar() {
|
|
12
|
+
const editContext = useEditContext();
|
|
13
|
+
const [projectPopoverOpen, setProjectPopoverOpen] = useState(false);
|
|
14
|
+
const [projectSearch, setProjectSearch] = useState("");
|
|
15
|
+
const [hideArchivedProjects, setHideArchivedProjects] = useState(true);
|
|
16
|
+
const nav = useSyncExternalStore(subscribeTaskBoardNav, getTaskBoardNavSnapshot, getTaskBoardNavSnapshot);
|
|
17
|
+
const filteredProjectOptions = useMemo(() => {
|
|
18
|
+
const query = projectSearch.trim().toLowerCase();
|
|
19
|
+
return nav.projectOptions.filter((project) => {
|
|
20
|
+
if (hideArchivedProjects && project.status?.toLowerCase() === "archived") {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
if (!query)
|
|
24
|
+
return true;
|
|
25
|
+
const title = project.title?.toLowerCase() ?? "";
|
|
26
|
+
const description = project.description?.toLowerCase() ?? "";
|
|
27
|
+
const permission = project.permission?.toLowerCase() ?? "";
|
|
28
|
+
const status = project.status?.toLowerCase() ?? "";
|
|
29
|
+
return (title.includes(query) ||
|
|
30
|
+
description.includes(query) ||
|
|
31
|
+
permission.includes(query) ||
|
|
32
|
+
status.includes(query));
|
|
33
|
+
});
|
|
34
|
+
}, [nav.projectOptions, projectSearch, hideArchivedProjects]);
|
|
35
|
+
const showEditorPanel = editContext?.showAgentsWorkspaceEditor ?? true;
|
|
36
|
+
return (_jsxs("div", { className: "flex w-full items-center justify-between gap-4 pr-2", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsxs(Popover, { open: projectPopoverOpen, onOpenChange: setProjectPopoverOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: "group flex min-w-0 items-center gap-2 rounded-md px-2 py-1 text-left hover:bg-slate-100/70", title: "Select project", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "truncate text-sm font-semibold text-slate-900", children: nav.projectTitle }), _jsxs("div", { className: "mt-0.5 flex items-center gap-2", children: [_jsx("div", { className: "h-1.5 w-1.5 rounded-full bg-green-500" }), _jsx("span", { className: "truncate text-[11px] text-slate-500", children: nav.projectSubtitle }), _jsx("span", { className: "truncate text-[10px] font-semibold uppercase tracking-wider text-slate-400", children: nav.permissionLabel })] })] }), _jsx(ChevronDown, { className: "h-4 w-4 shrink-0 text-slate-500 group-hover:text-slate-700" })] }) }), _jsxs(PopoverContent, { align: "start", sideOffset: 8, className: "w-[420px] p-0", children: [_jsxs("div", { className: "flex items-center justify-between border-b px-3 py-2", children: [_jsx("div", { className: "text-xs font-semibold uppercase tracking-wider text-slate-500", children: "Projects" }), _jsxs(Button, { variant: "ghost", size: "sm", className: "h-7 px-2", onClick: () => nav.onCreateProject?.(), children: [_jsx(FolderPlus, { className: "mr-1.5 h-3.5 w-3.5" }), "New"] })] }), _jsx("div", { className: "border-b px-3 py-2", children: _jsxs("div", { className: "grid gap-2", children: [_jsxs("div", { className: "relative", children: [_jsx(Search, { className: "pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-slate-400" }), _jsx(Input, { value: projectSearch, onChange: (e) => setProjectSearch(e.target.value), placeholder: "Search projects...", className: "h-8 pl-8 text-xs" })] }), _jsxs("label", { className: "flex items-center gap-2 text-xs text-slate-600", children: [_jsx("input", { type: "checkbox", checked: hideArchivedProjects, onChange: (e) => setHideArchivedProjects(e.target.checked) }), "Hide archived projects"] })] }) }), _jsx("div", { className: "max-h-[360px] overflow-y-auto p-2", children: nav.projectOptions.length === 0 ? (_jsx("div", { className: "rounded-md border border-dashed px-3 py-8 text-center text-xs text-slate-400", children: "No projects yet" })) : filteredProjectOptions.length === 0 ? (_jsx("div", { className: "rounded-md border border-dashed px-3 py-8 text-center text-xs text-slate-400", children: "No matching projects" })) : (_jsx("div", { className: "flex flex-col gap-1", children: filteredProjectOptions.map((project) => {
|
|
37
|
+
const isSelected = project.projectId === nav.selectedProjectId;
|
|
38
|
+
const canManage = project.permission === "Owner";
|
|
39
|
+
const isSubproject = (project.depth ?? 0) > 0;
|
|
40
|
+
const indent = Math.max(0, Math.min(project.depth ?? 0, 6)) * 14;
|
|
41
|
+
return (_jsxs("div", { className: cn("group relative flex items-start justify-between gap-2 rounded-lg border px-2.5 transition-all", isSubproject ? "py-1.5" : "py-2", isSelected
|
|
42
|
+
? "border-slate-300 bg-slate-50"
|
|
43
|
+
: "border-transparent hover:border-slate-200 hover:bg-slate-50/60"), children: [_jsxs("button", { type: "button", className: "min-w-0 flex-1 text-left", style: { paddingLeft: indent > 0 ? `${indent}px` : undefined }, onClick: () => {
|
|
44
|
+
nav.onSelectProject?.(project.projectId);
|
|
45
|
+
setProjectPopoverOpen(false);
|
|
46
|
+
}, children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(LayoutGrid, { className: cn("text-slate-400", isSubproject ? "h-3 w-3" : "h-3.5 w-3.5") }), project.depth && project.depth > 0 ? (_jsx("span", { className: "text-[10px] text-slate-400", children: "\u21B3" })) : null, _jsx("span", { className: cn("truncate text-slate-800", isSubproject ? "text-xs font-medium" : "text-sm font-medium"), children: project.title })] }), _jsx("div", { className: cn("pl-5 text-slate-500 line-clamp-2", isSubproject ? "mt-0.5 text-[10px]" : "mt-1 text-xs"), children: project.description?.trim() || "No description" }), _jsxs("div", { className: "mt-1 flex items-center gap-1.5 pl-5", children: [_jsx(Shield, { className: cn("text-slate-400", isSubproject ? "h-2 w-2" : "h-2.5 w-2.5") }), _jsx("span", { className: cn("font-semibold uppercase tracking-wider text-slate-400", isSubproject ? "text-[9px]" : "text-[10px]"), children: project.permission })] })] }), canManage && (_jsxs("div", { className: "flex items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100", children: [_jsx(Button, { variant: "ghost", size: "icon", className: "h-7 w-7", onClick: (e) => {
|
|
47
|
+
e.stopPropagation();
|
|
48
|
+
nav.onOpenProjectSettings?.(project.projectId);
|
|
49
|
+
setProjectPopoverOpen(false);
|
|
50
|
+
}, title: "Project settings", children: _jsx(Settings, { className: "h-3.5 w-3.5" }) }), _jsx(Button, { variant: "ghost", size: "icon", className: "h-7 w-7 text-destructive hover:bg-destructive/10 hover:text-destructive", onClick: (e) => {
|
|
51
|
+
e.stopPropagation();
|
|
52
|
+
nav.onDeleteProject?.(project.projectId, project.title);
|
|
53
|
+
}, title: "Delete project", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) })] }))] }, project.projectId));
|
|
54
|
+
}) })) })] })] }), _jsx("div", { className: "mx-1 h-8 w-[1px] bg-slate-200" }), _jsxs(Button, { size: "sm", onClick: () => nav.onCreateTask?.(), disabled: !nav.hasSelectedProject || !nav.canCreateTask, className: "h-8 px-3", children: [_jsx(Plus, { className: "mr-1.5 h-4 w-4" }), "New Task"] }), _jsxs(Button, { size: "sm", variant: "outline", onClick: () => nav.onRunOrchestrator?.(), disabled: !nav.hasSelectedProject || !nav.canRunOrchestrator || nav.runningOrchestrator, className: "h-8 px-3", title: "Run orchestrator to launch queued agent tasks", children: [nav.runningOrchestrator ? (_jsx(Loader2, { className: "mr-1.5 h-4 w-4 animate-spin" })) : (_jsx(Play, { className: "mr-1.5 h-4 w-4" })), "Run Tasks"] }), _jsx(Button, { variant: "outline", size: "icon", onClick: () => nav.onRefresh?.(), disabled: !nav.hasSelectedProject, className: "h-8 w-8", title: "Refresh tasks", children: _jsx(RefreshCw, { className: "h-4 w-4 text-slate-500" }) }), _jsx(Button, { variant: "outline", size: "icon", onClick: () => {
|
|
55
|
+
if (nav.selectedProjectId) {
|
|
56
|
+
nav.onOpenProjectSettings?.(nav.selectedProjectId);
|
|
57
|
+
}
|
|
58
|
+
}, disabled: !nav.hasSelectedProject || !nav.canManageProject, className: "h-8 w-8", title: "Project settings", children: _jsx(Settings, { className: "h-4 w-4 text-slate-500" }) })] }), _jsx(SimpleIconButton, { icon: _jsx(SquarePen, { className: "h-5 w-5", strokeWidth: 1 }), label: showEditorPanel ? "Hide Editor" : "Show Editor", size: "large", "data-testid": "taskboard-editor-panel-toggle", selected: showEditorPanel, onClick: () => editContext?.setShowAgentsWorkspaceEditor(!showEditorPanel) })] }));
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=TaskBoardTitlebar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskBoardTitlebar.js","sourceRoot":"","sources":["../../../src/task-board/components/TaskBoardTitlebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { TaskItem } from "../types";
|
|
2
|
+
import type { AgentStatus } from "../../editor/services/agentService";
|
|
3
|
+
export declare function TaskCard(props: {
|
|
4
|
+
task: TaskItem;
|
|
5
|
+
selected: boolean;
|
|
6
|
+
onClick: () => void;
|
|
7
|
+
dependencyTaskIds?: string[];
|
|
8
|
+
assignedAgentStatus?: AgentStatus;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/utils";
|
|
3
|
+
import { Loader2, User, Bot, Calendar, AlertCircle } from "lucide-react";
|
|
4
|
+
import { Badge } from "../../components/ui/badge";
|
|
5
|
+
import { format } from "date-fns";
|
|
6
|
+
import { getTaskExecutionDisplay } from "../taskExecutionStatus";
|
|
7
|
+
const priorityColors = {
|
|
8
|
+
Critical: "bg-red-500",
|
|
9
|
+
High: "bg-orange-500",
|
|
10
|
+
Medium: "bg-blue-500",
|
|
11
|
+
Low: "bg-slate-400",
|
|
12
|
+
};
|
|
13
|
+
export function TaskCard(props) {
|
|
14
|
+
const { task, selected, onClick, dependencyTaskIds = [], assignedAgentStatus } = props;
|
|
15
|
+
const executionDisplay = getTaskExecutionDisplay(task.executionStatus, assignedAgentStatus, task.status);
|
|
16
|
+
const priorityColor = task.priority ? priorityColors[task.priority] : "bg-slate-200";
|
|
17
|
+
const displayTaskId = task.taskKey || task.taskId.slice(0, 8).toUpperCase();
|
|
18
|
+
const isPlanTask = String(task.taskType ?? "").toLowerCase() === "plan" || task.title === "Project Plan";
|
|
19
|
+
const assigneeValue = task.assigneeDisplayName ||
|
|
20
|
+
task.assigneeId ||
|
|
21
|
+
(task.assigneeType === "Agent" && isPlanTask ? "Project Planner" : "Unassigned");
|
|
22
|
+
return (_jsxs("button", { type: "button", onClick: onClick, className: cn("group relative w-full overflow-hidden rounded-lg border bg-white p-3 text-left shadow-sm transition-all hover:border-primary/50 hover:shadow-md", selected && "border-primary ring-1 ring-primary/30 shadow-md"), children: [_jsx("div", { className: cn("absolute inset-y-0 left-0 w-1", priorityColor) }), _jsxs("div", { className: "flex flex-col gap-2.5", children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "mb-1 text-[10px] font-semibold uppercase tracking-widest text-muted-foreground", children: displayTaskId }), _jsx("div", { className: "line-clamp-2 text-sm font-semibold leading-snug group-hover:text-primary transition-colors", children: task.title })] }), task.priority === "Critical" && (_jsx(AlertCircle, { className: "h-4 w-4 shrink-0 text-red-500" }))] }), task.description && (_jsx("div", { className: "line-clamp-1 text-xs text-muted-foreground italic", children: task.description })), dependencyTaskIds.length > 0 && (_jsxs("div", { className: "line-clamp-1 text-[10px] font-medium text-muted-foreground", children: ["Depends on: ", dependencyTaskIds.join(", ")] })), _jsxs("div", { className: "flex flex-wrap items-center gap-2 mt-0.5", children: [_jsxs("div", { className: "flex items-center gap-1 text-xs text-muted-foreground bg-gray-50 px-1.5 py-0.5 rounded-md", children: [task.assigneeType === "Agent" ? (_jsx(Bot, { className: "h-3 w-3" })) : (_jsx(User, { className: "h-3 w-3" })), _jsx("span", { className: "max-w-[160px] truncate", title: assigneeValue, children: assigneeValue })] }), task.dueDate && (_jsxs("div", { className: "flex items-center gap-1 text-xs text-muted-foreground bg-gray-50 px-1.5 py-0.5 rounded-md", children: [_jsx(Calendar, { className: "h-3 w-3" }), _jsx("span", { children: format(new Date(task.dueDate), "MMM d") })] })), executionDisplay ? (_jsxs(Badge, { variant: executionDisplay.variant, className: cn("h-5 px-1.5 text-[10px] uppercase tracking-wider font-bold", executionDisplay.className), title: executionDisplay.needsAttention ? "Assigned agent requires attention" : undefined, children: [executionDisplay.showSpinner && _jsx(Loader2, { className: "mr-1 h-2.5 w-2.5 animate-spin" }), executionDisplay.label] })) : null] })] })] }));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=TaskCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskCard.js","sourceRoot":"","sources":["../../../src/task-board/components/TaskCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ProjectWithPermission, TaskItem, TaskDependency } from "../types";
|
|
2
|
+
export declare function TaskDetailDialog(props: {
|
|
3
|
+
open: boolean;
|
|
4
|
+
onOpenChange: (open: boolean) => void;
|
|
5
|
+
project: ProjectWithPermission | null;
|
|
6
|
+
task: TaskItem | null;
|
|
7
|
+
allTasks: TaskItem[];
|
|
8
|
+
dependencies: TaskDependency[];
|
|
9
|
+
onTaskChanged: () => void | Promise<void>;
|
|
10
|
+
onSelectTask: (taskId: string) => void;
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Dialog, DialogContent } from "../../components/ui/dialog";
|
|
3
|
+
import { TaskDetailPanel } from "./TaskDetailPanel";
|
|
4
|
+
export function TaskDetailDialog(props) {
|
|
5
|
+
const { open, onOpenChange, project, task, allTasks, dependencies, onTaskChanged, onSelectTask } = props;
|
|
6
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsx(DialogContent, { className: "max-w-2xl max-h-[90vh] flex flex-col p-0", children: _jsx("div", { className: "flex-1 overflow-hidden min-h-0", children: _jsx(TaskDetailPanel, { project: project, task: task, allTasks: allTasks, dependencies: dependencies, onTaskChanged: onTaskChanged, onSelectTask: onSelectTask, onClose: () => onOpenChange(false), variant: "dialog" }) }) }) }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=TaskDetailDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskDetailDialog.js","sourceRoot":"","sources":["../../../src/task-board/components/TaskDetailDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,UAAU,gBAAgB,CAAC,KAShC;IACC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAEzG,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,YAC5C,KAAC,aAAa,IAAC,SAAS,EAAC,0CAA0C,YACjE,cAAK,SAAS,EAAC,gCAAgC,YAC7C,KAAC,eAAe,IACd,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAClC,OAAO,EAAC,QAAQ,GAChB,GACE,GACQ,GACT,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AgentStatus } from "../../editor/services/agentService";
|
|
2
|
+
import type { ProjectWithPermission, TaskItem, TaskDependency } from "../types";
|
|
3
|
+
export declare function TaskDetailPanel(props: {
|
|
4
|
+
project: ProjectWithPermission | null;
|
|
5
|
+
task: TaskItem | null;
|
|
6
|
+
allTasks: TaskItem[];
|
|
7
|
+
dependencies: TaskDependency[];
|
|
8
|
+
onTaskChanged: () => void | Promise<void>;
|
|
9
|
+
onSelectTask: (taskId: string) => void;
|
|
10
|
+
onClose: () => void;
|
|
11
|
+
variant?: "panel" | "dialog";
|
|
12
|
+
agentStatusesById?: Record<string, AgentStatus>;
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|