@rydr/game-sdk 8.5.0 → 8.7.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.
@@ -12,6 +12,15 @@ the rest.
12
12
  ring (outline + glow, no layout shift) is injected for you; pass `ring: false` to style it yourself.
13
13
  - **`data-nav-kind="carousel"`** (optional) — with an `onDirection` hook, an item can consume
14
14
  LEFT/RIGHT itself (e.g. scroll a strip) instead of moving focus.
15
+ - **`data-nav-host`** (optional) — put this on a **component** whose own controls should join this
16
+ navigation. Element scans stop at a shadow boundary, so a component that keeps its buttons inside
17
+ itself is a single stop no matter how many it has; marked as a nav host, the engine walks the
18
+ `[data-nav]` items inside it **in place of** the component. Opt-in on purpose — a component that
19
+ drives its own internal focus (a dialog, a picker) keeps its internals out of the page's navigation
20
+ by simply not carrying this. Nothing focusable inside → it stays a single stop, so a component can
21
+ flip between "I am the item" and "my controls are the items" by what it renders. Nesting works, and
22
+ the inner items get everything an outer one does: cues, the ring, hover, zones, reconciliation.
23
+ Configurable via `navHostSelector`.
15
24
  - **`data-nav-id="..."`** (optional) — a stable **logical-slot** id. Two `[data-nav]` elements that
16
25
  should behave as ONE focus target — a button that replaces another across a state change, or a card
