Skip to content

feat(share-web): align /me share rows with the desktop Published tab#388

Merged
graydawnc merged 1 commit into
mainfrom
feat/share-web-row-menu
Jun 10, 2026
Merged

feat(share-web): align /me share rows with the desktop Published tab#388
graydawnc merged 1 commit into
mainfrom
feat/share-web-row-menu

Conversation

@graydawnc

Copy link
Copy Markdown
Collaborator

What

Brings the /me share rows in line with the desktop Shares → Published row design:

  • Row actions collapse into a single hover-revealed ⋯ menu (pinned while open via :has([aria-expanded]); always visible on touch devices, which have no hover): Copy link (in-place "Copied" confirmation), the new List on profile / Remove from profile toggle, and Unpublish. The toggle calls the PATCH /api/me/shares/:id endpoint shipped in feat(share-backend): PATCH /api/me/shares/:id visibility endpoint #383 with the same gates as the desktop menu — listing offered only when the account has a live handle, icon previews the target state. Failures render inline in the open menu (the web has no toast surface); 401 clears the auth caches and bounces to /sign-in.
  • Revoked shares move into a collapsed "Unpublished · N" section that only renders when history exists, and are display-only — the previous Copy link on revoked rows handed out a permanently-410 URL. The per-row red pill goes away; the section header carries the state. Mirrors the desktop decision (revoked history accumulates forever; only account deletion purges it).
  • Title hover no longer recolors on /me and /@handle, and rows top-align so the ⋯ pins to the title's first line — both matching the desktop row.
  • Trigger restyle: quiet borderless 24px button one contrast step above the row hover, replacing the bordered 30px icon buttons. Dead CSS dropped (.sw-share-actions, .sw-pill).

Why

The two surfaces show the same data and had drifted into different interaction languages. Two always-visible bare icons also read as ambiguous chrome — the menu names each action.

Known gap (intentionally out of scope)

revokeShare shares the pre-existing un-handled-401 behavior that setShareVisibility now fixes; aligning it touches the unpublish confirm-modal flow and belongs in its own change.

Test plan

  • typecheck clean, 69 share-web tests green, production build green
  • Verified on the real local stack (wrangler + share-web, real Google session): menu reveal/pin/Esc/outside-click, copy confirmation, list → appears on /@handle, unlist → disappears, no-handle gating, revoked rows collapse into the section with no actions, first-line alignment

🤖 Generated with Claude Code

The /me rows and the desktop Shares → Published rows drifted: web kept
two always-visible bordered icon buttons per row, an accent-recolor on
title hover, and revoked rows mixed into the live list with a red pill
and a Copy-link action whose URL is permanently 410.

- Row actions collapse into a single hover-revealed ⋯ menu (pinned
  while open; always visible on touch where hover doesn't exist):
  Copy link, the new List on profile / Remove from profile toggle
  (PATCH /api/me/shares/:id — same gates as the desktop menu: listing
  offered only with a live handle, target-state glyph), and
  Unpublish. Failures render inline in the menu — the web has no
  toast surface.
- setShareVisibility handles 401 by clearing the auth caches and
  bouncing to /sign-in, unlike its older peer revokeShare (left as-is
  here; parity gap noted in the PR).
- Revoked shares move into a collapsed "Unpublished · N" section that
  only renders when history exists, display-only — no dead Copy link.
- Title hover keeps its color on /me and /@handle; rows top-align so
  the trigger pins to the title's first line.
- Dead CSS dropped (.sw-share-actions, .sw-pill).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@graydawnc
graydawnc added this pull request to the merge queue Jun 10, 2026
Merged via the queue into main with commit a81ecb4 Jun 10, 2026
6 checks passed
@graydawnc
graydawnc deleted the feat/share-web-row-menu branch June 10, 2026 13:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant