6834b916cd
deploy / deploy (push) Successful in 29s
The backend has had PUT /files/:id/content for a while, but nothing in the UI exposed it. Add a "Replace file content" action to the file viewer's top bar: it opens a file picker, confirms before overwriting (the original bytes are replaced irreversibly under the same id; tags/pools/metadata are kept), then uploads via a new api.uploadPut helper. The file id is unchanged, so the preview URL stays the same while the bytes behind it don't — refetch the preview past the browser cache (the server cache is already invalidated by the replace) and re-mint the content token so "open original" serves the new content. A spinner overlay covers the preview during the upload, and the viewer's own shortcuts yield while the confirm is open or a replace is in flight. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>