@invergent/agent-chat-react 1.10.0 → 2.0.1
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/index.cjs +117 -33
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +14 -2
- package/dist/index.d.ts +14 -2
- package/dist/index.js +114 -33
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -228,13 +228,13 @@ var buttonVariants = classVarianceAuthority.cva(
|
|
|
228
228
|
link: "text-primary underline underline-offset-4 hover:underline"
|
|
229
229
|
},
|
|
230
230
|
size: {
|
|
231
|
-
default: "h-10 gap-1.5 px-6 has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4",
|
|
231
|
+
default: "h-11 md:h-10 gap-1.5 px-6 has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4",
|
|
232
232
|
xs: "h-7 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3",
|
|
233
|
-
sm: "h-9 gap-1 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
|
|
233
|
+
sm: "h-11 md:h-9 gap-1 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
|
|
234
234
|
lg: "h-11 gap-1.5 px-8 has-data-[icon=inline-end]:pr-5 has-data-[icon=inline-start]:pl-5",
|
|
235
|
-
icon: "size-10",
|
|
235
|
+
icon: "size-11 md:size-10",
|
|
236
236
|
"icon-xs": "size-7 [&_svg:not([class*='size-'])]:size-3",
|
|
237
|
-
"icon-sm": "size-9",
|
|
237
|
+
"icon-sm": "size-11 md:size-9",
|
|
238
238
|
"icon-lg": "size-11"
|
|
239
239
|
}
|
|
240
240
|
},
|
|
@@ -676,7 +676,7 @@ function BrowserPane({ sessionId, state, adapter }) {
|
|
|
676
676
|
DialogContent,
|
|
677
677
|
{
|
|
678
678
|
"aria-describedby": void 0,
|
|
679
|
-
className: "flex h-
|
|
679
|
+
className: "flex h-dvh w-screen max-w-none flex-col gap-0 overflow-hidden rounded-none border-0 bg-background p-0 shadow-none ring-0 sm:max-w-none",
|
|
680
680
|
children: [
|
|
681
681
|
/* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { className: "h-10 shrink-0 flex-row items-center gap-2 border-b border-line bg-card px-4 py-0", children: [
|
|
682
682
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ZapIcon, { className: "size-3.5 text-muted-foreground", "aria-hidden": "true" }),
|
|
@@ -3731,7 +3731,7 @@ function Input({ className, type, ...props }) {
|
|
|
3731
3731
|
type,
|
|
3732
3732
|
"data-slot": "input",
|
|
3733
3733
|
className: cn(
|
|
3734
|
-
"h-10 w-full min-w-0 border border-transparent border-b-input bg-transparent px-0 py-1 text-base transition-[color,border-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-b-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-b-destructive md:text-sm dark:aria-invalid:border-b-destructive/50",
|
|
3734
|
+
"h-11 md:h-10 w-full min-w-0 border border-transparent border-b-input bg-transparent px-0 py-1 text-base transition-[color,border-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-b-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-b-destructive md:text-sm dark:aria-invalid:border-b-destructive/50",
|
|
3735
3735
|
className
|
|
3736
3736
|
),
|
|
3737
3737
|
...props
|
|
@@ -4574,7 +4574,7 @@ function InputGroup({ className, ...props }) {
|
|
|
4574
4574
|
"data-slot": "input-group",
|
|
4575
4575
|
role: "group",
|
|
4576
4576
|
className: cn(
|
|
4577
|
-
"group/input-group relative flex h-10 w-full min-w-0 items-center rounded-none border border-transparent border-b-input bg-transparent transition-[color,border-color] outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-none has-data-[align=block-start]:rounded-none has-[[data-slot=input-group-control]:focus-visible]:border-b-ring has-[[data-slot][aria-invalid=true]]:border-b-destructive has-[textarea]:rounded-none has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:has-[[data-slot][aria-invalid=true]]:border-b-destructive/50 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3",
|
|
4577
|
+
"group/input-group relative flex h-11 md:h-10 w-full min-w-0 items-center rounded-none border border-transparent border-b-input bg-transparent transition-[color,border-color] outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-none has-data-[align=block-start]:rounded-none has-[[data-slot=input-group-control]:focus-visible]:border-b-ring has-[[data-slot][aria-invalid=true]]:border-b-destructive has-[textarea]:rounded-none has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:has-[[data-slot][aria-invalid=true]]:border-b-destructive/50 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3",
|
|
4578
4578
|
className
|
|
4579
4579
|
),
|
|
4580
4580
|
...props
|
|
@@ -7616,7 +7616,7 @@ function ChatThread({
|
|
|
7616
7616
|
] }) }),
|
|
7617
7617
|
/* @__PURE__ */ jsxRuntime.jsx(ConversationScrollButton, {})
|
|
7618
7618
|
] }),
|
|
7619
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-4xl px-6 pb-5 pt-3", children: [
|
|
7619
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-4xl px-3 sm:px-6 pb-3 sm:pb-5 pt-3", children: [
|
|
7620
7620
|
retryIndicator && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2", children: /* @__PURE__ */ jsxRuntime.jsx(RetryBanner, { indicator: retryIndicator }) }),
|
|
7621
7621
|
disabled && disabledReason ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
7622
7622
|
"div",
|
|
@@ -8281,7 +8281,7 @@ function RenderEntries({
|
|
|
8281
8281
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-4 shrink-0" }),
|
|
8282
8282
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate", children: entry.name }),
|
|
8283
8283
|
entry.size != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 shrink-0 text-xs text-muted-foreground/60", children: formatFileSize(entry.size) }),
|
|
8284
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-1 flex shrink-0 items-center gap-0 opacity-
|
|
8284
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-1 flex shrink-0 items-center gap-0 opacity-100 transition-opacity md:opacity-0 md:group-hover:opacity-100", children: [
|
|
8285
8285
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8286
8286
|
"a",
|
|
8287
8287
|
{
|
|
@@ -8716,6 +8716,9 @@ function ConfirmDialog({
|
|
|
8716
8716
|
);
|
|
8717
8717
|
}
|
|
8718
8718
|
|
|
8719
|
+
// src/agent-chat.tsx
|
|
8720
|
+
init_utils();
|
|
8721
|
+
|
|
8719
8722
|
// src/lib/sessions.ts
|
|
8720
8723
|
function isScheduledRunSession(session) {
|
|
8721
8724
|
return Boolean(
|
|
@@ -9806,6 +9809,9 @@ function parseGoalDefinition(content) {
|
|
|
9806
9809
|
const rubric = match ? args.slice(match.index + match[0].length).trim() : "";
|
|
9807
9810
|
return rubric ? { description, rubric } : { description };
|
|
9808
9811
|
}
|
|
9812
|
+
var RIGHT_STACK_STYLE = {
|
|
9813
|
+
["--right-stack-w"]: "440px"
|
|
9814
|
+
};
|
|
9809
9815
|
function AgentChat({
|
|
9810
9816
|
adapter,
|
|
9811
9817
|
agentId,
|
|
@@ -9817,6 +9823,7 @@ function AgentChat({
|
|
|
9817
9823
|
onComposerError
|
|
9818
9824
|
}) {
|
|
9819
9825
|
const [workspacePath, setWorkspacePath] = react.useState(null);
|
|
9826
|
+
const [mobileView, setMobileView] = react.useState("chat");
|
|
9820
9827
|
const runtime = useAgentChatRuntime({
|
|
9821
9828
|
adapter,
|
|
9822
9829
|
agentId,
|
|
@@ -9834,10 +9841,12 @@ function AgentChat({
|
|
|
9834
9841
|
const handleFileSelect = react.useCallback(
|
|
9835
9842
|
(path) => {
|
|
9836
9843
|
setWorkspacePath(path);
|
|
9844
|
+
setMobileView("workspace");
|
|
9837
9845
|
onFileSelect?.(path);
|
|
9838
9846
|
},
|
|
9839
9847
|
[onFileSelect]
|
|
9840
9848
|
);
|
|
9849
|
+
const showMobileToggle = Boolean(sessionId);
|
|
9841
9850
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
9842
9851
|
AgentChatAdapterProvider,
|
|
9843
9852
|
{
|
|
@@ -9850,15 +9859,56 @@ function AgentChat({
|
|
|
9850
9859
|
"section",
|
|
9851
9860
|
{
|
|
9852
9861
|
"data-testid": "agent-chat-layout",
|
|
9853
|
-
|
|
9854
|
-
|
|
9862
|
+
"data-mobile-view": mobileView,
|
|
9863
|
+
className: cn(
|
|
9864
|
+
// Phone: flex column, tab toggle on top, then either chat or
|
|
9865
|
+
// right stack visible based on `data-mobile-view`.
|
|
9866
|
+
"flex min-h-0 flex-1 flex-col overflow-hidden bg-background text-sm text-foreground",
|
|
9867
|
+
// md+: restore desktop two-pane layout.
|
|
9868
|
+
hasBrowserPanel ? "md:relative md:flex-row" : "md:flex-row"
|
|
9869
|
+
),
|
|
9870
|
+
style: { direction: "ltr", ...RIGHT_STACK_STYLE },
|
|
9855
9871
|
children: [
|
|
9872
|
+
showMobileToggle && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "md:hidden flex shrink-0 border-b border-line bg-card", children: [
|
|
9873
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9874
|
+
"button",
|
|
9875
|
+
{
|
|
9876
|
+
type: "button",
|
|
9877
|
+
onClick: () => setMobileView("chat"),
|
|
9878
|
+
"aria-pressed": mobileView === "chat",
|
|
9879
|
+
className: cn(
|
|
9880
|
+
"flex-1 px-4 py-3 text-sm font-medium border-b-2 -mb-px transition-colors",
|
|
9881
|
+
mobileView === "chat" ? "border-primary text-foreground" : "border-transparent text-subtle hover:text-foreground"
|
|
9882
|
+
),
|
|
9883
|
+
children: "Chat"
|
|
9884
|
+
}
|
|
9885
|
+
),
|
|
9886
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9887
|
+
"button",
|
|
9888
|
+
{
|
|
9889
|
+
type: "button",
|
|
9890
|
+
onClick: () => setMobileView("workspace"),
|
|
9891
|
+
"aria-pressed": mobileView === "workspace",
|
|
9892
|
+
className: cn(
|
|
9893
|
+
"flex-1 px-4 py-3 text-sm font-medium border-b-2 -mb-px transition-colors",
|
|
9894
|
+
mobileView === "workspace" ? "border-primary text-foreground" : "border-transparent text-subtle hover:text-foreground"
|
|
9895
|
+
),
|
|
9896
|
+
children: "Workspace"
|
|
9897
|
+
}
|
|
9898
|
+
)
|
|
9899
|
+
] }),
|
|
9856
9900
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9857
9901
|
"div",
|
|
9858
9902
|
{
|
|
9859
9903
|
"data-testid": "chat-panel",
|
|
9860
|
-
|
|
9861
|
-
|
|
9904
|
+
"data-mobile-view": mobileView,
|
|
9905
|
+
className: cn(
|
|
9906
|
+
// Phone: full width column, hidden when workspace tab active.
|
|
9907
|
+
"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden",
|
|
9908
|
+
showMobileToggle && "data-[mobile-view=workspace]:hidden md:flex!",
|
|
9909
|
+
// md+: restore desktop positioning.
|
|
9910
|
+
hasBrowserPanel ? "md:absolute md:inset-y-0 md:left-0 md:right-(--right-stack-w,440px) md:flex" : "md:relative md:flex-1"
|
|
9911
|
+
),
|
|
9862
9912
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
9863
9913
|
ChatThread,
|
|
9864
9914
|
{
|
|
@@ -9883,8 +9933,16 @@ function AgentChat({
|
|
|
9883
9933
|
"div",
|
|
9884
9934
|
{
|
|
9885
9935
|
"data-testid": "right-stack",
|
|
9886
|
-
|
|
9887
|
-
|
|
9936
|
+
"data-mobile-view": mobileView,
|
|
9937
|
+
className: cn(
|
|
9938
|
+
// Phone: full width column, hidden when chat tab active.
|
|
9939
|
+
"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden",
|
|
9940
|
+
showMobileToggle && "data-[mobile-view=chat]:hidden md:flex!",
|
|
9941
|
+
// md+: restore desktop positioning. With browser panel the
|
|
9942
|
+
// right stack is absolutely positioned at the configured
|
|
9943
|
+
// width; without it the stack flows in the row.
|
|
9944
|
+
hasBrowserPanel ? "md:absolute md:inset-y-0 md:right-0 md:w-(--right-stack-w,440px) md:flex-none" : "md:relative md:shrink-0 md:flex-none md:w-(--right-stack-w,440px)"
|
|
9945
|
+
),
|
|
9888
9946
|
children: [
|
|
9889
9947
|
hasBrowserPanel && /* @__PURE__ */ jsxRuntime.jsx(
|
|
9890
9948
|
"div",
|
|
@@ -10722,6 +10780,16 @@ function truncate2(s, max) {
|
|
|
10722
10780
|
return `${s.slice(0, max - 1)}\u2026`;
|
|
10723
10781
|
}
|
|
10724
10782
|
var DEFAULT_POLL_INTERVAL_MS = 5e3;
|
|
10783
|
+
var MISSION_WORKER_KIND_BADGE_CLASS = {
|
|
10784
|
+
task: "border-primary/40 bg-primary/10 text-primary uppercase tracking-wide text-[10px]",
|
|
10785
|
+
worker: "border-foreground/30 bg-foreground/5 text-foreground/80 uppercase tracking-wide text-[10px]",
|
|
10786
|
+
delegation: "border-foreground/20 bg-foreground/[0.03] text-foreground/60 uppercase tracking-wide text-[10px]"
|
|
10787
|
+
};
|
|
10788
|
+
var MISSION_WORKER_KIND_TOOLTIP = {
|
|
10789
|
+
task: "Durable Task row created by spawn_task. Retried by the dispatcher; survives across coordinator wakes.",
|
|
10790
|
+
worker: "Async one-shot session spawned by spawn_worker. Durable session, no retry/DAG.",
|
|
10791
|
+
delegation: "Sync fork-join child spawned by delegate_task. Coordinator's wake blocked until it finished."
|
|
10792
|
+
};
|
|
10725
10793
|
var INITIAL_STATE = {
|
|
10726
10794
|
mission: null,
|
|
10727
10795
|
tasks: [],
|
|
@@ -10808,7 +10876,11 @@ function MissionDashboard({
|
|
|
10808
10876
|
[state.tasks]
|
|
10809
10877
|
);
|
|
10810
10878
|
const runningWorkerCount = react.useMemo(
|
|
10811
|
-
|
|
10879
|
+
// "running" means the child is still consuming compute right now.
|
|
10880
|
+
// For task-backed children that's ``taskStatus === "running"``; for
|
|
10881
|
+
// spawn_worker / delegate_task direct children the Task row doesn't
|
|
10882
|
+
// exist, so fall back to the session-level signal.
|
|
10883
|
+
() => state.workers.filter((w) => w.kind === "task" ? w.taskStatus === "running" : w.sessionStatus === "active").length,
|
|
10812
10884
|
[state.workers]
|
|
10813
10885
|
);
|
|
10814
10886
|
if (state.loading && !state.mission) {
|
|
@@ -10871,16 +10943,16 @@ function MissionDashboard({
|
|
|
10871
10943
|
}
|
|
10872
10944
|
};
|
|
10873
10945
|
const statusVariant = mission.status === "satisfied" ? "default" : mission.status === "failed" || mission.status === "cancelled" ? "destructive" : "secondary";
|
|
10874
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-
|
|
10946
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 p-4 sm:gap-6 sm:p-6", children: [
|
|
10875
10947
|
/* @__PURE__ */ jsxRuntime.jsxs(Card, { children: [
|
|
10876
|
-
/* @__PURE__ */ jsxRuntime.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between
|
|
10877
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
10948
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-stretch gap-4 sm:flex-row sm:items-start sm:justify-between", children: [
|
|
10949
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 min-w-0 flex-1", children: [
|
|
10878
10950
|
/* @__PURE__ */ jsxRuntime.jsx(CardTitle, { className: "wrap-break-word -uppercase text-sm", children: mission.description }),
|
|
10879
10951
|
/* @__PURE__ */ jsxRuntime.jsxs(CardDescription, { className: "wrap-break-word text-foreground/70", children: [
|
|
10880
10952
|
"Rubric: ",
|
|
10881
10953
|
mission.rubric
|
|
10882
10954
|
] }),
|
|
10883
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 pt-2 text-xs text-foreground/70", children: [
|
|
10955
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1 pt-2 text-xs text-foreground/70", children: [
|
|
10884
10956
|
/* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: statusVariant, className: "font-mono text-foreground", children: mission.status }),
|
|
10885
10957
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono text-primary", children: [
|
|
10886
10958
|
"Iteration ",
|
|
@@ -10895,7 +10967,7 @@ function MissionDashboard({
|
|
|
10895
10967
|
] }) : null
|
|
10896
10968
|
] })
|
|
10897
10969
|
] }),
|
|
10898
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: ACTIVE_MISSION_STATUSES.has(mission.status) ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
10970
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-2 shrink-0", children: ACTIVE_MISSION_STATUSES.has(mission.status) ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
10899
10971
|
mission.status === "active" ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
10900
10972
|
Button,
|
|
10901
10973
|
{
|
|
@@ -11015,11 +11087,20 @@ function MissionDashboard({
|
|
|
11015
11087
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
11016
11088
|
"li",
|
|
11017
11089
|
{
|
|
11018
|
-
className: "flex items-start justify-between
|
|
11090
|
+
className: "flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between rounded border border-border/40 px-3 py-2 text-sm",
|
|
11019
11091
|
children: [
|
|
11020
11092
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1 space-y-1", children: [
|
|
11021
11093
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
11022
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11094
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11095
|
+
Badge,
|
|
11096
|
+
{
|
|
11097
|
+
variant: "outline",
|
|
11098
|
+
className: MISSION_WORKER_KIND_BADGE_CLASS[w.kind],
|
|
11099
|
+
title: MISSION_WORKER_KIND_TOOLTIP[w.kind],
|
|
11100
|
+
children: w.kind
|
|
11101
|
+
}
|
|
11102
|
+
),
|
|
11103
|
+
/* @__PURE__ */ jsxRuntime.jsx(Badge, { className: "text-foreground/70", children: w.kind === "task" ? w.taskStatus ?? "\u2014" : w.sessionStatus }),
|
|
11023
11104
|
w.agentDefName ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-foreground/70", children: w.agentDefName }) : null
|
|
11024
11105
|
] }),
|
|
11025
11106
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm wrap-break-word", children: deriveMissionWorkerActivityLabel(w) }),
|
|
@@ -11174,7 +11255,8 @@ function MissionRow({
|
|
|
11174
11255
|
"div",
|
|
11175
11256
|
{
|
|
11176
11257
|
className: cn(
|
|
11177
|
-
"group flex min-w-0 items-start gap-2 border-l-2 border-l-transparent px-3 py-2 text-sm transition-colors cursor-pointer hover:border-l-primary hover:bg-input"
|
|
11258
|
+
"group flex min-w-0 items-start gap-2 border-l-2 border-l-transparent px-3 py-2 text-sm transition-colors cursor-pointer hover:border-l-primary hover:bg-input",
|
|
11259
|
+
"min-h-11 md:min-h-0"
|
|
11178
11260
|
),
|
|
11179
11261
|
onClick: openMission,
|
|
11180
11262
|
onKeyDown: handleRowKeyDown,
|
|
@@ -11201,7 +11283,7 @@ function MissionRow({
|
|
|
11201
11283
|
"button",
|
|
11202
11284
|
{
|
|
11203
11285
|
type: "button",
|
|
11204
|
-
className: "rounded p-1 text-faint opacity-70 transition-all hover:bg-line hover:text-foreground disabled:pointer-events-none disabled:opacity-40 group-hover:opacity-100",
|
|
11286
|
+
className: "rounded p-2 md:p-1 text-faint opacity-100 md:opacity-70 transition-all hover:bg-line hover:text-foreground disabled:pointer-events-none disabled:opacity-40 md:group-hover:opacity-100",
|
|
11205
11287
|
onClick: (e) => {
|
|
11206
11288
|
stopActionClick(e);
|
|
11207
11289
|
onPause(mission.id);
|
|
@@ -11216,7 +11298,7 @@ function MissionRow({
|
|
|
11216
11298
|
"button",
|
|
11217
11299
|
{
|
|
11218
11300
|
type: "button",
|
|
11219
|
-
className: "rounded p-1 text-faint opacity-70 transition-all hover:bg-line hover:text-foreground disabled:pointer-events-none disabled:opacity-40 group-hover:opacity-100",
|
|
11301
|
+
className: "rounded p-2 md:p-1 text-faint opacity-100 md:opacity-70 transition-all hover:bg-line hover:text-foreground disabled:pointer-events-none disabled:opacity-40 md:group-hover:opacity-100",
|
|
11220
11302
|
onClick: (e) => {
|
|
11221
11303
|
stopActionClick(e);
|
|
11222
11304
|
onResume(mission.id);
|
|
@@ -11231,7 +11313,7 @@ function MissionRow({
|
|
|
11231
11313
|
"button",
|
|
11232
11314
|
{
|
|
11233
11315
|
type: "button",
|
|
11234
|
-
className: "rounded p-1 text-faint opacity-70 transition-all hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none disabled:opacity-40 group-hover:opacity-100",
|
|
11316
|
+
className: "rounded p-2 md:p-1 text-faint opacity-100 md:opacity-70 transition-all hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none disabled:opacity-40 md:group-hover:opacity-100",
|
|
11235
11317
|
onClick: (e) => {
|
|
11236
11318
|
stopActionClick(e);
|
|
11237
11319
|
onCancel(mission.id);
|
|
@@ -11509,6 +11591,7 @@ function ScheduledWorkRow({
|
|
|
11509
11591
|
{
|
|
11510
11592
|
className: cn(
|
|
11511
11593
|
"group flex min-w-0 items-start gap-2 border-l-2 border-l-transparent px-3 py-2 text-sm transition-colors hover:border-l-primary hover:bg-input",
|
|
11594
|
+
"min-h-11 md:min-h-0",
|
|
11512
11595
|
lastSessionId && "cursor-pointer"
|
|
11513
11596
|
),
|
|
11514
11597
|
onClick: openLastRun,
|
|
@@ -11535,7 +11618,7 @@ function ScheduledWorkRow({
|
|
|
11535
11618
|
"button",
|
|
11536
11619
|
{
|
|
11537
11620
|
type: "button",
|
|
11538
|
-
className: "rounded p-1 text-faint opacity-70 transition-all hover:bg-line hover:text-foreground disabled:pointer-events-none disabled:opacity-40 group-hover:opacity-100",
|
|
11621
|
+
className: "rounded p-2 md:p-1 text-faint opacity-100 md:opacity-70 transition-all hover:bg-line hover:text-foreground disabled:pointer-events-none disabled:opacity-40 md:group-hover:opacity-100",
|
|
11539
11622
|
onClick: (e) => {
|
|
11540
11623
|
stopActionClick(e);
|
|
11541
11624
|
onRunNow(item.id);
|
|
@@ -11550,7 +11633,7 @@ function ScheduledWorkRow({
|
|
|
11550
11633
|
"button",
|
|
11551
11634
|
{
|
|
11552
11635
|
type: "button",
|
|
11553
|
-
className: "rounded p-1 text-faint opacity-70 transition-all hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none disabled:opacity-40 group-hover:opacity-100",
|
|
11636
|
+
className: "rounded p-2 md:p-1 text-faint opacity-100 md:opacity-70 transition-all hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none disabled:opacity-40 md:group-hover:opacity-100",
|
|
11554
11637
|
onClick: (e) => {
|
|
11555
11638
|
stopActionClick(e);
|
|
11556
11639
|
onCancel(item.id);
|
|
@@ -11857,6 +11940,7 @@ function TreeNodeRow({
|
|
|
11857
11940
|
},
|
|
11858
11941
|
className: cn(
|
|
11859
11942
|
"group flex items-center gap-2 w-full py-2 pr-2 text-left cursor-pointer transition-colors border-l-2",
|
|
11943
|
+
"min-h-11 md:min-h-0",
|
|
11860
11944
|
isActive ? "bg-line text-foreground border-l-primary" : "bg-transparent text-subtle hover:bg-input hover:text-foreground border-l-transparent"
|
|
11861
11945
|
),
|
|
11862
11946
|
style: { paddingLeft: `${depth * 12 + 12}px` },
|
|
@@ -11865,7 +11949,7 @@ function TreeNodeRow({
|
|
|
11865
11949
|
"button",
|
|
11866
11950
|
{
|
|
11867
11951
|
type: "button",
|
|
11868
|
-
className: "p-0.5 rounded hover:bg-line shrink-0",
|
|
11952
|
+
className: "p-2 md:p-0.5 rounded hover:bg-line shrink-0",
|
|
11869
11953
|
onClick: (e) => {
|
|
11870
11954
|
e.stopPropagation();
|
|
11871
11955
|
setExpanded(!expanded);
|
|
@@ -11883,7 +11967,7 @@ function TreeNodeRow({
|
|
|
11883
11967
|
"button",
|
|
11884
11968
|
{
|
|
11885
11969
|
type: "button",
|
|
11886
|
-
className: "p-1 rounded opacity-0 group-hover:opacity-100 hover:bg-destructive/10 hover:text-destructive transition-all",
|
|
11970
|
+
className: "p-2 md:p-1 rounded opacity-100 md:opacity-0 md:group-hover:opacity-100 hover:bg-destructive/10 hover:text-destructive transition-all",
|
|
11887
11971
|
onClick: (e) => {
|
|
11888
11972
|
e.stopPropagation();
|
|
11889
11973
|
onStop(entry.id);
|
|
@@ -11898,8 +11982,8 @@ function TreeNodeRow({
|
|
|
11898
11982
|
{
|
|
11899
11983
|
type: "button",
|
|
11900
11984
|
className: cn(
|
|
11901
|
-
"p-1 rounded hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none transition-all",
|
|
11902
|
-
deletingSessionId === entry.id ? "opacity-100" : "opacity-0 group-hover:opacity-100 focus-visible:opacity-100"
|
|
11985
|
+
"p-2 md:p-1 rounded hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none transition-all",
|
|
11986
|
+
deletingSessionId === entry.id ? "opacity-100" : "opacity-100 md:opacity-0 md:group-hover:opacity-100 md:focus-visible:opacity-100"
|
|
11903
11987
|
),
|
|
11904
11988
|
onClick: (e) => {
|
|
11905
11989
|
e.stopPropagation();
|