Skip to content

[feat] 41b-bar: toolbar follows sheets, Connect text, phone Edit bar/More/Play, profile header, peers panel (H3 H4 H6 H7 H11 H15) - #362

Merged
AlexZ005 merged 4 commits into
feat/41-intfrom
feat/41b-bar
Oct 11, 2026
Merged

AlexZ005 merged 4 commits into
feat/41-intfrom
feat/41b-bar

Conversation

@AlexZ005

Copy link
Copy Markdown
Collaborator

Roadmap 41 round 2 lane 41b-bar. Details, proof and touch points: ~/.code/handovers/done/STATUS-41b-bar.md; forks: QUESTIONS-41b-bar.md.

🤖 Generated with Claude Code

AlexZ005 and others added 4 commits October 11, 2026 13:11
…d in the same frame

- $lib/ui/bottomEdge.js: ONE live bottom edge — the bottom bar and whatever is open along it
  (framed sheet, Inspector, notes sheet + note card, toolbox sheet, dock + its tab row, Add list),
  read once per animation frame; `followBottomEdge(fn)` calls back only on change.
- PhoneShell: the strip sits at bottom 0 and is lifted by a TRANSFORM written in that rAF (no
  layout), replacing a 120 ms poll that moved `bottom` — the strip held a stale place for frames,
  then jumped ("inspect toolbar stutter when I resize drawers").
- strip-follow-41b (new): CDP touch drags of the dock grip, a framed sheet's handle and the
  Inspector's grab bar with a per-frame sampler. Counterfactual on feat/41-int: 95-102 of ~169
  frames more than one frame behind and 17-18 jumps per drag (7 reds); after: 0 / 0, 16 pass.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… is room; no avatar in the profile sheet

- H4 (refines G21): the chip shows "Connected" / "Connecting…" / "Offline" (connectionLabel(tone),
  $lib/connectionStatus) beside its dot when the chip's slot between the logo and the right-hand
  chrome has room, and drops to the dot alone only when it is crowded (the peers button and a call's
  mic narrow it) — a ResizeObserver container-width rule, not a device rule. The label's natural
  width comes from an always-laid-out hidden copy (a hidden label measures 0). The full sentence
  stays the tooltip and accessible name. Phone only: the screenshots and G21's complaint are phone.
- H11: the phone profile sheet drops the notch avatar from its header (the avatar is already top
  right); the name takes the row. Desktop keeps the notch circle.
- signaling-reconnect: its "the chip carries no text" check follows H4 (one state word; the chip
  fits its slot). vitest connectionLabel.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ay's own menu; Play defaults to Play

- H6: More may leave the bar ($lib/ui/phoneBar: no forced More; More comes back at the end). The
  first removal opens a kit modal "To get More back, press and hold any item on the bottom bar"
  ("Keep More" undoes it; one-time, `phoneBarMoreHint`). The editor's header reads
  "More ▸ Edit bar…" and "More" returns to the More menu.
- H6: a long press on Play opens PLAY'S OWN phone menu instead of forwarding to the desktop
  toolbar's (whose Move left/right walked a bar a phone does not draw, plus Always on top / Move
  toolbar / Collapse / Customize): the shared "Play as" rows, Test play in a game, Move left /
  Move right (Play walks along the bar, `phoneBarPlayAt`; the middle is forgotten) and Edit bar…
  (so a bar emptied down to Play stays editable). Reset to default also re-centres Play.
- H7: `vrOverride` is three-state — 'true' / 'false' are a choice, absent is the DEVICE default
  (sceneStore `readVrOverride`; inputDevice `handheldDevice` = a coarse pointer that is not a
  headset browser): a phone plays on its screen like desktop, a headset still enters VR.
  `choosePlayAs` / `playAsItems` ($lib/playMode) are the one write for both play buttons'
  menus; Settings ▸ VR writes OFF as 'false'; resetting VR settings returns to the device default.
  The phone Play glyph follows the choice like desktop (triangle / headset / headset with A R).
- Suites: phone-bar-41b (new, 34: H4 / H6 / H7 / H11 on the folded N6 + desktop parity);
  mobile-map's "More cannot be taken off" follows H6; play-mode-menu counts the menu it gets (41 G1
  grew the toolbar tail — red on feat/41-int before this, A/B'd). vitest phoneBar.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…r on a phone

- Desktop / unfolded N6: the panel is the notification centre's tool window (ui/WindowChrome:
  "Connected" + count + the All|Rooms switch + close — same 40 px header), 320 px at least and as wide
  as its rows up to 420 px. Each peer is ONE row: avatar · name (ellipsis, full name as the tooltip)
  over one muted line (where they are, their role, mode / mute / VR / quality, the short id — the
  place ellipsizes first, nothing wraps) · actions on the right (role picker, Watch / Go to / Join /
  Request access).
- Phone: `peersPanelOpen` (appStore) replaces the component's own flag, so PhoneShell frames the
  panel like the notification centre: the shell's sheet with its grab bar, a scrim, swipe down to
  close (G5); the desktop click-catcher stands down there; the selection strip hides under it (G20).
- peers-panel-41b (new, 25): four long-named peers in long-named scenes with roles, on desktop, the
  unfolded and the folded N6 (real touch swipe). Counterfactual on feat/41-int: 288 px, every row's
  second line wraps, no full-name tooltip, no header — then no drawer. peers-popover reads the new
  header. Shot drivers peersShots41b / phoneShots41b (evidence, not suites).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@AlexZ005
AlexZ005 merged commit 6ed1376 into feat/41-int Oct 11, 2026
7 checks passed
@AlexZ005
AlexZ005 deleted the feat/41b-bar branch October 11, 2026 14:59
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