@@ -155,10 +155,10 @@ const NodeSidebar = ({
155155 const nodeDefaults = defaultValues [ selectedNode . type ] || { } ;
156156
157157 // Create a list of all possible parameters (both current data and defaults)
158- // Exclude 'label' since it's now editable directly in the title
158+ // Exclude 'label' and 'nodeColor' since they're handled separately
159159 const allParams = new Set ( [
160- ...Object . keys ( selectedNode . data ) . filter ( key => key !== 'label' ) ,
161- ...Object . keys ( nodeDefaults ) . filter ( key => key !== 'label' )
160+ ...Object . keys ( selectedNode . data ) . filter ( key => key !== 'label' && key !== 'nodeColor' ) ,
161+ ...Object . keys ( nodeDefaults ) . filter ( key => key !== 'label' && key !== 'nodeColor' )
162162 ] ) ;
163163
164164 return Array . from ( allParams )
@@ -212,6 +212,133 @@ const NodeSidebar = ({
212212 } ) ;
213213 } ) ( ) }
214214
215+ { /* Color Picker Section */ }
216+ < div style = { {
217+ marginTop : '20px' ,
218+ marginBottom : '20px' ,
219+ borderTop : '1px solid #555' ,
220+ paddingTop : '15px'
221+ } } >
222+ < h4 style = { {
223+ margin : '0 0 12px 0' ,
224+ fontSize : '14px' ,
225+ fontWeight : '600' ,
226+ color : '#a8b3cf' ,
227+ textTransform : 'uppercase' ,
228+ letterSpacing : '0.5px'
229+ } } > Node Color</ h4 >
230+
231+ < div style = { {
232+ display : 'flex' ,
233+ alignItems : 'center' ,
234+ gap : '12px' ,
235+ marginBottom : '8px'
236+ } } >
237+ < input
238+ type = "color"
239+ value = { selectedNode . data . nodeColor || '#DDE6ED' }
240+ onChange = { ( e ) => {
241+ const newColor = e . target . value ;
242+ const updatedNode = {
243+ ...selectedNode ,
244+ data : { ...selectedNode . data , nodeColor : newColor } ,
245+ } ;
246+
247+ setNodes ( ( nds ) =>
248+ nds . map ( ( node ) =>
249+ node . id === selectedNode . id ? updatedNode : node
250+ )
251+ ) ;
252+ setSelectedNode ( updatedNode ) ;
253+ } }
254+ style = { {
255+ width : '40px' ,
256+ height : '40px' ,
257+ borderRadius : '6px' ,
258+ border : '2px solid #555' ,
259+ backgroundColor : 'transparent' ,
260+ cursor : 'pointer' ,
261+ padding : '0'
262+ } }
263+ />
264+
265+ < input
266+ type = "text"
267+ value = { selectedNode . data . nodeColor || '#DDE6ED' }
268+ onChange = { ( e ) => {
269+ const newColor = e . target . value ;
270+ const updatedNode = {
271+ ...selectedNode ,
272+ data : { ...selectedNode . data , nodeColor : newColor } ,
273+ } ;
274+
275+ setNodes ( ( nds ) =>
276+ nds . map ( ( node ) =>
277+ node . id === selectedNode . id ? updatedNode : node
278+ )
279+ ) ;
280+ setSelectedNode ( updatedNode ) ;
281+ } }
282+ placeholder = "#DDE6ED"
283+ style = { {
284+ flex : 1 ,
285+ padding : '8px 12px' ,
286+ borderRadius : '4px' ,
287+ border : '1px solid #555' ,
288+ backgroundColor : '#2a2a3e' ,
289+ color : '#ffffff' ,
290+ fontSize : '14px' ,
291+ fontFamily : 'monospace'
292+ } }
293+ />
294+ </ div >
295+
296+ { /* Color preset buttons */ }
297+ < div style = { {
298+ display : 'grid' ,
299+ gridTemplateColumns : 'repeat(4, 1fr)' ,
300+ gap : '8px' ,
301+ marginTop : '12px'
302+ } } >
303+ { [ '#DDE6ED' , '#FFE5E5' , '#E5F3FF' , '#E5FFE5' , '#FFF5E5' , '#F0E5FF' , '#FFE5F5' , '#E5FFFF' ] . map ( color => (
304+ < button
305+ key = { color }
306+ onClick = { ( ) => {
307+ const updatedNode = {
308+ ...selectedNode ,
309+ data : { ...selectedNode . data , nodeColor : color } ,
310+ } ;
311+
312+ setNodes ( ( nds ) =>
313+ nds . map ( ( node ) =>
314+ node . id === selectedNode . id ? updatedNode : node
315+ )
316+ ) ;
317+ setSelectedNode ( updatedNode ) ;
318+ } }
319+ style = { {
320+ width : '100%' ,
321+ height : '30px' ,
322+ backgroundColor : color ,
323+ border : selectedNode . data . nodeColor === color ? '2px solid #007bff' : '1px solid #666' ,
324+ borderRadius : '4px' ,
325+ cursor : 'pointer' ,
326+ transition : 'all 0.2s ease'
327+ } }
328+ onMouseEnter = { ( e ) => {
329+ if ( selectedNode . data . nodeColor !== color ) {
330+ e . target . style . transform = 'scale(1.05)' ;
331+ }
332+ } }
333+ onMouseLeave = { ( e ) => {
334+ e . target . style . transform = 'scale(1)' ;
335+ } }
336+ title = { color }
337+ />
338+ ) ) }
339+ </ div >
340+ </ div >
341+
215342 < br />
216343 < button
217344 style = { {
0 commit comments