@rydr/game-sdk 3.23.0 → 3.25.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.
@@ -68,3 +68,35 @@ where `onBack` ultimately goes, and any per-item direction quirk (`onDirection`)
68
68
  - `dispose()` — unsubscribe and drop focus.
69
69
 
70
70
  See `spatial-nav.ts` for the full option list.
71
+
72
+ ## Scrolling a long page — `createScrollNav`
73
+
74
+ `createSpatialNav` is for menus you *choose from* (it roves a focus ring between `[data-nav]`
75
+ controls). A long page you *read* — rules, how-to-play, patch notes, credits — wants the opposite:
76
+ no focus, no snapping, just scroll. That's `createScrollNav`.
77
+
78
+ It is **content-agnostic**. On each `UP`/`DOWN` press it scrolls a container by a **fixed fraction of
79
+ that container's own visible height** (default `SCROLL_NAV_STEP` = `0.25`) — every press travels the
80
+ same distance, and the rider drives the pace. `B`/`Z` back out; `A` optionally confirms. It layers on
81
+ top of native scrolling, so the mouse wheel / trackpad / scrollbar keep working.
82
+
83
+ ```ts
84
+ import { createScrollNav } from "@rydr/game-sdk/nav";
85
+
86
+ const scroll = createScrollNav({
87
+ root: readerEl, // the scroll container (overflow-y: auto)
88
+ session, // auto-wires onButton down edges
89
+ cue, // nav.move fires only on a real scroll
90
+ onBack: () => goHome(), // B / Z
91
+ });
92
+ ```
93
+
94
+ `createScrollNav(options) → { handle, scrollBy, dispose }`
95
+
96
+ - `handle(name)` — feed one down-edge when you're NOT passing `session` (or when a game gates on its
97
+ screen's visibility, since every screen's nav is alive at once).
98
+ - `scrollBy("UP" | "DOWN")` — programmatic step, identical to the key press.
99
+ - `dispose()` — unsubscribe the session (native scroll position on `root` is untouched).
100
+
101
+ A press at the top/bottom edge is a silent no-op (no false cue). Smooth scroll is used unless
102
+ `prefers-reduced-motion` is set. See `scroll-nav.ts` for the full option list.
@@ -12,7 +12,18 @@
12
12
  * ```
13
13
  *
14
14
  * See `README.md` for the `[data-nav]` / `[nav-focused]` convention and the full options.
15
+ *
16
+ * For a long page that is *read* rather than *chosen from* (rules, how-to-play, patch notes), use
17
+ * {@link createScrollNav} instead — `UP`/`DOWN` scroll the container by a fixed step, no focus, no
18
+ * snapping:
19
+ *
20
+ * ```ts
21
+ * import { createScrollNav } from "@rydr/game-sdk/nav";
22
+ * const scroll = createScrollNav({ root: readerEl, session, onBack: () => goHome() });
23
+ * ```
15
24
  */
16
25
  export { createSpatialNav } from "./spatial-nav.js";
17
26
  export type { SpatialNav, SpatialNavOptions, NavButtonSource, NavCue } from "./spatial-nav.js";
27
+ export { createScrollNav, SCROLL_NAV_STEP } from "./scroll-nav.js";
28
+ export type { ScrollNav, ScrollNavOptions } from "./scroll-nav.js";
18
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
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"}
package/dist/nav/index.js CHANGED
@@ -12,6 +12,16 @@
12
12
  * ```
13
13
  *
14
14
  * See `README.md` for the `[data-nav]` / `[nav-focused]` convention and the full options.
15
+ *
16
+ * For a long page that is *read* rather than *chosen from* (rules, how-to-play, patch notes), use
17
+ * {@link createScrollNav} instead — `UP`/`DOWN` scroll the container by a fixed step, no focus, no
18
+ * snapping:
19
+ *
20
+ * ```ts
21
+ * import { createScrollNav } from "@rydr/game-sdk/nav";
22
+ * const scroll = createScrollNav({ root: readerEl, session, onBack: () => goHome() });
23
+ * ```
15
24
  */
16
25
  export { createSpatialNav } from "./spatial-nav.js";
