+
handleDragStart(e, node)}
+ onDragOver={(e) => handleDragOver(e, node)}
+ onDragLeave={handleDragLeave}
+ onDrop={(e) => handleDrop(e, node)}
+ onDragEnd={handleDragEnd}>
+ onSelectNode(node)}>
+
+
+ {node.type === 'folder' && (
+ {
+ e.stopPropagation()
+ onToggleExpanded(node.id)
+ }}
+ title={node.expanded ? t('notes.collapse') : t('notes.expand')}>
+ {node.expanded ? : }
+
+ )}
+
+
+ {node.type === 'folder' ? (
+ node.expanded ? (
+
+ ) : (
+
+ )
+ ) : (
+
+ )}
+
+
+ {isEditing ? (
+ setEditingName(e.target.value)}
+ onPressEnter={handleFinishEdit}
+ onBlur={handleFinishEdit}
+ onKeyDown={(e) => {
+ if (e.key === 'Escape') {
+ handleCancelEdit()
+ }
+ }}
+ autoFocus
+ size="small"
+ />
+ ) : (
+ {node.name}
+ )}
+
+ {node.is_starred && (
+
+
+
+ )}
+
+
+
+
+ {
+ e.stopPropagation()
+ onToggleStarred(node.id)
+ }}>
+
+
+
+
+
+ {
+ e.stopPropagation()
+ handleStartEdit(node)
+ }}>
+
+
+
+
+
+ {
+ e.stopPropagation()
+ handleDeleteNode(node)
+ }}>
+
+
+
+
+
+
+ {node.type === 'folder' && node.expanded && hasChildren && (
+
{node.children!.map((child) => renderTreeNode(child, depth + 1))}
+ )}
+
+ )
+ },
+ [
+ activeNodeId,
+ editingNodeId,
+ editingName,
+ draggedNodeId,
+ dragOverNodeId,
+ onSelectNode,
+ onToggleExpanded,
+ onToggleStarred,
+ handleStartEdit,
+ handleDeleteNode,
+ handleFinishEdit,
+ handleCancelEdit,
+ handleDragStart,
+ handleDragOver,
+ handleDragLeave,
+ handleDrop,
+ handleDragEnd,
+ t
+ ]
+ )
+
+ return (
+