@displayxr/inline3d 1.33.1 → 1.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,38 @@ entry points (`.`, `./three`) are frozen for 1.x, while the **scene subpaths** (
5
5
  `./splat`, `./model`) are a preview tier whose options may change in any release. Entries below say
6
6
  which tier they touch, because that is what tells you whether an upgrade can move your pixels.
7
7
 
8
+ ## 1.35.0 — 2026-10-06
9
+
10
+ Touches the **preview tier** (`./camera`, `./call`) additively. The core is unchanged (one new
11
+ unit test pins its existing behaviour).
12
+
13
+ ### `./call` + `./camera` — the self view never shows a squeezed pair (web#131)
14
+
15
+ - **The self view follows its tile's `firstWoven`.** Seen once in the DisplayXR Browser: a
16
+ call's self view showed the whole packed L|R pair in each eye under a `You · 3D` badge, the
17
+ look of a canvas the browser is not weaving. `addCameraView` now watches `handle.firstWoven`
18
+ the way a remote tile does: on `woven: false` (`'layer-failed'`, `'session-ended'`) the view
19
+ drops to `'flat-left'` (one eye, mirrored), re-registers a refused layer up to 4 times with
20
+ backoff, and re-weaves on `_reroute(true, wall)` when a wall comes back.
21
+ - **The self badge is honest**: `3D` only while the view is on the woven route.
22
+ - **`CameraView` additions**: `fallbackReason`, `weaveState()` and the `onRouteChange` option
23
+ (types: `CameraViewWeaveState` in `camera.d.ts`).
24
+ - **`call.diagnostics().self`** = `{ route, woven, reason, firstWoven, layerRetries }`, so the
25
+ next occurrence can be diagnosed from devtools.
26
+ - Hardening, not a root-cause fix: `firstWoven` is the SDK's hold timer, so a layer the browser
27
+ silently never joins still reads as woven.
28
+
29
+ ## 1.34.0 — 2026-10-06
30
+
31
+ ### `./model` — the PlayCanvas drag is a turntable again
32
+
33
+ - `addModel` on PlayCanvas (the default) had inherited `addSplat`'s photo-splat drag: a tilt capped
34
+ at ±15° from the press that relaxes back to centre on release. On a mesh that reads as "the
35
+ movement is too small and it snaps back". It now uses the three path's turntable: cumulative, a
36
+ full drag across the tile is a half turn, and the model stays where you leave it. New option
37
+ **`orbitStyle: 'turntable' | 'tilt'`** (PlayCanvas only; default `'turntable'` for addModel).
38
+ `'tilt'` restores the photo mapping. `addSplat` is unchanged.
39
+
8
40
  ## 1.33.1 — 2026-10-06
9
41
 
10
42
  ### Fixed — woven `addModel` tiles drew nothing (1.28.0–1.32.0)
package/camera.d.ts CHANGED
@@ -193,6 +193,24 @@ export interface CameraViewOptions {
193
193
  depth?: number;
194
194
  /** The tile's aspect (w/h) = the woven buffer's per-eye aspect. Default 16/9. */
195
195
  aspect?: number;
196
+ /**
197
+ * Called when the view's route changes — including when the wall says the tile will not weave
198
+ * and the view drops to its flat left eye by itself — and when its `firstWoven` settles. Keep a
199
+ * "3D" badge on `view.woven`, not on the wall.
200
+ */
201
+ onRouteChange?: (route: CameraView['route'], state: CameraViewWeaveState) => void;
202
+ }
203
+
204
+ /** What a {@link CameraView} actually shows (`view.weaveState()`), for diagnostics. */
205
+ export interface CameraViewWeaveState {
206
+ route: 'woven-sbs' | 'flat-left' | 'flat' | null;
207
+ woven: boolean;
208
+ /** Why a pair on a 3D wall is flat: the tile's `firstWoven` reason (`'layer-failed'`, `'session-ended'`), else null. */
209
+ reason: string | null;
210
+ /** The current registration's settled `firstWoven`, `'pending'`, or null off the woven route. */
211
+ firstWoven: { woven: boolean; confirmed: boolean; reason: string | null; ms: number } | 'pending' | null;
212
+ /** Layer re-registrations attempted after a `'layer-failed'` (bounded; reset by a woven result). */
213
+ layerRetries: number;
196
214
  }
197
215
 
198
216
  /** A self view from {@link addCameraView}. */
@@ -200,7 +218,12 @@ export interface CameraView {
200
218
  readonly canvas: HTMLCanvasElement;
201
219
  /** `'woven-sbs'`: 3D on the panel; `'flat-left'`: a pair shown as its left eye; `'flat'`: mono. */
202
220
  readonly route: 'woven-sbs' | 'flat-left' | 'flat' | null;
221
+ /** On the woven route. A tile the wall will not weave drops the view flat, so this goes false with it. */
203
222
  readonly woven: boolean;
223
+ /** Why a pair on a 3D wall is shown flat (`'layer-failed'`, `'session-ended'`), else null. */
224
+ readonly fallbackReason: string | null;
225
+ /** What the view actually shows, for diagnostics. */
226
+ weaveState(): CameraViewWeaveState;
204
227
  /** The wall's tile handle while woven (its `firstWoven` settles when the tile is safe to reveal), else null. */
205
228
  readonly handle: TileHandle | null;
206
229
  readonly mirror: boolean;