diff --git a/packages/studio/src/components/MobileGenerationActions.jsx b/packages/studio/src/components/MobileGenerationActions.jsx
new file mode 100644
index 0000000..7192899
--- /dev/null
+++ b/packages/studio/src/components/MobileGenerationActions.jsx
@@ -0,0 +1,129 @@
+"use client";
+
+import { useState } from "react";
+
+function ActionIcon({ kind }) {
+ if (kind === "download") {
+ return (
+
+ );
+ }
+
+ if (kind === "delete") {
+ return (
+
+ );
+ }
+
+ if (kind === "extend") {
+ return (
+
+ );
+ }
+
+ if (kind === "remix") {
+ return (
+
+ );
+ }
+
+ if (kind === "copy") {
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+}
+
+export default function MobileGenerationActions({ actions = [] }) {
+ const [open, setOpen] = useState(false);
+ const availableActions = actions.filter(Boolean);
+
+ if (availableActions.length === 0) return null;
+
+ const stopCardClick = (event) => {
+ event.stopPropagation();
+ };
+
+ const runAction = (event, action) => {
+ event.stopPropagation();
+ setOpen(false);
+ action.onSelect?.();
+ };
+
+ return (
+
+ {open && (
+
+ );
+}
diff --git a/packages/studio/src/components/RecastStudio.jsx b/packages/studio/src/components/RecastStudio.jsx
index 25b61bf..a277081 100644
--- a/packages/studio/src/components/RecastStudio.jsx
+++ b/packages/studio/src/components/RecastStudio.jsx
@@ -5,6 +5,7 @@ import toast, { Toaster } from "react-hot-toast";
import { processRecast, uploadFile } from "../muapi.js";
import { formatErrorMessage } from "../utils/formatError.js";
import { scopedPersistKey, migrateLegacyPersistKey } from "../persistKey.js";
+import MobileGenerationActions from "./MobileGenerationActions.jsx";
import {
recastModels,
getRecastModelById,
@@ -790,12 +791,12 @@ export default function RecastStudio({
{history.map((entry, idx) => (
setFullscreenUrl(entry.url)}
>