summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-10-05 12:23:18 +0200
committerChristophe Besson <cbesson@gmail.com>2026-10-05 12:23:18 +0200
commit1d94a92936abb3d37a8f9bfb36c8850246fee15d (patch)
treef07aa4f65277d703ac64a84882b0c559bf379f30 /docs
parent8f25294b0f6bc3f292442edd69a2e149f0717b52 (diff)
downloadmeshbay-1d94a92936abb3d37a8f9bfb36c8850246fee15d.tar.gz
feat: copy a file's or folder's #/name@owner link from Files, Music, Photos and Search
"Copy link" puts the address group-link.js resolves on the clipboard, on the hub's origin rather than the page's, so a link copied in the desktop application is not app://meshbay. Files offers it for one row, from the right-click menu or the toolbar with one row ticked (a phone's way in); Music on one track's menu, whose dots a phone has; Photos on a right-clicked tile and in the lightbox's bar. The video player and the file preview carry a link button next to Download. Applications get a `linkFor(entry | folderPath)` prop (MESHBAY_DESIGN.md §9.2) and offer the action only when it names a link. The group page builds it from the hub's row; Search from each result's own group and its path before the merged views prefixed it, and names no link for a folder of the merged tree, which a group name alone does not identify. harness/copy_link_probe.py mounts the three applications in Chrome and reads what reached the clipboard. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'docs')
-rw-r--r--docs/MESHBAY_DESIGN.md1
-rw-r--r--docs/USERGUIDE.md6
2 files changed, 7 insertions, 0 deletions
diff --git a/docs/MESHBAY_DESIGN.md b/docs/MESHBAY_DESIGN.md
index 7c5dce9..fdf08f9 100644
--- a/docs/MESHBAY_DESIGN.md
+++ b/docs/MESHBAY_DESIGN.md
@@ -2817,6 +2817,7 @@ destructures what it needs — a new application does not get a bespoke prop lis
| `transportRef`, `gekRef` | **refs**, never state, so a reconnect does not re-render every application |
| `deviceReady` | **the exception, and why it is a prop.** A ref not re-rendering is right for a transport reached into on demand and wrong for a *fact about the connection* an application renders from |
| `mayUpload` | computed once; a second derivation would eventually disagree with the first |
+| `linkFor(entry \| folderPath)` | the `#/name@owner/path` link "Copy link" puts on the clipboard (§8.4), or null where none can be named. The group page builds it from the hub's row; Search from each result's own group and unprefixed path. An application offers the action only when this returns a link, and copies with `copy-link.js` `copyLink` |
An application that needs local state owns it. One pattern is worth carrying: **any
notion of "current location within the group" resets on group change**, because a
diff --git a/docs/USERGUIDE.md b/docs/USERGUIDE.md
index d7f0624..ea81c76 100644
--- a/docs/USERGUIDE.md
+++ b/docs/USERGUIDE.md
@@ -304,6 +304,12 @@ file browser — sort, select, download, preview.
Files there. Only members get anywhere with such a link — anyone else is told
the group is unknown — and someone not signed in is asked to sign in first,
then taken where the link pointed. Renaming the group breaks these links.
+- **Copy link** gives you that address for one file or folder: right-click it,
+ or tick it and use the link button in the toolbar (the way on a phone). Music
+ has it in a track's menu (**⋯** on a phone), Photos when you right-click a
+ photo or in the photo viewer's bar, and the video player and file preview
+ have a link button next to Download. Search offers the same, pointing at the
+ group each result comes from.
### Chat