(
{children}
-
+
);
});
@@ -246,33 +253,72 @@ export const TableCellMenu = forwardRef<
HTMLTableCellElement,
{
className?: string;
- children?: ReactNode;
isSticky?: boolean;
onClick?: (event: React.MouseEvent) => void;
+ visibleButtons?: ReactNode;
+ hiddenButtons?: ReactNode;
+ popoverContent?: ReactNode;
+ children?: ReactNode;
}
->(({ className, children, isSticky, onClick }, ref) => {
- const [isOpen, setIsOpen] = useState(false);
- return (
-
- setIsOpen(open)}>
-
-
- {children}
-
-
-
- );
-});
+>(
+ (
+ { className, isSticky, onClick, visibleButtons, hiddenButtons, popoverContent, children },
+ ref
+ ) => {
+ const [isOpen, setIsOpen] = useState(false);
+
+ return (
+
+
+
+ {/* Hidden buttons that show on hover */}
+ {hiddenButtons && (
+
+ {hiddenButtons}
+
+ )}
+ {/* Always visible buttons */}
+ {visibleButtons}
+ {/* Always visible popover with ellipsis trigger */}
+ {popoverContent && (
+ setIsOpen(open)}>
+
+
+ {popoverContent}
+
+
+ )}
+ {/* Optionally pass in children to render in a popover */}
+ {!visibleButtons && !hiddenButtons && !popoverContent && (
+ setIsOpen(open)}>
+
+
+ {children}
+
+
+ )}
+
+
+
+ );
+ }
+);
type TableBlankRowProps = {
className?: string;
diff --git a/apps/webapp/app/components/runs/v3/CancelRunDialog.tsx b/apps/webapp/app/components/runs/v3/CancelRunDialog.tsx
index 40be25ec74..d4264886b7 100644
--- a/apps/webapp/app/components/runs/v3/CancelRunDialog.tsx
+++ b/apps/webapp/app/components/runs/v3/CancelRunDialog.tsx
@@ -1,4 +1,6 @@
import { StopCircleIcon } from "@heroicons/react/20/solid";
+import { NoSymbolIcon } from "@heroicons/react/24/solid";
+import { DialogClose } from "@radix-ui/react-dialog";
import { Form, useFetcher, useNavigation } from "@remix-run/react";
import { Button } from "~/components/primitives/Buttons";
import {
@@ -7,6 +9,8 @@ import {
DialogFooter,
DialogHeader,
} from "~/components/primitives/Dialog";
+import { FormButtons } from "~/components/primitives/FormButtons";
+import { Paragraph } from "~/components/primitives/Paragraph";
type CancelRunDialogProps = {
runFriendlyId: string;
@@ -22,24 +26,33 @@ export function CancelRunDialog({ runFriendlyId, redirectPath }: CancelRunDialog
return (
Cancel this run?
-
- Canceling a run will stop execution, along with any executing subtasks.
-
-
-
-
+
+
+ Canceling a run will stop execution, along with any executing subtasks.
+
+
+
+
+ }
+ cancelButton={
+
+
+
+ }
+ />
+
);
}
diff --git a/apps/webapp/app/components/runs/v3/ReplayRunDialog.tsx b/apps/webapp/app/components/runs/v3/ReplayRunDialog.tsx
index b8af3646f8..589b686a5c 100644
--- a/apps/webapp/app/components/runs/v3/ReplayRunDialog.tsx
+++ b/apps/webapp/app/components/runs/v3/ReplayRunDialog.tsx
@@ -129,12 +129,12 @@ function ReplayForm({
defaultValue={environment.id}
items={environments}
dropdownIcon
- variant="tertiary/small"
+ variant="tertiary/medium"
className="w-fit pl-1"
text={(value) => {
const env = environments.find((env) => env.id === value)!;
return (
-
+
);
@@ -152,11 +152,11 @@ function ReplayForm({
-
+
|