11/* eslint-disable @next/next/no-img-element */
2+ import { Trash2 } from "lucide-react" ;
23import { memo } from "react" ;
3- import { Handle , Position , NodeProps } from "reactflow" ;
4+ import { Handle , Position , NodeProps , NodeToolbar } from "reactflow" ;
45import "reactflow/dist/style.css" ;
6+ import { Nodes } from "." ;
57import { Label } from "../Label" ;
68
79export type Image = NodeProps < {
810 url : string ;
911
1012 prompt : string ;
1113 steps : number ;
14+ cfg_scale : number ;
1215} > ;
1316
1417export const Image = memo ( function Image ( node : Image ) {
18+ const { editNode, deleteNode } = Nodes . use ( ( state ) => ( {
19+ editNode : state . editNode ,
20+ deleteNode : state . deleteNode ,
21+ } ) ) ;
22+
1523 return (
1624 < div className = "rounded p-2 flex flex-col gap-2 bg-neutral-800 drop-shadow z-10 border border-white/10" >
1725 < Handle
@@ -24,6 +32,16 @@ export const Image = memo(function Image(node: Image) {
2432 position = { Position . Right }
2533 className = "!border-none !bg-white !p-1"
2634 />
35+ < NodeToolbar isVisible = { node . selected } >
36+ < div className = "bg-neutral-800 rounded flex flex-row overflow-hidden" >
37+ < button
38+ onClick = { ( ) => deleteNode ( node . id ) }
39+ className = "p-2 hover:bg-white/10 active:bg-white/20 text-red-400/80 duration-200 border-r border-white/10 first-of-type:border-l-transparent last-of-type:border-r-transparent"
40+ >
41+ < Trash2 size = { 16 } />
42+ </ button >
43+ </ div >
44+ </ NodeToolbar >
2745
2846 < img
2947 src = { node . data . url }
@@ -36,6 +54,11 @@ export const Image = memo(function Image(node: Image) {
3654 < textarea
3755 className = "px-1 py-[1px] rounded nodrag bg-neutral-900/50 focus:outline-none focus:border-indigo-500/50 border-transparent border-[2px]"
3856 value = { node . data . prompt }
57+ onChange = { ( e ) => {
58+ editNode ( node . id , {
59+ prompt : e . target . value ,
60+ } ) ;
61+ } }
3962 />
4063 </ div >
4164 < div className = "flex flex-row gap-1 justify-between items-center text-sm" >
@@ -44,14 +67,24 @@ export const Image = memo(function Image(node: Image) {
4467 type = "number"
4568 value = { node . data . steps }
4669 className = "px-1 py-[1px] rounded w-1/2 nodrag bg-neutral-900/50 focus:outline-none focus:border-indigo-500/50 border-transparent border-[2px]"
70+ onChange = { ( e ) => {
71+ editNode ( node . id , {
72+ steps : Number ( e . target . value ) ,
73+ } ) ;
74+ } }
4775 />
4876 </ div >
4977 < div className = "flex flex-row gap-1 justify-between items-center text-sm" >
5078 < Label > CFG Scale</ Label >
5179 < input
5280 type = "number"
53- value = { node . data . steps }
81+ value = { node . data . cfg_scale }
5482 className = "px-1 py-[1px] rounded w-1/2 nodrag bg-neutral-900/50 focus:outline-none focus:border-indigo-500/50 border-transparent border-[2px]"
83+ onChange = { ( e ) => {
84+ editNode ( node . id , {
85+ cfg_scale : Number ( e . target . value ) ,
86+ } ) ;
87+ } }
5588 />
5689 </ div >
5790 </ div >
0 commit comments