17
26
  whose DOM node identity changes on re-render — carry the same `data-nav-id`, so focus (and the ring,
@@ -131,3 +140,45 @@ const scroll = createScrollNav({
131
140
 
132
141
  A press at the top/bottom edge is a silent no-op (no false cue). Smooth scroll is used unless
133
142
  `prefers-reduced-motion` is set. See `scroll-nav.ts` for the full option list.
143
+
144
+ ## Navigating with the stick — `createStickNav`
145
+
146
+ Both engines above speak discrete `UP` / `DOWN` / `LEFT` / `RIGHT` presses. An analog stick is not
147
+ that: it's a direction and a distance. `createStickNav` is the converter, and it lives here — beside
148
+ the menu — on purpose.
149
+
150
+ **Why it isn't done in the device layer.** Thresholding each axis on its own fires *two* directions on
151
+ a diagonal (push top-right, the highlight jumps twice), and once the vector has been thrown away
152
+ nobody downstream can work out which one the rider meant. Which direction a push *means* is a menu
153
+ question, not a hardware fact. So the engine keeps the vector, picks the single axis the stick is
154
+ pushed furthest along, and holds at most one direction at a time.
155
+
156
+ It also auto-repeats, which a faked D-pad structurally cannot: a held stick emits no new samples, so a
157
+ synthesized press steps once and then sits there. Here a held direction steps, pauses
158
+ (`STICK_NAV_REPEAT_DELAY_MS`, 400 ms), then repeats at `STICK_NAV_REPEAT_MS` (125 ms ≈ 8/s).
159
+
160
+ ```ts
161
+ import { createSpatialNav, createStickNav } from "@rydr/game-sdk/nav";
162
+
163
+ const nav = createSpatialNav({ session, root: document.body });
164
+ const stickNav = createStickNav({
165
+ session, // polls session.stick("LSTICK") each frame
166
+ onDirection: (dir) => nav.handle(dir), // one direction per push
167
+ });
168
+ ```
169
+
170
+ `createStickNav(options) → { sample, axis, current, release, dispose }`
171
+
172
+ - `sample(x, y)` — feed a full stick position (right/up = `+1`) when you're not passing `session`.
173
+ - `axis(name, value)` — feed one canonical axis (`LX`/`LY`); the other keeps its last value. For
174
+ consumers whose analog stream arrives per-axis, like the platform shell's.
175
+ - `current()` — the direction currently held, or `null`.
176
+ - `release()` — force the stick to centre (no emit). Call it when you stop owning input, so a held
177
+ stick can't fire into whatever takes over.
178
+ - `dispose()` — stop polling, clear timers.
179
+
180
+ Tuning is exported so a consumer can match its own feel: `STICK_NAV_ON` (0.6) is the deflection that
181
+ counts as a press, `STICK_NAV_OFF` (0.4) the one it releases below (hysteresis, so a stick resting on
182
+ the threshold can't chatter), and `STICK_NAV_DOMINANCE` (1.2) how much the other axis must beat the
183
+ held one by to take over mid-push — which is what stops a thumb parked on the 45° line from
184
+ flickering between two directions. Pass `repeat: false` for one step per push.
@@ -21,9 +21,21 @@
21
21
  * import { createScrollNav } from "@rydr/game-sdk/nav";
22
22
  * const scroll = createScrollNav({ root: readerEl, session, onBack: () => goHome() });
23
23
  * ```
24
+ *
25
+ * Both engines above speak discrete `UP`/`DOWN`/`LEFT`/`RIGHT` presses. To drive one from an ANALOG
26
+ * STICK — one direction per push (never two on a diagonal), with console-style auto-repeat while it's
27
+ * held — add {@link createStickNav}:
28
+ *
29
+ * ```ts
30
+ * import { createSpatialNav, createStickNav } from "@rydr/game-sdk/nav";
31
+ * const nav = createSpatialNav({ session, root: document.body });
32
+ * const stickNav = createStickNav({ session, onDirection: (dir) => nav.handle(dir) });
33
+ * ```
24
34
  */
25
35
  export { createSpatialNav } from "./spatial-nav.js";
26
36
  export type { SpatialNav, SpatialNavOptions, NavButtonSource, NavCue } from "./spatial-nav.js";
27
37
  export { createScrollNav, SCROLL_NAV_STEP } from "./scroll-nav.js";
28
38
  export type { ScrollNav, ScrollNavOptions } from "./scroll-nav.js";
39
+ export { createStickNav, STICK_NAV_ON, STICK_NAV_OFF, STICK_NAV_DOMINANCE, STICK_NAV_REPEAT_DELAY_MS, STICK_NAV_REPEAT_MS } from "./stick-nav.js";
40
+ export type { StickNav, StickNavOptions, StickNavDirection, NavStickSource } from "./stick-nav.js";
29
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAClJ,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/nav/index.js CHANGED
@@ -21,7 +21,18 @@
21
21
  * import { createScrollNav } from "@rydr/game-sdk/nav";
22
22
  * const scroll = createScrollNav({ root: readerEl, session, onBack: () => goHome() });
23
23
  * ```
24
+ *
25
+ * Both engines above speak discrete `UP`/`DOWN`/`LEFT`/`RIGHT` presses. To drive one from an ANALOG
26
+ * STICK — one direction per push (never two on a diagonal), with console-style auto-repeat while it's
27
+ * held — add {@link createStickNav}:
28
+ *
29
+ * ```ts
30
+ * import { createSpatialNav, createStickNav } from "@rydr/game-sdk/nav";
31
+ * const nav = createSpatialNav({ session, root: document.body });
32
+ * const stickNav = createStickNav({ session, onDirection: (dir) => nav.handle(dir) });
33
+ * ```
24
34
  */
25
35
  export { createSpatialNav } from "./spatial-nav.js";
26
36
  export { createScrollNav, SCROLL_NAV_STEP } from "./scroll-nav.js";
37
+ export { createStickNav, STICK_NAV_ON, STICK_NAV_OFF, STICK_NAV_DOMINANCE, STICK_NAV_REPEAT_DELAY_MS, STICK_NAV_REPEAT_MS } from "./stick-nav.js";
27
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -3,7 +3,9 @@
3
3
  * keyboard focus, used by BOTH the platform shell and games, so no one reimplements menu navigation.
4
4
  *
5
5
  * A page marks its focusable elements `[data-nav]` and styles (or lets this inject) a `[nav-focused]`
6
- * ring. The engine then moves focus by geometry: on a direction press it picks the nearest `[data-nav]`
6
+ * ring. A COMPONENT whose own controls should join that navigation marks itself `data-nav-host` and
7
+ * its controls `[data-nav]` — see {@link SpatialNavOptions.navHostSelector}; without it a component is
8
+ * a single stop, because element scans stop at a shadow boundary. The engine then moves focus by geometry: on a direction press it picks the nearest `[data-nav]`
7
9
  * element in that direction (a single rect-scoring metric that serves grids, columns, carousels, and
8
10
  * lists alike — no per-layout code), reflects `[nav-focused]`, centres it in view, and activates the
9
11
  * focused element with `A` by dispatching its existing `click` (reusing the page's own handlers). `B`/
@@ -97,6 +99,23 @@ export interface SpatialNavOptions {
97
99
  * item, exactly as before.
98
100
  */
99
101
  zoneSelector?: string;
102
+ /**
103
+ * Which elements count as a **nav host** — a component whose OWN `[data-nav]` controls should join
104
+ * this navigation, walked in place of the component itself. Default `"[data-nav-host]"`.
105
+ *
106
+ * `querySelectorAll` never crosses a shadow boundary, so without this a component that keeps its
107
+ * controls inside itself is one stop no matter how many buttons it has, and the only way to walk
108
+ * them is for the component to write its own direction handling — which gets none of this engine's
109
+ * cues, ring or reconciliation. Marking the component `data-nav-host` hands that job back here.
110
+ *
111
+ * Opt-in by markup, deliberately: components that drive their own internal focus (dialogs, pickers)
112
+ * keep `[data-nav]` internals that must stay OUT of the page's navigation, and a scan that reached
113
+ * into everything would drag them in. A nav host with nothing focusable inside it stays a single
114
+ * stop, so a component can flip between "I am the item" and "my buttons are the items" by what it
115
+ * renders. Nesting works; zones, cues, the ring, hover and reconciliation all apply to the inner
116
+ * items exactly as to any other.
117
+ */
118
+ navHostSelector?: string;
100
119
  /**
101
120
  * Keep focus (and the `onFocusChange` emit) **live across DOM changes**, not just on directional
102
121
  * moves. Default `true`. When on, the engine watches the active scope (a `MutationObserver`), the
@@ -1 +1 @@
1
- {"version":3,"file":"spatial-nav.d.ts","sourceRoot":"","sources":["../../src/nav/spatial-nav.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGrE,wGAAwG;AACxG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/E;AAED,mGAAmG;AACnG,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,kFAAkF;IAClF,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4HAA4H;IAC5H,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8FAA8F;IAC9F,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,qIAAqI;IACrI,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,yEAAyE;IACzE,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,6FAA6F;IAC7F,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IAC7D;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,qFAAqF;IACrF,UAAU,IAAI,IAAI,CAAC;IACnB,qEAAqE;IACrE,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IACpC,wGAAwG;IACxG,OAAO,IAAI,WAAW,GAAG,IAAI,CAAC;IAC9B,sCAAsC;IACtC,KAAK,IAAI,IAAI,CAAC;IACd,4FAA4F;IAC5F,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,uEAAuE;IACvE,SAAS,IAAI,IAAI,CAAC;IAClB;;;;OAIG;IACH,UAAU,IAAI,IAAI,CAAC;IACnB,yDAAyD;IACzD,OAAO,IAAI,IAAI,CAAC;CACjB;AAkFD,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,iBAAsB,GAAG,UAAU,CAobzE"}
1
+ {"version":3,"file":"spatial-nav.d.ts","sourceRoot":"","sources":["../../src/nav/spatial-nav.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGrE,wGAAwG;AACxG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/E;AAED,mGAAmG;AACnG,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,kFAAkF;IAClF,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4HAA4H;IAC5H,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8FAA8F;IAC9F,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,qIAAqI;IACrI,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,yEAAyE;IACzE,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,6FAA6F;IAC7F,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IAC7D;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;;;;OAeG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,qFAAqF;IACrF,UAAU,IAAI,IAAI,CAAC;IACnB,qEAAqE;IACrE,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IACpC,wGAAwG;IACxG,OAAO,IAAI,WAAW,GAAG,IAAI,CAAC;IAC9B,sCAAsC;IACtC,KAAK,IAAI,IAAI,CAAC;IACd,4FAA4F;IAC5F,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,uEAAuE;IACvE,SAAS,IAAI,IAAI,CAAC;IAClB;;;;OAIG;IACH,UAAU,IAAI,IAAI,CAAC;IACnB,yDAAyD;IACzD,OAAO,IAAI,IAAI,CAAC;CACjB;AAkFD,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,iBAAsB,GAAG,UAAU,CA0fzE"}
@@ -84,7 +84,23 @@ export function createSpatialNav(opts = {}) {
84
84
  // zones are off. `zoneKey` maps each item to a stable zone identity for grouping — the zone element,
85
85
  // or the item itself when it has no zone ancestor (a loose item behaves as its own singleton zone, so
86
86
  // it stays reachable rather than getting stranded outside every group).
87
- const zoneOf = (el) => (zoneSelector ? el.closest(zoneSelector) : null);
87
+ /**
88
+ * `closest`, but able to leave a shadow root: an item inside a nav host must still find the zone the
89
+ * host sits in, or it would read as zone-less while its neighbours are zoned and cross-zone movement
90
+ * would go wrong around it.
91
+ */
92
+ const closestDeep = (el, sel) => {
93
+ let node = el;
94
+ while (node) {
95
+ const hit = node.closest(sel);
96
+ if (hit)
97
+ return hit;
98
+ const root = node.getRootNode();
99
+ node = root instanceof ShadowRoot ? root.host : null;
100
+ }
101
+ return null;
102
+ };
103
+ const zoneOf = (el) => (zoneSelector ? closestDeep(el, zoneSelector) : null);
88
104
  const zoneKey = (el) => (zoneOf(el) ?? el);
89
105
  // Screen stack: each entry is a scope root + its remembered focused element. Top is active.
90
106
  const stack = [
@@ -97,10 +113,55 @@ export function createSpatialNav(opts = {}) {
97
113
  let desiredX = null;
98
114
  let desiredY = null;
99
115
  const resetLane = () => { desiredX = null; desiredY = null; };
116
+ /**
117
+ * NAV HOSTS — how a component's OWN controls join the page's navigation.
118
+ *
119
+ * `querySelectorAll` stops at a shadow boundary, so a component that keeps its focusable controls
120
+ * inside itself is a single stop to this engine no matter what its internals are marked with. That
121
+ * left a component with two buttons only one of them reachable, and the only way out was for the
122
+ * component to write its own private direction handling — navigation that looks like navigation but
123
+ * has no cue, no shared ring and no reconciliation.
124
+ *
125
+ * A component opts in by marking ITSELF `data-nav-host`: the engine then walks the items inside its
126
+ * shadow root **in place of** the component. Opt-in on purpose — plenty of components (dialogs that
127
+ * drive their own focus, for one) keep `[data-nav]` internals that must stay out of the page's
128
+ * navigation, so reaching into everything would drag them in.
129
+ *
130
+ * A nav host with nothing focusable inside it stays a single stop, so a component can flip between
131
+ * "I am the item" and "my buttons are the items" purely by what it renders.
132
+ */
133
+ const navHostSelector = opts.navHostSelector ?? "[data-nav-host]";
134
+ /** Items in one root, with every nav host replaced by the items inside it (recursive). */
135
+ const collect = (root) => {
136
+ const out = [];
137
+ for (const el of Array.from(root.querySelectorAll(`${selector},${navHostSelector}`))) {
138
+ if (el.shadowRoot && el.matches(navHostSelector)) {
139
+ const inner = collect(el.shadowRoot);
140
+ if (inner.length) {
141
+ out.push(...inner);
142
+ continue; // the insides stand in for the host
143
+ }
144
+ }
145
+ if (el.matches(selector))
146
+ out.push(el);
147
+ }
148
+ return out;
149
+ };
100
150
  // Focusable items in the active scope, skipping the not-rendered (display:none / detached — zero
101
151
  // client rects) and disabled, so nav never lands on a hidden or dead control. `getClientRects`
102
152
  // (not `offsetParent`) keeps position:fixed items eligible.
103
- const items = () => Array.from(top().root.querySelectorAll(selector)).filter((el) => el.getClientRects().length > 0 && !el.disabled);
153
+ const items = () => collect(top().root).filter((el) => el.getClientRects().length > 0 && !el.disabled);
154
+ /** Every nav host in the active scope, so the observers can watch inside them too (recursive). */
155
+ const navHosts = (root) => {
156
+ const out = [];
157
+ for (const el of Array.from(root.querySelectorAll(navHostSelector))) {
158
+ if (!el.shadowRoot)
159
+ continue;
160
+ out.push(el);
161
+ out.push(...navHosts(el.shadowRoot));
162
+ }
163
+ return out;
164
+ };
104
165
  // ── Focus reconciliation (reconcileFocus, default on) ───────────────────────────────────────────
105
166
  // The engine tracks focus by element reference, so when a consumer's framework (e.g. Lit) re-renders
106
167
  // and REPLACES or RESIZES the focused node, `onFocusChange` would never re-fire and a consumer's
@@ -212,14 +273,21 @@ export function createSpatialNav(opts = {}) {
212
273
  // ShadowRoot (the shell's `host.renderRoot`) and a plain Element are observed directly.
213
274
  const target = root && root.nodeType === 9 ? root.documentElement : root;
214
275
  mo?.disconnect();
276
+ const watch = {
277
+ childList: true,
278
+ subtree: true,
279
+ attributes: true,
280
+ // nav-focused is deliberately OMITTED so our own ring writes never self-trigger the observer.
281
+ attributeFilter: ["disabled", "hidden", "style", "class", "data-nav", "data-nav-id"],
282
+ };
215
283
  if (mo && target) {
216
- mo.observe(target, {
217
- childList: true,
218
- subtree: true,
219
- attributes: true,
220
- // nav-focused is deliberately OMITTED so our own ring writes never self-trigger the observer.
221
- attributeFilter: ["disabled", "hidden", "style", "class", "data-nav", "data-nav-id"],
222
- });
284
+ mo.observe(target, watch);
285
+ // A nav host's items live in its shadow root, which the scope's own observer cannot see into — so
286
+ // watch each one as well, or a re-render inside a component would silently strand focus. That is
287
+ // not an edge case: a live cockpit re-renders every second, and swapping one of its buttons for
288
+ // another is exactly what reconciliation exists to survive.
289
+ for (const host of navHosts(root))
290
+ mo.observe(host.shadowRoot, watch);
223
291
  }
224
292
  if (transitionTarget)
225
293
  transitionTarget.removeEventListener("transitionend", onTransitionEnd);
@@ -560,7 +628,9 @@ export function createSpatialNav(opts = {}) {
560
628
  const target = e.target;
561
629
  if (!(target instanceof Element))
562
630
  return;
563
- const item = target.closest(selector);
631
+ // `composedPath` first: a hover over a control inside a nav host reports the HOST as `target`
632
+ // (events retarget at a shadow boundary), so `closest` on it would find the wrong item or none.
633
+ const item = (e.composedPath?.().find((n) => n instanceof HTMLElement && n.matches?.(selector)) ?? null) || target.closest(selector);
564
634
  // Skip when already focused — avoids an items() layout read on every mousemove over the item.
565
635
  if (item && item !== top().current)
566
636
  api.focus(item);
@@ -1 +1 @@
1
- {"version":3,"file":"spatial-nav.js","sourceRoot":"","sources":["../../src/nav/spatial-nav.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spatial-nav.js","sourceRoot":"","sources":["../../src/nav/spatial-nav.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Read a joystick as MENU NAVIGATION — the missing half of {@link createSpatialNav}, which speaks
3
+ * discrete `UP`/`DOWN`/`LEFT`/`RIGHT` presses and knows nothing about analog sticks.
4
+ *
5
+ * **Why this exists.** A stick is a direction and a distance; a D-pad is four booleans. Anything that
6
+ * turns the first into the second by thresholding each axis on its own fires TWO directions on a
7
+ * diagonal — push top-right and the menu jumps twice — and, having thrown the vector away, gives
8
+ * whoever is downstream no way to recover which one the rider meant. So the conversion belongs
9
+ * here, next to the menu that consumes it, not in the device layer: the rider's INTENT is a menu
10
+ * question, not a hardware fact. This engine keeps the vector, picks the single dominant direction,
11
+ * and never holds more than one at a time.
12
+ *
13
+ * It also does the thing a synthesized D-pad structurally cannot: **auto-repeat**. Holding a stick
14
+ * produces no new events, so a faked press moves the highlight exactly once and then sits there
15
+ * until the rider recentres. Here a held direction steps once, pauses ({@link STICK_NAV_REPEAT_DELAY_MS}),
16
+ * then repeats at {@link STICK_NAV_REPEAT_MS} — what every console menu does.
17
+ *
18
+ * Game usage (auto-polls the session's stick each frame, feeding a spatial nav):
19
+ * import { createSpatialNav, createStickNav } from "@rydr/game-sdk/nav";
20
+ * const nav = createSpatialNav({ session, root: document.body });
21
+ * const stickNav = createStickNav({ session, onDirection: (dir) => nav.handle(dir) });
22
+ *
23
+ * Shell / multiplexed usage (feed axis samples yourself, one axis at a time):
24
+ * const stickNav = createStickNav({ onDirection: (dir) => router.dispatch(dir) });
25
+ * // …from the platform's analog stream: stickNav.axis(name, value)
26
+ *
27
+ * Note the two paths differ in more than wiring: a POLLED source (`session`) re-reads the stick every
28
+ * frame, while a FED source only hears about changes. Repeat is therefore driven by this engine's own
29
+ * timer in both cases, never by the arrival of samples — a stick held perfectly still is silent on the
30
+ * wire, and must still repeat.
31
+ */
32
+ import type { AxisName, ButtonName, StickName } from "../protocol/buttons.js";
33
+ import type { NavCue } from "./spatial-nav.js";
34
+ /** The four directions a stick can resolve to — a subset of {@link ButtonName}, so it feeds `handle`. */
35
+ export type StickNavDirection = Extract<ButtonName, "UP" | "DOWN" | "LEFT" | "RIGHT">;
36
+ /**
37
+ * Deflection at which a push becomes a direction press. Measured RADIALLY (the vector's length), not
38
+ * per-axis — a per-axis test is what makes a diagonal read as two presses, since both components clear
39
+ * the bar at once.
40
+ */
41
+ export declare const STICK_NAV_ON = 0.6;
42
+ /**
43
+ * Deflection the stick must fall back below before the held direction releases. Below {@link
44
+ * STICK_NAV_ON} on purpose (hysteresis): a stick resting near the threshold would otherwise chatter
45
+ * press/release for as long as the rider held it there.
46
+ */
47
+ export declare const STICK_NAV_OFF = 0.4;
48
+ /**
49
+ * How much the other axis must BEAT the held one by before the direction switches mid-push (e.g.
50
+ * rolling from up-right round to right without recentring). A bare `>` comparison would flicker
51
+ * between two directions for a stick parked on the 45° line, which is exactly where a thumb naturally
52
+ * rests on a diagonal; the margin makes the current direction win ties and near-ties.
53
+ */
54
+ export declare const STICK_NAV_DOMINANCE = 1.2;
55
+ /** Pause after the first step before a held stick starts repeating (ms) — long enough that a deliberate
56
+ * single step never turns into two. */
57
+ export declare const STICK_NAV_REPEAT_DELAY_MS = 400;
58
+ /** Interval between repeats while the stick is held (ms) — ~8 steps/second. */
59
+ export declare const STICK_NAV_REPEAT_MS = 125;
60
+ /**
61
+ * Anything that can report a stick position — a `PlatformSession` satisfies this. Structural on
62
+ * purpose: `nav` must not depend on the client.
63
+ */
64
+ export interface NavStickSource {
65
+ stick(name: StickName): {
66
+ x: number;
67
+ y: number;
68
+ };
69
+ }
70
+ export interface StickNavOptions {
71
+ /** Where a resolved direction goes. Typically a {@link SpatialNav.handle} or the shell's dispatcher. */
72
+ onDirection: (dir: StickNavDirection) => void;
73
+ /**
74
+ * Auto-poll a stick source (`PlatformSession` or any `{ stick }`) every animation frame. Omit when
75
+ * the caller feeds {@link StickNav.axis} / {@link StickNav.sample} itself (the shell, which receives
76
+ * the platform's analog stream as it changes).
77
+ */
78
+ session?: NavStickSource;
79
+ /** Which stick to poll when `session` is given. Default `"LSTICK"` — the movement stick. */
80
+ stick?: StickName;
81
+ /** Auto-repeat while the stick is held. Default `true`; `false` = one step per push, recentre to step again. */
82
+ repeat?: boolean;
83
+ /** Override {@link STICK_NAV_ON}. */
84
+ on?: number;
85
+ /** Override {@link STICK_NAV_OFF}. */
86
+ off?: number;
87
+ /** Override {@link STICK_NAV_DOMINANCE}. */
88
+ dominance?: number;
89
+ /** Override {@link STICK_NAV_REPEAT_DELAY_MS}. */
90
+ repeatDelayMs?: number;
91
+ /** Override {@link STICK_NAV_REPEAT_MS}. */
92
+ repeatMs?: number;
93
+ /** Sink for the `nav.move` cue, fired on every emitted direction (first step and repeats alike).
94
+ * Omit when the consumer already cues on its own `onDirection` — double-cueing is the common mistake. */
95
+ cue?: (id: NavCue) => void;
96
+ }
97
+ export interface StickNav {
98
+ /** Feed a full stick position (right/up = +1). The normal entry point for a polled source. */
99
+ sample(x: number, y: number): void;
100
+ /**
101
+ * Feed ONE canonical axis of the watched stick; the other keeps its last value. For consumers whose
102
+ * analog stream arrives per-axis. Axes belonging to the other stick are ignored.
103
+ */
104
+ axis(name: AxisName, value: number): void;
105
+ /** The direction currently held, or `null`. */
106
+ current(): StickNavDirection | null;
107
+ /** Force the stick to centre — releases any held direction and stops repeats, emitting nothing.
108
+ * Use when the consumer stops owning input (a game takes the screen) so a held stick can't fire into it. */
109
+ release(): void;
110
+ /** Tear down: stop polling, clear timers. */
111
+ dispose(): void;
112
+ }
113
+ export declare function createStickNav(opts: StickNavOptions): StickNav;
114
+ //# sourceMappingURL=stick-nav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stick-nav.d.ts","sourceRoot":"","sources":["../../src/nav/stick-nav.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,yGAAyG;AACzG,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAEtF;;;;GAIG;AACH,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC;;;;GAIG;AACH,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC;wCACwC;AACxC,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD;AAED,MAAM,WAAW,eAAe;IAC9B,wGAAwG;IACxG,WAAW,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gHAAgH;IAChH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;8GAC0G;IAC1G,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,8FAA8F;IAC9F,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,+CAA+C;IAC/C,OAAO,IAAI,iBAAiB,GAAG,IAAI,CAAC;IACpC;iHAC6G;IAC7G,OAAO,IAAI,IAAI,CAAC;IAChB,6CAA6C;IAC7C,OAAO,IAAI,IAAI,CAAC;CACjB;AAQD,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,CAqH9D"}