@rydr/game-sdk 8.4.0 → 8.6.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.
Files changed (69) hide show
  1. package/dist/nav/README.md +42 -0
  2. package/dist/nav/index.d.ts +12 -0
  3. package/dist/nav/index.d.ts.map +1 -1
  4. package/dist/nav/index.js +11 -0
  5. package/dist/nav/index.js.map +1 -1
  6. package/dist/nav/stick-nav.d.ts +114 -0
  7. package/dist/nav/stick-nav.d.ts.map +1 -0
  8. package/dist/nav/stick-nav.js +153 -0
  9. package/dist/nav/stick-nav.js.map +1 -0
  10. package/dist/protocol/version.d.ts +1 -1
  11. package/dist/protocol/version.js +1 -1
  12. package/dist/ui/README.md +34 -14
  13. package/dist/ui/controller/combo-demo.d.ts +0 -3
  14. package/dist/ui/controller/combo-demo.d.ts.map +1 -1
  15. package/dist/ui/controller/combo-demo.js +7 -1
  16. package/dist/ui/controller/combo-demo.js.map +1 -1
  17. package/dist/ui/controller/control-spotlight.d.ts.map +1 -1
  18. package/dist/ui/controller/control-spotlight.js +8 -0
  19. package/dist/ui/controller/control-spotlight.js.map +1 -1
  20. package/dist/ui/controller/control-trainer.d.ts +3 -11
  21. package/dist/ui/controller/control-trainer.d.ts.map +1 -1
  22. package/dist/ui/controller/control-trainer.js +1 -1
  23. package/dist/ui/controller/control-trainer.js.map +1 -1
  24. package/dist/ui/controller/controller-map.d.ts +0 -3
  25. package/dist/ui/controller/controller-map.d.ts.map +1 -1
  26. package/dist/ui/controller/controller-map.js +0 -1
  27. package/dist/ui/controller/controller-map.js.map +1 -1
  28. package/dist/ui/controller/controller-pad.d.ts +35 -10
  29. package/dist/ui/controller/controller-pad.d.ts.map +1 -1
  30. package/dist/ui/controller/controller-pad.js +23 -8
  31. package/dist/ui/controller/controller-pad.js.map +1 -1
  32. package/dist/ui/controller/input-chip.d.ts +4 -26
  33. package/dist/ui/controller/input-chip.d.ts.map +1 -1
  34. package/dist/ui/controller/input-chip.js +107 -106
  35. package/dist/ui/controller/input-chip.js.map +1 -1
  36. package/dist/ui/controller/live-presses.d.ts +11 -0
  37. package/dist/ui/controller/live-presses.d.ts.map +1 -1
  38. package/dist/ui/controller/live-presses.js +3 -1
  39. package/dist/ui/controller/live-presses.js.map +1 -1
  40. package/dist/ui/controller/styles.js +81 -29
  41. package/dist/ui/controller/styles.js.map +1 -1
  42. package/dist/ui/controller/types.d.ts +2 -1
  43. package/dist/ui/controller/types.d.ts.map +1 -1
  44. package/dist/ui/controller/types.js.map +1 -1
  45. package/dist/ui/keycap.d.ts +19 -0
  46. package/dist/ui/keycap.d.ts.map +1 -1
  47. package/dist/ui/keycap.js +4 -1
  48. package/dist/ui/keycap.js.map +1 -1
  49. package/dist/ui/labeled-diamond.d.ts +12 -1
  50. package/dist/ui/labeled-diamond.d.ts.map +1 -1
  51. package/dist/ui/labeled-diamond.js +6 -3
  52. package/dist/ui/labeled-diamond.js.map +1 -1
  53. package/dist/ui/option-menu.d.ts +45 -3
  54. package/dist/ui/option-menu.d.ts.map +1 -1
  55. package/dist/ui/option-menu.js +151 -7
  56. package/dist/ui/option-menu.js.map +1 -1
  57. package/dist/ui/power-race.d.ts +84 -3
  58. package/dist/ui/power-race.d.ts.map +1 -1
  59. package/dist/ui/power-race.js +98 -41
  60. package/dist/ui/power-race.js.map +1 -1
  61. package/dist/ui/showcase/index.d.ts.map +1 -1
  62. package/dist/ui/showcase/index.js +23 -132
  63. package/dist/ui/showcase/index.js.map +1 -1
  64. package/dist/ui/styles.js +17 -5
  65. package/dist/ui/styles.js.map +1 -1
  66. package/dist/voiceover-editor/index.d.ts.map +1 -1
  67. package/dist/voiceover-editor/index.js +8 -0
  68. package/dist/voiceover-editor/index.js.map +1 -1
  69. package/package.json +2 -1
