@tutti-os/workspace-issue-manager 0.0.4 → 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-RJX54QWL.js → chunk-UXVTGSOH.js} +443 -345
- 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-RJX54QWL.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,31 +2688,41 @@ 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__ */
|
|
2704
|
+
return /* @__PURE__ */ jsxs7("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
|
|
2705
|
+
/* @__PURE__ */ jsx8(
|
|
2581
2706
|
ScrollArea2,
|
|
2582
2707
|
{
|
|
2583
2708
|
scrollbarMode: "native",
|
|
2584
2709
|
className: "min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain",
|
|
2585
|
-
children: /* @__PURE__ */
|
|
2586
|
-
/* @__PURE__ */
|
|
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(
|
|
2587
2712
|
"div",
|
|
2588
2713
|
{
|
|
2589
2714
|
className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
|
|
2590
|
-
children: /* @__PURE__ */
|
|
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") })
|
|
2591
2716
|
}
|
|
2592
2717
|
),
|
|
2593
|
-
/* @__PURE__ */
|
|
2594
|
-
/* @__PURE__ */
|
|
2718
|
+
/* @__PURE__ */ jsxs7("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
|
|
2719
|
+
/* @__PURE__ */ jsxs7(
|
|
2595
2720
|
"label",
|
|
2596
2721
|
{
|
|
2597
2722
|
className: `flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
|
|
2598
2723
|
children: [
|
|
2599
|
-
/* @__PURE__ */
|
|
2600
|
-
/* @__PURE__ */
|
|
2724
|
+
/* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.title") }),
|
|
2725
|
+
/* @__PURE__ */ jsx8(
|
|
2601
2726
|
IssueManagerDraftTitleInput,
|
|
2602
2727
|
{
|
|
2603
2728
|
placeholder: copy.t("composer.issueTitlePlaceholder"),
|
|
@@ -2608,13 +2733,13 @@ function IssueManagerIssuePane({
|
|
|
2608
2733
|
]
|
|
2609
2734
|
}
|
|
2610
2735
|
),
|
|
2611
|
-
/* @__PURE__ */
|
|
2736
|
+
/* @__PURE__ */ jsxs7(
|
|
2612
2737
|
"div",
|
|
2613
2738
|
{
|
|
2614
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}`,
|
|
2615
2740
|
children: [
|
|
2616
|
-
/* @__PURE__ */
|
|
2617
|
-
/* @__PURE__ */
|
|
2741
|
+
/* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.content") }),
|
|
2742
|
+
/* @__PURE__ */ jsx8(
|
|
2618
2743
|
IssueManagerRichTextTextarea,
|
|
2619
2744
|
{
|
|
2620
2745
|
controller,
|
|
@@ -2632,13 +2757,13 @@ function IssueManagerIssuePane({
|
|
|
2632
2757
|
] }) })
|
|
2633
2758
|
}
|
|
2634
2759
|
),
|
|
2635
|
-
/* @__PURE__ */
|
|
2760
|
+
/* @__PURE__ */ jsx8(
|
|
2636
2761
|
"div",
|
|
2637
2762
|
{
|
|
2638
2763
|
className: `shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
|
|
2639
|
-
children: /* @__PURE__ */
|
|
2640
|
-
/* @__PURE__ */
|
|
2641
|
-
|
|
2764
|
+
children: /* @__PURE__ */ jsxs7("div", { className: "flex items-center justify-end gap-3", children: [
|
|
2765
|
+
/* @__PURE__ */ jsx8(
|
|
2766
|
+
Button5,
|
|
2642
2767
|
{
|
|
2643
2768
|
size: "dialog",
|
|
2644
2769
|
type: "button",
|
|
@@ -2647,8 +2772,8 @@ function IssueManagerIssuePane({
|
|
|
2647
2772
|
children: copy.t("actions.cancel")
|
|
2648
2773
|
}
|
|
2649
2774
|
),
|
|
2650
|
-
/* @__PURE__ */
|
|
2651
|
-
|
|
2775
|
+
/* @__PURE__ */ jsx8(
|
|
2776
|
+
Button5,
|
|
2652
2777
|
{
|
|
2653
2778
|
disabled: isIssueTitleMissing,
|
|
2654
2779
|
size: "dialog",
|
|
@@ -2663,20 +2788,20 @@ function IssueManagerIssuePane({
|
|
|
2663
2788
|
] });
|
|
2664
2789
|
}
|
|
2665
2790
|
if (!selectedIssue) {
|
|
2666
|
-
return /* @__PURE__ */
|
|
2791
|
+
return /* @__PURE__ */ jsx8("div", { className: "h-full min-h-0" });
|
|
2667
2792
|
}
|
|
2668
|
-
return /* @__PURE__ */
|
|
2793
|
+
return /* @__PURE__ */ jsx8("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: /* @__PURE__ */ jsx8(
|
|
2669
2794
|
ScrollArea2,
|
|
2670
2795
|
{
|
|
2671
2796
|
scrollbarMode: "native",
|
|
2672
2797
|
className: "min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain",
|
|
2673
|
-
children: /* @__PURE__ */
|
|
2674
|
-
/* @__PURE__ */
|
|
2675
|
-
/* @__PURE__ */
|
|
2676
|
-
/* @__PURE__ */
|
|
2677
|
-
/* @__PURE__ */
|
|
2678
|
-
/* @__PURE__ */
|
|
2679
|
-
|
|
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,
|
|
2680
2805
|
{
|
|
2681
2806
|
type: "button",
|
|
2682
2807
|
variant: "ghost",
|
|
@@ -2684,8 +2809,8 @@ function IssueManagerIssuePane({
|
|
|
2684
2809
|
children: copy.t("actions.edit")
|
|
2685
2810
|
}
|
|
2686
2811
|
),
|
|
2687
|
-
/* @__PURE__ */
|
|
2688
|
-
|
|
2812
|
+
/* @__PURE__ */ jsx8(
|
|
2813
|
+
Button5,
|
|
2689
2814
|
{
|
|
2690
2815
|
className: "text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
|
|
2691
2816
|
type: "button",
|
|
@@ -2696,8 +2821,8 @@ function IssueManagerIssuePane({
|
|
|
2696
2821
|
)
|
|
2697
2822
|
] })
|
|
2698
2823
|
] }),
|
|
2699
|
-
/* @__PURE__ */
|
|
2700
|
-
/* @__PURE__ */
|
|
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(
|
|
2701
2826
|
Badge2,
|
|
2702
2827
|
{
|
|
2703
2828
|
variant: issueManagerStatusBadgeVariant(
|
|
@@ -2706,33 +2831,40 @@ function IssueManagerIssuePane({
|
|
|
2706
2831
|
children: resolveIssueManagerStatusLabel(copy, selectedIssue.status)
|
|
2707
2832
|
}
|
|
2708
2833
|
),
|
|
2709
|
-
/* @__PURE__ */
|
|
2834
|
+
/* @__PURE__ */ jsx8(
|
|
2710
2835
|
"span",
|
|
2711
2836
|
{
|
|
2712
2837
|
"aria-hidden": "true",
|
|
2713
2838
|
className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
|
|
2714
2839
|
}
|
|
2715
2840
|
),
|
|
2716
|
-
/* @__PURE__ */
|
|
2841
|
+
/* @__PURE__ */ jsxs7("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
|
|
2717
2842
|
copy.t("labels.creator"),
|
|
2718
2843
|
" ",
|
|
2719
2844
|
resolveIssueManagerCreatorLabel(selectedIssue)
|
|
2720
2845
|
] }),
|
|
2721
|
-
/* @__PURE__ */
|
|
2846
|
+
/* @__PURE__ */ jsx8(
|
|
2722
2847
|
"span",
|
|
2723
2848
|
{
|
|
2724
2849
|
"aria-hidden": "true",
|
|
2725
2850
|
className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
|
|
2726
2851
|
}
|
|
2727
2852
|
),
|
|
2728
|
-
/* @__PURE__ */
|
|
2853
|
+
/* @__PURE__ */ jsxs7("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
|
|
2729
2854
|
copy.t("labels.createdAt"),
|
|
2730
2855
|
" ",
|
|
2731
2856
|
formatIssueManagerTimestamp(selectedIssue.createdAtUnix) || "-"
|
|
2732
2857
|
] })
|
|
2733
|
-
] })
|
|
2858
|
+
] }),
|
|
2859
|
+
issueAcceptanceTaskId ? /* @__PURE__ */ jsx8(
|
|
2860
|
+
IssueManagerTaskAcceptanceCard,
|
|
2861
|
+
{
|
|
2862
|
+
controller,
|
|
2863
|
+
taskId: issueAcceptanceTaskId
|
|
2864
|
+
}
|
|
2865
|
+
) : null
|
|
2734
2866
|
] }),
|
|
2735
|
-
/* @__PURE__ */
|
|
2867
|
+
/* @__PURE__ */ jsx8(
|
|
2736
2868
|
ConfirmationDialog,
|
|
2737
2869
|
{
|
|
2738
2870
|
cancelLabel: copy.t("actions.cancel"),
|
|
@@ -2752,7 +2884,7 @@ function IssueManagerIssuePane({
|
|
|
2752
2884
|
onOpenChange: setDeleteDialogOpen
|
|
2753
2885
|
}
|
|
2754
2886
|
),
|
|
2755
|
-
/* @__PURE__ */
|
|
2887
|
+
/* @__PURE__ */ jsx8(
|
|
2756
2888
|
IssueManagerDescriptionSection,
|
|
2757
2889
|
{
|
|
2758
2890
|
content: issueContent,
|
|
@@ -2762,7 +2894,7 @@ function IssueManagerIssuePane({
|
|
|
2762
2894
|
variant: "plain"
|
|
2763
2895
|
}
|
|
2764
2896
|
),
|
|
2765
|
-
/* @__PURE__ */
|
|
2897
|
+
/* @__PURE__ */ jsx8(
|
|
2766
2898
|
IssueManagerLatestRunStatusSection,
|
|
2767
2899
|
{
|
|
2768
2900
|
copy,
|
|
@@ -2772,7 +2904,7 @@ function IssueManagerIssuePane({
|
|
|
2772
2904
|
title: selectedTask?.title ?? selectedIssue.title
|
|
2773
2905
|
}
|
|
2774
2906
|
),
|
|
2775
|
-
/* @__PURE__ */
|
|
2907
|
+
/* @__PURE__ */ jsx8(
|
|
2776
2908
|
IssueManagerOutputSection,
|
|
2777
2909
|
{
|
|
2778
2910
|
copy,
|
|
@@ -2780,14 +2912,14 @@ function IssueManagerIssuePane({
|
|
|
2780
2912
|
onOpen: controller.openReference
|
|
2781
2913
|
}
|
|
2782
2914
|
),
|
|
2783
|
-
/* @__PURE__ */
|
|
2915
|
+
/* @__PURE__ */ jsx8(
|
|
2784
2916
|
IssueManagerSubtaskSection,
|
|
2785
2917
|
{
|
|
2786
2918
|
copy,
|
|
2787
2919
|
onCreate: controller.createTaskDraft,
|
|
2788
2920
|
onSelectTask: controller.selectTask,
|
|
2789
2921
|
selectedTaskId: selectedTask?.taskId ?? null,
|
|
2790
|
-
tasks
|
|
2922
|
+
tasks: visibleTasks
|
|
2791
2923
|
}
|
|
2792
2924
|
)
|
|
2793
2925
|
] }) })
|
|
@@ -2796,13 +2928,13 @@ function IssueManagerIssuePane({
|
|
|
2796
2928
|
}
|
|
2797
2929
|
|
|
2798
2930
|
// src/ui/internal/shell/IssueManagerBottomBar.tsx
|
|
2799
|
-
import { Button as
|
|
2931
|
+
import { Button as Button7, cn as cn5 } from "@tutti-os/ui-system";
|
|
2800
2932
|
|
|
2801
2933
|
// src/ui/internal/task/IssueManagerRunSections.tsx
|
|
2802
2934
|
import {
|
|
2803
2935
|
Badge as Badge3,
|
|
2804
2936
|
AgentSessionsIcon as AgentSessionsIcon2,
|
|
2805
|
-
Button as
|
|
2937
|
+
Button as Button6,
|
|
2806
2938
|
CheckIcon,
|
|
2807
2939
|
ChevronDownIcon,
|
|
2808
2940
|
DropdownMenu,
|
|
@@ -2813,7 +2945,7 @@ import {
|
|
|
2813
2945
|
cn as cn4
|
|
2814
2946
|
} from "@tutti-os/ui-system";
|
|
2815
2947
|
import { WorkspaceUserProjectSelect } from "@tutti-os/workspace-user-project/ui";
|
|
2816
|
-
import { Fragment, jsx as
|
|
2948
|
+
import { Fragment, jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
2817
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)]";
|
|
2818
2950
|
var providerMenuItemCheckClassName = "pointer-events-none absolute right-2 top-1/2 shrink-0 -translate-y-1/2";
|
|
2819
2951
|
var providerActionTriggerClassName = "font-[var(--font-weight-emphasis-cjk)]";
|
|
@@ -2823,12 +2955,12 @@ function IssueManagerRunActionTrigger({
|
|
|
2823
2955
|
triggerClassName,
|
|
2824
2956
|
triggerVariant = "default"
|
|
2825
2957
|
}) {
|
|
2826
|
-
return /* @__PURE__ */
|
|
2958
|
+
return /* @__PURE__ */ jsx9(
|
|
2827
2959
|
IssueManagerProviderActionMenu,
|
|
2828
2960
|
{
|
|
2829
2961
|
controller,
|
|
2830
2962
|
disabled,
|
|
2831
|
-
icon: /* @__PURE__ */
|
|
2963
|
+
icon: /* @__PURE__ */ jsx9(AgentSessionsIcon2, { size: 16 }),
|
|
2832
2964
|
label: controller.copy.t("actions.askAgentToRun"),
|
|
2833
2965
|
triggerClassName,
|
|
2834
2966
|
triggerVariant,
|
|
@@ -2842,12 +2974,12 @@ function IssueManagerBreakdownActionTrigger({
|
|
|
2842
2974
|
triggerClassName,
|
|
2843
2975
|
triggerVariant = "default"
|
|
2844
2976
|
}) {
|
|
2845
|
-
return /* @__PURE__ */
|
|
2977
|
+
return /* @__PURE__ */ jsx9(
|
|
2846
2978
|
IssueManagerProviderActionMenu,
|
|
2847
2979
|
{
|
|
2848
2980
|
controller,
|
|
2849
2981
|
disabled,
|
|
2850
|
-
icon: /* @__PURE__ */
|
|
2982
|
+
icon: /* @__PURE__ */ jsx9(IssueIcon, { size: 16 }),
|
|
2851
2983
|
label: controller.copy.t("actions.askAgentToBreakdown"),
|
|
2852
2984
|
triggerClassName,
|
|
2853
2985
|
triggerVariant,
|
|
@@ -2868,9 +3000,9 @@ function IssueManagerProviderActionMenu({
|
|
|
2868
3000
|
}) {
|
|
2869
3001
|
const providerOptions = controller.providerOptions;
|
|
2870
3002
|
const selectedProvider = controller.nodeState.selectedAgentProvider.trim();
|
|
2871
|
-
return /* @__PURE__ */
|
|
2872
|
-
/* @__PURE__ */
|
|
2873
|
-
|
|
3003
|
+
return /* @__PURE__ */ jsxs8(DropdownMenu, { children: [
|
|
3004
|
+
/* @__PURE__ */ jsx9(DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ jsxs8(
|
|
3005
|
+
Button6,
|
|
2874
3006
|
{
|
|
2875
3007
|
className: cn4(
|
|
2876
3008
|
"min-w-0",
|
|
@@ -2884,8 +3016,8 @@ function IssueManagerProviderActionMenu({
|
|
|
2884
3016
|
variant: triggerButtonVariant,
|
|
2885
3017
|
children: [
|
|
2886
3018
|
icon,
|
|
2887
|
-
/* @__PURE__ */
|
|
2888
|
-
/* @__PURE__ */
|
|
3019
|
+
/* @__PURE__ */ jsx9("span", { className: "truncate", children: label }),
|
|
3020
|
+
/* @__PURE__ */ jsx9(
|
|
2889
3021
|
ChevronDownIcon,
|
|
2890
3022
|
{
|
|
2891
3023
|
className: "shrink-0 transition-transform duration-200",
|
|
@@ -2896,13 +3028,13 @@ function IssueManagerProviderActionMenu({
|
|
|
2896
3028
|
]
|
|
2897
3029
|
}
|
|
2898
3030
|
) }),
|
|
2899
|
-
/* @__PURE__ */
|
|
3031
|
+
/* @__PURE__ */ jsx9(
|
|
2900
3032
|
DropdownMenuContent,
|
|
2901
3033
|
{
|
|
2902
3034
|
align: "end",
|
|
2903
3035
|
className: "w-[220px] min-w-[220px]",
|
|
2904
3036
|
style: { zIndex: "var(--z-panel-popover)" },
|
|
2905
|
-
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(
|
|
2906
3038
|
DropdownMenuItem,
|
|
2907
3039
|
{
|
|
2908
3040
|
className: providerMenuItemClassName,
|
|
@@ -2911,16 +3043,16 @@ function IssueManagerProviderActionMenu({
|
|
|
2911
3043
|
onSelect: () => {
|
|
2912
3044
|
void onSelectProvider(option.provider);
|
|
2913
3045
|
},
|
|
2914
|
-
children: /* @__PURE__ */
|
|
2915
|
-
/* @__PURE__ */
|
|
3046
|
+
children: /* @__PURE__ */ jsxs8("span", { className: "flex min-w-0 flex-1 items-center gap-2 pr-1", children: [
|
|
3047
|
+
/* @__PURE__ */ jsx9(
|
|
2916
3048
|
IssueManagerAgentProviderIcon,
|
|
2917
3049
|
{
|
|
2918
|
-
fallbackIcon: /* @__PURE__ */
|
|
3050
|
+
fallbackIcon: /* @__PURE__ */ jsx9(AgentSessionsIcon2, { "aria-hidden": true, size: 15 }),
|
|
2919
3051
|
iconUrl: option.iconUrl
|
|
2920
3052
|
}
|
|
2921
3053
|
),
|
|
2922
|
-
/* @__PURE__ */
|
|
2923
|
-
option.provider === selectedProvider ? /* @__PURE__ */
|
|
3054
|
+
/* @__PURE__ */ jsx9("span", { className: "min-w-0 flex-1 truncate", children: option.label }),
|
|
3055
|
+
option.provider === selectedProvider ? /* @__PURE__ */ jsx9(
|
|
2924
3056
|
CheckIcon,
|
|
2925
3057
|
{
|
|
2926
3058
|
className: providerMenuItemCheckClassName,
|
|
@@ -2941,9 +3073,9 @@ function IssueManagerAgentProviderIcon({
|
|
|
2941
3073
|
}) {
|
|
2942
3074
|
const normalizedIconUrl = iconUrl?.trim();
|
|
2943
3075
|
if (!normalizedIconUrl) {
|
|
2944
|
-
return /* @__PURE__ */
|
|
3076
|
+
return /* @__PURE__ */ jsx9(Fragment, { children: fallbackIcon });
|
|
2945
3077
|
}
|
|
2946
|
-
return /* @__PURE__ */
|
|
3078
|
+
return /* @__PURE__ */ jsx9(
|
|
2947
3079
|
"img",
|
|
2948
3080
|
{
|
|
2949
3081
|
alt: "",
|
|
@@ -2963,7 +3095,7 @@ function IssueManagerExecutionDirectoryTrigger({
|
|
|
2963
3095
|
if (!controller.canSelectExecutionDirectory) {
|
|
2964
3096
|
return null;
|
|
2965
3097
|
}
|
|
2966
|
-
return /* @__PURE__ */
|
|
3098
|
+
return /* @__PURE__ */ jsx9(
|
|
2967
3099
|
WorkspaceUserProjectSelect,
|
|
2968
3100
|
{
|
|
2969
3101
|
classNames: {
|
|
@@ -3021,7 +3153,7 @@ function isIssueManagerRunControlDisabled(input) {
|
|
|
3021
3153
|
}
|
|
3022
3154
|
|
|
3023
3155
|
// src/ui/internal/shell/IssueManagerBottomBar.tsx
|
|
3024
|
-
import { jsx as
|
|
3156
|
+
import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
3025
3157
|
function IssueManagerBottomBar({
|
|
3026
3158
|
controller,
|
|
3027
3159
|
isNarrowLayout,
|
|
@@ -3036,7 +3168,7 @@ function IssueManagerBottomBar({
|
|
|
3036
3168
|
selectedIssueStatus: selectedIssue.status,
|
|
3037
3169
|
selectedTaskStatus: null
|
|
3038
3170
|
});
|
|
3039
|
-
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(
|
|
3040
3172
|
"div",
|
|
3041
3173
|
{
|
|
3042
3174
|
className: cn5(
|
|
@@ -3044,7 +3176,7 @@ function IssueManagerBottomBar({
|
|
|
3044
3176
|
isNarrowLayout ? "flex-wrap items-center justify-end" : "items-center justify-end"
|
|
3045
3177
|
),
|
|
3046
3178
|
children: [
|
|
3047
|
-
/* @__PURE__ */
|
|
3179
|
+
/* @__PURE__ */ jsx10(
|
|
3048
3180
|
IssueManagerExecutionDirectoryTrigger,
|
|
3049
3181
|
{
|
|
3050
3182
|
className: "mr-auto min-w-0 max-w-[240px] justify-start overflow-hidden",
|
|
@@ -3052,8 +3184,8 @@ function IssueManagerBottomBar({
|
|
|
3052
3184
|
disabled: runControlsDisabled
|
|
3053
3185
|
}
|
|
3054
3186
|
),
|
|
3055
|
-
/* @__PURE__ */
|
|
3056
|
-
/* @__PURE__ */
|
|
3187
|
+
/* @__PURE__ */ jsxs9("div", { className: "flex shrink-0 flex-nowrap items-center justify-end gap-3", children: [
|
|
3188
|
+
/* @__PURE__ */ jsx10(
|
|
3057
3189
|
IssueManagerBreakdownActionTrigger,
|
|
3058
3190
|
{
|
|
3059
3191
|
controller,
|
|
@@ -3061,7 +3193,7 @@ function IssueManagerBottomBar({
|
|
|
3061
3193
|
triggerVariant: "button"
|
|
3062
3194
|
}
|
|
3063
3195
|
),
|
|
3064
|
-
/* @__PURE__ */
|
|
3196
|
+
/* @__PURE__ */ jsx10(
|
|
3065
3197
|
IssueManagerRunActionTrigger,
|
|
3066
3198
|
{
|
|
3067
3199
|
controller,
|
|
@@ -3069,8 +3201,8 @@ function IssueManagerBottomBar({
|
|
|
3069
3201
|
triggerVariant: "button"
|
|
3070
3202
|
}
|
|
3071
3203
|
),
|
|
3072
|
-
controller.canInviteCollaborators ? /* @__PURE__ */
|
|
3073
|
-
|
|
3204
|
+
controller.canInviteCollaborators ? /* @__PURE__ */ jsx10(
|
|
3205
|
+
Button7,
|
|
3074
3206
|
{
|
|
3075
3207
|
className: "px-4",
|
|
3076
3208
|
disabled: !selectedIssue,
|
|
@@ -3090,12 +3222,12 @@ function IssueManagerBottomBar({
|
|
|
3090
3222
|
|
|
3091
3223
|
// src/ui/internal/shell/IssueManagerFloatingNotice.tsx
|
|
3092
3224
|
import { ToastProvider, ToastRoot, ToastTitle } from "@tutti-os/ui-system";
|
|
3093
|
-
import { jsx as
|
|
3225
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
3094
3226
|
function IssueManagerFloatingNotice({
|
|
3095
3227
|
notice
|
|
3096
3228
|
}) {
|
|
3097
3229
|
const variant = notice.tone === "destructive" ? "destructive" : "default";
|
|
3098
|
-
return /* @__PURE__ */
|
|
3230
|
+
return /* @__PURE__ */ jsx11(ToastProvider, { children: /* @__PURE__ */ jsx11(
|
|
3099
3231
|
ToastRoot,
|
|
3100
3232
|
{
|
|
3101
3233
|
open: true,
|
|
@@ -3104,7 +3236,7 @@ function IssueManagerFloatingNotice({
|
|
|
3104
3236
|
className: "z-30 w-fit max-w-[min(72vw,40rem)] px-4 py-3 shadow-lg",
|
|
3105
3237
|
nodeInsetTopPx: 16,
|
|
3106
3238
|
variant,
|
|
3107
|
-
children: /* @__PURE__ */
|
|
3239
|
+
children: /* @__PURE__ */ jsx11(ToastTitle, { className: "whitespace-normal [overflow-wrap:anywhere]", children: notice.title })
|
|
3108
3240
|
},
|
|
3109
3241
|
notice.id
|
|
3110
3242
|
) });
|
|
@@ -3117,7 +3249,7 @@ import { cn as cn7 } from "@tutti-os/ui-system";
|
|
|
3117
3249
|
import { useComposedInputValue as useComposedInputValue2 } from "@tutti-os/ui-react-hooks";
|
|
3118
3250
|
import {
|
|
3119
3251
|
Badge as Badge4,
|
|
3120
|
-
Button as
|
|
3252
|
+
Button as Button8,
|
|
3121
3253
|
CloseIcon,
|
|
3122
3254
|
FileCreateIcon as FileCreateIcon3,
|
|
3123
3255
|
Input as Input2,
|
|
@@ -3189,7 +3321,7 @@ function mapIssueManagerStatusCounts(counts) {
|
|
|
3189
3321
|
canceled: counts.canceled,
|
|
3190
3322
|
completed: counts.completed,
|
|
3191
3323
|
failed: counts.failed,
|
|
3192
|
-
in_progress:
|
|
3324
|
+
in_progress: counts.inProgress,
|
|
3193
3325
|
not_started: counts.notStarted,
|
|
3194
3326
|
pending_acceptance: counts.pendingAcceptance,
|
|
3195
3327
|
running: counts.running
|
|
@@ -3208,7 +3340,7 @@ function resolveIssueManagerShellContentViewState(input) {
|
|
|
3208
3340
|
}
|
|
3209
3341
|
|
|
3210
3342
|
// src/ui/internal/shell/IssueManagerSidebarSections.tsx
|
|
3211
|
-
import { jsx as
|
|
3343
|
+
import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
3212
3344
|
function IssueManagerSidebarHeader({
|
|
3213
3345
|
copy,
|
|
3214
3346
|
issueSearchQuery,
|
|
@@ -3216,8 +3348,8 @@ function IssueManagerSidebarHeader({
|
|
|
3216
3348
|
onIssueSearchUsage,
|
|
3217
3349
|
onIssueSearchQueryChange
|
|
3218
3350
|
}) {
|
|
3219
|
-
return /* @__PURE__ */
|
|
3220
|
-
/* @__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(
|
|
3221
3353
|
IssueManagerSearchField,
|
|
3222
3354
|
{
|
|
3223
3355
|
clearLabel: copy.t("actions.clearSearch"),
|
|
@@ -3227,8 +3359,8 @@ function IssueManagerSidebarHeader({
|
|
|
3227
3359
|
onSearchUsage: onIssueSearchUsage
|
|
3228
3360
|
}
|
|
3229
3361
|
),
|
|
3230
|
-
/* @__PURE__ */
|
|
3231
|
-
|
|
3362
|
+
/* @__PURE__ */ jsxs10(
|
|
3363
|
+
Button8,
|
|
3232
3364
|
{
|
|
3233
3365
|
className: "gap-2 px-3",
|
|
3234
3366
|
size: "dialog",
|
|
@@ -3236,7 +3368,7 @@ function IssueManagerSidebarHeader({
|
|
|
3236
3368
|
variant: "secondary",
|
|
3237
3369
|
onClick: onCreateIssue,
|
|
3238
3370
|
children: [
|
|
3239
|
-
/* @__PURE__ */
|
|
3371
|
+
/* @__PURE__ */ jsx12(FileCreateIcon3, { size: 16 }),
|
|
3240
3372
|
copy.t("actions.createIssue")
|
|
3241
3373
|
]
|
|
3242
3374
|
}
|
|
@@ -3249,7 +3381,7 @@ function IssueManagerSidebarStatusTabs({
|
|
|
3249
3381
|
statusCounts,
|
|
3250
3382
|
onIssueStatusFilterChange
|
|
3251
3383
|
}) {
|
|
3252
|
-
return /* @__PURE__ */
|
|
3384
|
+
return /* @__PURE__ */ jsx12(
|
|
3253
3385
|
UnderlineTabs,
|
|
3254
3386
|
{
|
|
3255
3387
|
ariaLabel: copy.t("labels.status"),
|
|
@@ -3274,19 +3406,19 @@ function IssueManagerSidebarBody({
|
|
|
3274
3406
|
onRetry,
|
|
3275
3407
|
onSelectIssue
|
|
3276
3408
|
}) {
|
|
3277
|
-
return /* @__PURE__ */
|
|
3409
|
+
return /* @__PURE__ */ jsx12(
|
|
3278
3410
|
ScrollArea3,
|
|
3279
3411
|
{
|
|
3280
3412
|
scrollbarMode: "native",
|
|
3281
3413
|
className: cn6("min-h-0", isNarrowLayout ? "flex-none" : "h-full flex-1"),
|
|
3282
|
-
children: /* @__PURE__ */
|
|
3414
|
+
children: /* @__PURE__ */ jsx12(
|
|
3283
3415
|
"div",
|
|
3284
3416
|
{
|
|
3285
3417
|
className: cn6(
|
|
3286
3418
|
"flex min-h-full flex-col gap-2.5 px-4 pt-1.5 pb-4",
|
|
3287
3419
|
isNarrowLayout ? "min-h-0" : "h-full"
|
|
3288
3420
|
),
|
|
3289
|
-
children: sidebarViewState.kind === "loading" ? /* @__PURE__ */
|
|
3421
|
+
children: sidebarViewState.kind === "loading" ? /* @__PURE__ */ jsx12(IssueManagerSidebarLoadingState, { isNarrowLayout }) : sidebarViewState.kind === "error" ? /* @__PURE__ */ jsx12(
|
|
3290
3422
|
IssueManagerSidebarErrorState,
|
|
3291
3423
|
{
|
|
3292
3424
|
isNarrowLayout,
|
|
@@ -3294,14 +3426,14 @@ function IssueManagerSidebarBody({
|
|
|
3294
3426
|
title: sidebarViewState.title,
|
|
3295
3427
|
onRetry
|
|
3296
3428
|
}
|
|
3297
|
-
) : sidebarViewState.kind === "empty" ? /* @__PURE__ */
|
|
3429
|
+
) : sidebarViewState.kind === "empty" ? /* @__PURE__ */ jsx12(
|
|
3298
3430
|
IssueManagerSidebarEmptyState,
|
|
3299
3431
|
{
|
|
3300
3432
|
body: sidebarViewState.body,
|
|
3301
3433
|
isNarrowLayout,
|
|
3302
3434
|
title: sidebarViewState.title
|
|
3303
3435
|
}
|
|
3304
|
-
) : /* @__PURE__ */
|
|
3436
|
+
) : /* @__PURE__ */ jsx12(
|
|
3305
3437
|
IssueManagerSidebarIssueList,
|
|
3306
3438
|
{
|
|
3307
3439
|
copy,
|
|
@@ -3325,7 +3457,7 @@ function IssueManagerSidebarStandalonePane({
|
|
|
3325
3457
|
onRetry
|
|
3326
3458
|
}) {
|
|
3327
3459
|
if (kind === "error" && retryLabel) {
|
|
3328
|
-
return /* @__PURE__ */
|
|
3460
|
+
return /* @__PURE__ */ jsx12(
|
|
3329
3461
|
IssueManagerSidebarErrorState,
|
|
3330
3462
|
{
|
|
3331
3463
|
isNarrowLayout,
|
|
@@ -3335,7 +3467,7 @@ function IssueManagerSidebarStandalonePane({
|
|
|
3335
3467
|
}
|
|
3336
3468
|
);
|
|
3337
3469
|
}
|
|
3338
|
-
return /* @__PURE__ */
|
|
3470
|
+
return /* @__PURE__ */ jsx12(
|
|
3339
3471
|
IssueManagerSidebarEmptyState,
|
|
3340
3472
|
{
|
|
3341
3473
|
body: body ?? "",
|
|
@@ -3352,13 +3484,13 @@ function IssueManagerSearchField({
|
|
|
3352
3484
|
value
|
|
3353
3485
|
}) {
|
|
3354
3486
|
const searchInput = useComposedInputValue2({ onCommit: onChange, value });
|
|
3355
|
-
return /* @__PURE__ */
|
|
3487
|
+
return /* @__PURE__ */ jsxs10(
|
|
3356
3488
|
"div",
|
|
3357
3489
|
{
|
|
3358
3490
|
className: "relative min-w-0 flex-1",
|
|
3359
3491
|
"data-has-value": searchInput.value ? "true" : "false",
|
|
3360
3492
|
children: [
|
|
3361
|
-
/* @__PURE__ */
|
|
3493
|
+
/* @__PURE__ */ jsx12(
|
|
3362
3494
|
Input2,
|
|
3363
3495
|
{
|
|
3364
3496
|
"aria-label": placeholder,
|
|
@@ -3379,7 +3511,7 @@ function IssueManagerSearchField({
|
|
|
3379
3511
|
onCompositionStart: searchInput.onCompositionStart
|
|
3380
3512
|
}
|
|
3381
3513
|
),
|
|
3382
|
-
searchInput.value ? /* @__PURE__ */
|
|
3514
|
+
searchInput.value ? /* @__PURE__ */ jsx12(
|
|
3383
3515
|
"button",
|
|
3384
3516
|
{
|
|
3385
3517
|
"aria-label": clearLabel,
|
|
@@ -3387,7 +3519,7 @@ function IssueManagerSearchField({
|
|
|
3387
3519
|
type: "button",
|
|
3388
3520
|
onClick: searchInput.clearValue,
|
|
3389
3521
|
onMouseDown: (event) => event.preventDefault(),
|
|
3390
|
-
children: /* @__PURE__ */
|
|
3522
|
+
children: /* @__PURE__ */ jsx12(CloseIcon, { className: "size-3.5" })
|
|
3391
3523
|
}
|
|
3392
3524
|
) : null
|
|
3393
3525
|
]
|
|
@@ -3401,14 +3533,14 @@ function IssueManagerSidebarIssueList({
|
|
|
3401
3533
|
selectedIssueId,
|
|
3402
3534
|
onSelectIssue
|
|
3403
3535
|
}) {
|
|
3404
|
-
return /* @__PURE__ */
|
|
3536
|
+
return /* @__PURE__ */ jsx12(
|
|
3405
3537
|
"div",
|
|
3406
3538
|
{
|
|
3407
3539
|
className: cn6(
|
|
3408
3540
|
"flex gap-2.5",
|
|
3409
3541
|
isNarrowLayout ? "flex-row flex-nowrap items-start overflow-x-auto overflow-y-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:hidden" : "flex-col"
|
|
3410
3542
|
),
|
|
3411
|
-
children: issues.map((issue) => /* @__PURE__ */
|
|
3543
|
+
children: issues.map((issue) => /* @__PURE__ */ jsx12(
|
|
3412
3544
|
IssueManagerSidebarItem,
|
|
3413
3545
|
{
|
|
3414
3546
|
copy,
|
|
@@ -3429,7 +3561,7 @@ function IssueManagerSidebarItem({
|
|
|
3429
3561
|
onSelect,
|
|
3430
3562
|
selected
|
|
3431
3563
|
}) {
|
|
3432
|
-
return /* @__PURE__ */
|
|
3564
|
+
return /* @__PURE__ */ jsxs10(
|
|
3433
3565
|
"button",
|
|
3434
3566
|
{
|
|
3435
3567
|
className: cn6(
|
|
@@ -3440,7 +3572,7 @@ function IssueManagerSidebarItem({
|
|
|
3440
3572
|
type: "button",
|
|
3441
3573
|
onClick: () => onSelect(issue.issueId),
|
|
3442
3574
|
children: [
|
|
3443
|
-
/* @__PURE__ */
|
|
3575
|
+
/* @__PURE__ */ jsx12(
|
|
3444
3576
|
Badge4,
|
|
3445
3577
|
{
|
|
3446
3578
|
className: "absolute top-3.5 right-3.5",
|
|
@@ -3448,11 +3580,11 @@ function IssueManagerSidebarItem({
|
|
|
3448
3580
|
children: resolveIssueManagerStatusLabel(copy, issue.status)
|
|
3449
3581
|
}
|
|
3450
3582
|
),
|
|
3451
|
-
/* @__PURE__ */
|
|
3452
|
-
/* @__PURE__ */
|
|
3453
|
-
/* @__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 })
|
|
3454
3586
|
] }),
|
|
3455
|
-
/* @__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 }) })
|
|
3456
3588
|
]
|
|
3457
3589
|
}
|
|
3458
3590
|
);
|
|
@@ -3460,7 +3592,7 @@ function IssueManagerSidebarItem({
|
|
|
3460
3592
|
function IssueManagerSidebarLoadingState({
|
|
3461
3593
|
isNarrowLayout
|
|
3462
3594
|
}) {
|
|
3463
|
-
return /* @__PURE__ */
|
|
3595
|
+
return /* @__PURE__ */ jsx12(
|
|
3464
3596
|
"div",
|
|
3465
3597
|
{
|
|
3466
3598
|
"aria-hidden": "true",
|
|
@@ -3468,7 +3600,7 @@ function IssueManagerSidebarLoadingState({
|
|
|
3468
3600
|
"gap-2.5",
|
|
3469
3601
|
isNarrowLayout ? "flex flex-row flex-nowrap overflow-x-hidden" : "grid"
|
|
3470
3602
|
),
|
|
3471
|
-
children: Array.from({ length: 4 }, (_, index) => /* @__PURE__ */
|
|
3603
|
+
children: Array.from({ length: 4 }, (_, index) => /* @__PURE__ */ jsxs10(
|
|
3472
3604
|
"div",
|
|
3473
3605
|
{
|
|
3474
3606
|
className: cn6(
|
|
@@ -3476,9 +3608,9 @@ function IssueManagerSidebarLoadingState({
|
|
|
3476
3608
|
isNarrowLayout && "h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)]"
|
|
3477
3609
|
),
|
|
3478
3610
|
children: [
|
|
3479
|
-
/* @__PURE__ */
|
|
3480
|
-
/* @__PURE__ */
|
|
3481
|
-
/* @__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)]" })
|
|
3482
3614
|
]
|
|
3483
3615
|
},
|
|
3484
3616
|
index
|
|
@@ -3491,14 +3623,14 @@ function IssueManagerSidebarEmptyState({
|
|
|
3491
3623
|
title,
|
|
3492
3624
|
tone = "default"
|
|
3493
3625
|
}) {
|
|
3494
|
-
return /* @__PURE__ */
|
|
3626
|
+
return /* @__PURE__ */ jsx12(
|
|
3495
3627
|
"div",
|
|
3496
3628
|
{
|
|
3497
3629
|
className: cn6(
|
|
3498
3630
|
"relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden p-0 text-center",
|
|
3499
3631
|
isNarrowLayout ? "h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]" : "min-h-full"
|
|
3500
3632
|
),
|
|
3501
|
-
children: /* @__PURE__ */
|
|
3633
|
+
children: /* @__PURE__ */ jsx12(
|
|
3502
3634
|
"p",
|
|
3503
3635
|
{
|
|
3504
3636
|
className: cn6(
|
|
@@ -3517,7 +3649,7 @@ function IssueManagerSidebarErrorState({
|
|
|
3517
3649
|
title,
|
|
3518
3650
|
onRetry
|
|
3519
3651
|
}) {
|
|
3520
|
-
return /* @__PURE__ */
|
|
3652
|
+
return /* @__PURE__ */ jsxs10(
|
|
3521
3653
|
"div",
|
|
3522
3654
|
{
|
|
3523
3655
|
className: cn6(
|
|
@@ -3525,9 +3657,9 @@ function IssueManagerSidebarErrorState({
|
|
|
3525
3657
|
isNarrowLayout ? "h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]" : "min-h-full"
|
|
3526
3658
|
),
|
|
3527
3659
|
children: [
|
|
3528
|
-
/* @__PURE__ */
|
|
3529
|
-
/* @__PURE__ */
|
|
3530
|
-
|
|
3660
|
+
/* @__PURE__ */ jsx12("p", { className: "text-[13px] font-semibold leading-5 text-[var(--state-danger)]", children: title }),
|
|
3661
|
+
/* @__PURE__ */ jsx12(
|
|
3662
|
+
Button8,
|
|
3531
3663
|
{
|
|
3532
3664
|
className: "mt-3",
|
|
3533
3665
|
size: "sm",
|
|
@@ -3566,7 +3698,7 @@ function resolveIssueManagerSidebarPresentationState(input) {
|
|
|
3566
3698
|
}
|
|
3567
3699
|
|
|
3568
3700
|
// src/ui/internal/shell/IssueManagerSidebar.tsx
|
|
3569
|
-
import { jsx as
|
|
3701
|
+
import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
3570
3702
|
function IssueManagerSidebar({
|
|
3571
3703
|
controller,
|
|
3572
3704
|
isCollapsed,
|
|
@@ -3580,7 +3712,7 @@ function IssueManagerSidebar({
|
|
|
3580
3712
|
showStandaloneState,
|
|
3581
3713
|
sidebarViewState
|
|
3582
3714
|
});
|
|
3583
|
-
return /* @__PURE__ */
|
|
3715
|
+
return /* @__PURE__ */ jsxs11(
|
|
3584
3716
|
"aside",
|
|
3585
3717
|
{
|
|
3586
3718
|
"aria-hidden": isCollapsed ? "true" : void 0,
|
|
@@ -3591,7 +3723,7 @@ function IssueManagerSidebar({
|
|
|
3591
3723
|
),
|
|
3592
3724
|
inert: isCollapsed ? true : void 0,
|
|
3593
3725
|
children: [
|
|
3594
|
-
/* @__PURE__ */
|
|
3726
|
+
/* @__PURE__ */ jsx13(
|
|
3595
3727
|
IssueManagerSidebarHeader,
|
|
3596
3728
|
{
|
|
3597
3729
|
copy,
|
|
@@ -3601,7 +3733,7 @@ function IssueManagerSidebar({
|
|
|
3601
3733
|
onIssueSearchQueryChange: controller.setIssueSearchQuery
|
|
3602
3734
|
}
|
|
3603
3735
|
),
|
|
3604
|
-
/* @__PURE__ */
|
|
3736
|
+
/* @__PURE__ */ jsx13(
|
|
3605
3737
|
IssueManagerSidebarStatusTabs,
|
|
3606
3738
|
{
|
|
3607
3739
|
copy,
|
|
@@ -3610,15 +3742,15 @@ function IssueManagerSidebar({
|
|
|
3610
3742
|
onIssueStatusFilterChange: controller.setIssueStatusFilter
|
|
3611
3743
|
}
|
|
3612
3744
|
),
|
|
3613
|
-
/* @__PURE__ */
|
|
3614
|
-
/* @__PURE__ */
|
|
3745
|
+
/* @__PURE__ */ jsx13("div", { "aria-hidden": "true", className: "h-2.5 flex-none" }),
|
|
3746
|
+
/* @__PURE__ */ jsx13(
|
|
3615
3747
|
"div",
|
|
3616
3748
|
{
|
|
3617
3749
|
className: cn7(
|
|
3618
3750
|
"relative flex min-h-0 flex-col",
|
|
3619
3751
|
isNarrowLayout ? "flex-none" : "flex-1"
|
|
3620
3752
|
),
|
|
3621
|
-
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(
|
|
3622
3754
|
IssueManagerSidebarStandalonePane,
|
|
3623
3755
|
{
|
|
3624
3756
|
body: presentation.kind === "empty" ? presentation.body : void 0,
|
|
@@ -3628,7 +3760,7 @@ function IssueManagerSidebar({
|
|
|
3628
3760
|
title: presentation.title,
|
|
3629
3761
|
onRetry: () => controller.refreshAll()
|
|
3630
3762
|
}
|
|
3631
|
-
) }) : /* @__PURE__ */
|
|
3763
|
+
) }) : /* @__PURE__ */ jsx13(
|
|
3632
3764
|
IssueManagerSidebarBody,
|
|
3633
3765
|
{
|
|
3634
3766
|
copy,
|
|
@@ -3647,8 +3779,8 @@ function IssueManagerSidebar({
|
|
|
3647
3779
|
}
|
|
3648
3780
|
|
|
3649
3781
|
// src/ui/internal/shell/IssueManagerTaskComposerPane.tsx
|
|
3650
|
-
import { Button as
|
|
3651
|
-
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";
|
|
3652
3784
|
function IssueManagerTaskComposerPane({
|
|
3653
3785
|
controller,
|
|
3654
3786
|
onCancel,
|
|
@@ -3656,23 +3788,23 @@ function IssueManagerTaskComposerPane({
|
|
|
3656
3788
|
}) {
|
|
3657
3789
|
const copy = controller.copy;
|
|
3658
3790
|
const isTaskTitleMissing = controller.taskDraft.title.trim().length === 0;
|
|
3659
|
-
return /* @__PURE__ */
|
|
3660
|
-
/* @__PURE__ */
|
|
3661
|
-
/* @__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(
|
|
3662
3794
|
"div",
|
|
3663
3795
|
{
|
|
3664
3796
|
className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
|
|
3665
|
-
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") })
|
|
3666
3798
|
}
|
|
3667
3799
|
),
|
|
3668
|
-
/* @__PURE__ */
|
|
3669
|
-
/* @__PURE__ */
|
|
3800
|
+
/* @__PURE__ */ jsxs12("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
|
|
3801
|
+
/* @__PURE__ */ jsxs12(
|
|
3670
3802
|
"label",
|
|
3671
3803
|
{
|
|
3672
3804
|
className: `flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
|
|
3673
3805
|
children: [
|
|
3674
|
-
/* @__PURE__ */
|
|
3675
|
-
/* @__PURE__ */
|
|
3806
|
+
/* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.title") }),
|
|
3807
|
+
/* @__PURE__ */ jsx14(
|
|
3676
3808
|
IssueManagerDraftTitleInput,
|
|
3677
3809
|
{
|
|
3678
3810
|
placeholder: copy.t("composer.subtaskTitlePlaceholder"),
|
|
@@ -3683,13 +3815,13 @@ function IssueManagerTaskComposerPane({
|
|
|
3683
3815
|
]
|
|
3684
3816
|
}
|
|
3685
3817
|
),
|
|
3686
|
-
/* @__PURE__ */
|
|
3818
|
+
/* @__PURE__ */ jsxs12(
|
|
3687
3819
|
"div",
|
|
3688
3820
|
{
|
|
3689
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}`,
|
|
3690
3822
|
children: [
|
|
3691
|
-
/* @__PURE__ */
|
|
3692
|
-
/* @__PURE__ */
|
|
3823
|
+
/* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.requirementDescription") }),
|
|
3824
|
+
/* @__PURE__ */ jsx14(
|
|
3693
3825
|
IssueManagerRichTextTextarea,
|
|
3694
3826
|
{
|
|
3695
3827
|
controller,
|
|
@@ -3705,13 +3837,13 @@ function IssueManagerTaskComposerPane({
|
|
|
3705
3837
|
)
|
|
3706
3838
|
] })
|
|
3707
3839
|
] }) }),
|
|
3708
|
-
/* @__PURE__ */
|
|
3840
|
+
/* @__PURE__ */ jsx14(
|
|
3709
3841
|
"div",
|
|
3710
3842
|
{
|
|
3711
3843
|
className: `shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
|
|
3712
|
-
children: /* @__PURE__ */
|
|
3713
|
-
/* @__PURE__ */
|
|
3714
|
-
|
|
3844
|
+
children: /* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-end gap-3", children: [
|
|
3845
|
+
/* @__PURE__ */ jsx14(
|
|
3846
|
+
Button9,
|
|
3715
3847
|
{
|
|
3716
3848
|
size: "default",
|
|
3717
3849
|
type: "button",
|
|
@@ -3720,8 +3852,8 @@ function IssueManagerTaskComposerPane({
|
|
|
3720
3852
|
children: copy.t("actions.cancel")
|
|
3721
3853
|
}
|
|
3722
3854
|
),
|
|
3723
|
-
/* @__PURE__ */
|
|
3724
|
-
|
|
3855
|
+
/* @__PURE__ */ jsx14(
|
|
3856
|
+
Button9,
|
|
3725
3857
|
{
|
|
3726
3858
|
disabled: !selectedIssue || isTaskTitleMissing,
|
|
3727
3859
|
size: "default",
|
|
@@ -3741,8 +3873,8 @@ import { ScrollArea as ScrollArea4, cn as cn8 } from "@tutti-os/ui-system";
|
|
|
3741
3873
|
|
|
3742
3874
|
// src/ui/internal/shell/IssueManagerTaskDrawerSections.tsx
|
|
3743
3875
|
import { useState as useState6 } from "react";
|
|
3744
|
-
import { Badge as Badge5, Button as
|
|
3745
|
-
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";
|
|
3746
3878
|
function IssueManagerTaskDrawerHeader({
|
|
3747
3879
|
controller,
|
|
3748
3880
|
selectedTask,
|
|
@@ -3751,13 +3883,13 @@ function IssueManagerTaskDrawerHeader({
|
|
|
3751
3883
|
const copy = controller.copy;
|
|
3752
3884
|
const [deleteDialogOpen, setDeleteDialogOpen] = useState6(false);
|
|
3753
3885
|
const [deleteBusy, setDeleteBusy] = useState6(false);
|
|
3754
|
-
return /* @__PURE__ */
|
|
3755
|
-
/* @__PURE__ */
|
|
3756
|
-
/* @__PURE__ */
|
|
3757
|
-
view.showTaskMetadata && selectedTask ? /* @__PURE__ */
|
|
3758
|
-
/* @__PURE__ */
|
|
3759
|
-
/* @__PURE__ */
|
|
3760
|
-
|
|
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,
|
|
3761
3893
|
{
|
|
3762
3894
|
type: "button",
|
|
3763
3895
|
variant: "ghost",
|
|
@@ -3765,8 +3897,8 @@ function IssueManagerTaskDrawerHeader({
|
|
|
3765
3897
|
children: copy.t("actions.edit")
|
|
3766
3898
|
}
|
|
3767
3899
|
),
|
|
3768
|
-
/* @__PURE__ */
|
|
3769
|
-
|
|
3900
|
+
/* @__PURE__ */ jsx15(
|
|
3901
|
+
Button10,
|
|
3770
3902
|
{
|
|
3771
3903
|
className: "text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
|
|
3772
3904
|
type: "button",
|
|
@@ -3777,24 +3909,24 @@ function IssueManagerTaskDrawerHeader({
|
|
|
3777
3909
|
)
|
|
3778
3910
|
] }) : null })
|
|
3779
3911
|
] }),
|
|
3780
|
-
view.showTaskMetadata && selectedTask ? /* @__PURE__ */
|
|
3781
|
-
/* @__PURE__ */
|
|
3912
|
+
view.showTaskMetadata && selectedTask ? /* @__PURE__ */ jsxs13("div", { className: "grid gap-2", children: [
|
|
3913
|
+
/* @__PURE__ */ jsx15(
|
|
3782
3914
|
IssueManagerTaskMetadataRow,
|
|
3783
3915
|
{
|
|
3784
3916
|
copy,
|
|
3785
3917
|
selectedTask
|
|
3786
3918
|
}
|
|
3787
3919
|
),
|
|
3788
|
-
selectedTask.status === "pending_acceptance" ? /* @__PURE__ */
|
|
3920
|
+
selectedTask.status === "pending_acceptance" ? /* @__PURE__ */ jsx15(IssueManagerTaskAcceptanceCard, { controller }) : null
|
|
3789
3921
|
] }) : null
|
|
3790
3922
|
] }),
|
|
3791
|
-
selectedTask ? /* @__PURE__ */
|
|
3923
|
+
selectedTask ? /* @__PURE__ */ jsx15(
|
|
3792
3924
|
ConfirmationDialog2,
|
|
3793
3925
|
{
|
|
3794
3926
|
cancelLabel: copy.t("actions.cancel"),
|
|
3795
3927
|
confirmBusy: deleteBusy,
|
|
3796
3928
|
confirmLabel: copy.t("actions.delete"),
|
|
3797
|
-
description: /* @__PURE__ */
|
|
3929
|
+
description: /* @__PURE__ */ jsx15("span", { className: "block max-w-full whitespace-normal [overflow-wrap:anywhere]", children: selectedTask.title }),
|
|
3798
3930
|
open: deleteDialogOpen,
|
|
3799
3931
|
title: copy.t("confirmations.deleteTask"),
|
|
3800
3932
|
tone: "destructive",
|
|
@@ -3814,70 +3946,36 @@ function IssueManagerTaskMetadataRow({
|
|
|
3814
3946
|
copy,
|
|
3815
3947
|
selectedTask
|
|
3816
3948
|
}) {
|
|
3817
|
-
return /* @__PURE__ */
|
|
3818
|
-
/* @__PURE__ */
|
|
3819
|
-
/* @__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(
|
|
3820
3952
|
"span",
|
|
3821
3953
|
{
|
|
3822
3954
|
"aria-hidden": "true",
|
|
3823
3955
|
className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
|
|
3824
3956
|
}
|
|
3825
3957
|
),
|
|
3826
|
-
/* @__PURE__ */
|
|
3958
|
+
/* @__PURE__ */ jsxs13("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
|
|
3827
3959
|
copy.t("labels.creator"),
|
|
3828
3960
|
" ",
|
|
3829
3961
|
resolveTaskCreatorLabel(selectedTask)
|
|
3830
3962
|
] }),
|
|
3831
|
-
/* @__PURE__ */
|
|
3963
|
+
/* @__PURE__ */ jsx15(
|
|
3832
3964
|
"span",
|
|
3833
3965
|
{
|
|
3834
3966
|
"aria-hidden": "true",
|
|
3835
3967
|
className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
|
|
3836
3968
|
}
|
|
3837
3969
|
),
|
|
3838
|
-
/* @__PURE__ */
|
|
3970
|
+
/* @__PURE__ */ jsxs13("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
|
|
3839
3971
|
copy.t("labels.createdAt"),
|
|
3840
3972
|
" ",
|
|
3841
3973
|
formatIssueManagerTimestamp(selectedTask.createdAtUnix) || "-"
|
|
3842
3974
|
] })
|
|
3843
3975
|
] });
|
|
3844
3976
|
}
|
|
3845
|
-
function IssueManagerTaskAcceptanceCard({
|
|
3846
|
-
controller
|
|
3847
|
-
}) {
|
|
3848
|
-
const copy = controller.copy;
|
|
3849
|
-
return /* @__PURE__ */ jsxs12("div", { className: "grid gap-2 rounded-md bg-[var(--transparency-block)] px-3 py-2", children: [
|
|
3850
|
-
/* @__PURE__ */ jsxs12("div", { className: "min-w-0 text-[11px] font-normal leading-[1.45] text-[var(--text-secondary)] [overflow-wrap:anywhere]", children: [
|
|
3851
|
-
/* @__PURE__ */ jsx14("span", { className: "font-semibold text-[var(--text-primary)]", children: copy.t("labels.taskAcceptance") }),
|
|
3852
|
-
/* @__PURE__ */ jsx14("span", { className: "mx-1 text-[var(--text-tertiary)]", children: "\xB7" }),
|
|
3853
|
-
/* @__PURE__ */ jsx14("span", { children: copy.t("messages.taskAcceptanceHint") })
|
|
3854
|
-
] }),
|
|
3855
|
-
/* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-end gap-2", children: [
|
|
3856
|
-
/* @__PURE__ */ jsx14(
|
|
3857
|
-
Button9,
|
|
3858
|
-
{
|
|
3859
|
-
className: "h-7 px-2 text-[11px] text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
|
|
3860
|
-
type: "button",
|
|
3861
|
-
variant: "ghost",
|
|
3862
|
-
onClick: () => void controller.setSelectedTaskStatus("not_started"),
|
|
3863
|
-
children: copy.t("actions.rejectTask")
|
|
3864
|
-
}
|
|
3865
|
-
),
|
|
3866
|
-
/* @__PURE__ */ jsx14(
|
|
3867
|
-
Button9,
|
|
3868
|
-
{
|
|
3869
|
-
className: "h-7 px-2.5 text-[11px]",
|
|
3870
|
-
type: "button",
|
|
3871
|
-
variant: "secondary",
|
|
3872
|
-
onClick: () => void controller.setSelectedTaskStatus("completed"),
|
|
3873
|
-
children: copy.t("actions.acceptTask")
|
|
3874
|
-
}
|
|
3875
|
-
)
|
|
3876
|
-
] })
|
|
3877
|
-
] });
|
|
3878
|
-
}
|
|
3879
3977
|
function IssueManagerTaskDrawerLoadingBody() {
|
|
3880
|
-
return /* @__PURE__ */
|
|
3978
|
+
return /* @__PURE__ */ jsx15(IssueManagerTaskDrawerLoadingState, {});
|
|
3881
3979
|
}
|
|
3882
3980
|
function IssueManagerTaskDrawerBody({
|
|
3883
3981
|
controller,
|
|
@@ -3886,10 +3984,10 @@ function IssueManagerTaskDrawerBody({
|
|
|
3886
3984
|
view
|
|
3887
3985
|
}) {
|
|
3888
3986
|
if (view.bodyKind === "loading") {
|
|
3889
|
-
return /* @__PURE__ */
|
|
3987
|
+
return /* @__PURE__ */ jsx15(IssueManagerTaskDrawerLoadingBody, {});
|
|
3890
3988
|
}
|
|
3891
3989
|
if (view.bodyKind === "edit") {
|
|
3892
|
-
return /* @__PURE__ */
|
|
3990
|
+
return /* @__PURE__ */ jsx15(
|
|
3893
3991
|
IssueManagerTaskDrawerEditBody,
|
|
3894
3992
|
{
|
|
3895
3993
|
controller,
|
|
@@ -3897,7 +3995,7 @@ function IssueManagerTaskDrawerBody({
|
|
|
3897
3995
|
}
|
|
3898
3996
|
);
|
|
3899
3997
|
}
|
|
3900
|
-
return /* @__PURE__ */
|
|
3998
|
+
return /* @__PURE__ */ jsx15(
|
|
3901
3999
|
IssueManagerTaskDrawerReadBody,
|
|
3902
4000
|
{
|
|
3903
4001
|
controller,
|
|
@@ -3912,22 +4010,22 @@ function IssueManagerTaskDrawerEditBody({
|
|
|
3912
4010
|
title
|
|
3913
4011
|
}) {
|
|
3914
4012
|
const copy = controller.copy;
|
|
3915
|
-
return /* @__PURE__ */
|
|
3916
|
-
/* @__PURE__ */
|
|
4013
|
+
return /* @__PURE__ */ jsxs13("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
|
|
4014
|
+
/* @__PURE__ */ jsx15(
|
|
3917
4015
|
"div",
|
|
3918
4016
|
{
|
|
3919
4017
|
className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
|
|
3920
|
-
children: /* @__PURE__ */
|
|
4018
|
+
children: /* @__PURE__ */ jsx15("h2", { className: "m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: title })
|
|
3921
4019
|
}
|
|
3922
4020
|
),
|
|
3923
|
-
/* @__PURE__ */
|
|
3924
|
-
/* @__PURE__ */
|
|
4021
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
|
|
4022
|
+
/* @__PURE__ */ jsxs13(
|
|
3925
4023
|
"label",
|
|
3926
4024
|
{
|
|
3927
4025
|
className: `flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
|
|
3928
4026
|
children: [
|
|
3929
|
-
/* @__PURE__ */
|
|
3930
|
-
/* @__PURE__ */
|
|
4027
|
+
/* @__PURE__ */ jsx15("span", { className: "leading-5", children: copy.t("labels.title") }),
|
|
4028
|
+
/* @__PURE__ */ jsx15(
|
|
3931
4029
|
IssueManagerDraftTitleInput,
|
|
3932
4030
|
{
|
|
3933
4031
|
placeholder: copy.t("composer.taskTitlePlaceholder"),
|
|
@@ -3938,13 +4036,13 @@ function IssueManagerTaskDrawerEditBody({
|
|
|
3938
4036
|
]
|
|
3939
4037
|
}
|
|
3940
4038
|
),
|
|
3941
|
-
/* @__PURE__ */
|
|
4039
|
+
/* @__PURE__ */ jsxs13(
|
|
3942
4040
|
"div",
|
|
3943
4041
|
{
|
|
3944
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}`,
|
|
3945
4043
|
children: [
|
|
3946
|
-
/* @__PURE__ */
|
|
3947
|
-
/* @__PURE__ */
|
|
4044
|
+
/* @__PURE__ */ jsx15("span", { className: "leading-5", children: copy.t("labels.content") }),
|
|
4045
|
+
/* @__PURE__ */ jsx15(
|
|
3948
4046
|
IssueManagerRichTextTextarea,
|
|
3949
4047
|
{
|
|
3950
4048
|
controller,
|
|
@@ -3970,8 +4068,8 @@ function IssueManagerTaskDrawerReadBody({
|
|
|
3970
4068
|
const copy = controller.copy;
|
|
3971
4069
|
const latestRun = controller.taskDetail.value?.latestRun ?? controller.taskDetail.value?.recentRuns[0] ?? null;
|
|
3972
4070
|
const latestOutputs = controller.taskDetail.value?.latestOutputs ?? [];
|
|
3973
|
-
return /* @__PURE__ */
|
|
3974
|
-
/* @__PURE__ */
|
|
4071
|
+
return /* @__PURE__ */ jsxs13(Fragment2, { children: [
|
|
4072
|
+
/* @__PURE__ */ jsx15(
|
|
3975
4073
|
IssueManagerDescriptionSection,
|
|
3976
4074
|
{
|
|
3977
4075
|
content: taskContent,
|
|
@@ -3981,7 +4079,7 @@ function IssueManagerTaskDrawerReadBody({
|
|
|
3981
4079
|
variant: "plain"
|
|
3982
4080
|
}
|
|
3983
4081
|
),
|
|
3984
|
-
/* @__PURE__ */
|
|
4082
|
+
/* @__PURE__ */ jsx15(
|
|
3985
4083
|
IssueManagerLatestRunStatusSection,
|
|
3986
4084
|
{
|
|
3987
4085
|
copy,
|
|
@@ -3991,7 +4089,7 @@ function IssueManagerTaskDrawerReadBody({
|
|
|
3991
4089
|
title: latestRunTitle
|
|
3992
4090
|
}
|
|
3993
4091
|
),
|
|
3994
|
-
/* @__PURE__ */
|
|
4092
|
+
/* @__PURE__ */ jsx15(
|
|
3995
4093
|
IssueManagerOutputSection,
|
|
3996
4094
|
{
|
|
3997
4095
|
copy,
|
|
@@ -4013,8 +4111,8 @@ function IssueManagerTaskDrawerFooter({
|
|
|
4013
4111
|
selectedTaskStatus: selectedTask?.status
|
|
4014
4112
|
});
|
|
4015
4113
|
if (view.showReadFooter && selectedTask) {
|
|
4016
|
-
return /* @__PURE__ */
|
|
4017
|
-
/* @__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(
|
|
4018
4116
|
IssueManagerExecutionDirectoryTrigger,
|
|
4019
4117
|
{
|
|
4020
4118
|
className: "mr-auto",
|
|
@@ -4022,7 +4120,7 @@ function IssueManagerTaskDrawerFooter({
|
|
|
4022
4120
|
disabled: runControlsDisabled
|
|
4023
4121
|
}
|
|
4024
4122
|
),
|
|
4025
|
-
/* @__PURE__ */
|
|
4123
|
+
/* @__PURE__ */ jsx15(
|
|
4026
4124
|
IssueManagerRunActionTrigger,
|
|
4027
4125
|
{
|
|
4028
4126
|
controller,
|
|
@@ -4030,8 +4128,8 @@ function IssueManagerTaskDrawerFooter({
|
|
|
4030
4128
|
triggerVariant: "button"
|
|
4031
4129
|
}
|
|
4032
4130
|
),
|
|
4033
|
-
controller.canInviteCollaborators ? /* @__PURE__ */
|
|
4034
|
-
|
|
4131
|
+
controller.canInviteCollaborators ? /* @__PURE__ */ jsx15(
|
|
4132
|
+
Button10,
|
|
4035
4133
|
{
|
|
4036
4134
|
disabled: !selectedIssue,
|
|
4037
4135
|
size: "dialog",
|
|
@@ -4045,13 +4143,13 @@ function IssueManagerTaskDrawerFooter({
|
|
|
4045
4143
|
] }) });
|
|
4046
4144
|
}
|
|
4047
4145
|
if (view.showEditFooter) {
|
|
4048
|
-
return /* @__PURE__ */
|
|
4146
|
+
return /* @__PURE__ */ jsx15(
|
|
4049
4147
|
"div",
|
|
4050
4148
|
{
|
|
4051
4149
|
className: `border-t border-border-1 px-6 py-4 ${issueManagerEditorFooterFadeInClassName}`,
|
|
4052
|
-
children: /* @__PURE__ */
|
|
4053
|
-
/* @__PURE__ */
|
|
4054
|
-
|
|
4150
|
+
children: /* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-end gap-3", children: [
|
|
4151
|
+
/* @__PURE__ */ jsx15(
|
|
4152
|
+
Button10,
|
|
4055
4153
|
{
|
|
4056
4154
|
size: "dialog",
|
|
4057
4155
|
type: "button",
|
|
@@ -4060,8 +4158,8 @@ function IssueManagerTaskDrawerFooter({
|
|
|
4060
4158
|
children: copy.t("actions.cancel")
|
|
4061
4159
|
}
|
|
4062
4160
|
),
|
|
4063
|
-
/* @__PURE__ */
|
|
4064
|
-
|
|
4161
|
+
/* @__PURE__ */ jsx15(
|
|
4162
|
+
Button10,
|
|
4065
4163
|
{
|
|
4066
4164
|
disabled: canIssueManagerSaveTask({
|
|
4067
4165
|
selectedIssue,
|
|
@@ -4081,7 +4179,7 @@ function IssueManagerTaskDrawerFooter({
|
|
|
4081
4179
|
}
|
|
4082
4180
|
|
|
4083
4181
|
// src/ui/internal/shell/IssueManagerTaskDrawer.tsx
|
|
4084
|
-
import { jsx as
|
|
4182
|
+
import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
4085
4183
|
function IssueManagerTaskDrawer({
|
|
4086
4184
|
controller,
|
|
4087
4185
|
isClosing,
|
|
@@ -4095,7 +4193,7 @@ function IssueManagerTaskDrawer({
|
|
|
4095
4193
|
selectedTask
|
|
4096
4194
|
});
|
|
4097
4195
|
const taskContent = selectedTask?.content ?? "";
|
|
4098
|
-
return /* @__PURE__ */
|
|
4196
|
+
return /* @__PURE__ */ jsx16(
|
|
4099
4197
|
"div",
|
|
4100
4198
|
{
|
|
4101
4199
|
className: cn8(
|
|
@@ -4109,7 +4207,7 @@ function IssueManagerTaskDrawer({
|
|
|
4109
4207
|
onWheel: (event) => {
|
|
4110
4208
|
event.preventDefault();
|
|
4111
4209
|
},
|
|
4112
|
-
children: /* @__PURE__ */
|
|
4210
|
+
children: /* @__PURE__ */ jsxs14(
|
|
4113
4211
|
"aside",
|
|
4114
4212
|
{
|
|
4115
4213
|
className: cn8(
|
|
@@ -4120,7 +4218,7 @@ function IssueManagerTaskDrawer({
|
|
|
4120
4218
|
onTouchMove: (event) => event.stopPropagation(),
|
|
4121
4219
|
onWheel: (event) => event.stopPropagation(),
|
|
4122
4220
|
children: [
|
|
4123
|
-
view.bodyKind === "edit" ? null : /* @__PURE__ */
|
|
4221
|
+
view.bodyKind === "edit" ? null : /* @__PURE__ */ jsx16(
|
|
4124
4222
|
IssueManagerTaskDrawerHeader,
|
|
4125
4223
|
{
|
|
4126
4224
|
controller,
|
|
@@ -4128,19 +4226,19 @@ function IssueManagerTaskDrawer({
|
|
|
4128
4226
|
view
|
|
4129
4227
|
}
|
|
4130
4228
|
),
|
|
4131
|
-
/* @__PURE__ */
|
|
4229
|
+
/* @__PURE__ */ jsx16(
|
|
4132
4230
|
ScrollArea4,
|
|
4133
4231
|
{
|
|
4134
4232
|
scrollbarMode: "native",
|
|
4135
4233
|
className: "min-h-0 flex-1 [&_[data-slot=scroll-area-viewport]]:overscroll-contain",
|
|
4136
|
-
children: /* @__PURE__ */
|
|
4234
|
+
children: /* @__PURE__ */ jsx16(
|
|
4137
4235
|
"div",
|
|
4138
4236
|
{
|
|
4139
4237
|
className: cn8(
|
|
4140
4238
|
"flex flex-col",
|
|
4141
4239
|
view.bodyKind === "edit" ? "gap-[14px] px-6 py-8" : "gap-9 px-6 py-7"
|
|
4142
4240
|
),
|
|
4143
|
-
children: /* @__PURE__ */
|
|
4241
|
+
children: /* @__PURE__ */ jsx16(
|
|
4144
4242
|
IssueManagerTaskDrawerBody,
|
|
4145
4243
|
{
|
|
4146
4244
|
controller,
|
|
@@ -4153,7 +4251,7 @@ function IssueManagerTaskDrawer({
|
|
|
4153
4251
|
)
|
|
4154
4252
|
}
|
|
4155
4253
|
),
|
|
4156
|
-
/* @__PURE__ */
|
|
4254
|
+
/* @__PURE__ */ jsx16(
|
|
4157
4255
|
IssueManagerTaskDrawerFooter,
|
|
4158
4256
|
{
|
|
4159
4257
|
controller,
|
|
@@ -4324,7 +4422,7 @@ function useIssueManagerShellView({
|
|
|
4324
4422
|
}
|
|
4325
4423
|
|
|
4326
4424
|
// src/ui/internal/shell/IssueManagerShell.tsx
|
|
4327
|
-
import { jsx as
|
|
4425
|
+
import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
4328
4426
|
var issueManagerTaskDrawerExitDurationMs = 180;
|
|
4329
4427
|
function IssueManagerShell({
|
|
4330
4428
|
controller,
|
|
@@ -4365,7 +4463,7 @@ function IssueManagerShell({
|
|
|
4365
4463
|
shellView.content.isTaskDrawerOpen
|
|
4366
4464
|
]);
|
|
4367
4465
|
const taskDrawerTask = shellView.content.isTaskDrawerOpen ? selectedTask : renderedTaskDrawerTask;
|
|
4368
|
-
return /* @__PURE__ */
|
|
4466
|
+
return /* @__PURE__ */ jsxs15(
|
|
4369
4467
|
"div",
|
|
4370
4468
|
{
|
|
4371
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",
|
|
@@ -4374,8 +4472,8 @@ function IssueManagerShell({
|
|
|
4374
4472
|
ref: shellView.layoutRef,
|
|
4375
4473
|
style: shellView.layoutStyle,
|
|
4376
4474
|
children: [
|
|
4377
|
-
shellView.floatingNotice ? /* @__PURE__ */
|
|
4378
|
-
/* @__PURE__ */
|
|
4475
|
+
shellView.floatingNotice ? /* @__PURE__ */ jsx17(IssueManagerFloatingNotice, { notice: shellView.floatingNotice }) : null,
|
|
4476
|
+
/* @__PURE__ */ jsx17(
|
|
4379
4477
|
IssueManagerSidebar,
|
|
4380
4478
|
{
|
|
4381
4479
|
controller,
|
|
@@ -4386,7 +4484,7 @@ function IssueManagerShell({
|
|
|
4386
4484
|
statusCounts: shellView.sidebar.statusCounts
|
|
4387
4485
|
}
|
|
4388
4486
|
),
|
|
4389
|
-
shellView.sidebar.isAutoCollapsed ? null : /* @__PURE__ */
|
|
4487
|
+
shellView.sidebar.isAutoCollapsed ? null : /* @__PURE__ */ jsx17(
|
|
4390
4488
|
"div",
|
|
4391
4489
|
{
|
|
4392
4490
|
"aria-label": controller.copy.t("labels.resizeIssueList"),
|
|
@@ -4405,12 +4503,12 @@ function IssueManagerShell({
|
|
|
4405
4503
|
onPointerDown: shellView.resizeHandle.onPointerDown,
|
|
4406
4504
|
onPointerMove: shellView.resizeHandle.onPointerMove,
|
|
4407
4505
|
onPointerUp: shellView.resizeHandle.onPointerUp,
|
|
4408
|
-
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)]" })
|
|
4409
4507
|
}
|
|
4410
4508
|
),
|
|
4411
|
-
/* @__PURE__ */
|
|
4412
|
-
/* @__PURE__ */
|
|
4413
|
-
/* @__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(
|
|
4414
4512
|
IssueManagerIssuePane,
|
|
4415
4513
|
{
|
|
4416
4514
|
controller,
|
|
@@ -4418,14 +4516,14 @@ function IssueManagerShell({
|
|
|
4418
4516
|
selectedIssue,
|
|
4419
4517
|
onDismissCreate: onDismissIssueCreate
|
|
4420
4518
|
}
|
|
4421
|
-
) : shellView.content.isTaskCreating ? /* @__PURE__ */
|
|
4519
|
+
) : shellView.content.isTaskCreating ? /* @__PURE__ */ jsx17(
|
|
4422
4520
|
IssueManagerTaskComposerPane,
|
|
4423
4521
|
{
|
|
4424
4522
|
controller,
|
|
4425
4523
|
selectedIssue,
|
|
4426
4524
|
onCancel: () => controller.setTaskEditorMode("read")
|
|
4427
4525
|
}
|
|
4428
|
-
) : selectedIssue ? /* @__PURE__ */
|
|
4526
|
+
) : selectedIssue ? /* @__PURE__ */ jsx17(
|
|
4429
4527
|
IssueManagerIssuePane,
|
|
4430
4528
|
{
|
|
4431
4529
|
controller,
|
|
@@ -4433,14 +4531,14 @@ function IssueManagerShell({
|
|
|
4433
4531
|
selectedIssue,
|
|
4434
4532
|
onDismissCreate: onDismissIssueCreate
|
|
4435
4533
|
}
|
|
4436
|
-
) : /* @__PURE__ */
|
|
4534
|
+
) : /* @__PURE__ */ jsx17(
|
|
4437
4535
|
IssueManagerShellEmptyState,
|
|
4438
4536
|
{
|
|
4439
4537
|
controller,
|
|
4440
4538
|
emptyIllustration
|
|
4441
4539
|
}
|
|
4442
4540
|
) }),
|
|
4443
|
-
/* @__PURE__ */
|
|
4541
|
+
/* @__PURE__ */ jsx17(
|
|
4444
4542
|
IssueManagerBottomBar,
|
|
4445
4543
|
{
|
|
4446
4544
|
controller,
|
|
@@ -4450,7 +4548,7 @@ function IssueManagerShell({
|
|
|
4450
4548
|
}
|
|
4451
4549
|
)
|
|
4452
4550
|
] }),
|
|
4453
|
-
taskDrawerTask ? /* @__PURE__ */
|
|
4551
|
+
taskDrawerTask ? /* @__PURE__ */ jsx17(
|
|
4454
4552
|
IssueManagerTaskDrawer,
|
|
4455
4553
|
{
|
|
4456
4554
|
controller,
|
|
@@ -4470,18 +4568,18 @@ function IssueManagerShellEmptyState({
|
|
|
4470
4568
|
controller,
|
|
4471
4569
|
emptyIllustration
|
|
4472
4570
|
}) {
|
|
4473
|
-
return /* @__PURE__ */
|
|
4474
|
-
emptyIllustration ? /* @__PURE__ */
|
|
4475
|
-
/* @__PURE__ */
|
|
4476
|
-
/* @__PURE__ */
|
|
4477
|
-
/* @__PURE__ */
|
|
4478
|
-
|
|
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,
|
|
4479
4577
|
{
|
|
4480
4578
|
className: "mt-2 gap-2",
|
|
4481
4579
|
type: "button",
|
|
4482
4580
|
onClick: () => controller.setIssueEditorMode("create"),
|
|
4483
4581
|
children: [
|
|
4484
|
-
/* @__PURE__ */
|
|
4582
|
+
/* @__PURE__ */ jsx17(FileCreateIcon4, { size: 16 }),
|
|
4485
4583
|
controller.copy.t("actions.createIssue")
|
|
4486
4584
|
]
|
|
4487
4585
|
}
|
|
@@ -4493,7 +4591,7 @@ function IssueManagerShellEmptyState({
|
|
|
4493
4591
|
import { useEffect as useEffect8, useState as useState9 } from "react";
|
|
4494
4592
|
import {
|
|
4495
4593
|
BareIconButton,
|
|
4496
|
-
Button as
|
|
4594
|
+
Button as Button12,
|
|
4497
4595
|
CheckIcon as CheckIcon2,
|
|
4498
4596
|
ChevronDownIcon as ChevronDownIcon2,
|
|
4499
4597
|
ConfirmationDialog as ConfirmationDialog3,
|
|
@@ -4517,7 +4615,7 @@ import {
|
|
|
4517
4615
|
Textarea,
|
|
4518
4616
|
cn as cn10
|
|
4519
4617
|
} from "@tutti-os/ui-system";
|
|
4520
|
-
import { Fragment as Fragment3, jsx as
|
|
4618
|
+
import { Fragment as Fragment3, jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
4521
4619
|
var topicSelectorMenuItemClassName = "min-h-7 overflow-hidden rounded-md py-1 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]";
|
|
4522
4620
|
var topicSelectorRowItemClassName = "min-w-0 flex-1 bg-transparent pr-2 pl-1 hover:bg-transparent focus:bg-transparent data-[highlighted]:bg-transparent";
|
|
4523
4621
|
function IssueManagerTopicSelector({
|
|
@@ -4545,10 +4643,10 @@ function IssueManagerTopicSelector({
|
|
|
4545
4643
|
setMenuOpen(false);
|
|
4546
4644
|
setDialogMode(mode);
|
|
4547
4645
|
};
|
|
4548
|
-
return /* @__PURE__ */
|
|
4549
|
-
/* @__PURE__ */
|
|
4550
|
-
/* @__PURE__ */
|
|
4551
|
-
|
|
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,
|
|
4552
4650
|
{
|
|
4553
4651
|
"aria-label": topicLabel,
|
|
4554
4652
|
className: cn10(
|
|
@@ -4559,18 +4657,18 @@ function IssueManagerTopicSelector({
|
|
|
4559
4657
|
type: "button",
|
|
4560
4658
|
variant: "ghost",
|
|
4561
4659
|
children: [
|
|
4562
|
-
/* @__PURE__ */
|
|
4563
|
-
/* @__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" })
|
|
4564
4662
|
]
|
|
4565
4663
|
}
|
|
4566
4664
|
) }),
|
|
4567
|
-
/* @__PURE__ */
|
|
4665
|
+
/* @__PURE__ */ jsxs16(DropdownMenuContent2, { align: "start", className: "w-[200px] px-1", children: [
|
|
4568
4666
|
topics.map((topic) => {
|
|
4569
4667
|
const isPinned = (topic.pinnedAtUnix ?? 0) > 0;
|
|
4570
4668
|
const isActive = topic.topicId === activeTopicId;
|
|
4571
4669
|
const pinLabel = isPinned ? copy.t("actions.unpinTopic") : copy.t("actions.pinTopic");
|
|
4572
|
-
return /* @__PURE__ */
|
|
4573
|
-
/* @__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(
|
|
4574
4672
|
DropdownMenuItem2,
|
|
4575
4673
|
{
|
|
4576
4674
|
className: cn10(
|
|
@@ -4582,15 +4680,15 @@ function IssueManagerTopicSelector({
|
|
|
4582
4680
|
onSelectTopic(topic.topicId);
|
|
4583
4681
|
},
|
|
4584
4682
|
children: [
|
|
4585
|
-
/* @__PURE__ */
|
|
4586
|
-
/* @__PURE__ */
|
|
4587
|
-
/* @__PURE__ */
|
|
4588
|
-
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
|
|
4589
4687
|
] })
|
|
4590
4688
|
]
|
|
4591
4689
|
}
|
|
4592
4690
|
),
|
|
4593
|
-
/* @__PURE__ */
|
|
4691
|
+
/* @__PURE__ */ jsx18(
|
|
4594
4692
|
BareIconButton,
|
|
4595
4693
|
{
|
|
4596
4694
|
"aria-label": pinLabel,
|
|
@@ -4608,11 +4706,11 @@ function IssueManagerTopicSelector({
|
|
|
4608
4706
|
topicId: topic.topicId
|
|
4609
4707
|
});
|
|
4610
4708
|
},
|
|
4611
|
-
children: isPinned ? /* @__PURE__ */
|
|
4709
|
+
children: isPinned ? /* @__PURE__ */ jsx18(PinFilledIcon, { className: "size-3.5" }) : /* @__PURE__ */ jsx18(PinIcon, { className: "size-3.5" })
|
|
4612
4710
|
}
|
|
4613
4711
|
),
|
|
4614
|
-
/* @__PURE__ */
|
|
4615
|
-
/* @__PURE__ */
|
|
4712
|
+
/* @__PURE__ */ jsxs16(DropdownMenu2, { modal: false, children: [
|
|
4713
|
+
/* @__PURE__ */ jsx18(DropdownMenuTrigger2, { asChild: true, children: /* @__PURE__ */ jsx18(
|
|
4616
4714
|
BareIconButton,
|
|
4617
4715
|
{
|
|
4618
4716
|
"aria-label": copy.t("actions.moreActions"),
|
|
@@ -4622,17 +4720,17 @@ function IssueManagerTopicSelector({
|
|
|
4622
4720
|
onClick: (event) => {
|
|
4623
4721
|
event.stopPropagation();
|
|
4624
4722
|
},
|
|
4625
|
-
children: /* @__PURE__ */
|
|
4723
|
+
children: /* @__PURE__ */ jsx18(MoreHorizontalIcon, { className: "size-3.5" })
|
|
4626
4724
|
}
|
|
4627
4725
|
) }),
|
|
4628
|
-
/* @__PURE__ */
|
|
4726
|
+
/* @__PURE__ */ jsxs16(
|
|
4629
4727
|
DropdownMenuContent2,
|
|
4630
4728
|
{
|
|
4631
4729
|
align: "end",
|
|
4632
4730
|
className: "w-32",
|
|
4633
4731
|
sideOffset: 6,
|
|
4634
4732
|
children: [
|
|
4635
|
-
/* @__PURE__ */
|
|
4733
|
+
/* @__PURE__ */ jsxs16(
|
|
4636
4734
|
DropdownMenuItem2,
|
|
4637
4735
|
{
|
|
4638
4736
|
onSelect: (event) => {
|
|
@@ -4643,12 +4741,12 @@ function IssueManagerTopicSelector({
|
|
|
4643
4741
|
});
|
|
4644
4742
|
},
|
|
4645
4743
|
children: [
|
|
4646
|
-
/* @__PURE__ */
|
|
4647
|
-
/* @__PURE__ */
|
|
4744
|
+
/* @__PURE__ */ jsx18(EditIcon, { className: "size-3.5" }),
|
|
4745
|
+
/* @__PURE__ */ jsx18("span", { children: copy.t("actions.editTopic") })
|
|
4648
4746
|
]
|
|
4649
4747
|
}
|
|
4650
4748
|
),
|
|
4651
|
-
!topic.isDefault ? /* @__PURE__ */
|
|
4749
|
+
!topic.isDefault ? /* @__PURE__ */ jsxs16(
|
|
4652
4750
|
DropdownMenuItem2,
|
|
4653
4751
|
{
|
|
4654
4752
|
variant: "destructive",
|
|
@@ -4658,8 +4756,8 @@ function IssueManagerTopicSelector({
|
|
|
4658
4756
|
setDeleteTopic(topic);
|
|
4659
4757
|
},
|
|
4660
4758
|
children: [
|
|
4661
|
-
/* @__PURE__ */
|
|
4662
|
-
/* @__PURE__ */
|
|
4759
|
+
/* @__PURE__ */ jsx18(DeleteIcon, { className: "size-3.5" }),
|
|
4760
|
+
/* @__PURE__ */ jsx18("span", { children: copy.t("actions.delete") })
|
|
4663
4761
|
]
|
|
4664
4762
|
}
|
|
4665
4763
|
) : null
|
|
@@ -4669,9 +4767,9 @@ function IssueManagerTopicSelector({
|
|
|
4669
4767
|
] })
|
|
4670
4768
|
] }) }, topic.topicId);
|
|
4671
4769
|
}),
|
|
4672
|
-
topics.length === 0 ? /* @__PURE__ */
|
|
4673
|
-
/* @__PURE__ */
|
|
4674
|
-
/* @__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(
|
|
4675
4773
|
DropdownMenuItem2,
|
|
4676
4774
|
{
|
|
4677
4775
|
className: cn10(
|
|
@@ -4686,14 +4784,14 @@ function IssueManagerTopicSelector({
|
|
|
4686
4784
|
});
|
|
4687
4785
|
},
|
|
4688
4786
|
children: [
|
|
4689
|
-
/* @__PURE__ */
|
|
4690
|
-
/* @__PURE__ */
|
|
4787
|
+
/* @__PURE__ */ jsx18(FileCreateIcon5, { className: "size-3.5" }),
|
|
4788
|
+
/* @__PURE__ */ jsx18("span", { className: "truncate", children: copy.t("actions.createTopic") })
|
|
4691
4789
|
]
|
|
4692
4790
|
}
|
|
4693
4791
|
)
|
|
4694
4792
|
] })
|
|
4695
4793
|
] }),
|
|
4696
|
-
/* @__PURE__ */
|
|
4794
|
+
/* @__PURE__ */ jsx18(
|
|
4697
4795
|
IssueManagerTopicDialog,
|
|
4698
4796
|
{
|
|
4699
4797
|
copy,
|
|
@@ -4708,7 +4806,7 @@ function IssueManagerTopicSelector({
|
|
|
4708
4806
|
onUpdateTopic
|
|
4709
4807
|
}
|
|
4710
4808
|
),
|
|
4711
|
-
/* @__PURE__ */
|
|
4809
|
+
/* @__PURE__ */ jsx18(
|
|
4712
4810
|
ConfirmationDialog3,
|
|
4713
4811
|
{
|
|
4714
4812
|
cancelLabel: copy.t("actions.cancel"),
|
|
@@ -4776,12 +4874,12 @@ function IssueManagerTopicDialog({
|
|
|
4776
4874
|
}
|
|
4777
4875
|
onOpenChange(false);
|
|
4778
4876
|
};
|
|
4779
|
-
return /* @__PURE__ */
|
|
4780
|
-
/* @__PURE__ */
|
|
4781
|
-
/* @__PURE__ */
|
|
4782
|
-
/* @__PURE__ */
|
|
4783
|
-
/* @__PURE__ */
|
|
4784
|
-
/* @__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(
|
|
4785
4883
|
Input3,
|
|
4786
4884
|
{
|
|
4787
4885
|
autoFocus: true,
|
|
@@ -4791,9 +4889,9 @@ function IssueManagerTopicDialog({
|
|
|
4791
4889
|
}
|
|
4792
4890
|
)
|
|
4793
4891
|
] }),
|
|
4794
|
-
/* @__PURE__ */
|
|
4795
|
-
/* @__PURE__ */
|
|
4796
|
-
/* @__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(
|
|
4797
4895
|
Textarea,
|
|
4798
4896
|
{
|
|
4799
4897
|
className: "min-h-24 resize-none",
|
|
@@ -4803,9 +4901,9 @@ function IssueManagerTopicDialog({
|
|
|
4803
4901
|
}
|
|
4804
4902
|
)
|
|
4805
4903
|
] }),
|
|
4806
|
-
/* @__PURE__ */
|
|
4807
|
-
/* @__PURE__ */
|
|
4808
|
-
|
|
4904
|
+
/* @__PURE__ */ jsxs16(DialogFooter, { className: "pt-2", children: [
|
|
4905
|
+
/* @__PURE__ */ jsx18(
|
|
4906
|
+
Button12,
|
|
4809
4907
|
{
|
|
4810
4908
|
size: "dialog",
|
|
4811
4909
|
type: "button",
|
|
@@ -4814,14 +4912,14 @@ function IssueManagerTopicDialog({
|
|
|
4814
4912
|
children: copy.t("actions.cancel")
|
|
4815
4913
|
}
|
|
4816
4914
|
),
|
|
4817
|
-
/* @__PURE__ */
|
|
4915
|
+
/* @__PURE__ */ jsx18(Button12, { disabled: !title, size: "dialog", type: "submit", children: copy.t("actions.saveTopic") })
|
|
4818
4916
|
] })
|
|
4819
4917
|
] })
|
|
4820
4918
|
] }) });
|
|
4821
4919
|
}
|
|
4822
4920
|
|
|
4823
4921
|
// src/ui/IssueManagerNode.tsx
|
|
4824
|
-
import { jsx as
|
|
4922
|
+
import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
4825
4923
|
function IssueManagerNode({
|
|
4826
4924
|
emptyIllustration,
|
|
4827
4925
|
feature,
|
|
@@ -4887,7 +4985,7 @@ function IssueManagerNode({
|
|
|
4887
4985
|
},
|
|
4888
4986
|
workspaceId
|
|
4889
4987
|
});
|
|
4890
|
-
return /* @__PURE__ */
|
|
4988
|
+
return /* @__PURE__ */ jsxs17(
|
|
4891
4989
|
"section",
|
|
4892
4990
|
{
|
|
4893
4991
|
"aria-label": controller.copy.t("title"),
|
|
@@ -4895,7 +4993,7 @@ function IssueManagerNode({
|
|
|
4895
4993
|
"data-issue-manager-node-id": nodeId,
|
|
4896
4994
|
"data-issue-manager-workspace-id": workspaceId,
|
|
4897
4995
|
children: [
|
|
4898
|
-
/* @__PURE__ */
|
|
4996
|
+
/* @__PURE__ */ jsx19(
|
|
4899
4997
|
IssueManagerShell,
|
|
4900
4998
|
{
|
|
4901
4999
|
controller,
|
|
@@ -4907,7 +5005,7 @@ function IssueManagerNode({
|
|
|
4907
5005
|
selectedTask
|
|
4908
5006
|
}
|
|
4909
5007
|
),
|
|
4910
|
-
/* @__PURE__ */
|
|
5008
|
+
/* @__PURE__ */ jsx19(
|
|
4911
5009
|
WorkspaceFileReferencePicker,
|
|
4912
5010
|
{
|
|
4913
5011
|
copy: controller.copy,
|
|
@@ -4948,7 +5046,7 @@ function IssueManagerNodeHeader({
|
|
|
4948
5046
|
nodeId,
|
|
4949
5047
|
workspaceId
|
|
4950
5048
|
});
|
|
4951
|
-
return /* @__PURE__ */
|
|
5049
|
+
return /* @__PURE__ */ jsxs17(
|
|
4952
5050
|
"header",
|
|
4953
5051
|
{
|
|
4954
5052
|
...headerProps,
|
|
@@ -4957,10 +5055,10 @@ function IssueManagerNodeHeader({
|
|
|
4957
5055
|
className
|
|
4958
5056
|
),
|
|
4959
5057
|
children: [
|
|
4960
|
-
/* @__PURE__ */
|
|
4961
|
-
/* @__PURE__ */
|
|
4962
|
-
/* @__PURE__ */
|
|
4963
|
-
|
|
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,
|
|
4964
5062
|
{
|
|
4965
5063
|
"aria-label": toggleLabel,
|
|
4966
5064
|
className: "cursor-pointer rounded-md",
|
|
@@ -4976,17 +5074,17 @@ function IssueManagerNodeHeader({
|
|
|
4976
5074
|
},
|
|
4977
5075
|
onDoubleClick: (event) => event.stopPropagation(),
|
|
4978
5076
|
onPointerDown: (event) => event.stopPropagation(),
|
|
4979
|
-
children: /* @__PURE__ */
|
|
5077
|
+
children: /* @__PURE__ */ jsx19(PanelIcon, { className: "size-[18px]" })
|
|
4980
5078
|
}
|
|
4981
5079
|
)
|
|
4982
5080
|
] }),
|
|
4983
|
-
/* @__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(
|
|
4984
5082
|
"div",
|
|
4985
5083
|
{
|
|
4986
5084
|
className: "pointer-events-auto flex min-w-0 flex-none",
|
|
4987
5085
|
onDoubleClick: (event) => event.stopPropagation(),
|
|
4988
5086
|
onPointerDown: (event) => event.stopPropagation(),
|
|
4989
|
-
children: /* @__PURE__ */
|
|
5087
|
+
children: /* @__PURE__ */ jsx19(
|
|
4990
5088
|
IssueManagerTopicSelector,
|
|
4991
5089
|
{
|
|
4992
5090
|
activeTopicId: topicState.activeTopicId,
|
|
@@ -5025,7 +5123,7 @@ function IssueManagerNodeHeader({
|
|
|
5025
5123
|
)
|
|
5026
5124
|
}
|
|
5027
5125
|
) }),
|
|
5028
|
-
/* @__PURE__ */
|
|
5126
|
+
/* @__PURE__ */ jsx19(
|
|
5029
5127
|
"div",
|
|
5030
5128
|
{
|
|
5031
5129
|
className: "z-10 flex flex-none items-center gap-1",
|
|
@@ -5044,4 +5142,4 @@ export {
|
|
|
5044
5142
|
IssueManagerNode,
|
|
5045
5143
|
IssueManagerNodeHeader
|
|
5046
5144
|
};
|
|
5047
|
-
//# sourceMappingURL=chunk-
|
|
5145
|
+
//# sourceMappingURL=chunk-UXVTGSOH.js.map
|