@rydr/game-sdk 8.4.0 → 8.5.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/dist/protocol/version.d.ts +1 -1
- package/dist/protocol/version.js +1 -1
- package/dist/ui/README.md +20 -11
- package/dist/ui/controller/combo-demo.d.ts +0 -3
- package/dist/ui/controller/combo-demo.d.ts.map +1 -1
- package/dist/ui/controller/combo-demo.js +7 -1
- package/dist/ui/controller/combo-demo.js.map +1 -1
- package/dist/ui/controller/control-spotlight.d.ts.map +1 -1
- package/dist/ui/controller/control-spotlight.js +8 -0
- package/dist/ui/controller/control-spotlight.js.map +1 -1
- package/dist/ui/controller/control-trainer.d.ts +3 -11
- package/dist/ui/controller/control-trainer.d.ts.map +1 -1
- package/dist/ui/controller/control-trainer.js +1 -1
- package/dist/ui/controller/control-trainer.js.map +1 -1
- package/dist/ui/controller/controller-map.d.ts +0 -3
- package/dist/ui/controller/controller-map.d.ts.map +1 -1
- package/dist/ui/controller/controller-map.js +0 -1
- package/dist/ui/controller/controller-map.js.map +1 -1
- package/dist/ui/controller/controller-pad.d.ts +35 -10
- package/dist/ui/controller/controller-pad.d.ts.map +1 -1
- package/dist/ui/controller/controller-pad.js +23 -8
- package/dist/ui/controller/controller-pad.js.map +1 -1
- package/dist/ui/controller/input-chip.d.ts +4 -26
- package/dist/ui/controller/input-chip.d.ts.map +1 -1
- package/dist/ui/controller/input-chip.js +107 -106
- package/dist/ui/controller/input-chip.js.map +1 -1
- package/dist/ui/controller/live-presses.d.ts +11 -0
- package/dist/ui/controller/live-presses.d.ts.map +1 -1
- package/dist/ui/controller/live-presses.js +3 -1
- package/dist/ui/controller/live-presses.js.map +1 -1
- package/dist/ui/controller/styles.js +81 -29
- package/dist/ui/controller/styles.js.map +1 -1
- package/dist/ui/controller/types.d.ts +2 -1
- package/dist/ui/controller/types.d.ts.map +1 -1
- package/dist/ui/controller/types.js.map +1 -1
- package/dist/ui/keycap.d.ts +19 -0
- package/dist/ui/keycap.d.ts.map +1 -1
- package/dist/ui/keycap.js +4 -1
- package/dist/ui/keycap.js.map +1 -1
- package/dist/ui/labeled-diamond.d.ts +12 -1
- package/dist/ui/labeled-diamond.d.ts.map +1 -1
- package/dist/ui/labeled-diamond.js +6 -3
- package/dist/ui/labeled-diamond.js.map +1 -1
- package/dist/ui/power-race.d.ts +84 -3
- package/dist/ui/power-race.d.ts.map +1 -1
- package/dist/ui/power-race.js +98 -41
- package/dist/ui/power-race.js.map +1 -1
- package/dist/ui/showcase/index.d.ts.map +1 -1
- package/dist/ui/showcase/index.js +23 -132
- package/dist/ui/showcase/index.js.map +1 -1
- package/dist/ui/styles.js +17 -5
- package/dist/ui/styles.js.map +1 -1
- package/package.json +2 -1
package/dist/ui/power-race.js
CHANGED
|
@@ -27,6 +27,18 @@
|
|
|
27
27
|
* Driving it: `start()`, then pump `setPower(w)` + `tick(dt)` every frame. The HUD self-resolves to
|
|
28
28
|
* `won` / `lost` when either bar crosses 100%; poll `getPhase()` or pass `onResolve`. Drive external
|
|
29
29
|
* VFX (a glow, a light) off `getProgress().charge`.
|
|
30
|
+
*
|
|
31
|
+
* ── Timings ────────────────────────────────────────────────────────────────────────────────────
|
|
32
|
+
* Three of them, all optional:
|
|
33
|
+
* · `introS` — the wind-up before the bars go live (default 2 s; `0`/`false` = live on frame 1).
|
|
34
|
+
* A widget the rider OPENED by pressing a button wants `introS: 0` — they already committed, and
|
|
35
|
+
* a wind-up leaves them pedalling into nothing. A widget that arrives at them (an incoming
|
|
36
|
+
* missile) wants the default: the wind-up IS the warning.
|
|
37
|
+
* · `durationS` — the race itself: the clock's fill time, and the work that fills the charge bar.
|
|
38
|
+
* · `hold` — what happens after it resolves: when the win/lose stamp lands (`stampDelayS`) and when
|
|
39
|
+
* the overlay hides itself (`hideAfterS`, or `false` to leave it up and hide it yourself).
|
|
40
|
+
* `setTarget()` re-sizes the effort target in place, so a rider retuning their FTP mid-ride doesn't
|
|
41
|
+
* cost you a rebuilt widget.
|
|
30
42
|
*/
|
|
31
43
|
const STYLE_ID = "rydr-power-race-styles";
|
|
32
44
|
const VARIANTS = ["twin-stacked", "twin-towers"];
|
|
@@ -39,12 +51,16 @@ const GRADES = [
|
|
|
39
51
|
{ min: 0, label: "CLEAN", color: "#9aa7c7" },
|
|
40
52
|
];
|
|
41
53
|
const gradeForPct = (pct) => GRADES.find((g) => pct >= g.min);
|
|
42
|
-
/** Intro sub-phase
|
|
54
|
+
/** Intro sub-phase weights (seconds at the default pace). `introS` scales all three together. */
|
|
43
55
|
const PRIMING_WARNING_S = 0.5;
|
|
44
56
|
const PRIMING_PROMPT_S = 1.0;
|
|
45
57
|
const PRIMING_BARS_S = 0.5;
|
|
46
|
-
/**
|
|
47
|
-
export const INTRO_TOTAL_S = PRIMING_WARNING_S + PRIMING_PROMPT_S + PRIMING_BARS_S; //
|
|
58
|
+
/** Default total intro duration in seconds — the default of `introS`, and what it scales. */
|
|
59
|
+
export const INTRO_TOTAL_S = PRIMING_WARNING_S + PRIMING_PROMPT_S + PRIMING_BARS_S; // 2.0
|
|
60
|
+
/** Default delay from resolving to the win/lose stamp landing (seconds). */
|
|
61
|
+
export const DEFAULT_STAMP_DELAY_S = 0.25;
|
|
62
|
+
/** Default delay from resolving to the overlay hiding itself (seconds). */
|
|
63
|
+
export const DEFAULT_HIDE_AFTER_S = 1.25;
|
|
48
64
|
/** The built-in "alert" skin — the proven Tower-Defense look. Default when no `theme` is passed. */
|
|
49
65
|
export const DEFAULT_POWER_RACE_THEME = {
|
|
50
66
|
deadline: "#ef4444",
|
|
@@ -63,23 +79,32 @@ const DEFAULT_TEXT = {
|
|
|
63
79
|
lose: "MISSED",
|
|
64
80
|
};
|
|
65
81
|
export function createPowerRace(opts = {}) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
82
|
+
let ftp = opts.ftp ?? 250;
|
|
83
|
+
let durationS = opts.durationS ?? 5;
|
|
84
|
+
let targetFtpPct = opts.targetFtpPct ?? 1.1;
|
|
69
85
|
let variant = opts.variant ?? "twin-stacked";
|
|
70
86
|
let scoreVariant = opts.scoreVariant ?? null;
|
|
71
87
|
const text = { ...DEFAULT_TEXT, ...(opts.text ?? {}) };
|
|
72
88
|
const theme = { ...DEFAULT_POWER_RACE_THEME, ...(opts.theme ?? {}) };
|
|
73
89
|
const onResolve = opts.onResolve;
|
|
74
90
|
const mode = opts.mode === "charge" ? "charge" : "race";
|
|
91
|
+
// Intro: one knob for all three sub-phases, so a game retimes the wind-up without re-choreographing
|
|
92
|
+
// it. The cumulative edges are precomputed — `tick` compares against them, not against a scale.
|
|
93
|
+
const introS = opts.introS === false ? 0 : Math.max(0, opts.introS ?? INTRO_TOTAL_S);
|
|
94
|
+
const introScale = introS / INTRO_TOTAL_S;
|
|
95
|
+
const warnEndS = PRIMING_WARNING_S * introScale;
|
|
96
|
+
const promptEndS = warnEndS + PRIMING_PROMPT_S * introScale;
|
|
97
|
+
// Resolution holds. `null` == "never" (the `false` the caller passed); a number is a delay in seconds.
|
|
98
|
+
const stampDelayS = opts.hold?.stampDelayS === false ? null : Math.max(0, opts.hold?.stampDelayS ?? DEFAULT_STAMP_DELAY_S);
|
|
99
|
+
const hideAfterS = opts.hold?.hideAfterS === false ? null : Math.max(0, opts.hold?.hideAfterS ?? DEFAULT_HIDE_AFTER_S);
|
|
75
100
|
ensureStyles();
|
|
76
101
|
if (!VARIANTS.includes(variant))
|
|
77
102
|
variant = "twin-stacked";
|
|
78
103
|
if (scoreVariant && !SCORE_VARIANTS.includes(scoreVariant))
|
|
79
104
|
scoreVariant = null;
|
|
80
|
-
|
|
105
|
+
let requiredJoules = targetFtpPct * ftp * durationS;
|
|
81
106
|
const root = document.createElement("div");
|
|
82
|
-
root.className = `rpr v-${variant} mode-${mode}${scoreVariant ? ` has-score place-${scoreVariant}` : ""}`;
|
|
107
|
+
root.className = `rpr v-${variant} mode-${mode}${introS <= 0 ? " no-intro" : ""}${scoreVariant ? ` has-score place-${scoreVariant}` : ""}`;
|
|
83
108
|
root.innerHTML = innerForVariant(variant);
|
|
84
109
|
// per-instance palette → CSS custom properties (cascades to every descendant)
|
|
85
110
|
root.style.setProperty("--rpr-deadline", theme.deadline);
|
|
@@ -114,7 +139,6 @@ export function createPowerRace(opts = {}) {
|
|
|
114
139
|
let accumulatedJoules = 0;
|
|
115
140
|
let lastPowerW = 0;
|
|
116
141
|
let lastStage = "idle";
|
|
117
|
-
let resolutionTimer = 0;
|
|
118
142
|
let stampRevealTimer = 0;
|
|
119
143
|
let hideTimer = 0;
|
|
120
144
|
let primingS = 0;
|
|
@@ -172,7 +196,13 @@ export function createPowerRace(opts = {}) {
|
|
|
172
196
|
root.classList.add("score-resolved");
|
|
173
197
|
root.classList.toggle("score-miss", isMiss);
|
|
174
198
|
}
|
|
175
|
-
|
|
199
|
+
/**
|
|
200
|
+
* Land an outcome: recolour, score it, then schedule the stamp and the auto-hide.
|
|
201
|
+
*
|
|
202
|
+
* `hideAfterOverrideS` is `undefined` for "use the configured hold" and `null` for "don't hide" —
|
|
203
|
+
* `showResolution` needs to say both, and a game that asked for no auto-hide must not get one.
|
|
204
|
+
*/
|
|
205
|
+
function applyOutcome(outcome, hideAfterOverrideS) {
|
|
176
206
|
phase = outcome;
|
|
177
207
|
root.classList.remove("racing", "won", "lost");
|
|
178
208
|
root.classList.add(outcome);
|
|
@@ -186,38 +216,58 @@ export function createPowerRace(opts = {}) {
|
|
|
186
216
|
stampEl.innerHTML = "";
|
|
187
217
|
root.classList.remove("stamp-revealed");
|
|
188
218
|
window.clearTimeout(stampRevealTimer);
|
|
219
|
+
stampRevealTimer = 0;
|
|
189
220
|
window.clearTimeout(hideTimer);
|
|
190
|
-
|
|
221
|
+
hideTimer = 0;
|
|
222
|
+
const revealStamp = () => {
|
|
191
223
|
stampEl.innerHTML = `<span class="text">${outcome === "won" ? text.win : text.lose}</span>`;
|
|
192
224
|
root.classList.add("stamp-revealed");
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
225
|
+
};
|
|
226
|
+
if (stampDelayS === 0)
|
|
227
|
+
revealStamp();
|
|
228
|
+
else if (stampDelayS !== null) {
|
|
229
|
+
stampRevealTimer = window.setTimeout(() => {
|
|
230
|
+
revealStamp();
|
|
231
|
+
stampRevealTimer = 0;
|
|
232
|
+
}, stampDelayS * 1000);
|
|
233
|
+
}
|
|
234
|
+
const hideAfter = hideAfterOverrideS === undefined ? hideAfterS : hideAfterOverrideS;
|
|
235
|
+
if (hideAfter !== null) {
|
|
236
|
+
hideTimer = window.setTimeout(() => {
|
|
237
|
+
root.classList.remove("show");
|
|
238
|
+
hideTimer = 0;
|
|
239
|
+
}, hideAfter * 1000);
|
|
240
|
+
}
|
|
199
241
|
onResolve?.(outcome);
|
|
200
242
|
}
|
|
201
243
|
return {
|
|
202
244
|
element: root,
|
|
203
245
|
start() {
|
|
204
|
-
window.clearTimeout(resolutionTimer);
|
|
205
|
-
resolutionTimer = 0;
|
|
206
246
|
window.clearTimeout(stampRevealTimer);
|
|
207
247
|
stampRevealTimer = 0;
|
|
208
248
|
window.clearTimeout(hideTimer);
|
|
209
249
|
hideTimer = 0;
|
|
210
|
-
phase = "priming-warning";
|
|
211
250
|
primingS = 0;
|
|
212
251
|
elapsedS = 0;
|
|
213
252
|
accumulatedJoules = 0;
|
|
214
253
|
lastPowerW = 0;
|
|
215
254
|
root.classList.remove("racing", "won", "lost", "stamp-revealed", "bars-open");
|
|
216
255
|
root.classList.add("show");
|
|
217
|
-
setPrimingClass("warning");
|
|
218
256
|
headingEl.textContent = text.heading;
|
|
219
257
|
promptEl.textContent = text.prompt;
|
|
220
258
|
stampEl.textContent = "";
|
|
259
|
+
if (introS <= 0) {
|
|
260
|
+
// No wind-up: straight into the race, so watts count from THIS frame. The priming classes are
|
|
261
|
+
// skipped outright rather than flipped three times in one frame, and `.no-intro` drops their
|
|
262
|
+
// slide/fade, so frame 1 already looks like the racing state instead of animating towards it.
|
|
263
|
+
phase = "racing";
|
|
264
|
+
setPrimingClass(null);
|
|
265
|
+
root.classList.add("bars-open", "racing");
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
phase = "priming-warning";
|
|
269
|
+
setPrimingClass("warning");
|
|
270
|
+
}
|
|
221
271
|
paint();
|
|
222
272
|
},
|
|
223
273
|
setPower(w) {
|
|
@@ -232,19 +282,32 @@ export function createPowerRace(opts = {}) {
|
|
|
232
282
|
charge: Math.min(1, accumulatedJoules / requiredJoules),
|
|
233
283
|
};
|
|
234
284
|
},
|
|
285
|
+
getTarget() {
|
|
286
|
+
return { ftp, durationS, targetFtpPct, requiredJoules };
|
|
287
|
+
},
|
|
288
|
+
setTarget(next) {
|
|
289
|
+
if (next.ftp != null && next.ftp > 0)
|
|
290
|
+
ftp = next.ftp;
|
|
291
|
+
if (next.durationS != null && next.durationS > 0)
|
|
292
|
+
durationS = next.durationS;
|
|
293
|
+
if (next.targetFtpPct != null && next.targetFtpPct > 0)
|
|
294
|
+
targetFtpPct = next.targetFtpPct;
|
|
295
|
+
requiredJoules = targetFtpPct * ftp * durationS;
|
|
296
|
+
paint();
|
|
297
|
+
},
|
|
235
298
|
tick(dt) {
|
|
236
299
|
if (phase === "priming-warning" || phase === "priming-prompt" || phase === "priming-bars") {
|
|
237
300
|
primingS += dt;
|
|
238
|
-
if (phase === "priming-warning" && primingS >=
|
|
301
|
+
if (phase === "priming-warning" && primingS >= warnEndS) {
|
|
239
302
|
phase = "priming-prompt";
|
|
240
303
|
setPrimingClass("prompt");
|
|
241
304
|
}
|
|
242
|
-
if (phase === "priming-prompt" && primingS >=
|
|
305
|
+
if (phase === "priming-prompt" && primingS >= promptEndS) {
|
|
243
306
|
phase = "priming-bars";
|
|
244
307
|
setPrimingClass("bars");
|
|
245
308
|
root.classList.add("bars-open");
|
|
246
309
|
}
|
|
247
|
-
if (phase === "priming-bars" && primingS >=
|
|
310
|
+
if (phase === "priming-bars" && primingS >= introS) {
|
|
248
311
|
phase = "racing";
|
|
249
312
|
setPrimingClass(null);
|
|
250
313
|
root.classList.add("racing");
|
|
@@ -276,24 +339,13 @@ export function createPowerRace(opts = {}) {
|
|
|
276
339
|
showResolution(outcome, opts2 = {}) {
|
|
277
340
|
if (outcome !== "won" && outcome !== "lost")
|
|
278
341
|
return;
|
|
279
|
-
|
|
342
|
+
// A caller-supplied hide time REPLACES the configured one — it used to be a second timer racing
|
|
343
|
+
// the built-in 1.25 s hide, which silently capped anything longer.
|
|
344
|
+
const override = opts2.durationS === false ? null : opts2.durationS != null && opts2.durationS > 0 ? opts2.durationS : undefined;
|
|
345
|
+
applyOutcome(outcome, override);
|
|
280
346
|
paint();
|
|
281
|
-
if (resolutionTimer) {
|
|
282
|
-
window.clearTimeout(resolutionTimer);
|
|
283
|
-
resolutionTimer = 0;
|
|
284
|
-
}
|
|
285
|
-
if (opts2.durationS != null && opts2.durationS > 0) {
|
|
286
|
-
resolutionTimer = window.setTimeout(() => {
|
|
287
|
-
root.classList.remove("show");
|
|
288
|
-
resolutionTimer = 0;
|
|
289
|
-
}, opts2.durationS * 1000);
|
|
290
|
-
}
|
|
291
347
|
},
|
|
292
348
|
reset() {
|
|
293
|
-
if (resolutionTimer) {
|
|
294
|
-
window.clearTimeout(resolutionTimer);
|
|
295
|
-
resolutionTimer = 0;
|
|
296
|
-
}
|
|
297
349
|
if (stampRevealTimer) {
|
|
298
350
|
window.clearTimeout(stampRevealTimer);
|
|
299
351
|
stampRevealTimer = 0;
|
|
@@ -313,8 +365,6 @@ export function createPowerRace(opts = {}) {
|
|
|
313
365
|
paint();
|
|
314
366
|
},
|
|
315
367
|
dispose() {
|
|
316
|
-
if (resolutionTimer)
|
|
317
|
-
window.clearTimeout(resolutionTimer);
|
|
318
368
|
if (stampRevealTimer)
|
|
319
369
|
window.clearTimeout(stampRevealTimer);
|
|
320
370
|
if (hideTimer)
|
|
@@ -651,6 +701,13 @@ const CSS = `
|
|
|
651
701
|
58% { transform: translateY(-50%) scale(0.92); }
|
|
652
702
|
100% { transform: translateY(-50%) scale(1.28); }
|
|
653
703
|
}
|
|
704
|
+
/* introS: 0 — no wind-up. The slide and the fade ARE the wind-up's choreography, so they go with it:
|
|
705
|
+
frame 1 has to read as the racing state, not as a 400 ms fade the rider pedals through having already
|
|
706
|
+
committed. Only the opacity cross-fade of the copy survives, which nothing has to wait for. */
|
|
707
|
+
.rpr.no-intro .rpr-stack,
|
|
708
|
+
.rpr.no-intro .rpr-towers { transition: none; }
|
|
709
|
+
.rpr.no-intro .rpr-heading,
|
|
710
|
+
.rpr.no-intro .rpr-prompt { transition: opacity 0.3s ease; }
|
|
654
711
|
/* charge mode — no rival: hide the deadline bar and calm the alarm framing. The single charge bar
|
|
655
712
|
stays centred by the flex/align layout it already lives in; only the effort bar remains. */
|
|
656
713
|
.rpr.mode-charge .rpr-deadline-bar { display: none; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"power-race.js","sourceRoot":"","sources":["../../src/ui/power-race.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"power-race.js","sourceRoot":"","sources":["../../src/ui/power-race.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/showcase/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAkDH,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAE7E,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/showcase/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAkDH,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAE7E,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AA6DpD,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,GAAE,iBAAsB,GAAG,UAAU,CAmuB3F"}
|
|
@@ -66,25 +66,6 @@ const PAD_FAMILIES = [
|
|
|
66
66
|
{ caption: "Switch Pro", glyphSet: "nintendo" },
|
|
67
67
|
{ caption: "Zwift Play / Ride", glyphSet: "zwift" },
|
|
68
68
|
];
|
|
69
|
-
/**
|
|
70
|
-
* The idle-pip legibility candidates — see the two "Idle pips" sections. Each entry is just a class the
|
|
71
|
-
* catalog puts on a wrapper; the actual tone/edge lives in BS_CSS under the same class, so choosing a
|
|
72
|
-
* winner means moving ONE block into `ui/styles.ts` (and `INACTIVE` in `keycap.ts` for the tone).
|
|
73
|
-
*/
|
|
74
|
-
const IDLE_DARK = [
|
|
75
|
-
{ cls: "d-rim", name: "D1 · Hairline rim", how: "same #3a424e face, 1.5px inner white rim" },
|
|
76
|
-
{ cls: "d-lift", name: "D2 · One step up", how: "#59626f — no edge, just a lighter steel" },
|
|
77
|
-
{ cls: "d-halo", name: "D3 · Outer halo", how: "darker #2f353e + a 1.5px ring OUTSIDE the pip" },
|
|
78
|
-
{ cls: "d-well", name: "D4 · Recessed well", how: "#262b33 + a bright top lip: reads as a hole" },
|
|
79
|
-
{ cls: "d-edge", name: "D5 · Bottom edge", how: "#3a424e + a lit lower lip + faint outer ring" },
|
|
80
|
-
];
|
|
81
|
-
const IDLE_LIGHT = [
|
|
82
|
-
{ cls: "l-ghost", name: "L1 · Ghost steel", how: "#7c8798 — mid-light, still clearly \u201coff\u201d" },
|
|
83
|
-
{ cls: "l-frost", name: "L2 · Frost", how: "#aab4c2 — light enough to read across a room" },
|
|
84
|
-
{ cls: "l-outline", name: "L3 · Outline only", how: "empty core, 2px white ring: a slot, not a key" },
|
|
85
|
-
{ cls: "l-chalk", name: "L4 · Chalk", how: "#d5dbe4 flat, no inner shadow, held at 85%" },
|
|
86
|
-
{ cls: "l-pearl", name: "L5 · Pearl + halo", how: "#b9c3d1 with a white halo: pops on any card" },
|
|
87
|
-
];
|
|
88
69
|
/** Mount the full UI catalog into `host`. Returns a handle whose `dispose()` tears it all down. */
|
|
89
70
|
export function mountUiShowcase(host, opts = {}) {
|
|
90
71
|
const session = opts.session;
|
|
@@ -198,17 +179,6 @@ export function mountUiShowcase(host, opts = {}) {
|
|
|
198
179
|
el(c, "div", "bs-cap", caption);
|
|
199
180
|
return stage;
|
|
200
181
|
};
|
|
201
|
-
// One idle-pip candidate: the same mono diamond (with a coloured one beside it, since the idle tone has
|
|
202
|
-
// to survive both) under the variant's class, captioned with what it actually does.
|
|
203
|
-
const idleCell = (grid, v) => {
|
|
204
|
-
const c = el(grid, "div", "bs-cell");
|
|
205
|
-
const stage = el(c, "div", "bs-stage");
|
|
206
|
-
const row = el(stage, "div", `bs-idle ${v.cls}`);
|
|
207
|
-
row.appendChild(createKeycap("DIAMOND_DOWN", { variant: "full", animate: false }).el);
|
|
208
|
-
row.appendChild(createKeycap("DIAMOND_RIGHT", { variant: "full", colored: true, animate: false }).el);
|
|
209
|
-
el(c, "div", "bs-cap", v.name);
|
|
210
|
-
el(c, "div", "bs-cap sub", v.how);
|
|
211
|
-
};
|
|
212
182
|
// a generic "icon + name" node — the consumer's OWN content fitted inside a card's fixed slot
|
|
213
183
|
const iconLabel = (name, color) => {
|
|
214
184
|
const { canvas, c } = makeCanvas(20, 20);
|
|
@@ -268,23 +238,6 @@ export function mountUiShowcase(host, opts = {}) {
|
|
|
268
238
|
cooldowns.push({ kc: cd, total: 6 });
|
|
269
239
|
cell(grid, "Cooldown (on the key)", cd.el);
|
|
270
240
|
}
|
|
271
|
-
// --- idle-pip legibility studies ---------------------------------------
|
|
272
|
-
// The full diamond's three IDLE siblings are #3a424e, which on a dark card is very nearly the card:
|
|
273
|
-
// the active key reads, the other three barely do, so the diamond stops teaching "there are four of
|
|
274
|
-
// these". Ten candidates, in two families — pick one and it becomes the component's own tone (the
|
|
275
|
-
// overrides live in BS_CSS and are catalog-only until then).
|
|
276
|
-
g.section("Idle pips — DARK candidates (still dark, but legible)", "The three idle siblings keep a dark face; the contrast comes from an EDGE (a rim, a top highlight, a halo) or a small step up in tone — never from turning them light. Compare against \u201cA/B/Y/Z diamond\u201d above, which is today\u2019s #3a424e.");
|
|
277
|
-
{
|
|
278
|
-
const grid = el(g.list, "div", "bs-grid");
|
|
279
|
-
for (const v of IDLE_DARK)
|
|
280
|
-
idleCell(grid, v);
|
|
281
|
-
}
|
|
282
|
-
g.section("Idle pips — LIGHT candidates (light pips on the dark surface)", "The other direction: the idle siblings go light, so the whole cluster sits ON the dark card as one bright object with the white active key as its loud member. Reads at distance; costs some of the \u201cthese three are off\u201d quietness.");
|
|
283
|
-
{
|
|
284
|
-
const grid = el(g.list, "div", "bs-grid");
|
|
285
|
-
for (const v of IDLE_LIGHT)
|
|
286
|
-
idleCell(grid, v);
|
|
287
|
-
}
|
|
288
241
|
// --- Directional buttons -----------------------------------------------
|
|
289
242
|
g.section("Directional buttons", "The same state machine as the face buttons (solo/full, pulse, pressed, cooldown). A white chevron on a steel pip, not the bright key hues.");
|
|
290
243
|
{
|
|
@@ -365,14 +318,6 @@ export function mountUiShowcase(host, opts = {}) {
|
|
|
365
318
|
cooldowns.push({ kc: dia.cards.DIAMOND_RIGHT.keycap, total: 6 });
|
|
366
319
|
dia.cards.DIAMOND_LEFT.setDisabled(true);
|
|
367
320
|
}
|
|
368
|
-
g.section("Move diamond (HUD) — mono", "The same diamond in mono: white keys with a dark letter instead of the bright hues. Same states.");
|
|
369
|
-
{
|
|
370
|
-
const stage = el(g.list, "div", "bs-diamond");
|
|
371
|
-
const dia = mountActionDiamond(stage, { press, colored: false, cards: { DIAMOND_UP: { label: "Spark" }, DIAMOND_DOWN: { label: "Quake" }, DIAMOND_LEFT: {}, DIAMOND_RIGHT: { label: "Blaze" } } });
|
|
372
|
-
dia.cards.DIAMOND_DOWN.setActive(true);
|
|
373
|
-
cooldowns.push({ kc: dia.cards.DIAMOND_RIGHT.keycap, total: 6 });
|
|
374
|
-
dia.cards.DIAMOND_LEFT.setDisabled(true);
|
|
375
|
-
}
|
|
376
321
|
// --- the labeled diamond -----------------------------------------------
|
|
377
322
|
g.section("Labeled diamond", "A central A/B/Y/Z pip cluster, any number of buttons active at once, each label radiating from its key (Y above, B below, Z left, A right) and seated in the dark card. Toggle disables the Y action.");
|
|
378
323
|
{
|
|
@@ -388,27 +333,6 @@ export function mountUiShowcase(host, opts = {}) {
|
|
|
388
333
|
btn.addEventListener("click", () => { disabled = !disabled; sync(); });
|
|
389
334
|
sync();
|
|
390
335
|
}
|
|
391
|
-
// --- the solo labeled diamond ------------------------------------------
|
|
392
|
-
g.section("Labeled diamond — solo (one active)", "The labeled diamond's radiating card label, but with exactly ONE active button at a time — a big lit pip, the other three the small blank grey circles of the A/B/Y/Z diamond. Colour and mono. Press ‘Next’ to move the active button (setActive).");
|
|
393
|
-
{
|
|
394
|
-
const grid = el(g.list, "div", "bs-grid");
|
|
395
|
-
const LABELS = { DIAMOND_UP: "Inspect", DIAMOND_DOWN: "Equip", DIAMOND_LEFT: "Inventory", DIAMOND_RIGHT: "Back" };
|
|
396
|
-
const order = ["DIAMOND_DOWN", "DIAMOND_UP", "DIAMOND_LEFT", "DIAMOND_RIGHT"];
|
|
397
|
-
for (const colored of [true, false]) {
|
|
398
|
-
const cellWrap = el(grid, "div", "bs-cell ld-cell");
|
|
399
|
-
const stage = el(cellWrap, "div", "bs-ld");
|
|
400
|
-
const sld = mountSoloLabeledDiamond(stage, { inline: true, colored, animate: false, active: "DIAMOND_DOWN", label: LABELS.DIAMOND_DOWN });
|
|
401
|
-
let i = 0;
|
|
402
|
-
const btn = el(cellWrap, "button", "bs-btn");
|
|
403
|
-
btn.textContent = "Next button";
|
|
404
|
-
btn.addEventListener("click", () => {
|
|
405
|
-
i = (i + 1) % order.length;
|
|
406
|
-
const b = order[i];
|
|
407
|
-
sld.setActive(b, LABELS[b] ?? "");
|
|
408
|
-
});
|
|
409
|
-
el(cellWrap, "div", "bs-cap", colored ? "Colour" : "Mono");
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
336
|
// --- solo labeled diamond: label placement -----------------------------
|
|
413
337
|
g.section("Solo diamond — label placement", "The label side is set with labelPos (default ‘auto’ = the active button's side), independent of which button is active. Change the active button AND the label side separately: the tuck adapts to the pip under the label — deeper for a small grey circle, shallower for the big active pip — so the letter is never covered.");
|
|
414
338
|
{
|
|
@@ -491,7 +415,7 @@ export function mountUiShowcase(host, opts = {}) {
|
|
|
491
415
|
}
|
|
492
416
|
}
|
|
493
417
|
// --- the power-race overlay -------------------------------------------
|
|
494
|
-
g.section("Power race (overlay)", "The timed ∫power-vs-deadline race: charge bar (your effort) vs a deadline bar (the clock). First to 100% wins. It's a full-screen overlay — launch one and it plays out, fed by real watts (or a ~1.3×FTP sim without a session). Recolour with `theme`, relabel with `text
|
|
418
|
+
g.section("Power race (overlay)", "The timed ∫power-vs-deadline race: charge bar (your effort) vs a deadline bar (the clock). First to 100% wins. It's a full-screen overlay — launch one and it plays out, fed by real watts (or a ~1.3×FTP sim without a session). Recolour with `theme`, relabel with `text`, retime with `introS` (the wind-up) and `hold` (the stamp + auto-hide).");
|
|
495
419
|
{
|
|
496
420
|
const row = el(g.list, "div", "bs-btnrow");
|
|
497
421
|
const mk = (label, o) => {
|
|
@@ -504,6 +428,13 @@ export function mountUiShowcase(host, opts = {}) {
|
|
|
504
428
|
mode: "charge",
|
|
505
429
|
text: { heading: "CHARGING", prompt: "PUSH TO CHARGE", chargeLabel: "CHARGE", win: "CHARGED" },
|
|
506
430
|
});
|
|
431
|
+
// A widget the rider OPENED: no wind-up, and the stamp lands on the spot rather than a beat late.
|
|
432
|
+
mk("No intro (rider opened it)", {
|
|
433
|
+
mode: "charge",
|
|
434
|
+
introS: 0,
|
|
435
|
+
hold: { stampDelayS: 0 },
|
|
436
|
+
text: { heading: "PICK THEM UP", prompt: "PUSH TO REVIVE", chargeLabel: "REVIVE", win: "ON THEIR FEET" },
|
|
437
|
+
});
|
|
507
438
|
mk("Themed + relabelled", {
|
|
508
439
|
variant: "twin-stacked",
|
|
509
440
|
theme: { deadline: "#c084fc", deadlineDeep: "#4c1d95", charge: "#22d3ee", chargeDeep: "#0e7490", win: "#22c55e", winDeep: "#166534" },
|
|
@@ -565,8 +496,8 @@ export function mountUiShowcase(host, opts = {}) {
|
|
|
565
496
|
pads.push(mountControllerPad(joyHost, { press, brand: "joycon", glyphSet: "nintendo", size: "md", allowShellOwned: true }));
|
|
566
497
|
padCell("Joy-Con pair (brand: \"joycon\")", joyHost);
|
|
567
498
|
}
|
|
568
|
-
// --- joystick pictograms:
|
|
569
|
-
g.section("Joystick pictograms", "The sticks are the hard case: a CLICK is motion along the viewing axis, which a plan view physically cannot draw, and a lettered “L3” chip says nothing about what to do with your thumb. So they're pictures
|
|
499
|
+
// --- joystick pictograms: one convention, self-demonstrating --------------
|
|
500
|
+
g.section("Joystick pictograms", "The sticks are the hard case: a CLICK is motion along the viewing axis, which a plan view physically cannot draw, and a lettered “L3” chip says nothing about what to do with your thumb. So they're pictures — and all three are the SAME picture, a well and a cap, told apart by what the cap DOES. “Any direction” runs the cap round its circle; a direction pushes it that way and brings it back on a loop (parked at full deflection it would read as “already done”); a CLICK keeps it centred and shrinks it under a real press, exactly like the cap on the live pad above — click your stick and watch. There are no direction arrows any more: at chip size an arrow is stroked in the same colour as the well rim, so it either fuses into it or eats the room the well needed. `prefers-reduced-motion` gets the still frame instead of the loop.");
|
|
570
501
|
{
|
|
571
502
|
const table = el(g.list, "div", "bs-sticks");
|
|
572
503
|
const CASES = [
|
|
@@ -575,23 +506,21 @@ export function mountUiShowcase(host, opts = {}) {
|
|
|
575
506
|
{ token: "LSTICK:up", caption: "Push up" },
|
|
576
507
|
{ token: "LSTICK_PRESS", caption: "CLICK the stick" },
|
|
577
508
|
];
|
|
578
|
-
// Header row, then one row
|
|
509
|
+
// Header row, then the one row of chips under it.
|
|
579
510
|
el(table, "div", "bs-sticks-h", "");
|
|
580
511
|
for (const c of CASES)
|
|
581
512
|
el(table, "div", "bs-sticks-h", c.caption);
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
zoom.appendChild(big.el);
|
|
594
|
-
}
|
|
513
|
+
el(table, "div", "bs-sticks-name", "profile (default)");
|
|
514
|
+
for (const c of CASES) {
|
|
515
|
+
const cellEl = el(table, "div", "bs-sticks-cell");
|
|
516
|
+
// Two sizes: the real chip size, and 2× so the motion is legible while you judge it.
|
|
517
|
+
const chip = createInputChip(c.token, { press });
|
|
518
|
+
stickChips.push(chip);
|
|
519
|
+
cellEl.appendChild(chip.el);
|
|
520
|
+
const big = createInputChip(c.token, { press });
|
|
521
|
+
stickChips.push(big);
|
|
522
|
+
const zoom = el(cellEl, "div", "bs-sticks-zoom");
|
|
523
|
+
zoom.appendChild(big.el);
|
|
595
524
|
}
|
|
596
525
|
}
|
|
597
526
|
// --- STATIC VIEW: the controller map ----------------------------------
|
|
@@ -684,7 +613,7 @@ export function mountUiShowcase(host, opts = {}) {
|
|
|
684
613
|
});
|
|
685
614
|
}
|
|
686
615
|
// --- GUIDED LESSON: the interactive trainer ---------------------------
|
|
687
|
-
g.section("Guided lesson (interactive)", "One concept, two linked halves, ONE shared controller underneath — the case that named it being the trainer resistance. Each step walks three states: whitish + pulsing = “do this”, accent + pulse stops = “you're doing it”, green + ✓ = done. The prompt ALTERNATES between the two halves and builds each combination up one control at a time — the stick click lights first and STAYS lit while the shoulder joins it, then the other half takes its turn, and it loops.
|
|
616
|
+
g.section("Guided lesson (interactive)", "One concept, two linked halves, ONE shared controller underneath — the case that named it being the trainer resistance. Each step walks three states: whitish + pulsing = “do this”, accent + pulse stops = “you're doing it”, green + ✓ = done. The prompt ALTERNATES between the two halves and builds each combination up one control at a time — the stick click lights first and STAYS lit while the shoulder joins it, then the other half takes its turn, and it loops. The STICK CLICK is the one prompt that moves: a raised white cap would be pixel-identical to a hinted round button and say nothing about what to do with your thumb, so it performs the click instead — sinking and shrinking on a loop, onto exactly the frame the “Controller (live)” pad lands on when you really click your stick, and the chip in the card overhead clicks with it at the same rate. Click it for real and the same picture goes blue. A step is DONE the moment its whole combination is held — holding all of it *is* doing it — and blue still shows up where it means something, between the first control of a combination and the last. Finish both and `onComplete` fires (a host would close its modal). NOTE: the shoulders are shell-owned and never reach a game — this section drives them with a stand-in merged with your own session, so latch the buttons below (or hold C + W / X) for the lesson, while any other button you press still shows on the pad (in the accent: here green is reserved for “that step is finished”).");
|
|
688
617
|
{
|
|
689
618
|
const stage = el(g.list, "div", "bs-demo");
|
|
690
619
|
const status = el(g.list, "div", "bs-cap", "");
|
|
@@ -865,44 +794,6 @@ const BS_CSS = `
|
|
|
865
794
|
/* 2x, so the shape is judgeable while the real 38px chip sits beside it for the honest size */
|
|
866
795
|
.bs-sticks-zoom { transform: scale(2); transform-origin: center; width: 38px; height: 38px;
|
|
867
796
|
display: flex; align-items: center; justify-content: center; margin: 0 12px; }
|
|
868
|
-
/* ── idle-pip legibility candidates (the two "Idle pips" sections) ─────────────
|
|
869
|
-
Every rule here targets ONLY the three idle siblings of a full diamond; the active key is untouched.
|
|
870
|
-
"!important" is required and not laziness: makePip writes the idle tone as an INLINE "--c" on the pip,
|
|
871
|
-
which a stylesheet cannot outrank. When one of these wins, it moves into ui/styles.ts (and its tone
|
|
872
|
-
into INACTIVE in keycap.ts) and the !important goes away with it. */
|
|
873
|
-
.bs-idle { display: flex; align-items: flex-end; gap: 1.4rem; }
|
|
874
|
-
/* D1 — the face stays exactly as today; a rim draws the circle instead. */
|
|
875
|
-
.bs-idle.d-rim .rydr-ui-pip:not(.active) {
|
|
876
|
-
box-shadow: inset 0 0 0 1.5px rgba(255,255,255,0.5), inset 0 1px 2px rgba(0,0,0,0.5) !important; }
|
|
877
|
-
/* D2 — no edge at all, only tone: the cheapest fix, and the one that changes the look least. */
|
|
878
|
-
.bs-idle.d-lift .rydr-ui-pip:not(.active) { --c: #59626f !important; }
|
|
879
|
-
/* D3 — the ring sits OUTSIDE, so the pip itself can go darker than today and still be found. */
|
|
880
|
-
.bs-idle.d-halo .rydr-ui-pip:not(.active) {
|
|
881
|
-
--c: #2f353e !important;
|
|
882
|
-
box-shadow: 0 0 0 1.5px rgba(255,255,255,0.34), inset 0 1px 2px rgba(0,0,0,0.55) !important; }
|
|
883
|
-
/* D4 — a bright top lip on a near-black face: the sibling reads as an empty socket, not a dim button. */
|
|
884
|
-
.bs-idle.d-well .rydr-ui-pip:not(.active) {
|
|
885
|
-
--c: #262b33 !important;
|
|
886
|
-
box-shadow: inset 0 1.5px 0 rgba(255,255,255,0.55), inset 0 -1px 2px rgba(0,0,0,0.6) !important; }
|
|
887
|
-
/* D5 — lit from below instead, which keeps the pressed-in feel while outlining the shape. */
|
|
888
|
-
.bs-idle.d-edge .rydr-ui-pip:not(.active) {
|
|
889
|
-
box-shadow: inset 0 -1.5px 0 rgba(255,255,255,0.42), 0 0 0 1px rgba(255,255,255,0.2),
|
|
890
|
-
inset 0 1px 2px rgba(0,0,0,0.5) !important; }
|
|
891
|
-
/* L1–L5 — the light family. The active key is already white in mono, so these trade "three dark
|
|
892
|
-
siblings" for "one cluster", and the active pip has to carry the difference by size + lift alone. */
|
|
893
|
-
.bs-idle.l-ghost .rydr-ui-pip:not(.active) { --c: #7c8798 !important; }
|
|
894
|
-
.bs-idle.l-frost .rydr-ui-pip:not(.active) { --c: #aab4c2 !important; }
|
|
895
|
-
.bs-idle.l-outline .rydr-ui-pip:not(.active) {
|
|
896
|
-
background: rgba(255,255,255,0.06) !important;
|
|
897
|
-
box-shadow: inset 0 0 0 2px rgba(255,255,255,0.72) !important; }
|
|
898
|
-
.bs-idle.l-chalk .rydr-ui-pip:not(.active) {
|
|
899
|
-
--c: #d5dbe4 !important; opacity: 0.85;
|
|
900
|
-
background: #d5dbe4 !important; box-shadow: 0 1px 0 rgba(0,0,0,0.35) !important; }
|
|
901
|
-
.bs-idle.l-pearl .rydr-ui-pip:not(.active) {
|
|
902
|
-
--c: #b9c3d1 !important;
|
|
903
|
-
box-shadow: 0 0 0 1.5px rgba(255,255,255,0.28), 0 0 8px rgba(255,255,255,0.18),
|
|
904
|
-
inset 0 1px 2px rgba(0,0,0,0.35) !important; }
|
|
905
|
-
.bs-cap.sub { font-weight: 600; opacity: 0.5; margin-top: -0.5rem; }
|
|
906
797
|
/* the map and the demo get full-width stages: the map needs room for two callout columns beside the
|
|
907
798
|
pad, and both are the components' own layout — the catalog only provides the space. */
|
|
908
799
|
/* the marker stage: a positioned, clipping box standing in for a game's own play area — a marker is
|