@tutti-os/workspace-issue-manager 0.0.3 → 0.0.5
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/{chunk-CHQTHPRL.js → chunk-UXVTGSOH.js} +599 -479
- package/dist/chunk-UXVTGSOH.js.map +1 -0
- package/dist/contracts/index.d.ts +2 -0
- package/dist/ui/index.js +1 -1
- package/dist/workbench/index.js +1 -1
- package/openapi/issue-manager.v1.yaml +4 -0
- package/package.json +9 -9
- package/dist/chunk-CHQTHPRL.js.map +0 -1
|
@@ -599,6 +599,7 @@ async function executeIssueManagerRunTask(input) {
|
|
|
599
599
|
workspaceId: input.workspaceId
|
|
600
600
|
});
|
|
601
601
|
return {
|
|
602
|
+
...result.errorMessage?.trim() ? { errorMessage: result.errorMessage.trim() } : {},
|
|
602
603
|
status: result.status
|
|
603
604
|
};
|
|
604
605
|
}
|
|
@@ -920,6 +921,28 @@ function createIssueManagerControllerActions(input) {
|
|
|
920
921
|
}
|
|
921
922
|
applyOutcome(createIssueManagerAttachReferencesOutcome(attached));
|
|
922
923
|
};
|
|
924
|
+
const updateTaskStatus = async (taskId, status, options) => {
|
|
925
|
+
const selectedIssueId = nodeState.selectedIssueId;
|
|
926
|
+
const normalizedTaskId = taskId?.trim() ?? "";
|
|
927
|
+
if (!selectedIssueId || !normalizedTaskId) {
|
|
928
|
+
return;
|
|
929
|
+
}
|
|
930
|
+
try {
|
|
931
|
+
const task = await feature.backend.updateTask({
|
|
932
|
+
issueId: selectedIssueId,
|
|
933
|
+
status,
|
|
934
|
+
taskId: normalizedTaskId,
|
|
935
|
+
workspaceId
|
|
936
|
+
});
|
|
937
|
+
applyOutcome(
|
|
938
|
+
options.selectTaskOnSuccess ? createIssueManagerSaveTaskSuccessOutcome(task.taskId) : {
|
|
939
|
+
refreshAll: true
|
|
940
|
+
}
|
|
941
|
+
);
|
|
942
|
+
} catch (error) {
|
|
943
|
+
notifyError(error, "messages.taskSaveFailed");
|
|
944
|
+
}
|
|
945
|
+
};
|
|
923
946
|
return {
|
|
924
947
|
async attachReferences(parentKind) {
|
|
925
948
|
const fileAdapter = feature.fileAdapter;
|
|
@@ -1160,7 +1183,11 @@ function createIssueManagerControllerActions(input) {
|
|
|
1160
1183
|
const outcome = createIssueManagerRunTaskSuccessOutcome({
|
|
1161
1184
|
status: result.status
|
|
1162
1185
|
});
|
|
1163
|
-
|
|
1186
|
+
if (outcome.notificationKey && result.errorMessage?.trim()) {
|
|
1187
|
+
notifyTip(result.errorMessage.trim());
|
|
1188
|
+
} else {
|
|
1189
|
+
applyOutcome(outcome);
|
|
1190
|
+
}
|
|
1164
1191
|
} catch (error) {
|
|
1165
1192
|
notifyTip(
|
|
1166
1193
|
resolveIssueManagerErrorMessage(error, copy, "messages.runFailed")
|
|
@@ -1197,6 +1224,7 @@ function createIssueManagerControllerActions(input) {
|
|
|
1197
1224
|
)
|
|
1198
1225
|
);
|
|
1199
1226
|
}
|
|
1227
|
+
setIsRunningTask(true);
|
|
1200
1228
|
try {
|
|
1201
1229
|
trackIssueManagerAnalytics(feature, {
|
|
1202
1230
|
name: "issue_manager.issue_breakdown_initiated",
|
|
@@ -1206,6 +1234,9 @@ function createIssueManagerControllerActions(input) {
|
|
|
1206
1234
|
}
|
|
1207
1235
|
});
|
|
1208
1236
|
const result = await breakdownLauncher.startBreakdown({
|
|
1237
|
+
...nodeState.selectedExecutionDirectory?.trim() ? {
|
|
1238
|
+
executionDirectory: nodeState.selectedExecutionDirectory.trim()
|
|
1239
|
+
} : {},
|
|
1209
1240
|
issueDetail: currentIssueDetail,
|
|
1210
1241
|
provider: breakdownPlan.provider,
|
|
1211
1242
|
workspaceId
|
|
@@ -1223,6 +1254,8 @@ function createIssueManagerControllerActions(input) {
|
|
|
1223
1254
|
"messages.breakdownOpenFailed"
|
|
1224
1255
|
)
|
|
1225
1256
|
);
|
|
1257
|
+
} finally {
|
|
1258
|
+
setIsRunningTask(false);
|
|
1226
1259
|
}
|
|
1227
1260
|
},
|
|
1228
1261
|
async saveIssue() {
|
|
@@ -1335,23 +1368,13 @@ function createIssueManagerControllerActions(input) {
|
|
|
1335
1368
|
notifyError(error, "messages.taskSaveFailed");
|
|
1336
1369
|
}
|
|
1337
1370
|
},
|
|
1371
|
+
async setTaskStatus(taskId, status) {
|
|
1372
|
+
await updateTaskStatus(taskId, status, { selectTaskOnSuccess: false });
|
|
1373
|
+
},
|
|
1338
1374
|
async setSelectedTaskStatus(status) {
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
return;
|
|
1343
|
-
}
|
|
1344
|
-
try {
|
|
1345
|
-
const task = await feature.backend.updateTask({
|
|
1346
|
-
issueId: selectedIssueId,
|
|
1347
|
-
status,
|
|
1348
|
-
taskId: selectedTaskId,
|
|
1349
|
-
workspaceId
|
|
1350
|
-
});
|
|
1351
|
-
applyOutcome(createIssueManagerSaveTaskSuccessOutcome(task.taskId));
|
|
1352
|
-
} catch (error) {
|
|
1353
|
-
notifyError(error, "messages.taskSaveFailed");
|
|
1354
|
-
}
|
|
1375
|
+
await updateTaskStatus(nodeState.selectedTaskId, status, {
|
|
1376
|
+
selectTaskOnSuccess: true
|
|
1377
|
+
});
|
|
1355
1378
|
},
|
|
1356
1379
|
async shareSelection() {
|
|
1357
1380
|
const selectedIssueId = nodeState.selectedIssueId;
|
|
@@ -1942,7 +1965,6 @@ function useIssueManagerNodeView({
|
|
|
1942
1965
|
selectedTask,
|
|
1943
1966
|
shell: {
|
|
1944
1967
|
onCloseTaskDrawer: () => {
|
|
1945
|
-
controller.setTaskEditorMode("read");
|
|
1946
1968
|
controller.selectTask(null);
|
|
1947
1969
|
},
|
|
1948
1970
|
onDismissIssueCreate: () => {
|
|
@@ -1962,18 +1984,18 @@ import {
|
|
|
1962
1984
|
useEffect as useEffect9,
|
|
1963
1985
|
useRef as useRef5
|
|
1964
1986
|
} from "react";
|
|
1965
|
-
import { Button as
|
|
1987
|
+
import { Button as Button13, PanelIcon, cn as cn11 } from "@tutti-os/ui-system";
|
|
1966
1988
|
import { WorkspaceFileReferencePicker } from "@tutti-os/workspace-file-reference/ui";
|
|
1967
1989
|
|
|
1968
1990
|
// src/ui/internal/shell/IssueManagerShell.tsx
|
|
1969
1991
|
import { useEffect as useEffect7, useState as useState8 } from "react";
|
|
1970
|
-
import { Button as
|
|
1992
|
+
import { Button as Button11, FileCreateIcon as FileCreateIcon4, cn as cn9 } from "@tutti-os/ui-system";
|
|
1971
1993
|
|
|
1972
1994
|
// src/ui/internal/shell/IssueManagerPanels.tsx
|
|
1973
1995
|
import { useState as useState5 } from "react";
|
|
1974
1996
|
import {
|
|
1975
1997
|
Badge as Badge2,
|
|
1976
|
-
Button as
|
|
1998
|
+
Button as Button5,
|
|
1977
1999
|
ConfirmationDialog,
|
|
1978
2000
|
ScrollArea as ScrollArea2
|
|
1979
2001
|
} from "@tutti-os/ui-system";
|
|
@@ -2001,9 +2023,11 @@ function issueManagerStatusBadgeVariant(status) {
|
|
|
2001
2023
|
// src/ui/internal/issue/IssueManagerIssueSections.tsx
|
|
2002
2024
|
import {
|
|
2003
2025
|
AgentSessionsIcon,
|
|
2026
|
+
ArrowRightIcon,
|
|
2004
2027
|
Badge,
|
|
2005
2028
|
Button as Button2,
|
|
2006
2029
|
FileCreateIcon as FileCreateIcon2,
|
|
2030
|
+
FileIcon,
|
|
2007
2031
|
ScrollArea,
|
|
2008
2032
|
cn
|
|
2009
2033
|
} from "@tutti-os/ui-system";
|
|
@@ -2229,7 +2253,9 @@ function IssueManagerOutputSection({
|
|
|
2229
2253
|
outputs.length === 0 ? /* @__PURE__ */ jsx3("p", { className: "text-[13px] font-normal leading-6 text-[var(--text-secondary)]", children: copy.t("messages.noExecutionOutputs") }) : /* @__PURE__ */ jsx3("div", { className: "overflow-hidden rounded-[12px] border border-[var(--line-2)] bg-transparent", children: outputs.map((output) => /* @__PURE__ */ jsxs3(
|
|
2230
2254
|
"button",
|
|
2231
2255
|
{
|
|
2232
|
-
|
|
2256
|
+
"aria-label": copy.t("actions.openReference"),
|
|
2257
|
+
className: "flex w-full items-center justify-between gap-4 border-b border-[var(--line-2)] px-4 py-3 text-left transition-colors last:border-b-0 hover:bg-transparency-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset",
|
|
2258
|
+
title: copy.t("actions.openReference"),
|
|
2233
2259
|
type: "button",
|
|
2234
2260
|
onClick: () => {
|
|
2235
2261
|
void onOpen({
|
|
@@ -2239,11 +2265,27 @@ function IssueManagerOutputSection({
|
|
|
2239
2265
|
});
|
|
2240
2266
|
},
|
|
2241
2267
|
children: [
|
|
2242
|
-
/* @__PURE__ */ jsxs3("span", { className: "min-w-0 flex-1", children: [
|
|
2243
|
-
/* @__PURE__ */ jsx3(
|
|
2244
|
-
|
|
2268
|
+
/* @__PURE__ */ jsxs3("span", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
|
|
2269
|
+
/* @__PURE__ */ jsx3(
|
|
2270
|
+
"span",
|
|
2271
|
+
{
|
|
2272
|
+
"aria-hidden": "true",
|
|
2273
|
+
className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-[var(--line-2)] bg-transparency-actived text-primary",
|
|
2274
|
+
children: /* @__PURE__ */ jsx3(FileIcon, { size: 16 })
|
|
2275
|
+
}
|
|
2276
|
+
),
|
|
2277
|
+
/* @__PURE__ */ jsxs3("span", { className: "min-w-0 flex-1", children: [
|
|
2278
|
+
/* @__PURE__ */ jsx3("span", { className: "block truncate text-[13px] font-semibold text-[var(--text-primary)]", children: output.displayName }),
|
|
2279
|
+
/* @__PURE__ */ jsx3("span", { className: "mt-1 block truncate text-[11px] font-normal text-[var(--text-secondary)]", children: output.path })
|
|
2280
|
+
] })
|
|
2245
2281
|
] }),
|
|
2246
|
-
/* @__PURE__ */
|
|
2282
|
+
/* @__PURE__ */ jsxs3("span", { className: "flex shrink-0 items-center gap-2", children: [
|
|
2283
|
+
/* @__PURE__ */ jsx3("span", { className: "text-[11px] font-normal text-[var(--text-secondary)]", children: formatIssueManagerTimestamp(output.createdAtUnix) || "" }),
|
|
2284
|
+
/* @__PURE__ */ jsxs3("span", { className: "inline-flex h-7 items-center gap-1 rounded-md border border-primary/20 bg-transparency-actived px-2 text-[11px] font-semibold text-primary", children: [
|
|
2285
|
+
copy.t("actions.openReference"),
|
|
2286
|
+
/* @__PURE__ */ jsx3(ArrowRightIcon, { size: 13 })
|
|
2287
|
+
] })
|
|
2288
|
+
] })
|
|
2247
2289
|
]
|
|
2248
2290
|
},
|
|
2249
2291
|
output.outputId
|
|
@@ -2295,6 +2337,33 @@ function IssueManagerSubtaskSection({
|
|
|
2295
2337
|
] });
|
|
2296
2338
|
}
|
|
2297
2339
|
|
|
2340
|
+
// src/ui/internal/issue/IssueManagerIssueAcceptanceState.ts
|
|
2341
|
+
function resolveIssueManagerIssueAcceptanceTaskId(input) {
|
|
2342
|
+
if (input.selectedIssue?.status !== "pending_acceptance" || input.selectedTaskId || input.latestRun?.status !== "completed") {
|
|
2343
|
+
return null;
|
|
2344
|
+
}
|
|
2345
|
+
const taskId = input.latestRun.taskId?.trim() ?? "";
|
|
2346
|
+
if (!taskId) {
|
|
2347
|
+
return null;
|
|
2348
|
+
}
|
|
2349
|
+
const visibleTask = input.tasks.find((task) => task.taskId === taskId);
|
|
2350
|
+
const issueTitle = input.selectedIssue.title.trim();
|
|
2351
|
+
const taskTitle = visibleTask?.title.trim() ?? "";
|
|
2352
|
+
if (visibleTask && taskTitle !== "" && taskTitle !== issueTitle) {
|
|
2353
|
+
return null;
|
|
2354
|
+
}
|
|
2355
|
+
return taskId;
|
|
2356
|
+
}
|
|
2357
|
+
function resolveIssueManagerVisibleSubtasks(input) {
|
|
2358
|
+
const hiddenTaskId = input.hiddenAcceptanceTaskId?.trim() ?? "";
|
|
2359
|
+
if (!hiddenTaskId) {
|
|
2360
|
+
return [...input.tasks];
|
|
2361
|
+
}
|
|
2362
|
+
return input.tasks.filter((task) => {
|
|
2363
|
+
return task.taskId !== hiddenTaskId;
|
|
2364
|
+
});
|
|
2365
|
+
}
|
|
2366
|
+
|
|
2298
2367
|
// src/ui/internal/content/IssueManagerDescriptionSection.tsx
|
|
2299
2368
|
import { useEffect as useEffect4, useRef, useState as useState3 } from "react";
|
|
2300
2369
|
import { RichTextReadonlyContent } from "@tutti-os/ui-rich-text/editor";
|
|
@@ -2488,11 +2557,57 @@ function IssueManagerRichTextTextarea({
|
|
|
2488
2557
|
);
|
|
2489
2558
|
}
|
|
2490
2559
|
|
|
2560
|
+
// src/ui/internal/task/IssueManagerTaskAcceptanceCard.tsx
|
|
2561
|
+
import { Button as Button4 } from "@tutti-os/ui-system";
|
|
2562
|
+
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
2563
|
+
function IssueManagerTaskAcceptanceCard({
|
|
2564
|
+
controller,
|
|
2565
|
+
taskId
|
|
2566
|
+
}) {
|
|
2567
|
+
const copy = controller.copy;
|
|
2568
|
+
const updateStatus = (status) => {
|
|
2569
|
+
if (taskId) {
|
|
2570
|
+
void controller.setTaskStatus(taskId, status);
|
|
2571
|
+
return;
|
|
2572
|
+
}
|
|
2573
|
+
void controller.setSelectedTaskStatus(status);
|
|
2574
|
+
};
|
|
2575
|
+
return /* @__PURE__ */ jsxs6("div", { className: "grid gap-2 rounded-md bg-[var(--transparency-block)] px-3 py-2", children: [
|
|
2576
|
+
/* @__PURE__ */ jsxs6("div", { className: "min-w-0 text-[11px] font-normal leading-[1.45] text-[var(--text-secondary)] [overflow-wrap:anywhere]", children: [
|
|
2577
|
+
/* @__PURE__ */ jsx6("span", { className: "font-semibold text-[var(--text-primary)]", children: copy.t("labels.taskAcceptance") }),
|
|
2578
|
+
/* @__PURE__ */ jsx6("span", { className: "mx-1 text-[var(--text-tertiary)]", children: "\xB7" }),
|
|
2579
|
+
/* @__PURE__ */ jsx6("span", { children: copy.t("messages.taskAcceptanceHint") })
|
|
2580
|
+
] }),
|
|
2581
|
+
/* @__PURE__ */ jsxs6("div", { className: "flex items-center justify-end gap-2", children: [
|
|
2582
|
+
/* @__PURE__ */ jsx6(
|
|
2583
|
+
Button4,
|
|
2584
|
+
{
|
|
2585
|
+
className: "h-7 px-2 text-[11px] text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
|
|
2586
|
+
type: "button",
|
|
2587
|
+
variant: "ghost",
|
|
2588
|
+
onClick: () => updateStatus("not_started"),
|
|
2589
|
+
children: copy.t("actions.rejectTask")
|
|
2590
|
+
}
|
|
2591
|
+
),
|
|
2592
|
+
/* @__PURE__ */ jsx6(
|
|
2593
|
+
Button4,
|
|
2594
|
+
{
|
|
2595
|
+
className: "h-7 px-2.5 text-[11px]",
|
|
2596
|
+
type: "button",
|
|
2597
|
+
variant: "secondary",
|
|
2598
|
+
onClick: () => updateStatus("completed"),
|
|
2599
|
+
children: copy.t("actions.acceptTask")
|
|
2600
|
+
}
|
|
2601
|
+
)
|
|
2602
|
+
] })
|
|
2603
|
+
] });
|
|
2604
|
+
}
|
|
2605
|
+
|
|
2491
2606
|
// src/ui/internal/shell/IssueManagerDraftTitleInput.tsx
|
|
2492
2607
|
import { useComposedInputValue } from "@tutti-os/ui-react-hooks";
|
|
2493
2608
|
import { useLayoutEffect, useRef as useRef3 } from "react";
|
|
2494
2609
|
import { Input } from "@tutti-os/ui-system";
|
|
2495
|
-
import { jsx as
|
|
2610
|
+
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
2496
2611
|
function IssueManagerDraftTitleInput({
|
|
2497
2612
|
onChange,
|
|
2498
2613
|
placeholder,
|
|
@@ -2527,7 +2642,7 @@ function IssueManagerDraftTitleInput({
|
|
|
2527
2642
|
start
|
|
2528
2643
|
};
|
|
2529
2644
|
};
|
|
2530
|
-
return /* @__PURE__ */
|
|
2645
|
+
return /* @__PURE__ */ jsx7(
|
|
2531
2646
|
Input,
|
|
2532
2647
|
{
|
|
2533
2648
|
ref: inputRef,
|
|
@@ -2556,7 +2671,7 @@ var issueManagerEditorRiseInDelay2ClassName = "motion-safe:[animation-delay:110m
|
|
|
2556
2671
|
var issueManagerEditorFooterFadeInClassName = "motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-safe:[animation-delay:180ms] motion-safe:[animation-fill-mode:both] motion-reduce:animate-none";
|
|
2557
2672
|
|
|
2558
2673
|
// src/ui/internal/shell/IssueManagerPanels.tsx
|
|
2559
|
-
import { jsx as
|
|
2674
|
+
import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
2560
2675
|
function IssueManagerIssuePane({
|
|
2561
2676
|
controller,
|
|
2562
2677
|
renderLatestRunStatus,
|
|
@@ -2573,65 +2688,82 @@ function IssueManagerIssuePane({
|
|
|
2573
2688
|
const selectedTask = selectedTaskId ? (controller.taskDetail.value?.task?.taskId === selectedTaskId ? controller.taskDetail.value.task : tasks.find((task) => task.taskId === selectedTaskId)) ?? null : null;
|
|
2574
2689
|
const latestRun = selectedTask ? controller.taskDetail.value?.latestRun ?? controller.taskDetail.value?.recentRuns[0] ?? null : controller.issueDetail.value?.latestRun ?? controller.issueDetail.value?.recentRuns[0] ?? null;
|
|
2575
2690
|
const latestOutputs = selectedTask ? controller.taskDetail.value?.latestOutputs ?? [] : controller.issueDetail.value?.latestOutputs ?? [];
|
|
2691
|
+
const issueAcceptanceTaskId = resolveIssueManagerIssueAcceptanceTaskId({
|
|
2692
|
+
latestRun,
|
|
2693
|
+
selectedIssue,
|
|
2694
|
+
selectedTaskId,
|
|
2695
|
+
tasks
|
|
2696
|
+
});
|
|
2697
|
+
const visibleTasks = resolveIssueManagerVisibleSubtasks({
|
|
2698
|
+
hiddenAcceptanceTaskId: issueAcceptanceTaskId,
|
|
2699
|
+
tasks
|
|
2700
|
+
});
|
|
2576
2701
|
const [deleteDialogOpen, setDeleteDialogOpen] = useState5(false);
|
|
2577
2702
|
const [deleteBusy, setDeleteBusy] = useState5(false);
|
|
2578
2703
|
if (isCreatingIssue || isEditingIssue) {
|
|
2579
|
-
return /* @__PURE__ */
|
|
2580
|
-
/* @__PURE__ */
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
{
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
{
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2704
|
+
return /* @__PURE__ */ jsxs7("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
|
|
2705
|
+
/* @__PURE__ */ jsx8(
|
|
2706
|
+
ScrollArea2,
|
|
2707
|
+
{
|
|
2708
|
+
scrollbarMode: "native",
|
|
2709
|
+
className: "min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain",
|
|
2710
|
+
children: /* @__PURE__ */ jsx8("div", { className: "flex min-h-full flex-col gap-[14px] px-7 py-8", children: /* @__PURE__ */ jsxs7("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
|
|
2711
|
+
/* @__PURE__ */ jsx8(
|
|
2712
|
+
"div",
|
|
2713
|
+
{
|
|
2714
|
+
className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
|
|
2715
|
+
children: /* @__PURE__ */ jsx8("h2", { className: "m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: isCreatingIssue ? copy.t("actions.createIssue") : copy.t("actions.editIssue") })
|
|
2716
|
+
}
|
|
2717
|
+
),
|
|
2718
|
+
/* @__PURE__ */ jsxs7("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
|
|
2719
|
+
/* @__PURE__ */ jsxs7(
|
|
2720
|
+
"label",
|
|
2721
|
+
{
|
|
2722
|
+
className: `flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
|
|
2723
|
+
children: [
|
|
2724
|
+
/* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.title") }),
|
|
2725
|
+
/* @__PURE__ */ jsx8(
|
|
2726
|
+
IssueManagerDraftTitleInput,
|
|
2727
|
+
{
|
|
2728
|
+
placeholder: copy.t("composer.issueTitlePlaceholder"),
|
|
2729
|
+
value: controller.issueDraft.title,
|
|
2730
|
+
onChange: controller.setIssueTitle
|
|
2731
|
+
}
|
|
2732
|
+
)
|
|
2733
|
+
]
|
|
2734
|
+
}
|
|
2735
|
+
),
|
|
2736
|
+
/* @__PURE__ */ jsxs7(
|
|
2737
|
+
"div",
|
|
2738
|
+
{
|
|
2739
|
+
className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
|
|
2740
|
+
children: [
|
|
2741
|
+
/* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.content") }),
|
|
2742
|
+
/* @__PURE__ */ jsx8(
|
|
2743
|
+
IssueManagerRichTextTextarea,
|
|
2744
|
+
{
|
|
2745
|
+
controller,
|
|
2746
|
+
surface: "issue",
|
|
2747
|
+
textareaClassName: "min-h-[180px] resize-none",
|
|
2748
|
+
placeholder: copy.t("composer.issueContentPlaceholder"),
|
|
2749
|
+
value: controller.issueDraft.content,
|
|
2750
|
+
onChange: controller.setIssueContent
|
|
2751
|
+
}
|
|
2752
|
+
)
|
|
2753
|
+
]
|
|
2754
|
+
}
|
|
2755
|
+
)
|
|
2756
|
+
] })
|
|
2757
|
+
] }) })
|
|
2758
|
+
}
|
|
2759
|
+
),
|
|
2760
|
+
/* @__PURE__ */ jsx8(
|
|
2629
2761
|
"div",
|
|
2630
2762
|
{
|
|
2631
2763
|
className: `shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
|
|
2632
|
-
children: /* @__PURE__ */
|
|
2633
|
-
/* @__PURE__ */
|
|
2634
|
-
|
|
2764
|
+
children: /* @__PURE__ */ jsxs7("div", { className: "flex items-center justify-end gap-3", children: [
|
|
2765
|
+
/* @__PURE__ */ jsx8(
|
|
2766
|
+
Button5,
|
|
2635
2767
|
{
|
|
2636
2768
|
size: "dialog",
|
|
2637
2769
|
type: "button",
|
|
@@ -2640,8 +2772,8 @@ function IssueManagerIssuePane({
|
|
|
2640
2772
|
children: copy.t("actions.cancel")
|
|
2641
2773
|
}
|
|
2642
2774
|
),
|
|
2643
|
-
/* @__PURE__ */
|
|
2644
|
-
|
|
2775
|
+
/* @__PURE__ */ jsx8(
|
|
2776
|
+
Button5,
|
|
2645
2777
|
{
|
|
2646
2778
|
disabled: isIssueTitleMissing,
|
|
2647
2779
|
size: "dialog",
|
|
@@ -2656,139 +2788,153 @@ function IssueManagerIssuePane({
|
|
|
2656
2788
|
] });
|
|
2657
2789
|
}
|
|
2658
2790
|
if (!selectedIssue) {
|
|
2659
|
-
return /* @__PURE__ */
|
|
2791
|
+
return /* @__PURE__ */ jsx8("div", { className: "h-full min-h-0" });
|
|
2660
2792
|
}
|
|
2661
|
-
return /* @__PURE__ */
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2793
|
+
return /* @__PURE__ */ jsx8("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: /* @__PURE__ */ jsx8(
|
|
2794
|
+
ScrollArea2,
|
|
2795
|
+
{
|
|
2796
|
+
scrollbarMode: "native",
|
|
2797
|
+
className: "min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain",
|
|
2798
|
+
children: /* @__PURE__ */ jsx8("div", { className: "px-8 py-7", children: controller.issueDetail.isLoading && controller.issueDetail.value === null ? /* @__PURE__ */ jsx8(IssueManagerPaneLoadingState, {}) : /* @__PURE__ */ jsxs7("div", { className: "flex w-full min-w-0 flex-col gap-9", children: [
|
|
2799
|
+
/* @__PURE__ */ jsxs7("header", { className: "grid gap-3", children: [
|
|
2800
|
+
/* @__PURE__ */ jsxs7("div", { className: "flex items-center justify-between gap-6", children: [
|
|
2801
|
+
/* @__PURE__ */ jsx8(IssueManagerTitleTooltip, { title: selectedIssue.title, children: /* @__PURE__ */ jsx8("h2", { className: "line-clamp-2 min-w-0 flex-1 whitespace-normal text-[15px] font-semibold leading-6 text-[var(--text-primary)] [overflow-wrap:anywhere]", children: selectedIssue.title }) }),
|
|
2802
|
+
/* @__PURE__ */ jsxs7("div", { className: "flex shrink-0 items-center gap-2", children: [
|
|
2803
|
+
/* @__PURE__ */ jsx8(
|
|
2804
|
+
Button5,
|
|
2805
|
+
{
|
|
2806
|
+
type: "button",
|
|
2807
|
+
variant: "ghost",
|
|
2808
|
+
onClick: () => controller.setIssueEditorMode("edit"),
|
|
2809
|
+
children: copy.t("actions.edit")
|
|
2810
|
+
}
|
|
2811
|
+
),
|
|
2812
|
+
/* @__PURE__ */ jsx8(
|
|
2813
|
+
Button5,
|
|
2814
|
+
{
|
|
2815
|
+
className: "text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
|
|
2816
|
+
type: "button",
|
|
2817
|
+
variant: "ghost",
|
|
2818
|
+
onClick: () => setDeleteDialogOpen(true),
|
|
2819
|
+
children: copy.t("actions.delete")
|
|
2820
|
+
}
|
|
2821
|
+
)
|
|
2822
|
+
] })
|
|
2823
|
+
] }),
|
|
2824
|
+
/* @__PURE__ */ jsxs7("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-2 text-[11px] font-normal leading-[1.3] text-[var(--text-secondary)]", children: [
|
|
2825
|
+
/* @__PURE__ */ jsx8(
|
|
2826
|
+
Badge2,
|
|
2827
|
+
{
|
|
2828
|
+
variant: issueManagerStatusBadgeVariant(
|
|
2829
|
+
selectedIssue.status
|
|
2830
|
+
),
|
|
2831
|
+
children: resolveIssueManagerStatusLabel(copy, selectedIssue.status)
|
|
2832
|
+
}
|
|
2833
|
+
),
|
|
2834
|
+
/* @__PURE__ */ jsx8(
|
|
2835
|
+
"span",
|
|
2836
|
+
{
|
|
2837
|
+
"aria-hidden": "true",
|
|
2838
|
+
className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
|
|
2839
|
+
}
|
|
2840
|
+
),
|
|
2841
|
+
/* @__PURE__ */ jsxs7("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
|
|
2842
|
+
copy.t("labels.creator"),
|
|
2843
|
+
" ",
|
|
2844
|
+
resolveIssueManagerCreatorLabel(selectedIssue)
|
|
2845
|
+
] }),
|
|
2846
|
+
/* @__PURE__ */ jsx8(
|
|
2847
|
+
"span",
|
|
2848
|
+
{
|
|
2849
|
+
"aria-hidden": "true",
|
|
2850
|
+
className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
|
|
2851
|
+
}
|
|
2852
|
+
),
|
|
2853
|
+
/* @__PURE__ */ jsxs7("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
|
|
2854
|
+
copy.t("labels.createdAt"),
|
|
2855
|
+
" ",
|
|
2856
|
+
formatIssueManagerTimestamp(selectedIssue.createdAtUnix) || "-"
|
|
2857
|
+
] })
|
|
2858
|
+
] }),
|
|
2859
|
+
issueAcceptanceTaskId ? /* @__PURE__ */ jsx8(
|
|
2860
|
+
IssueManagerTaskAcceptanceCard,
|
|
2677
2861
|
{
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
variant: "ghost",
|
|
2681
|
-
onClick: () => setDeleteDialogOpen(true),
|
|
2682
|
-
children: copy.t("actions.delete")
|
|
2862
|
+
controller,
|
|
2863
|
+
taskId: issueAcceptanceTaskId
|
|
2683
2864
|
}
|
|
2684
|
-
)
|
|
2685
|
-
] })
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
/* @__PURE__ */ jsx7(
|
|
2689
|
-
Badge2,
|
|
2865
|
+
) : null
|
|
2866
|
+
] }),
|
|
2867
|
+
/* @__PURE__ */ jsx8(
|
|
2868
|
+
ConfirmationDialog,
|
|
2690
2869
|
{
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
),
|
|
2694
|
-
|
|
2870
|
+
cancelLabel: copy.t("actions.cancel"),
|
|
2871
|
+
confirmBusy: deleteBusy,
|
|
2872
|
+
confirmLabel: copy.t("actions.delete"),
|
|
2873
|
+
description: selectedIssue.title,
|
|
2874
|
+
open: deleteDialogOpen,
|
|
2875
|
+
title: copy.t("confirmations.deleteIssue"),
|
|
2876
|
+
tone: "destructive",
|
|
2877
|
+
onConfirm: () => {
|
|
2878
|
+
setDeleteBusy(true);
|
|
2879
|
+
void controller.deleteIssue({ skipConfirmation: true }).finally(() => {
|
|
2880
|
+
setDeleteBusy(false);
|
|
2881
|
+
setDeleteDialogOpen(false);
|
|
2882
|
+
});
|
|
2883
|
+
},
|
|
2884
|
+
onOpenChange: setDeleteDialogOpen
|
|
2695
2885
|
}
|
|
2696
2886
|
),
|
|
2697
|
-
/* @__PURE__ */
|
|
2698
|
-
|
|
2887
|
+
/* @__PURE__ */ jsx8(
|
|
2888
|
+
IssueManagerDescriptionSection,
|
|
2699
2889
|
{
|
|
2700
|
-
|
|
2701
|
-
|
|
2890
|
+
content: issueContent,
|
|
2891
|
+
emptyLabel: copy.t("messages.issueContentEmpty"),
|
|
2892
|
+
label: copy.t("labels.description"),
|
|
2893
|
+
onOpen: controller.openReference,
|
|
2894
|
+
variant: "plain"
|
|
2702
2895
|
}
|
|
2703
2896
|
),
|
|
2704
|
-
/* @__PURE__ */
|
|
2705
|
-
|
|
2706
|
-
" ",
|
|
2707
|
-
resolveIssueManagerCreatorLabel(selectedIssue)
|
|
2708
|
-
] }),
|
|
2709
|
-
/* @__PURE__ */ jsx7(
|
|
2710
|
-
"span",
|
|
2897
|
+
/* @__PURE__ */ jsx8(
|
|
2898
|
+
IssueManagerLatestRunStatusSection,
|
|
2711
2899
|
{
|
|
2712
|
-
|
|
2713
|
-
|
|
2900
|
+
copy,
|
|
2901
|
+
latestRun,
|
|
2902
|
+
onOpenAgentSession: controller.canOpenAgentSessions ? controller.openAgentSession : void 0,
|
|
2903
|
+
renderLatestRunStatus,
|
|
2904
|
+
title: selectedTask?.title ?? selectedIssue.title
|
|
2714
2905
|
}
|
|
2715
2906
|
),
|
|
2716
|
-
/* @__PURE__ */
|
|
2717
|
-
|
|
2718
|
-
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
2734
|
-
|
|
2735
|
-
|
|
2736
|
-
|
|
2737
|
-
setDeleteDialogOpen(false);
|
|
2738
|
-
});
|
|
2739
|
-
},
|
|
2740
|
-
onOpenChange: setDeleteDialogOpen
|
|
2741
|
-
}
|
|
2742
|
-
),
|
|
2743
|
-
/* @__PURE__ */ jsx7(
|
|
2744
|
-
IssueManagerDescriptionSection,
|
|
2745
|
-
{
|
|
2746
|
-
content: issueContent,
|
|
2747
|
-
emptyLabel: copy.t("messages.issueContentEmpty"),
|
|
2748
|
-
label: copy.t("labels.description"),
|
|
2749
|
-
onOpen: controller.openReference,
|
|
2750
|
-
variant: "plain"
|
|
2751
|
-
}
|
|
2752
|
-
),
|
|
2753
|
-
/* @__PURE__ */ jsx7(
|
|
2754
|
-
IssueManagerLatestRunStatusSection,
|
|
2755
|
-
{
|
|
2756
|
-
copy,
|
|
2757
|
-
latestRun,
|
|
2758
|
-
onOpenAgentSession: controller.canOpenAgentSessions ? controller.openAgentSession : void 0,
|
|
2759
|
-
renderLatestRunStatus,
|
|
2760
|
-
title: selectedTask?.title ?? selectedIssue.title
|
|
2761
|
-
}
|
|
2762
|
-
),
|
|
2763
|
-
/* @__PURE__ */ jsx7(
|
|
2764
|
-
IssueManagerOutputSection,
|
|
2765
|
-
{
|
|
2766
|
-
copy,
|
|
2767
|
-
outputs: latestOutputs,
|
|
2768
|
-
onOpen: controller.openReference
|
|
2769
|
-
}
|
|
2770
|
-
),
|
|
2771
|
-
/* @__PURE__ */ jsx7(
|
|
2772
|
-
IssueManagerSubtaskSection,
|
|
2773
|
-
{
|
|
2774
|
-
copy,
|
|
2775
|
-
onCreate: controller.createTaskDraft,
|
|
2776
|
-
onSelectTask: controller.selectTask,
|
|
2777
|
-
selectedTaskId: selectedTask?.taskId ?? null,
|
|
2778
|
-
tasks
|
|
2779
|
-
}
|
|
2780
|
-
)
|
|
2781
|
-
] }) }) }) });
|
|
2907
|
+
/* @__PURE__ */ jsx8(
|
|
2908
|
+
IssueManagerOutputSection,
|
|
2909
|
+
{
|
|
2910
|
+
copy,
|
|
2911
|
+
outputs: latestOutputs,
|
|
2912
|
+
onOpen: controller.openReference
|
|
2913
|
+
}
|
|
2914
|
+
),
|
|
2915
|
+
/* @__PURE__ */ jsx8(
|
|
2916
|
+
IssueManagerSubtaskSection,
|
|
2917
|
+
{
|
|
2918
|
+
copy,
|
|
2919
|
+
onCreate: controller.createTaskDraft,
|
|
2920
|
+
onSelectTask: controller.selectTask,
|
|
2921
|
+
selectedTaskId: selectedTask?.taskId ?? null,
|
|
2922
|
+
tasks: visibleTasks
|
|
2923
|
+
}
|
|
2924
|
+
)
|
|
2925
|
+
] }) })
|
|
2926
|
+
}
|
|
2927
|
+
) });
|
|
2782
2928
|
}
|
|
2783
2929
|
|
|
2784
2930
|
// src/ui/internal/shell/IssueManagerBottomBar.tsx
|
|
2785
|
-
import { Button as
|
|
2931
|
+
import { Button as Button7, cn as cn5 } from "@tutti-os/ui-system";
|
|
2786
2932
|
|
|
2787
2933
|
// src/ui/internal/task/IssueManagerRunSections.tsx
|
|
2788
2934
|
import {
|
|
2789
2935
|
Badge as Badge3,
|
|
2790
2936
|
AgentSessionsIcon as AgentSessionsIcon2,
|
|
2791
|
-
Button as
|
|
2937
|
+
Button as Button6,
|
|
2792
2938
|
CheckIcon,
|
|
2793
2939
|
ChevronDownIcon,
|
|
2794
2940
|
DropdownMenu,
|
|
@@ -2799,7 +2945,7 @@ import {
|
|
|
2799
2945
|
cn as cn4
|
|
2800
2946
|
} from "@tutti-os/ui-system";
|
|
2801
2947
|
import { WorkspaceUserProjectSelect } from "@tutti-os/workspace-user-project/ui";
|
|
2802
|
-
import { Fragment, jsx as
|
|
2948
|
+
import { Fragment, jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
2803
2949
|
var providerMenuItemClassName = "min-h-8 overflow-hidden rounded-md py-1.5 pr-7 pl-2.5 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]";
|
|
2804
2950
|
var providerMenuItemCheckClassName = "pointer-events-none absolute right-2 top-1/2 shrink-0 -translate-y-1/2";
|
|
2805
2951
|
var providerActionTriggerClassName = "font-[var(--font-weight-emphasis-cjk)]";
|
|
@@ -2809,12 +2955,12 @@ function IssueManagerRunActionTrigger({
|
|
|
2809
2955
|
triggerClassName,
|
|
2810
2956
|
triggerVariant = "default"
|
|
2811
2957
|
}) {
|
|
2812
|
-
return /* @__PURE__ */
|
|
2958
|
+
return /* @__PURE__ */ jsx9(
|
|
2813
2959
|
IssueManagerProviderActionMenu,
|
|
2814
2960
|
{
|
|
2815
2961
|
controller,
|
|
2816
2962
|
disabled,
|
|
2817
|
-
icon: /* @__PURE__ */
|
|
2963
|
+
icon: /* @__PURE__ */ jsx9(AgentSessionsIcon2, { size: 16 }),
|
|
2818
2964
|
label: controller.copy.t("actions.askAgentToRun"),
|
|
2819
2965
|
triggerClassName,
|
|
2820
2966
|
triggerVariant,
|
|
@@ -2828,12 +2974,12 @@ function IssueManagerBreakdownActionTrigger({
|
|
|
2828
2974
|
triggerClassName,
|
|
2829
2975
|
triggerVariant = "default"
|
|
2830
2976
|
}) {
|
|
2831
|
-
return /* @__PURE__ */
|
|
2977
|
+
return /* @__PURE__ */ jsx9(
|
|
2832
2978
|
IssueManagerProviderActionMenu,
|
|
2833
2979
|
{
|
|
2834
2980
|
controller,
|
|
2835
2981
|
disabled,
|
|
2836
|
-
icon: /* @__PURE__ */
|
|
2982
|
+
icon: /* @__PURE__ */ jsx9(IssueIcon, { size: 16 }),
|
|
2837
2983
|
label: controller.copy.t("actions.askAgentToBreakdown"),
|
|
2838
2984
|
triggerClassName,
|
|
2839
2985
|
triggerVariant,
|
|
@@ -2854,9 +3000,9 @@ function IssueManagerProviderActionMenu({
|
|
|
2854
3000
|
}) {
|
|
2855
3001
|
const providerOptions = controller.providerOptions;
|
|
2856
3002
|
const selectedProvider = controller.nodeState.selectedAgentProvider.trim();
|
|
2857
|
-
return /* @__PURE__ */
|
|
2858
|
-
/* @__PURE__ */
|
|
2859
|
-
|
|
3003
|
+
return /* @__PURE__ */ jsxs8(DropdownMenu, { children: [
|
|
3004
|
+
/* @__PURE__ */ jsx9(DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ jsxs8(
|
|
3005
|
+
Button6,
|
|
2860
3006
|
{
|
|
2861
3007
|
className: cn4(
|
|
2862
3008
|
"min-w-0",
|
|
@@ -2870,8 +3016,8 @@ function IssueManagerProviderActionMenu({
|
|
|
2870
3016
|
variant: triggerButtonVariant,
|
|
2871
3017
|
children: [
|
|
2872
3018
|
icon,
|
|
2873
|
-
/* @__PURE__ */
|
|
2874
|
-
/* @__PURE__ */
|
|
3019
|
+
/* @__PURE__ */ jsx9("span", { className: "truncate", children: label }),
|
|
3020
|
+
/* @__PURE__ */ jsx9(
|
|
2875
3021
|
ChevronDownIcon,
|
|
2876
3022
|
{
|
|
2877
3023
|
className: "shrink-0 transition-transform duration-200",
|
|
@@ -2882,13 +3028,13 @@ function IssueManagerProviderActionMenu({
|
|
|
2882
3028
|
]
|
|
2883
3029
|
}
|
|
2884
3030
|
) }),
|
|
2885
|
-
/* @__PURE__ */
|
|
3031
|
+
/* @__PURE__ */ jsx9(
|
|
2886
3032
|
DropdownMenuContent,
|
|
2887
3033
|
{
|
|
2888
3034
|
align: "end",
|
|
2889
3035
|
className: "w-[220px] min-w-[220px]",
|
|
2890
3036
|
style: { zIndex: "var(--z-panel-popover)" },
|
|
2891
|
-
children: providerOptions.length === 0 ? /* @__PURE__ */
|
|
3037
|
+
children: providerOptions.length === 0 ? /* @__PURE__ */ jsx9(DropdownMenuItem, { className: providerMenuItemClassName, disabled: true, children: controller.copy.t("messages.noAgentProviders") }) : providerOptions.map((option) => /* @__PURE__ */ jsx9(
|
|
2892
3038
|
DropdownMenuItem,
|
|
2893
3039
|
{
|
|
2894
3040
|
className: providerMenuItemClassName,
|
|
@@ -2897,16 +3043,16 @@ function IssueManagerProviderActionMenu({
|
|
|
2897
3043
|
onSelect: () => {
|
|
2898
3044
|
void onSelectProvider(option.provider);
|
|
2899
3045
|
},
|
|
2900
|
-
children: /* @__PURE__ */
|
|
2901
|
-
/* @__PURE__ */
|
|
3046
|
+
children: /* @__PURE__ */ jsxs8("span", { className: "flex min-w-0 flex-1 items-center gap-2 pr-1", children: [
|
|
3047
|
+
/* @__PURE__ */ jsx9(
|
|
2902
3048
|
IssueManagerAgentProviderIcon,
|
|
2903
3049
|
{
|
|
2904
|
-
fallbackIcon: /* @__PURE__ */
|
|
3050
|
+
fallbackIcon: /* @__PURE__ */ jsx9(AgentSessionsIcon2, { "aria-hidden": true, size: 15 }),
|
|
2905
3051
|
iconUrl: option.iconUrl
|
|
2906
3052
|
}
|
|
2907
3053
|
),
|
|
2908
|
-
/* @__PURE__ */
|
|
2909
|
-
option.provider === selectedProvider ? /* @__PURE__ */
|
|
3054
|
+
/* @__PURE__ */ jsx9("span", { className: "min-w-0 flex-1 truncate", children: option.label }),
|
|
3055
|
+
option.provider === selectedProvider ? /* @__PURE__ */ jsx9(
|
|
2910
3056
|
CheckIcon,
|
|
2911
3057
|
{
|
|
2912
3058
|
className: providerMenuItemCheckClassName,
|
|
@@ -2927,9 +3073,9 @@ function IssueManagerAgentProviderIcon({
|
|
|
2927
3073
|
}) {
|
|
2928
3074
|
const normalizedIconUrl = iconUrl?.trim();
|
|
2929
3075
|
if (!normalizedIconUrl) {
|
|
2930
|
-
return /* @__PURE__ */
|
|
3076
|
+
return /* @__PURE__ */ jsx9(Fragment, { children: fallbackIcon });
|
|
2931
3077
|
}
|
|
2932
|
-
return /* @__PURE__ */
|
|
3078
|
+
return /* @__PURE__ */ jsx9(
|
|
2933
3079
|
"img",
|
|
2934
3080
|
{
|
|
2935
3081
|
alt: "",
|
|
@@ -2949,7 +3095,7 @@ function IssueManagerExecutionDirectoryTrigger({
|
|
|
2949
3095
|
if (!controller.canSelectExecutionDirectory) {
|
|
2950
3096
|
return null;
|
|
2951
3097
|
}
|
|
2952
|
-
return /* @__PURE__ */
|
|
3098
|
+
return /* @__PURE__ */ jsx9(
|
|
2953
3099
|
WorkspaceUserProjectSelect,
|
|
2954
3100
|
{
|
|
2955
3101
|
classNames: {
|
|
@@ -3007,7 +3153,7 @@ function isIssueManagerRunControlDisabled(input) {
|
|
|
3007
3153
|
}
|
|
3008
3154
|
|
|
3009
3155
|
// src/ui/internal/shell/IssueManagerBottomBar.tsx
|
|
3010
|
-
import { jsx as
|
|
3156
|
+
import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
3011
3157
|
function IssueManagerBottomBar({
|
|
3012
3158
|
controller,
|
|
3013
3159
|
isNarrowLayout,
|
|
@@ -3022,7 +3168,7 @@ function IssueManagerBottomBar({
|
|
|
3022
3168
|
selectedIssueStatus: selectedIssue.status,
|
|
3023
3169
|
selectedTaskStatus: null
|
|
3024
3170
|
});
|
|
3025
|
-
return /* @__PURE__ */
|
|
3171
|
+
return /* @__PURE__ */ jsx10("div", { className: "border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur", children: /* @__PURE__ */ jsxs9(
|
|
3026
3172
|
"div",
|
|
3027
3173
|
{
|
|
3028
3174
|
className: cn5(
|
|
@@ -3030,7 +3176,7 @@ function IssueManagerBottomBar({
|
|
|
3030
3176
|
isNarrowLayout ? "flex-wrap items-center justify-end" : "items-center justify-end"
|
|
3031
3177
|
),
|
|
3032
3178
|
children: [
|
|
3033
|
-
/* @__PURE__ */
|
|
3179
|
+
/* @__PURE__ */ jsx10(
|
|
3034
3180
|
IssueManagerExecutionDirectoryTrigger,
|
|
3035
3181
|
{
|
|
3036
3182
|
className: "mr-auto min-w-0 max-w-[240px] justify-start overflow-hidden",
|
|
@@ -3038,8 +3184,8 @@ function IssueManagerBottomBar({
|
|
|
3038
3184
|
disabled: runControlsDisabled
|
|
3039
3185
|
}
|
|
3040
3186
|
),
|
|
3041
|
-
/* @__PURE__ */
|
|
3042
|
-
/* @__PURE__ */
|
|
3187
|
+
/* @__PURE__ */ jsxs9("div", { className: "flex shrink-0 flex-nowrap items-center justify-end gap-3", children: [
|
|
3188
|
+
/* @__PURE__ */ jsx10(
|
|
3043
3189
|
IssueManagerBreakdownActionTrigger,
|
|
3044
3190
|
{
|
|
3045
3191
|
controller,
|
|
@@ -3047,7 +3193,7 @@ function IssueManagerBottomBar({
|
|
|
3047
3193
|
triggerVariant: "button"
|
|
3048
3194
|
}
|
|
3049
3195
|
),
|
|
3050
|
-
/* @__PURE__ */
|
|
3196
|
+
/* @__PURE__ */ jsx10(
|
|
3051
3197
|
IssueManagerRunActionTrigger,
|
|
3052
3198
|
{
|
|
3053
3199
|
controller,
|
|
@@ -3055,8 +3201,8 @@ function IssueManagerBottomBar({
|
|
|
3055
3201
|
triggerVariant: "button"
|
|
3056
3202
|
}
|
|
3057
3203
|
),
|
|
3058
|
-
controller.canInviteCollaborators ? /* @__PURE__ */
|
|
3059
|
-
|
|
3204
|
+
controller.canInviteCollaborators ? /* @__PURE__ */ jsx10(
|
|
3205
|
+
Button7,
|
|
3060
3206
|
{
|
|
3061
3207
|
className: "px-4",
|
|
3062
3208
|
disabled: !selectedIssue,
|
|
@@ -3076,12 +3222,12 @@ function IssueManagerBottomBar({
|
|
|
3076
3222
|
|
|
3077
3223
|
// src/ui/internal/shell/IssueManagerFloatingNotice.tsx
|
|
3078
3224
|
import { ToastProvider, ToastRoot, ToastTitle } from "@tutti-os/ui-system";
|
|
3079
|
-
import { jsx as
|
|
3225
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
3080
3226
|
function IssueManagerFloatingNotice({
|
|
3081
3227
|
notice
|
|
3082
3228
|
}) {
|
|
3083
3229
|
const variant = notice.tone === "destructive" ? "destructive" : "default";
|
|
3084
|
-
return /* @__PURE__ */
|
|
3230
|
+
return /* @__PURE__ */ jsx11(ToastProvider, { children: /* @__PURE__ */ jsx11(
|
|
3085
3231
|
ToastRoot,
|
|
3086
3232
|
{
|
|
3087
3233
|
open: true,
|
|
@@ -3090,7 +3236,7 @@ function IssueManagerFloatingNotice({
|
|
|
3090
3236
|
className: "z-30 w-fit max-w-[min(72vw,40rem)] px-4 py-3 shadow-lg",
|
|
3091
3237
|
nodeInsetTopPx: 16,
|
|
3092
3238
|
variant,
|
|
3093
|
-
children: /* @__PURE__ */
|
|
3239
|
+
children: /* @__PURE__ */ jsx11(ToastTitle, { className: "whitespace-normal [overflow-wrap:anywhere]", children: notice.title })
|
|
3094
3240
|
},
|
|
3095
3241
|
notice.id
|
|
3096
3242
|
) });
|
|
@@ -3103,7 +3249,7 @@ import { cn as cn7 } from "@tutti-os/ui-system";
|
|
|
3103
3249
|
import { useComposedInputValue as useComposedInputValue2 } from "@tutti-os/ui-react-hooks";
|
|
3104
3250
|
import {
|
|
3105
3251
|
Badge as Badge4,
|
|
3106
|
-
Button as
|
|
3252
|
+
Button as Button8,
|
|
3107
3253
|
CloseIcon,
|
|
3108
3254
|
FileCreateIcon as FileCreateIcon3,
|
|
3109
3255
|
Input as Input2,
|
|
@@ -3175,7 +3321,7 @@ function mapIssueManagerStatusCounts(counts) {
|
|
|
3175
3321
|
canceled: counts.canceled,
|
|
3176
3322
|
completed: counts.completed,
|
|
3177
3323
|
failed: counts.failed,
|
|
3178
|
-
in_progress:
|
|
3324
|
+
in_progress: counts.inProgress,
|
|
3179
3325
|
not_started: counts.notStarted,
|
|
3180
3326
|
pending_acceptance: counts.pendingAcceptance,
|
|
3181
3327
|
running: counts.running
|
|
@@ -3194,7 +3340,7 @@ function resolveIssueManagerShellContentViewState(input) {
|
|
|
3194
3340
|
}
|
|
3195
3341
|
|
|
3196
3342
|
// src/ui/internal/shell/IssueManagerSidebarSections.tsx
|
|
3197
|
-
import { jsx as
|
|
3343
|
+
import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
3198
3344
|
function IssueManagerSidebarHeader({
|
|
3199
3345
|
copy,
|
|
3200
3346
|
issueSearchQuery,
|
|
@@ -3202,8 +3348,8 @@ function IssueManagerSidebarHeader({
|
|
|
3202
3348
|
onIssueSearchUsage,
|
|
3203
3349
|
onIssueSearchQueryChange
|
|
3204
3350
|
}) {
|
|
3205
|
-
return /* @__PURE__ */
|
|
3206
|
-
/* @__PURE__ */
|
|
3351
|
+
return /* @__PURE__ */ jsx12("div", { className: "px-4 py-4", children: /* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-2.5", children: [
|
|
3352
|
+
/* @__PURE__ */ jsx12(
|
|
3207
3353
|
IssueManagerSearchField,
|
|
3208
3354
|
{
|
|
3209
3355
|
clearLabel: copy.t("actions.clearSearch"),
|
|
@@ -3213,8 +3359,8 @@ function IssueManagerSidebarHeader({
|
|
|
3213
3359
|
onSearchUsage: onIssueSearchUsage
|
|
3214
3360
|
}
|
|
3215
3361
|
),
|
|
3216
|
-
/* @__PURE__ */
|
|
3217
|
-
|
|
3362
|
+
/* @__PURE__ */ jsxs10(
|
|
3363
|
+
Button8,
|
|
3218
3364
|
{
|
|
3219
3365
|
className: "gap-2 px-3",
|
|
3220
3366
|
size: "dialog",
|
|
@@ -3222,7 +3368,7 @@ function IssueManagerSidebarHeader({
|
|
|
3222
3368
|
variant: "secondary",
|
|
3223
3369
|
onClick: onCreateIssue,
|
|
3224
3370
|
children: [
|
|
3225
|
-
/* @__PURE__ */
|
|
3371
|
+
/* @__PURE__ */ jsx12(FileCreateIcon3, { size: 16 }),
|
|
3226
3372
|
copy.t("actions.createIssue")
|
|
3227
3373
|
]
|
|
3228
3374
|
}
|
|
@@ -3235,7 +3381,7 @@ function IssueManagerSidebarStatusTabs({
|
|
|
3235
3381
|
statusCounts,
|
|
3236
3382
|
onIssueStatusFilterChange
|
|
3237
3383
|
}) {
|
|
3238
|
-
return /* @__PURE__ */
|
|
3384
|
+
return /* @__PURE__ */ jsx12(
|
|
3239
3385
|
UnderlineTabs,
|
|
3240
3386
|
{
|
|
3241
3387
|
ariaLabel: copy.t("labels.status"),
|
|
@@ -3260,18 +3406,19 @@ function IssueManagerSidebarBody({
|
|
|
3260
3406
|
onRetry,
|
|
3261
3407
|
onSelectIssue
|
|
3262
3408
|
}) {
|
|
3263
|
-
return /* @__PURE__ */
|
|
3409
|
+
return /* @__PURE__ */ jsx12(
|
|
3264
3410
|
ScrollArea3,
|
|
3265
3411
|
{
|
|
3412
|
+
scrollbarMode: "native",
|
|
3266
3413
|
className: cn6("min-h-0", isNarrowLayout ? "flex-none" : "h-full flex-1"),
|
|
3267
|
-
children: /* @__PURE__ */
|
|
3414
|
+
children: /* @__PURE__ */ jsx12(
|
|
3268
3415
|
"div",
|
|
3269
3416
|
{
|
|
3270
3417
|
className: cn6(
|
|
3271
3418
|
"flex min-h-full flex-col gap-2.5 px-4 pt-1.5 pb-4",
|
|
3272
3419
|
isNarrowLayout ? "min-h-0" : "h-full"
|
|
3273
3420
|
),
|
|
3274
|
-
children: sidebarViewState.kind === "loading" ? /* @__PURE__ */
|
|
3421
|
+
children: sidebarViewState.kind === "loading" ? /* @__PURE__ */ jsx12(IssueManagerSidebarLoadingState, { isNarrowLayout }) : sidebarViewState.kind === "error" ? /* @__PURE__ */ jsx12(
|
|
3275
3422
|
IssueManagerSidebarErrorState,
|
|
3276
3423
|
{
|
|
3277
3424
|
isNarrowLayout,
|
|
@@ -3279,14 +3426,14 @@ function IssueManagerSidebarBody({
|
|
|
3279
3426
|
title: sidebarViewState.title,
|
|
3280
3427
|
onRetry
|
|
3281
3428
|
}
|
|
3282
|
-
) : sidebarViewState.kind === "empty" ? /* @__PURE__ */
|
|
3429
|
+
) : sidebarViewState.kind === "empty" ? /* @__PURE__ */ jsx12(
|
|
3283
3430
|
IssueManagerSidebarEmptyState,
|
|
3284
3431
|
{
|
|
3285
3432
|
body: sidebarViewState.body,
|
|
3286
3433
|
isNarrowLayout,
|
|
3287
3434
|
title: sidebarViewState.title
|
|
3288
3435
|
}
|
|
3289
|
-
) : /* @__PURE__ */
|
|
3436
|
+
) : /* @__PURE__ */ jsx12(
|
|
3290
3437
|
IssueManagerSidebarIssueList,
|
|
3291
3438
|
{
|
|
3292
3439
|
copy,
|
|
@@ -3310,7 +3457,7 @@ function IssueManagerSidebarStandalonePane({
|
|
|
3310
3457
|
onRetry
|
|
3311
3458
|
}) {
|
|
3312
3459
|
if (kind === "error" && retryLabel) {
|
|
3313
|
-
return /* @__PURE__ */
|
|
3460
|
+
return /* @__PURE__ */ jsx12(
|
|
3314
3461
|
IssueManagerSidebarErrorState,
|
|
3315
3462
|
{
|
|
3316
3463
|
isNarrowLayout,
|
|
@@ -3320,7 +3467,7 @@ function IssueManagerSidebarStandalonePane({
|
|
|
3320
3467
|
}
|
|
3321
3468
|
);
|
|
3322
3469
|
}
|
|
3323
|
-
return /* @__PURE__ */
|
|
3470
|
+
return /* @__PURE__ */ jsx12(
|
|
3324
3471
|
IssueManagerSidebarEmptyState,
|
|
3325
3472
|
{
|
|
3326
3473
|
body: body ?? "",
|
|
@@ -3337,13 +3484,13 @@ function IssueManagerSearchField({
|
|
|
3337
3484
|
value
|
|
3338
3485
|
}) {
|
|
3339
3486
|
const searchInput = useComposedInputValue2({ onCommit: onChange, value });
|
|
3340
|
-
return /* @__PURE__ */
|
|
3487
|
+
return /* @__PURE__ */ jsxs10(
|
|
3341
3488
|
"div",
|
|
3342
3489
|
{
|
|
3343
3490
|
className: "relative min-w-0 flex-1",
|
|
3344
3491
|
"data-has-value": searchInput.value ? "true" : "false",
|
|
3345
3492
|
children: [
|
|
3346
|
-
/* @__PURE__ */
|
|
3493
|
+
/* @__PURE__ */ jsx12(
|
|
3347
3494
|
Input2,
|
|
3348
3495
|
{
|
|
3349
3496
|
"aria-label": placeholder,
|
|
@@ -3364,7 +3511,7 @@ function IssueManagerSearchField({
|
|
|
3364
3511
|
onCompositionStart: searchInput.onCompositionStart
|
|
3365
3512
|
}
|
|
3366
3513
|
),
|
|
3367
|
-
searchInput.value ? /* @__PURE__ */
|
|
3514
|
+
searchInput.value ? /* @__PURE__ */ jsx12(
|
|
3368
3515
|
"button",
|
|
3369
3516
|
{
|
|
3370
3517
|
"aria-label": clearLabel,
|
|
@@ -3372,7 +3519,7 @@ function IssueManagerSearchField({
|
|
|
3372
3519
|
type: "button",
|
|
3373
3520
|
onClick: searchInput.clearValue,
|
|
3374
3521
|
onMouseDown: (event) => event.preventDefault(),
|
|
3375
|
-
children: /* @__PURE__ */
|
|
3522
|
+
children: /* @__PURE__ */ jsx12(CloseIcon, { className: "size-3.5" })
|
|
3376
3523
|
}
|
|
3377
3524
|
) : null
|
|
3378
3525
|
]
|
|
@@ -3386,14 +3533,14 @@ function IssueManagerSidebarIssueList({
|
|
|
3386
3533
|
selectedIssueId,
|
|
3387
3534
|
onSelectIssue
|
|
3388
3535
|
}) {
|
|
3389
|
-
return /* @__PURE__ */
|
|
3536
|
+
return /* @__PURE__ */ jsx12(
|
|
3390
3537
|
"div",
|
|
3391
3538
|
{
|
|
3392
3539
|
className: cn6(
|
|
3393
3540
|
"flex gap-2.5",
|
|
3394
3541
|
isNarrowLayout ? "flex-row flex-nowrap items-start overflow-x-auto overflow-y-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:hidden" : "flex-col"
|
|
3395
3542
|
),
|
|
3396
|
-
children: issues.map((issue) => /* @__PURE__ */
|
|
3543
|
+
children: issues.map((issue) => /* @__PURE__ */ jsx12(
|
|
3397
3544
|
IssueManagerSidebarItem,
|
|
3398
3545
|
{
|
|
3399
3546
|
copy,
|
|
@@ -3414,7 +3561,7 @@ function IssueManagerSidebarItem({
|
|
|
3414
3561
|
onSelect,
|
|
3415
3562
|
selected
|
|
3416
3563
|
}) {
|
|
3417
|
-
return /* @__PURE__ */
|
|
3564
|
+
return /* @__PURE__ */ jsxs10(
|
|
3418
3565
|
"button",
|
|
3419
3566
|
{
|
|
3420
3567
|
className: cn6(
|
|
@@ -3425,7 +3572,7 @@ function IssueManagerSidebarItem({
|
|
|
3425
3572
|
type: "button",
|
|
3426
3573
|
onClick: () => onSelect(issue.issueId),
|
|
3427
3574
|
children: [
|
|
3428
|
-
/* @__PURE__ */
|
|
3575
|
+
/* @__PURE__ */ jsx12(
|
|
3429
3576
|
Badge4,
|
|
3430
3577
|
{
|
|
3431
3578
|
className: "absolute top-3.5 right-3.5",
|
|
@@ -3433,11 +3580,11 @@ function IssueManagerSidebarItem({
|
|
|
3433
3580
|
children: resolveIssueManagerStatusLabel(copy, issue.status)
|
|
3434
3581
|
}
|
|
3435
3582
|
),
|
|
3436
|
-
/* @__PURE__ */
|
|
3437
|
-
/* @__PURE__ */
|
|
3438
|
-
/* @__PURE__ */
|
|
3583
|
+
/* @__PURE__ */ jsxs10("div", { className: "min-w-0 space-y-2", children: [
|
|
3584
|
+
/* @__PURE__ */ jsx12("p", { className: "pr-28 text-[11px] leading-[1.55] text-[var(--text-secondary)]", children: formatIssueManagerDate(issue.updatedAtUnix ?? issue.createdAtUnix) }),
|
|
3585
|
+
/* @__PURE__ */ jsx12("p", { className: "line-clamp-4 text-[13px] font-medium leading-[1.35rem] text-[var(--text-primary)]", children: issue.title })
|
|
3439
3586
|
] }),
|
|
3440
|
-
/* @__PURE__ */
|
|
3587
|
+
/* @__PURE__ */ jsx12("div", { className: "mt-2 text-[11px] leading-[1.55] text-[var(--text-secondary)]", children: copy.t("labels.taskCount", { count: issue.taskCount ?? 0 }) })
|
|
3441
3588
|
]
|
|
3442
3589
|
}
|
|
3443
3590
|
);
|
|
@@ -3445,7 +3592,7 @@ function IssueManagerSidebarItem({
|
|
|
3445
3592
|
function IssueManagerSidebarLoadingState({
|
|
3446
3593
|
isNarrowLayout
|
|
3447
3594
|
}) {
|
|
3448
|
-
return /* @__PURE__ */
|
|
3595
|
+
return /* @__PURE__ */ jsx12(
|
|
3449
3596
|
"div",
|
|
3450
3597
|
{
|
|
3451
3598
|
"aria-hidden": "true",
|
|
@@ -3453,7 +3600,7 @@ function IssueManagerSidebarLoadingState({
|
|
|
3453
3600
|
"gap-2.5",
|
|
3454
3601
|
isNarrowLayout ? "flex flex-row flex-nowrap overflow-x-hidden" : "grid"
|
|
3455
3602
|
),
|
|
3456
|
-
children: Array.from({ length: 4 }, (_, index) => /* @__PURE__ */
|
|
3603
|
+
children: Array.from({ length: 4 }, (_, index) => /* @__PURE__ */ jsxs10(
|
|
3457
3604
|
"div",
|
|
3458
3605
|
{
|
|
3459
3606
|
className: cn6(
|
|
@@ -3461,9 +3608,9 @@ function IssueManagerSidebarLoadingState({
|
|
|
3461
3608
|
isNarrowLayout && "h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)]"
|
|
3462
3609
|
),
|
|
3463
3610
|
children: [
|
|
3464
|
-
/* @__PURE__ */
|
|
3465
|
-
/* @__PURE__ */
|
|
3466
|
-
/* @__PURE__ */
|
|
3611
|
+
/* @__PURE__ */ jsx12("div", { className: "h-3.5 w-20 rounded-full bg-[var(--transparency-block)]" }),
|
|
3612
|
+
/* @__PURE__ */ jsx12("div", { className: "mt-3 h-4 w-4/5 rounded-full bg-[var(--transparency-block)]" }),
|
|
3613
|
+
/* @__PURE__ */ jsx12("div", { className: "mt-4 h-3.5 w-24 rounded-full bg-[var(--transparency-block)]" })
|
|
3467
3614
|
]
|
|
3468
3615
|
},
|
|
3469
3616
|
index
|
|
@@ -3476,14 +3623,14 @@ function IssueManagerSidebarEmptyState({
|
|
|
3476
3623
|
title,
|
|
3477
3624
|
tone = "default"
|
|
3478
3625
|
}) {
|
|
3479
|
-
return /* @__PURE__ */
|
|
3626
|
+
return /* @__PURE__ */ jsx12(
|
|
3480
3627
|
"div",
|
|
3481
3628
|
{
|
|
3482
3629
|
className: cn6(
|
|
3483
3630
|
"relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden p-0 text-center",
|
|
3484
3631
|
isNarrowLayout ? "h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]" : "min-h-full"
|
|
3485
3632
|
),
|
|
3486
|
-
children: /* @__PURE__ */
|
|
3633
|
+
children: /* @__PURE__ */ jsx12(
|
|
3487
3634
|
"p",
|
|
3488
3635
|
{
|
|
3489
3636
|
className: cn6(
|
|
@@ -3502,7 +3649,7 @@ function IssueManagerSidebarErrorState({
|
|
|
3502
3649
|
title,
|
|
3503
3650
|
onRetry
|
|
3504
3651
|
}) {
|
|
3505
|
-
return /* @__PURE__ */
|
|
3652
|
+
return /* @__PURE__ */ jsxs10(
|
|
3506
3653
|
"div",
|
|
3507
3654
|
{
|
|
3508
3655
|
className: cn6(
|
|
@@ -3510,9 +3657,9 @@ function IssueManagerSidebarErrorState({
|
|
|
3510
3657
|
isNarrowLayout ? "h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]" : "min-h-full"
|
|
3511
3658
|
),
|
|
3512
3659
|
children: [
|
|
3513
|
-
/* @__PURE__ */
|
|
3514
|
-
/* @__PURE__ */
|
|
3515
|
-
|
|
3660
|
+
/* @__PURE__ */ jsx12("p", { className: "text-[13px] font-semibold leading-5 text-[var(--state-danger)]", children: title }),
|
|
3661
|
+
/* @__PURE__ */ jsx12(
|
|
3662
|
+
Button8,
|
|
3516
3663
|
{
|
|
3517
3664
|
className: "mt-3",
|
|
3518
3665
|
size: "sm",
|
|
@@ -3551,7 +3698,7 @@ function resolveIssueManagerSidebarPresentationState(input) {
|
|
|
3551
3698
|
}
|
|
3552
3699
|
|
|
3553
3700
|
// src/ui/internal/shell/IssueManagerSidebar.tsx
|
|
3554
|
-
import { jsx as
|
|
3701
|
+
import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
3555
3702
|
function IssueManagerSidebar({
|
|
3556
3703
|
controller,
|
|
3557
3704
|
isCollapsed,
|
|
@@ -3565,7 +3712,7 @@ function IssueManagerSidebar({
|
|
|
3565
3712
|
showStandaloneState,
|
|
3566
3713
|
sidebarViewState
|
|
3567
3714
|
});
|
|
3568
|
-
return /* @__PURE__ */
|
|
3715
|
+
return /* @__PURE__ */ jsxs11(
|
|
3569
3716
|
"aside",
|
|
3570
3717
|
{
|
|
3571
3718
|
"aria-hidden": isCollapsed ? "true" : void 0,
|
|
@@ -3576,7 +3723,7 @@ function IssueManagerSidebar({
|
|
|
3576
3723
|
),
|
|
3577
3724
|
inert: isCollapsed ? true : void 0,
|
|
3578
3725
|
children: [
|
|
3579
|
-
/* @__PURE__ */
|
|
3726
|
+
/* @__PURE__ */ jsx13(
|
|
3580
3727
|
IssueManagerSidebarHeader,
|
|
3581
3728
|
{
|
|
3582
3729
|
copy,
|
|
@@ -3586,7 +3733,7 @@ function IssueManagerSidebar({
|
|
|
3586
3733
|
onIssueSearchQueryChange: controller.setIssueSearchQuery
|
|
3587
3734
|
}
|
|
3588
3735
|
),
|
|
3589
|
-
/* @__PURE__ */
|
|
3736
|
+
/* @__PURE__ */ jsx13(
|
|
3590
3737
|
IssueManagerSidebarStatusTabs,
|
|
3591
3738
|
{
|
|
3592
3739
|
copy,
|
|
@@ -3595,15 +3742,15 @@ function IssueManagerSidebar({
|
|
|
3595
3742
|
onIssueStatusFilterChange: controller.setIssueStatusFilter
|
|
3596
3743
|
}
|
|
3597
3744
|
),
|
|
3598
|
-
/* @__PURE__ */
|
|
3599
|
-
/* @__PURE__ */
|
|
3745
|
+
/* @__PURE__ */ jsx13("div", { "aria-hidden": "true", className: "h-2.5 flex-none" }),
|
|
3746
|
+
/* @__PURE__ */ jsx13(
|
|
3600
3747
|
"div",
|
|
3601
3748
|
{
|
|
3602
3749
|
className: cn7(
|
|
3603
3750
|
"relative flex min-h-0 flex-col",
|
|
3604
3751
|
isNarrowLayout ? "flex-none" : "flex-1"
|
|
3605
3752
|
),
|
|
3606
|
-
children: presentation.kind !== "none" ? /* @__PURE__ */
|
|
3753
|
+
children: presentation.kind !== "none" ? /* @__PURE__ */ jsx13("div", { className: "flex h-full min-h-0 items-center justify-center px-4 pt-1.5 pb-4", children: /* @__PURE__ */ jsx13(
|
|
3607
3754
|
IssueManagerSidebarStandalonePane,
|
|
3608
3755
|
{
|
|
3609
3756
|
body: presentation.kind === "empty" ? presentation.body : void 0,
|
|
@@ -3613,7 +3760,7 @@ function IssueManagerSidebar({
|
|
|
3613
3760
|
title: presentation.title,
|
|
3614
3761
|
onRetry: () => controller.refreshAll()
|
|
3615
3762
|
}
|
|
3616
|
-
) }) : /* @__PURE__ */
|
|
3763
|
+
) }) : /* @__PURE__ */ jsx13(
|
|
3617
3764
|
IssueManagerSidebarBody,
|
|
3618
3765
|
{
|
|
3619
3766
|
copy,
|
|
@@ -3632,8 +3779,8 @@ function IssueManagerSidebar({
|
|
|
3632
3779
|
}
|
|
3633
3780
|
|
|
3634
3781
|
// src/ui/internal/shell/IssueManagerTaskComposerPane.tsx
|
|
3635
|
-
import { Button as
|
|
3636
|
-
import { jsx as
|
|
3782
|
+
import { Button as Button9 } from "@tutti-os/ui-system";
|
|
3783
|
+
import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
3637
3784
|
function IssueManagerTaskComposerPane({
|
|
3638
3785
|
controller,
|
|
3639
3786
|
onCancel,
|
|
@@ -3641,23 +3788,23 @@ function IssueManagerTaskComposerPane({
|
|
|
3641
3788
|
}) {
|
|
3642
3789
|
const copy = controller.copy;
|
|
3643
3790
|
const isTaskTitleMissing = controller.taskDraft.title.trim().length === 0;
|
|
3644
|
-
return /* @__PURE__ */
|
|
3645
|
-
/* @__PURE__ */
|
|
3646
|
-
/* @__PURE__ */
|
|
3791
|
+
return /* @__PURE__ */ jsxs12("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
|
|
3792
|
+
/* @__PURE__ */ jsx14("div", { className: "flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto px-7 py-8", children: /* @__PURE__ */ jsxs12("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
|
|
3793
|
+
/* @__PURE__ */ jsx14(
|
|
3647
3794
|
"div",
|
|
3648
3795
|
{
|
|
3649
3796
|
className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
|
|
3650
|
-
children: /* @__PURE__ */
|
|
3797
|
+
children: /* @__PURE__ */ jsx14("h2", { className: "m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: copy.t("actions.addSubtask") })
|
|
3651
3798
|
}
|
|
3652
3799
|
),
|
|
3653
|
-
/* @__PURE__ */
|
|
3654
|
-
/* @__PURE__ */
|
|
3800
|
+
/* @__PURE__ */ jsxs12("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
|
|
3801
|
+
/* @__PURE__ */ jsxs12(
|
|
3655
3802
|
"label",
|
|
3656
3803
|
{
|
|
3657
3804
|
className: `flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
|
|
3658
3805
|
children: [
|
|
3659
|
-
/* @__PURE__ */
|
|
3660
|
-
/* @__PURE__ */
|
|
3806
|
+
/* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.title") }),
|
|
3807
|
+
/* @__PURE__ */ jsx14(
|
|
3661
3808
|
IssueManagerDraftTitleInput,
|
|
3662
3809
|
{
|
|
3663
3810
|
placeholder: copy.t("composer.subtaskTitlePlaceholder"),
|
|
@@ -3668,13 +3815,13 @@ function IssueManagerTaskComposerPane({
|
|
|
3668
3815
|
]
|
|
3669
3816
|
}
|
|
3670
3817
|
),
|
|
3671
|
-
/* @__PURE__ */
|
|
3818
|
+
/* @__PURE__ */ jsxs12(
|
|
3672
3819
|
"div",
|
|
3673
3820
|
{
|
|
3674
3821
|
className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
|
|
3675
3822
|
children: [
|
|
3676
|
-
/* @__PURE__ */
|
|
3677
|
-
/* @__PURE__ */
|
|
3823
|
+
/* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.requirementDescription") }),
|
|
3824
|
+
/* @__PURE__ */ jsx14(
|
|
3678
3825
|
IssueManagerRichTextTextarea,
|
|
3679
3826
|
{
|
|
3680
3827
|
controller,
|
|
@@ -3690,13 +3837,13 @@ function IssueManagerTaskComposerPane({
|
|
|
3690
3837
|
)
|
|
3691
3838
|
] })
|
|
3692
3839
|
] }) }),
|
|
3693
|
-
/* @__PURE__ */
|
|
3840
|
+
/* @__PURE__ */ jsx14(
|
|
3694
3841
|
"div",
|
|
3695
3842
|
{
|
|
3696
3843
|
className: `shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
|
|
3697
|
-
children: /* @__PURE__ */
|
|
3698
|
-
/* @__PURE__ */
|
|
3699
|
-
|
|
3844
|
+
children: /* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-end gap-3", children: [
|
|
3845
|
+
/* @__PURE__ */ jsx14(
|
|
3846
|
+
Button9,
|
|
3700
3847
|
{
|
|
3701
3848
|
size: "default",
|
|
3702
3849
|
type: "button",
|
|
@@ -3705,8 +3852,8 @@ function IssueManagerTaskComposerPane({
|
|
|
3705
3852
|
children: copy.t("actions.cancel")
|
|
3706
3853
|
}
|
|
3707
3854
|
),
|
|
3708
|
-
/* @__PURE__ */
|
|
3709
|
-
|
|
3855
|
+
/* @__PURE__ */ jsx14(
|
|
3856
|
+
Button9,
|
|
3710
3857
|
{
|
|
3711
3858
|
disabled: !selectedIssue || isTaskTitleMissing,
|
|
3712
3859
|
size: "default",
|
|
@@ -3726,8 +3873,8 @@ import { ScrollArea as ScrollArea4, cn as cn8 } from "@tutti-os/ui-system";
|
|
|
3726
3873
|
|
|
3727
3874
|
// src/ui/internal/shell/IssueManagerTaskDrawerSections.tsx
|
|
3728
3875
|
import { useState as useState6 } from "react";
|
|
3729
|
-
import { Badge as Badge5, Button as
|
|
3730
|
-
import { Fragment as Fragment2, jsx as
|
|
3876
|
+
import { Badge as Badge5, Button as Button10, ConfirmationDialog as ConfirmationDialog2 } from "@tutti-os/ui-system";
|
|
3877
|
+
import { Fragment as Fragment2, jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
3731
3878
|
function IssueManagerTaskDrawerHeader({
|
|
3732
3879
|
controller,
|
|
3733
3880
|
selectedTask,
|
|
@@ -3736,13 +3883,13 @@ function IssueManagerTaskDrawerHeader({
|
|
|
3736
3883
|
const copy = controller.copy;
|
|
3737
3884
|
const [deleteDialogOpen, setDeleteDialogOpen] = useState6(false);
|
|
3738
3885
|
const [deleteBusy, setDeleteBusy] = useState6(false);
|
|
3739
|
-
return /* @__PURE__ */
|
|
3740
|
-
/* @__PURE__ */
|
|
3741
|
-
/* @__PURE__ */
|
|
3742
|
-
view.showTaskMetadata && selectedTask ? /* @__PURE__ */
|
|
3743
|
-
/* @__PURE__ */
|
|
3744
|
-
/* @__PURE__ */
|
|
3745
|
-
|
|
3886
|
+
return /* @__PURE__ */ jsxs13(Fragment2, { children: [
|
|
3887
|
+
/* @__PURE__ */ jsxs13("div", { className: "grid gap-3 px-6 py-7", children: [
|
|
3888
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-between gap-6", children: [
|
|
3889
|
+
view.showTaskMetadata && selectedTask ? /* @__PURE__ */ jsx15(IssueManagerTitleTooltip, { title: view.title, children: /* @__PURE__ */ jsx15("h3", { className: "line-clamp-2 min-w-0 flex-1 whitespace-normal text-[15px] font-semibold leading-6 text-[var(--text-primary)] [overflow-wrap:anywhere]", children: view.title }) }) : /* @__PURE__ */ jsx15(IssueManagerTitleTooltip, { title: view.title, children: /* @__PURE__ */ jsx15("h3", { className: "line-clamp-2 min-w-0 flex-1 whitespace-normal text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)] [overflow-wrap:anywhere]", children: view.title }) }),
|
|
3890
|
+
/* @__PURE__ */ jsx15("div", { className: "flex shrink-0 items-center gap-2", children: view.showTaskActions && selectedTask ? /* @__PURE__ */ jsxs13(Fragment2, { children: [
|
|
3891
|
+
/* @__PURE__ */ jsx15(
|
|
3892
|
+
Button10,
|
|
3746
3893
|
{
|
|
3747
3894
|
type: "button",
|
|
3748
3895
|
variant: "ghost",
|
|
@@ -3750,8 +3897,8 @@ function IssueManagerTaskDrawerHeader({
|
|
|
3750
3897
|
children: copy.t("actions.edit")
|
|
3751
3898
|
}
|
|
3752
3899
|
),
|
|
3753
|
-
/* @__PURE__ */
|
|
3754
|
-
|
|
3900
|
+
/* @__PURE__ */ jsx15(
|
|
3901
|
+
Button10,
|
|
3755
3902
|
{
|
|
3756
3903
|
className: "text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
|
|
3757
3904
|
type: "button",
|
|
@@ -3762,24 +3909,24 @@ function IssueManagerTaskDrawerHeader({
|
|
|
3762
3909
|
)
|
|
3763
3910
|
] }) : null })
|
|
3764
3911
|
] }),
|
|
3765
|
-
view.showTaskMetadata && selectedTask ? /* @__PURE__ */
|
|
3766
|
-
/* @__PURE__ */
|
|
3912
|
+
view.showTaskMetadata && selectedTask ? /* @__PURE__ */ jsxs13("div", { className: "grid gap-2", children: [
|
|
3913
|
+
/* @__PURE__ */ jsx15(
|
|
3767
3914
|
IssueManagerTaskMetadataRow,
|
|
3768
3915
|
{
|
|
3769
3916
|
copy,
|
|
3770
3917
|
selectedTask
|
|
3771
3918
|
}
|
|
3772
3919
|
),
|
|
3773
|
-
selectedTask.status === "pending_acceptance" ? /* @__PURE__ */
|
|
3920
|
+
selectedTask.status === "pending_acceptance" ? /* @__PURE__ */ jsx15(IssueManagerTaskAcceptanceCard, { controller }) : null
|
|
3774
3921
|
] }) : null
|
|
3775
3922
|
] }),
|
|
3776
|
-
selectedTask ? /* @__PURE__ */
|
|
3923
|
+
selectedTask ? /* @__PURE__ */ jsx15(
|
|
3777
3924
|
ConfirmationDialog2,
|
|
3778
3925
|
{
|
|
3779
3926
|
cancelLabel: copy.t("actions.cancel"),
|
|
3780
3927
|
confirmBusy: deleteBusy,
|
|
3781
3928
|
confirmLabel: copy.t("actions.delete"),
|
|
3782
|
-
description: /* @__PURE__ */
|
|
3929
|
+
description: /* @__PURE__ */ jsx15("span", { className: "block max-w-full whitespace-normal [overflow-wrap:anywhere]", children: selectedTask.title }),
|
|
3783
3930
|
open: deleteDialogOpen,
|
|
3784
3931
|
title: copy.t("confirmations.deleteTask"),
|
|
3785
3932
|
tone: "destructive",
|
|
@@ -3799,70 +3946,36 @@ function IssueManagerTaskMetadataRow({
|
|
|
3799
3946
|
copy,
|
|
3800
3947
|
selectedTask
|
|
3801
3948
|
}) {
|
|
3802
|
-
return /* @__PURE__ */
|
|
3803
|
-
/* @__PURE__ */
|
|
3804
|
-
/* @__PURE__ */
|
|
3949
|
+
return /* @__PURE__ */ jsxs13("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-2 text-[11px] font-normal leading-[1.3] text-[var(--text-secondary)]", children: [
|
|
3950
|
+
/* @__PURE__ */ jsx15(Badge5, { variant: issueManagerStatusBadgeVariant(selectedTask.status), children: resolveIssueManagerStatusLabel(copy, selectedTask.status) }),
|
|
3951
|
+
/* @__PURE__ */ jsx15(
|
|
3805
3952
|
"span",
|
|
3806
3953
|
{
|
|
3807
3954
|
"aria-hidden": "true",
|
|
3808
3955
|
className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
|
|
3809
3956
|
}
|
|
3810
3957
|
),
|
|
3811
|
-
/* @__PURE__ */
|
|
3958
|
+
/* @__PURE__ */ jsxs13("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
|
|
3812
3959
|
copy.t("labels.creator"),
|
|
3813
3960
|
" ",
|
|
3814
3961
|
resolveTaskCreatorLabel(selectedTask)
|
|
3815
3962
|
] }),
|
|
3816
|
-
/* @__PURE__ */
|
|
3963
|
+
/* @__PURE__ */ jsx15(
|
|
3817
3964
|
"span",
|
|
3818
3965
|
{
|
|
3819
3966
|
"aria-hidden": "true",
|
|
3820
3967
|
className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
|
|
3821
3968
|
}
|
|
3822
3969
|
),
|
|
3823
|
-
/* @__PURE__ */
|
|
3970
|
+
/* @__PURE__ */ jsxs13("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
|
|
3824
3971
|
copy.t("labels.createdAt"),
|
|
3825
3972
|
" ",
|
|
3826
3973
|
formatIssueManagerTimestamp(selectedTask.createdAtUnix) || "-"
|
|
3827
3974
|
] })
|
|
3828
3975
|
] });
|
|
3829
3976
|
}
|
|
3830
|
-
function IssueManagerTaskAcceptanceCard({
|
|
3831
|
-
controller
|
|
3832
|
-
}) {
|
|
3833
|
-
const copy = controller.copy;
|
|
3834
|
-
return /* @__PURE__ */ jsxs12("div", { className: "grid gap-2 rounded-md bg-[var(--transparency-block)] px-3 py-2", children: [
|
|
3835
|
-
/* @__PURE__ */ jsxs12("div", { className: "min-w-0 text-[11px] font-normal leading-[1.45] text-[var(--text-secondary)] [overflow-wrap:anywhere]", children: [
|
|
3836
|
-
/* @__PURE__ */ jsx14("span", { className: "font-semibold text-[var(--text-primary)]", children: copy.t("labels.taskAcceptance") }),
|
|
3837
|
-
/* @__PURE__ */ jsx14("span", { className: "mx-1 text-[var(--text-tertiary)]", children: "\xB7" }),
|
|
3838
|
-
/* @__PURE__ */ jsx14("span", { children: copy.t("messages.taskAcceptanceHint") })
|
|
3839
|
-
] }),
|
|
3840
|
-
/* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-end gap-2", children: [
|
|
3841
|
-
/* @__PURE__ */ jsx14(
|
|
3842
|
-
Button9,
|
|
3843
|
-
{
|
|
3844
|
-
className: "h-7 px-2 text-[11px] text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
|
|
3845
|
-
type: "button",
|
|
3846
|
-
variant: "ghost",
|
|
3847
|
-
onClick: () => void controller.setSelectedTaskStatus("not_started"),
|
|
3848
|
-
children: copy.t("actions.rejectTask")
|
|
3849
|
-
}
|
|
3850
|
-
),
|
|
3851
|
-
/* @__PURE__ */ jsx14(
|
|
3852
|
-
Button9,
|
|
3853
|
-
{
|
|
3854
|
-
className: "h-7 px-2.5 text-[11px]",
|
|
3855
|
-
type: "button",
|
|
3856
|
-
variant: "secondary",
|
|
3857
|
-
onClick: () => void controller.setSelectedTaskStatus("completed"),
|
|
3858
|
-
children: copy.t("actions.acceptTask")
|
|
3859
|
-
}
|
|
3860
|
-
)
|
|
3861
|
-
] })
|
|
3862
|
-
] });
|
|
3863
|
-
}
|
|
3864
3977
|
function IssueManagerTaskDrawerLoadingBody() {
|
|
3865
|
-
return /* @__PURE__ */
|
|
3978
|
+
return /* @__PURE__ */ jsx15(IssueManagerTaskDrawerLoadingState, {});
|
|
3866
3979
|
}
|
|
3867
3980
|
function IssueManagerTaskDrawerBody({
|
|
3868
3981
|
controller,
|
|
@@ -3871,10 +3984,10 @@ function IssueManagerTaskDrawerBody({
|
|
|
3871
3984
|
view
|
|
3872
3985
|
}) {
|
|
3873
3986
|
if (view.bodyKind === "loading") {
|
|
3874
|
-
return /* @__PURE__ */
|
|
3987
|
+
return /* @__PURE__ */ jsx15(IssueManagerTaskDrawerLoadingBody, {});
|
|
3875
3988
|
}
|
|
3876
3989
|
if (view.bodyKind === "edit") {
|
|
3877
|
-
return /* @__PURE__ */
|
|
3990
|
+
return /* @__PURE__ */ jsx15(
|
|
3878
3991
|
IssueManagerTaskDrawerEditBody,
|
|
3879
3992
|
{
|
|
3880
3993
|
controller,
|
|
@@ -3882,7 +3995,7 @@ function IssueManagerTaskDrawerBody({
|
|
|
3882
3995
|
}
|
|
3883
3996
|
);
|
|
3884
3997
|
}
|
|
3885
|
-
return /* @__PURE__ */
|
|
3998
|
+
return /* @__PURE__ */ jsx15(
|
|
3886
3999
|
IssueManagerTaskDrawerReadBody,
|
|
3887
4000
|
{
|
|
3888
4001
|
controller,
|
|
@@ -3897,22 +4010,22 @@ function IssueManagerTaskDrawerEditBody({
|
|
|
3897
4010
|
title
|
|
3898
4011
|
}) {
|
|
3899
4012
|
const copy = controller.copy;
|
|
3900
|
-
return /* @__PURE__ */
|
|
3901
|
-
/* @__PURE__ */
|
|
4013
|
+
return /* @__PURE__ */ jsxs13("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
|
|
4014
|
+
/* @__PURE__ */ jsx15(
|
|
3902
4015
|
"div",
|
|
3903
4016
|
{
|
|
3904
4017
|
className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
|
|
3905
|
-
children: /* @__PURE__ */
|
|
4018
|
+
children: /* @__PURE__ */ jsx15("h2", { className: "m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: title })
|
|
3906
4019
|
}
|
|
3907
4020
|
),
|
|
3908
|
-
/* @__PURE__ */
|
|
3909
|
-
/* @__PURE__ */
|
|
4021
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
|
|
4022
|
+
/* @__PURE__ */ jsxs13(
|
|
3910
4023
|
"label",
|
|
3911
4024
|
{
|
|
3912
4025
|
className: `flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
|
|
3913
4026
|
children: [
|
|
3914
|
-
/* @__PURE__ */
|
|
3915
|
-
/* @__PURE__ */
|
|
4027
|
+
/* @__PURE__ */ jsx15("span", { className: "leading-5", children: copy.t("labels.title") }),
|
|
4028
|
+
/* @__PURE__ */ jsx15(
|
|
3916
4029
|
IssueManagerDraftTitleInput,
|
|
3917
4030
|
{
|
|
3918
4031
|
placeholder: copy.t("composer.taskTitlePlaceholder"),
|
|
@@ -3923,13 +4036,13 @@ function IssueManagerTaskDrawerEditBody({
|
|
|
3923
4036
|
]
|
|
3924
4037
|
}
|
|
3925
4038
|
),
|
|
3926
|
-
/* @__PURE__ */
|
|
4039
|
+
/* @__PURE__ */ jsxs13(
|
|
3927
4040
|
"div",
|
|
3928
4041
|
{
|
|
3929
4042
|
className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
|
|
3930
4043
|
children: [
|
|
3931
|
-
/* @__PURE__ */
|
|
3932
|
-
/* @__PURE__ */
|
|
4044
|
+
/* @__PURE__ */ jsx15("span", { className: "leading-5", children: copy.t("labels.content") }),
|
|
4045
|
+
/* @__PURE__ */ jsx15(
|
|
3933
4046
|
IssueManagerRichTextTextarea,
|
|
3934
4047
|
{
|
|
3935
4048
|
controller,
|
|
@@ -3955,8 +4068,8 @@ function IssueManagerTaskDrawerReadBody({
|
|
|
3955
4068
|
const copy = controller.copy;
|
|
3956
4069
|
const latestRun = controller.taskDetail.value?.latestRun ?? controller.taskDetail.value?.recentRuns[0] ?? null;
|
|
3957
4070
|
const latestOutputs = controller.taskDetail.value?.latestOutputs ?? [];
|
|
3958
|
-
return /* @__PURE__ */
|
|
3959
|
-
/* @__PURE__ */
|
|
4071
|
+
return /* @__PURE__ */ jsxs13(Fragment2, { children: [
|
|
4072
|
+
/* @__PURE__ */ jsx15(
|
|
3960
4073
|
IssueManagerDescriptionSection,
|
|
3961
4074
|
{
|
|
3962
4075
|
content: taskContent,
|
|
@@ -3966,7 +4079,7 @@ function IssueManagerTaskDrawerReadBody({
|
|
|
3966
4079
|
variant: "plain"
|
|
3967
4080
|
}
|
|
3968
4081
|
),
|
|
3969
|
-
/* @__PURE__ */
|
|
4082
|
+
/* @__PURE__ */ jsx15(
|
|
3970
4083
|
IssueManagerLatestRunStatusSection,
|
|
3971
4084
|
{
|
|
3972
4085
|
copy,
|
|
@@ -3976,7 +4089,7 @@ function IssueManagerTaskDrawerReadBody({
|
|
|
3976
4089
|
title: latestRunTitle
|
|
3977
4090
|
}
|
|
3978
4091
|
),
|
|
3979
|
-
/* @__PURE__ */
|
|
4092
|
+
/* @__PURE__ */ jsx15(
|
|
3980
4093
|
IssueManagerOutputSection,
|
|
3981
4094
|
{
|
|
3982
4095
|
copy,
|
|
@@ -3998,8 +4111,8 @@ function IssueManagerTaskDrawerFooter({
|
|
|
3998
4111
|
selectedTaskStatus: selectedTask?.status
|
|
3999
4112
|
});
|
|
4000
4113
|
if (view.showReadFooter && selectedTask) {
|
|
4001
|
-
return /* @__PURE__ */
|
|
4002
|
-
/* @__PURE__ */
|
|
4114
|
+
return /* @__PURE__ */ jsx15("div", { className: "border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur", children: /* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-end gap-3", children: [
|
|
4115
|
+
/* @__PURE__ */ jsx15(
|
|
4003
4116
|
IssueManagerExecutionDirectoryTrigger,
|
|
4004
4117
|
{
|
|
4005
4118
|
className: "mr-auto",
|
|
@@ -4007,7 +4120,7 @@ function IssueManagerTaskDrawerFooter({
|
|
|
4007
4120
|
disabled: runControlsDisabled
|
|
4008
4121
|
}
|
|
4009
4122
|
),
|
|
4010
|
-
/* @__PURE__ */
|
|
4123
|
+
/* @__PURE__ */ jsx15(
|
|
4011
4124
|
IssueManagerRunActionTrigger,
|
|
4012
4125
|
{
|
|
4013
4126
|
controller,
|
|
@@ -4015,8 +4128,8 @@ function IssueManagerTaskDrawerFooter({
|
|
|
4015
4128
|
triggerVariant: "button"
|
|
4016
4129
|
}
|
|
4017
4130
|
),
|
|
4018
|
-
controller.canInviteCollaborators ? /* @__PURE__ */
|
|
4019
|
-
|
|
4131
|
+
controller.canInviteCollaborators ? /* @__PURE__ */ jsx15(
|
|
4132
|
+
Button10,
|
|
4020
4133
|
{
|
|
4021
4134
|
disabled: !selectedIssue,
|
|
4022
4135
|
size: "dialog",
|
|
@@ -4030,13 +4143,13 @@ function IssueManagerTaskDrawerFooter({
|
|
|
4030
4143
|
] }) });
|
|
4031
4144
|
}
|
|
4032
4145
|
if (view.showEditFooter) {
|
|
4033
|
-
return /* @__PURE__ */
|
|
4146
|
+
return /* @__PURE__ */ jsx15(
|
|
4034
4147
|
"div",
|
|
4035
4148
|
{
|
|
4036
4149
|
className: `border-t border-border-1 px-6 py-4 ${issueManagerEditorFooterFadeInClassName}`,
|
|
4037
|
-
children: /* @__PURE__ */
|
|
4038
|
-
/* @__PURE__ */
|
|
4039
|
-
|
|
4150
|
+
children: /* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-end gap-3", children: [
|
|
4151
|
+
/* @__PURE__ */ jsx15(
|
|
4152
|
+
Button10,
|
|
4040
4153
|
{
|
|
4041
4154
|
size: "dialog",
|
|
4042
4155
|
type: "button",
|
|
@@ -4045,8 +4158,8 @@ function IssueManagerTaskDrawerFooter({
|
|
|
4045
4158
|
children: copy.t("actions.cancel")
|
|
4046
4159
|
}
|
|
4047
4160
|
),
|
|
4048
|
-
/* @__PURE__ */
|
|
4049
|
-
|
|
4161
|
+
/* @__PURE__ */ jsx15(
|
|
4162
|
+
Button10,
|
|
4050
4163
|
{
|
|
4051
4164
|
disabled: canIssueManagerSaveTask({
|
|
4052
4165
|
selectedIssue,
|
|
@@ -4066,7 +4179,7 @@ function IssueManagerTaskDrawerFooter({
|
|
|
4066
4179
|
}
|
|
4067
4180
|
|
|
4068
4181
|
// src/ui/internal/shell/IssueManagerTaskDrawer.tsx
|
|
4069
|
-
import { jsx as
|
|
4182
|
+
import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
4070
4183
|
function IssueManagerTaskDrawer({
|
|
4071
4184
|
controller,
|
|
4072
4185
|
isClosing,
|
|
@@ -4080,7 +4193,7 @@ function IssueManagerTaskDrawer({
|
|
|
4080
4193
|
selectedTask
|
|
4081
4194
|
});
|
|
4082
4195
|
const taskContent = selectedTask?.content ?? "";
|
|
4083
|
-
return /* @__PURE__ */
|
|
4196
|
+
return /* @__PURE__ */ jsx16(
|
|
4084
4197
|
"div",
|
|
4085
4198
|
{
|
|
4086
4199
|
className: cn8(
|
|
@@ -4094,7 +4207,7 @@ function IssueManagerTaskDrawer({
|
|
|
4094
4207
|
onWheel: (event) => {
|
|
4095
4208
|
event.preventDefault();
|
|
4096
4209
|
},
|
|
4097
|
-
children: /* @__PURE__ */
|
|
4210
|
+
children: /* @__PURE__ */ jsxs14(
|
|
4098
4211
|
"aside",
|
|
4099
4212
|
{
|
|
4100
4213
|
className: cn8(
|
|
@@ -4105,7 +4218,7 @@ function IssueManagerTaskDrawer({
|
|
|
4105
4218
|
onTouchMove: (event) => event.stopPropagation(),
|
|
4106
4219
|
onWheel: (event) => event.stopPropagation(),
|
|
4107
4220
|
children: [
|
|
4108
|
-
view.bodyKind === "edit" ? null : /* @__PURE__ */
|
|
4221
|
+
view.bodyKind === "edit" ? null : /* @__PURE__ */ jsx16(
|
|
4109
4222
|
IssueManagerTaskDrawerHeader,
|
|
4110
4223
|
{
|
|
4111
4224
|
controller,
|
|
@@ -4113,25 +4226,32 @@ function IssueManagerTaskDrawer({
|
|
|
4113
4226
|
view
|
|
4114
4227
|
}
|
|
4115
4228
|
),
|
|
4116
|
-
/* @__PURE__ */
|
|
4117
|
-
|
|
4229
|
+
/* @__PURE__ */ jsx16(
|
|
4230
|
+
ScrollArea4,
|
|
4118
4231
|
{
|
|
4119
|
-
|
|
4120
|
-
|
|
4121
|
-
|
|
4122
|
-
|
|
4123
|
-
children: /* @__PURE__ */ jsx15(
|
|
4124
|
-
IssueManagerTaskDrawerBody,
|
|
4232
|
+
scrollbarMode: "native",
|
|
4233
|
+
className: "min-h-0 flex-1 [&_[data-slot=scroll-area-viewport]]:overscroll-contain",
|
|
4234
|
+
children: /* @__PURE__ */ jsx16(
|
|
4235
|
+
"div",
|
|
4125
4236
|
{
|
|
4126
|
-
|
|
4127
|
-
|
|
4128
|
-
|
|
4129
|
-
|
|
4237
|
+
className: cn8(
|
|
4238
|
+
"flex flex-col",
|
|
4239
|
+
view.bodyKind === "edit" ? "gap-[14px] px-6 py-8" : "gap-9 px-6 py-7"
|
|
4240
|
+
),
|
|
4241
|
+
children: /* @__PURE__ */ jsx16(
|
|
4242
|
+
IssueManagerTaskDrawerBody,
|
|
4243
|
+
{
|
|
4244
|
+
controller,
|
|
4245
|
+
renderLatestRunStatus,
|
|
4246
|
+
taskContent,
|
|
4247
|
+
view
|
|
4248
|
+
}
|
|
4249
|
+
)
|
|
4130
4250
|
}
|
|
4131
4251
|
)
|
|
4132
4252
|
}
|
|
4133
|
-
)
|
|
4134
|
-
/* @__PURE__ */
|
|
4253
|
+
),
|
|
4254
|
+
/* @__PURE__ */ jsx16(
|
|
4135
4255
|
IssueManagerTaskDrawerFooter,
|
|
4136
4256
|
{
|
|
4137
4257
|
controller,
|
|
@@ -4302,7 +4422,7 @@ function useIssueManagerShellView({
|
|
|
4302
4422
|
}
|
|
4303
4423
|
|
|
4304
4424
|
// src/ui/internal/shell/IssueManagerShell.tsx
|
|
4305
|
-
import { jsx as
|
|
4425
|
+
import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
4306
4426
|
var issueManagerTaskDrawerExitDurationMs = 180;
|
|
4307
4427
|
function IssueManagerShell({
|
|
4308
4428
|
controller,
|
|
@@ -4343,7 +4463,7 @@ function IssueManagerShell({
|
|
|
4343
4463
|
shellView.content.isTaskDrawerOpen
|
|
4344
4464
|
]);
|
|
4345
4465
|
const taskDrawerTask = shellView.content.isTaskDrawerOpen ? selectedTask : renderedTaskDrawerTask;
|
|
4346
|
-
return /* @__PURE__ */
|
|
4466
|
+
return /* @__PURE__ */ jsxs15(
|
|
4347
4467
|
"div",
|
|
4348
4468
|
{
|
|
4349
4469
|
className: "relative grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)] overflow-hidden bg-transparent transition-[grid-template-columns] duration-[180ms] ease-[cubic-bezier(0.4,0,0.2,1)] motion-reduce:transition-none",
|
|
@@ -4352,8 +4472,8 @@ function IssueManagerShell({
|
|
|
4352
4472
|
ref: shellView.layoutRef,
|
|
4353
4473
|
style: shellView.layoutStyle,
|
|
4354
4474
|
children: [
|
|
4355
|
-
shellView.floatingNotice ? /* @__PURE__ */
|
|
4356
|
-
/* @__PURE__ */
|
|
4475
|
+
shellView.floatingNotice ? /* @__PURE__ */ jsx17(IssueManagerFloatingNotice, { notice: shellView.floatingNotice }) : null,
|
|
4476
|
+
/* @__PURE__ */ jsx17(
|
|
4357
4477
|
IssueManagerSidebar,
|
|
4358
4478
|
{
|
|
4359
4479
|
controller,
|
|
@@ -4364,7 +4484,7 @@ function IssueManagerShell({
|
|
|
4364
4484
|
statusCounts: shellView.sidebar.statusCounts
|
|
4365
4485
|
}
|
|
4366
4486
|
),
|
|
4367
|
-
shellView.sidebar.isAutoCollapsed ? null : /* @__PURE__ */
|
|
4487
|
+
shellView.sidebar.isAutoCollapsed ? null : /* @__PURE__ */ jsx17(
|
|
4368
4488
|
"div",
|
|
4369
4489
|
{
|
|
4370
4490
|
"aria-label": controller.copy.t("labels.resizeIssueList"),
|
|
@@ -4383,12 +4503,12 @@ function IssueManagerShell({
|
|
|
4383
4503
|
onPointerDown: shellView.resizeHandle.onPointerDown,
|
|
4384
4504
|
onPointerMove: shellView.resizeHandle.onPointerMove,
|
|
4385
4505
|
onPointerUp: shellView.resizeHandle.onPointerUp,
|
|
4386
|
-
children: /* @__PURE__ */
|
|
4506
|
+
children: /* @__PURE__ */ jsx17("span", { className: "absolute top-0 bottom-0 left-1/2 w-px -translate-x-1/2 bg-transparent transition-[background-color,width] duration-150 group-hover:w-0.5 group-hover:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)] group-focus-visible:w-0.5 group-focus-visible:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)]" })
|
|
4387
4507
|
}
|
|
4388
4508
|
),
|
|
4389
|
-
/* @__PURE__ */
|
|
4390
|
-
/* @__PURE__ */
|
|
4391
|
-
/* @__PURE__ */
|
|
4509
|
+
/* @__PURE__ */ jsxs15("div", { className: "relative h-full min-h-0 overflow-hidden bg-transparent @container/issue-manager-content", children: [
|
|
4510
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex h-full min-h-0 flex-col", children: [
|
|
4511
|
+
/* @__PURE__ */ jsx17("div", { className: "min-h-0 flex-1 overflow-hidden", children: shellView.content.isIssueEditing ? /* @__PURE__ */ jsx17(
|
|
4392
4512
|
IssueManagerIssuePane,
|
|
4393
4513
|
{
|
|
4394
4514
|
controller,
|
|
@@ -4396,14 +4516,14 @@ function IssueManagerShell({
|
|
|
4396
4516
|
selectedIssue,
|
|
4397
4517
|
onDismissCreate: onDismissIssueCreate
|
|
4398
4518
|
}
|
|
4399
|
-
) : shellView.content.isTaskCreating ? /* @__PURE__ */
|
|
4519
|
+
) : shellView.content.isTaskCreating ? /* @__PURE__ */ jsx17(
|
|
4400
4520
|
IssueManagerTaskComposerPane,
|
|
4401
4521
|
{
|
|
4402
4522
|
controller,
|
|
4403
4523
|
selectedIssue,
|
|
4404
4524
|
onCancel: () => controller.setTaskEditorMode("read")
|
|
4405
4525
|
}
|
|
4406
|
-
) : selectedIssue ? /* @__PURE__ */
|
|
4526
|
+
) : selectedIssue ? /* @__PURE__ */ jsx17(
|
|
4407
4527
|
IssueManagerIssuePane,
|
|
4408
4528
|
{
|
|
4409
4529
|
controller,
|
|
@@ -4411,14 +4531,14 @@ function IssueManagerShell({
|
|
|
4411
4531
|
selectedIssue,
|
|
4412
4532
|
onDismissCreate: onDismissIssueCreate
|
|
4413
4533
|
}
|
|
4414
|
-
) : /* @__PURE__ */
|
|
4534
|
+
) : /* @__PURE__ */ jsx17(
|
|
4415
4535
|
IssueManagerShellEmptyState,
|
|
4416
4536
|
{
|
|
4417
4537
|
controller,
|
|
4418
4538
|
emptyIllustration
|
|
4419
4539
|
}
|
|
4420
4540
|
) }),
|
|
4421
|
-
/* @__PURE__ */
|
|
4541
|
+
/* @__PURE__ */ jsx17(
|
|
4422
4542
|
IssueManagerBottomBar,
|
|
4423
4543
|
{
|
|
4424
4544
|
controller,
|
|
@@ -4428,7 +4548,7 @@ function IssueManagerShell({
|
|
|
4428
4548
|
}
|
|
4429
4549
|
)
|
|
4430
4550
|
] }),
|
|
4431
|
-
taskDrawerTask ? /* @__PURE__ */
|
|
4551
|
+
taskDrawerTask ? /* @__PURE__ */ jsx17(
|
|
4432
4552
|
IssueManagerTaskDrawer,
|
|
4433
4553
|
{
|
|
4434
4554
|
controller,
|
|
@@ -4448,18 +4568,18 @@ function IssueManagerShellEmptyState({
|
|
|
4448
4568
|
controller,
|
|
4449
4569
|
emptyIllustration
|
|
4450
4570
|
}) {
|
|
4451
|
-
return /* @__PURE__ */
|
|
4452
|
-
emptyIllustration ? /* @__PURE__ */
|
|
4453
|
-
/* @__PURE__ */
|
|
4454
|
-
/* @__PURE__ */
|
|
4455
|
-
/* @__PURE__ */
|
|
4456
|
-
|
|
4571
|
+
return /* @__PURE__ */ jsx17("div", { className: "flex h-full min-h-[320px] items-center justify-center px-10 py-10", children: /* @__PURE__ */ jsxs15("div", { className: "grid max-w-[420px] justify-items-center gap-2 text-center", children: [
|
|
4572
|
+
emptyIllustration ? /* @__PURE__ */ jsx17("div", { className: "mb-4", children: emptyIllustration }) : null,
|
|
4573
|
+
/* @__PURE__ */ jsx17("h2", { className: "text-[13px] font-semibold leading-5 text-[var(--text-primary)]", children: controller.copy.t("messages.noIssues") }),
|
|
4574
|
+
/* @__PURE__ */ jsx17("p", { className: "max-w-[420px] text-[13px] leading-5 text-[var(--text-secondary)]", children: controller.copy.t("emptyState") }),
|
|
4575
|
+
/* @__PURE__ */ jsxs15(
|
|
4576
|
+
Button11,
|
|
4457
4577
|
{
|
|
4458
4578
|
className: "mt-2 gap-2",
|
|
4459
4579
|
type: "button",
|
|
4460
4580
|
onClick: () => controller.setIssueEditorMode("create"),
|
|
4461
4581
|
children: [
|
|
4462
|
-
/* @__PURE__ */
|
|
4582
|
+
/* @__PURE__ */ jsx17(FileCreateIcon4, { size: 16 }),
|
|
4463
4583
|
controller.copy.t("actions.createIssue")
|
|
4464
4584
|
]
|
|
4465
4585
|
}
|
|
@@ -4471,7 +4591,7 @@ function IssueManagerShellEmptyState({
|
|
|
4471
4591
|
import { useEffect as useEffect8, useState as useState9 } from "react";
|
|
4472
4592
|
import {
|
|
4473
4593
|
BareIconButton,
|
|
4474
|
-
Button as
|
|
4594
|
+
Button as Button12,
|
|
4475
4595
|
CheckIcon as CheckIcon2,
|
|
4476
4596
|
ChevronDownIcon as ChevronDownIcon2,
|
|
4477
4597
|
ConfirmationDialog as ConfirmationDialog3,
|
|
@@ -4495,7 +4615,7 @@ import {
|
|
|
4495
4615
|
Textarea,
|
|
4496
4616
|
cn as cn10
|
|
4497
4617
|
} from "@tutti-os/ui-system";
|
|
4498
|
-
import { Fragment as Fragment3, jsx as
|
|
4618
|
+
import { Fragment as Fragment3, jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
4499
4619
|
var topicSelectorMenuItemClassName = "min-h-7 overflow-hidden rounded-md py-1 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]";
|
|
4500
4620
|
var topicSelectorRowItemClassName = "min-w-0 flex-1 bg-transparent pr-2 pl-1 hover:bg-transparent focus:bg-transparent data-[highlighted]:bg-transparent";
|
|
4501
4621
|
function IssueManagerTopicSelector({
|
|
@@ -4523,10 +4643,10 @@ function IssueManagerTopicSelector({
|
|
|
4523
4643
|
setMenuOpen(false);
|
|
4524
4644
|
setDialogMode(mode);
|
|
4525
4645
|
};
|
|
4526
|
-
return /* @__PURE__ */
|
|
4527
|
-
/* @__PURE__ */
|
|
4528
|
-
/* @__PURE__ */
|
|
4529
|
-
|
|
4646
|
+
return /* @__PURE__ */ jsxs16(Fragment3, { children: [
|
|
4647
|
+
/* @__PURE__ */ jsxs16(DropdownMenu2, { open: menuOpen, onOpenChange: setMenuOpen, children: [
|
|
4648
|
+
/* @__PURE__ */ jsx18(DropdownMenuTrigger2, { asChild: true, children: /* @__PURE__ */ jsxs16(
|
|
4649
|
+
Button12,
|
|
4530
4650
|
{
|
|
4531
4651
|
"aria-label": topicLabel,
|
|
4532
4652
|
className: cn10(
|
|
@@ -4537,18 +4657,18 @@ function IssueManagerTopicSelector({
|
|
|
4537
4657
|
type: "button",
|
|
4538
4658
|
variant: "ghost",
|
|
4539
4659
|
children: [
|
|
4540
|
-
/* @__PURE__ */
|
|
4541
|
-
/* @__PURE__ */
|
|
4660
|
+
/* @__PURE__ */ jsx18("span", { className: "min-w-0 truncate", children: triggerLabel }),
|
|
4661
|
+
/* @__PURE__ */ jsx18(ChevronDownIcon2, { className: "size-4 shrink-0 text-[var(--text-tertiary)] transition-transform duration-200" })
|
|
4542
4662
|
]
|
|
4543
4663
|
}
|
|
4544
4664
|
) }),
|
|
4545
|
-
/* @__PURE__ */
|
|
4665
|
+
/* @__PURE__ */ jsxs16(DropdownMenuContent2, { align: "start", className: "w-[200px] px-1", children: [
|
|
4546
4666
|
topics.map((topic) => {
|
|
4547
4667
|
const isPinned = (topic.pinnedAtUnix ?? 0) > 0;
|
|
4548
4668
|
const isActive = topic.topicId === activeTopicId;
|
|
4549
4669
|
const pinLabel = isPinned ? copy.t("actions.unpinTopic") : copy.t("actions.pinTopic");
|
|
4550
|
-
return /* @__PURE__ */
|
|
4551
|
-
/* @__PURE__ */
|
|
4670
|
+
return /* @__PURE__ */ jsx18("div", { className: "min-w-0", children: /* @__PURE__ */ jsxs16("div", { className: "group/topic-row relative flex min-h-7 min-w-0 items-center gap-0.5 rounded-md pr-0.5 pl-0.5 hover:bg-[var(--transparency-block)] focus-within:bg-[var(--transparency-block)]", children: [
|
|
4671
|
+
/* @__PURE__ */ jsxs16(
|
|
4552
4672
|
DropdownMenuItem2,
|
|
4553
4673
|
{
|
|
4554
4674
|
className: cn10(
|
|
@@ -4560,15 +4680,15 @@ function IssueManagerTopicSelector({
|
|
|
4560
4680
|
onSelectTopic(topic.topicId);
|
|
4561
4681
|
},
|
|
4562
4682
|
children: [
|
|
4563
|
-
/* @__PURE__ */
|
|
4564
|
-
/* @__PURE__ */
|
|
4565
|
-
/* @__PURE__ */
|
|
4566
|
-
topic.isDefault ? /* @__PURE__ */
|
|
4683
|
+
/* @__PURE__ */ jsx18("span", { className: "flex size-4 shrink-0 items-center justify-center text-[var(--accent)]", children: isActive ? /* @__PURE__ */ jsx18(CheckIcon2, { className: "size-4" }) : null }),
|
|
4684
|
+
/* @__PURE__ */ jsxs16("span", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
|
|
4685
|
+
/* @__PURE__ */ jsx18("span", { className: "truncate", children: topic.title }),
|
|
4686
|
+
topic.isDefault ? /* @__PURE__ */ jsx18("span", { className: "shrink-0 text-[11px] text-[var(--text-tertiary)]", children: copy.t("labels.topicDefault") }) : null
|
|
4567
4687
|
] })
|
|
4568
4688
|
]
|
|
4569
4689
|
}
|
|
4570
4690
|
),
|
|
4571
|
-
/* @__PURE__ */
|
|
4691
|
+
/* @__PURE__ */ jsx18(
|
|
4572
4692
|
BareIconButton,
|
|
4573
4693
|
{
|
|
4574
4694
|
"aria-label": pinLabel,
|
|
@@ -4586,11 +4706,11 @@ function IssueManagerTopicSelector({
|
|
|
4586
4706
|
topicId: topic.topicId
|
|
4587
4707
|
});
|
|
4588
4708
|
},
|
|
4589
|
-
children: isPinned ? /* @__PURE__ */
|
|
4709
|
+
children: isPinned ? /* @__PURE__ */ jsx18(PinFilledIcon, { className: "size-3.5" }) : /* @__PURE__ */ jsx18(PinIcon, { className: "size-3.5" })
|
|
4590
4710
|
}
|
|
4591
4711
|
),
|
|
4592
|
-
/* @__PURE__ */
|
|
4593
|
-
/* @__PURE__ */
|
|
4712
|
+
/* @__PURE__ */ jsxs16(DropdownMenu2, { modal: false, children: [
|
|
4713
|
+
/* @__PURE__ */ jsx18(DropdownMenuTrigger2, { asChild: true, children: /* @__PURE__ */ jsx18(
|
|
4594
4714
|
BareIconButton,
|
|
4595
4715
|
{
|
|
4596
4716
|
"aria-label": copy.t("actions.moreActions"),
|
|
@@ -4600,17 +4720,17 @@ function IssueManagerTopicSelector({
|
|
|
4600
4720
|
onClick: (event) => {
|
|
4601
4721
|
event.stopPropagation();
|
|
4602
4722
|
},
|
|
4603
|
-
children: /* @__PURE__ */
|
|
4723
|
+
children: /* @__PURE__ */ jsx18(MoreHorizontalIcon, { className: "size-3.5" })
|
|
4604
4724
|
}
|
|
4605
4725
|
) }),
|
|
4606
|
-
/* @__PURE__ */
|
|
4726
|
+
/* @__PURE__ */ jsxs16(
|
|
4607
4727
|
DropdownMenuContent2,
|
|
4608
4728
|
{
|
|
4609
4729
|
align: "end",
|
|
4610
4730
|
className: "w-32",
|
|
4611
4731
|
sideOffset: 6,
|
|
4612
4732
|
children: [
|
|
4613
|
-
/* @__PURE__ */
|
|
4733
|
+
/* @__PURE__ */ jsxs16(
|
|
4614
4734
|
DropdownMenuItem2,
|
|
4615
4735
|
{
|
|
4616
4736
|
onSelect: (event) => {
|
|
@@ -4621,12 +4741,12 @@ function IssueManagerTopicSelector({
|
|
|
4621
4741
|
});
|
|
4622
4742
|
},
|
|
4623
4743
|
children: [
|
|
4624
|
-
/* @__PURE__ */
|
|
4625
|
-
/* @__PURE__ */
|
|
4744
|
+
/* @__PURE__ */ jsx18(EditIcon, { className: "size-3.5" }),
|
|
4745
|
+
/* @__PURE__ */ jsx18("span", { children: copy.t("actions.editTopic") })
|
|
4626
4746
|
]
|
|
4627
4747
|
}
|
|
4628
4748
|
),
|
|
4629
|
-
!topic.isDefault ? /* @__PURE__ */
|
|
4749
|
+
!topic.isDefault ? /* @__PURE__ */ jsxs16(
|
|
4630
4750
|
DropdownMenuItem2,
|
|
4631
4751
|
{
|
|
4632
4752
|
variant: "destructive",
|
|
@@ -4636,8 +4756,8 @@ function IssueManagerTopicSelector({
|
|
|
4636
4756
|
setDeleteTopic(topic);
|
|
4637
4757
|
},
|
|
4638
4758
|
children: [
|
|
4639
|
-
/* @__PURE__ */
|
|
4640
|
-
/* @__PURE__ */
|
|
4759
|
+
/* @__PURE__ */ jsx18(DeleteIcon, { className: "size-3.5" }),
|
|
4760
|
+
/* @__PURE__ */ jsx18("span", { children: copy.t("actions.delete") })
|
|
4641
4761
|
]
|
|
4642
4762
|
}
|
|
4643
4763
|
) : null
|
|
@@ -4647,9 +4767,9 @@ function IssueManagerTopicSelector({
|
|
|
4647
4767
|
] })
|
|
4648
4768
|
] }) }, topic.topicId);
|
|
4649
4769
|
}),
|
|
4650
|
-
topics.length === 0 ? /* @__PURE__ */
|
|
4651
|
-
/* @__PURE__ */
|
|
4652
|
-
/* @__PURE__ */
|
|
4770
|
+
topics.length === 0 ? /* @__PURE__ */ jsx18("div", { className: "px-3 py-2 text-[11px] leading-4 text-[var(--text-tertiary)]", children: copy.t("messages.topicListEmpty") }) : null,
|
|
4771
|
+
/* @__PURE__ */ jsx18(DropdownMenuSeparator, {}),
|
|
4772
|
+
/* @__PURE__ */ jsxs16(
|
|
4653
4773
|
DropdownMenuItem2,
|
|
4654
4774
|
{
|
|
4655
4775
|
className: cn10(
|
|
@@ -4664,14 +4784,14 @@ function IssueManagerTopicSelector({
|
|
|
4664
4784
|
});
|
|
4665
4785
|
},
|
|
4666
4786
|
children: [
|
|
4667
|
-
/* @__PURE__ */
|
|
4668
|
-
/* @__PURE__ */
|
|
4787
|
+
/* @__PURE__ */ jsx18(FileCreateIcon5, { className: "size-3.5" }),
|
|
4788
|
+
/* @__PURE__ */ jsx18("span", { className: "truncate", children: copy.t("actions.createTopic") })
|
|
4669
4789
|
]
|
|
4670
4790
|
}
|
|
4671
4791
|
)
|
|
4672
4792
|
] })
|
|
4673
4793
|
] }),
|
|
4674
|
-
/* @__PURE__ */
|
|
4794
|
+
/* @__PURE__ */ jsx18(
|
|
4675
4795
|
IssueManagerTopicDialog,
|
|
4676
4796
|
{
|
|
4677
4797
|
copy,
|
|
@@ -4686,7 +4806,7 @@ function IssueManagerTopicSelector({
|
|
|
4686
4806
|
onUpdateTopic
|
|
4687
4807
|
}
|
|
4688
4808
|
),
|
|
4689
|
-
/* @__PURE__ */
|
|
4809
|
+
/* @__PURE__ */ jsx18(
|
|
4690
4810
|
ConfirmationDialog3,
|
|
4691
4811
|
{
|
|
4692
4812
|
cancelLabel: copy.t("actions.cancel"),
|
|
@@ -4754,12 +4874,12 @@ function IssueManagerTopicDialog({
|
|
|
4754
4874
|
}
|
|
4755
4875
|
onOpenChange(false);
|
|
4756
4876
|
};
|
|
4757
|
-
return /* @__PURE__ */
|
|
4758
|
-
/* @__PURE__ */
|
|
4759
|
-
/* @__PURE__ */
|
|
4760
|
-
/* @__PURE__ */
|
|
4761
|
-
/* @__PURE__ */
|
|
4762
|
-
/* @__PURE__ */
|
|
4877
|
+
return /* @__PURE__ */ jsx18(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs16(DialogContent, { className: "sm:max-w-[480px]", children: [
|
|
4878
|
+
/* @__PURE__ */ jsx18(DialogHeader, { children: /* @__PURE__ */ jsx18(DialogTitle, { children: dialogTitle }) }),
|
|
4879
|
+
/* @__PURE__ */ jsxs16("form", { className: "grid gap-4", onSubmit: submit, children: [
|
|
4880
|
+
/* @__PURE__ */ jsxs16("label", { className: "grid gap-2", children: [
|
|
4881
|
+
/* @__PURE__ */ jsx18("span", { className: "text-[11px] font-medium leading-4 text-[var(--text-secondary)]", children: copy.t("labels.topicTitle") }),
|
|
4882
|
+
/* @__PURE__ */ jsx18(
|
|
4763
4883
|
Input3,
|
|
4764
4884
|
{
|
|
4765
4885
|
autoFocus: true,
|
|
@@ -4769,9 +4889,9 @@ function IssueManagerTopicDialog({
|
|
|
4769
4889
|
}
|
|
4770
4890
|
)
|
|
4771
4891
|
] }),
|
|
4772
|
-
/* @__PURE__ */
|
|
4773
|
-
/* @__PURE__ */
|
|
4774
|
-
/* @__PURE__ */
|
|
4892
|
+
/* @__PURE__ */ jsxs16("label", { className: "grid gap-2", children: [
|
|
4893
|
+
/* @__PURE__ */ jsx18("span", { className: "text-[11px] font-medium leading-4 text-[var(--text-secondary)]", children: copy.t("labels.topicSummary") }),
|
|
4894
|
+
/* @__PURE__ */ jsx18(
|
|
4775
4895
|
Textarea,
|
|
4776
4896
|
{
|
|
4777
4897
|
className: "min-h-24 resize-none",
|
|
@@ -4781,9 +4901,9 @@ function IssueManagerTopicDialog({
|
|
|
4781
4901
|
}
|
|
4782
4902
|
)
|
|
4783
4903
|
] }),
|
|
4784
|
-
/* @__PURE__ */
|
|
4785
|
-
/* @__PURE__ */
|
|
4786
|
-
|
|
4904
|
+
/* @__PURE__ */ jsxs16(DialogFooter, { className: "pt-2", children: [
|
|
4905
|
+
/* @__PURE__ */ jsx18(
|
|
4906
|
+
Button12,
|
|
4787
4907
|
{
|
|
4788
4908
|
size: "dialog",
|
|
4789
4909
|
type: "button",
|
|
@@ -4792,14 +4912,14 @@ function IssueManagerTopicDialog({
|
|
|
4792
4912
|
children: copy.t("actions.cancel")
|
|
4793
4913
|
}
|
|
4794
4914
|
),
|
|
4795
|
-
/* @__PURE__ */
|
|
4915
|
+
/* @__PURE__ */ jsx18(Button12, { disabled: !title, size: "dialog", type: "submit", children: copy.t("actions.saveTopic") })
|
|
4796
4916
|
] })
|
|
4797
4917
|
] })
|
|
4798
4918
|
] }) });
|
|
4799
4919
|
}
|
|
4800
4920
|
|
|
4801
4921
|
// src/ui/IssueManagerNode.tsx
|
|
4802
|
-
import { jsx as
|
|
4922
|
+
import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
4803
4923
|
function IssueManagerNode({
|
|
4804
4924
|
emptyIllustration,
|
|
4805
4925
|
feature,
|
|
@@ -4865,7 +4985,7 @@ function IssueManagerNode({
|
|
|
4865
4985
|
},
|
|
4866
4986
|
workspaceId
|
|
4867
4987
|
});
|
|
4868
|
-
return /* @__PURE__ */
|
|
4988
|
+
return /* @__PURE__ */ jsxs17(
|
|
4869
4989
|
"section",
|
|
4870
4990
|
{
|
|
4871
4991
|
"aria-label": controller.copy.t("title"),
|
|
@@ -4873,7 +4993,7 @@ function IssueManagerNode({
|
|
|
4873
4993
|
"data-issue-manager-node-id": nodeId,
|
|
4874
4994
|
"data-issue-manager-workspace-id": workspaceId,
|
|
4875
4995
|
children: [
|
|
4876
|
-
/* @__PURE__ */
|
|
4996
|
+
/* @__PURE__ */ jsx19(
|
|
4877
4997
|
IssueManagerShell,
|
|
4878
4998
|
{
|
|
4879
4999
|
controller,
|
|
@@ -4885,7 +5005,7 @@ function IssueManagerNode({
|
|
|
4885
5005
|
selectedTask
|
|
4886
5006
|
}
|
|
4887
5007
|
),
|
|
4888
|
-
/* @__PURE__ */
|
|
5008
|
+
/* @__PURE__ */ jsx19(
|
|
4889
5009
|
WorkspaceFileReferencePicker,
|
|
4890
5010
|
{
|
|
4891
5011
|
copy: controller.copy,
|
|
@@ -4926,7 +5046,7 @@ function IssueManagerNodeHeader({
|
|
|
4926
5046
|
nodeId,
|
|
4927
5047
|
workspaceId
|
|
4928
5048
|
});
|
|
4929
|
-
return /* @__PURE__ */
|
|
5049
|
+
return /* @__PURE__ */ jsxs17(
|
|
4930
5050
|
"header",
|
|
4931
5051
|
{
|
|
4932
5052
|
...headerProps,
|
|
@@ -4935,10 +5055,10 @@ function IssueManagerNodeHeader({
|
|
|
4935
5055
|
className
|
|
4936
5056
|
),
|
|
4937
5057
|
children: [
|
|
4938
|
-
/* @__PURE__ */
|
|
4939
|
-
/* @__PURE__ */
|
|
4940
|
-
/* @__PURE__ */
|
|
4941
|
-
|
|
5058
|
+
/* @__PURE__ */ jsxs17("div", { className: "z-10 flex min-w-0 items-center gap-2", children: [
|
|
5059
|
+
/* @__PURE__ */ jsx19("span", { className: "min-w-0 truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]", children: title?.trim() || copy.t("title") }),
|
|
5060
|
+
/* @__PURE__ */ jsx19(
|
|
5061
|
+
Button13,
|
|
4942
5062
|
{
|
|
4943
5063
|
"aria-label": toggleLabel,
|
|
4944
5064
|
className: "cursor-pointer rounded-md",
|
|
@@ -4954,17 +5074,17 @@ function IssueManagerNodeHeader({
|
|
|
4954
5074
|
},
|
|
4955
5075
|
onDoubleClick: (event) => event.stopPropagation(),
|
|
4956
5076
|
onPointerDown: (event) => event.stopPropagation(),
|
|
4957
|
-
children: /* @__PURE__ */
|
|
5077
|
+
children: /* @__PURE__ */ jsx19(PanelIcon, { className: "size-[18px]" })
|
|
4958
5078
|
}
|
|
4959
5079
|
)
|
|
4960
5080
|
] }),
|
|
4961
|
-
/* @__PURE__ */
|
|
5081
|
+
/* @__PURE__ */ jsx19("div", { className: "pointer-events-none absolute top-1/2 left-1/2 z-20 flex max-w-[220px] -translate-x-1/2 -translate-y-1/2 items-center justify-center", children: /* @__PURE__ */ jsx19(
|
|
4962
5082
|
"div",
|
|
4963
5083
|
{
|
|
4964
5084
|
className: "pointer-events-auto flex min-w-0 flex-none",
|
|
4965
5085
|
onDoubleClick: (event) => event.stopPropagation(),
|
|
4966
5086
|
onPointerDown: (event) => event.stopPropagation(),
|
|
4967
|
-
children: /* @__PURE__ */
|
|
5087
|
+
children: /* @__PURE__ */ jsx19(
|
|
4968
5088
|
IssueManagerTopicSelector,
|
|
4969
5089
|
{
|
|
4970
5090
|
activeTopicId: topicState.activeTopicId,
|
|
@@ -5003,7 +5123,7 @@ function IssueManagerNodeHeader({
|
|
|
5003
5123
|
)
|
|
5004
5124
|
}
|
|
5005
5125
|
) }),
|
|
5006
|
-
/* @__PURE__ */
|
|
5126
|
+
/* @__PURE__ */ jsx19(
|
|
5007
5127
|
"div",
|
|
5008
5128
|
{
|
|
5009
5129
|
className: "z-10 flex flex-none items-center gap-1",
|
|
@@ -5022,4 +5142,4 @@ export {
|
|
|
5022
5142
|
IssueManagerNode,
|
|
5023
5143
|
IssueManagerNodeHeader
|
|
5024
5144
|
};
|
|
5025
|
-
//# sourceMappingURL=chunk-
|
|
5145
|
+
//# sourceMappingURL=chunk-UXVTGSOH.js.map
|