@@ -11,6 +11,8 @@ export interface DocumentNode extends DocumentOrFolder {
1111interface DocumentTreeItemProps {
1212 node : DocumentNode ;
1313 level : number ;
14+ indentPerLevel : number ;
15+ verticalSpacing : number ;
1416 selectedIds : Set < string > ;
1517 focusedItemId : string | null ;
1618 expandedIds : Set < string > ;
@@ -76,7 +78,9 @@ const DocumentTreeItem: React.FC<DocumentTreeItemProps> = (props) => {
7678 canMoveDown,
7779 onContextMenu,
7880 renamingNodeId,
79- onRenameComplete
81+ onRenameComplete,
82+ indentPerLevel,
83+ verticalSpacing
8084 } = props ;
8185
8286 const [ isRenaming , setIsRenaming ] = useState ( false ) ;
@@ -184,6 +188,11 @@ const DocumentTreeItem: React.FC<DocumentTreeItemProps> = (props) => {
184188 onContextMenu ( e , node . id ) ;
185189 }
186190
191+ const safeIndent = Math . max ( indentPerLevel , 0 ) ;
192+ const paddingTopBottom = Math . max ( verticalSpacing , 0 ) ;
193+ const basePaddingLeft = 4 ; // matches Tailwind px-1 for consistent baseline spacing
194+ const rowPaddingLeft = basePaddingLeft + Math . max ( level , 0 ) * safeIndent ;
195+
187196 return (
188197 < li
189198 ref = { itemRef }
@@ -193,14 +202,14 @@ const DocumentTreeItem: React.FC<DocumentTreeItemProps> = (props) => {
193202 onDragLeave = { handleDragLeave }
194203 onDrop = { handleDrop }
195204 onContextMenu = { handleContextMenu }
196- style = { { paddingLeft : `${ level * 16 } px` } }
197205 className = "relative"
198206 data-item-id = { node . id }
199207 >
200208 < div
201209 onClick = { ( e ) => ! isRenaming && onSelectNode ( node . id , e ) }
202210 onDoubleClick = { ( e ) => ! isRenaming && handleRenameStart ( e ) }
203- className = { `w-full text-left p-1 rounded-md group flex justify-between items-center transition-colors duration-150 text-xs relative focus:outline-none ${
211+ style = { { paddingTop : `${ paddingTopBottom } px` , paddingBottom : `${ paddingTopBottom } px` , paddingLeft : `${ rowPaddingLeft } px` } }
212+ className = { `w-full text-left pr-1 rounded-md group flex justify-between items-center transition-colors duration-150 text-xs relative focus:outline-none ${
204213 isSelected ? 'bg-tree-selected text-text-main' : 'hover:bg-border-color/30 text-text-secondary hover:text-text-main'
205214 } ${ isFocused ? 'ring-2 ring-primary ring-offset-[-2px] ring-offset-secondary' : '' } `}
206215 >
@@ -261,13 +270,17 @@ const DocumentTreeItem: React.FC<DocumentTreeItemProps> = (props) => {
261270 { dropPosition === 'inside' && < div className = "absolute inset-0 border-2 border-primary rounded-md pointer-events-none bg-primary/10" /> }
262271
263272 { isFolder && isExpanded && (
264- < ul >
273+ < ul
274+ className = "m-0 pl-0 list-none space-y-0"
275+ >
265276 { node . children . map ( ( childNode , index ) => (
266- < DocumentTreeItem
267- key = { childNode . id }
268- { ...props }
269- node = { childNode }
277+ < DocumentTreeItem
278+ key = { childNode . id }
279+ { ...props }
280+ node = { childNode }
270281 level = { level + 1 }
282+ indentPerLevel = { indentPerLevel }
283+ verticalSpacing = { verticalSpacing }
271284 canMoveUp = { index > 0 }
272285 canMoveDown = { index < node . children . length - 1 }
273286 />
0 commit comments