files-app becomes url-state: the file browser is where the work happened, but where selection lives and who clears a query string are framework questions. The panel framework's version of the same question moves in beside them, extracted from the deep-read item, which keeps it as one of its three questions. Item ids changed with the theme. Done now deliberately — no board reads them yet, and this is the last cheap moment to move one. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
25 lines
1.1 KiB
Markdown
25 lines
1.1 KiB
Markdown
---
|
|
id: url-state/rows-are-still-not-links
|
|
title: "Rows are still not links"
|
|
theme: url-state
|
|
status: open
|
|
created: 2026-08-20
|
|
date_source: assumed
|
|
order: 1
|
|
---
|
|
|
|
**Rows are still not links.** This is the half that did not get done, and it is the original
|
|
finding. Both list and grid render `<div onDoubleClick>` (`FileItem.tsx:701,748`), and search
|
|
results render `<div onClick>` (`FileViewContainer.tsx:187`) — the "opaque click" that
|
|
`docs/navigation-audit.md` names. No cmd-click into a new tab, no middle-click, not
|
|
link-focusable, and the target lives in a closure rather than the DOM.
|
|
|
|
It is now much easier than it was: `folderHref(path)` gives a folder's URL and `hrefForPath` gives
|
|
a full `To` with the overlay already stripped, so a row becomes
|
|
`<Link to={hrefForPath(childPath)}>` and a file row becomes a link that sets `?view=<name>`. The
|
|
breadcrumb has done exactly this since before today and is the model.
|
|
|
|
Watch for: a row is also a click target for SELECTION (single click selects, double opens,
|
|
shift/cmd extend). An anchor changes what those gestures mean by default, so the selection
|
|
handlers have to keep working and `preventDefault` where they win.
|