@diffenderfer-games/hub 2.0.0-next.5 → 2.0.0-next.6

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 (170) hide show
  1. package/CHANGELOG.md +54 -19
  2. package/README.md +3 -6
  3. package/dist/auto.d.ts +5 -5
  4. package/dist/auto.js +2 -2
  5. package/dist/avatar-pixi.d.ts +147 -0
  6. package/dist/avatar-pixi.d.ts.map +1 -0
  7. package/dist/avatar-pixi.js +280 -0
  8. package/dist/avatar-pixi.js.map +1 -0
  9. package/dist/avatar-svg.d.ts +4 -0
  10. package/dist/avatar-svg.js +5 -0
  11. package/dist/avatar-three.d.ts +69 -0
  12. package/dist/avatar-three.d.ts.map +1 -0
  13. package/dist/avatar-three.js +49 -0
  14. package/dist/avatar-three.js.map +1 -0
  15. package/dist/avatar.d.ts +7 -0
  16. package/dist/avatar.js +487 -0
  17. package/dist/avatar.js.map +1 -0
  18. package/dist/daily.d.ts +2 -2
  19. package/dist/doctor/cli.mjs +1 -1
  20. package/dist/index.d.ts +5 -5
  21. package/dist/index.js +2 -2
  22. package/dist/input.d.ts +2 -2
  23. package/dist/shared/animator.d.ts +104 -0
  24. package/dist/shared/animator.d.ts.map +1 -0
  25. package/dist/shared/art.js +1804 -0
  26. package/dist/shared/art.js.map +1 -0
  27. package/dist/shared/atlas.d.ts +134 -0
  28. package/dist/shared/atlas.d.ts.map +1 -0
  29. package/dist/shared/avatar.d.ts +117 -0
  30. package/dist/shared/avatar.d.ts.map +1 -0
  31. package/dist/shared/bridge.js +13 -5
  32. package/dist/shared/bridge.js.map +1 -1
  33. package/dist/shared/client-version.gen.js +1 -1
  34. package/dist/shared/daily.d.ts +129 -18
  35. package/dist/shared/daily.d.ts.map +1 -1
  36. package/dist/shared/daily.js +120 -26
  37. package/dist/shared/daily.js.map +1 -1
  38. package/dist/shared/defineProperty.js +39 -0
  39. package/dist/shared/describe.d.ts +32 -0
  40. package/dist/shared/describe.d.ts.map +1 -0
  41. package/dist/shared/describe.js +101 -0
  42. package/dist/shared/describe.js.map +1 -0
  43. package/dist/shared/globals.js +1 -39
  44. package/dist/shared/globals.js.map +1 -1
  45. package/dist/shared/index.d.ts +503 -14
  46. package/dist/shared/index.d.ts.map +1 -1
  47. package/dist/shared/input.d.ts +31 -13
  48. package/dist/shared/input.d.ts.map +1 -1
  49. package/dist/shared/input.js +40 -2
  50. package/dist/shared/input.js.map +1 -1
  51. package/dist/shared/json-guards.js +48 -0
  52. package/dist/shared/json-guards.js.map +1 -0
  53. package/dist/shared/live-canvas.js +62 -0
  54. package/dist/shared/live-canvas.js.map +1 -0
  55. package/dist/shared/mp.js +1 -1
  56. package/dist/shared/overlays.js +800 -0
  57. package/dist/shared/overlays.js.map +1 -0
  58. package/dist/shared/page-stack.js +2 -1
  59. package/dist/shared/page-stack.js.map +1 -1
  60. package/dist/shared/pose-key.js +249 -0
  61. package/dist/shared/pose-key.js.map +1 -0
  62. package/dist/shared/race.js +1 -1
  63. package/dist/shared/rooms.js +1 -1
  64. package/dist/shared/scene.d.ts +90 -0
  65. package/dist/shared/scene.d.ts.map +1 -0
  66. package/dist/shared/social.d.ts +55 -4
  67. package/dist/shared/social.d.ts.map +1 -1
  68. package/dist/shared/src.js +2020 -144
  69. package/dist/shared/src.js.map +1 -1
  70. package/dist/shared/svg-markup.js +1860 -0
  71. package/dist/shared/svg-markup.js.map +1 -0
  72. package/dist/shared/svg.js +27 -0
  73. package/dist/shared/svg.js.map +1 -0
  74. package/dist/shared/types.d.ts +166 -0
  75. package/dist/shared/types.d.ts.map +1 -0
  76. package/dist/social.d.ts +2 -2
  77. package/dist/social.js +2 -2
  78. package/dist/turns.d.ts +39 -0
  79. package/dist/turns.d.ts.map +1 -0
  80. package/dist/turns.js +117 -0
  81. package/dist/turns.js.map +1 -0
  82. package/package.json +33 -3
  83. package/src/avatar/adapters/pixi-avatar.ts +73 -0
  84. package/src/avatar/adapters/pixi-crowd.ts +302 -0
  85. package/src/avatar/adapters/pixi-types.ts +84 -0
  86. package/src/avatar/adapters/three.ts +126 -0
  87. package/src/avatar/animator/animator.ts +285 -0
  88. package/src/avatar/animator/reactions.ts +44 -0
  89. package/src/avatar/animator/schedule.ts +73 -0
  90. package/src/avatar/art/beard.ts +49 -0
  91. package/src/avatar/art/glasses.ts +9 -0
  92. package/src/avatar/art/hair.ts +254 -0
  93. package/src/avatar/art/headwear.ts +75 -0
  94. package/src/avatar/art/index.ts +21 -0
  95. package/src/avatar/art/shape.ts +68 -0
  96. package/src/avatar/art-store.ts +36 -0
  97. package/src/avatar/atlas.ts +236 -0
  98. package/src/avatar/catalog-view.ts +14 -0
  99. package/src/avatar/colour.ts +109 -0
  100. package/src/avatar/describe.ts +76 -0
  101. package/src/avatar/face.ts +187 -0
  102. package/src/avatar/geom.ts +168 -0
  103. package/src/avatar/layout.ts +47 -0
  104. package/src/avatar/look-like.ts +52 -0
  105. package/src/avatar/outputs/bitmap.ts +75 -0
  106. package/src/avatar/outputs/canvas-paint.ts +177 -0
  107. package/src/avatar/outputs/canvas.ts +62 -0
  108. package/src/avatar/outputs/custom-element.ts +140 -0
  109. package/src/avatar/outputs/element.ts +58 -0
  110. package/src/avatar/outputs/live-canvas.ts +57 -0
  111. package/src/avatar/outputs/overlay-svg.ts +22 -0
  112. package/src/avatar/outputs/pose-key.ts +30 -0
  113. package/src/avatar/outputs/svg-markup.ts +113 -0
  114. package/src/avatar/outputs/svg.ts +41 -0
  115. package/src/avatar/overlays.ts +128 -0
  116. package/src/avatar/render/body.ts +116 -0
  117. package/src/avatar/render/colours.ts +81 -0
  118. package/src/avatar/render/compose.ts +258 -0
  119. package/src/avatar/render/context.ts +117 -0
  120. package/src/avatar/render/eyes.ts +78 -0
  121. package/src/avatar/render/eyewear.ts +56 -0
  122. package/src/avatar/render/frame.ts +60 -0
  123. package/src/avatar/render/head.ts +81 -0
  124. package/src/avatar/render/mouth.ts +86 -0
  125. package/src/avatar/render/props.ts +91 -0
  126. package/src/avatar/render/types.ts +84 -0
  127. package/src/avatar/scene.ts +119 -0
  128. package/src/avatar-pixi.ts +20 -0
  129. package/src/avatar-svg.ts +21 -0
  130. package/src/avatar-three.ts +18 -0
  131. package/src/avatar.ts +62 -0
  132. package/src/core/avatar/avatar-cache.ts +95 -0
  133. package/src/core/avatar/avatar-ref.ts +34 -0
  134. package/src/core/avatar/avatar-types.ts +43 -0
  135. package/src/core/avatar/hub-avatar.ts +308 -0
  136. package/src/core/connection.ts +8 -0
  137. package/src/core/errors.ts +7 -1
  138. package/src/core/hub-progress.ts +269 -238
  139. package/src/core/hub.ts +174 -6
  140. package/src/core/offline/hub-kinds/avatar-kind.ts +42 -0
  141. package/src/core/offline/hub-kinds/index.ts +9 -0
  142. package/src/core/offline/hub-kinds/saved-kind.ts +93 -0
  143. package/src/core/page-account.ts +121 -0
  144. package/src/core/rest/routes.gen.ts +31 -1
  145. package/src/core/resume/hub-resume.ts +39 -5
  146. package/src/core/resume/resume-types.ts +2 -2
  147. package/src/core/saved/daily-saves.ts +196 -0
  148. package/src/core/saved/daily-seed.ts +16 -0
  149. package/src/core/saved/hub-saved.ts +221 -0
  150. package/src/core/saved/local-saved.ts +122 -0
  151. package/src/core/saved/saved-list.ts +129 -0
  152. package/src/core/saved/saved-open.ts +104 -0
  153. package/src/core/saved/saved-order.ts +49 -0
  154. package/src/core/saved/saved-types.ts +24 -0
  155. package/src/core/turns/hub-turns.ts +140 -0
  156. package/src/core/turns/turn-game.ts +388 -0
  157. package/src/core/version/client-version.gen.ts +2 -2
  158. package/src/daily/daily-system.ts +112 -13
  159. package/src/daily/page-daily.ts +2 -2
  160. package/src/daily/types.ts +46 -9
  161. package/src/doctor/hub-version-fetch.ts +43 -43
  162. package/src/index.ts +10 -1
  163. package/src/input/input-system.ts +10 -1
  164. package/src/input/navigator.ts +11 -0
  165. package/src/input.ts +1 -0
  166. package/src/overlay/overlay.ts +25 -1
  167. package/src/realtime/runtime-api.ts +14 -3
  168. package/src/social.ts +1 -0
  169. package/src/turns-kit/check-rules.ts +182 -0
  170. package/src/turns.ts +13 -0
