@diffenderfer-games/hub 2.0.0-next.7 → 2.0.0-next.9

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 (82) hide show
  1. package/CHANGELOG.md +43 -4
  2. package/dist/auto.d.ts +3 -3
  3. package/dist/auto.js +2 -2
  4. package/dist/avatar-pixi.d.ts +19 -1
  5. package/dist/avatar-pixi.d.ts.map +1 -1
  6. package/dist/avatar-pixi.js +37 -18
  7. package/dist/avatar-pixi.js.map +1 -1
  8. package/dist/avatar-svg.d.ts +1 -1
  9. package/dist/avatar-svg.js +1 -1
  10. package/dist/avatar-three.d.ts +1 -1
  11. package/dist/avatar.d.ts +3 -3
  12. package/dist/avatar.js +20 -7
  13. package/dist/avatar.js.map +1 -1
  14. package/dist/doctor/cli.mjs +58 -4
  15. package/dist/doctor/cli.mjs.map +1 -1
  16. package/dist/index.d.ts +3 -3
  17. package/dist/index.js +2 -2
  18. package/dist/shared/animator.d.ts +1 -1
  19. package/dist/shared/art.js +1 -1
  20. package/dist/shared/atlas.d.ts +5 -1
  21. package/dist/shared/atlas.d.ts.map +1 -1
  22. package/dist/shared/avatar.d.ts +10 -4
  23. package/dist/shared/avatar.d.ts.map +1 -1
  24. package/dist/shared/bridge.js +2 -2
  25. package/dist/shared/bridge.js.map +1 -1
  26. package/dist/shared/client-version.gen.js +1 -1
  27. package/dist/shared/daily.js +1 -1
  28. package/dist/shared/describe.d.ts +1 -1
  29. package/dist/shared/describe.d.ts.map +1 -1
  30. package/dist/shared/describe.js +1 -1
  31. package/dist/shared/index.d.ts +88 -11
  32. package/dist/shared/index.d.ts.map +1 -1
  33. package/dist/shared/live-canvas.js +1 -1
  34. package/dist/shared/overlays.js +1 -1
  35. package/dist/shared/overlays.js.map +1 -1
  36. package/dist/shared/pose-key.js +2 -2
  37. package/dist/shared/pose-key.js.map +1 -1
  38. package/dist/shared/social.d.ts +19 -4
  39. package/dist/shared/social.d.ts.map +1 -1
  40. package/dist/shared/src.js +178 -28
  41. package/dist/shared/src.js.map +1 -1
  42. package/dist/shared/svg-markup.js +430 -21
  43. package/dist/shared/svg-markup.js.map +1 -1
  44. package/dist/shared/svg.js +2 -2
  45. package/dist/shared/svg.js.map +1 -1
  46. package/dist/shared/types.d.ts +9 -1
  47. package/dist/shared/types.d.ts.map +1 -1
  48. package/dist/social.d.ts +2 -2
  49. package/dist/turns-rules.d.ts +2 -0
  50. package/dist/turns-rules.js +1 -0
  51. package/dist/turns.d.ts +23 -1
  52. package/dist/turns.d.ts.map +1 -1
  53. package/dist/turns.js +79 -13
  54. package/dist/turns.js.map +1 -1
  55. package/package.json +8 -2
  56. package/src/avatar/adapters/pixi-crowd.ts +45 -18
  57. package/src/avatar/atlas.ts +16 -6
  58. package/src/avatar/layout.ts +1 -1
  59. package/src/avatar/outputs/canvas.ts +2 -2
  60. package/src/avatar/outputs/svg.ts +2 -2
  61. package/src/avatar/render/body.ts +2 -2
  62. package/src/avatar/render/compose.ts +25 -8
  63. package/src/avatar/render/frame.ts +15 -2
  64. package/src/avatar/render/types.ts +9 -0
  65. package/src/avatar/render/walker-parts.ts +121 -0
  66. package/src/avatar/render/walker.ts +199 -0
  67. package/src/avatar.ts +2 -1
  68. package/src/core/rest/routes.gen.ts +1 -0
  69. package/src/core/turns/hub-turns.ts +25 -4
  70. package/src/core/turns/turn-game.ts +143 -21
  71. package/src/core/turns/your-turn-buzz.ts +69 -0
  72. package/src/core/version/client-version.gen.ts +1 -1
  73. package/src/doctor/checks.ts +2 -2
  74. package/src/doctor/cli.ts +5 -2
  75. package/src/doctor/world-check.ts +61 -0
  76. package/src/index.ts +2 -1
  77. package/src/realtime/runtime-api.ts +5 -2
  78. package/src/realtime/types.ts +1 -0
  79. package/src/realtime/world-types.ts +20 -0
  80. package/src/turns-kit/check-rules.ts +116 -17
  81. package/src/turns-rules.ts +12 -0
  82. package/src/turns.ts +4 -3
@@ -1,11 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import { existsSync, readFileSync } from "node:fs";
2
+ import { existsSync, readFileSync, statSync } from "node:fs";
3
3
  import { join, resolve } from "node:path";
4
4
  import { parseArgs } from "node:util";
5
5
  import { GAME_LABELS, GamePackageJson, HubVersion, splitGameLabels } from "@diffenderfer-games/hub-contract";
6
+ import { BUILT_IN_WORLD_TYPES, WORLD_LIMITS, parseWorldMapText } from "@diffenderfer-games/world";
6
7
  //#region src/core/version/client-version.gen.ts
7
8
  /** 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.7";
9
+ const HUB_CLIENT_VERSION = "2.0.0-next.9";
9
10
  //#endregion
10
11
  //#region src/core/version/semver.ts
11
12
  const VERSION_PATTERN = /^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;
@@ -193,6 +194,57 @@ function checkManifest(packageJson) {
193
194
  }));
194
195
  }
195
196
  //#endregion
197
+ //#region src/doctor/world-check.ts
198
+ /**
199
+ * `hub-doctor`'s world check (docs/plans/world.md §14.6): a `game.world.map`
200
+ * file must exist inside the game, be within the size limit and be a valid
201
+ * `dg-world@1` map (the same `parseWorldMapText` the hub runs at load); a
202
+ * `game.world.generate.type` the hub doesn't know is a warning.
203
+ */
204
+ /** The most map problems listed (the rest are counted). */
205
+ const MAX_LISTED_PROBLEMS = 20;
206
+ /** Checks the map file and world type `game.world` names. A manifest that doesn't parse is left to `checkManifest`. */
207
+ function checkWorld(gameDir, packageJson) {
208
+ const parsed = GamePackageJson.safeParse(packageJson);
209
+ const world = parsed.success ? parsed.data.game.world : void 0;
210
+ if (world === void 0) return [];
211
+ const findings = [];
212
+ const type = world.generate?.type;
213
+ if (type !== void 0 && !BUILT_IN_WORLD_TYPES.some((known) => known.id === type)) findings.push({
214
+ level: "warning",
215
+ check: "world",
216
+ message: `game.world.generate.type: the hub has no world type "${type}"; use one of ${BUILT_IN_WORLD_TYPES.map((known) => known.id).join(", ")}`
217
+ });
218
+ return world.map === void 0 ? findings : [...findings, ...checkMapFile(gameDir, world.map)];
219
+ }
220
+ /** One map file's findings. */
221
+ function checkMapFile(gameDir, mapFile) {
222
+ const path = join(gameDir, mapFile);
223
+ const error = (message) => ({
224
+ level: "error",
225
+ check: "world",
226
+ message: `game.world.map (${mapFile}): ${message}`
227
+ });
228
+ if (!existsSync(path) || !statSync(path).isFile()) return [error("the file does not exist (build or commit it)")];
229
+ const bytes = statSync(path).size;
230
+ if (bytes > WORLD_LIMITS.bytes) return [error(`${String(bytes)} bytes is over the ${String(WORLD_LIMITS.bytes)}-byte limit (save layers as "rle")`)];
231
+ const result = parseWorldMapText(readFileSync(path, "utf8"));
232
+ const listed = result.problems.slice(0, MAX_LISTED_PROBLEMS).map((problem) => ({
233
+ level: problem.severity === "error" ? "error" : "warning",
234
+ check: "world",
235
+ message: `game.world.map (${mapFile}): ${problem.message}`
236
+ }));
237
+ const more = result.problems.length - listed.length;
238
+ if (more > 0) listed.push(error(`and ${String(more)} more problems`));
239
+ if (!result.ok) return listed;
240
+ const { map } = result;
241
+ return [...listed, {
242
+ level: "info",
243
+ check: "world",
244
+ message: `game.world.map (${mapFile}) is a valid dg-world@1 map: ${map.title}, ${String(map.width)} × ${String(map.height)}, ${String(map.objects.length)} objects, ${String(bytes)} bytes`
245
+ }];
246
+ }
247
+ //#endregion
196
248
  //#region src/doctor/cli.ts
