b3d-panel

A declarative spatial-UI panel you drop into the scene as a child of <tosi-b3d>, instead of hard-wiring panels in code. It mounts in XR via frame-panel, anchored to an XR reference frame, and you tune its placement with plain attributes — so you can iterate on offsets directly.

<tosi-b3d gamepad>
  ...
  <tosi-b3d-panel frame="eye" azimuth="-60" elevation="45" title="Inventory"></tosi-b3d-panel>
  <tosi-b3d-panel frame="eye" azimuth="60"  elevation="45" title="Inventory"></tosi-b3d-panel>
  <tosi-b3d-panel frame="eye" azimuth="0"   elevation="-45" title="Quick Access"></tosi-b3d-panel>
  <tosi-b3d-panel frame="face" position="0 0 2" reveal="always" blend="add" view="first" url="/reticle.svg" width="0.24"></tosi-b3d-panel>
  <tosi-b3d-panel frame="left-hand" preset="wrist" title="Menu" width="0.09"></tosi-b3d-panel>
</tosi-b3d>

If ANY <tosi-b3d-panel> children are present they replace the built-in default set, so you have full control. Panels exist only inside an immersive session.

Attributes

Attribute Default Description
frame eye eye / rig / world / body / neck / face / left-hand / right-hand
preset '' A named anchor (waist, left-shoulder, right-shoulder, overhead, wrist). Overrides the angular fields.
azimuth / elevation 0 / 0 Degrees off the frame's eye: +az right, +el up
distance 1.4 Metres from the eye
position '' Explicit "x y z" local position (overrides az/el/distance)
roll 0 Roll about the panel normal (deg)
reveal gaze gaze (look toward it) or always
blend composite composite or add (additive HUD glyphs)
view both first / third / both — restrict to a camera view
title '' Placeholder card title (ignored if url set)
url '' SVG URL (e.g. a reticle)
width 0.26 Panel width (m); height follows aspect
reveal-start / reveal-full 50 / 25 Gaze half-angles (deg) where the reveal begins / completes
max-distance 0 Hide beyond this distance (m); 0 = no limit