@@ -131,3 +131,45 @@ const scroll = createScrollNav({
131
131
 
132
132
  A press at the top/bottom edge is a silent no-op (no false cue). Smooth scroll is used unless
133
133
  `prefers-reduced-motion` is set. See `scroll-nav.ts` for the full option list.
134
+
135
+ ## Navigating with the stick — `createStickNav`
136
+
137
+ Both engines above speak discrete `UP` / `DOWN` / `LEFT` / `RIGHT` presses. An analog stick is not
138
+ that: it's a direction and a distance. `createStickNav` is the converter, and it lives here — beside
139
+ the menu — on purpose.
140
+
141
+ **Why it isn't done in the device layer.** Thresholding each axis on its own fires *two* directions on
142
+ a diagonal (push top-right, the highlight jumps twice), and once the vector has been thrown away
143
+ nobody downstream can work out which one the rider meant. Which direction a push *means* is a menu
144
+ question, not a hardware fact. So the engine keeps the vector, picks the single axis the stick is
145
+ pushed furthest along, and holds at most one direction at a time.
146
+
147
+ It also auto-repeats, which a faked D-pad structurally cannot: a held stick emits no new samples, so a
148
+ synthesized press steps once and then sits there. Here a held direction steps, pauses
149
+ (`STICK_NAV_REPEAT_DELAY_MS`, 400 ms), then repeats at `STICK_NAV_REPEAT_MS` (125 ms ≈ 8/s).
150
+
151
+ ```ts
152
+ import { createSpatialNav, createStickNav } from "@rydr/game-sdk/nav";
153
+
154
+ const nav = createSpatialNav({ session, root: document.body });
155
+ const stickNav = createStickNav({
156
+ session, // polls session.stick("LSTICK") each frame
157
+ onDirection: (dir) => nav.handle(dir), // one direction per push
158
+ });
159
+ ```
160
+
161
+ `createStickNav(options) → { sample, axis, current, release, dispose }`
162
+
163
+ - `sample(x, y)` — feed a full stick position (right/up = `+1`) when you're not passing `session`.
164
+ - `axis(name, value)` — feed one canonical axis (`LX`/`LY`); the other keeps its last value. For
165
+ consumers whose analog stream arrives per-axis, like the platform shell's.
166
+ - `current()` — the direction currently held, or `null`.
167
+ - `release()` — force the stick to centre (no emit). Call it when you stop owning input, so a held
168
+ stick can't fire into whatever takes over.
169
+ - `dispose()` — stop polling, clear timers.
170
+
171
+ Tuning is exported so a consumer can match its own feel: `STICK_NAV_ON` (0.6) is the deflection that
172
+ counts as a press, `STICK_NAV_OFF` (0.4) the one it releases below (hysteresis, so a stick resting on
173
+ the threshold can't chatter), and `STICK_NAV_DOMINANCE` (1.2) how much the other axis must beat the
174
+ held one by to take over mid-push — which is what stops a thumb parked on the 45° line from
175
+ 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"}
@@ -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"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Deflection at which a push becomes a direction press. Measured RADIALLY (the vector's length), not
3
+ * per-axis — a per-axis test is what makes a diagonal read as two presses, since both components clear
4
+ * the bar at once.
5
+ */
6
+ export const STICK_NAV_ON = 0.6;
7
+ /**
8
+ * Deflection the stick must fall back below before the held direction releases. Below {@link
9
+ * STICK_NAV_ON} on purpose (hysteresis): a stick resting near the threshold would otherwise chatter
10
+ * press/release for as long as the rider held it there.
11
+ */
12
+ export const STICK_NAV_OFF = 0.4;
13
+ /**
14
+ * How much the other axis must BEAT the held one by before the direction switches mid-push (e.g.
15
+ * rolling from up-right round to right without recentring). A bare `>` comparison would flicker
16
+ * between two directions for a stick parked on the 45° line, which is exactly where a thumb naturally
17
+ * rests on a diagonal; the margin makes the current direction win ties and near-ties.
18
+ */
19
+ export const STICK_NAV_DOMINANCE = 1.2;
20
+ /** Pause after the first step before a held stick starts repeating (ms) — long enough that a deliberate
21
+ * single step never turns into two. */
22
+ export const STICK_NAV_REPEAT_DELAY_MS = 400;
23
+ /** Interval between repeats while the stick is held (ms) — ~8 steps/second. */
24
+ export const STICK_NAV_REPEAT_MS = 125;
25
+ /** The two axes each stick is composed of, so {@link StickNav.axis} knows which samples are its own. */
26
+ const STICK_AXES = {
27
+ LSTICK: { x: "LX", y: "LY" },
28
+ RSTICK: { x: "RX", y: "RY" },
29
+ };
30
+ export function createStickNav(opts) {
31
+ const stickName = opts.stick ?? "LSTICK";
32
+ const axes = STICK_AXES[stickName];
33
+ const on = opts.on ?? STICK_NAV_ON;
34
+ const off = opts.off ?? STICK_NAV_OFF;
35
+ const dominance = opts.dominance ?? STICK_NAV_DOMINANCE;
36
+ const repeatDelayMs = opts.repeatDelayMs ?? STICK_NAV_REPEAT_DELAY_MS;
37
+ const repeatMs = opts.repeatMs ?? STICK_NAV_REPEAT_MS;
38
+ const repeats = opts.repeat ?? true;
39
+ let x = 0;
40
+ let y = 0;
41
+ let held = null;
42
+ let timer = null;
43
+ let raf = 0;
44
+ let disposed = false;
45
+ function clearTimer() {
46
+ if (timer !== null)
47
+ clearTimeout(timer);
48
+ timer = null;
49
+ }
50
+ /**
51
+ * Which direction this vector means. Compares the two components' MAGNITUDES — the axis the stick is
52
+ * pushed furthest along wins, which is the same rule the phone controller's drag pad uses, so every
53
+ * transport agrees. `bias` is applied to the currently-held axis so it keeps the direction through a
54
+ * tie (see {@link STICK_NAV_DOMINANCE}).
55
+ */
56
+ function resolve(bias) {
57
+ let horizontal = Math.abs(x);
58
+ let vertical = Math.abs(y);
59
+ if (held === "LEFT" || held === "RIGHT")
60
+ horizontal *= bias;
61
+ else if (held === "UP" || held === "DOWN")
62
+ vertical *= bias;
63
+ if (horizontal >= vertical)
64
+ return x > 0 ? "RIGHT" : "LEFT";
65
+ return y > 0 ? "UP" : "DOWN";
66
+ }
67
+ function emit(dir) {
68
+ held = dir;
69
+ opts.cue?.("nav.move");
70
+ opts.onDirection(dir);
71
+ if (!repeats)
72
+ return;
73
+ // Timer-driven, deliberately: a stick held still produces no further samples, so repeat can never
74
+ // ride the sample stream. Re-armed at the faster rate after the initial pause.
75
+ clearTimer();
76
+ timer = setTimeout(function step() {
77
+ if (disposed || held === null)
78
+ return;
79
+ opts.cue?.("nav.move");
80
+ opts.onDirection(held);
81
+ timer = setTimeout(step, repeatMs);
82
+ }, repeatDelayMs);
83
+ }
84
+ function evaluate() {
85
+ const magnitude = Math.hypot(x, y);
86
+ if (held === null) {
87
+ if (magnitude >= on)
88
+ emit(resolve(1));
89
+ return;
90
+ }
91
+ if (magnitude < off) {
92
+ // Released. No `up` edge goes out: a menu direction is a discrete step, not a hold — the repeat
93
+ // timer is the only thing that cared, and it stops here.
94
+ held = null;
95
+ clearTimer();
96
+ return;
97
+ }
98
+ // Still pushed. Only a CLEARLY dominant other axis takes the direction over, and when it does it
99
+ // steps immediately and starts its own pause — a deliberate roll from one direction to another
100
+ // should feel like a fresh press, not land mid-repeat.
101
+ const next = resolve(dominance);
102
+ if (next !== held)
103
+ emit(next);
104
+ }
105
+ const api = {
106
+ sample(nextX, nextY) {
107
+ x = nextX;
108
+ y = nextY;
109
+ evaluate();
110
+ },
111
+ axis(name, value) {
112
+ if (name === axes.x)
113
+ x = value;
114
+ else if (name === axes.y)
115
+ y = value;
116
+ else
117
+ return; // the other stick — not ours to read
118
+ evaluate();
119
+ },
120
+ current() {
121
+ return held;
122
+ },
123
+ release() {
124
+ x = 0;
125
+ y = 0;
126
+ held = null;
127
+ clearTimer();
128
+ },
129
+ dispose() {
130
+ disposed = true;
131
+ held = null;
132
+ clearTimer();
133
+ if (raf)
134
+ cancelAnimationFrame(raf);
135
+ raf = 0;
136
+ },
137
+ };
138
+ // Polled source: re-read every frame. Guarded on `requestAnimationFrame` so the engine stays
139
+ // importable server-side (and in tests) — a fed source needs no frame loop at all.
140
+ if (opts.session && typeof requestAnimationFrame === "function") {
141
+ const source = opts.session;
142
+ const tick = () => {
143
+ if (disposed)
144
+ return;
145
+ const v = source.stick(stickName);
146
+ api.sample(v.x, v.y);
147
+ raf = requestAnimationFrame(tick);
148
+ };
149
+ raf = requestAnimationFrame(tick);
150
+ }
151
+ return api;
152
+ }
153
+ //# sourceMappingURL=stick-nav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stick-nav.js","sourceRoot":"","sources":["../../src/nav/stick-nav.ts"],"names":[],"mappings":"AAqCA;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC;wCACwC;AACxC,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE7C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAuDvC,wGAAwG;AACxG,MAAM,UAAU,GAAoD;IAClE,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;IAC5B,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;CAC7B,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAqB;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC;IACzC,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,YAAY,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,aAAa,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,mBAAmB,CAAC;IACxD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,yBAAyB,CAAC;IACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,mBAAmB,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IAEpC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,IAAI,GAA6B,IAAI,CAAC;IAC1C,IAAI,KAAK,GAAyC,IAAI,CAAC;IACvD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,SAAS,UAAU;QACjB,IAAI,KAAK,KAAK,IAAI;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACxC,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,SAAS,OAAO,CAAC,IAAY;QAC3B,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO;YAAE,UAAU,IAAI,IAAI,CAAC;aACvD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM;YAAE,QAAQ,IAAI,IAAI,CAAC;QAC5D,IAAI,UAAU,IAAI,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,SAAS,IAAI,CAAC,GAAsB;QAClC,IAAI,GAAG,GAAG,CAAC;QACX,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,kGAAkG;QAClG,+EAA+E;QAC/E,UAAU,EAAE,CAAC;QACb,KAAK,GAAG,UAAU,CAAC,SAAS,IAAI;YAC9B,IAAI,QAAQ,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO;YACtC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC,EAAE,aAAa,CAAC,CAAC;IACpB,CAAC;IAED,SAAS,QAAQ;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,SAAS,IAAI,EAAE;gBAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QACD,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;YACpB,gGAAgG;YAChG,yDAAyD;YACzD,IAAI,GAAG,IAAI,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,iGAAiG;QACjG,+FAA+F;QAC/F,uDAAuD;QACvD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,IAAI,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,GAAG,GAAa;QACpB,MAAM,CAAC,KAAa,EAAE,KAAa;YACjC,CAAC,GAAG,KAAK,CAAC;YACV,CAAC,GAAG,KAAK,CAAC;YACV,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,IAAI,CAAC,IAAc,EAAE,KAAa;YAChC,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;gBAAE,CAAC,GAAG,KAAK,CAAC;iBAC1B,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;gBAAE,CAAC,GAAG,KAAK,CAAC;;gBAC/B,OAAO,CAAC,qCAAqC;YAClD,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,OAAO;YACL,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,CAAC,CAAC;YACN,IAAI,GAAG,IAAI,CAAC;YACZ,UAAU,EAAE,CAAC;QACf,CAAC;QACD,OAAO;YACL,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,GAAG,IAAI,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,IAAI,GAAG;gBAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACnC,GAAG,GAAG,CAAC,CAAC;QACV,CAAC;KACF,CAAC;IAEF,6FAA6F;IAC7F,mFAAmF;IACnF,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,qBAAqB,KAAK,UAAU,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAS,EAAE;YACtB,IAAI,QAAQ;gBAAE,OAAO;YACrB,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAClC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC;QACF,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -9,5 +9,5 @@
9
9
  export declare const RYDR_PROTOCOL_VERSION: 30;
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 = "8.4.0";
12
+ export declare const RYDR_SDK_VERSION = "8.6.0";
13
13
  //# sourceMappingURL=version.d.ts.map
@@ -176,5 +176,5 @@
176
176
  export const RYDR_PROTOCOL_VERSION = 30;
177
177
  /** Semver of this SDK build. Sent in the handshake for telemetry/debugging.
178
178
  * (Bumped to 2.0.0 by `npm version major` on release — see CHANGELOG [Unreleased].) */
179
- export const RYDR_SDK_VERSION = "8.4.0";
179
+ export const RYDR_SDK_VERSION = "8.6.0";
180
180
  //# sourceMappingURL=version.js.map
package/dist/ui/README.md CHANGED
@@ -48,12 +48,12 @@ feed its `{x, y, onScreen}` into `setScreenPos`/`setVisible` — don't compute p
48
48
  | `mountChoiceCard(host, opts)` | fn | A player choice menu: prompt + highlighted option list (▲▼ move, A confirm). |
49
49
  | `mountRarityCard(host, opts)` / `buildRarityCard(opts)` | fn | A generic rarity-tinted item/creature card. |
50
50
  | `createActionMarker(host, opts)` | fn | **"There is something to do THERE"** — a card pinned to a point in the world (you `place(x, y)` it every frame with the point projected to screen), the keycap joining it once the rider is close enough (`setNear`), and a caret clamping it to the border with an arrow while the point is off screen. Two independent axes: `tone` is MOTION (`hint` still · `action` breathing · `urgent` hammering), `color` is SUBJECT (`red`/`danger`, `green`/`success`, `cyan`/`accent`, … — see `MARKER_COLORS`). |
51
- | `createPowerRace(opts)` | fn | A timed **power-vs-deadline race** overlay — the "push NOW or lose it" beat. A charge bar (∫power dt) races a clock; first to 100% wins. `start()` then `setPower(w)`+`tick(dt)` per frame; `won`/`lost` via `onResolve`. Recolour with `theme`, relabel with `text`. |
51
+ | `createPowerRace(opts)` | fn | A timed **power-vs-deadline race** overlay — the "push NOW or lose it" beat. A charge bar (∫power dt) races a clock; first to 100% wins. `start()` then `setPower(w)`+`tick(dt)` per frame; `won`/`lost` via `onResolve`. Recolour with `theme`, relabel with `text`. **Timings:** `introS` is the wind-up before the bars go live (default 2s — pass `0` for a widget the rider OPENED by pressing a button, so watts count from frame 1), `durationS` the race itself, `hold: { stampDelayS, hideAfterS }` what happens after it resolves (either can be `false`). `setTarget({ ftp })` re-sizes the effort target in place — no rebuild when a rider retunes their FTP mid-ride. |
52
52
  | `mountHeatVignette(host, opts)` | fn | **Screen-edge heat vignette alone** — the peripheral amber→orange→red glow that escalates with heat. Take this when your game draws its own heat bar. `setHeat(heat01, locked)` per frame. |
53
53
  | `mountOverheatGlitch(host, opts)` | fn | **Lockout glitch overlay alone** — one-shot RGB chromatic burst on entry, then scanlines + red noise for the lockout. `setLocked(bool)` per frame. |
54
54
  | `mountOverheatHudBar(host, opts)` | fn | **The whole overheat package**: centred inferno bar + label + COOLING DOWN countdown, composing the vignette and glitch above. One `update(heat01, locked, lockoutRemaining)` per frame. |
55
55
  | `createButtonKeycap(button, opts)` | fn | A keycap for the buttons that are neither a face letter nor a direction, drawn as the pad draws them: `OPTIONS` → a round pip with the pad's ICON (`☰` on Xbox/DualSense, `+` on Switch); `LT`/`RT` and the stick clicks → a text pill ("LT"/"L2"/"LS"), since those are printed with a word. |
56
- | `mountOptionMenu(host, opts)` | fn | **The in-game menu**, opened by the game's own `OPTIONS` button: game name big in YOUR font, a free `Resume` row + your own rows, each able to advertise its in-game `shortcut`. Takes the controller over while up; leaves the trainer alone. See below. |
56
+ | `mountOptionMenu(host, opts)` | fn | **The in-game menu**, opened by the game's own `OPTIONS` button: game name big in YOUR font, a free `Resume` row + your own rows, each able to advertise its in-game `shortcut` or be a stepper the rider turns with `LEFT`/`RIGHT`. Takes the controller over while up; leaves the trainer alone. See below. |
57
57
  | `mountControllerPad(host, opts)` | fn | **The rider's controller, drawn live** — buttons light while held, stick caps follow the real axes. Pass `press: session`. |
58
58
  | `mountControllerMap(host, opts)` | fn | **The controls screen** — that pad flanked by action callouts, each joined by a line to every button its combination names. The card prints the ACTION only; the line says which control. Takes a declarative `ControlAction[]`. |
59
59
  | `mountComboDemo(host, opts)` | fn | **"Do this" animation** — loops the combination one action requires: buttons sink in, the stick swings, release, repeat. |
@@ -61,13 +61,12 @@ feed its `{x, y, onScreen}` into `setScreenPos`/`setVisible` — don't compute p
61
61
  | `mountControlTrainer(host, opts)` | fn | **Guided lesson** — a title, one panel per step side by side, one shared controller below. Watches the rider: white "do this" → blue "doing it" → green ✓. Fires `onComplete` when every step is done. |
62
62
  | `createComboStrip(action, opts)` | fn | Just the chip row for one action (`[L2] + [✕]`), for embedding in your own layout. |
63
63
  | `createInputChip(token, opts)` | fn | One control's pictogram, for embedding in your own layout. Delegates to `createKeycap` / `createDpadKeycap` / `createButtonKeycap` for the buttons, and draws its own stick pictograms. The atom the two views are built from. |
64
- | `DEFAULT_STICK_STYLE` | const | The joystick drawing convention the kit uses (`"profile"`). Override per-call with `stickStyle`. |
65
64
  | `injectCss()` | fn | Force the `.rydr-ui-*` CSS into `<head>` early (components call it for you). |
66
65
 
67
66
  Types: `DiamondButton` (`"DIAMOND_UP"\|"DIAMOND_DOWN"\|"DIAMOND_LEFT"\|"DIAMOND_RIGHT"`), `DirButton`, `KeycapVariant` (`"full"\|"solo"`),
68
67
  `ButtonSource`, `Keycap`, `Card`, `ActionCard`, `ButtonPrompt`, `DialogueCard`, `ChoiceCard`,
69
68
  `LabeledDiamond`, `ActionDiamond`, `Rarity`, `RarityCard`, `OptionMenu`, `OptionMenuItem`, `OptionMenuOptions`,
70
- `ControlAction`, `ComboToken`, `StickDir`, `StickPictogramStyle`, `PadInputSource`, `PadBrandKey`, `PadPart`, `PadLayout`,
69
+ `ControlAction`, `ComboToken`, `StickDir`, `PadInputSource`, `PadBrandKey`, `PadPart`, `PadLayout`,
71
70
  `ControllerPad`, `ControllerMap`, `ComboDemo`, `InputChip`, `ComboStrip`,
72
71
  `ActionMarker`, `ActionMarkerOptions`, `ActionMarkerTone`, `ActionMarkerColor`, `ActionMarkerRole`
73
72
  (+ the `MARKER_COLORS` / `MARKER_ROLE_COLORS` tables).
@@ -91,14 +90,25 @@ const menu = mountOptionMenu(document.body, {
91
90
  onClose: () => { paused = false },
92
91
  items: [
93
92
  { label: "Restart", shortcut: "DIAMOND_UP", onSelect: () => restart() },
93
+ { label: "Difficulty", value: difficulty, onStep: (d) => cycleDifficulty(d) }, // a stepper
94
94
  { label: "Back to menu", onSelect: () => router.go("/") },
95
95
  ],
96
96
  });
97
97
  ```
98
98
 
99
99
  `Resume` is prepended free, so the shortest useful menu passes no `items` at all. Rows also take
100
- `hint` (a second line), `disabled`, `danger` (destructive tint) and `keepOpen`. Drive it by hand with
101
- `open()`/`close()`/`toggle()`/`setItems()`, or `handleButton(name)` if your host routes input itself.
100
+ `disabled`, `danger` (destructive tint), `keepOpen` and `hint` (a second line **discouraged**: a row
101
+ is read from a few feet away mid-ride, so if the label needs a sentence under it, fix the label). Drive
102
+ it by hand with `open()`/`close()`/`toggle()`/`setItems()`, or `handleButton(name)` if your host routes
103
+ input itself.
104
+
105
+ **A row can be a dial instead of an action.** Give it a `value` and an `onStep(delta)` and `LEFT`/`RIGHT`
106
+ change it in place: the value is drawn on the right between `‹ ›` arrows (clickable too), the menu stays
107
+ open, the ring stays put, and `onSelect` is never called — so a pure stepper needs no `onSelect` and is
108
+ drawn with no confirm keycap. Pass `canStepDown: false` / `canStepUp: false` at the ends of a range and
109
+ the spent arrow goes inert. **From `onStep`, re-publish the list with the new value via `setItems`** —
110
+ a same-shape list is patched in place rather than rebuilt, so the value changes without replaying the
111
+ entrance animation and a rider can hold `RIGHT` through the whole range.
102
112
 
103
113
  **It renders in the game's font.** The title and every row inherit the host's `font-family` — set the
104
114
  `font` option or the `--rydr-option-font` custom property to force one. The keycaps keep their own RYDR
@@ -186,13 +196,16 @@ Notes worth knowing:
186
196
  - **Devices differ.** A Zwift Play has no joysticks and no triggers, so they aren't drawn at all. A
187
197
  phone exposes only the confirm/back pair — the protocol can't tell us which buttons a device has, so
188
198
  pass `available: [...]` if your game knows, and don't gate a required flow behind a rare control.
189
- - **The joysticks are pictures, not letters.** `LSTICK` draws a well ringed by four arrows (move any
190
- way), `LSTICK:left` slides the cap that way with one arrow, and `LSTICK_PRESS` draws a **side view** of
191
- the stick being pushed down because a click is motion straight at the viewer, which a top-down
192
- drawing cannot show, and because "L3" tells a rider nothing about what to do with their thumb (the
193
- brand letter is still in the chip's tooltip). Three conventions exist via `stickStyle`: `"profile"`
194
- (the default use it), `"topdown"`, `"glyph"`. Every *button* shape comes from the keycap factories, so
195
- a trigger or OPTIONS reads identically in a legend and in an in-game prompt.
199
+ - **The joysticks are pictures, not letters** and all three are the SAME picture, a well and a cap,
200
+ told apart by what the cap DOES. `LSTICK` runs the cap around its travel circle (move any way),
201
+ `LSTICK:left` pushes it left and back on a loop (parked at full deflection it would read as "already
202
+ done"), and `LSTICK_PRESS` keeps it centred and shrinks it under a real press the live pad's own
203
+ click, because pressing a stick is motion straight at the viewer. No direction arrows: at chip size an
204
+ arrow is stroked in the same colour as the well rim, so it fuses into it or eats the well's room. "L3"
205
+ tells a rider nothing about what to do with their thumb, so the brand letter lives in the chip's
206
+ tooltip. `prefers-reduced-motion` gets a still frame instead of the loop. Every *button* shape comes
207
+ from the keycap factories, so a trigger or OPTIONS reads identically in a legend and in an in-game
208
+ prompt.
196
209
  - Tuned for up to **5 callouts per side**; past that it warns rather than dropping one.
197
210
  - Live catalog: `npm run showcase` in the SDK repo, or the platform's `/game-ui` route.
198
211
 
@@ -269,7 +282,14 @@ mountControlTrainer(modalBody, {
269
282
  Each step walks three states, on both its chips and the shared pad: **whitish + pulsing** ("do this"),
270
283
  **accent, pulse stops** ("you're doing it"), **green + ✓** ("done"). The prompt shows **one step at a
271
284
  time, alternating**, and builds each combination **cumulatively** — the stick click lights, stays lit, and
272
- the shoulder joins it a beat later; then the other half takes its turn, and it loops. **The two surfaces speak different languages.** The
285
+ the shoulder joins it a beat later; then the other half takes its turn, and it loops. **A hinted stick CLICK
286
+ performs the click** rather than sitting there white: a raised white cap is pixel-identical to a hinted round
287
+ button and says nothing about what to do with a thumb, so it sinks and shrinks on a loop, onto exactly the
288
+ frame a real click lands on (`--pad-click-depth` / `--pad-click-scale`, one definition per surface, shared by
289
+ the press and the loop). The chip in the panel clicks with it, at the same rate — and when the rider actually
290
+ clicks, that chip's "you're doing it" state drives the same pressed look real input drives. It's the click's
291
+ twin of a hinted *direction* sweeping out and back. Under `prefers-reduced-motion` both park on the clicked
292
+ frame, since the sink is the instruction, not decoration. **The two surfaces speak different languages.** The
273
293
  **pad** is physical — white = *press this*, blue = *you're pressing it*, and **never green**; white and blue
274
294
  have already taught the rider that colour there means *now*, so progress as a third colour reads as "and this
275
295
  one too". The **panels** are logical — grey = to do, green + ✓ = done, and that stays for the rest of the
@@ -32,7 +32,6 @@
32
32
  */
33
33
  import type { GlyphSet } from "../../protocol/glyphs.js";
34
34
  import { type ControllerPad, type PadInputSource } from "./controller-pad.js";
35
- import type { StickPictogramStyle } from "./input-chip.js";
36
35
  import type { ControlAction } from "./tokens.js";
37
36
  import type { PadBrandKey } from "./types.js";
38
37
  export interface ComboDemoOptions {
@@ -63,8 +62,6 @@ export interface ComboDemoOptions {
63
62
  labels?: boolean;
64
63
  colored?: boolean;
65
64
  accent?: string;
66
- /** Drawing convention for the joystick pictograms in the chips. See {@link StickPictogramStyle}. */
67
- stickStyle?: StickPictogramStyle;
68
65
  /** Playback rate. `1` = normal, `0.5` = half speed for a slow walkthrough. */
69
66
  speed?: number;
70
67
  /** Called each time the loop completes a full cycle. */
@@ -1 +1 @@
1
- {"version":3,"file":"combo-demo.d.ts","sourceRoot":"","sources":["../../../src/ui/controller/combo-demo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAI3D,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,MAAM,EAAE,aAAa,CAAC;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oGAAoG;IACpG,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACvC,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAqBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,GAAG,SAAS,CA2RnF"}
1
+ {"version":3,"file":"combo-demo.d.ts","sourceRoot":"","sources":["../../../src/ui/controller/combo-demo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIlG,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,MAAM,EAAE,aAAa,CAAC;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACvC,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAqBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,GAAG,SAAS,CAgSnF"}
@@ -98,7 +98,6 @@ export function mountComboDemo(host, opts) {
98
98
  strip = createComboStrip(action, {
99
99
  glyphSet: opts.glyphSet ?? pad?.glyphSet() ?? undefined,
100
100
  colored: opts.colored,
101
- stickStyle: opts.stickStyle,
102
101
  });
103
102
  stripCell.textContent = "";
104
103
  stripCell.appendChild(strip.el);
@@ -136,6 +135,13 @@ export function mountComboDemo(host, opts) {
136
135
  driver?.setMeter(meter, 1);
137
136
  },
138
137
  setStick: (side, x, y, state) => pad?.driver().setStick(side, x, y, state === "done" ? "done" : "on"),
138
+ // Same as a part the animation doesn't own: a stick outside the combination is this pass's to put
139
+ // back, or the cap sits where the rider left it for as long as the demo runs.
140
+ restStick: (side) => {
141
+ if (channels.some((ch) => ch.stick?.side === side))
142
+ return; // the animation recentres its own
143
+ pad?.driver().setStick(side, 0, 0, "off");
144
+ },
139
145
  release: (part) => {
140
146
  if (channels.some((ch) => ch.part === part))
141
147
  return; // the animation repaints it next frame
@@ -1 +1 @@
1
- {"version":3,"file":"combo-demo.js","sourceRoot":"","sources":["../../../src/ui/controller/combo-demo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"combo-demo.js","sourceRoot":"","sources":["../../../src/ui/controller/combo-demo.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"control-spotlight.d.ts","sourceRoot":"","sources":["../../../src/ui/controller/control-spotlight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAclG,OAAO,EAA8B,KAAK,aAAa,EAAoB,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAc,KAAK,WAAW,EAAgB,MAAM,YAAY,CAAC;AAExE,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAOxC,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;IACvE;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,8FAA8F;IAC9F,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACzC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2FAA2F;IAC3F,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,WAAW,CAAC,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9D,wFAAwF;IACxF,WAAW,CAAC,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9D,sCAAsC;IACtC,OAAO,CAAC,IAAI,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI,CAAC;IACvD,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;IACd,8FAA8F;IAC9F,SAAS,IAAI,SAAS,OAAO,EAAE,CAAC;IAChC,OAAO,IAAI,IAAI,CAAC;CACjB;AAeD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,gBAAgB,CA2dxG"}
1
+ {"version":3,"file":"control-spotlight.d.ts","sourceRoot":"","sources":["../../../src/ui/controller/control-spotlight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAclG,OAAO,EAA8B,KAAK,aAAa,EAAoB,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAc,KAAK,WAAW,EAAgB,MAAM,YAAY,CAAC;AAExE,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAOxC,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;IACvE;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,8FAA8F;IAC9F,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACzC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2FAA2F;IAC3F,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,WAAW,CAAC,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9D,wFAAwF;IACxF,WAAW,CAAC,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9D,sCAAsC;IACtC,OAAO,CAAC,IAAI,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI,CAAC;IACvD,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;IACd,8FAA8F;IAC9F,SAAS,IAAI,SAAS,OAAO,EAAE,CAAC;IAChC,OAAO,IAAI,IAAI,CAAC;CACjB;AAeD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,gBAAgB,CAoexG"}