26
+ export { createScrollNav, SCROLL_NAV_STEP } from "./scroll-nav.js";
17
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Fixed-step scroll navigation for a long content page — the D-pad/arrow counterpart to
3
+ * {@link createSpatialNav} for pages that are *read*, not *chosen from*.
4
+ *
5
+ * Where `createSpatialNav` roves a focus ring between `[data-nav]` controls by geometry, this engine
6
+ * is deliberately **content-agnostic**: it owns no focus, knows nothing about sections, and never
7
+ * snaps. On each `UP`/`DOWN` press it scrolls a container by a **fixed fraction of that container's
8
+ * own visible height** (default a quarter) — so every press travels the same distance and the rider
9
+ * drives the reading pace. `B`/`Z` back out; `A` optionally confirms. Use it for rules / how-to-play
10
+ * pages, patch notes, credits — anything that's a scroll, not a menu.
11
+ *
12
+ * Reads input ONLY through a button source (`session.onButton`) or an explicit `handle` feed — never
13
+ * a raw key listener (see `../protocol/buttons.ts` for why). It layers on top of native scrolling, so
14
+ * the mouse wheel / trackpad / scrollbar keep working untouched.
15
+ *
16
+ * Game usage (session auto-wired, cue wired to the soundboard):
17
+ * import { createScrollNav } from "@rydr/game-sdk/nav";
18
+ * const scroll = createScrollNav({ root: readerEl, session, cue, onBack: () => goHome() });
19
+ *
20
+ * Shell / multiplexed usage (feed edges yourself):
21
+ * const scroll = createScrollNav({ root: readerEl });
22
+ * // …forward down edges: scroll.handle(name)
23
+ */
24
+ import type { ButtonName } from "../protocol/buttons.js";
25
+ import type { NavButtonSource, NavCue } from "./spatial-nav.js";
26
+ /** Default {@link ScrollNavOptions.step}: a quarter of the container's visible height per press. */
27
+ export declare const SCROLL_NAV_STEP = 0.25;
28
+ export interface ScrollNavOptions {
29
+ /** The scroll container. Its own `clientHeight` sets the per-press distance and its `scrollHeight`
30
+ * the clamp; it must be an actual scroller (`overflow-y: auto|scroll`). */
31
+ root: HTMLElement;
32
+ /**
33
+ * Auto-subscribe to a button source (`PlatformSession` or any `{ onButton }`): its `down` edges are
34
+ * routed to {@link ScrollNav.handle}. Omit when the caller feeds `handle` itself (the shell, or a
35
+ * game that gates on its screen's visibility — every screen's nav is alive at once).
36
+ */
37
+ session?: NavButtonSource;
38
+ /** Fraction of the container's visible height scrolled per `UP`/`DOWN` press. Default {@link SCROLL_NAV_STEP}. */
39
+ step?: number;
40
+ /** Sink for nav cues — `nav.move` fires only on a *real* scroll, `nav.back` on `B`/`Z`. Omit for silence. */
41
+ cue?: (id: NavCue) => void;
42
+ /** Terminal back (`B`/`Z`) — app-owned (route home / close the page). */
43
+ onBack?: () => void;
44
+ /** Optional confirm (`A`) — e.g. jump to the page's primary CTA. No-op if omitted. */
45
+ onConfirm?: () => void;
46
+ /** Scroll behavior. Default `"smooth"`, auto-downgraded to `"auto"` under `prefers-reduced-motion`. */
47
+ behavior?: ScrollBehavior;
48
+ }
49
+ export interface ScrollNav {
50
+ /** Feed one discrete button (a `down` edge). No-op for names that carry no scroll meaning. */
51
+ handle(name: ButtonName): void;
52
+ /** Programmatic step in a direction — identical to the matching key press (cue included). */
53
+ scrollBy(dir: "UP" | "DOWN"): void;
54
+ /** Tear down: unsubscribe the session. (Native scroll state on `root` is left as-is.) */
55
+ dispose(): void;
56
+ }
57
+ export declare function createScrollNav(opts: ScrollNavOptions): ScrollNav;
58
+ //# sourceMappingURL=scroll-nav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-nav.d.ts","sourceRoot":"","sources":["../../src/nav/scroll-nav.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEhE,oGAAoG;AACpG,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,MAAM,WAAW,gBAAgB;IAC/B;gFAC4E;IAC5E,IAAI,EAAE,WAAW,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,kHAAkH;IAClH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6GAA6G;IAC7G,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,uGAAuG;IACvG,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,8FAA8F;IAC9F,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,6FAA6F;IAC7F,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,yFAAyF;IACzF,OAAO,IAAI,IAAI,CAAC;CACjB;AAQD,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,CAmDjE"}
@@ -0,0 +1,59 @@
1
+ /** Default {@link ScrollNavOptions.step}: a quarter of the container's visible height per press. */
2
+ export const SCROLL_NAV_STEP = 0.25;
3
+ function prefersReducedMotion() {
4
+ return typeof window !== "undefined" &&
5
+ typeof window.matchMedia === "function" &&
6
+ window.matchMedia("(prefers-reduced-motion: reduce)").matches;
7
+ }
8
+ export function createScrollNav(opts) {
9
+ const { root } = opts;
10
+ const step = opts.step ?? SCROLL_NAV_STEP;
11
+ const behavior = () => (prefersReducedMotion() ? "auto" : (opts.behavior ?? "smooth"));
12
+ function scrollStep(dir) {
13
+ // Clamp to the real scroll range so a press at an edge is a silent no-op (no false cue). Compare
14
+ // against the current position (not the pending smooth-scroll target) — a rider mashing the pad
15
+ // past the edge should simply stop, which this delivers.
16
+ const max = root.scrollHeight - root.clientHeight;
17
+ const cur = root.scrollTop;
18
+ const delta = step * root.clientHeight * (dir === "DOWN" ? 1 : -1);
19
+ const next = Math.max(0, Math.min(max, cur + delta));
20
+ if (next === cur)
21
+ return; // already at that edge — nothing to do, no cue
22
+ root.scrollTo({ top: next, behavior: behavior() });
23
+ opts.cue?.("nav.move");
24
+ }
25
+ const api = {
26
+ handle(name) {
27
+ switch (name) {
28
+ case "UP":
29
+ case "DOWN":
30
+ scrollStep(name);
31
+ return;
32
+ case "A":
33
+ opts.onConfirm?.();
34
+ return;
35
+ case "B":
36
+ case "Z":
37
+ opts.cue?.("nav.back");
38
+ opts.onBack?.();
39
+ return;
40
+ default:
41
+ return; // LEFT/RIGHT/Y/LT/RT carry no scroll meaning
42
+ }
43
+ },
44
+ scrollBy(dir) {
45
+ scrollStep(dir);
46
+ },
47
+ dispose() {
48
+ unsub?.();
49
+ },
50
+ };
51
+ // Auto-wire the session's down edges (the default `onButton` already swallows held re-emits, so one
52
+ // press = one step — menu-correct, no runaway scrolling from a held pad).
53
+ const unsub = opts.session?.onButton((e) => {
54
+ if (e.edge === "down")
55
+ api.handle(e.name);
56
+ });
57
+ return api;
58
+ }
59
+ //# sourceMappingURL=scroll-nav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-nav.js","sourceRoot":"","sources":["../../src/nav/scroll-nav.ts"],"names":[],"mappings":"AA0BA,oGAAoG;AACpG,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAiCpC,SAAS,oBAAoB;IAC3B,OAAO,OAAO,MAAM,KAAK,WAAW;QAClC,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;QACvC,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,eAAe,CAAC;IAE1C,MAAM,QAAQ,GAAG,GAAmB,EAAE,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC;IAEvG,SAAS,UAAU,CAAC,GAAkB;QACpC,iGAAiG;QACjG,gGAAgG;QAChG,yDAAyD;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QACrD,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,CAAC,+CAA+C;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,GAAG,GAAc;QACrB,MAAM,CAAC,IAAgB;YACrB,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,IAAI,CAAC;gBAAC,KAAK,MAAM;oBACpB,UAAU,CAAC,IAAI,CAAC,CAAC;oBACjB,OAAO;gBACT,KAAK,GAAG;oBACN,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;oBACnB,OAAO;gBACT,KAAK,GAAG,CAAC;gBAAC,KAAK,GAAG;oBAChB,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;oBACvB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;oBAChB,OAAO;gBACT;oBACE,OAAO,CAAC,6CAA6C;YACzD,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,GAAkB;YACzB,UAAU,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,EAAE,CAAC;QACZ,CAAC;KACF,CAAC;IAEF,oGAAoG;IACpG,0EAA0E;IAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;YAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -73,6 +73,19 @@ export interface SpatialNavOptions {
73
73
  * `data-nav-kind="carousel"` scrolls LEFT/RIGHT in place. Return `true` to consume the press.