197
249
  /**
198
250
  * `hub-doctor`: checks a game against the hub (plan §4.3.7). Run it in a
@@ -206,7 +258,8 @@ function checkManifest(packageJson) {
206
258
  * `/_api/version` (`--hub`, default `https://diffenderfer.games`): outside
207
259
  * `supported` fails, `deprecated` warns (`--offline` skips this check);
208
260
  * - a stale vendored `src/hub/` copy or `scripts/sync-hub.mjs` warns;
209
- * - the `package.json` `game.*` block must match the contract's schema.
261
+ * - the `package.json` `game.*` block must match the contract's schema;
262
+ * - a `game.world.map` file must exist and be a valid `dg-world@1` map within the size limit.
210
263
  *
211
264
  * Exits 1 when any check fails.
212
265
  */
@@ -254,7 +307,8 @@ async function runDoctor(options) {
254
307
  if (!options.isOffline) findings.push(...checkClientVersion(installedClientVersion(options.gameDir), await fetchHubVersion(options.hubUrl, options.timeoutMs)));
255
308
  findings.push(...checkVendoredCopies(options.gameDir));
256
309
  try {
257
- findings.push(...checkManifest(readJsonFile(join(options.gameDir, "package.json"))));
310
+ const packageJson = readJsonFile(join(options.gameDir, "package.json"));
311
+ findings.push(...checkManifest(packageJson), ...checkWorld(options.gameDir, packageJson));
258
312
  } catch (failure) {
259
313
  findings.push({
260
314
  level: "error",
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","names":[],"sources":["../../src/core/version/client-version.gen.ts","../../src/core/version/semver.ts","../../src/core/version/hub-version.ts","../../src/doctor/hub-version-fetch.ts","../../src/doctor/checks.ts","../../src/doctor/cli.ts"],"mappings":"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"}
1
+ {"version":3,"file":"cli.mjs","names":[],"sources":["../../src/core/version/client-version.gen.ts","../../src/core/version/semver.ts","../../src/core/version/hub-version.ts","../../src/doctor/hub-version-fetch.ts","../../src/doctor/checks.ts","../../src/doctor/world-check.ts","../../src/doctor/cli.ts"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,6 +7,6 @@ import { a as RoomEvents, c as RoomSelf, d as RoomStateOptions, i as RoomCreateO
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 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 };
10
+ import { $ as AvatarRef, 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 AvatarChange, R as SocialMe, S as RaceParams, T as RaceStatValue, U as REALTIME_FAILED_EVENT, V as findRealtimeApi, W as REALTIME_FEATURE_VERSION, X as WorldEventName, Y as RuntimeWorldApi, Z as WorldOpName, _ as PlayerLite, a as ErrorBody, at as notifyForwarder, b as PresenceKind, c as JoinInfo, ct as HubNotifyApi, d as Message, dt as OpenInviteOptions, et as DesignerResult, f as MessagesPage, ft as PlayOnlineMethods, g as PlayerCard, h as Party, ht as SocialEvents, i as Counts, it as linkRealtimeToHub, j as RecentPlayer, k as RacerResult, l as Launch, lt as HubPresenceApi, m as NotifyPrefs, mt as SocialCounts, n as ChatMode, nt as RuntimeAvatarApi, o as FriendEntry, ot as presenceForwarder, p as NotifyChange, pt as PlayerRef, q as RealtimeApi, r as Conversation, rt as RealtimeHubLink, s as Invite, st as socialForwarder, t as Audience, tt as OpenDesignerOptions, u as LaunchTicket, ut as HubSocialApi, v as Presence, w as RaceResult, x as RaceOutcome, y as PresenceInput, z as Suggestion } from "./shared/social.js";
11
+ import { $ as TradeListOptions, $t as AvatarModule, A as TurnGame, At as HubOptions, B as HubResume, Bt as ProfileSummary, C as TURN_LINK_PARAM, Ct as Board, D as TURN_POLL_MS, Dt as GameLeaderboards, E as TURN_EVENT, Et as GameInfo, F as HubSaved, Ft as LeaderboardEntry, G as ResumeLoadOptions, Gt as Stats, H as RESUME_MAX_STATE_BYTES, Ht as SaveMeta, I as SAVED_CHANGE_QUIET_MS, It as LeaderboardResult, J as ResumeSaveInput, Jt as User, K as ResumeProgress, Kt as SubmitScoreOptions, L as SavedChangeListener, Lt as MeResponse, M as TurnGameOptions, Mt as Inventory, N as TurnMoveEvent, Nt as InventorySnapshot, O as TURN_QUIET_MS, Ot as GameRecords, P as TurnOutcome, Pt as Json, Q as TradeId, Qt as AvatarHost, R as SavedOpenDetail, Rt as Metrics, S as HubTurns, St as BufferedEvent, T as TURN_CHAT_EVENT, Tt as GameAnalytics, U as ResumeBlocker, Ut as SnapshotResponse, V as RESUME_DEBOUNCE_MS, Vt as Save, W as ResumeEntry, Wt as SortDir, X as GrantBundle, Xt as EndpointName, Y as HubMenuControl, Yt as EndpointFields, Z as TradeBundle, Zt as EndpointReply, _ as UNSUPPORTED_BY_HUB, _t as CLIENT_VERSION_HEADER, a as HUB_CLIENT_VERSION, at as SyncResult, b as hub, bt as QueueOpInput, c as isNewlyDue, ct as OfflineEventDetails, d as ContentRejectedError, dt as OfflineOp, en as HubAvatar, et as TradeNoteOptions, f as HubError, ft as OUTBOX_MAX_CHARS, g as SAVE_UNKNOWN_CODE, gt as ReplayContext, h as OfflineError, ht as OfflineKindDefinition, i as TurnGameView, it as SyncConflict, j as TurnGameEvents, jt as HubStatus, k as TURN_RESYNC_EVENT, kt as GlobalAnalytics, l as readYourTurnBuzz, lt as OfflineEventName, m as HubErrorDetails, mt as OfflineHandler, n as TurnChatLine, nt as ProfileUpdate, o as YOUR_TURN_BUZZ, ot as OfflineApi, p as HubErrorCode, pt as OUTBOX_MAX_ENTRIES, q as ResumeRun, qt as SubmitScoreResult, r as TurnDeadline, rt as StatResult, s as YOUR_TURN_BUZZ_KEY, st as OUTBOX_FULL_CODE, t as OpenTurnGame, tn as CarriesLook, tt as AuthResponse, u as saveYourTurnBuzz, ut as OfflineListener, v as Hub, vt as ProfilePatch, w as TurnCreateOptions, wt as BoardWithTop, x as ClientSupport, xt as QueuedScoreOptions, y as createHub, yt as QueueOp, z as SavedOpenHandler, zt as Profile } 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, type RuntimeWorldApi, 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_QUIET_MS, TURN_RESYNC_EVENT, type TouchMapping, type TradeBundle, type TradeId, type TradeListOptions, type TradeNoteOptions, type TurnChatLine, type TurnCreateOptions, type TurnDeadline, TurnGame, type TurnGameEvents, type TurnGameOptions, 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, type WorldEventName, type WorldOpName, YOUR_TURN_BUZZ, YOUR_TURN_BUZZ_KEY, boxesTouch, controlSize, createHub, type findRealtimeApi, getDaily, getInput, getUiStack, hub, isDailySystem, isInputSystem, isNewlyDue, isPageInputControl, type isRealtimeApi, isUiStack, layoutControls, type linkRealtimeToHub, type multiplayerForwarder as mp, type notifyForwarder as notify, parseInputOverrides, type presenceForwarder as presence, type raceForwarder as race, readYourTurnBuzz, type roomsForwarder as rooms, saveYourTurnBuzz, 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 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 };
5
+ import { A as OUTBOX_MAX_ENTRIES, C as savedGameUrl, D as CLIENT_VERSION_HEADER, E as RESUME_MAX_STATE_BYTES, F as SAVE_UNKNOWN_CODE, I as UNSUPPORTED_BY_HUB, L as HubAvatar, M as ContentRejectedError, N as HubError, O as OUTBOX_FULL_CODE, P as OfflineError, S as SAVED_OPEN_PARAM, T as RESUME_DEBOUNCE_MS, _ as HubSaved, a as TURN_LINK_PARAM, b as SAVED_KIND_PARAM, c as TURN_POLL_MS, d as TurnGame, f as YOUR_TURN_BUZZ, g as saveYourTurnBuzz, h as readYourTurnBuzz, i as HubTurns, j as OfflineApi, k as OUTBOX_MAX_CHARS, l as TURN_QUIET_MS, m as isNewlyDue, n as createHub, o as TURN_CHAT_EVENT, p as YOUR_TURN_BUZZ_KEY, r as hub, s as TURN_EVENT, t as Hub, u as TURN_RESYNC_EVENT, v as SAVED_CHANGE_QUIET_MS, w as HubResume, x as SAVED_OPEN_EVENT, y as SAVED_CHANGE_EVENT } 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_QUIET_MS, TURN_RESYNC_EVENT, TurnGame, UI_STACK_VERSION, UNSUPPORTED_BY_HUB, YOUR_TURN_BUZZ, YOUR_TURN_BUZZ_KEY, boxesTouch, controlSize, createHub, getDaily, getInput, getUiStack, hub, isDailySystem, isInputSystem, isNewlyDue, isPageInputControl, isUiStack, layoutControls, parseInputOverrides, readYourTurnBuzz, saveYourTurnBuzz, savedGameUrl, trackInputModality };
@@ -1,4 +1,4 @@
1
- import { _ as FaceParams, a as LookDir, c as Pose, h as Expression, n as BodyPose, o as LookLike, s as Point, u as StatusProp } from "./types.js";
1
+ import { c as Point, d as StatusProp, g as Expression, l as Pose, n as BodyPose, o as LookDir, s as LookLike, v as FaceParams } from "./types.js";
2
2
  //#region src/avatar/animator/reactions.d.ts
3
3
  /** A reaction name. */
4
4
  type Reaction = 'nod' | 'shake' | 'bounce' | 'cheer' | 'gasp' | 'flinch' | 'shrug' | 'sleep' | 'wave';
@@ -1,4 +1,4 @@
1
- import { c as blob, d as scallop, o as Path, s as arc, u as roundedRect } from "./svg-markup.js";
1
+ import { c as Path, f as roundedRect, l as arc, p as scallop, u as blob } from "./svg-markup.js";
2
2
  /** Every facial-hair part by name. */
3
3
  const BEARD_ART = {
4
4
  none: {},
@@ -1,4 +1,4 @@
1
- import { n as BodyPose, o as LookLike, r as Facing, u as StatusProp } from "./types.js";
1
+ import { d as StatusProp, i as Figure, n as BodyPose, r as Facing, s as LookLike } from "./types.js";
2
2
  import { t as SceneNode } from "./scene.js";
3
3
  //#region src/avatar/outputs/canvas-paint.d.ts
4
4
  /** A 2D context from a canvas or an `OffscreenCanvas`. */
@@ -93,6 +93,8 @@ interface AtlasOptions {
93
93
  readonly scale?: number;
94
94
  /** The light rim for dark floors (default on). */
95
95
  readonly rim?: boolean;
96
+ /** The figure every frame draws (default `blob`); worlds use `walker`. */
97
+ readonly figure?: Figure;
96
98
  /** Makes page canvases (tests, workers); default an `OffscreenCanvas` or DOM canvas. */
97
99
  readonly makeCanvas?: (size: number) => {
98
100
  readonly canvas: CanvasImageSource;
@@ -105,6 +107,8 @@ declare class AvatarAtlas {
105
107
  readonly scale: number;
106
108
  private readonly maxPages;
107
109
  private readonly rim;
110
+ private readonly figure;
111
+ private readonly box;
108
112
  private readonly makeCanvas;
109
113
  private readonly pages;
110
114
  private readonly frames;
@@ -1 +1 @@
1
- {"version":3,"file":"atlas.d.ts","names":[],"sources":["../../src/avatar/outputs/canvas-paint.ts","../../src/avatar/overlays.ts","../../src/avatar/atlas.ts"],"mappings":";;;;KAUY,QAAQ,2BAA2B;;KAGnC,gBAAgB,eAAe;WAA8B,QAAQ;WAA4B,KAAK;;;iBAgGlG,WAAW,KAAK,OAAO,gBAAgB,aAAa,QAAQ;;;;UCpG3D;WACN,gBAAgB;WAChB;WACA;;WAEA;;;iBAUK,QAAQ;WAAc;WAAuB;WAA2B;WAAwB;IAAoB;;KAmBxH;;iBAmBI,eAAe;WAAc;WAAuB,OAAO;WAAuB;IAAkB;;iBAmBpG,YAAY,gBAAgB;;KAgBhC;;iBAGI,eAAe,OAAO,gBAAgB;;iBAgBtC,cAAc;WAAc;WAA0B;IAA4B;;cAWrF;;;;;;;;;;UC/GI;WACN,MAAM;WACN,SAAS;WACT,OAAO;;WAEP;;WAEA;WACA,SAAS;;WAET;;;UAIM;WACN;WACA,QAAQ;WACR;WACA;WACA;WACA;;WAEA;WACA;;WAEA;;;UAIM;;WAEN;;WAEA;;WAEA;;WAEA;;WAEA,cAAc;aAA4B,QAAQ;aAA4B,KAAK;;;;cAmBjF;WACF;WACA;mBACQ;mBACA;mBACA;mBACA;mBACA;mBACA;;mBAEA;UACT;EAEI,YAAA,OAAM;;EASlB,MAAM,KAAK,WAAW;;UAcd;;EAWR,KAAK,mBAAc;;MAgBf;;MAKA,oBAAoB;UAIhB;UAQA;UAyCA;;;iBAsCM,YAAY,OAAM,eAAoB"}
1
+ {"version":3,"file":"atlas.d.ts","names":[],"sources":["../../src/avatar/outputs/canvas-paint.ts","../../src/avatar/overlays.ts","../../src/avatar/atlas.ts"],"mappings":";;;;KAUY,QAAQ,2BAA2B;;KAGnC,gBAAgB,eAAe;WAA8B,QAAQ;WAA4B,KAAK;;;iBAgGlG,WAAW,KAAK,OAAO,gBAAgB,aAAa,QAAQ;;;;UCpG3D;WACN,gBAAgB;WAChB;WACA;;WAEA;;;iBAUK,QAAQ;WAAc;WAAuB;WAA2B;WAAwB;IAAoB;;KAmBxH;;iBAmBI,eAAe;WAAc;WAAuB,OAAO;WAAuB;IAAkB;;iBAmBpG,YAAY,gBAAgB;;KAgBhC;;iBAGI,eAAe,OAAO,gBAAgB;;iBAgBtC,cAAc;WAAc;WAA0B;IAA4B;;cAWrF;;;;;;;;;;UC9GI;WACN,MAAM;WACN,SAAS;WACT,OAAO;;WAEP;;WAEA;WACA,SAAS;;WAET;;;UAIM;WACN;WACA,QAAQ;WACR;WACA;WACA;WACA;;WAEA;WACA;;WAEA;;;UAIM;;WAEN;;WAEA;;WAEA;;WAEA;;WAEA,SAAS;;WAET,cAAc;aAA4B,QAAQ;aAA4B,KAAK;;;;cAqBjF;WACF;WACA;mBACQ;mBACA;mBACA;mBACA;mBACA;mBACA;mBACA;mBACA;;mBAEA;UACT;EAEI,YAAA,OAAM;;EAWlB,MAAM,KAAK,WAAW;;UAcd;;EAWR,KAAK,mBAAc;;MAgBf;;MAKA,oBAAoB;UAIhB;UAQA;UAyCA;;;iBAuCM,YAAY,OAAM,eAAoB"}
@@ -1,4 +1,4 @@
1
- import { _ as FaceParams, a as LookDir, b as isExpression, c as Pose, d as View, f as BrowParams, g as FaceExtra, h as Expression, i as Frame, l as RenderOptions, m as EXPRESSION_NAMES, n as BodyPose, o as LookLike, p as EXPRESSIONS, r as Facing, s as Point, t as Anchor, u as StatusProp, v as MouthParams, x as mix, y as expressionFromEmote } from "./types.js";
1
+ import { S as mix, _ as FaceExtra, a as Frame, b as expressionFromEmote, c as Point, d as StatusProp, f as View, g as Expression, h as EXPRESSION_NAMES, i as Figure, l as Pose, m as EXPRESSIONS, n as BodyPose, o as LookDir, p as BrowParams, r as Facing, s as LookLike, t as Anchor, u as RenderOptions, v as FaceParams, x as isExpression, y as MouthParams } from "./types.js";
2
2
  import { t as SceneNode } from "./scene.js";
3
3
  import { a as ActivityIcon, c as overlays, i as createAtlas, l as Ctx2D, n as AtlasOptions, o as Overlay, r as AvatarAtlas, s as ReactionGlyph, t as AtlasFrame, u as paintNodes } from "./atlas.js";
4
4
  import { a as renderSvg, c as composeAvatar, i as ready, n as describe, o as Composed, r as onArtReady, s as HEAD_Y, t as avatarEmoji } from "./describe.js";
@@ -47,7 +47,7 @@ declare function renderElement(like: LookLike, opts?: RenderOptions, doc?: Docum
47
47
  * bubbles, props and world objects with these, never with magic numbers.
48
48
  * Rig units (a 100-unit head), feet at (0, 0), y down.
49
49
  */
50
- declare function layout(like: LookLike, opts?: Pick<RenderOptions, 'facing' | 'view' | 'pose'>): Readonly<Record<Anchor, Point>>;
50
+ declare function layout(like: LookLike, opts?: Pick<RenderOptions, 'facing' | 'view' | 'pose' | 'figure'>): Readonly<Record<Anchor, Point>>;
51
51
  /** The facing for a movement vector (screen space, y down), in 8 or 4 directions. */
52
52
  declare function facingFrom(dx: number, dy: number, dirs?: 4 | 8): Facing;
53
53
  /**
@@ -80,6 +80,12 @@ declare const catalog: {
80
80
  revision: number;
81
81
  };
82
82
  //#endregion
83
+ //#region src/avatar/render/walker.d.ts
84
+ /** The head's scale on a walker (the blob draws it at 1). */
85
+ declare const WALKER_HEAD_SCALE = 0.58;
86
+ /** How far below the seat a sitter's feet reach (rig units). */
87
+ declare const WALKER_SEAT_DROP = 26;
88
+ //#endregion
83
89
  //#region src/avatar/outputs/svg-markup.d.ts
84
90
  /** A scene as SVG markup plus the `<defs>` it needs. */
85
91
  declare function sceneToSvg(nodes: readonly SceneNode[], prefix: string): {
@@ -101,7 +107,7 @@ declare function deltaE(a: string, b: string): number;
101
107
  /** WCAG contrast ratio between two colours. */
102
108
  declare function contrast(a: string, b: string): number;
103
109
  declare namespace avatar_d_exports {
104
- export { ACCESSORY_SLOTS, AccessorySlot, ActivityIcon, Anchor, Animator, AnimatorOptions, At, AtlasFrame, AtlasOptions, AvatarAtlas, AvatarElement, AvatarLook$1 as AvatarLook, BodyPose, BrowParams, CATALOG, CATALOG_REVISION$1 as CATALOG_REVISION, CanvasPlacement, CatalogEntry$1 as CatalogEntry, Composed, Ctx2D, DEFAULT_GEN, DecodedLook, EXPRESSIONS, EXPRESSION_NAMES, Expression, FRAME_PRESETS, FaceExtra, FaceParams, Facing, Feeling, Frame, HEAD_Y, LOOK_CODE_PREFIX, LookAccessory, LookColour, LookDir, LookLike, LookPart, LookProblem, MouthParams, Overlay, PALETTES$1 as PALETTES, PaletteName, PartCategory$1 as PartCategory, Point, Pose, Preset, REACTIONS, RandomLookOptions, Reaction, ReactionGlyph, RenderOptions, Rng, SECOND_COLOUR_CODE, SceneNode, StatusProp, View, animator, avatarEmoji, canonicalLook, catalog, composeAvatar, contrast, createAtlas, decodeLook$1 as decodeLook, defaultLook$1 as defaultLook, defineAvatarElement, deltaE, describe, distinctLooks, encodeLook$1 as encodeLook, expressionFromEmote, facingFrom, isExpression, isLookCode$1 as isLookCode, isTinted, isValidLook, layout, lightness, lookProblem, lookToward, mix, normaliseHex$1 as normaliseHex, onArtReady, overlaySvg, overlays, paintNodes, paintOverlay, partById, partName$1 as partName, partsOf$1 as partsOf, randomLook, ready, render, resolveColour$1 as resolveColour, sameLook, sceneToSvg, seededRng, toCode, toLook };
110
+ export { ACCESSORY_SLOTS, AccessorySlot, ActivityIcon, Anchor, Animator, AnimatorOptions, At, AtlasFrame, AtlasOptions, AvatarAtlas, AvatarElement, AvatarLook$1 as AvatarLook, BodyPose, BrowParams, CATALOG, CATALOG_REVISION$1 as CATALOG_REVISION, CanvasPlacement, CatalogEntry$1 as CatalogEntry, Composed, Ctx2D, DEFAULT_GEN, DecodedLook, EXPRESSIONS, EXPRESSION_NAMES, Expression, FRAME_PRESETS, FaceExtra, FaceParams, Facing, Feeling, Figure, Frame, HEAD_Y, LOOK_CODE_PREFIX, LookAccessory, LookColour, LookDir, LookLike, LookPart, LookProblem, MouthParams, Overlay, PALETTES$1 as PALETTES, PaletteName, PartCategory$1 as PartCategory, Point, Pose, Preset, REACTIONS, RandomLookOptions, Reaction, ReactionGlyph, RenderOptions, Rng, SECOND_COLOUR_CODE, SceneNode, StatusProp, View, WALKER_HEAD_SCALE, WALKER_SEAT_DROP, animator, avatarEmoji, canonicalLook, catalog, composeAvatar, contrast, createAtlas, decodeLook$1 as decodeLook, defaultLook$1 as defaultLook, defineAvatarElement, deltaE, describe, distinctLooks, encodeLook$1 as encodeLook, expressionFromEmote, facingFrom, isExpression, isLookCode$1 as isLookCode, isTinted, isValidLook, layout, lightness, lookProblem, lookToward, mix, normaliseHex$1 as normaliseHex, onArtReady, overlaySvg, overlays, paintNodes, paintOverlay, partById, partName$1 as partName, partsOf$1 as partsOf, randomLook, ready, render, resolveColour$1 as resolveColour, sameLook, sceneToSvg, seededRng, toCode, toLook };
105
111
  }
106
112
  /** Every output: SVG markup, a live element, Canvas 2D, a bitmap or a data URL. */
107
113
  declare const render: {
@@ -113,5 +119,5 @@ declare const render: {
113
119
  dataUrl: typeof renderDataUrl;
114
120
  };
115
121
  //#endregion
116
- export { lookToward as $, isValidLook as A, seededRng as B, canonicalLook as C, encodeLook$1 as D, distinctLooks as E, partsOf$1 as F, toLook as G, deltaE as H, randomLook as I, overlaySvg as J, sceneToSvg as K, render as L, normaliseHex$1 as M, partById as N, isLookCode$1 as O, partName$1 as P, layout as Q, resolveColour$1 as R, avatar_d_exports as S, defaultLook$1 as T, lightness as U, contrast as V, toCode as W, defineAvatarElement as X, paintOverlay as Y, facingFrom as Z, PartCategory$1 as _, CATALOG_REVISION$1 as a, Rng as b, DecodedLook as c, LookAccessory as d, AvatarElement as et, LookColour as f, PaletteName as g, PALETTES$1 as h, CATALOG as i, lookProblem as j, isTinted as k, FRAME_PRESETS as l, LookProblem as m, AccessorySlot as n, CatalogEntry$1 as o, LookPart as p, catalog as q, AvatarLook$1 as r, DEFAULT_GEN as s, ACCESSORY_SLOTS as t, CanvasPlacement as tt, LOOK_CODE_PREFIX as u, Preset as v, decodeLook$1 as w, SECOND_COLOUR_CODE as x, RandomLookOptions as y, sameLook as z };
122
+ export { facingFrom as $, isValidLook as A, seededRng as B, canonicalLook as C, encodeLook$1 as D, distinctLooks as E, partsOf$1 as F, toLook as G, deltaE as H, randomLook as I, WALKER_SEAT_DROP as J, sceneToSvg as K, render as L, normaliseHex$1 as M, partById as N, isLookCode$1 as O, partName$1 as P, defineAvatarElement as Q, resolveColour$1 as R, avatar_d_exports as S, defaultLook$1 as T, lightness as U, contrast as V, toCode as W, overlaySvg as X, catalog as Y, paintOverlay as Z, PartCategory$1 as _, CATALOG_REVISION$1 as a, Rng as b, DecodedLook as c, LookAccessory as d, layout as et, LookColour as f, PaletteName as g, PALETTES$1 as h, CATALOG as i, lookProblem as j, isTinted as k, FRAME_PRESETS as l, LookProblem as m, AccessorySlot as n, AvatarElement as nt, CatalogEntry$1 as o, LookPart as p, WALKER_HEAD_SCALE as q, AvatarLook$1 as r, CanvasPlacement as rt, DEFAULT_GEN as s, ACCESSORY_SLOTS as t, lookToward as tt, LOOK_CODE_PREFIX as u, Preset as v, decodeLook$1 as w, SECOND_COLOUR_CODE as x, RandomLookOptions as y, sameLook as z };
117
123
  //# sourceMappingURL=avatar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.d.ts","names":[],"sources":["../../src/avatar/outputs/bitmap.ts","../../src/avatar/outputs/canvas.ts","../../src/avatar/outputs/element.ts","../../src/avatar/layout.ts","../../src/avatar/outputs/custom-element.ts","../../src/avatar/outputs/overlay-svg.ts","../../src/avatar/catalog-view.ts","../../src/avatar/outputs/svg-markup.ts","../../src/avatar/look-like.ts","../../src/avatar/colour.ts","../../src/avatar.ts"],"mappings":";;;;;;;;;iBAsDgB,aAAa,MAAM,UAAU,OAAM,gBAAqB,QAAQ;;iBAK1D,cAAc,MAAM,UAAU,OAAM,eAAoB,uBAA8B;;;;UC5B3F,wBAAwB;WAC9B;WACA;;;iBAgBK,aAAa,KAAK,OAAO,MAAM,UAAU,MAAM;;iBAM/C,eAAe,KAAK,OAAO,MAAM,UAAU,MAAM;WAA2B;WAAoB;WAAoB;;;;;UC3CnH;;WAEN,IAAI;;EAEb,OAAO,MAAM;;EAEb,QAAQ,MAAM;;EAEd,WAAW,MAAM;;;iBAIH,cAAc,MAAM,UAAU,OAAM,eAAoB,MAAK,WAAsB;;;;;;;;iBCdnF,OAAO,MAAM,UAAU,OAAM,KAAK,6CAAkD,SAAS,OAAO,QAAQ;;iBAQ5G,WAAW,YAAY,YAAY,eAAkB;;;;;iBAerD,WAAW,MAAM,OAAO,IAAI,OAAO,oBAAe;;;;;;;iBCKlD,oBAAoB;;;;iBC9BpB,WAAW,SAAS,SAAS;;iBAO7B,aAAa,KAAK,OAAO,SAAS,SAAS,aAAa,aAAa;;;;cCXxE;;EAEK,MAAA,UAAA,wBAAwB;;;;;;;;;iBCmG1B,WAAW,gBAAgB,aAAa;WAA4B;WAAuB;;;;;iBChF3F,OAAO,MAAM,WAAW;;iBAiBxB,OAAO,MAAM;;;;cCmChB,YAAa;;iBAGV,OAAO,WAAW;;iBAwBlB,SAAS,WAAW;;;;;cClDvB"}
1
+ {"version":3,"file":"avatar.d.ts","names":[],"sources":["../../src/avatar/outputs/bitmap.ts","../../src/avatar/outputs/canvas.ts","../../src/avatar/outputs/element.ts","../../src/avatar/layout.ts","../../src/avatar/outputs/custom-element.ts","../../src/avatar/outputs/overlay-svg.ts","../../src/avatar/catalog-view.ts","../../src/avatar/render/walker.ts","../../src/avatar/outputs/svg-markup.ts","../../src/avatar/look-like.ts","../../src/avatar/colour.ts","../../src/avatar.ts"],"mappings":";;;;;;;;;iBAsDgB,aAAa,MAAM,UAAU,OAAM,gBAAqB,QAAQ;;iBAK1D,cAAc,MAAM,UAAU,OAAM,eAAoB,uBAA8B;;;;UC5B3F,wBAAwB;WAC9B;WACA;;;iBAgBK,aAAa,KAAK,OAAO,MAAM,UAAU,MAAM;;iBAM/C,eAAe,KAAK,OAAO,MAAM,UAAU,MAAM;WAA2B;WAAoB;WAAoB;;;;;UC3CnH;;WAEN,IAAI;;EAEb,OAAO,MAAM;;EAEb,QAAQ,MAAM;;EAEd,WAAW,MAAM;;;iBAIH,cAAc,MAAM,UAAU,OAAM,eAAoB,MAAK,WAAsB;;;;;;;;iBCdnF,OAAO,MAAM,UAAU,OAAM,KAAK,wDAA6D,SAAS,OAAO,QAAQ;;iBAQvH,WAAW,YAAY,YAAY,eAAkB;;;;;iBAerD,WAAW,MAAM,OAAO,IAAI,OAAO,oBAAe;;;;;;;iBCKlD,oBAAoB;;;;iBC9BpB,WAAW,SAAS,SAAS;;iBAO7B,aAAa,KAAK,OAAO,SAAS,SAAS,aAAa,aAAa;;;;cCXxE;;EAEK,MAAA,UAAA,wBAAwB;;;;;;;;;cCa7B;;cAGA;;;;iBCmFG,WAAW,gBAAgB,aAAa;WAA4B;WAAuB;;;;;iBChF3F,OAAO,MAAM,WAAW;;iBAiBxB,OAAO,MAAM;;;;cCmChB,YAAa;;iBAGV,OAAO,WAAW;;iBAwBlB,SAAS,WAAW;;;;;cCjDvB"}
@@ -49,10 +49,10 @@ function hubLink() {
49
49
  /**
50
50
  * The realtime feature version the runtime reports in {@link RealtimeApi.version}.
51
51
  * 2 added races; 3 added invite links and taking back a held seat; 4 added
52
- * "Play online" (tournaments); 5 added avatars (the designer and `ev:avatar`).
52
+ * "Play online" (tournaments); 5 added avatars (the designer and `ev:avatar`); 6 added the world (`world`).
53
53
  * A client feature-detects newer additions with it (or by the optional method).
54
54
  */
55
- const REALTIME_FEATURE_VERSION = 5;
55
+ const REALTIME_FEATURE_VERSION = 6;
56
56
  /**
57
57
  * The cross-bundle shape number of the `rt` page singleton (plan §4.4). The
58
58
  * runtime registers with it through `claimSingleton`; bump it only when the
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.js","names":[],"sources":["../../src/realtime/hub-link.ts","../../src/realtime/runtime-api.ts","../../src/realtime/page-runtime.ts","../../src/realtime/bridge.ts"],"mappings":"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"}
1
+ {"version":3,"file":"bridge.js","names":[],"sources":["../../src/realtime/hub-link.ts","../../src/realtime/runtime-api.ts","../../src/realtime/page-runtime.ts","../../src/realtime/bridge.ts"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  //#region src/core/version/client-version.gen.ts
2
2
  /** This client's package version, sent as `x-hub-client` on REST calls and `client` in `hello`. */
3
- const HUB_CLIENT_VERSION = "2.0.0-next.7";
3
+ const HUB_CLIENT_VERSION = "2.0.0-next.9";
4
4
  //#endregion
5
5
  export { HUB_CLIENT_VERSION as t };
6
6
 
@@ -291,7 +291,7 @@ let claimedDaily = null;
291
291
  function getDaily(host) {
292
292
  claimedDaily ?? (claimedDaily = claimSingleton({
293
293
  name: "daily",
294
- version: "2.0.0-next.7",
294
+ version: "2.0.0-next.9",
295
295
  api: 2,
296
296
  create: () => new DailySystem(host),
297
297
  isInstance: isDailySystem
@@ -1,4 +1,4 @@
1
- import { l as RenderOptions, o as LookLike, s as Point, t as Anchor } from "./types.js";
1
+ import { c as Point, s as LookLike, t as Anchor, u as RenderOptions } from "./types.js";
2
2
  import { t as SceneNode } from "./scene.js";
3
3
  import { AvatarLook } from "@diffenderfer-games/hub-contract/avatar";
4
4
  //#region src/avatar/render/compose.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"describe.d.ts","names":[],"sources":["../../src/avatar/render/compose.ts","../../src/avatar/outputs/svg.ts","../../src/avatar/art-store.ts","../../src/avatar/describe.ts"],"mappings":";;;;;cA0Ba;;UASI;WACN,gBAAgB;WAChB,SAAS,SAAS,OAAO,QAAQ;;;iBAuN5B,cAAc,MAAM,mBAAmB,OAAM,gBAAqB;;;;iBCvNlE,UAAU,MAAM,UAAU,OAAM;;;;iBCpBhC,SAAS;;iBAYT,WAAW;;;;iBC+BX,SAAS,MAAM;;iBASf,YAAY,MAAM"}
1
+ {"version":3,"file":"describe.d.ts","names":[],"sources":["../../src/avatar/render/compose.ts","../../src/avatar/outputs/svg.ts","../../src/avatar/art-store.ts","../../src/avatar/describe.ts"],"mappings":";;;;;cA4Ba;;UASI;WACN,gBAAgB;WAChB,SAAS,SAAS,OAAO,QAAQ;;;iBAiO5B,cAAc,MAAM,mBAAmB,OAAM,gBAAqB;;;;iBCnOlE,UAAU,MAAM,UAAU,OAAM;;;;iBCpBhC,SAAS;;iBAYT,WAAW;;;;iBC+BX,SAAS,MAAM;;iBASf,YAAY,MAAM"}
@@ -1,4 +1,4 @@
1
- import { F as toLook, N as lightness } from "./svg-markup.js";
1
+ import { F as lightness, L as toLook } from "./svg-markup.js";
2
2
  import { findPreset, partName, resolveColour } from "@diffenderfer-games/hub-contract/avatar";
3
3
  //#region src/avatar/describe.ts
4
4
  /**
@@ -4,9 +4,9 @@ import { O as InputSystem, n as getUiStack } from "./input.js";
4
4
  import { o as multiplayerForwarder } from "./mp.js";
5
5
  import { f as raceForwarder } from "./race.js";
6
6
  import { n as roomsForwarder } from "./rooms.js";
7
- import { Q as OpenDesignerOptions, X as AvatarRef, Y as AvatarChange, Z as DesignerResult, it as socialForwarder, nt as notifyForwarder, rt as presenceForwarder } from "./social.js";
7
+ import { $ as AvatarRef, Q as AvatarChange, at as notifyForwarder, et as DesignerResult, ot as presenceForwarder, st as socialForwarder, tt as OpenDesignerOptions } from "./social.js";
8
8
  import { AvatarLook } from "@diffenderfer-games/hub-contract/avatar";
9
- import { Board, Board as Board$1, CreateTurnGame, ErrorCode, GameInfo, GameLeaderboards, GameRecords, HubVersion, Inventory, Inventory as Inventory$1, Json, Json as Json$1, LeaderboardEntry, Metrics, Metrics as Metrics$1, MyAvatar, OpenTurnGame, OpenTurnGame as OpenTurnGame$1, PublicEndpoints, RejectReason, ResumeSlot, ResumeSummary, SavedCounts, SessionUser, SortDir, SortDir as SortDir$1, Stats, Stats as Stats$1, TurnChatLine, TurnChatLine as TurnChatLine$1, TurnDeadline, TurnDeadline as TurnDeadline$1, TurnGameView, TurnGameView as TurnGameView$1, TurnSummary } from "@diffenderfer-games/hub-contract";
9
+ import { Board, Board as Board$1, CreateTurnGame, ErrorCode, GameInfo, GameLeaderboards, GameRecords, HubVersion, Inventory, Inventory as Inventory$1, Json, Json as Json$1, LeaderboardEntry, Metrics, Metrics as Metrics$1, MyAvatar, OpenTurnGame, OpenTurnGame as OpenTurnGame$1, PublicEndpoints, RejectReason, ResumeSlot, ResumeSummary, SavedCounts, SessionUser, SortDir, SortDir as SortDir$1, Stats, Stats as Stats$1, TurnChatLine, TurnChatLine as TurnChatLine$1, TurnDeadline, TurnDeadline as TurnDeadline$1, TurnGameView, TurnGameView as TurnGameView$1, TurnSummary, TurnTournament } from "@diffenderfer-games/hub-contract";
10
10
  import { CallReturn, ClientData } from "@ayepi/core/client";
11
11
  //#region src/core/page-account.d.ts
12
12
  /** The signed-in player as the page heard it. */
@@ -1334,6 +1334,8 @@ declare const TURN_RESYNC_EVENT = "hub:turn-resync";
1334
1334
  declare const TURN_CHAT_EVENT = "hub:turn-chat";
1335
1335
  /** How often a page without the live runtime looks for moves, ms. */
1336
1336
  declare const TURN_POLL_MS = 20000;
1337
+ /** How long a visible page waiting on another player's move may hear nothing before it fetches the game again, ms. */
1338
+ declare const TURN_QUIET_MS = 15000;
1337
1339
  /** A game's end: the winning seats, and optionally places and scores by seat. */
1338
1340
  type TurnOutcome = NonNullable<TurnGameView['outcome']>;
1339
1341
  /** One move as this seat saw it. */
@@ -1388,6 +1390,11 @@ interface TurnGameHost {
1388
1390
  isLive(): boolean;
1389
1391
  }
1390
1392
  type Listener<Payload> = (payload: Payload) => void;
1393
+ /** How `hub.turns` sets a game up. */
1394
+ interface TurnGameOptions {
1395
+ /** Whether this page wants the "your turn" buzz (`hub.turns.setYourTurnBuzz`); read at each buzz. Default on. */
1396
+ readonly isBuzzOn?: () => boolean;
1397
+ }
1391
1398
  /** One online game. `View`, `Move` and `Ev` (its events) are the game's own JSON types from its rules. */
1392
1399
  declare class TurnGame<View = GamePayload, Move extends GamePayload = GamePayload, Ev = GamePayload> {
1393
1400
  readonly id: string;
@@ -1399,7 +1406,12 @@ declare class TurnGame<View = GamePayload, Move extends GamePayload = GamePayloa
1399
1406
  private catchingUp;
1400
1407
  /** The move count this page's own move in flight will make (its live echo is not another player's move). */
1401
1408
  private ownSeq;
1402
- constructor(host: TurnGameHost, initial: TurnGameView);
1409
+ /** When the page last heard from the hub about this game (a live event or an answer), epoch ms. */
1410
+ private heardAt;
1411
+ private readonly options;
1412
+ /** This game's own "your turn" buzz switch (`setYourTurnBuzz`). */
1413
+ private isBuzzOn;
1414
+ constructor(host: TurnGameHost, initial: TurnGameView, options?: TurnGameOptions);
1403
1415
  /** Whose move it is, the seats and the deadline. */
1404
1416
  get summary(): TurnSummary;
1405
1417
  /** This seat's view, from the game's rules (`null` before the game starts). */
@@ -1414,12 +1426,29 @@ declare class TurnGame<View = GamePayload, Move extends GamePayload = GamePayloa
1414
1426
  get chatMode(): TurnGameView['chatMode'];
1415
1427
  /** The link others can take a seat with (the creator's, while seats are open), else `null`. */
1416
1428
  get link(): string | null;
1429
+ /** Whether this player may move now without it being their turn (the rules' `mayAct`: a jump-in, calling or catching "UNO"): offer that action. */
1430
+ get mayActNow(): boolean;
1431
+ /** The tournament match this game is, or `null` (show it if you like: "Saturday Cup: your match"). */
1432
+ get tournament(): TurnTournament | null;
1433
+ /**
1434
+ * The "your turn" buzz for this game: a short vibration when this player
1435
+ * becomes due on a live update while the page is visible (never for the
1436
+ * next step of their own turn, a move out of turn, a game just opened or a
1437
+ * catch-up; never when the player turned it off or asks for less motion;
1438
+ * silently nothing where the device can't vibrate). On by default.
1439
+ */
1440
+ setYourTurnBuzz(isOn: boolean): void;
1417
1441
  /** Creator: start the game (empty seats go to the computer when the game allows). */
1418
1442
  start(): Promise<void>;
1419
1443
  /**
1420
- * Make a move. Rejects with a `HubError`: 403 `not_your_turn`, 409
1421
- * `stale` (the game moved on: the view is refreshed first), 422 `illegal`
1422
- * with the rules' own code in `rule`.
1444
+ * Make a move: when it is your turn (`summary.isMyTurn`), or out of turn
1445
+ * when the rules allow it (`mayActNow`). Rejects with a `HubError`: 403
1446
+ * `not_your_turn`, 409 `stale` (the game moved on, or another player's
1447
+ * move got there first: the view is refreshed first), 422 `illegal` with
1448
+ * the rules' own code in `rule`, 500 `rules_error` or 503 `rules_busy`
1449
+ * (the move was not made; the game is fetched again). The answer's `view` is the newest this
1450
+ * page has: moves that arrived live while the answer was on its way (the
1451
+ * computer's, another player's) are never rolled back.
1423
1452
  */
1424
1453
  move(move: Move): Promise<{
1425
1454
  seq: number;
@@ -1447,22 +1476,47 @@ declare class TurnGame<View = GamePayload, Move extends GamePayload = GamePayloa
1447
1476
  }): Promise<void>;
1448
1477
  /** Invite friends to free seats (before the start). */
1449
1478
  invite(userIds: readonly number[]): Promise<void>;
1450
- /** The turn's deadline passed (or its player is suspended): let the computer play it. */
1479
+ /**
1480
+ * Whether "Let the computer play for <name>" may work now: another
1481
+ * player is due, the hub's hand-over wait (`summary.handOverAt`) has
1482
+ * passed and a due player isn't connected (`TurnSeat.connected` false
1483
+ * or unknown), or the turn's `deadline` passed. `false` in a
1484
+ * tournament match, and from a hub too old to say. Re-check it on each
1485
+ * `turn` event (a player coming or going fires one) and when
1486
+ * `handOverAt` comes.
1487
+ */
1488
+ canLetComputerPlay(now?: number): boolean;
1489
+ /**
1490
+ * Let the computer play for whoever is due: a turn whose deadline passed
1491
+ * (or whose player is suspended) is played once; otherwise, when that
1492
+ * player has been due a while (2 minutes) and isn't connected at all, the
1493
+ * computer plays their seat for the rest of the game (it shows as `bot`,
1494
+ * named with who chose it) until they open the game again. Rejects with
1495
+ * 409 `deadline_not_passed` when neither (it never says whether they are
1496
+ * online), and 409 `not_supported` in a tournament match.
1497
+ */
1451
1498
  letComputerPlay(): Promise<void>;
1452
1499
  /** Say something: `{ text }` between friends (moderated), `{ quick }` (a quick-chat phrase id) with anyone. */
1453
1500
  say(send: {
1454
1501
  readonly text?: string;
1455
1502
  readonly quick?: string;
1456
1503
  }): Promise<TurnChatLine>;
1457
- /** Fetch the game again, and replay moves missed since the last one this page saw. */
1504
+ /**
1505
+ * Fetch the game again, and replay moves missed since the last one this
1506
+ * page saw. An answer older than what the page has by then (live moves
1507
+ * arrived while it was on its way) is dropped, never rolled back to, and
1508
+ * a move that arrived live is never replayed twice.
1509
+ */
1458
1510
  refresh(): Promise<void>;
1459
1511
  /** Hear moves, turn changes, the end and chat; returns a function that stops listening. */
1460
1512
  on<K extends keyof TurnGameEvents<View, Ev>>(eventName: K, listener: Listener<TurnGameEvents<View, Ev>[K]>): () => void;
1461
1513
  /** Stop live updates for this page (the game itself goes on). */
1462
1514
  close(): void;
1463
- /** Take a fresh answer from the hub; fire `turn` and `ended` when they changed. */
1515
+ /** Take a fresh answer from the hub (one older than what the page has is dropped: no rollback); fire `turn` and `ended` when they changed. */
1464
1516
  private update;
1465
1517
  private emit;
1518
+ /** Whether it is another player's move now (the page is waiting on someone). */
1519
+ private isWaitingOnOthers;
1466
1520
  /** A live `hub:turn` for this game: a move (or a missed run of them), or another change. */
1467
1521
  private onLive;
1468
1522
  /** Replay what was missed (one catch-up at a time). */
@@ -1505,7 +1559,18 @@ interface TurnsHost extends TurnGameHost {
1505
1559
  /** `hub.turns`. */
1506
1560
  declare class HubTurns {
1507
1561
  private readonly host;
1562
+ private isBuzzOn;
1563
+ private readonly gameOptions;
1508
1564
  constructor(host: TurnsHost);
1565
+ /**
1566
+ * This page's "your turn" buzz (a short vibration when the player becomes
1567
+ * due in an open game, see `TurnGame.setYourTurnBuzz`): pass `false` if
1568
+ * your game gives its own signal. On by default.
1569
+ */
1570
+ setYourTurnBuzz(isOn: boolean): void;
1571
+ /** The player's own "Buzz when it's my turn" switch on this device (the menu's Settings show it too). */
1572
+ get playerYourTurnBuzz(): boolean;
1573
+ set playerYourTurnBuzz(isOn: boolean);
1509
1574
  /** The invite link key this page was opened with (`?hub_turn_link=`), taken out of the address bar; `null` when none. Synchronous. */
1510
1575
  get link(): string | null;
1511
1576
  /** Make a game in this page's game (its lobby): the player takes the first seat. */
@@ -1697,9 +1762,21 @@ declare class ContentRejectedError extends HubError {
1697
1762
  constructor(message: string, status: number | undefined, details: HubErrorDetails);
1698
1763
  }
1699
1764
  //#endregion
1765
+ //#region src/core/turns/your-turn-buzz.d.ts
1766
+ /** The pattern: two short pulses, ms. */
1767
+ declare const YOUR_TURN_BUZZ: readonly number[];
1768
+ /** Where this device keeps the player's choice (`off` turns it off). */
1769
+ declare const YOUR_TURN_BUZZ_KEY = "dg:your-turn-buzz";
1770
+ /** Whether going from `previous` to `next` makes this player newly due (the moment to buzz). */
1771
+ declare function isNewlyDue(previous: Pick<TurnSummary, 'phase' | 'isMyTurn'>, next: Pick<TurnSummary, 'phase' | 'isMyTurn' | 'isMuted'>): boolean;
1772
+ /** The player's own switch on this device (on unless they turned it off). */
1773
+ declare function readYourTurnBuzz(): boolean;
1774
+ /** Save the player's switch on this device. */
1775
+ declare function saveYourTurnBuzz(isOn: boolean): void;
1776
+ //#endregion
1700
1777
  //#region src/core/version/client-version.gen.d.ts
1701
1778
  /** This client's package version, sent as `x-hub-client` on REST calls and `client` in `hello`. */
1702
- declare const HUB_CLIENT_VERSION = "2.0.0-next.7";
1779
+ declare const HUB_CLIENT_VERSION = "2.0.0-next.9";
1703
1780
  //#endregion
1704
- export { OfflineApi as $, SavedChangeListener as A, MeResponse as At, ResumeRun as B, SubmitScoreResult as Bt, TURN_RESYNC_EVENT as C, HubOptions as Ct, TurnOutcome as D, Json$1 as Dt, TurnMoveEvent as E, InventorySnapshot as Et, RESUME_MAX_STATE_BYTES as F, SaveMeta as Ft, TradeId as G, AvatarHost as Gt, HubMenuControl as H, EndpointFields as Ht, ResumeBlocker as I, SnapshotResponse as It, AuthResponse as J, CarriesLook as Jt, TradeListOptions as K, AvatarModule as Kt, ResumeEntry as L, SortDir$1 as Lt, SavedOpenHandler as M, Profile as Mt, HubResume as N, ProfileSummary as Nt, HubSaved as O, LeaderboardEntry as Ot, RESUME_DEBOUNCE_MS as P, Save as Pt, SyncResult as Q, ResumeLoadOptions as R, Stats$1 as Rt, TURN_POLL_MS as S, GlobalAnalytics as St, TurnGameEvents as T, Inventory$1 as Tt, GrantBundle as U, EndpointName as Ut, ResumeSaveInput as V, User as Vt, TradeBundle as W, EndpointReply as Wt, StatResult as X, ProfileUpdate as Y, SyncConflict as Z, HubTurns as _, BoardWithTop as _t, HUB_CLIENT_VERSION as a, OUTBOX_MAX_CHARS as at, TURN_CHAT_EVENT as b, GameLeaderboards as bt, HubErrorCode as c, OfflineKindDefinition as ct, SAVE_UNKNOWN_CODE as d, ProfilePatch as dt, OUTBOX_FULL_CODE as et, UNSUPPORTED_BY_HUB as f, QueueOp as ft, ClientSupport as g, Board$1 as gt, hub as h, BufferedEvent as ht, TurnGameView$1 as i, OfflineOp as it, SavedOpenDetail as j, Metrics$1 as jt, SAVED_CHANGE_QUIET_MS as k, LeaderboardResult as kt, HubErrorDetails as l, ReplayContext as lt, createHub as m, QueuedScoreOptions as mt, TurnChatLine$1 as n, OfflineEventName as nt, ContentRejectedError as o, OUTBOX_MAX_ENTRIES as ot, Hub as p, QueueOpInput as pt, TradeNoteOptions as q, HubAvatar as qt, TurnDeadline$1 as r, OfflineListener as rt, HubError as s, OfflineHandler as st, OpenTurnGame$1 as t, OfflineEventDetails as tt, OfflineError as u, CLIENT_VERSION_HEADER as ut, TURN_LINK_PARAM as v, GameAnalytics as vt, TurnGame as w, HubStatus as wt, TURN_EVENT as x, GameRecords as xt, TurnCreateOptions as y, GameInfo$1 as yt, ResumeProgress as z, SubmitScoreOptions as zt };
1781
+ export { TradeListOptions as $, AvatarModule as $t, TurnGame as A, HubOptions as At, HubResume as B, ProfileSummary as Bt, TURN_LINK_PARAM as C, Board$1 as Ct, TURN_POLL_MS as D, GameLeaderboards as Dt, TURN_EVENT as E, GameInfo$1 as Et, HubSaved as F, LeaderboardEntry as Ft, ResumeLoadOptions as G, Stats$1 as Gt, RESUME_MAX_STATE_BYTES as H, SaveMeta as Ht, SAVED_CHANGE_QUIET_MS as I, LeaderboardResult as It, ResumeSaveInput as J, User as Jt, ResumeProgress as K, SubmitScoreOptions as Kt, SavedChangeListener as L, MeResponse as Lt, TurnGameOptions as M, Inventory$1 as Mt, TurnMoveEvent as N, InventorySnapshot as Nt, TURN_QUIET_MS as O, GameRecords as Ot, TurnOutcome as P, Json$1 as Pt, TradeId as Q, AvatarHost as Qt, SavedOpenDetail as R, Metrics$1 as Rt, HubTurns as S, BufferedEvent as St, TURN_CHAT_EVENT as T, GameAnalytics as Tt, ResumeBlocker as U, SnapshotResponse as Ut, RESUME_DEBOUNCE_MS as V, Save as Vt, ResumeEntry as W, SortDir$1 as Wt, GrantBundle as X, EndpointName as Xt, HubMenuControl as Y, EndpointFields as Yt, TradeBundle as Z, EndpointReply as Zt, UNSUPPORTED_BY_HUB as _, CLIENT_VERSION_HEADER as _t, HUB_CLIENT_VERSION as a, SyncResult as at, hub as b, QueueOpInput as bt, isNewlyDue as c, OfflineEventDetails as ct, ContentRejectedError as d, OfflineOp as dt, HubAvatar as en, TradeNoteOptions as et, HubError as f, OUTBOX_MAX_CHARS as ft, SAVE_UNKNOWN_CODE as g, ReplayContext as gt, OfflineError as h, OfflineKindDefinition as ht, TurnGameView$1 as i, SyncConflict as it, TurnGameEvents as j, HubStatus as jt, TURN_RESYNC_EVENT as k, GlobalAnalytics as kt, readYourTurnBuzz as l, OfflineEventName as lt, HubErrorDetails as m, OfflineHandler as mt, TurnChatLine$1 as n, ProfileUpdate as nt, YOUR_TURN_BUZZ as o, OfflineApi as ot, HubErrorCode as p, OUTBOX_MAX_ENTRIES as pt, ResumeRun as q, SubmitScoreResult as qt, TurnDeadline$1 as r, StatResult as rt, YOUR_TURN_BUZZ_KEY as s, OUTBOX_FULL_CODE as st, OpenTurnGame$1 as t, CarriesLook as tn, AuthResponse as tt, saveYourTurnBuzz as u, OfflineListener as ut, Hub as v, ProfilePatch as vt, TurnCreateOptions as w, BoardWithTop as wt, ClientSupport as x, QueuedScoreOptions as xt, createHub as y, QueueOp as yt, SavedOpenHandler as z, Profile as zt };
1705
1782
  //# sourceMappingURL=index.d.ts.map