Skip to content

feat: unify XR pane interactions - #145

Merged
comfuture merged 5 commits into
mainfrom
feat/issue-143-xr-pane-interactions
Aug 11, 2026
Merged

feat: unify XR pane interactions#145
comfuture merged 5 commits into
mainfrom
feat/issue-143-xr-pane-interactions

Conversation

@comfuture

@comfuture comfuture commented Aug 11, 2026

Copy link
Copy Markdown
Owner

Summary

  • replace header/content/six-dot interaction splits with one whole-pane move target plus explicit dismiss and hand-scroll child actions
  • add viewer-local controller intent classification with sticky neutral/free/depth modes, continuous accelerated depth movement, safe distance clamps, and stable manual layout identity
  • route active-pane scrolling through only the right xr-standard primary thumbstick with a dead zone and frame-delta scaling
  • add per-source preferred-input tracking, direct fingertip pane dragging, remote pinch movement, accelerated fingertip scroll controls, and complete source/joint/pane-loss cleanup
  • centralize grab finalization so only meaningful movement persists manual placement, while touch/squeeze no-ops restore the automatic position and select/pinch taps retain focus behavior
  • move active, hover, grab, and overflow feedback into independent world-depth-sorted geometry while keeping content canvas rendering invariant
  • expose exact wrapped viewport metrics, preserve live-tail/manual-reading behavior, and add deterministic kitchen-sink overflow/depth fixtures plus updated controller/hand documentation
  • normalize content render signatures to the effective clamped viewport line, finalize newly hidden grabs before dropping ownership, and reconcile all remaining interaction state against currently visible panes

Commits

  • 8c13579 feat: unify XR pane interactions
  • a461a64 docs: update XR pane controls
  • 16ae0fa fix: avoid persisting no-op XR grabs
  • 9877cde fix: stabilize XR pane scroll state
  • cff26e0 fix: finalize hidden XR pane grabs

Validation

  • GitHub Actions CI/validate passed on head cff26e0
  • corepack pnpm --dir packages/webxr exec vitest run test/panel-interaction.test.ts (26 focused tests passed)
  • corepack pnpm --dir packages/webxr exec vitest run test/panel-view.test.ts test/panel-interaction.test.ts (35 focused tests passed)
  • corepack pnpm --filter @codori/webxr test (133 tests passed before the final focused review fix; current CI reruns the complete suite)
  • corepack pnpm --filter @codori/webxr typecheck
  • git diff --check
  • render-spy regressions prove fractional sub-line scrolling does not rerender, rounded-line crossings do, bounds remain stable, and body/layout changes still recompute viewport metrics
  • hidden-pane regressions prove visible-to-hidden transitions finalize meaningful grabs exactly once, restore no-op grabs, stop thumbstick scrolling, clear active/grab/hand-scroll ownership, retain stored positions when shown again, and leave unrelated visible pane positions untouched
  • grab-finalization regressions cover normal-only fingertip withdrawal, sub-epsilon source loss, a small meaningful in-plane touch drag, and exactly-once persistence after meaningful source-loss movement
  • earlier implementation validation also passed corepack pnpm --filter @codori/webxr lint and corepack pnpm --filter @codori/webxr build (with the existing Vite large-chunk advisory)
  • deterministic non-immersive kitchen-sink browser QA covered independent active chrome, top/bottom overflow triangles, reduced-effects static affordances, and an overlapping near/far pane pair with the far pane active; no browser console warnings or errors were observed
  • render-spy regression confirms active/hover/grab transitions do not invoke content-canvas rendering, and the content/chrome objects share world-depth render ordering

Known device-validation boundary

No real controller or hand-tracking headset was available in this environment. Controller profiles/axes, physical intent feel, refresh-rate behavior, direct fingertip contact, native versus synthesized hand events, and status-window policy on device still require the issue's recorded-headset smoke test. The implementation and browser QA do not claim physical headset validation.

Closes #143

@comfuture
comfuture marked this pull request as ready for review August 11, 2026 03:43

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 16ae0fa3ed

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/webxr/src/panel-view.ts Outdated
Comment thread packages/webxr/src/interaction-system.ts Outdated
@comfuture

Copy link
Copy Markdown
Owner Author

@codex review
Review head: 9877cdea41f7f1b41e97947a4a07b800d1c0d0b1

Focus only on the review fixes: effective rounded/clamped viewport signatures under fractional scrolling, and visible-pane reconciliation/scroll ownership when an active or grabbed pane becomes overflow-hidden.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9877cdea41

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/webxr/src/interaction-system.ts
@comfuture

Copy link
Copy Markdown
Owner Author

@codex review
Review head: cff26e06cc563ed5adde3306c00a2919b400422c

Focus only on hidden-pane grab finalization ordering: meaningful and no-op grabs must finalize exactly once before visible-ID reconciliation clears ownership, without recursive refresh or unrelated pane mutation.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Swish!

Reviewed commit: cff26e06cc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@comfuture
comfuture merged commit 00890a8 into main Aug 11, 2026
2 checks passed
@comfuture
comfuture deleted the feat/issue-143-xr-pane-interactions branch August 11, 2026 04:13
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.

Unify XR pane movement and scrolling across controllers and hands

1 participant