mirror of
https://github.com/supabase/supabase.git
synced 2026-10-19 08:09:11 +03:00
Rebuilds the file preview panel around object versioning: a collapsible Versions section listing every version with its removal outlook, an inline compare-and-restore widget, and delete actions that say what they actually do on a versioned bucket. - `VersionHistory` + `VersionHistoryPolicyRow` + `VersionThumbnail` — the version list, the inline lifecycle policy summary, and the row glyph - `VersionCompareWidget` — takes over the top of the panel when a noncurrent version is selected, so restoring is a visible comparison, not a modal - `PreviewSection` — the collapsible section wrapper - `PreviewPane` — new panel chrome, viewport-clamped thumbnail, and an Archive / Delete permanently split button on versioned buckets - `ConfirmDeleteModal` — on a versioned bucket a delete is a soft delete, so the copy no longer claims it cannot be undone Delete markers are surfaced as their own row type. They are the empty placeholders S3 writes on a soft delete, and they can outlive the delete (delete → upload → delete → restore leaves one mid-history), so a live file's history can contain them. There is nothing to preview or restore, so the row is non-interactive, dimmed, labelled "Delete marker", and its only action is removing the marker itself. Version data comes from the stubbed query added in the previous PR, so the Versions section renders its empty state until the Storage API lands. Fixes carried over from the prototype rather than ported: - Version rows were a clickable `<li>` whose `onKeyDown` passed a function reference instead of calling it, so keyboard activation did nothing. They are real `<button>`s now, which fixes activation and a11y together. - The policy summary put a `<Button>` inside tooltip content, unreachable by pointer or keyboard — now a `HoverCard`. - Permanent delete fired a bare `toast.success` with no mutation behind it. - Dropped the download and "Get version URL" menu items, which were toast stubs. - Deduplicated a double `filter` over versions and memoized the fate map. Also re-syncs `selectedBucket` in the explorer store when the bucket query refetches. It was only ever seeded once, so editing a bucket left consumers reading stale metadata — which is how Copy URL could sign a URL for the wrong visibility after a public/private toggle. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>