# refactor\(web\): sidebar list markers and draft rows live in their own files · PR \#22729 · pingdotgg/t3code

[View on GitCafe](https://git.cafe/pingdotgg/t3code/pull/22729)

Repository: [pingdotgg/t3code](https://git.cafe/pingdotgg/t3code)

Visibility: public

State: merged

Source repository: pingdotgg/t3code

Source branch: refactor/sidebar-markers-and-drafts-file

Target branch: refactor/sidebar-thread-row-file

Head commit: af638e8f4df7d5e2928f1996fd5f3a3c5f158e93

[Discussion and reviews](https://git.cafe/pingdotgg/t3code/pull/22729)

[Commits](https://git.cafe/pingdotgg/t3code/pull/22729/commits?format=markdown)

[Files changed](https://git.cafe/pingdotgg/t3code/pull/22729/diffs?format=markdown)

## Description

---

This PR continues splitting up Sidebar.tsx. It moves the sortable shelf headers, drag boundaries and placeholders into `sidebar/SidebarListMarkers.tsx`, and the unsent-draft rows and block into `sidebar/SidebarDraftBlock.tsx`. The code is moved as-is, with no behavior change. The draft block already subscribes to the composer draft store on its own, so it keeps re-rendering without the sidebar body, as it did before.

| | before | after |
|---|---|---|
| `Sidebar.tsx` | 3,483 lines | 3,140 lines |
| `sidebar/SidebarListMarkers.tsx` | — | 135 lines |
| `sidebar/SidebarDraftBlock.tsx` | — | 222 lines |

Tests run:
- React Compiler coverage for the sidebar files (0 bailouts)
- `tsc` for apps/web
- oxlint on the changed files

Claude Opus 5.5 in Claude Code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

