import { Artifact } from '@/components/create-artifact'; import { CopyIcon, RedoIcon, UndoIcon } from '@/components/icons'; import { ImageEditor } from '@/components/image-editor'; import { toast } from 'sonner'; 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: [], });