setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
diff --git a/src/components/shared/InfoBox.tsx b/src/components/shared/InfoBox.tsx
index 4466b82811..9b0e11be48 100644
--- a/src/components/shared/InfoBox.tsx
+++ b/src/components/shared/InfoBox.tsx
@@ -66,12 +66,12 @@ export const InfoBox = ({
data-testid={`info-box-${variant}`}
className={cn("border rounded-md p-2", styles.container, widthClass)}
>
-
+
{title}
@@ -87,7 +87,11 @@ export const InfoBox = ({
)}
- {children}
+
+ {children}
+
);
};
diff --git a/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOCollapsibleSection.tsx b/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOCollapsibleSection.tsx
new file mode 100644
index 0000000000..1a2df78b5b
--- /dev/null
+++ b/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOCollapsibleSection.tsx
@@ -0,0 +1,53 @@
+import type { ReactNode } from "react";
+import { useState } from "react";
+
+import {
+ Collapsible,
+ CollapsibleContent,
+ CollapsibleTrigger,
+} from "@/components/ui/collapsible";
+import { Icon } from "@/components/ui/icon";
+import { BlockStack } from "@/components/ui/layout";
+import { Text } from "@/components/ui/typography";
+
+interface IOCollapsibleSectionProps {
+ title: string;
+ count: number;
+ children: ReactNode;
+}
+
+const IOCollapsibleSection = ({
+ title,
+ count,
+ children,
+}: IOCollapsibleSectionProps) => {
+ const [open, setOpen] = useState(true);
+
+ return (
+
+
+
+
+ {title}
+
+ {count > 0 && (
+
+ {count}
+
+ )}
+
+
+
+
+ {children}
+
+
+
+ );
+};
+
+export default IOCollapsibleSection;
diff --git a/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOExtras.tsx b/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOExtras.tsx
index e50fabd467..795e9c92ab 100644
--- a/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOExtras.tsx
+++ b/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOExtras.tsx
@@ -1,9 +1,8 @@
import type { GetExecutionArtifactsResponse } from "@/api/types.gen";
-import { BlockStack } from "@/components/ui/layout";
-import { Heading } from "@/components/ui/typography";
import type { InputSpec, OutputSpec } from "@/utils/componentSpec";
import IOCell from "./IOCell/IOCell";
+import IOCollapsibleSection from "./IOCollapsibleSection";
interface IOExtrasProps {
inputs?: InputSpec[];
@@ -27,21 +26,25 @@ const IOExtras = ({ inputs, outputs, artifacts }: IOExtrasProps) => {
return (
<>
{additionalInputs.length > 0 && (
-
- Additional Input Artifacts
+
{additionalInputs.map(([key, artifact]) => (
))}
-
+
)}
{additionalOutputs.length > 0 && (
-
- Additional Output Artifacts
+
{additionalOutputs.map(([key, artifact]) => (
))}
-
+
)}
>
);
diff --git a/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOInputs.tsx b/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOInputs.tsx
index a64a6c7f72..fa98c88a8e 100644
--- a/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOInputs.tsx
+++ b/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOInputs.tsx
@@ -1,9 +1,9 @@
import type { GetExecutionArtifactsResponse } from "@/api/types.gen";
-import { BlockStack } from "@/components/ui/layout";
-import { Heading, Paragraph } from "@/components/ui/typography";
+import { Paragraph } from "@/components/ui/typography";
import type { InputSpec } from "@/utils/componentSpec";
import IOCell from "./IOCell/IOCell";
+import IOCollapsibleSection from "./IOCollapsibleSection";
interface IOInputsProps {
inputs?: InputSpec[];
@@ -12,9 +12,7 @@ interface IOInputsProps {
const IOInputs = ({ inputs, artifacts }: IOInputsProps) => {
return (
-
- Inputs
-
+
{(!inputs || inputs.length === 0) && (
No inputs defined
@@ -33,7 +31,7 @@ const IOInputs = ({ inputs, artifacts }: IOInputsProps) => {
/>
);
})}
-
+
);
};
diff --git a/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOOutputs.tsx b/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOOutputs.tsx
index 0e9ebba797..8f0d13d310 100644
--- a/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOOutputs.tsx
+++ b/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/IOSection/IOOutputs.tsx
@@ -1,9 +1,9 @@
import type { GetExecutionArtifactsResponse } from "@/api/types.gen";
-import { BlockStack } from "@/components/ui/layout";
-import { Heading, Paragraph } from "@/components/ui/typography";
+import { Paragraph } from "@/components/ui/typography";
import type { OutputSpec } from "@/utils/componentSpec";
import IOCell from "./IOCell/IOCell";
+import IOCollapsibleSection from "./IOCollapsibleSection";
interface IOOutputsProps {
outputs?: OutputSpec[];
@@ -12,9 +12,7 @@ interface IOOutputsProps {
const IOOutputs = ({ outputs, artifacts }: IOOutputsProps) => {
return (
-
- Outputs
-
+
{(!outputs || outputs.length === 0) && (
No outputs defined
@@ -33,7 +31,7 @@ const IOOutputs = ({ outputs, artifacts }: IOOutputsProps) => {
/>
);
})}
-
+
);
};
diff --git a/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/logs.tsx b/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/logs.tsx
index ac5a987256..673816b2b7 100644
--- a/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/logs.tsx
+++ b/src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskOverview/logs.tsx
@@ -11,11 +11,13 @@ import { shouldStatusHaveLogs } from "@/utils/executionStatus";
const LogDisplay = ({
logs,
+ allowFullscreen,
}: {
logs: {
log_text?: string;
system_error_exception_full?: string;
};
+ allowFullscreen?: boolean;
}) => {
if (!logs.log_text && !logs.system_error_exception_full) {
return
No logs available
;
@@ -36,6 +38,7 @@ const LogDisplay = ({
language="text"
filename="Execution Logs"
scrollToBottom
+ allowFullscreen={allowFullscreen}
/>
)}
@@ -46,6 +49,7 @@ const LogDisplay = ({
language="text"
filename="System Error Logs"
scrollToBottom
+ allowFullscreen={allowFullscreen}
/>
)}
@@ -56,9 +60,11 @@ const LogDisplay = ({
const Logs = ({
executionId,
status,
+ allowFullscreen = true,
}: {
executionId?: string | number;
status?: string;
+ allowFullscreen?: boolean;
}) => {
const { backendUrl, configured, available } = useBackend();
@@ -132,7 +138,7 @@ const Logs = ({
return (