Skip to content

feat(app): Share-dialog hub CTA + local-only link confirm (0290)#449

Open
crs48 wants to merge 1 commit into
mainfrom
claude/0290-share-dialog-hub-cta-local-only
Open

feat(app): Share-dialog hub CTA + local-only link confirm (0290)#449
crs48 wants to merge 1 commit into
mainfrom
claude/0290-share-dialog-hub-cta-local-only

Conversation

@crs48

@crs48 crs48 commented Jul 10, 2026

Copy link
Copy Markdown
Owner

Implements the two remaining UI items from docs/explorations/0290_[_]_SHARE_LINK_GENERATION_FAILURE_MODES.md (bugs #2 and #3, both Option A). Follows up on #448.

No-hub dead-end → "Connect a hub…" CTA

  • ShareDialog (!ready) now explains why sharing needs a hub and offers a Connect a hub… button that closes the dialog and opens the status bar's connection panel (new openSyncStatusPanel() event in SyncStatus.tsx; the mobile sheet listens too).
  • The connection panel gains an inline hub-URL connect form (shown while disconnected), persisting via the same hub-url.ts helpers as Settings → Network and reloading to apply — so the CTA genuinely lands you connected, per the exploration's validation criterion.
  • Bug fix uncovered en route: the floating-islands shell (0286) clips the status bar island with overflow-hidden, which swallowed the sync-status popover entirely (it opened invisibly). The popover is now portaled into .wb-root (fixed-position above the chip; portal stays inside the shell root so .dark .wb-root tokens keep working) and uses bg-island-pop — the previous bg-surface resolved to transparent (same dead token 0287 fixed for modals).

Private-hub links → "Local only" + confirm

  • Fresh and listed link URLs get an amber Local only chip when isPrivateHubHost(hubHttpUrl).
  • Copy and QR arm on first click ("Copy anyway" / "QR anyway", 4s window) before acting. Generation stays enabled — LAN/in-person QR handoff is legitimate.

Verification

  • apps/web typecheck clean; new ShareDialog.test.tsx (CTA event + arming + public-hub no-confirm) plus FormShareBar/share-links/sync-format suites: 41 tests green (re-run after rebasing onto post-Enforce demo-hub storage guardrails (0291) + workspace share links (0290) #448 main).
  • Driven live against a real local hub (ws://localhost:4444): CTA → panel → connect → reload → chip "Hub: connected · healthy" → New link mints http://localhost:4444/s/… with Local-only chip; Copy/QR require the confirm click; QR renders after confirming.
  • Checked off the two implementation-checklist items in the 0290 doc (the doc also picked up repo-prettier reformatting from the pre-commit hook).

🤖 Generated with Claude Code

With no hub connected the Share dialog dead-ended at explanatory text; it
now explains why sharing needs a hub and offers a "Connect a hub…" button
that opens the status bar's connection panel. That panel gains an inline
hub-URL connect form (persisted like Settings → Network, reload applies),
and is portaled out of the status-bar island — the floating-islands shell's
overflow-hidden was clipping the popover into invisibility.

Links minted on a private/LAN hub are labelled "Local only", and Copy/QR
arm on first click ("Copy anyway" / "QR anyway") so a link that only works
on the local network isn't handed out as if it were public. Generation
stays enabled — LAN/QR handoff is legitimate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: xNet Test <test@xnet.dev>
@github-actions

Copy link
Copy Markdown
Contributor

🖼️ UI changes in this PR

No visual differences detected in the changed UI.

CI run

github-actions Bot added a commit that referenced this pull request Jul 10, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Preview: https://xnet.fyi/pr/449/app/

github-actions Bot added a commit that referenced this pull request Jul 10, 2026
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