@rydr/game-sdk 3.22.0 → 3.24.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/README.md +21 -4
- package/dist/client/PlatformClient.d.ts +73 -7
- package/dist/client/PlatformClient.d.ts.map +1 -1
- package/dist/client/PlatformClient.js +68 -8
- package/dist/client/PlatformClient.js.map +1 -1
- package/dist/host/PlatformHost.d.ts +27 -2
- package/dist/host/PlatformHost.d.ts.map +1 -1
- package/dist/host/PlatformHost.js +19 -0
- package/dist/host/PlatformHost.js.map +1 -1
- package/dist/nav/README.md +70 -0
- package/dist/nav/index.d.ts +18 -0
- package/dist/nav/index.d.ts.map +1 -0
- package/dist/nav/index.js +17 -0
- package/dist/nav/index.js.map +1 -0
- package/dist/nav/spatial-nav.d.ts +101 -0
- package/dist/nav/spatial-nav.d.ts.map +1 -0
- package/dist/nav/spatial-nav.js +295 -0
- package/dist/nav/spatial-nav.js.map +1 -0
- package/dist/protocol/boards.d.ts +3 -0
- package/dist/protocol/boards.d.ts.map +1 -1
- package/dist/protocol/boards.js.map +1 -1
- package/dist/protocol/buttons.d.ts +45 -0
- package/dist/protocol/buttons.d.ts.map +1 -1
- package/dist/protocol/buttons.js +6 -0
- package/dist/protocol/buttons.js.map +1 -1
- package/dist/protocol/capabilities.d.ts +2 -1
- package/dist/protocol/capabilities.d.ts.map +1 -1
- package/dist/protocol/capabilities.js.map +1 -1
- package/dist/protocol/guards.d.ts.map +1 -1
- package/dist/protocol/guards.js +1 -0
- package/dist/protocol/guards.js.map +1 -1
- package/dist/protocol/haptics.d.ts +47 -0
- package/dist/protocol/haptics.d.ts.map +1 -0
- package/dist/protocol/haptics.js +27 -0
- package/dist/protocol/haptics.js.map +1 -0
- package/dist/protocol/identity.d.ts +2 -2
- package/dist/protocol/identity.d.ts.map +1 -1
- package/dist/protocol/index.d.ts +1 -0
- package/dist/protocol/index.d.ts.map +1 -1
- package/dist/protocol/index.js +1 -0
- package/dist/protocol/index.js.map +1 -1
- package/dist/protocol/messages.d.ts +64 -4
- package/dist/protocol/messages.d.ts.map +1 -1
- package/dist/protocol/version.d.ts +2 -2
- package/dist/protocol/version.d.ts.map +1 -1
- package/dist/protocol/version.js +31 -5
- package/dist/protocol/version.js.map +1 -1
- package/package.json +6 -2
|
@@ -84,6 +84,9 @@ export function createPlatformHost(options) {
|
|
|
84
84
|
case "rydr/ui.setMenu":
|
|
85
85
|
options.onMenuRequest?.(msg.hidden ? "hidden" : msg.visible);
|
|
86
86
|
break;
|
|
87
|
+
case "rydr/activity.set":
|
|
88
|
+
options.onActivityChange?.(msg.state);
|
|
89
|
+
break;
|
|
87
90
|
case "rydr/exitRequest":
|
|
88
91
|
options.onExitRequest?.();
|
|
89
92
|
break;
|
|
@@ -93,6 +96,17 @@ export function createPlatformHost(options) {
|
|
|
93
96
|
case "rydr/audio.adjustMaster":
|
|
94
97
|
options.onAdjustMasterVolume?.(msg.direction);
|
|
95
98
|
break;
|
|
99
|
+
case "rydr/haptics.vibrate":
|
|
100
|
+
// Haptics is controller feedback — gated by `buttons`, like `input.button`/`input.status`.
|
|
101
|
+
if (can("buttons"))
|
|
102
|
+
options.onVibrate?.(msg.effect);
|
|
103
|
+
break;
|
|
104
|
+
case "rydr/trainer.adjustResistance":
|
|
105
|
+
options.onAdjustResistance?.(msg.direction);
|
|
106
|
+
break;
|
|
107
|
+
case "rydr/menu.toggle":
|
|
108
|
+
options.onToggleMenu?.();
|
|
109
|
+
break;
|
|
96
110
|
case "rydr/pong":
|
|
97
111
|
// liveness reply — no-op for now
|
|
98
112
|
break;
|
|
@@ -364,6 +378,11 @@ export function createPlatformHost(options) {
|
|
|
364
378
|
return;
|
|
365
379
|
post({ rydr: true, type: "rydr/input.button", name, edge, repeat });
|
|
366
380
|
},
|
|
381
|
+
sendAxis: (name, value) => {
|
|
382
|
+
if (!can("buttons"))
|
|
383
|
+
return;
|
|
384
|
+
post({ rydr: true, type: "rydr/input.axis", name, value, t: performance.now() });
|
|
385
|
+
},
|
|
367
386
|
sendInputStatus: (controllerConnected) => {
|
|
368
387
|
if (can("buttons"))
|
|
369
388
|
post({ rydr: true, type: "rydr/input.status", controllerConnected });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlatformHost.js","sourceRoot":"","sources":["../../src/host/PlatformHost.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PlatformHost.js","sourceRoot":"","sources":["../../src/host/PlatformHost.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# `@rydr/game-sdk/nav` — spatial navigation
|
|
2
|
+
|
|
3
|
+
One geometry-based menu-navigation engine for controller / phone / keyboard, shared by the RYDR
|
|
4
|
+
shell and games so nobody hand-rolls focus movement. You mark focusable elements; the engine does
|
|
5
|
+
the rest.
|
|
6
|
+
|
|
7
|
+
## The convention
|
|
8
|
+
|
|
9
|
+
- **`[data-nav]`** — put this attribute on every element the rider can land on (buttons, cards, list
|
|
10
|
+
rows). The engine discovers them live from the DOM, in any layout.
|
|
11
|
+
- **`[nav-focused]`** — the engine reflects this attribute on the currently-focused element. A default
|
|
12
|
+
ring (outline + glow, no layout shift) is injected for you; pass `ring: false` to style it yourself.
|
|
13
|
+
- **`data-nav-kind="carousel"`** (optional) — with an `onDirection` hook, an item can consume
|
|
14
|
+
LEFT/RIGHT itself (e.g. scroll a strip) instead of moving focus.
|
|
15
|
+
|
|
16
|
+
House button convention (from `@rydr/game-sdk`): **A** = confirm/activate, **Z**/**B** = back.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import { createSpatialNav } from "@rydr/game-sdk/nav";
|
|
22
|
+
|
|
23
|
+
// A game: session wiring, focus ring, and cues are defaults — you write only this + [data-nav].
|
|
24
|
+
const nav = createSpatialNav({
|
|
25
|
+
session, // auto-subscribes to onButton (down edges → the engine)
|
|
26
|
+
root: document.body, // where to scan for [data-nav]
|
|
27
|
+
onBack: () => openPauseMenu(), // where "back" goes when no sub-screen is open (app-owned)
|
|
28
|
+
});
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The engine moves a `[nav-focused]` ring by geometry (nearest `[data-nav]` in the pressed direction),
|
|
32
|
+
scrolls it into view, focuses editable fields so typing works, activates on `A` via the element's own
|
|
33
|
+
`click`, and on `B`/`Z` pops any pushed screen or calls `onBack`.
|
|
34
|
+
|
|
35
|
+
## What it owns vs what you own
|
|
36
|
+
|
|
37
|
+
**Built in (opt-out):** session wiring (`session`), the `[nav-focused]` ring (`ring`), scroll-into-view
|
|
38
|
+
+ edge-scroll-to-top (`edgeScrollTop`), edge wrap-around (`wrap`), pointer-hover → focus so mouse and
|
|
39
|
+
controller share one focus state (`pointer`), editable-field focus, `A`=`click`, a screen stack
|
|
40
|
+
(`pushScreen`/`popScreen`), and nav cues if you pass a `cue` sink (e.g. a `Soundboard.cue`).
|
|
41
|
+
|
|
42
|
+
**Let the attribute drive your visuals — don't track selection in JS.** The engine owns focus; your
|
|
43
|
+
CSS reacts to `[nav-focused]`. A "spotlight the focused item, dim the rest" menu is pure CSS — no
|
|
44
|
+
`sel` variable, no paint loop:
|
|
45
|
+
|
|
46
|
+
```css
|
|
47
|
+
.card[nav-focused] { transform: scale(1.04); box-shadow: 0 0 0 2px #4de3ff; }
|
|
48
|
+
.card:not([nav-focused]) { opacity: .55; }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Render item-specific chrome (a side panel, a keycap on the focused card) from the `onFocusChange(el)`
|
|
52
|
+
hook or by reading `current()` — never by mirroring focus into your own index.
|
|
53
|
+
|
|
54
|
+
**Yours (the engine can't know these):** the `[data-nav]` markup, what each item does (`@click`),
|
|
55
|
+
where `onBack` ultimately goes, and any per-item direction quirk (`onDirection`).
|
|
56
|
+
|
|
57
|
+
## API
|
|
58
|
+
|
|
59
|
+
`createSpatialNav(options) → { handle, focusFirst, focusIndex, clear, pushScreen, popScreen, dispose }`
|
|
60
|
+
|
|
61
|
+
- `handle(name)` — feed one button when you're NOT passing `session` (the shell does this, since it
|
|
62
|
+
multiplexes the stream against a running game).
|
|
63
|
+
- `focusFirst()` / `focusIndex(i)` / `focus(el)` — pre-select on arrival, or focus a specific element
|
|
64
|
+
(hover sync / "land on Campaign"). `focus(el)` is silent and no-op if `el` isn't focusable in scope.
|
|
65
|
+
- `current()` — the focused element (or `null`). Read this instead of tracking your own selection
|
|
66
|
+
index; e.g. a side panel renders for `nav.current()`, and `Y` opens its detail.
|
|
67
|
+
- `pushScreen(root)` / `popScreen()` — nested modal/sub-screen scope with focus trapping.
|
|
68
|
+
- `dispose()` — unsubscribe and drop focus.
|
|
69
|
+
|
|
70
|
+
See `spatial-nav.ts` for the full option list.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@rydr/game-sdk/nav` — the shared spatial-navigation engine.
|
|
3
|
+
*
|
|
4
|
+
* Controller / phone / keyboard menu navigation, built once and used by both the platform shell and
|
|
5
|
+
* games so nobody reimplements it. Mark focusable elements `[data-nav]`, feed the engine a button
|
|
6
|
+
* source, and it moves a `[nav-focused]` ring by geometry (nearest item in the pressed direction),
|
|
7
|
+
* activates with `A` (`click`), and backs out with `B`/`Z`.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { createSpatialNav } from "@rydr/game-sdk/nav";
|
|
11
|
+
* const nav = createSpatialNav({ session, root: document.body, onBack: () => openPause() });
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* See `README.md` for the `[data-nav]` / `[nav-focused]` convention and the full options.
|
|
15
|
+
*/
|
|
16
|
+
export { createSpatialNav } from "./spatial-nav.js";
|
|
17
|
+
export type { SpatialNav, SpatialNavOptions, NavButtonSource, NavCue } from "./spatial-nav.js";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@rydr/game-sdk/nav` — the shared spatial-navigation engine.
|
|
3
|
+
*
|
|
4
|
+
* Controller / phone / keyboard menu navigation, built once and used by both the platform shell and
|
|
5
|
+
* games so nobody reimplements it. Mark focusable elements `[data-nav]`, feed the engine a button
|
|
6
|
+
* source, and it moves a `[nav-focused]` ring by geometry (nearest item in the pressed direction),
|
|
7
|
+
* activates with `A` (`click`), and backs out with `B`/`Z`.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { createSpatialNav } from "@rydr/game-sdk/nav";
|
|
11
|
+
* const nav = createSpatialNav({ session, root: document.body, onBack: () => openPause() });
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* See `README.md` for the `[data-nav]` / `[nav-focused]` convention and the full options.
|
|
15
|
+
*/
|
|
16
|
+
export { createSpatialNav } from "./spatial-nav.js";
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Geometry-based spatial navigation for a DOM menu — the shared engine behind controller / phone /
|
|
3
|
+
* keyboard focus, used by BOTH the platform shell and games, so no one reimplements menu navigation.
|
|
4
|
+
*
|
|
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]`
|
|
7
|
+
* element in that direction (a single rect-scoring metric that serves grids, columns, carousels, and
|
|
8
|
+
* lists alike — no per-layout code), reflects `[nav-focused]`, scrolls it into view, and activates the
|
|
9
|
+
* focused element with `A` by dispatching its existing `click` (reusing the page's own handlers). `B`/
|
|
10
|
+
* `Z` pop the screen stack, else call `onBack`.
|
|
11
|
+
*
|
|
12
|
+
* It owns nothing app-specific. What the items *do* is their `@click`; where *back* ultimately goes is
|
|
13
|
+
* `onBack`; which elements are focusable is the `[data-nav]` markup. Everything else — session wiring,
|
|
14
|
+
* the focus ring, sounds, edge scrolling, editable-field focus — is a built-in default you can opt out
|
|
15
|
+
* of.
|
|
16
|
+
*
|
|
17
|
+
* Game usage (session wiring + ring + cues are defaults — the game writes only this + `[data-nav]`):
|
|
18
|
+
* import { createSpatialNav } from "@rydr/game-sdk/nav";
|
|
19
|
+
* const nav = createSpatialNav({ session, root: document.body, onBack: () => openPause() });
|
|
20
|
+
*
|
|
21
|
+
* Shell usage (the shell arbitrates against the game iframe, so it feeds `handle` itself):
|
|
22
|
+
* const nav = createSpatialNav({ ring: false, onBack: () => navigate("/"), edgeScrollTop: true });
|
|
23
|
+
* // …forward the shell's own button stream: nav.handle(name)
|
|
24
|
+
*/
|
|
25
|
+
import type { ButtonName, ButtonEdge } from "../protocol/buttons.js";
|
|
26
|
+
/** Anything with `onButton` (a `PlatformSession` satisfies this) — for auto-wiring the input stream. */
|
|
27
|
+
export interface NavButtonSource {
|
|
28
|
+
onButton(cb: (e: {
|
|
29
|
+
name: ButtonName;
|
|
30
|
+
edge: ButtonEdge;
|
|
31
|
+
}) => void): () => void;
|
|
32
|
+
}
|
|
33
|
+
/** The nav cues the engine fires; wire `cue` to a `Soundboard.cue` (game) or the shell's `cue`. */
|
|
34
|
+
export type NavCue = "nav.move" | "nav.confirm" | "nav.back";
|
|
35
|
+
export interface SpatialNavOptions {
|
|
36
|
+
/**
|
|
37
|
+
* Auto-subscribe to a button source (`PlatformSession` or any `{ onButton }`): its `down` edges are
|
|
38
|
+
* routed to {@link SpatialNav.handle}. Omit when the caller feeds `handle` itself (the shell, which
|
|
39
|
+
* multiplexes the same stream against a running game via its own router).
|
|
40
|
+
*/
|
|
41
|
+
session?: NavButtonSource;
|
|
42
|
+
/** Element / ShadowRoot / Document to scan for focusables. Default `document`. */
|
|
43
|
+
root?: ParentNode;
|
|
44
|
+
/** Focusable-item selector. Default `[data-nav]`. */
|
|
45
|
+
selector?: string;
|
|
46
|
+
/** Inject a default `[nav-focused]` ring (outline + glow, no layout shift). `false` = style it yourself. Default `true`. */
|
|
47
|
+
ring?: boolean;
|
|
48
|
+
/** Sink for nav cues (`nav.move/confirm/back`). Pass a `Soundboard.cue`; omit for silence. */
|
|
49
|
+
cue?: (id: NavCue) => void;
|
|
50
|
+
/** When a direction press has no target and the direction is `UP`, smooth-scroll the page to top (home-hero UX). Default `false`. */
|
|
51
|
+
edgeScrollTop?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Hover a `[data-nav]` item (pointer) to focus it, unifying mouse and controller onto one focus
|
|
54
|
+
* state — so a menu with mouse support needs no `mouseenter` wiring of its own. Default `false`
|
|
55
|
+
* (the shell keeps controller-only focus; games with hoverable menus opt in).
|
|
56
|
+
*/
|
|
57
|
+
pointer?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Wrap around at the edges: a direction press with no target jumps to the far side (DOWN past the
|
|
60
|
+
* bottom → the topmost item, RIGHT past the end → the leftmost, etc.) — natural for a single-axis
|
|
61
|
+
* list/menu. Default `false` (edges are walls; pairs with `edgeScrollTop`). Ignored per-axis when a
|
|
62
|
+
* real neighbour exists.
|
|
63
|
+
*/
|
|
64
|
+
wrap?: boolean;
|
|
65
|
+
/** Terminal back — called on `B`/`Z` when the screen stack is empty (app-owned: route home / open pause). */
|
|
66
|
+
onBack?: () => void;
|
|
67
|
+
/** Activate the focused element (`A`). Default: dispatch its `click`. */
|
|
68
|
+
onActivate?: (el: HTMLElement) => void;
|
|
69
|
+
/** The focused element changed (or `null` when cleared) — e.g. to ride a floating keycap. */
|
|
70
|
+
onFocusChange?: (el: HTMLElement | null) => void;
|
|
71
|
+
/**
|
|
72
|
+
* Give the focused item first refusal on a direction before focus moves — e.g. a
|
|
73
|
+
* `data-nav-kind="carousel"` scrolls LEFT/RIGHT in place. Return `true` to consume the press.
|
|
74
|
+
*/
|
|
75
|
+
onDirection?: (el: HTMLElement, name: ButtonName) => boolean;
|
|
76
|
+
}
|
|
77
|
+
export interface SpatialNav {
|
|
78
|
+
/** Feed one discrete button (a `down` edge). No-op for non-nav names. */
|
|
79
|
+
handle(name: ButtonName): void;
|
|
80
|
+
/** Focus the first focusable (silent) — e.g. pre-select a primary CTA on arrival. */
|
|
81
|
+
focusFirst(): void;
|
|
82
|
+
/** Focus a specific item by index (clamped), centring it in view. */
|
|
83
|
+
focusIndex(index: number): void;
|
|
84
|
+
/**
|
|
85
|
+
* Focus a specific element (silent, no scroll) — for hover sync and precise initial selection
|
|
86
|
+
* (e.g. "land on Campaign"). No-op if `el` isn't a focusable in the active scope; `null` clears.
|
|
87
|
+
*/
|
|
88
|
+
focus(el: HTMLElement | null): void;
|
|
89
|
+
/** The currently-focused element (or `null`) — read it instead of tracking your own selection index. */
|
|
90
|
+
current(): HTMLElement | null;
|
|
91
|
+
/** Clear focus (removes the ring). */
|
|
92
|
+
clear(): void;
|
|
93
|
+
/** Enter a nested scope (a modal / sub-screen): scan `root` and trap focus until popped. */
|
|
94
|
+
pushScreen(root: ParentNode): void;
|
|
95
|
+
/** Leave the top scope, restoring the previous scope and its focus. */
|
|
96
|
+
popScreen(): void;
|
|
97
|
+
/** Tear down: unsubscribe the session and drop focus. */
|
|
98
|
+
dispose(): void;
|
|
99
|
+
}
|
|
100
|
+
export declare function createSpatialNav(opts?: SpatialNavOptions): SpatialNav;
|
|
101
|
+
//# sourceMappingURL=spatial-nav.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/** Tolerance (px) for "is this candidate actually in the pressed direction". */
|
|
2
|
+
const DIR_TOL = 4;
|
|
3
|
+
const NAV_RING_STYLE_ID = "rydr-nav-css";
|
|
4
|
+
function isEditable(el) {
|
|
5
|
+
const tag = el.tagName;
|
|
6
|
+
return tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT" || el.isContentEditable;
|
|
7
|
+
}
|
|
8
|
+
function injectRingCss() {
|
|
9
|
+
if (typeof document === "undefined" || document.getElementById(NAV_RING_STYLE_ID))
|
|
10
|
+
return;
|
|
11
|
+
const style = document.createElement("style");
|
|
12
|
+
style.id = NAV_RING_STYLE_ID;
|
|
13
|
+
// outline + box-shadow only — neither shifts layout, so geometry (getBoundingClientRect) stays true.
|
|
14
|
+
style.textContent = `[nav-focused]{outline:2px solid #4de3ff;outline-offset:2px;` +
|
|
15
|
+
`border-radius:inherit;box-shadow:0 0 0 4px rgba(77,227,255,0.25);` +
|
|
16
|
+
`transition:outline-color .12s,box-shadow .12s;}`;
|
|
17
|
+
document.head.appendChild(style);
|
|
18
|
+
}
|
|
19
|
+
/** Weight on the cross-axis gap between non-overlapping rects — keeps nav from jumping columns/rows. */
|
|
20
|
+
const CROSS_GAP_WEIGHT = 3;
|
|
21
|
+
/** Gentle pull toward the remembered lane centre (see `crossRef`), scaled down when rects overlap. */
|
|
22
|
+
const LANE_WEIGHT = 1;
|
|
23
|
+
function rectOf(el) {
|
|
24
|
+
const r = el.getBoundingClientRect();
|
|
25
|
+
return { left: r.left, right: r.right, top: r.top, bottom: r.bottom, cx: r.left + r.width / 2, cy: r.top + r.height / 2 };
|
|
26
|
+
}
|
|
27
|
+
/** Is `c` in direction `dir` from `r` (by centre, past a small tolerance)? */
|
|
28
|
+
function inDirection(r, c, dir) {
|
|
29
|
+
switch (dir) {
|
|
30
|
+
case "LEFT": return c.cx < r.cx - DIR_TOL;
|
|
31
|
+
case "RIGHT": return c.cx > r.cx + DIR_TOL;
|
|
32
|
+
case "UP": return c.cy < r.cy - DIR_TOL;
|
|
33
|
+
case "DOWN": return c.cy > r.cy + DIR_TOL;
|
|
34
|
+
default: return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Directional cost from `r` to candidate `c` (lower = better), or `null` if `c` isn't in `dir`.
|
|
39
|
+
* Edge-and-overlap based, NOT centre-to-centre: the primary term is the gap between the facing EDGES
|
|
40
|
+
* along the axis; a candidate whose cross-axis extent OVERLAPS the current one is strongly preferred
|
|
41
|
+
* (a real neighbour), and among overlapping/aligned candidates a gentle pull toward `crossRef` (the
|
|
42
|
+
* remembered lane) keeps a column/row straight across irregular grids. This handles wide heroes and
|
|
43
|
+
* mixed-size cells that centre distance gets wrong.
|
|
44
|
+
*/
|
|
45
|
+
function directionalCost(r, c, dir, crossRef) {
|
|
46
|
+
if (!inDirection(r, c, dir))
|
|
47
|
+
return null;
|
|
48
|
+
const vertical = dir === "UP" || dir === "DOWN";
|
|
49
|
+
if (vertical) {
|
|
50
|
+
const primary = Math.max(0, dir === "DOWN" ? c.top - r.bottom : r.top - c.bottom);
|
|
51
|
+
const overlap = Math.min(r.right, c.right) > Math.max(r.left, c.left);
|
|
52
|
+
const crossGap = overlap ? 0 : Math.max(r.left, c.left) - Math.min(r.right, c.right);
|
|
53
|
+
return primary + crossGap * CROSS_GAP_WEIGHT + Math.abs(c.cx - crossRef) * (overlap ? 0.25 : LANE_WEIGHT);
|
|
54
|
+
}
|
|
55
|
+
const primary = Math.max(0, dir === "RIGHT" ? c.left - r.right : r.left - c.right);
|
|
56
|
+
const overlap = Math.min(r.bottom, c.bottom) > Math.max(r.top, c.top);
|
|
57
|
+
const crossGap = overlap ? 0 : Math.max(r.top, c.top) - Math.min(r.bottom, c.bottom);
|
|
58
|
+
return primary + crossGap * CROSS_GAP_WEIGHT + Math.abs(c.cy - crossRef) * (overlap ? 0.25 : LANE_WEIGHT);
|
|
59
|
+
}
|
|
60
|
+
/** For wrap: the item furthest in the OPPOSITE direction (DOWN → topmost, LEFT → rightmost, …). */
|
|
61
|
+
function farthestOpposite(list, cur, dir) {
|
|
62
|
+
let best = null;
|
|
63
|
+
let bestV = -Infinity;
|
|
64
|
+
for (const el of list) {
|
|
65
|
+
if (el === cur)
|
|
66
|
+
continue;
|
|
67
|
+
const c = rectOf(el);
|
|
68
|
+
// Rank so the far edge scores highest: DOWN wraps up (prefer smallest cy → use -cy), etc.
|
|
69
|
+
const v = dir === "DOWN" ? -c.cy : dir === "UP" ? c.cy : dir === "RIGHT" ? -c.cx : c.cx;
|
|
70
|
+
if (v > bestV) {
|
|
71
|
+
bestV = v;
|
|
72
|
+
best = el;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return best;
|
|
76
|
+
}
|
|
77
|
+
export function createSpatialNav(opts = {}) {
|
|
78
|
+
const selector = opts.selector ?? "[data-nav]";
|
|
79
|
+
if (opts.ring !== false)
|
|
80
|
+
injectRingCss();
|
|
81
|
+
// Screen stack: each entry is a scope root + its remembered focused element. Top is active.
|
|
82
|
+
const stack = [
|
|
83
|
+
{ root: opts.root ?? (typeof document !== "undefined" ? document : null), current: null },
|
|
84
|
+
];
|
|
85
|
+
const top = () => stack[stack.length - 1];
|
|
86
|
+
// Lane memory: the cross-axis coordinate to preserve while stepping along one axis, so traversing
|
|
87
|
+
// rows/columns of uneven width keeps a straight column/row. Set on a move, reset on an axis change
|
|
88
|
+
// or any non-directional focus (seed / hover / pushScreen).
|
|
89
|
+
let desiredX = null;
|
|
90
|
+
let desiredY = null;
|
|
91
|
+
const resetLane = () => { desiredX = null; desiredY = null; };
|
|
92
|
+
// Focusable items in the active scope, skipping the not-rendered (display:none / detached — zero
|
|
93
|
+
// client rects) and disabled, so nav never lands on a hidden or dead control. `getClientRects`
|
|
94
|
+
// (not `offsetParent`) keeps position:fixed items eligible.
|
|
95
|
+
const items = () => Array.from(top().root.querySelectorAll(selector)).filter((el) => el.getClientRects().length > 0 && !el.disabled);
|
|
96
|
+
function setFocus(el, opt = {}) {
|
|
97
|
+
const scope = top();
|
|
98
|
+
if (scope.current === el)
|
|
99
|
+
return;
|
|
100
|
+
scope.current?.removeAttribute("nav-focused");
|
|
101
|
+
scope.current = el;
|
|
102
|
+
if (!el) {
|
|
103
|
+
opts.onFocusChange?.(null);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
el.setAttribute("nav-focused", "");
|
|
107
|
+
if (!opt.silent)
|
|
108
|
+
opts.cue?.("nav.move");
|
|
109
|
+
if (opt.scroll !== false)
|
|
110
|
+
el.scrollIntoView({ block: opt.scroll ?? "nearest", inline: "nearest" });
|
|
111
|
+
if (isEditable(el))
|
|
112
|
+
el.focus();
|
|
113
|
+
opts.onFocusChange?.(el);
|
|
114
|
+
}
|
|
115
|
+
function move(dir) {
|
|
116
|
+
const list = items();
|
|
117
|
+
if (list.length === 0)
|
|
118
|
+
return;
|
|
119
|
+
const cur = top().current;
|
|
120
|
+
// No focus yet (unseeded screen, or focus went stale across a re-render): enter the list from the
|
|
121
|
+
// edge the press comes FROM — UP/LEFT land on the last item (entering from below/right), the rest
|
|
122
|
+
// on the first. Screens normally seed focus on mount (focusFirst/focus), so this is the fallback,
|
|
123
|
+
// not the common path.
|
|
124
|
+
if (!cur || !list.includes(cur)) {
|
|
125
|
+
setFocus(dir === "UP" || dir === "LEFT" ? list[list.length - 1] : list[0]);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
// The focused item gets first refusal (e.g. a carousel consumes LEFT/RIGHT in place).
|
|
129
|
+
if (opts.onDirection?.(cur, dir))
|
|
130
|
+
return;
|
|
131
|
+
const from = rectOf(cur);
|
|
132
|
+
const vertical = dir === "UP" || dir === "DOWN";
|
|
133
|
+
// Score against the remembered lane, so a narrow row en route doesn't drag the column sideways.
|
|
134
|
+
const crossRef = vertical ? (desiredX ?? from.cx) : (desiredY ?? from.cy);
|
|
135
|
+
const rememberLane = () => {
|
|
136
|
+
if (vertical) {
|
|
137
|
+
desiredX = crossRef;
|
|
138
|
+
desiredY = null;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
desiredY = crossRef;
|
|
142
|
+
desiredX = null;
|
|
143
|
+
}
|
|
144
|
+
};
|
|
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;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (best) {
|
|
157
|
+
rememberLane();
|
|
158
|
+
setFocus(best);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
// No neighbour in that direction: wrap to the far side, or snap the page to the top on UP.
|
|
162
|
+
if (opts.wrap) {
|
|
163
|
+
const far = farthestOpposite(list, cur, dir);
|
|
164
|
+
if (far && far !== cur) {
|
|
165
|
+
rememberLane();
|
|
166
|
+
setFocus(far);
|
|
167
|
+
}
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (dir === "UP" && opts.edgeScrollTop && typeof window !== "undefined") {
|
|
171
|
+
window.scrollTo({ top: 0, behavior: "smooth" }); // nothing above — snap the page to the top
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function back() {
|
|
175
|
+
opts.cue?.("nav.back");
|
|
176
|
+
if (stack.length > 1) {
|
|
177
|
+
api.popScreen();
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
opts.onBack?.();
|
|
181
|
+
}
|
|
182
|
+
const api = {
|
|
183
|
+
handle(name) {
|
|
184
|
+
switch (name) {
|
|
185
|
+
case "UP":
|
|
186
|
+
case "DOWN":
|
|
187
|
+
case "LEFT":
|
|
188
|
+
case "RIGHT":
|
|
189
|
+
move(name);
|
|
190
|
+
return;
|
|
191
|
+
case "A": {
|
|
192
|
+
const el = top().current;
|
|
193
|
+
if (!el) {
|
|
194
|
+
const first = items()[0];
|
|
195
|
+
if (first)
|
|
196
|
+
setFocus(first);
|
|
197
|
+
return;
|
|
198
|
+
} // reveal, don't blind-activate
|
|
199
|
+
opts.cue?.("nav.confirm");
|
|
200
|
+
if (opts.onActivate)
|
|
201
|
+
opts.onActivate(el);
|
|
202
|
+
else
|
|
203
|
+
el.click();
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
case "B":
|
|
207
|
+
case "Z":
|
|
208
|
+
back();
|
|
209
|
+
return;
|
|
210
|
+
default:
|
|
211
|
+
return; // Y / LT / RT carry no nav meaning
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
focusFirst() {
|
|
215
|
+
const first = items()[0];
|
|
216
|
+
if (first) {
|
|
217
|
+
resetLane();
|
|
218
|
+
setFocus(first, { silent: true, scroll: false });
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
focusIndex(index) {
|
|
222
|
+
const list = items();
|
|
223
|
+
if (list.length === 0)
|
|
224
|
+
return;
|
|
225
|
+
const el = list[Math.max(0, Math.min(list.length - 1, index))];
|
|
226
|
+
resetLane();
|
|
227
|
+
setFocus(el, { silent: true, scroll: "center" });
|
|
228
|
+
},
|
|
229
|
+
focus(el) {
|
|
230
|
+
if (el === null) {
|
|
231
|
+
resetLane();
|
|
232
|
+
setFocus(null);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if (items().includes(el)) {
|
|
236
|
+
resetLane();
|
|
237
|
+
setFocus(el, { silent: true, scroll: false });
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
current() {
|
|
241
|
+
return top().current;
|
|
242
|
+
},
|
|
243
|
+
clear() {
|
|
244
|
+
setFocus(null);
|
|
245
|
+
},
|
|
246
|
+
pushScreen(root) {
|
|
247
|
+
top().current?.removeAttribute("nav-focused");
|
|
248
|
+
resetLane();
|
|
249
|
+
stack.push({ root, current: null });
|
|
250
|
+
},
|
|
251
|
+
popScreen() {
|
|
252
|
+
if (stack.length <= 1)
|
|
253
|
+
return;
|
|
254
|
+
top().current?.removeAttribute("nav-focused");
|
|
255
|
+
resetLane();
|
|
256
|
+
stack.pop();
|
|
257
|
+
top().current?.setAttribute("nav-focused", ""); // restore the ring on the scope we returned to
|
|
258
|
+
opts.onFocusChange?.(top().current);
|
|
259
|
+
},
|
|
260
|
+
dispose() {
|
|
261
|
+
unsub?.();
|
|
262
|
+
disposePointer();
|
|
263
|
+
for (const s of stack)
|
|
264
|
+
s.current?.removeAttribute("nav-focused");
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
// Auto-wire the session's down edges (default onButton already swallows held re-emits — menu-correct).
|
|
268
|
+
const unsub = opts.session?.onButton((e) => {
|
|
269
|
+
if (e.edge === "down")
|
|
270
|
+
api.handle(e.name);
|
|
271
|
+
});
|
|
272
|
+
// Pointer hover → focus, so mouse and controller share one focus state (opt-in). Uses `pointermove`,
|
|
273
|
+
// NOT `pointerover`: a controller/keyboard focus change can `scrollIntoView` and shift items under a
|
|
274
|
+
// STATIONARY mouse, which fires `pointerover` on whatever lands under the cursor and would yank focus
|
|
275
|
+
// back — a fight that looks like "press twice to move". `pointermove` fires only on REAL mouse
|
|
276
|
+
// movement, so a still mouse never hijacks controller nav; hover-to-focus resumes the moment the
|
|
277
|
+
// rider actually moves the mouse.
|
|
278
|
+
let disposePointer = () => { };
|
|
279
|
+
if (opts.pointer) {
|
|
280
|
+
const pointerRoot = opts.root ?? (typeof document !== "undefined" ? document : null);
|
|
281
|
+
const onPointerMove = (e) => {
|
|
282
|
+
const target = e.target;
|
|
283
|
+
if (!(target instanceof Element))
|
|
284
|
+
return;
|
|
285
|
+
const item = target.closest(selector);
|
|
286
|
+
// Skip when already focused — avoids an items() layout read on every mousemove over the item.
|
|
287
|
+
if (item && item !== top().current)
|
|
288
|
+
api.focus(item);
|
|
289
|
+
};
|
|
290
|
+
pointerRoot?.addEventListener("pointermove", onPointerMove);
|
|
291
|
+
disposePointer = () => pointerRoot?.removeEventListener("pointermove", onPointerMove);
|
|
292
|
+
}
|
|
293
|
+
return api;
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=spatial-nav.js.map
|