74
74
  */
75
75
  onDirection?: (el: HTMLElement, name: ButtonName) => boolean;
76
+ /**
77
+ * Group `[data-nav]` items into zones (sections/containers) by this selector — each item belongs to
78
+ * its nearest ancestor matching it. With zones, a direction press first looks for a neighbour WITHIN
79
+ * the current zone; only when the zone has no neighbour that way does focus cross into the adjacent
80
+ * zone — chosen by the zones' own bounds (edge-based, so a full-width section above/below never reads
81
+ * as a left/right neighbour) — landing on that zone's entry item and resetting the lane memory. This
82
+ * gives the natural "navigate inside a block; on leaving it, enter the next block at its start"
83
+ * behaviour: e.g. a header row, a hero, and a games grid each declared a zone. A zone element may
84
+ * override its entry item with `data-nav-zone-enter="first" | "last" | "nearest"` (default `first` —
85
+ * the zone's leftmost/topmost item in DOM order). Omit to disable zones: flat geometry over every
86
+ * item, exactly as before.
87
+ */
88
+ zoneSelector?: string;
76
89
  }
77
90
  export interface SpatialNav {
78
91
  /** Feed one discrete button (a `down` edge). No-op for non-nav names. */
@@ -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;AAErE,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;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6GAA6G;IAC7G,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;CAC9D;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,yDAAyD;IACzD,OAAO,IAAI,IAAI,CAAC;CACjB;AAkFD,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,iBAAsB,GAAG,UAAU,CAmLzE"}
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;AAErE,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;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6GAA6G;IAC7G,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;CACvB;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,yDAAyD;IACzD,OAAO,IAAI,IAAI,CAAC;CACjB;AAkFD,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,iBAAsB,GAAG,UAAU,CAsQzE"}
@@ -76,8 +76,15 @@ function farthestOpposite(list, cur, dir) {
76
76
  }
77
77
  export function createSpatialNav(opts = {}) {
78
78
  const selector = opts.selector ?? "[data-nav]";
79
+ const zoneSelector = opts.zoneSelector;
79
80
  if (opts.ring !== false)
80
81
  injectRingCss();
82
+ // A `[data-nav]` item's zone container (nearest ancestor matching `zoneSelector`), or `null` when
83
+ // zones are off. `zoneKey` maps each item to a stable zone identity for grouping — the zone element,
84
+ // or the item itself when it has no zone ancestor (a loose item behaves as its own singleton zone, so
85
+ // it stays reachable rather than getting stranded outside every group).
86
+ const zoneOf = (el) => (zoneSelector ? el.closest(zoneSelector) : null);
87
+ const zoneKey = (el) => (zoneOf(el) ?? el);
81
88
  // Screen stack: each entry is a scope root + its remembered focused element. Top is active.
82
89
  const stack = [
83
90
  { root: opts.root ?? (typeof document !== "undefined" ? document : null), current: null },
@@ -112,6 +119,69 @@ export function createSpatialNav(opts = {}) {
112
119
  el.focus();
113
120
  opts.onFocusChange?.(el);
114
121
  }
122
+ /** The distinct zones present among `list` (deduped, in first-seen DOM order). */
123
+ const zonesOf = (list) => {
124
+ const seen = new Set();
125
+ const out = [];
126
+ for (const el of list) {
127
+ const z = zoneKey(el);
128
+ if (!seen.has(z)) {
129
+ seen.add(z);
130
+ out.push(z);
131
+ }
132
+ }
133
+ return out;
134
+ };
135
+ /** The nearest OTHER zone whose bounds lie in `dir` from `curZone` — edge-based, so a full-width
136
+ * zone directly above/below never counts as a left/right neighbour (and vice-versa). */
137
+ const nearestZoneInDir = (curZone, dir, list) => {
138
+ const from = rectOf(curZone);
139
+ let best = null;
140
+ let bestGap = Infinity;
141
+ for (const z of zonesOf(list)) {
142
+ if (z === curZone)
143
+ continue;
144
+ const c = rectOf(z);
145
+ let gap = null;
146
+ if (dir === "DOWN")
147
+ gap = c.top >= from.bottom - DIR_TOL ? c.top - from.bottom : null;
148
+ else if (dir === "UP")
149
+ gap = c.bottom <= from.top + DIR_TOL ? from.top - c.bottom : null;
150
+ else if (dir === "RIGHT")
151
+ gap = c.left >= from.right - DIR_TOL ? c.left - from.right : null;
152
+ else if (dir === "LEFT")
153
+ gap = c.right <= from.left + DIR_TOL ? from.left - c.right : null;
154
+ if (gap !== null && gap < bestGap) {
155
+ bestGap = gap;
156
+ best = z;
157
+ }
158
+ }
159
+ return best;
160
+ };
161
+ /** Where focus lands when ENTERING `zone`: its first `[data-nav]` in DOM order by default
162
+ * (leftmost/topmost), or per the zone's `data-nav-zone-enter` = first | last | nearest. */
163
+ const zoneEntry = (zone, list, from) => {
164
+ const members = list.filter((el) => zoneKey(el) === zone);
165
+ if (members.length === 0)
166
+ return null;
167
+ const strategy = zone.getAttribute("data-nav-zone-enter") ?? "first";
168
+ if (strategy === "last")
169
+ return members[members.length - 1];
170
+ if (strategy === "nearest") {
171
+ let best = members[0];
172
+ let bestD = Infinity;
173
+ for (const el of members) {
174
+ const rc = rectOf(el);
175
+ const d = Math.hypot(rc.cx - from.cx, rc.cy - from.cy);
176
+ if (d < bestD) {
177
+ bestD = d;
178
+ best = el;
179
+ }
180
+ }
181
+ return best;
182
+ }
183
+ return members[0]; // "first"
184
+ };
115
185
  function move(dir) {
116
186
  const list = items();
117
187
  if (list.length === 0)
@@ -142,21 +212,50 @@ export function createSpatialNav(opts = {}) {
142
212
  desiredX = null;
143
213
  }
144
214
  };
145
- let best = null;
146
- let bestD = Infinity;
147
- for (const el of list) {
148
- if (el === cur)
149
- continue;
150
- const cost = directionalCost(from, rectOf(el), dir, crossRef);
151
- if (cost !== null && cost < bestD) {
152
- bestD = cost;
153
- best = el;
215
+ /** Nearest neighbour by directional cost among `candidates` (lower cost wins). */
216
+ const nearestIn = (candidates) => {
217
+ let best = null;
218
+ let bestD = Infinity;
219
+ for (const el of candidates) {
220
+ if (el === cur)
221
+ continue;
222
+ const cost = directionalCost(from, rectOf(el), dir, crossRef);
223
+ if (cost !== null && cost < bestD) {
224
+ bestD = cost;
225
+ best = el;
226
+ }
227
+ }
228
+ return best;
229
+ };
230
+ if (zoneSelector) {
231
+ const curZone = zoneKey(cur);
232
+ // 1) Stay inside the current zone while it has a neighbour in this direction.
233
+ const inZone = nearestIn(list.filter((el) => zoneKey(el) === curZone));
234
+ if (inZone) {
235
+ rememberLane();
236
+ setFocus(inZone);
237
+ return;
154
238
  }
239
+ // 2) Zone exhausted that way — cross into the adjacent zone at its entry item; reset the lane so
240
+ // the next move starts fresh from that item (a new column, not the one we arrived carrying).
241
+ const target = nearestZoneInDir(curZone, dir, list);
242
+ if (target) {
243
+ const entry = zoneEntry(target, list, from);
244
+ if (entry) {
245
+ resetLane();
246
+ setFocus(entry);
247
+ return;
248
+ }
249
+ }
250
+ // 3) No zone that way — fall through to wrap / edge-scroll below.
155
251
  }
156
- if (best) {
157
- rememberLane();
158
- setFocus(best);
159
- return;
252
+ else {
253
+ const best = nearestIn(list);
254
+ if (best) {
255
+ rememberLane();
256
+ setFocus(best);
257
+ return;
258
+ }
160
259
  }
161
260
  // No neighbour in that direction: wrap to the far side, or snap the page to the top on UP.
162
261
  if (opts.wrap) {
@@ -190,12 +289,16 @@ export function createSpatialNav(opts = {}) {
190
289
  return;
191
290
  case "A": {
192
291
  const el = top().current;
193
- if (!el) {
292
+ // Re-validate against the live list, exactly like move() does: focus can go stale across a
293
+ // re-render (the remembered element removed, disabled, or hidden), and activating a detached
294
+ // node fires its last-rendered handler out of context. If stale, reveal the first item
295
+ // instead of blind-activating.
296
+ if (!el || !items().includes(el)) {
194
297
  const first = items()[0];
195
298
  if (first)
196
299
  setFocus(first);
197
300
  return;
198
- } // reveal, don't blind-activate
301
+ }
199
302
  opts.cue?.("nav.confirm");
200
303
  if (opts.onActivate)
201
304
  opts.onActivate(el);
@@ -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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"}
@@ -34,6 +34,9 @@ export interface BoardEntry {
34
34
  rank: number;
35
35
  playerId: string;
36
36
  displayName: string;
37
+ /** Public URL of the rider's profile-picture thumbnail (128px), full-size as fallback.
38
+ * Absent for seed rows and riders with no photo. Resolved live at read time. */
39
+ profilePictureUrl?: string;
37
40
  /** Raw value in the board's unit (format with {@link formatBoardValue}). */
38
41
  value: number;
39
42
  /** The run this entry came from, if known (links to the FIT activity + run record). */
@@ -1 +1 @@
1
- {"version":3,"file":"boards.d.ts","sourceRoot":"","sources":["../../src/protocol/boards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,OAAO,GACP,UAAU,GACV,OAAO,GACP,SAAS,GACT,UAAU,GACV,OAAO,CAAC;AAEZ,kFAAkF;AAClF,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvC,0DAA0D;AAC1D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;0FAC0F;AAC1F,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4FAA4F;AAC5F,MAAM,WAAW,iBAAiB;IAChC,6FAA6F;IAC7F,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,EAAE,OAAO,CAAC;IACxB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,iEAAiE;IACjE,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBjF"}
1
+ {"version":3,"file":"boards.d.ts","sourceRoot":"","sources":["../../src/protocol/boards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,OAAO,GACP,UAAU,GACV,OAAO,GACP,SAAS,GACT,UAAU,GACV,OAAO,CAAC;AAEZ,kFAAkF;AAClF,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvC,0DAA0D;AAC1D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB;qFACiF;IACjF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;0FAC0F;AAC1F,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4FAA4F;AAC5F,MAAM,WAAW,iBAAiB;IAChC,6FAA6F;IAC7F,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,EAAE,OAAO,CAAC;IACxB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,iEAAiE;IACjE,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBjF"}
@@ -1 +1 @@
1
- {"version":3,"file":"boards.js","sourceRoot":"","sources":["../../src/protocol/boards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAyHH,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,SAAyB,EAAE,KAAa;IACvE,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnC,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACnD,KAAK,UAAU;YACb,OAAO,KAAK,IAAI,IAAI;gBAClB,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACnC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5C,KAAK,SAAS;YACZ,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,EAAU,EAAE,OAAgB;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAElC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1F,OAAO,KAAK,GAAG,CAAC;YACd,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;YACxD,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,KAAK,GAAG,CAAC;QACd,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QACpF,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"boards.js","sourceRoot":"","sources":["../../src/protocol/boards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA4HH,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,SAAyB,EAAE,KAAa;IACvE,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnC,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACnD,KAAK,UAAU;YACb,OAAO,KAAK,IAAI,IAAI;gBAClB,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACnC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5C,KAAK,SAAS;YACZ,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,EAAU,EAAE,OAAgB;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAElC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1F,OAAO,KAAK,GAAG,CAAC;YACd,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;YACxD,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,KAAK,GAAG,CAAC;QACd,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QACpF,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACvD,CAAC"}
@@ -11,8 +11,8 @@ export interface ScopedIdentity {
11
11
  playerId: string;
12
12
  /** Display name chosen for public surfaces (leaderboards, lobbies). */
13
13
  displayName: string;
14
- /** Optional avatar URL. */
15
- avatarUrl?: string;
14
+ /** Optional profile-picture URL. */
15
+ profilePictureUrl?: string;
16
16
  /** Rider weight in kg — present only if `identity` capability granted with physics scope. */
17
17
  weightKg?: number;
18
18
  /** Functional threshold power in watts — present only if granted. */
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/protocol/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/protocol/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
@@ -9,5 +9,5 @@
9
9
  export declare const RYDR_PROTOCOL_VERSION: 22;
10
10
  /** Semver of this SDK build. Sent in the handshake for telemetry/debugging.
11
11
  * (Bumped to 2.0.0 by `npm version major` on release — see CHANGELOG [Unreleased].) */
12
- export declare const RYDR_SDK_VERSION = "3.23.0";
12
+ export declare const RYDR_SDK_VERSION = "3.25.0";
13
13
  //# sourceMappingURL=version.d.ts.map
@@ -89,5 +89,5 @@
89
89
  export const RYDR_PROTOCOL_VERSION = 22;
90
90
  /** Semver of this SDK build. Sent in the handshake for telemetry/debugging.
91
91
  * (Bumped to 2.0.0 by `npm version major` on release — see CHANGELOG [Unreleased].) */
92
- export const RYDR_SDK_VERSION = "3.23.0";
92
+ export const RYDR_SDK_VERSION = "3.25.0";
93
93
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rydr/game-sdk",
3
- "version": "3.23.0",
3
+ "version": "3.25.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/bdefrenne/rydr-game-sdk.git"