package/dist/avatar.js ADDED
@@ -0,0 +1,487 @@
1
+ import { t as _defineProperty } from "./shared/defineProperty.js";
2
+ import { A as contrast, M as lightness, N as toCode, P as toLook, _ as onArtReady, a as composeAvatar, c as n, d as EXPRESSIONS, f as EXPRESSION_NAMES, g as mix, h as isExpression, i as HEAD_Y, j as deltaE, p as expressionFromEmote, r as sceneToSvg, v as ready } from "./shared/svg-markup.js";
3
+ import { a as paintNodes, i as renderCanvasAt, n as defaultLayer, r as renderCanvas, t as renderKey } from "./shared/pose-key.js";
4
+ import { n as renderSvg, t as nextPrefix } from "./shared/svg.js";
5
+ import { a as Animator, i as lookToward, l as renderBitmap, n as facingFrom, o as animator, r as layout, s as REACTIONS, t as overlays, u as renderDataUrl } from "./shared/overlays.js";
6
+ import { n as describe, t as avatarEmoji } from "./shared/describe.js";
7
+ import { ACCESSORY_SLOTS, CATALOG, CATALOG_REVISION, CATALOG_REVISION as CATALOG_REVISION$1, DEFAULT_GEN, LOOK_CODE_PREFIX, PALETTES, PALETTES as PALETTES$1, canonicalLook, decodeLook, defaultLook, distinctLooks, encodeLook, isLookCode, isValidLook, lookProblem, normaliseHex, partById, partName, partsOf, partsOf as partsOf$1, randomLook, resolveColour, sameLook, seededRng } from "@diffenderfer-games/hub-contract/avatar";
8
+ //#region src/avatar/outputs/element.ts
9
+ /**
10
+ * `render.element`: a live DOM avatar. `update(pose)` re-renders only when
11
+ * the quantised pose changes, which is cheap enough for a dozen avatars at
12
+ * 30 fps in DOM games.
13
+ */
14
+ /** A live avatar element; it upgrades itself from the silhouette when the art loads. */
15
+ function renderElement(like, opts = {}, doc = document) {
16
+ const el = doc.createElement("span");
17
+ el.className = "dg-avatar";
18
+ el.style.display = "inline-block";
19
+ el.style.lineHeight = "0";
20
+ let look = like;
21
+ let options = opts;
22
+ let key = "";
23
+ const draw = (isForced = false) => {
24
+ const next = renderKey(toCode(look), options);
25
+ if (!isForced && next === key) return;
26
+ key = next;
27
+ el.innerHTML = renderSvg(look, options);
28
+ };
29
+ draw(true);
30
+ onArtReady(() => {
31
+ draw(true);
32
+ });
33
+ return {
34
+ el,
35
+ update(pose) {
36
+ options = {
37
+ ...options,
38
+ pose
39
+ };
40
+ draw();
41
+ },
42
+ setLook(next) {
43
+ look = next;
44
+ draw(true);
45
+ },
46
+ setOptions(next) {
47
+ options = {
48
+ ...next,
49
+ ...options.pose ? { pose: options.pose } : {}
50
+ };
51
+ draw(true);
52
+ }
53
+ };
54
+ }
55
+ //#endregion
56
+ //#region src/avatar/outputs/custom-element.ts
57
+ /**
58
+ * `<dg-avatar>` (§3.8), registered by `defineAvatarElement()` (never as a
59
+ * side effect of importing). For DOM and React games and static pages:
60
+ *
61
+ * ```html
62
+ * <dg-avatar look="AV1…" size="48" expression="happy" look-x="-1" animate title="Sam's avatar"></dg-avatar>
63
+ * ```
64
+ *
65
+ * With `animate` it runs its own animator (blinks, idle motion) at up to
66
+ * 30 fps while visible; its `animator` property gives full control.
67
+ */
68
+ const FACINGS = [
69
+ "S",
70
+ "SE",
71
+ "E",
72
+ "NE",
73
+ "N",
74
+ "NW",
75
+ "W",
76
+ "SW"
77
+ ];
78
+ const FRAMES = [
79
+ "head",
80
+ "bust",
81
+ "full"
82
+ ];
83
+ const BODIES = [
84
+ "idle",
85
+ "walk",
86
+ "run",
87
+ "sit",
88
+ "play",
89
+ "wave",
90
+ "cheer",
91
+ "jump",
92
+ "dance",
93
+ "away"
94
+ ];
95
+ const STATUSES = [
96
+ "goggles",
97
+ "headset",
98
+ "cards",
99
+ "controller",
100
+ "trophy",
101
+ "crown",
102
+ "book"
103
+ ];
104
+ const FRAME_MS = 1e3 / 30;
105
+ /** The list member equal to `value`, if any (attribute values are untrusted). */
106
+ const oneOf = (list, value) => list.find((item) => item === value);
107
+ const toNumber = (value) => {
108
+ const parsed = value === null ? NaN : Number(value);
109
+ return Number.isFinite(parsed) ? parsed : void 0;
110
+ };
111
+ /** The attributes `<dg-avatar>` watches. */
112
+ const AVATAR_ATTRIBUTES = [
113
+ "look",
114
+ "size",
115
+ "frame",
116
+ "facing",
117
+ "expression",
118
+ "look-x",
119
+ "look-y",
120
+ "animate",
121
+ "title",
122
+ "background",
123
+ "body",
124
+ "status"
125
+ ];
126
+ /**
127
+ * Registers `<dg-avatar>` (or another tag). Safe to call more than once;
128
+ * a no-op outside a browser.
129
+ */
130
+ function defineAvatarElement(tag = "dg-avatar") {
131
+ if (typeof customElements === "undefined" || customElements.get(tag)) return;
132
+ class DgAvatar extends HTMLElement {
133
+ constructor(..._args) {
134
+ super(..._args);
135
+ _defineProperty(this, "view", null);
136
+ _defineProperty(this, "anim", null);
137
+ _defineProperty(this, "raf", 0);
138
+ _defineProperty(this, "last", 0);
139
+ _defineProperty(this, "base", "neutral");
140
+ }
141
+ /** The animator driving this element (created on first use). */
142
+ get animator() {
143
+ this.anim ?? (this.anim = animator(this.getAttribute("look") ?? "", { seed: this.getAttribute("look") ?? "dg" }));
144
+ return this.anim;
145
+ }
146
+ options() {
147
+ const background = this.getAttribute("background");
148
+ const frame = oneOf(FRAMES, this.getAttribute("frame"));
149
+ const facing = oneOf(FACINGS, this.getAttribute("facing"));
150
+ const title = this.getAttribute("title");
151
+ return {
152
+ size: toNumber(this.getAttribute("size")) ?? 48,
153
+ ...frame ? { frame } : {},
154
+ ...facing ? { facing } : {},
155
+ ...title ? { title } : {},
156
+ ...background === "none" || background === "badge" ? { background } : background?.startsWith("#") ? { background: `#${background.slice(1)}` } : {}
157
+ };
158
+ }
159
+ stillPose() {
160
+ const expression = this.getAttribute("expression") ?? "";
161
+ const body = oneOf(BODIES, this.getAttribute("body"));
162
+ const status = oneOf(STATUSES, this.getAttribute("status"));
163
+ return {
164
+ ...isExpression(expression) ? { expression } : {},
165
+ look: {
166
+ x: toNumber(this.getAttribute("look-x")) ?? 0,
167
+ y: toNumber(this.getAttribute("look-y")) ?? 0
168
+ },
169
+ ...body ? { body } : {},
170
+ ...status ? { status } : {}
171
+ };
172
+ }
173
+ connectedCallback() {
174
+ var _this$style, _this$style2;
175
+ (_this$style = this.style).display || (_this$style.display = "inline-block");
176
+ (_this$style2 = this.style).lineHeight || (_this$style2.lineHeight = "0");
177
+ this.view = renderElement(this.getAttribute("look") ?? "", this.options(), this.ownerDocument);
178
+ this.replaceChildren(this.view.el);
179
+ this.view.update(this.stillPose());
180
+ ready();
181
+ this.loop();
182
+ }
183
+ disconnectedCallback() {
184
+ cancelAnimationFrame(this.raf);
185
+ this.raf = 0;
186
+ }
187
+ attributeChangedCallback(name) {
188
+ if (!this.view) return;
189
+ if (name === "look") {
190
+ const look = this.getAttribute("look") ?? "";
191
+ this.view.setLook(look);
192
+ this.anim?.setLook(look);
193
+ } else this.view.setOptions(this.options());
194
+ this.view.update(this.stillPose());
195
+ this.loop();
196
+ }
197
+ loop() {
198
+ if (!this.hasAttribute("animate") || this.raf !== 0 || !this.isConnected) return;
199
+ const tick = (t) => {
200
+ this.raf = 0;
201
+ if (!this.isConnected || !this.hasAttribute("animate")) return;
202
+ if (t - this.last >= FRAME_MS) {
203
+ this.last = t;
204
+ const expression = this.getAttribute("expression") ?? "neutral";
205
+ if (expression !== this.base && isExpression(expression)) {
206
+ this.base = expression;
207
+ this.animator.setBase(expression, { at: t });
208
+ }
209
+ const still = this.stillPose();
210
+ this.view?.update({
211
+ ...this.animator.pose(t),
212
+ ...still.body ? { body: still.body } : {},
213
+ ...still.status ? { status: still.status } : {}
214
+ });
215
+ }
216
+ this.raf = requestAnimationFrame(tick);
217
+ };
218
+ this.raf = requestAnimationFrame(tick);
219
+ }
220
+ }
221
+ _defineProperty(DgAvatar, "observedAttributes", AVATAR_ATTRIBUTES);
222
+ customElements.define(tag, DgAvatar);
223
+ }
224
+ //#endregion
225
+ //#region src/avatar/outputs/overlay-svg.ts
226
+ /** An overlay as a standalone `<svg>` (for DOM surfaces) or painted on a canvas at its anchor. */
227
+ /** The overlay as an `<svg>` of its own size (decorative). */
228
+ function overlaySvg(overlay, scale = 1) {
229
+ const [left, top, w, h] = overlay.box;
230
+ const { body, defs } = sceneToSvg(overlay.nodes, nextPrefix({}));
231
+ return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="${n(left)} ${n(top)} ${n(w)} ${n(h)}" width="${n(w * scale)}" height="${n(h * scale)}" aria-hidden="true">${defs ? `<defs>${defs}</defs>` : ""}${body}</svg>`;
232
+ }
233
+ /** Paints an overlay with its anchor at (x, y). */
234
+ function paintOverlay(ctx, overlay, atX, atY, scale = 1) {
235
+ ctx.save();
236
+ ctx.translate(atX, atY);
237
+ ctx.scale(scale, scale);
238
+ paintNodes(ctx, overlay.nodes);
239
+ ctx.restore();
240
+ }
241
+ //#endregion
242
+ //#region src/avatar/catalog-view.ts
243
+ /** The catalog as the designer and games see it: parts per category, palettes and the revision. */
244
+ /** The catalog view. */
245
+ const catalog = {
246
+ /** The parts of a category in designer order (retired parts hidden). */
247
+ parts(category) {
248
+ return partsOf$1(category);
249
+ },
250
+ /** Every colour palette. */
251
+ palettes: PALETTES$1,
252
+ /** The catalog revision this build knows. */
253
+ revision: CATALOG_REVISION$1
254
+ };
255
+ //#endregion
256
+ //#region src/avatar/atlas.ts
257
+ const MIRRORED = {
258
+ W: "E",
259
+ SW: "SE",
260
+ NW: "NE"
261
+ };
262
+ const STEPS = {
263
+ walk: 8,
264
+ run: 8,
265
+ idle: 4,
266
+ dance: 8,
267
+ jump: 6,
268
+ cheer: 6
269
+ };
270
+ /** The rig box every frame bakes: wide enough for hats, props and the rim. */
271
+ const BOX = {
272
+ x: -90,
273
+ y: -210,
274
+ w: 180,
275
+ h: 226
276
+ };
277
+ /** The atlas. */
278
+ var AvatarAtlas = class {
279
+ constructor(opts = {}) {
280
+ _defineProperty(this, "pageSize", void 0);
281
+ _defineProperty(this, "scale", void 0);
282
+ _defineProperty(this, "maxPages", void 0);
283
+ _defineProperty(this, "rim", void 0);
284
+ _defineProperty(this, "makeCanvas", void 0);
285
+ _defineProperty(this, "pages", []);
286
+ _defineProperty(this, "frames", /* @__PURE__ */ new Map());
287
+ _defineProperty(this, "queue", /* @__PURE__ */ new Map());
288
+ _defineProperty(this, "latestByLook", /* @__PURE__ */ new Map());
289
+ _defineProperty(this, "clock", 0);
290
+ this.pageSize = opts.pageSize ?? 2048;
291
+ this.maxPages = opts.maxPages ?? 4;
292
+ this.scale = opts.scale ?? .32;
293
+ this.rim = opts.rim ?? true;
294
+ this.makeCanvas = opts.makeCanvas ?? ((size) => defaultLayer(size, size));
295
+ }
296
+ /** The frame for a key: the baked frame, or `null` (queued for {@link bake}). */
297
+ frame(key) {
298
+ const id = this.keyOf(key);
299
+ const isMirror = MIRRORED[key.facing ?? "S"] !== void 0;
300
+ const hit = this.live(id);
301
+ if (hit) return {
302
+ ...hit,
303
+ mirror: isMirror
304
+ };
305
+ this.queue.set(id, key);
306
+ const standIn = this.live(this.latestByLook.get(toCode(key.look)) ?? "");
307
+ return standIn ? {
308
+ ...standIn,
309
+ mirror: isMirror
310
+ } : null;
311
+ }
312
+ /** A baked frame whose page still holds it (touching the page for the LRU). */
313
+ live(id) {
314
+ const hit = this.frames.get(id);
315
+ const page = hit ? this.pages[hit.page] : void 0;
316
+ if (!hit || page?.version !== hit.version) return;
317
+ page.used = this.clock += 1;
318
+ return hit;
319
+ }
320
+ /** Bakes queued frames for up to `budgetMs` (default 4 ms), oldest first. Returns how many were baked. */
321
+ bake(budgetMs = 4, now = () => typeof performance === "undefined" ? Date.now() : performance.now()) {
322
+ const start = now();
323
+ let baked = 0;
324
+ for (const [id, key] of this.queue) {
325
+ if (baked > 0 && now() - start > budgetMs) break;
326
+ this.queue.delete(id);
327
+ if (this.bakeOne(id, key)) baked += 1;
328
+ }
329
+ return baked;
330
+ }
331
+ /** Frames still waiting to bake. */
332
+ get pending() {
333
+ return this.queue.size;
334
+ }
335
+ /** Every page's image (for texture uploads). */
336
+ get sources() {
337
+ return this.pages.map((p) => p.canvas);
338
+ }
339
+ keyOf(key) {
340
+ const facing = MIRRORED[key.facing ?? "S"] ?? key.facing ?? "S";
341
+ const body = key.body ?? "idle";
342
+ const steps = STEPS[body] ?? 1;
343
+ const step = Math.floor((key.phase ?? 0) % 1 * steps);
344
+ return [
345
+ toCode(key.look),
346
+ facing,
347
+ body,
348
+ String(step),
349
+ key.face ?? "neutral",
350
+ key.status ?? "",
351
+ String(key.scale ?? this.scale)
352
+ ].join("~");
353
+ }
354
+ place(w, h) {
355
+ for (let i = 0; i < this.pages.length; i += 1) {
356
+ const p = this.pages[i];
357
+ if (!p) continue;
358
+ if (p.shelfX + w > this.pageSize) {
359
+ p.shelfY += p.shelfH;
360
+ p.shelfX = 0;
361
+ p.shelfH = 0;
362
+ }
363
+ if (p.shelfY + h <= this.pageSize) {
364
+ const spot = {
365
+ page: i,
366
+ x: p.shelfX,
367
+ y: p.shelfY
368
+ };
369
+ p.shelfX += w;
370
+ p.shelfH = Math.max(p.shelfH, h);
371
+ return spot;
372
+ }
373
+ }
374
+ if (this.pages.length < this.maxPages) {
375
+ const made = this.makeCanvas(this.pageSize);
376
+ if (!made) return null;
377
+ this.pages.push({
378
+ canvas: made.canvas,
379
+ ctx: made.ctx,
380
+ shelfX: 0,
381
+ shelfY: 0,
382
+ shelfH: 0,
383
+ used: 0,
384
+ version: 1
385
+ });
386
+ return this.place(w, h);
387
+ }
388
+ let oldest = 0;
389
+ this.pages.forEach((p, i) => {
390
+ if (p.used < (this.pages[oldest]?.used ?? Infinity)) oldest = i;
391
+ });
392
+ const page = this.pages[oldest];
393
+ if (!page) return null;
394
+ page.ctx.clearRect(0, 0, this.pageSize, this.pageSize);
395
+ page.version += 1;
396
+ page.shelfX = 0;
397
+ page.shelfY = 0;
398
+ page.shelfH = 0;
399
+ return this.place(w, h);
400
+ }
401
+ bakeOne(id, key) {
402
+ const scale = key.scale ?? this.scale;
403
+ const w = Math.ceil(BOX.w * scale) + 2;
404
+ const h = Math.ceil(BOX.h * scale) + 2;
405
+ const spot = this.place(w, h);
406
+ const page = spot ? this.pages[spot.page] : void 0;
407
+ if (!spot || !page) return false;
408
+ const facing = MIRRORED[key.facing ?? "S"] ?? key.facing ?? "S";
409
+ const body = key.body ?? "idle";
410
+ const steps = STEPS[body] ?? 1;
411
+ const phase = (Math.floor((key.phase ?? 0) % 1 * steps) + .5) / steps;
412
+ const face = key.face ?? "neutral";
413
+ const { nodes } = composeAvatar(toLook(key.look), {
414
+ frame: "full",
415
+ facing,
416
+ rim: this.rim,
417
+ shadow: false,
418
+ pose: {
419
+ expression: face,
420
+ body,
421
+ phase,
422
+ status: key.status ?? null
423
+ }
424
+ });
425
+ const scratch = defaultLayer(w, h);
426
+ if (!scratch) return false;
427
+ scratch.ctx.translate(1 - BOX.x * scale, 1 - BOX.y * scale);
428
+ scratch.ctx.scale(scale, scale);
429
+ paintNodes(scratch.ctx, nodes, defaultLayer);
430
+ page.ctx.clearRect(spot.x, spot.y, w, h);
431
+ page.ctx.drawImage(scratch.canvas, spot.x, spot.y);
432
+ page.used = this.clock += 1;
433
+ this.latestByLook.set(toCode(key.look), id);
434
+ this.frames.set(id, {
435
+ page: spot.page,
436
+ source: page.canvas,
437
+ x: spot.x,
438
+ y: spot.y,
439
+ w,
440
+ h,
441
+ footX: 1 - BOX.x * scale,
442
+ footY: 1 - BOX.y * scale,
443
+ mirror: false,
444
+ version: page.version
445
+ });
446
+ return true;
447
+ }
448
+ };
449
+ /** A new atlas (one per scene; pages are shared by every avatar in it). */
450
+ function createAtlas(opts = {}) {
451
+ return new AvatarAtlas(opts);
452
+ }
453
+ //#endregion
454
+ //#region src/avatar.ts
455
+ /**
456
+ * `@diffenderfer-games/hub/avatar`: draw players' avatars in any game.
457
+ *
458
+ * ```ts
459
+ * import { ready, render, animator } from '@diffenderfer-games/hub/avatar';
460
+ *
461
+ * await ready(); // loads the art once
462
+ * el.innerHTML = render.svg(seat.look, { size: 48 });
463
+ * const anim = animator(seat.look, { seed: seat.userId });
464
+ * anim.express('happy');
465
+ * render.canvas(ctx, seat.look, { x, y, size: 64, pose: anim.pose(now) });
466
+ * ```
467
+ *
468
+ * The art loads lazily (`ready()`); before it does, renders draw the
469
+ * silhouette. Zero dependencies; the Pixi and three.js adapters take the
470
+ * library as an argument (`/avatar/pixi`, `/avatar/three`). Docs: "Avatars"
471
+ * in docs/hub.md.
472
+ *
473
+ * @packageDocumentation
474
+ */
475
+ /** Every output: SVG markup, a live element, Canvas 2D, a bitmap or a data URL. */
476
+ const render = {
477
+ svg: renderSvg,
478
+ element: renderElement,
479
+ canvas: renderCanvas,
480
+ canvasAt: renderCanvasAt,
481
+ bitmap: renderBitmap,
482
+ dataUrl: renderDataUrl
483
+ };
484
+ //#endregion
485
+ export { ACCESSORY_SLOTS, Animator, AvatarAtlas, CATALOG, CATALOG_REVISION, DEFAULT_GEN, EXPRESSIONS, EXPRESSION_NAMES, HEAD_Y, LOOK_CODE_PREFIX, PALETTES, REACTIONS, animator, avatarEmoji, canonicalLook, catalog, composeAvatar, contrast, createAtlas, decodeLook, defaultLook, defineAvatarElement, deltaE, describe, distinctLooks, encodeLook, expressionFromEmote, facingFrom, isExpression, isLookCode, isValidLook, layout, lightness, lookProblem, lookToward, mix, normaliseHex, onArtReady, overlaySvg, overlays, paintNodes, paintOverlay, partById, partName, partsOf, randomLook, ready, render, resolveColour, sameLook, sceneToSvg, seededRng, toCode, toLook };
486
+
487
+ //# sourceMappingURL=avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.js","names":["partsOf","PALETTES","CATALOG_REVISION"],"sources":["../src/avatar/outputs/element.ts","../src/avatar/outputs/custom-element.ts","../src/avatar/outputs/overlay-svg.ts","../src/avatar/catalog-view.ts","../src/avatar/atlas.ts","../src/avatar.ts"],"mappings":"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"}
package/dist/daily.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { _ as DailyStatus, a as isDailySystem, c as DailyAll, d as DailyCompletionMeta, f as DailyDefinition, g as DailyStartResponse, h as DailyHost, i as getDaily, l as DailyChallenge, m as DailyGameStatus, n as DailyCompletions, o as DAILY_START_EVENT, p as DailyEventDetail, r as DAILY_SINGLETON_API, s as DailySystem, t as DailyCompletion, u as DailyCompleteResponse } from "./shared/daily.js";
2
- export { DAILY_SINGLETON_API, DAILY_START_EVENT, type DailyAll, type DailyChallenge, type DailyCompleteResponse, type DailyCompletion, type DailyCompletionMeta, type DailyCompletions, type DailyDefinition, type DailyEventDetail, type DailyGameStatus, type DailyHost, type DailyStartResponse, type DailyStatus, DailySystem, getDaily, isDailySystem };
1
+ import { _ as DailyStartResponse, a as isDailySystem, c as DailyAll, d as DailyCompletionMeta, f as DailyDefinition, g as DailySaveInput, h as DailyHost, i as getDaily, l as DailyChallenge, m as DailyGameStatus, n as DailyCompletions, o as DAILY_START_EVENT, p as DailyEventDetail, r as DAILY_SINGLETON_API, s as DailySystem, t as DailyCompletion, u as DailyCompleteResponse, v as DailyStatus } from "./shared/daily.js";
2
+ export { DAILY_SINGLETON_API, DAILY_START_EVENT, type DailyAll, type DailyChallenge, type DailyCompleteResponse, type DailyCompletion, type DailyCompletionMeta, type DailyCompletions, type DailyDefinition, type DailyEventDetail, type DailyGameStatus, type DailyHost, type DailySaveInput, type DailyStartResponse, type DailyStatus, DailySystem, getDaily, isDailySystem };
@@ -5,7 +5,7 @@ import { parseArgs } from "node:util";
5
5
  import { GAME_LABELS, GamePackageJson, HubVersion, splitGameLabels } from "@diffenderfer-games/hub-contract";
6
6
  //#region src/core/version/client-version.gen.ts
7
7
  /** This client's package version, sent as `x-hub-client` on REST calls and `client` in `hello`. */
8
- const HUB_CLIENT_VERSION = "2.0.0-next.5";
8
+ const HUB_CLIENT_VERSION = "2.0.0-next.6";
9
9
  //#endregion
10
10
  //#region src/core/version/semver.ts
11
11
  const VERSION_PATTERN = /^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
+ import { A as SAVED_OPEN_EVENT, C as SavedKind, D as TurnSummary, E as SavedStatus, M as SavedOpened, N as savedGameUrl, O as SAVED_CHANGE_EVENT, S as SavedEntry, T as SavedProgress, _ as DailyStartResponse, a as isDailySystem, b as SavedCounts, c as DailyAll, d as DailyCompletionMeta, f as DailyDefinition, g as DailySaveInput, h as DailyHost, i as getDaily, j as SAVED_OPEN_PARAM, k as SAVED_KIND_PARAM, l as DailyChallenge, m as DailyGameStatus, n as DailyCompletions, o as DAILY_START_EVENT, p as DailyEventDetail, r as DAILY_SINGLETON_API, s as DailySystem, t as DailyCompletion, u as DailyCompleteResponse, v as DailyStatus, w as SavedListOptions, x as SavedDaily, y as GamePayload } from "./shared/daily.js";
1
2
  import { a as RaceRecordPlayer, c as RealtimeErrorShape, d as RoomSeat, f as RoomSeatChange, g as Snapshot, h as ServerEvents, i as RaceHistory, l as RoomChatLine, m as SchemaOutput, n as InviteLink, o as RaceResultPlayer, p as RoomStateChange, r as Notice, s as RaceStatusEvent, t as InviteCreated, u as RoomMessage } from "./shared/wire-types.js";
2
- import { _ as DailyStatus, a as isDailySystem, c as DailyAll, d as DailyCompletionMeta, f as DailyDefinition, g as DailyStartResponse, h as DailyHost, i as getDaily, l as DailyChallenge, m as DailyGameStatus, n as DailyCompletions, o as DAILY_START_EVENT, p as DailyEventDetail, r as DAILY_SINGLETON_API, s as DailySystem, t as DailyCompletion, u as DailyCompleteResponse } from "./shared/daily.js";
3
- import { $ as NavigableDef, A as PageInputControl, B as InputDef, C as INPUT_SINGLETON_API, D as parseInputOverrides, E as isInputSystem, F as DraggedSpot, G as InputSource, H as InputHost, I as EdgeOffsets, J as NavBlurEvent, K as MenuBridge, L as GamepadMapping, M as Anchor, N as AxisDef, O as InputSystem, P as AxisSide, Q as NavTarget, R as GroupDef, S as FOCUS_RING_SHADOW, T as getInput, U as InputOverrides, V as InputEvents, W as InputReading, X as NavElementKind, Y as NavElement, Z as NavFocusEvent, _ as boxesTouch, a as OverlayEdge, at as VirtualInputs, b as MODALITY_ATTRIBUTE, c as OverlayReason, d as LayoutOptions, et as Rect, f as layoutControls, g as LayoutItem, h as LayoutBox, i as AutoPauseOptions, it as VirtualDef, j as isPageInputControl, k as InputSystemOptions, l as UiStack, m as Insets, n as getUiStack, nt as Vector, o as OverlayEvent, ot as VirtualOverride, p as Overlay, q as MouseMapping, r as isUiStack, rt as VirtualControlType, s as OverlayListener, t as UI_STACK_VERSION, tt as TouchMapping, u as UiStackHandoff, v as controlSize, w as InputOptions, x as trackInputModality, y as InputModality, z as InputConfig } from "./shared/input.js";
3
+ import { $ as NavTarget, A as PageInputControl, B as InputConfig, C as INPUT_SINGLETON_API, D as parseInputOverrides, E as isInputSystem, F as AxisSide, G as InputReading, H as InputEvents, I as DraggedSpot, J as MouseMapping, K as InputSource, L as EdgeOffsets, M as AutoNavigateTarget, N as Anchor, O as InputSystem, P as AxisDef, Q as NavFocusEvent, R as GamepadMapping, S as FOCUS_RING_SHADOW, T as getInput, U as InputHost, V as InputDef, W as InputOverrides, X as NavElement, Y as NavBlurEvent, Z as NavElementKind, _ as boxesTouch, a as OverlayEdge, at as VirtualDef, b as MODALITY_ATTRIBUTE, c as OverlayReason, d as LayoutOptions, et as NavigableDef, f as layoutControls, g as LayoutItem, h as LayoutBox, i as AutoPauseOptions, it as VirtualControlType, j as isPageInputControl, k as InputSystemOptions, l as UiStack, m as Insets, n as getUiStack, nt as TouchMapping, o as OverlayEvent, ot as VirtualInputs, p as Overlay, q as MenuBridge, r as isUiStack, rt as Vector, s as OverlayListener, st as VirtualOverride, t as UI_STACK_VERSION, tt as Rect, u as UiStackHandoff, v as controlSize, w as InputOptions, x as trackInputModality, y as InputModality, z as GroupDef } from "./shared/input.js";
4
4
  import { a as InviteResult, i as InviteOptions, n as HubMpApi, o as JoinInfoEvent, r as InviteLinkMethods, t as BusyOptions } from "./shared/multiplayer-types.js";
5
5
  import { o as multiplayerForwarder } from "./shared/mp.js";
6
6
  import { a as RoomEvents, c as RoomSelf, d as RoomStateOptions, i as RoomCreateOptions, l as RoomSendOptions, n as HubRoomsApi, o as RoomListOptions, r as JoinOptions, s as RoomReclaimMethods, t as HubRoom, u as RoomState } from "./shared/room-types.js";
7
7
  import { a as RaceHistoryQuery, c as RaceRuntimeApi, i as RaceEvents, l as RaceStart, n as RaceCreateOptions, o as RaceHistoryViewOptions, r as RaceDefinition, s as RaceHudPlace, t as HubRaceApi } from "./shared/race-types.js";
8
8
  import { f as raceForwarder } from "./shared/race.js";
9
9
  import { n as roomsForwarder } from "./shared/rooms.js";
10
- import { $ as HubNotifyApi, A as RacerState, B as SuggestionStatus, C as RaceRecord, D as RaceStats, E as RaceState, F as ReportReason, G as REALTIME_READY_EVENT, H as isRealtimeApi, I as RoomInfo, J as RealtimeHubLink, K as REALTIME_SINGLETON_API, L as SocialConfig, M as Relation, N as ReportInput, O as Racer, P as ReportKind, Q as socialForwarder, R as SocialMe, S as RaceParams, T as RaceStatValue, U as REALTIME_FAILED_EVENT, V as findRealtimeApi, W as REALTIME_FEATURE_VERSION, X as notifyForwarder, Y as linkRealtimeToHub, Z as presenceForwarder, _ as PlayerLite, a as ErrorBody, at as SocialCounts, b as PresenceKind, c as JoinInfo, d as Message, et as HubPresenceApi, f as MessagesPage, g as PlayerCard, h as Party, i as Counts, it as PlayerRef, j as RecentPlayer, k as RacerResult, l as Launch, m as NotifyPrefs, n as ChatMode, nt as OpenInviteOptions, o as FriendEntry, ot as SocialEvents, p as NotifyChange, q as RealtimeApi, r as Conversation, rt as PlayOnlineMethods, s as Invite, t as Audience, tt as HubSocialApi, u as LaunchTicket, v as Presence, w as RaceResult, x as RaceOutcome, y as PresenceInput, z as Suggestion } from "./shared/social.js";
11
- import { $ as GameInfo, A as StatResult, B as OUTBOX_MAX_ENTRIES, C as GrantBundle, Ct as EndpointName, D as TradeNoteOptions, E as TradeListOptions, F as OfflineEventDetails, G as ProfilePatch, H as OfflineKindDefinition, I as OfflineEventName, J as QueuedScoreOptions, K as QueueOp, L as OfflineListener, M as SyncResult, N as OfflineApi, O as AuthResponse, P as OUTBOX_FULL_CODE, Q as GameAnalytics, R as OfflineOp, S as HubMenuControl, St as EndpointFields, T as TradeId, Tt as GamePayload, U as ReplayContext, V as OfflineHandler, W as CLIENT_VERSION_HEADER, X as Board, Y as BufferedEvent, Z as BoardWithTop, _ as ResumeEntry, _t as SortDir, a as HubErrorDetails, at as Inventory, b as ResumeRun, bt as SubmitScoreResult, c as UNSUPPORTED_BY_HUB, ct as LeaderboardEntry, d as hub, dt as Metrics, et as GameLeaderboards, f as ClientSupport, ft as Profile, g as ResumeBlocker, gt as SnapshotResponse, h as RESUME_MAX_STATE_BYTES, ht as SaveMeta, i as HubErrorCode, it as HubStatus, j as SyncConflict, k as ProfileUpdate, l as Hub, lt as LeaderboardResult, m as RESUME_DEBOUNCE_MS, mt as Save, n as ContentRejectedError, nt as GlobalAnalytics, o as OfflineError, ot as InventorySnapshot, p as HubResume, pt as ProfileSummary, q as QueueOpInput, r as HubError, rt as HubOptions, s as SAVE_UNKNOWN_CODE, st as Json, t as HUB_CLIENT_VERSION, tt as GameRecords, u as createHub, ut as MeResponse, v as ResumeLoadOptions, vt as Stats, w as TradeBundle, wt as EndpointReply, x as ResumeSaveInput, xt as User, y as ResumeProgress, yt as SubmitScoreOptions, z as OUTBOX_MAX_CHARS } from "./shared/index.js";
12
- export { type Anchor, type Audience, type AuthResponse, type AutoPauseOptions, type AxisDef, type AxisSide, type Board, type BoardWithTop, type BufferedEvent, type BusyOptions, CLIENT_VERSION_HEADER, type ChatMode, type ClientSupport, ContentRejectedError, type Conversation, type Counts, DAILY_SINGLETON_API, DAILY_START_EVENT, type DailyAll, type DailyChallenge, type DailyCompleteResponse, type DailyCompletion, type DailyCompletionMeta, type DailyCompletions, type DailyDefinition, type DailyEventDetail, type DailyGameStatus, type DailyHost, type DailyStartResponse, type DailyStatus, DailySystem, type DraggedSpot, type EdgeOffsets, type EndpointFields, type EndpointName, type EndpointReply, type ErrorBody, FOCUS_RING_SHADOW, type FriendEntry, type GameAnalytics, type GameInfo, type GameLeaderboards, type GamePayload, type GameRecords, type GamepadMapping, type GlobalAnalytics, type GrantBundle, type GroupDef, HUB_CLIENT_VERSION, Hub, HubError, type HubErrorCode, type HubErrorDetails, type HubMenuControl, type HubMpApi, type HubNotifyApi, type HubOptions, type HubPresenceApi, type HubRaceApi, HubResume, type HubRoom, type HubRoomsApi, type HubSocialApi, type HubStatus, INPUT_SINGLETON_API, type InputConfig, type InputDef, type InputEvents, type InputHost, type InputModality, type InputOptions, type InputOverrides, type InputReading, type InputSource, InputSystem, type InputSystemOptions, type Insets, type Inventory, type InventorySnapshot, type Invite, type InviteCreated, type InviteLink, type InviteLinkMethods, type InviteOptions, type InviteResult, type JoinInfo, type JoinInfoEvent, type JoinOptions, type Json, type Launch, type LaunchTicket, type LayoutBox, type LayoutItem, type LayoutOptions, type LeaderboardEntry, type LeaderboardResult, MODALITY_ATTRIBUTE, type MeResponse, type MenuBridge, type Message, type MessagesPage, type Metrics, type MouseMapping, type NavBlurEvent, type NavElement, type NavElementKind, type NavFocusEvent, type NavTarget, type NavigableDef, type Notice, type NotifyChange, type NotifyPrefs, OUTBOX_FULL_CODE, OUTBOX_MAX_CHARS, OUTBOX_MAX_ENTRIES, OfflineApi, OfflineError, type OfflineEventDetails, type OfflineEventName, type OfflineHandler, type OfflineKindDefinition, type OfflineListener, type OfflineOp, type OpenInviteOptions, Overlay, type OverlayEdge, type OverlayEvent, type OverlayListener, type OverlayReason, type PageInputControl, type Party, type PlayOnlineMethods, type PlayerCard, type PlayerLite, type PlayerRef, type Presence, type PresenceInput, type PresenceKind, type Profile, type ProfilePatch, type ProfileSummary, type ProfileUpdate, type QueueOp, type QueueOpInput, type QueuedScoreOptions, type REALTIME_FAILED_EVENT, type REALTIME_FEATURE_VERSION, type REALTIME_READY_EVENT, type REALTIME_SINGLETON_API, RESUME_DEBOUNCE_MS, RESUME_MAX_STATE_BYTES, type RaceCreateOptions, type RaceDefinition, type RaceEvents, type RaceHistory, type RaceHistoryQuery, type RaceHistoryViewOptions, type RaceHudPlace, type RaceOutcome, type RaceParams, type RaceRecord, type RaceRecordPlayer, type RaceResult, type RaceResultPlayer, type RaceRuntimeApi, type RaceStart, type RaceStatValue, type RaceState, type RaceStats, type RaceStatusEvent, type Racer, type RacerResult, type RacerState, type RealtimeApi, type RealtimeErrorShape, type RealtimeHubLink, type RecentPlayer, type Rect, type Relation, type ReplayContext, type ReportInput, type ReportKind, type ReportReason, type ResumeBlocker, type ResumeEntry, type ResumeLoadOptions, type ResumeProgress, type ResumeRun, type ResumeSaveInput, type RoomChatLine, type RoomCreateOptions, type RoomEvents, type RoomInfo, type RoomListOptions, type RoomMessage, type RoomReclaimMethods, type RoomSeat, type RoomSeatChange, type RoomSelf, type RoomSendOptions, type RoomState, type RoomStateChange, type RoomStateOptions, SAVE_UNKNOWN_CODE, type Save, type SaveMeta, type SchemaOutput, type ServerEvents, type Snapshot, type SnapshotResponse, type SocialConfig, type SocialCounts, type SocialEvents, type SocialMe, type SortDir, type StatResult, type Stats, type SubmitScoreOptions, type SubmitScoreResult, type Suggestion, type SuggestionStatus, type SyncConflict, type SyncResult, type TouchMapping, type TradeBundle, type TradeId, type TradeListOptions, type TradeNoteOptions, UI_STACK_VERSION, UNSUPPORTED_BY_HUB, type UiStack, type UiStackHandoff, type User, type Vector, type VirtualControlType, type VirtualDef, type VirtualInputs, type VirtualOverride, boxesTouch, controlSize, createHub, type findRealtimeApi, getDaily, getInput, getUiStack, hub, isDailySystem, isInputSystem, isPageInputControl, type isRealtimeApi, isUiStack, layoutControls, type linkRealtimeToHub, type multiplayerForwarder as mp, type notifyForwarder as notify, parseInputOverrides, type presenceForwarder as presence, type raceForwarder as race, type roomsForwarder as rooms, type socialForwarder as social, trackInputModality };
10
+ import { $ as RuntimeAvatarApi, A as RacerState, B as SuggestionStatus, C as RaceRecord, D as RaceStats, E as RaceState, F as ReportReason, G as REALTIME_READY_EVENT, H as isRealtimeApi, I as RoomInfo, J as SESSION_EVENT, K as REALTIME_SINGLETON_API, L as SocialConfig, M as Relation, N as ReportInput, O as Racer, P as ReportKind, Q as OpenDesignerOptions, R as SocialMe, S as RaceParams, T as RaceStatValue, U as REALTIME_FAILED_EVENT, V as findRealtimeApi, W as REALTIME_FEATURE_VERSION, X as AvatarRef, Y as AvatarChange, Z as DesignerResult, _ as PlayerLite, a as ErrorBody, at as HubNotifyApi, b as PresenceKind, c as JoinInfo, ct as OpenInviteOptions, d as Message, dt as SocialCounts, et as RealtimeHubLink, f as MessagesPage, ft as SocialEvents, g as PlayerCard, h as Party, i as Counts, it as socialForwarder, j as RecentPlayer, k as RacerResult, l as Launch, lt as PlayOnlineMethods, m as NotifyPrefs, n as ChatMode, nt as notifyForwarder, o as FriendEntry, ot as HubPresenceApi, p as NotifyChange, q as RealtimeApi, r as Conversation, rt as presenceForwarder, s as Invite, st as HubSocialApi, t as Audience, tt as linkRealtimeToHub, u as LaunchTicket, ut as PlayerRef, v as Presence, w as RaceResult, x as RaceOutcome, y as PresenceInput, z as Suggestion } from "./shared/social.js";
11
+ import { $ as OfflineApi, A as SavedChangeListener, At as MeResponse, B as ResumeRun, Bt as SubmitScoreResult, C as TURN_RESYNC_EVENT, Ct as HubOptions, D as TurnOutcome, Dt as Json, E as TurnMoveEvent, Et as InventorySnapshot, F as RESUME_MAX_STATE_BYTES, Ft as SaveMeta, G as TradeId, Gt as AvatarHost, H as HubMenuControl, Ht as EndpointFields, I as ResumeBlocker, It as SnapshotResponse, J as AuthResponse, Jt as CarriesLook, K as TradeListOptions, Kt as AvatarModule, L as ResumeEntry, Lt as SortDir, M as SavedOpenHandler, Mt as Profile, N as HubResume, Nt as ProfileSummary, O as HubSaved, Ot as LeaderboardEntry, P as RESUME_DEBOUNCE_MS, Pt as Save, Q as SyncResult, R as ResumeLoadOptions, Rt as Stats, S as TURN_POLL_MS, St as GlobalAnalytics, T as TurnGameEvents, Tt as Inventory, U as GrantBundle, Ut as EndpointName, V as ResumeSaveInput, Vt as User, W as TradeBundle, Wt as EndpointReply, X as StatResult, Y as ProfileUpdate, Z as SyncConflict, _ as HubTurns, _t as BoardWithTop, a as HUB_CLIENT_VERSION, at as OUTBOX_MAX_CHARS, b as TURN_CHAT_EVENT, bt as GameLeaderboards, c as HubErrorCode, ct as OfflineKindDefinition, d as SAVE_UNKNOWN_CODE, dt as ProfilePatch, et as OUTBOX_FULL_CODE, f as UNSUPPORTED_BY_HUB, ft as QueueOp, g as ClientSupport, gt as Board, h as hub, ht as BufferedEvent, i as TurnGameView, it as OfflineOp, j as SavedOpenDetail, jt as Metrics, k as SAVED_CHANGE_QUIET_MS, kt as LeaderboardResult, l as HubErrorDetails, lt as ReplayContext, m as createHub, mt as QueuedScoreOptions, n as TurnChatLine, nt as OfflineEventName, o as ContentRejectedError, ot as OUTBOX_MAX_ENTRIES, p as Hub, pt as QueueOpInput, q as TradeNoteOptions, qt as HubAvatar, r as TurnDeadline, rt as OfflineListener, s as HubError, st as OfflineHandler, t as OpenTurnGame, tt as OfflineEventDetails, u as OfflineError, ut as CLIENT_VERSION_HEADER, v as TURN_LINK_PARAM, vt as GameAnalytics, w as TurnGame, wt as HubStatus, x as TURN_EVENT, xt as GameRecords, y as TurnCreateOptions, yt as GameInfo, z as ResumeProgress, zt as SubmitScoreOptions } from "./shared/index.js";
12
+ export { type Anchor, type Audience, type AuthResponse, type AutoNavigateTarget, type AutoPauseOptions, type AvatarChange, type AvatarHost, type AvatarModule, type AvatarRef, type AxisDef, type AxisSide, type Board, type BoardWithTop, type BufferedEvent, type BusyOptions, CLIENT_VERSION_HEADER, type CarriesLook, type ChatMode, type ClientSupport, ContentRejectedError, type Conversation, type Counts, DAILY_SINGLETON_API, DAILY_START_EVENT, type DailyAll, type DailyChallenge, type DailyCompleteResponse, type DailyCompletion, type DailyCompletionMeta, type DailyCompletions, type DailyDefinition, type DailyEventDetail, type DailyGameStatus, type DailyHost, type DailySaveInput, type DailyStartResponse, type DailyStatus, DailySystem, type DesignerResult, type DraggedSpot, type EdgeOffsets, type EndpointFields, type EndpointName, type EndpointReply, type ErrorBody, FOCUS_RING_SHADOW, type FriendEntry, type GameAnalytics, type GameInfo, type GameLeaderboards, type GamePayload, type GameRecords, type GamepadMapping, type GlobalAnalytics, type GrantBundle, type GroupDef, HUB_CLIENT_VERSION, Hub, HubAvatar, HubError, type HubErrorCode, type HubErrorDetails, type HubMenuControl, type HubMpApi, type HubNotifyApi, type HubOptions, type HubPresenceApi, type HubRaceApi, HubResume, type HubRoom, type HubRoomsApi, HubSaved, type HubSocialApi, type HubStatus, HubTurns, INPUT_SINGLETON_API, type InputConfig, type InputDef, type InputEvents, type InputHost, type InputModality, type InputOptions, type InputOverrides, type InputReading, type InputSource, InputSystem, type InputSystemOptions, type Insets, type Inventory, type InventorySnapshot, type Invite, type InviteCreated, type InviteLink, type InviteLinkMethods, type InviteOptions, type InviteResult, type JoinInfo, type JoinInfoEvent, type JoinOptions, type Json, type Launch, type LaunchTicket, type LayoutBox, type LayoutItem, type LayoutOptions, type LeaderboardEntry, type LeaderboardResult, MODALITY_ATTRIBUTE, type MeResponse, type MenuBridge, type Message, type MessagesPage, type Metrics, type MouseMapping, type NavBlurEvent, type NavElement, type NavElementKind, type NavFocusEvent, type NavTarget, type NavigableDef, type Notice, type NotifyChange, type NotifyPrefs, OUTBOX_FULL_CODE, OUTBOX_MAX_CHARS, OUTBOX_MAX_ENTRIES, OfflineApi, OfflineError, type OfflineEventDetails, type OfflineEventName, type OfflineHandler, type OfflineKindDefinition, type OfflineListener, type OfflineOp, type OpenDesignerOptions, type OpenInviteOptions, type OpenTurnGame, Overlay, type OverlayEdge, type OverlayEvent, type OverlayListener, type OverlayReason, type PageInputControl, type Party, type PlayOnlineMethods, type PlayerCard, type PlayerLite, type PlayerRef, type Presence, type PresenceInput, type PresenceKind, type Profile, type ProfilePatch, type ProfileSummary, type ProfileUpdate, type QueueOp, type QueueOpInput, type QueuedScoreOptions, type REALTIME_FAILED_EVENT, type REALTIME_FEATURE_VERSION, type REALTIME_READY_EVENT, type REALTIME_SINGLETON_API, RESUME_DEBOUNCE_MS, RESUME_MAX_STATE_BYTES, type RaceCreateOptions, type RaceDefinition, type RaceEvents, type RaceHistory, type RaceHistoryQuery, type RaceHistoryViewOptions, type RaceHudPlace, type RaceOutcome, type RaceParams, type RaceRecord, type RaceRecordPlayer, type RaceResult, type RaceResultPlayer, type RaceRuntimeApi, type RaceStart, type RaceStatValue, type RaceState, type RaceStats, type RaceStatusEvent, type Racer, type RacerResult, type RacerState, type RealtimeApi, type RealtimeErrorShape, type RealtimeHubLink, type RecentPlayer, type Rect, type Relation, type ReplayContext, type ReportInput, type ReportKind, type ReportReason, type ResumeBlocker, type ResumeEntry, type ResumeLoadOptions, type ResumeProgress, type ResumeRun, type ResumeSaveInput, type RoomChatLine, type RoomCreateOptions, type RoomEvents, type RoomInfo, type RoomListOptions, type RoomMessage, type RoomReclaimMethods, type RoomSeat, type RoomSeatChange, type RoomSelf, type RoomSendOptions, type RoomState, type RoomStateChange, type RoomStateOptions, type RuntimeAvatarApi, SAVED_CHANGE_EVENT, SAVED_CHANGE_QUIET_MS, SAVED_KIND_PARAM, SAVED_OPEN_EVENT, SAVED_OPEN_PARAM, SAVE_UNKNOWN_CODE, type SESSION_EVENT, type Save, type SaveMeta, type SavedChangeListener, type SavedCounts, type SavedDaily, type SavedEntry, type SavedKind, type SavedListOptions, type SavedOpenDetail, type SavedOpenHandler, type SavedOpened, type SavedProgress, type SavedStatus, type SchemaOutput, type ServerEvents, type Snapshot, type SnapshotResponse, type SocialConfig, type SocialCounts, type SocialEvents, type SocialMe, type SortDir, type StatResult, type Stats, type SubmitScoreOptions, type SubmitScoreResult, type Suggestion, type SuggestionStatus, type SyncConflict, type SyncResult, TURN_CHAT_EVENT, TURN_EVENT, TURN_LINK_PARAM, TURN_POLL_MS, TURN_RESYNC_EVENT, type TouchMapping, type TradeBundle, type TradeId, type TradeListOptions, type TradeNoteOptions, type TurnChatLine, type TurnCreateOptions, type TurnDeadline, TurnGame, type TurnGameEvents, type TurnGameView, type TurnMoveEvent, type TurnOutcome, type TurnSummary, UI_STACK_VERSION, UNSUPPORTED_BY_HUB, type UiStack, type UiStackHandoff, type User, type Vector, type VirtualControlType, type VirtualDef, type VirtualInputs, type VirtualOverride, boxesTouch, controlSize, createHub, type findRealtimeApi, getDaily, getInput, getUiStack, hub, isDailySystem, isInputSystem, isPageInputControl, type isRealtimeApi, isUiStack, layoutControls, type linkRealtimeToHub, type multiplayerForwarder as mp, type notifyForwarder as notify, parseInputOverrides, type presenceForwarder as presence, type raceForwarder as race, type roomsForwarder as rooms, savedGameUrl, type socialForwarder as social, trackInputModality };
package/dist/index.js CHANGED
@@ -2,5 +2,5 @@ import { a as DailySystem, i as DAILY_START_EVENT, n as getDaily, r as isDailySy
2
2
  import { t as HUB_CLIENT_VERSION } from "./shared/client-version.gen.js";
3
3
  import { a as isPageInputControl, c as layoutControls, d as MODALITY_ATTRIBUTE, f as trackInputModality, i as parseInputOverrides, l as boxesTouch, n as getInput, o as InputSystem, p as FOCUS_RING_SHADOW, r as isInputSystem, s as Overlay, t as INPUT_SINGLETON_API, u as controlSize } from "./shared/input.js";
4
4
  import { n as isUiStack, r as UI_STACK_VERSION, t as getUiStack } from "./shared/page-stack.js";
5
- import { a as RESUME_DEBOUNCE_MS, c as OUTBOX_FULL_CODE, d as OfflineApi, f as ContentRejectedError, g as UNSUPPORTED_BY_HUB, h as SAVE_UNKNOWN_CODE, i as HubResume, l as OUTBOX_MAX_CHARS, m as OfflineError, n as createHub, o as RESUME_MAX_STATE_BYTES, p as HubError, r as hub, s as CLIENT_VERSION_HEADER, t as Hub, u as OUTBOX_MAX_ENTRIES } from "./shared/src.js";
6
- export { CLIENT_VERSION_HEADER, ContentRejectedError, DAILY_SINGLETON_API, DAILY_START_EVENT, DailySystem, FOCUS_RING_SHADOW, HUB_CLIENT_VERSION, Hub, HubError, HubResume, INPUT_SINGLETON_API, InputSystem, MODALITY_ATTRIBUTE, OUTBOX_FULL_CODE, OUTBOX_MAX_CHARS, OUTBOX_MAX_ENTRIES, OfflineApi, OfflineError, Overlay, RESUME_DEBOUNCE_MS, RESUME_MAX_STATE_BYTES, SAVE_UNKNOWN_CODE, UI_STACK_VERSION, UNSUPPORTED_BY_HUB, boxesTouch, controlSize, createHub, getDaily, getInput, getUiStack, hub, isDailySystem, isInputSystem, isPageInputControl, isUiStack, layoutControls, parseInputOverrides, trackInputModality };
5
+ import { A as UNSUPPORTED_BY_HUB, C as OUTBOX_MAX_CHARS, D as HubError, E as ContentRejectedError, O as OfflineError, S as OUTBOX_FULL_CODE, T as OfflineApi, _ as savedGameUrl, a as TURN_LINK_PARAM, b as RESUME_MAX_STATE_BYTES, c as TURN_POLL_MS, d as HubSaved, f as SAVED_CHANGE_QUIET_MS, g as SAVED_OPEN_PARAM, h as SAVED_OPEN_EVENT, i as HubTurns, j as HubAvatar, k as SAVE_UNKNOWN_CODE, l as TURN_RESYNC_EVENT, m as SAVED_KIND_PARAM, n as createHub, o as TURN_CHAT_EVENT, p as SAVED_CHANGE_EVENT, r as hub, s as TURN_EVENT, t as Hub, u as TurnGame, v as HubResume, w as OUTBOX_MAX_ENTRIES, x as CLIENT_VERSION_HEADER, y as RESUME_DEBOUNCE_MS } from "./shared/src.js";
6
+ export { CLIENT_VERSION_HEADER, ContentRejectedError, DAILY_SINGLETON_API, DAILY_START_EVENT, DailySystem, FOCUS_RING_SHADOW, HUB_CLIENT_VERSION, Hub, HubAvatar, HubError, HubResume, HubSaved, HubTurns, INPUT_SINGLETON_API, InputSystem, MODALITY_ATTRIBUTE, OUTBOX_FULL_CODE, OUTBOX_MAX_CHARS, OUTBOX_MAX_ENTRIES, OfflineApi, OfflineError, Overlay, RESUME_DEBOUNCE_MS, RESUME_MAX_STATE_BYTES, SAVED_CHANGE_EVENT, SAVED_CHANGE_QUIET_MS, SAVED_KIND_PARAM, SAVED_OPEN_EVENT, SAVED_OPEN_PARAM, SAVE_UNKNOWN_CODE, TURN_CHAT_EVENT, TURN_EVENT, TURN_LINK_PARAM, TURN_POLL_MS, TURN_RESYNC_EVENT, TurnGame, UI_STACK_VERSION, UNSUPPORTED_BY_HUB, boxesTouch, controlSize, createHub, getDaily, getInput, getUiStack, hub, isDailySystem, isInputSystem, isPageInputControl, isUiStack, layoutControls, parseInputOverrides, savedGameUrl, trackInputModality };
package/dist/input.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { $ as NavigableDef, A as PageInputControl, B as InputDef, C as INPUT_SINGLETON_API, D as parseInputOverrides, E as isInputSystem, F as DraggedSpot, G as InputSource, H as InputHost, I as EdgeOffsets, J as NavBlurEvent, K as MenuBridge, L as GamepadMapping, M as Anchor, N as AxisDef, O as InputSystem, P as AxisSide, Q as NavTarget, R as GroupDef, S as FOCUS_RING_SHADOW, T as getInput, U as InputOverrides, V as InputEvents, W as InputReading, X as NavElementKind, Y as NavElement, Z as NavFocusEvent, _ as boxesTouch, a as OverlayEdge, at as VirtualInputs, b as MODALITY_ATTRIBUTE, c as OverlayReason, d as LayoutOptions, et as Rect, f as layoutControls, g as LayoutItem, h as LayoutBox, i as AutoPauseOptions, it as VirtualDef, j as isPageInputControl, k as InputSystemOptions, l as UiStack, m as Insets, n as getUiStack, nt as Vector, o as OverlayEvent, ot as VirtualOverride, p as Overlay, q as MouseMapping, r as isUiStack, rt as VirtualControlType, s as OverlayListener, t as UI_STACK_VERSION, tt as TouchMapping, u as UiStackHandoff, v as controlSize, w as InputOptions, x as trackInputModality, y as InputModality, z as InputConfig } from "./shared/input.js";
2
- export { type Anchor, type AutoPauseOptions, type AxisDef, type AxisSide, type DraggedSpot, type EdgeOffsets, FOCUS_RING_SHADOW, type GamepadMapping, type GroupDef, INPUT_SINGLETON_API, type InputConfig, type InputDef, type InputEvents, type InputHost, type InputModality, type InputOptions, type InputOverrides, type InputReading, type InputSource, InputSystem, type InputSystemOptions, type Insets, type LayoutBox, type LayoutItem, type LayoutOptions, MODALITY_ATTRIBUTE, type MenuBridge, type MouseMapping, type NavBlurEvent, type NavElement, type NavElementKind, type NavFocusEvent, type NavTarget, type NavigableDef, Overlay, type OverlayEdge, type OverlayEvent, type OverlayListener, type OverlayReason, type PageInputControl, type Rect, type TouchMapping, UI_STACK_VERSION, type UiStack, type UiStackHandoff, type Vector, type VirtualControlType, type VirtualDef, type VirtualInputs, type VirtualOverride, boxesTouch, controlSize, getInput, getUiStack, isInputSystem, isPageInputControl, isUiStack, layoutControls, parseInputOverrides, trackInputModality };
1
+ import { $ as NavTarget, A as PageInputControl, B as InputConfig, C as INPUT_SINGLETON_API, D as parseInputOverrides, E as isInputSystem, F as AxisSide, G as InputReading, H as InputEvents, I as DraggedSpot, J as MouseMapping, K as InputSource, L as EdgeOffsets, M as AutoNavigateTarget, N as Anchor, O as InputSystem, P as AxisDef, Q as NavFocusEvent, R as GamepadMapping, S as FOCUS_RING_SHADOW, T as getInput, U as InputHost, V as InputDef, W as InputOverrides, X as NavElement, Y as NavBlurEvent, Z as NavElementKind, _ as boxesTouch, a as OverlayEdge, at as VirtualDef, b as MODALITY_ATTRIBUTE, c as OverlayReason, d as LayoutOptions, et as NavigableDef, f as layoutControls, g as LayoutItem, h as LayoutBox, i as AutoPauseOptions, it as VirtualControlType, j as isPageInputControl, k as InputSystemOptions, l as UiStack, m as Insets, n as getUiStack, nt as TouchMapping, o as OverlayEvent, ot as VirtualInputs, p as Overlay, q as MenuBridge, r as isUiStack, rt as Vector, s as OverlayListener, st as VirtualOverride, t as UI_STACK_VERSION, tt as Rect, u as UiStackHandoff, v as controlSize, w as InputOptions, x as trackInputModality, y as InputModality, z as GroupDef } from "./shared/input.js";
2
+ export { type Anchor, type AutoNavigateTarget, type AutoPauseOptions, type AxisDef, type AxisSide, type DraggedSpot, type EdgeOffsets, FOCUS_RING_SHADOW, type GamepadMapping, type GroupDef, INPUT_SINGLETON_API, type InputConfig, type InputDef, type InputEvents, type InputHost, type InputModality, type InputOptions, type InputOverrides, type InputReading, type InputSource, InputSystem, type InputSystemOptions, type Insets, type LayoutBox, type LayoutItem, type LayoutOptions, MODALITY_ATTRIBUTE, type MenuBridge, type MouseMapping, type NavBlurEvent, type NavElement, type NavElementKind, type NavFocusEvent, type NavTarget, type NavigableDef, Overlay, type OverlayEdge, type OverlayEvent, type OverlayListener, type OverlayReason, type PageInputControl, type Rect, type TouchMapping, UI_STACK_VERSION, type UiStack, type UiStackHandoff, type Vector, type VirtualControlType, type VirtualDef, type VirtualInputs, type VirtualOverride, boxesTouch, controlSize, getInput, getUiStack, isInputSystem, isPageInputControl, isUiStack, layoutControls, parseInputOverrides, trackInputModality };