import { toast } from "sonner"; import { Artifact } from "@/components/create-artifact"; import { CopyIcon, RedoIcon, UndoIcon } from "@/components/icons"; import { ImageEditor } from "@/components/image-editor"; export const imageArtifact = new Artifact({ kind: "image", description: "Useful for image generation", onStreamPart: ({ streamPart, setArtifact }) => { if (streamPart.type === "data-imageDelta") { setArtifact((draftArtifact) => ({ ...draftArtifact, content: streamPart.data, isVisible: true, status: "streaming", })); } }, content: ImageEditor, actions: [ { icon: , description: "View Previous version", onClick: ({ handleVersionChange }) => { handleVersionChange("prev"); }, isDisabled: ({ currentVersionIndex }) => { if (currentVersionIndex === 0) { return true; } return false; }, }, { icon: , description: "View Next version", onClick: ({ handleVersionChange }) => { handleVersionChange("next"); }, isDisabled: ({ isCurrentVersion }) => { if (isCurrentVersion) { return true; } return false; }, }, { icon: , description: "Copy image to clipboard", onClick: ({ content }) => { const img = new Image(); img.src = `data:image/png;base64,${content}`; img.onload = () => { const canvas = document.createElement("canvas"); canvas.width = img.width; canvas.height = img.height; const ctx = canvas.getContext("2d"); ctx?.drawImage(img, 0, 0); canvas.toBlob((blob) => { if (blob) { navigator.clipboard.write([ new ClipboardItem({ "image/png": blob }), ]); } }, "image/png"); }; toast.success("Copied image to clipboard!"); }, }, ], toolbar: [], });