Canvas: Improve layout
Change-Id: Ife4f14d23eefc0ef0cb6b189446590fc42b8d797
diff --git a/apps/canvas/front/src/components/details.tsx b/apps/canvas/front/src/components/details.tsx
index 252952d..cb7d7fe 100644
--- a/apps/canvas/front/src/components/details.tsx
+++ b/apps/canvas/front/src/components/details.tsx
@@ -5,6 +5,7 @@
import { AccordionItem } from "@radix-ui/react-accordion";
import { useMemo, useState } from "react";
import { Icon } from "./icon";
+import { Separator } from "./ui/separator";
function unique<T>(v: T, i: number, a: T[]) {
return a.indexOf(v) === i;
@@ -42,18 +43,21 @@
const all = useMemo(() => open.concat(selected).filter(unique), [open, selected]);
return (
<Accordion type="multiple" value={all} onValueChange={(v) => setOpen(v)}>
- {sorted.map((n) => (
- <AccordionItem key={n.id} value={n.id} className="px-3">
- <AccordionTrigger>
- <div className="flex flex-row space-x-2">
- {Icon(n.type)}
- <span>{nodeLabel(n)}</span>
- </div>
- </AccordionTrigger>
- <AccordionContent>
- <NodeDetails {...n} />
- </AccordionContent>
- </AccordionItem>
+ {sorted.map((n, index) => (
+ <>
+ {index > 0 && <Separator className="my-2" />}
+ <AccordionItem key={n.id} value={n.id} className="px-3">
+ <AccordionTrigger>
+ <div className="flex flex-row space-x-2">
+ {Icon(n.type)}
+ <span>{nodeLabel(n)}</span>
+ </div>
+ </AccordionTrigger>
+ <AccordionContent>
+ <NodeDetails {...n} />
+ </AccordionContent>
+ </AccordionItem>
+ </>
))}
</Accordion>
);
diff --git a/apps/canvas/front/src/components/logs.tsx b/apps/canvas/front/src/components/logs.tsx
index 5918cf7..a2bf1ba 100644
--- a/apps/canvas/front/src/components/logs.tsx
+++ b/apps/canvas/front/src/components/logs.tsx
@@ -5,6 +5,7 @@
import { useToast } from "@/hooks/use-toast";
// ANSI escape sequence regex
+// eslint-disable-next-line no-control-regex
const ANSI_ESCAPE_REGEX = /\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g;
function cleanAnsiEscapeSequences(text: string): string {
@@ -98,7 +99,7 @@
}, [sortedServices, selectedService]);
return (
- <Card>
+ <Card className="h-full flex flex-col">
<CardHeader>
<Select value={selectedService} onValueChange={setSelectedService}>
<SelectTrigger>
@@ -113,11 +114,11 @@
</SelectContent>
</Select>
</CardHeader>
- <CardContent className="h-full">
+ <CardContent className="flex-1 min-h-0">
{selectedService && (
<pre
ref={preRef}
- className="p-4 bg-muted rounded-lg overflow-auto max-h-[500px] font-['JetBrains_Mono'] whitespace-pre-wrap break-all"
+ className="h-full p-4 bg-muted rounded-lg overflow-auto font-['JetBrains_Mono'] whitespace-pre-wrap break-all"
>
{cleanAnsiEscapeSequences(logs) || "No logs available"}
</pre>