@seriousgaming/sdk-tools 0.0.0-stage → 1.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +93 -0
- package/README.md +36 -2
- package/dist/bundling/logic-exports.d.ts +34 -0
- package/dist/bundling/node-builtins.d.ts +21 -0
- package/dist/bundling/transpiler.d.ts +7 -0
- package/dist/cli.js +27368 -0
- package/dist/client/dev-server.d.ts +59 -0
- package/dist/client/index.d.ts +28 -0
- package/dist/client/stub-services.d.ts +32 -0
- package/dist/client/test-session.d.ts +195 -0
- package/dist/client.js +16884 -0
- package/dist/core/asset-reference-translator.d.ts +46 -0
- package/dist/core/clock.d.ts +57 -0
- package/dist/core/faults.d.ts +65 -0
- package/dist/core/game-settings.d.ts +65 -0
- package/dist/core/history.d.ts +89 -0
- package/dist/core/listen-with-fallback.d.ts +30 -0
- package/dist/core/mutation-queue.d.ts +61 -0
- package/dist/core/package-scenario.d.ts +89 -0
- package/dist/core/participant-registry.d.ts +109 -0
- package/dist/core/pending-changes.d.ts +14 -0
- package/dist/core/protocol.d.ts +83 -0
- package/dist/core/scenario-drafts.d.ts +32 -0
- package/dist/core/session-endpoints.d.ts +108 -0
- package/dist/core/session-gates.d.ts +75 -0
- package/dist/core/session-host.d.ts +94 -0
- package/dist/core/session-refusals.d.ts +56 -0
- package/dist/core/session-rewind.d.ts +32 -0
- package/dist/core/session-roster.d.ts +128 -0
- package/dist/core/session-surfaces.d.ts +32 -0
- package/dist/core/session-ticks.d.ts +18 -0
- package/dist/core/session-timers.d.ts +84 -0
- package/dist/core/session-writes.d.ts +40 -0
- package/dist/core/session.d.ts +385 -0
- package/dist/core/settings-locks.d.ts +22 -0
- package/dist/core/team-names.d.ts +52 -0
- package/dist/core/team-state-store.d.ts +209 -0
- package/dist/core/tick-timer.d.ts +75 -0
- package/dist/dev/blob-links.d.ts +10 -0
- package/dist/dev/console/assets/index-DgFglsnA.js +204 -0
- package/dist/dev/console/index.html +12 -0
- package/dist/dev/console-path.d.ts +19 -0
- package/dist/dev/lockfile.d.ts +124 -0
- package/dist/dev/package-watcher.d.ts +21 -0
- package/dist/dev/routes.d.ts +67 -0
- package/dist/dev/shell.d.ts +260 -0
- package/dist/dev/surfaces.d.ts +41 -0
- package/dist/dev/tools-identity.d.ts +23 -0
- package/dist/dev/view/batch.d.ts +172 -0
- package/dist/dev/view/commands.d.ts +75 -0
- package/dist/dev/view/route.d.ts +58 -0
- package/dist/dev/view/view.d.ts +78 -0
- package/dist/dev/view/viewer.d.ts +32 -0
- package/dist/discovery/config.d.ts +9 -0
- package/dist/discovery/manifest-paths.d.ts +21 -0
- package/dist/discovery/removed-fields.d.ts +90 -0
- package/dist/docs/api/deck.md +386 -0
- package/dist/docs/api/index.md +67 -0
- package/dist/docs/api/sdk-commands.md +286 -0
- package/dist/docs/api/sdk-e2e.md +433 -0
- package/dist/docs/api/sdk-projection.md +207 -0
- package/dist/docs/api/sdk-testing.md +214 -0
- package/dist/docs/api/sdk-tools-client.md +560 -0
- package/dist/docs/api/sdk-ui-testing.md +231 -0
- package/dist/docs/api/sdk-ui.md +1269 -0
- package/dist/docs/api/sdk.md +2140 -0
- package/dist/docs/changelog-0.x.md +1156 -0
- package/dist/docs/changelog.md +236 -0
- package/dist/docs/cli-and-dev-server.md +217 -0
- package/dist/docs/cli-error-codes.md +154 -0
- package/dist/docs/cli-reference.md +2488 -0
- package/dist/docs/cli-simulation-testing.md +222 -0
- package/dist/docs/concepts/index.md +46 -0
- package/dist/docs/concepts/terminology.md +322 -0
- package/dist/docs/environment-variables.md +102 -0
- package/dist/docs/getting-started.md +145 -0
- package/dist/docs/guides/ai-facilitation.md +220 -0
- package/dist/docs/guides/capabilities.md +460 -0
- package/dist/docs/guides/endpoints.md +335 -0
- package/dist/docs/guides/engine-testing.md +477 -0
- package/dist/docs/guides/engine.md +527 -0
- package/dist/docs/guides/file-handling.md +405 -0
- package/dist/docs/guides/games.md +176 -0
- package/dist/docs/guides/global-settings.md +94 -0
- package/dist/docs/guides/guide.md +123 -0
- package/dist/docs/guides/hooks.md +183 -0
- package/dist/docs/guides/index.md +51 -0
- package/dist/docs/guides/internationalization.md +288 -0
- package/dist/docs/guides/llm-integration.md +635 -0
- package/dist/docs/guides/multi-team-games.md +586 -0
- package/dist/docs/guides/patterns.md +391 -0
- package/dist/docs/guides/presentation.md +196 -0
- package/dist/docs/guides/production-constraints.md +130 -0
- package/dist/docs/guides/scenario-editor.md +143 -0
- package/dist/docs/guides/scenarios.md +515 -0
- package/dist/docs/guides/session.md +972 -0
- package/dist/docs/guides/settings.md +458 -0
- package/dist/docs/guides/setup.md +193 -0
- package/dist/docs/guides/speech-generation.md +233 -0
- package/dist/docs/guides/starter-game.md +164 -0
- package/dist/docs/guides/testing.md +575 -0
- package/dist/docs/guides/tick-controller.md +569 -0
- package/dist/docs/guides/type-safety.md +516 -0
- package/dist/docs/guides/ui.md +1389 -0
- package/dist/docs/guides/upgrading.md +636 -0
- package/dist/docs/guides/validators.md +217 -0
- package/dist/docs/guides/waiting-room.md +244 -0
- package/dist/docs/index.md +41 -0
- package/dist/docs/recipes/act-on-the-session-from-an-endpoint.md +95 -0
- package/dist/docs/recipes/adapt-a-game-for-walkthroughs.md +133 -0
- package/dist/docs/recipes/adapt-ui-for-observers.md +74 -0
- package/dist/docs/recipes/call-endpoint-from-ui.md +109 -0
- package/dist/docs/recipes/check-a-package-from-a-script.md +117 -0
- package/dist/docs/recipes/create-capability.md +66 -0
- package/dist/docs/recipes/create-endpoint.md +127 -0
- package/dist/docs/recipes/create-engine.md +111 -0
- package/dist/docs/recipes/create-game.md +70 -0
- package/dist/docs/recipes/create-guide.md +75 -0
- package/dist/docs/recipes/create-hook.md +80 -0
- package/dist/docs/recipes/create-presentation.md +142 -0
- package/dist/docs/recipes/create-scenario-editor.md +102 -0
- package/dist/docs/recipes/create-scenario.md +98 -0
- package/dist/docs/recipes/create-session-ui.md +116 -0
- package/dist/docs/recipes/create-settings.md +88 -0
- package/dist/docs/recipes/create-setup.md +115 -0
- package/dist/docs/recipes/create-tick-controller.md +65 -0
- package/dist/docs/recipes/create-user-interface.md +96 -0
- package/dist/docs/recipes/create-validator.md +67 -0
- package/dist/docs/recipes/create-waiting-room-ui.md +109 -0
- package/dist/docs/recipes/declare-api-uses.md +67 -0
- package/dist/docs/recipes/design-state-for-concurrent-writes.md +96 -0
- package/dist/docs/recipes/distribute-package.md +80 -0
- package/dist/docs/recipes/e2e-testing.md +116 -0
- package/dist/docs/recipes/end-game-on-condition.md +154 -0
- package/dist/docs/recipes/fix-duplicate-packages.md +101 -0
- package/dist/docs/recipes/index.md +86 -0
- package/dist/docs/recipes/make-an-endpoint-external.md +101 -0
- package/dist/docs/recipes/negotiate-across-teams.md +164 -0
- package/dist/docs/recipes/observe-other-teams-state.md +119 -0
- package/dist/docs/recipes/publish-a-package.md +139 -0
- package/dist/docs/recipes/remember-a-viewers-choice.md +55 -0
- package/dist/docs/recipes/review-a-past-day.md +73 -0
- package/dist/docs/recipes/share-assets-across-scenarios.md +120 -0
- package/dist/docs/recipes/share-logic-between-engine-and-ui.md +130 -0
- package/dist/docs/recipes/show-all-teams-participants.md +109 -0
- package/dist/docs/recipes/start-from-an-empty-package.md +169 -0
- package/dist/docs/recipes/take-a-file-in-an-endpoint.md +82 -0
- package/dist/docs/recipes/test-a-multi-role-game.md +51 -0
- package/dist/docs/recipes/test-user-interface.md +95 -0
- package/dist/docs/recipes/test-with-engine.md +115 -0
- package/dist/docs/recipes/upload-and-display-files.md +148 -0
- package/dist/docs/recipes/use-request-play.md +65 -0
- package/dist/docs/recipes/use-request-tick.md +75 -0
- package/dist/docs/troubleshooting.md +816 -0
- package/dist/execution/blob-inputs.d.ts +57 -0
- package/dist/execution/bundle-reload.d.ts +42 -0
- package/dist/execution/config-resolver.d.ts +127 -0
- package/dist/execution/configuration-builder.d.ts +66 -0
- package/dist/execution/context-composition.d.ts +161 -0
- package/dist/execution/endpoint-actions.d.ts +9 -0
- package/dist/execution/endpoint-payloads.d.ts +32 -0
- package/dist/execution/endpoint-runner.d.ts +129 -0
- package/dist/execution/engine-state.d.ts +40 -0
- package/dist/execution/executor-callbacks.d.ts +56 -0
- package/dist/execution/executor.d.ts +436 -0
- package/dist/execution/gates.d.ts +45 -0
- package/dist/execution/hook-chain.d.ts +25 -0
- package/dist/execution/logic-calls.d.ts +190 -0
- package/dist/execution/logic-failure.d.ts +84 -0
- package/dist/execution/logic-loader.d.ts +54 -0
- package/dist/execution/logic-result.d.ts +76 -0
- package/dist/execution/tick-controller-call.d.ts +32 -0
- package/dist/execution/types.d.ts +48 -0
- package/dist/generation/ts-type.d.ts +39 -0
- package/dist/guide/locale.d.ts +12 -0
- package/dist/guide/video-registry.d.ts +42 -0
- package/dist/help-examples.d.ts +125 -0
- package/dist/host/adapter.d.ts +67 -0
- package/dist/host/host-channel.d.ts +222 -0
- package/dist/host/index.d.ts +20 -0
- package/dist/host/protocol.d.ts +783 -0
- package/dist/host/surfaces.d.ts +42 -0
- package/dist/host/theme.d.ts +55 -0
- package/dist/host.js +583 -0
- package/dist/prompts/index.d.ts +7 -0
- package/dist/prompts/schema-builder.d.ts +29 -0
- package/dist/prompts/types.d.ts +108 -0
- package/dist/prompts/validators.d.ts +32 -0
- package/dist/runtime/capability-scope.d.ts +6 -0
- package/dist/runtime/context-merge.d.ts +29 -0
- package/dist/runtime/context-projection.d.ts +41 -0
- package/dist/runtime/guarded-callbacks.d.ts +15 -0
- package/dist/runtime/index.d.ts +27 -0
- package/dist/runtime/manifest-version.d.ts +55 -0
- package/dist/runtime/tick-validation.d.ts +25 -0
- package/dist/runtime.js +346 -0
- package/dist/schema.json +1546 -0
- package/dist/server/vite-plugin.d.ts +46 -0
- package/dist/services/tts/client.d.ts +51 -0
- package/dist/services/tts/elevenlabs.d.ts +24 -0
- package/dist/services/tts/types.d.ts +44 -0
- package/dist/storage/asset-resolver.d.ts +49 -0
- package/dist/storage/blob-store.d.ts +41 -0
- package/dist/templates/endpoint/logic.test.ts.liquid +61 -0
- package/dist/templates/endpoint/logic.ts.liquid +25 -0
- package/dist/templates/engine/init.json.liquid +7 -0
- package/dist/templates/engine/logic-aggregate.test.ts.liquid +90 -0
- package/dist/templates/engine/logic-aggregate.ts.liquid +46 -0
- package/dist/templates/engine/logic.test.ts.liquid +61 -0
- package/dist/templates/engine/logic.ts.liquid +32 -0
- package/dist/templates/engine/run.json.liquid +7 -0
- package/dist/templates/guide/01-at-a-glance.md.liquid +19 -0
- package/dist/templates/guide/02-preparation.md.liquid +18 -0
- package/dist/templates/guide/03-running-the-session.md.liquid +37 -0
- package/dist/templates/hook/logic.test.ts.liquid +46 -0
- package/dist/templates/hook/logic.ts.liquid +12 -0
- package/dist/templates/package/CLAUDE.md.template +338 -0
- package/dist/templates/package/DESIGN.md.liquid +144 -0
- package/dist/templates/package/README.md.liquid +143 -0
- package/dist/templates/package/claude/rules/workflow-create-capability.md +26 -0
- package/dist/templates/package/claude/rules/workflow-create-endpoint.md +35 -0
- package/dist/templates/package/claude/rules/workflow-create-engine.md +35 -0
- package/dist/templates/package/claude/rules/workflow-create-guide.md +40 -0
- package/dist/templates/package/claude/rules/workflow-create-presentation.md +37 -0
- package/dist/templates/package/claude/rules/workflow-create-user-interface.md +31 -0
- package/dist/templates/package/claude/rules/workflow-publish-package.md +54 -0
- package/dist/templates/package/claude/rules/workflow-test-engine-or-ui.md +30 -0
- package/dist/templates/package/claude/rules/workflow-update-sdk-version.md +43 -0
- package/dist/templates/package/claude/settings.json.template +16 -0
- package/dist/templates/package/gitignore.template +15 -0
- package/dist/templates/package/global-setup.ts.template +21 -0
- package/dist/templates/package/globals.d.ts.template +2 -0
- package/dist/templates/package/oxfmtrc.json.template +14 -0
- package/dist/templates/package/oxlintrc.json.template +238 -0
- package/dist/templates/package/package.json.liquid +65 -0
- package/dist/templates/package/playwright.config.ts.liquid +19 -0
- package/dist/templates/package/pnpm-workspace.yaml.template +27 -0
- package/dist/templates/package/test-setup.ts.liquid +7 -0
- package/dist/templates/package/tsconfig.json.liquid +15 -0
- package/dist/templates/package/vite.config.ts.liquid +19 -0
- package/dist/templates/package/vitest.config.ts.liquid +25 -0
- package/dist/templates/package/vitest.engine.config.ts.liquid +12 -0
- package/dist/templates/presentation/index.html.liquid +20 -0
- package/dist/templates/presentation/src/App.tsx.liquid +49 -0
- package/dist/templates/presentation/src/Slides.tsx.liquid +81 -0
- package/dist/templates/presentation/src/i18n.ts.liquid +54 -0
- package/dist/templates/presentation/src/main.tsx.liquid +14 -0
- package/dist/templates/scenario_editor/src/App.test.tsx.liquid +30 -0
- package/dist/templates/scenario_editor/src/App.tsx.liquid +95 -0
- package/dist/templates/scenario_editor/src/i18n.ts.liquid +44 -0
- package/dist/templates/session/src/App.test.tsx.liquid +60 -0
- package/dist/templates/session/src/App.tsx.liquid +128 -0
- package/dist/templates/session/src/i18n.ts.liquid +53 -0
- package/dist/templates/session/src/main.tsx.liquid +48 -0
- package/dist/templates/session/src/theme.ts.liquid +46 -0
- package/dist/templates/settings-editor/index.html.liquid +12 -0
- package/dist/templates/settings-editor/src/main.tsx.liquid +48 -0
- package/dist/templates/settings-editor/src/theme.ts.liquid +24 -0
- package/dist/templates/setup/src/App.test.tsx.liquid +39 -0
- package/dist/templates/setup/src/App.tsx.liquid +102 -0
- package/dist/templates/setup/src/i18n.ts.liquid +47 -0
- package/dist/templates/starter-game/capabilities/briefing/capability.sdk.json +18 -0
- package/dist/templates/starter-game/capabilities/plan/capability.sdk.json +17 -0
- package/dist/templates/starter-game/capabilities/results/capability.sdk.json +61 -0
- package/dist/templates/starter-game/capabilities/roles/capability.sdk.json +17 -0
- package/dist/templates/starter-game/capabilities/weather/capability.sdk.json +23 -0
- package/dist/templates/starter-game/engine/defaults.ts +81 -0
- package/dist/templates/starter-game/engine/engine.sdk.json +12 -0
- package/dist/templates/starter-game/engine/logic.test.ts +221 -0
- package/dist/templates/starter-game/engine/logic.ts +149 -0
- package/dist/templates/starter-game/engine/test-helpers.ts +74 -0
- package/dist/templates/starter-game/engine/types.ts +139 -0
- package/dist/templates/starter-game/guide/content/en/01-at-a-glance.md +51 -0
- package/dist/templates/starter-game/guide/content/en/02-preparation.md +35 -0
- package/dist/templates/starter-game/guide/content/en/03-running-the-day.md +58 -0
- package/dist/templates/starter-game/guide/guide.sdk.json +10 -0
- package/dist/templates/starter-game/guide/guide.test.ts +108 -0
- package/dist/templates/starter-game/hooks/assignproducts/defaults.ts +37 -0
- package/dist/templates/starter-game/hooks/assignproducts/hook.sdk.json +13 -0
- package/dist/templates/starter-game/hooks/assignproducts/logic/logic.test.ts +77 -0
- package/dist/templates/starter-game/hooks/assignproducts/logic/logic.ts +47 -0
- package/dist/templates/starter-game/hooks/assignproducts/types.ts +55 -0
- package/dist/templates/starter-game/package.json +68 -0
- package/dist/templates/starter-game/playwright.config.ts +19 -0
- package/dist/templates/starter-game/scenarios/heatwave/scenario.sdk.json +20 -0
- package/dist/templates/starter-game/scenarios/ordinary_week/scenario.sdk.json +12 -0
- package/dist/templates/starter-game/seriousgaming.sdk.json +23 -0
- package/dist/templates/starter-game/session/defaults.ts +80 -0
- package/dist/templates/starter-game/session/index.html +12 -0
- package/dist/templates/starter-game/session/session.sdk.json +11 -0
- package/dist/templates/starter-game/session/src/App.test.tsx +307 -0
- package/dist/templates/starter-game/session/src/App.tsx +309 -0
- package/dist/templates/starter-game/session/src/Section.tsx +37 -0
- package/dist/templates/starter-game/session/src/TeamDoor.tsx +96 -0
- package/dist/templates/starter-game/session/src/format.ts +8 -0
- package/dist/templates/starter-game/session/src/i18n.ts +51 -0
- package/dist/templates/starter-game/session/src/main.tsx +48 -0
- package/dist/templates/starter-game/session/src/theme.ts +45 -0
- package/dist/templates/starter-game/session/types.ts +135 -0
- package/dist/templates/starter-game/settings/engine/settings.sdk.json +50 -0
- package/dist/templates/starter-game/settings/menu/settings.sdk.json +78 -0
- package/dist/templates/starter-game/settings/session/settings.sdk.json +23 -0
- package/dist/templates/starter-game/settings/ui/settings.sdk.json +25 -0
- package/dist/templates/starter-game/test-setup.ts +7 -0
- package/dist/templates/starter-game/testing/e2e/game.spec.ts +139 -0
- package/dist/templates/starter-game/testing/e2e/global-setup.ts +21 -0
- package/dist/templates/starter-game/testing/engine/game.engine.test.ts +171 -0
- package/dist/templates/starter-game/tsconfig.json +19 -0
- package/dist/templates/starter-game/ui/defaults.ts +60 -0
- package/dist/templates/starter-game/ui/index.html +12 -0
- package/dist/templates/starter-game/ui/src/App.test.tsx +138 -0
- package/dist/templates/starter-game/ui/src/App.tsx +175 -0
- package/dist/templates/starter-game/ui/src/DayBar.test.tsx +78 -0
- package/dist/templates/starter-game/ui/src/DayBar.tsx +72 -0
- package/dist/templates/starter-game/ui/src/HistoryPanel.test.tsx +74 -0
- package/dist/templates/starter-game/ui/src/HistoryPanel.tsx +120 -0
- package/dist/templates/starter-game/ui/src/MakeRow.tsx +129 -0
- package/dist/templates/starter-game/ui/src/Section.tsx +37 -0
- package/dist/templates/starter-game/ui/src/ThemeToggle.tsx +49 -0
- package/dist/templates/starter-game/ui/src/TodayPanel.test.tsx +179 -0
- package/dist/templates/starter-game/ui/src/TodayPanel.tsx +92 -0
- package/dist/templates/starter-game/ui/src/YesterdayPanel.tsx +142 -0
- package/dist/templates/starter-game/ui/src/format.ts +12 -0
- package/dist/templates/starter-game/ui/src/i18n.ts +95 -0
- package/dist/templates/starter-game/ui/src/main.tsx +48 -0
- package/dist/templates/starter-game/ui/src/menu.ts +18 -0
- package/dist/templates/starter-game/ui/src/test-helpers.ts +58 -0
- package/dist/templates/starter-game/ui/src/theme.ts +45 -0
- package/dist/templates/starter-game/ui/src/writes.ts +43 -0
- package/dist/templates/starter-game/ui/types.ts +137 -0
- package/dist/templates/starter-game/ui/ui.sdk.json +11 -0
- package/dist/templates/starter-game/validators/capacity/defaults.ts +37 -0
- package/dist/templates/starter-game/validators/capacity/logic/logic.test.ts +96 -0
- package/dist/templates/starter-game/validators/capacity/logic/logic.ts +45 -0
- package/dist/templates/starter-game/validators/capacity/types.ts +55 -0
- package/dist/templates/starter-game/validators/capacity/validator.sdk.json +11 -0
- package/dist/templates/starter-game/vite.config.ts +19 -0
- package/dist/templates/starter-game/vitest.config.ts +15 -0
- package/dist/templates/starter-game/vitest.engine.config.ts +19 -0
- package/dist/templates/starter-game/waiting_room/defaults.ts +40 -0
- package/dist/templates/starter-game/waiting_room/index.html +12 -0
- package/dist/templates/starter-game/waiting_room/src/App.test.tsx +102 -0
- package/dist/templates/starter-game/waiting_room/src/App.tsx +194 -0
- package/dist/templates/starter-game/waiting_room/src/i18n.ts +33 -0
- package/dist/templates/starter-game/waiting_room/src/main.tsx +48 -0
- package/dist/templates/starter-game/waiting_room/src/theme.ts +45 -0
- package/dist/templates/starter-game/waiting_room/types.ts +59 -0
- package/dist/templates/starter-game/waiting_room/waiting_room.sdk.json +10 -0
- package/dist/templates/tick-controller/logic.ts.liquid +8 -0
- package/dist/templates/ui/index.html.liquid +12 -0
- package/dist/templates/ui/src/App.test.tsx.liquid +41 -0
- package/dist/templates/ui/src/App.tsx.liquid +103 -0
- package/dist/templates/ui/src/i18n.ts.liquid +47 -0
- package/dist/templates/ui/src/main.tsx.liquid +48 -0
- package/dist/templates/ui/src/theme.ts.liquid +46 -0
- package/dist/templates/validator/logic.test.ts.liquid +42 -0
- package/dist/templates/validator/logic.ts.liquid +21 -0
- package/dist/templates/waiting-room/index.html.liquid +12 -0
- package/dist/templates/waiting-room/src/App.test.tsx.liquid +57 -0
- package/dist/templates/waiting-room/src/App.tsx.liquid +118 -0
- package/dist/templates/waiting-room/src/i18n.ts.liquid +44 -0
- package/dist/templates/waiting-room/src/main.tsx.liquid +48 -0
- package/dist/templates/waiting-room/src/theme.ts.liquid +46 -0
- package/dist/templating/resource-metadata.d.ts +131 -0
- package/dist/types.d.ts +14 -0
- package/dist/utils/atomic-write.d.ts +40 -0
- package/dist/utils/cli-error.d.ts +64 -0
- package/dist/utils/document-parser-client.d.ts +20 -0
- package/dist/utils/env-loader.d.ts +40 -0
- package/dist/utils/error-codes.d.ts +335 -0
- package/dist/utils/errors.d.ts +19 -0
- package/dist/utils/global-settings.d.ts +65 -0
- package/dist/utils/llm-client.d.ts +34 -0
- package/dist/utils/logger.d.ts +36 -0
- package/dist/utils/output.d.ts +109 -0
- package/dist/utils/platform.d.ts +14 -0
- package/dist/utils/prompt.d.ts +36 -0
- package/dist/utils/real-path.d.ts +6 -0
- package/dist/utils/schema-properties.d.ts +35 -0
- package/dist/validation/ajv.d.ts +17 -0
- package/dist/validation/facilitator-guide-validator.d.ts +27 -0
- package/dist/validation/findings.d.ts +40 -0
- package/dist/validation/game-constraints.d.ts +10 -0
- package/dist/validation/game-validator.d.ts +34 -0
- package/dist/validation/package-validation.d.ts +41 -0
- package/dist/validation/package-validator.d.ts +19 -0
- package/dist/validation/resource-validator.d.ts +79 -0
- package/dist/validation/schema-defaults-validator.d.ts +29 -0
- package/dist/validation/schema-validation.d.ts +115 -0
- package/dist/validation/semver.d.ts +9 -0
- package/package.json +122 -3
|
@@ -0,0 +1,1269 @@
|
|
|
1
|
+
<!-- Generated by `pnpm docs:generate` from the exports of `@seriousgaming/sdk/ui`. Edit those, not this file. -->
|
|
2
|
+
|
|
3
|
+
# `@seriousgaming/sdk/ui`
|
|
4
|
+
|
|
5
|
+
Every export of `@seriousgaming/sdk/ui`, with the declaration it is published with. Anything tagged `@internal` is left out: it ships in the declarations, but is not part of the supported API and may change without a major release. For how the pieces fit together, see the [API reference](./index.md) and the guides it links to.
|
|
6
|
+
|
|
7
|
+
## Functions
|
|
8
|
+
|
|
9
|
+
### localisedReferences
|
|
10
|
+
|
|
11
|
+
The references `useAsset` tries, most specific first: the locale as a directory immediately before the file name, then its language alone, then the reference as given. `asset:documents/intro.md` in `fr-CA` tries `asset:documents/fr-CA/intro.md`, `asset:documents/fr/intro.md` and `asset:documents/intro.md`.
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
function localisedReferences(reference: string, locale: string | false): string[];
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### PresentationWrapper
|
|
18
|
+
|
|
19
|
+
Wrap a presentation bundle. Read-only: there is nothing here to write with, and the host would refuse it if there were.
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
function PresentationWrapper(props: PresentationWrapperProps): import('react').JSX.Element;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### SessionUserInterfaceWrapper
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
function SessionUserInterfaceWrapper(
|
|
29
|
+
props: SessionUserInterfaceWrapperProps
|
|
30
|
+
): import('react').JSX.Element;
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### SettingsEditorWrapper
|
|
34
|
+
|
|
35
|
+
The wrapper for both settings editors, the `setup` slot and the `scenario_editor` slot. Each slot is its own bundle, so a screen knows which it is without being told: the host sends the same batch to both.
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
function SettingsEditorWrapper(props: SettingsEditorWrapperProps): import('react').JSX.Element;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### useAsset
|
|
42
|
+
|
|
43
|
+
Fetch an asset and read its body, preferring a copy in the surface's locale.
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
function useAsset<T = unknown>(
|
|
47
|
+
reference: string | null | undefined,
|
|
48
|
+
options: UseAssetOptions<'json'>
|
|
49
|
+
): AssetState<T>;
|
|
50
|
+
function useAsset(
|
|
51
|
+
reference: string | null | undefined,
|
|
52
|
+
options: UseAssetOptions<'text'>
|
|
53
|
+
): AssetState<string>;
|
|
54
|
+
function useAsset(
|
|
55
|
+
reference: string | null | undefined,
|
|
56
|
+
options: UseAssetOptions<'blob'>
|
|
57
|
+
): AssetState<Blob>;
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### useAssetUrl
|
|
61
|
+
|
|
62
|
+
The URL an `asset:`, `shared:` or `blob:` reference resolves to, for an `<img>`, `<video>` or link.
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
function useAssetUrl(reference: string | null | undefined): string | undefined;
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### useMutationReporter
|
|
69
|
+
|
|
70
|
+
Runs a fallible mutation (`setData`, `requestTick`, and the rest) so that a failure reaches the participant instead of vanishing.
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
function useMutationReporter(): MutationReporter;
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### usePastState
|
|
77
|
+
|
|
78
|
+
Read committed past state (`getPastState`) and keep it in step with the query.
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
function usePastState<T = Record<string, unknown>>(
|
|
82
|
+
query: PastStateQuery<T> | null | undefined
|
|
83
|
+
): PastStateResult<T>;
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### usePresentation
|
|
87
|
+
|
|
88
|
+
Everything a presentation can see: the session (or `null`), its settings, the host's theme, and the locale.
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
function usePresentation<
|
|
92
|
+
TSettings = Record<string, Record<string, unknown>>,
|
|
93
|
+
TTeamContext = Record<string, unknown>,
|
|
94
|
+
TSharedContext = Record<string, unknown>,
|
|
95
|
+
>(): PresentationValue<TSettings, TTeamContext, TSharedContext>;
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### UserInterfaceWrapper
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
function UserInterfaceWrapper(props: UserInterfaceWrapperProps): import('react').JSX.Element;
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### useRunKind
|
|
105
|
+
|
|
106
|
+
Hook returning whether this surface belongs to the game being played or to a walkthrough beside it.
|
|
107
|
+
|
|
108
|
+
```ts
|
|
109
|
+
const useRunKind: () => RunKind;
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### useSessionUserInterfaceCallbacks
|
|
113
|
+
|
|
114
|
+
```ts
|
|
115
|
+
const useSessionUserInterfaceCallbacks: () => SessionUserInterfaceCallbacks;
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### useSessionUserInterfaceData
|
|
119
|
+
|
|
120
|
+
The session's data and the session surface's `setData`.
|
|
121
|
+
|
|
122
|
+
```ts
|
|
123
|
+
function useSessionUserInterfaceData<
|
|
124
|
+
T extends SessionData<object, object> = SessionData,
|
|
125
|
+
A = unknown,
|
|
126
|
+
S extends Record<string, unknown> = Record<string, unknown>,
|
|
127
|
+
W extends Record<string, unknown> = Record<string, unknown>,
|
|
128
|
+
>(): SessionUserInterfaceDataContextValue<T, A, S, W>;
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### useSessionUserInterfaceHookFailures
|
|
132
|
+
|
|
133
|
+
Subscribe to hook chains that threw anywhere in the session.
|
|
134
|
+
|
|
135
|
+
```ts
|
|
136
|
+
const useSessionUserInterfaceHookFailures: () => SessionUserInterfaceHookFailuresValue;
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### useSessionUserInterfaceHostOverlays
|
|
140
|
+
|
|
141
|
+
Hook listing the host overlays this host offers for this session.
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
const useSessionUserInterfaceHostOverlays: () => HostOverlay[];
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### useSessionUserInterfaceLocale
|
|
148
|
+
|
|
149
|
+
Hook to access the current locale in a manage session user interface component.
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
const useSessionUserInterfaceLocale: () => SessionUserInterfaceLocale;
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### useSessionUserInterfaceMeta
|
|
156
|
+
|
|
157
|
+
Hook to access the session's identity and lifecycle state.
|
|
158
|
+
|
|
159
|
+
```ts
|
|
160
|
+
const useSessionUserInterfaceMeta: () => SessionMeta;
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### useSessionUserInterfaceParticipants
|
|
164
|
+
|
|
165
|
+
Hook to access all participants across all teams in the session.
|
|
166
|
+
|
|
167
|
+
```ts
|
|
168
|
+
const useSessionUserInterfaceParticipants: () => Participant[];
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### useSessionUserInterfaceTeamConfiguration
|
|
172
|
+
|
|
173
|
+
Hook to access the session's interaction mode and team bounds.
|
|
174
|
+
|
|
175
|
+
```ts
|
|
176
|
+
const useSessionUserInterfaceTeamConfiguration: () => TeamConfiguration;
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### useSessionUserInterfaceTeamLinks
|
|
180
|
+
|
|
181
|
+
Hook to access each team's join and observe links.
|
|
182
|
+
|
|
183
|
+
```ts
|
|
184
|
+
const useSessionUserInterfaceTeamLinks: () => TeamLinks[];
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### useSessionUserInterfaceTeams
|
|
188
|
+
|
|
189
|
+
Hook to access the session's teams, sorted by stable index.
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
const useSessionUserInterfaceTeams: () => TeamInfo[];
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### useSessionUserInterfaceTheme
|
|
196
|
+
|
|
197
|
+
```ts
|
|
198
|
+
const useSessionUserInterfaceTheme: () => SessionUserInterfaceTheme;
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### useSessionUserInterfaceThemePreference
|
|
202
|
+
|
|
203
|
+
```ts
|
|
204
|
+
const useSessionUserInterfaceThemePreference: () => ThemePreference;
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### useSessionUserInterfaceWalkthroughLink
|
|
208
|
+
|
|
209
|
+
Hook returning where to open the walkthrough, or `null` until the host has said.
|
|
210
|
+
|
|
211
|
+
```ts
|
|
212
|
+
const useSessionUserInterfaceWalkthroughLink: () => WalkthroughLink | null;
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### useSettingsEditor
|
|
216
|
+
|
|
217
|
+
The settings a `setup` or `scenario_editor` slot edits, and the way to change them. Pass the generated `Settings` type from the slot's `types.ts`.
|
|
218
|
+
|
|
219
|
+
```ts
|
|
220
|
+
function useSettingsEditor<T>(): SettingsEditorValue<T>;
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### useSettingsEditorCallbacks
|
|
224
|
+
|
|
225
|
+
```ts
|
|
226
|
+
const useSettingsEditorCallbacks: () => SettingsEditorCallbacks;
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### useSettingsEditorLocale
|
|
230
|
+
|
|
231
|
+
Hook to access the current locale in a settings editor (the `setup` or `scenario_editor` slot). The host picks it from the game's supported locales.
|
|
232
|
+
|
|
233
|
+
```ts
|
|
234
|
+
const useSettingsEditorLocale: () => SettingsEditorLocale;
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### useSettingsEditorTheme
|
|
238
|
+
|
|
239
|
+
```ts
|
|
240
|
+
const useSettingsEditorTheme: () => SettingsEditorTheme;
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### useSettingsEditorThemePreference
|
|
244
|
+
|
|
245
|
+
```ts
|
|
246
|
+
const useSettingsEditorThemePreference: () => ThemePreference;
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### useUserInterfaceCallbacks
|
|
250
|
+
|
|
251
|
+
```ts
|
|
252
|
+
const useUserInterfaceCallbacks: () => UserInterfaceCallbacks;
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### useUserInterfaceCrossTeamData
|
|
256
|
+
|
|
257
|
+
Observe every team's live cross-team state, including the calling team's own. Entries update as teams change their pending state, without waiting for a tick.
|
|
258
|
+
|
|
259
|
+
```ts
|
|
260
|
+
function useUserInterfaceCrossTeamData<T = Record<string, unknown>>(): TeamStateEntry<T>[];
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### useUserInterfaceData
|
|
264
|
+
|
|
265
|
+
```ts
|
|
266
|
+
function useUserInterfaceData<T, A>(): UserInterfaceDataContextValue<T, A>;
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### useUserInterfaceLocale
|
|
270
|
+
|
|
271
|
+
Hook to access the current locale in a user interface component. The locale is provided by the dev server based on the game's supported locales.
|
|
272
|
+
|
|
273
|
+
```ts
|
|
274
|
+
const useUserInterfaceLocale: () => UserInterfaceLocale;
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### useUserInterfaceOwnTeam
|
|
278
|
+
|
|
279
|
+
Hook returning the team whose surface this user interface is rendering.
|
|
280
|
+
|
|
281
|
+
```ts
|
|
282
|
+
const useUserInterfaceOwnTeam: () => TeamInfo | null;
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### useUserInterfaceOwnTeamJoinLink
|
|
286
|
+
|
|
287
|
+
Hook returning how to join this surface's own team.
|
|
288
|
+
|
|
289
|
+
```ts
|
|
290
|
+
const useUserInterfaceOwnTeamJoinLink: () => OwnTeamJoinLink | null;
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### useUserInterfaceParticipant
|
|
294
|
+
|
|
295
|
+
Hook to access the current participant in a user interface component. The participant is provided by the platform and contains information about the person currently viewing this UI.
|
|
296
|
+
|
|
297
|
+
```ts
|
|
298
|
+
const useUserInterfaceParticipant: () => Participant | null;
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### useUserInterfaceParticipants
|
|
302
|
+
|
|
303
|
+
Hook to access the list of participants currently known for this team.
|
|
304
|
+
|
|
305
|
+
```ts
|
|
306
|
+
const useUserInterfaceParticipants: () => Participant[];
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### useUserInterfaceTeams
|
|
310
|
+
|
|
311
|
+
Hook to access basic metadata about all teams in the session.
|
|
312
|
+
|
|
313
|
+
```ts
|
|
314
|
+
const useUserInterfaceTeams: () => TeamInfo[];
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### useUserInterfaceTheme
|
|
318
|
+
|
|
319
|
+
```ts
|
|
320
|
+
const useUserInterfaceTheme: () => UserInterfaceTheme;
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### useUserInterfaceThemePreference
|
|
324
|
+
|
|
325
|
+
```ts
|
|
326
|
+
const useUserInterfaceThemePreference: () => ThemePreference;
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### useUserInterfaceTimer
|
|
330
|
+
|
|
331
|
+
Hook to access the host's automatic tick timer state from inside a user interface component. Always returns a value — when `enabled` is false, no countdown should be displayed.
|
|
332
|
+
|
|
333
|
+
```ts
|
|
334
|
+
const useUserInterfaceTimer: () => TimerState;
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### useUserInterfaceValidationRejections
|
|
338
|
+
|
|
339
|
+
Subscribe to validator rejections from the host. Rejections are surfaced when a UI-submitted mutation (via `setData`) violates one or more validators declared in the game. They are delivered as a single batch per submission; the runtime collects every failing validator's verdict and returns them together.
|
|
340
|
+
|
|
341
|
+
```ts
|
|
342
|
+
const useUserInterfaceValidationRejections: () => UserInterfaceValidationContextValue;
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### useUserInterfaceViewerRole
|
|
346
|
+
|
|
347
|
+
Hook returning whether the current viewer is a `'participant'` or an `'observer'`. Use it to adapt a player or shell UI for observation — for example to show a debrief overlay, reveal otherwise-hidden state, or gate a genuinely read-only view. When it returns `'observer'`, `./UserInterfaceParticipantContext.useUserInterfaceParticipant` returns `null`.
|
|
348
|
+
|
|
349
|
+
```ts
|
|
350
|
+
const useUserInterfaceViewerRole: () => ViewerRole;
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### useViewerStorage
|
|
354
|
+
|
|
355
|
+
State that this browser remembers for this viewer, like `useState` but kept across a reload.
|
|
356
|
+
|
|
357
|
+
```ts
|
|
358
|
+
function useViewerStorage<T>(
|
|
359
|
+
key: string,
|
|
360
|
+
initial: T | (() => T)
|
|
361
|
+
): [T, (value: T | ((previous: T) => T)) => void];
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## Classes
|
|
365
|
+
|
|
366
|
+
### EndpointError
|
|
367
|
+
|
|
368
|
+
Error a surface's endpoint call (`callbacks.endpoints.<id>(request)`) rejects with. Inspect `outcome` (or the shorthand `kind`) for why, and `applied` for what had already changed.
|
|
369
|
+
|
|
370
|
+
```ts
|
|
371
|
+
class EndpointError extends Error {
|
|
372
|
+
readonly outcome: EndpointFailureOutcome;
|
|
373
|
+
readonly applied: EffectStep[];
|
|
374
|
+
readonly failedStep?: EffectStep;
|
|
375
|
+
constructor(failure: EndpointFailure);
|
|
376
|
+
get kind(): EndpointFailureOutcome['kind'];
|
|
377
|
+
get failure(): EndpointFailure;
|
|
378
|
+
}
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### MutationError
|
|
382
|
+
|
|
383
|
+
Error a fallible mutation promise rejects with. Inspect `outcome` (or the shorthand `kind`) to branch on the failure reason.
|
|
384
|
+
|
|
385
|
+
```ts
|
|
386
|
+
class MutationError extends Error {
|
|
387
|
+
readonly outcome: MutationOutcome;
|
|
388
|
+
constructor(outcome: MutationOutcome);
|
|
389
|
+
get kind(): MutationOutcome['kind'];
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### TickSnapshotError
|
|
394
|
+
|
|
395
|
+
Error a `getPastState` call rejects with on a genuine read fault.
|
|
396
|
+
|
|
397
|
+
```ts
|
|
398
|
+
class TickSnapshotError extends Error {
|
|
399
|
+
constructor(message: string);
|
|
400
|
+
}
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
## Constants
|
|
404
|
+
|
|
405
|
+
### AssetContext
|
|
406
|
+
|
|
407
|
+
Provided by every surface wrapper. Exported for the test helpers, which provide it without a host; game code reads it through `useAssetUrl` and `useAsset`.
|
|
408
|
+
|
|
409
|
+
```ts
|
|
410
|
+
const AssetContext: import('react').Context<AssetScope | undefined>;
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### CrossTeamDataContext
|
|
414
|
+
|
|
415
|
+
```ts
|
|
416
|
+
const CrossTeamDataContext: import('react').Context<CrossTeamData | undefined>;
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
### PastStateContext
|
|
420
|
+
|
|
421
|
+
Provided by the wrappers whose surfaces can read past state: the player, session and presentation wrappers. Exported for the test helpers, which provide it without a host; game code reads it through `usePastState`.
|
|
422
|
+
|
|
423
|
+
```ts
|
|
424
|
+
const PastStateContext: import('react').Context<PastStateReader | undefined>;
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### PresentationContext
|
|
428
|
+
|
|
429
|
+
```ts
|
|
430
|
+
const PresentationContext: import('react').Context<
|
|
431
|
+
PresentationValue<unknown, unknown, unknown> | undefined
|
|
432
|
+
>;
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### SessionUserInterfaceCallbacksContext
|
|
436
|
+
|
|
437
|
+
```ts
|
|
438
|
+
const SessionUserInterfaceCallbacksContext: import('react').Context<
|
|
439
|
+
SessionUserInterfaceCallbacks | undefined
|
|
440
|
+
>;
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### SessionUserInterfaceDataContext
|
|
444
|
+
|
|
445
|
+
```ts
|
|
446
|
+
const SessionUserInterfaceDataContext: import('react').Context<
|
|
447
|
+
| SessionUserInterfaceDataContextValue<
|
|
448
|
+
SessionData<object, object>,
|
|
449
|
+
unknown,
|
|
450
|
+
Record<string, unknown>,
|
|
451
|
+
Record<string, unknown>
|
|
452
|
+
>
|
|
453
|
+
| undefined
|
|
454
|
+
>;
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
### SessionUserInterfaceHookFailuresContext
|
|
458
|
+
|
|
459
|
+
```ts
|
|
460
|
+
const SessionUserInterfaceHookFailuresContext: import('react').Context<
|
|
461
|
+
SessionUserInterfaceHookFailuresValue | undefined
|
|
462
|
+
>;
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### SessionUserInterfaceHostOverlaysContext
|
|
466
|
+
|
|
467
|
+
```ts
|
|
468
|
+
const SessionUserInterfaceHostOverlaysContext: import('react').Context<HostOverlay[]>;
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
### SessionUserInterfaceLocaleContext
|
|
472
|
+
|
|
473
|
+
```ts
|
|
474
|
+
const SessionUserInterfaceLocaleContext: import('react').Context<
|
|
475
|
+
SessionUserInterfaceLocale | undefined
|
|
476
|
+
>;
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### SessionUserInterfaceMetaContext
|
|
480
|
+
|
|
481
|
+
```ts
|
|
482
|
+
const SessionUserInterfaceMetaContext: import('react').Context<SessionMeta | undefined>;
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### SessionUserInterfaceParticipantsContext
|
|
486
|
+
|
|
487
|
+
```ts
|
|
488
|
+
const SessionUserInterfaceParticipantsContext: import('react').Context<Participant[] | undefined>;
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
### SessionUserInterfaceTeamConfigurationContext
|
|
492
|
+
|
|
493
|
+
```ts
|
|
494
|
+
const SessionUserInterfaceTeamConfigurationContext: import('react').Context<TeamConfiguration>;
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
### SessionUserInterfaceTeamLinksContext
|
|
498
|
+
|
|
499
|
+
```ts
|
|
500
|
+
const SessionUserInterfaceTeamLinksContext: import('react').Context<TeamLinks[]>;
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
### SessionUserInterfaceTeamsContext
|
|
504
|
+
|
|
505
|
+
```ts
|
|
506
|
+
const SessionUserInterfaceTeamsContext: import('react').Context<TeamInfo[]>;
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
### SessionUserInterfaceThemeContext
|
|
510
|
+
|
|
511
|
+
```ts
|
|
512
|
+
const SessionUserInterfaceThemeContext: import('react').Context<
|
|
513
|
+
SessionUserInterfaceTheme | undefined
|
|
514
|
+
>;
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
### SessionUserInterfaceThemePreferenceContext
|
|
518
|
+
|
|
519
|
+
```ts
|
|
520
|
+
const SessionUserInterfaceThemePreferenceContext: import('react').Context<
|
|
521
|
+
ThemePreference | undefined
|
|
522
|
+
>;
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
### SessionUserInterfaceWalkthroughLinkContext
|
|
526
|
+
|
|
527
|
+
```ts
|
|
528
|
+
const SessionUserInterfaceWalkthroughLinkContext: import('react').Context<WalkthroughLink | null>;
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
### SettingsEditorCallbacksContext
|
|
532
|
+
|
|
533
|
+
```ts
|
|
534
|
+
const SettingsEditorCallbacksContext: import('react').Context<SettingsEditorCallbacks | undefined>;
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
### SettingsEditorContext
|
|
538
|
+
|
|
539
|
+
```ts
|
|
540
|
+
const SettingsEditorContext: import('react').Context<SettingsEditorValue<unknown> | undefined>;
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
### SettingsEditorLocaleContext
|
|
544
|
+
|
|
545
|
+
```ts
|
|
546
|
+
const SettingsEditorLocaleContext: import('react').Context<SettingsEditorLocale | undefined>;
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
### SettingsEditorThemeContext
|
|
550
|
+
|
|
551
|
+
```ts
|
|
552
|
+
const SettingsEditorThemeContext: import('react').Context<SettingsEditorTheme | undefined>;
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
### SettingsEditorThemePreferenceContext
|
|
556
|
+
|
|
557
|
+
```ts
|
|
558
|
+
const SettingsEditorThemePreferenceContext: import('react').Context<ThemePreference | undefined>;
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
### UserInterfaceCallbacksContext
|
|
562
|
+
|
|
563
|
+
```ts
|
|
564
|
+
const UserInterfaceCallbacksContext: import('react').Context<UserInterfaceCallbacks | undefined>;
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
### UserInterfaceDataContext
|
|
568
|
+
|
|
569
|
+
```ts
|
|
570
|
+
const UserInterfaceDataContext: import('react').Context<
|
|
571
|
+
UserInterfaceDataContextValue<unknown, unknown> | undefined
|
|
572
|
+
>;
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
### UserInterfaceLocaleContext
|
|
576
|
+
|
|
577
|
+
```ts
|
|
578
|
+
const UserInterfaceLocaleContext: import('react').Context<UserInterfaceLocale | undefined>;
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
### UserInterfaceOwnTeamContext
|
|
582
|
+
|
|
583
|
+
```ts
|
|
584
|
+
const UserInterfaceOwnTeamContext: import('react').Context<TeamInfo | null>;
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
### UserInterfaceOwnTeamJoinLinkContext
|
|
588
|
+
|
|
589
|
+
```ts
|
|
590
|
+
const UserInterfaceOwnTeamJoinLinkContext: import('react').Context<OwnTeamJoinLink | null>;
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
### UserInterfaceParticipantContext
|
|
594
|
+
|
|
595
|
+
```ts
|
|
596
|
+
const UserInterfaceParticipantContext: import('react').Context<Participant | null | undefined>;
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
### UserInterfaceParticipantsContext
|
|
600
|
+
|
|
601
|
+
```ts
|
|
602
|
+
const UserInterfaceParticipantsContext: import('react').Context<Participant[]>;
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
### UserInterfaceRunKindContext
|
|
606
|
+
|
|
607
|
+
```ts
|
|
608
|
+
const UserInterfaceRunKindContext: import('react').Context<RunKind>;
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
### UserInterfaceTeamsContext
|
|
612
|
+
|
|
613
|
+
```ts
|
|
614
|
+
const UserInterfaceTeamsContext: import('react').Context<TeamInfo[]>;
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
### UserInterfaceThemeContext
|
|
618
|
+
|
|
619
|
+
```ts
|
|
620
|
+
const UserInterfaceThemeContext: import('react').Context<UserInterfaceTheme | undefined>;
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
### UserInterfaceThemePreferenceContext
|
|
624
|
+
|
|
625
|
+
```ts
|
|
626
|
+
const UserInterfaceThemePreferenceContext: import('react').Context<ThemePreference | undefined>;
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
### UserInterfaceTimerContext
|
|
630
|
+
|
|
631
|
+
```ts
|
|
632
|
+
const UserInterfaceTimerContext: import('react').Context<TimerState>;
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
### UserInterfaceValidationContext
|
|
636
|
+
|
|
637
|
+
```ts
|
|
638
|
+
const UserInterfaceValidationContext: import('react').Context<
|
|
639
|
+
UserInterfaceValidationContextValue | undefined
|
|
640
|
+
>;
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
### UserInterfaceViewerRoleContext
|
|
644
|
+
|
|
645
|
+
```ts
|
|
646
|
+
const UserInterfaceViewerRoleContext: import('react').Context<ViewerRole>;
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
### ViewerStorageContext
|
|
650
|
+
|
|
651
|
+
Provided by every surface wrapper. Exported for the test helpers, which provide it without a host; game code reads it through `useViewerStorage`.
|
|
652
|
+
|
|
653
|
+
```ts
|
|
654
|
+
const ViewerStorageContext: import('react').Context<ViewerStorageScope | undefined>;
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
## Interfaces
|
|
658
|
+
|
|
659
|
+
### AssetScope
|
|
660
|
+
|
|
661
|
+
What a wrapper tells `useAssetUrl` and `useAsset` about its surface.
|
|
662
|
+
|
|
663
|
+
```ts
|
|
664
|
+
interface AssetScope {
|
|
665
|
+
getAssetUrl: ((reference: string) => string) | undefined;
|
|
666
|
+
locale: string | undefined;
|
|
667
|
+
}
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
### AssetState
|
|
671
|
+
|
|
672
|
+
```ts
|
|
673
|
+
interface AssetState<T> {
|
|
674
|
+
data: T | undefined;
|
|
675
|
+
error: Error | undefined;
|
|
676
|
+
loading: boolean;
|
|
677
|
+
}
|
|
678
|
+
```
|
|
679
|
+
|
|
680
|
+
### EndpointFailure
|
|
681
|
+
|
|
682
|
+
A failed endpoint call, itemised so a caller can tell 'nothing happened' from 'the writes landed, then an action failed'.
|
|
683
|
+
|
|
684
|
+
```ts
|
|
685
|
+
interface EndpointFailure {
|
|
686
|
+
outcome: EndpointFailureOutcome;
|
|
687
|
+
applied: EffectStep[];
|
|
688
|
+
failedStep?: EffectStep;
|
|
689
|
+
}
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
### Participant
|
|
693
|
+
|
|
694
|
+
A participant the platform tracks for some team in the session.
|
|
695
|
+
|
|
696
|
+
```ts
|
|
697
|
+
interface Participant {
|
|
698
|
+
id: string;
|
|
699
|
+
name: string;
|
|
700
|
+
index: number;
|
|
701
|
+
connected: boolean;
|
|
702
|
+
teamId: string;
|
|
703
|
+
}
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
### PastStateEntry
|
|
707
|
+
|
|
708
|
+
```ts
|
|
709
|
+
interface PastStateEntry<T = Record<string, unknown>> extends TeamStateEntry<T> {
|
|
710
|
+
tick: number;
|
|
711
|
+
recordedAt: number;
|
|
712
|
+
complete: boolean;
|
|
713
|
+
}
|
|
714
|
+
```
|
|
715
|
+
|
|
716
|
+
### PastStateQuery
|
|
717
|
+
|
|
718
|
+
What to read from the past.
|
|
719
|
+
|
|
720
|
+
```ts
|
|
721
|
+
interface PastStateQuery<T = Record<string, unknown>> {
|
|
722
|
+
fromTick: number;
|
|
723
|
+
toTick?: number;
|
|
724
|
+
teams?: 'own' | 'all' | string;
|
|
725
|
+
capabilityIds?: (keyof T & string)[];
|
|
726
|
+
}
|
|
727
|
+
```
|
|
728
|
+
|
|
729
|
+
### PastStateResult
|
|
730
|
+
|
|
731
|
+
```ts
|
|
732
|
+
interface PastStateResult<T> {
|
|
733
|
+
entries: PastStateEntry<T>[];
|
|
734
|
+
error: Error | undefined;
|
|
735
|
+
loading: boolean;
|
|
736
|
+
refetch: () => void;
|
|
737
|
+
}
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
### PresentationGame
|
|
741
|
+
|
|
742
|
+
The game a presentation belongs to, as the active scenario resolves it. Known with or without a session.
|
|
743
|
+
|
|
744
|
+
```ts
|
|
745
|
+
interface PresentationGame {
|
|
746
|
+
name: string;
|
|
747
|
+
maxTicks: number | null;
|
|
748
|
+
mode: SessionMode;
|
|
749
|
+
scenarioName: string | null;
|
|
750
|
+
}
|
|
751
|
+
```
|
|
752
|
+
|
|
753
|
+
### PresentationSession
|
|
754
|
+
|
|
755
|
+
The session a presentation is shown during: the shared store and every team, narrowed to what the presentation `reads`.
|
|
756
|
+
|
|
757
|
+
```ts
|
|
758
|
+
interface PresentationSession<
|
|
759
|
+
TTeamContext = Record<string, unknown>,
|
|
760
|
+
TSharedContext = Record<string, unknown>,
|
|
761
|
+
> {
|
|
762
|
+
id: string;
|
|
763
|
+
name: string;
|
|
764
|
+
completedTicks: number;
|
|
765
|
+
data: SessionData<TTeamContext, TSharedContext>;
|
|
766
|
+
teams: TeamInfo[];
|
|
767
|
+
}
|
|
768
|
+
```
|
|
769
|
+
|
|
770
|
+
### PresentationValue
|
|
771
|
+
|
|
772
|
+
```ts
|
|
773
|
+
interface PresentationValue<TSettings, TTeamContext, TSharedContext> {
|
|
774
|
+
game: PresentationGame;
|
|
775
|
+
session: PresentationSession<TTeamContext, TSharedContext> | null;
|
|
776
|
+
settings: TSettings;
|
|
777
|
+
theme: SessionUserInterfaceTheme;
|
|
778
|
+
locale: UserInterfaceLocale;
|
|
779
|
+
getPastState: <T = Record<string, unknown>>(
|
|
780
|
+
query: PastStateQuery<T>
|
|
781
|
+
) => Promise<PastStateEntry<T>[]>;
|
|
782
|
+
getAssetUrl: (reference: string) => string;
|
|
783
|
+
}
|
|
784
|
+
```
|
|
785
|
+
|
|
786
|
+
### SessionHookFailure
|
|
787
|
+
|
|
788
|
+
A hook chain that threw, reported to the session surface after the fact.
|
|
789
|
+
|
|
790
|
+
```ts
|
|
791
|
+
interface SessionHookFailure {
|
|
792
|
+
signal: HookSignal;
|
|
793
|
+
teamId: string;
|
|
794
|
+
message: string;
|
|
795
|
+
}
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
### SessionUserInterfaceHookFailuresValue
|
|
799
|
+
|
|
800
|
+
Value exposed to consumers of `useSessionUserInterfaceHookFailures`.
|
|
801
|
+
|
|
802
|
+
```ts
|
|
803
|
+
interface SessionUserInterfaceHookFailuresValue {
|
|
804
|
+
failures: SessionHookFailure[];
|
|
805
|
+
clearFailures: () => void;
|
|
806
|
+
}
|
|
807
|
+
```
|
|
808
|
+
|
|
809
|
+
### TeamInfo
|
|
810
|
+
|
|
811
|
+
Who a team is: the fields every team entry in the SDK carries.
|
|
812
|
+
|
|
813
|
+
```ts
|
|
814
|
+
interface TeamInfo {
|
|
815
|
+
teamId: string;
|
|
816
|
+
index: number;
|
|
817
|
+
name: string;
|
|
818
|
+
}
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
### TeamStateEntry
|
|
822
|
+
|
|
823
|
+
One team's state at one committed past tick, as returned by `getPastState`.
|
|
824
|
+
|
|
825
|
+
```ts
|
|
826
|
+
interface TeamStateEntry<T = Record<string, unknown>> extends TeamInfo {
|
|
827
|
+
context: T;
|
|
828
|
+
}
|
|
829
|
+
```
|
|
830
|
+
|
|
831
|
+
### TimerState
|
|
832
|
+
|
|
833
|
+
The host's automatic tick timer, as every reader sees it.
|
|
834
|
+
|
|
835
|
+
```ts
|
|
836
|
+
interface TimerState {
|
|
837
|
+
enabled: boolean;
|
|
838
|
+
paused: boolean;
|
|
839
|
+
nextTickAt: number | null;
|
|
840
|
+
intervalMs: number | null;
|
|
841
|
+
pausedAt: number | null;
|
|
842
|
+
pausedMs: number;
|
|
843
|
+
extendedMs: number;
|
|
844
|
+
scheduleStartedAt: number | null;
|
|
845
|
+
}
|
|
846
|
+
```
|
|
847
|
+
|
|
848
|
+
### UseAssetOptions
|
|
849
|
+
|
|
850
|
+
```ts
|
|
851
|
+
interface UseAssetOptions<F extends AssetFormat = AssetFormat> {
|
|
852
|
+
as: F;
|
|
853
|
+
locale?: string | false;
|
|
854
|
+
}
|
|
855
|
+
```
|
|
856
|
+
|
|
857
|
+
### UserInterfaceValidationContextValue
|
|
858
|
+
|
|
859
|
+
Value exposed to consumers of `useUserInterfaceValidationRejections`.
|
|
860
|
+
|
|
861
|
+
```ts
|
|
862
|
+
interface UserInterfaceValidationContextValue {
|
|
863
|
+
rejections: ValidationRejection[];
|
|
864
|
+
clearRejections: () => void;
|
|
865
|
+
}
|
|
866
|
+
```
|
|
867
|
+
|
|
868
|
+
### ViewerStorageScope
|
|
869
|
+
|
|
870
|
+
What a wrapper tells `useViewerStorage` about where it is.
|
|
871
|
+
|
|
872
|
+
```ts
|
|
873
|
+
interface ViewerStorageScope {
|
|
874
|
+
sessionKey: string | undefined;
|
|
875
|
+
surface: ViewerStorageSurface;
|
|
876
|
+
viewer: string;
|
|
877
|
+
}
|
|
878
|
+
```
|
|
879
|
+
|
|
880
|
+
## Types
|
|
881
|
+
|
|
882
|
+
### AssetFormat
|
|
883
|
+
|
|
884
|
+
How `useAsset` reads the response body.
|
|
885
|
+
|
|
886
|
+
```ts
|
|
887
|
+
type AssetFormat = 'json' | 'text' | 'blob';
|
|
888
|
+
```
|
|
889
|
+
|
|
890
|
+
### ContextDeletePath
|
|
891
|
+
|
|
892
|
+
Where to remove a key, as a path from the root of the context.
|
|
893
|
+
|
|
894
|
+
```ts
|
|
895
|
+
type ContextDeletePath = string | readonly string[];
|
|
896
|
+
```
|
|
897
|
+
|
|
898
|
+
### ContextUpdate
|
|
899
|
+
|
|
900
|
+
A partial update accepted by `setData` and merged with `deepMergeContext`. Mirrors the merge semantics at the type level: object values may be given partially (they merge), while arrays and scalars must be given whole (they replace).
|
|
901
|
+
|
|
902
|
+
```ts
|
|
903
|
+
type ContextUpdate<T> = {
|
|
904
|
+
[K in keyof T]?: T[K] extends ReadonlyArray<unknown>
|
|
905
|
+
? T[K]
|
|
906
|
+
: T[K] extends Record<string, unknown>
|
|
907
|
+
? ContextUpdate<T[K]>
|
|
908
|
+
: T[K];
|
|
909
|
+
};
|
|
910
|
+
```
|
|
911
|
+
|
|
912
|
+
### CrossTeamData
|
|
913
|
+
|
|
914
|
+
Every team's live cross-team state, one entry per team, sorted by stable team index and including the calling team's own.
|
|
915
|
+
|
|
916
|
+
```ts
|
|
917
|
+
type CrossTeamData = TeamStateEntry[];
|
|
918
|
+
```
|
|
919
|
+
|
|
920
|
+
### EffectStep
|
|
921
|
+
|
|
922
|
+
One effect of an endpoint's result, in the order the runtime applies them: the endpoint's own `capabilities`, then each team's patch under `teams`, then each action by its position in `actions`.
|
|
923
|
+
|
|
924
|
+
```ts
|
|
925
|
+
type EffectStep =
|
|
926
|
+
| {
|
|
927
|
+
kind: 'capabilities';
|
|
928
|
+
}
|
|
929
|
+
| {
|
|
930
|
+
kind: 'teams';
|
|
931
|
+
teamId: string;
|
|
932
|
+
}
|
|
933
|
+
| {
|
|
934
|
+
kind: 'action';
|
|
935
|
+
index: number;
|
|
936
|
+
type: EndpointActionType;
|
|
937
|
+
};
|
|
938
|
+
```
|
|
939
|
+
|
|
940
|
+
### EndpointFailureOutcome
|
|
941
|
+
|
|
942
|
+
Why an endpoint call failed.
|
|
943
|
+
|
|
944
|
+
```ts
|
|
945
|
+
type EndpointFailureOutcome =
|
|
946
|
+
| MutationOutcome
|
|
947
|
+
| {
|
|
948
|
+
kind: 'invalid-request';
|
|
949
|
+
message: string;
|
|
950
|
+
}
|
|
951
|
+
| {
|
|
952
|
+
kind: 'handler-error';
|
|
953
|
+
message: string;
|
|
954
|
+
}
|
|
955
|
+
| {
|
|
956
|
+
kind: 'invalid-response';
|
|
957
|
+
message: string;
|
|
958
|
+
};
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
### HostOverlay
|
|
962
|
+
|
|
963
|
+
A host-rendered overlay a session surface may ask the host to open.
|
|
964
|
+
|
|
965
|
+
```ts
|
|
966
|
+
type HostOverlay = 'facilitator-guide' | 'print-sheets';
|
|
967
|
+
```
|
|
968
|
+
|
|
969
|
+
### MutationFailure
|
|
970
|
+
|
|
971
|
+
A mutation that failed in a way the participant needs to know about.
|
|
972
|
+
|
|
973
|
+
```ts
|
|
974
|
+
type MutationFailure = {
|
|
975
|
+
outcome: MutationOutcome;
|
|
976
|
+
action?: string;
|
|
977
|
+
retry?: () => Promise<boolean>;
|
|
978
|
+
};
|
|
979
|
+
```
|
|
980
|
+
|
|
981
|
+
### MutationOutcome
|
|
982
|
+
|
|
983
|
+
The reason a mutation failed.
|
|
984
|
+
|
|
985
|
+
```ts
|
|
986
|
+
type MutationOutcome =
|
|
987
|
+
| {
|
|
988
|
+
kind: 'conflict';
|
|
989
|
+
message?: string;
|
|
990
|
+
}
|
|
991
|
+
| {
|
|
992
|
+
kind: 'superseded';
|
|
993
|
+
message: string;
|
|
994
|
+
committedAtTick?: number;
|
|
995
|
+
}
|
|
996
|
+
| {
|
|
997
|
+
kind: 'validation-rejected';
|
|
998
|
+
rejections: ValidationRejection[];
|
|
999
|
+
message?: string;
|
|
1000
|
+
}
|
|
1001
|
+
| {
|
|
1002
|
+
kind: 'denied';
|
|
1003
|
+
message: string;
|
|
1004
|
+
}
|
|
1005
|
+
| {
|
|
1006
|
+
kind: 'tick-failed';
|
|
1007
|
+
message: string;
|
|
1008
|
+
}
|
|
1009
|
+
| {
|
|
1010
|
+
kind: 'error';
|
|
1011
|
+
message: string;
|
|
1012
|
+
};
|
|
1013
|
+
```
|
|
1014
|
+
|
|
1015
|
+
### MutationReporter
|
|
1016
|
+
|
|
1017
|
+
```ts
|
|
1018
|
+
type MutationReporter = {
|
|
1019
|
+
run: (mutate: () => Promise<unknown>, action?: string) => Promise<boolean>;
|
|
1020
|
+
pending: boolean;
|
|
1021
|
+
late: MutationCommit | null;
|
|
1022
|
+
failure: MutationFailure | null;
|
|
1023
|
+
dismiss: () => void;
|
|
1024
|
+
};
|
|
1025
|
+
```
|
|
1026
|
+
|
|
1027
|
+
### OwnTeamJoinLink
|
|
1028
|
+
|
|
1029
|
+
How to join _this_ surface's team.
|
|
1030
|
+
|
|
1031
|
+
```ts
|
|
1032
|
+
type OwnTeamJoinLink = {
|
|
1033
|
+
joinUrl: string;
|
|
1034
|
+
fallbackJoinUrl?: string;
|
|
1035
|
+
};
|
|
1036
|
+
```
|
|
1037
|
+
|
|
1038
|
+
### PastStateReader
|
|
1039
|
+
|
|
1040
|
+
The surface's `getPastState` callback, as `usePastState` calls it.
|
|
1041
|
+
|
|
1042
|
+
```ts
|
|
1043
|
+
type PastStateReader = <T = Record<string, unknown>>(
|
|
1044
|
+
query: PastStateQuery<T>
|
|
1045
|
+
) => Promise<PastStateEntry<T>[]>;
|
|
1046
|
+
```
|
|
1047
|
+
|
|
1048
|
+
### RunKind
|
|
1049
|
+
|
|
1050
|
+
Which kind of run a function is executing in.
|
|
1051
|
+
|
|
1052
|
+
```ts
|
|
1053
|
+
type RunKind = 'session' | 'walkthrough';
|
|
1054
|
+
```
|
|
1055
|
+
|
|
1056
|
+
### SessionData
|
|
1057
|
+
|
|
1058
|
+
Everything a session surface is shown of the session's state.
|
|
1059
|
+
|
|
1060
|
+
```ts
|
|
1061
|
+
type SessionData<
|
|
1062
|
+
TTeamContext = Record<string, unknown>,
|
|
1063
|
+
TSharedContext = Record<string, unknown>,
|
|
1064
|
+
> = {
|
|
1065
|
+
shared: SharedState<TSharedContext>;
|
|
1066
|
+
teams: Record<string, TeamState<TTeamContext>>;
|
|
1067
|
+
};
|
|
1068
|
+
```
|
|
1069
|
+
|
|
1070
|
+
### SessionMeta
|
|
1071
|
+
|
|
1072
|
+
The session's identity and lifecycle state, pushed on connect and again whenever any of it changes.
|
|
1073
|
+
|
|
1074
|
+
```ts
|
|
1075
|
+
type SessionMeta = {
|
|
1076
|
+
sessionId: string;
|
|
1077
|
+
name: string;
|
|
1078
|
+
readOnly: boolean;
|
|
1079
|
+
waitingRoomOpen: boolean;
|
|
1080
|
+
joinPin: string | null;
|
|
1081
|
+
};
|
|
1082
|
+
```
|
|
1083
|
+
|
|
1084
|
+
### SessionUserInterfaceLocale
|
|
1085
|
+
|
|
1086
|
+
```ts
|
|
1087
|
+
type SessionUserInterfaceLocale = {
|
|
1088
|
+
locale: string;
|
|
1089
|
+
};
|
|
1090
|
+
```
|
|
1091
|
+
|
|
1092
|
+
### SessionUserInterfaceModeColors
|
|
1093
|
+
|
|
1094
|
+
```ts
|
|
1095
|
+
type SessionUserInterfaceModeColors = SurfaceModeColors;
|
|
1096
|
+
```
|
|
1097
|
+
|
|
1098
|
+
### SessionUserInterfaceTheme
|
|
1099
|
+
|
|
1100
|
+
```ts
|
|
1101
|
+
type SessionUserInterfaceTheme = {
|
|
1102
|
+
mode: 'dark' | 'light';
|
|
1103
|
+
dark: SessionUserInterfaceModeColors;
|
|
1104
|
+
light: SessionUserInterfaceModeColors;
|
|
1105
|
+
};
|
|
1106
|
+
```
|
|
1107
|
+
|
|
1108
|
+
### SetDataOptions
|
|
1109
|
+
|
|
1110
|
+
What a write can do beyond merging fields.
|
|
1111
|
+
|
|
1112
|
+
```ts
|
|
1113
|
+
type SetDataOptions = {
|
|
1114
|
+
deletes?: ContextDeletePath[];
|
|
1115
|
+
};
|
|
1116
|
+
```
|
|
1117
|
+
|
|
1118
|
+
### SettingsEditorLocale
|
|
1119
|
+
|
|
1120
|
+
```ts
|
|
1121
|
+
type SettingsEditorLocale = {
|
|
1122
|
+
locale: string;
|
|
1123
|
+
};
|
|
1124
|
+
```
|
|
1125
|
+
|
|
1126
|
+
### SettingsEditorModeColors
|
|
1127
|
+
|
|
1128
|
+
```ts
|
|
1129
|
+
type SettingsEditorModeColors = SurfaceModeColors;
|
|
1130
|
+
```
|
|
1131
|
+
|
|
1132
|
+
### SettingsEditorTheme
|
|
1133
|
+
|
|
1134
|
+
```ts
|
|
1135
|
+
type SettingsEditorTheme = {
|
|
1136
|
+
mode: 'dark' | 'light';
|
|
1137
|
+
dark: SettingsEditorModeColors;
|
|
1138
|
+
light: SettingsEditorModeColors;
|
|
1139
|
+
};
|
|
1140
|
+
```
|
|
1141
|
+
|
|
1142
|
+
### SettingsEditorValue
|
|
1143
|
+
|
|
1144
|
+
What a settings editor edits: the `setup` slot and the `scenario_editor` slot share it.
|
|
1145
|
+
|
|
1146
|
+
```ts
|
|
1147
|
+
type SettingsEditorValue<T> = {
|
|
1148
|
+
settings: T;
|
|
1149
|
+
updateSettings: (update: Partial<T>) => Promise<void>;
|
|
1150
|
+
configures: string[];
|
|
1151
|
+
};
|
|
1152
|
+
```
|
|
1153
|
+
|
|
1154
|
+
### SharedState
|
|
1155
|
+
|
|
1156
|
+
```ts
|
|
1157
|
+
type SharedState<TSharedContext = Record<string, unknown>> = {
|
|
1158
|
+
context: TSharedContext;
|
|
1159
|
+
revision: number;
|
|
1160
|
+
};
|
|
1161
|
+
```
|
|
1162
|
+
|
|
1163
|
+
### TeamConfiguration
|
|
1164
|
+
|
|
1165
|
+
How teams work in this session: the interaction mode, and the bounds the host will hold the surface to.
|
|
1166
|
+
|
|
1167
|
+
```ts
|
|
1168
|
+
type TeamConfiguration = {
|
|
1169
|
+
mode: SessionMode;
|
|
1170
|
+
min?: number;
|
|
1171
|
+
max: number;
|
|
1172
|
+
perTeam?: {
|
|
1173
|
+
minParticipants?: number;
|
|
1174
|
+
maxParticipants?: number;
|
|
1175
|
+
};
|
|
1176
|
+
};
|
|
1177
|
+
```
|
|
1178
|
+
|
|
1179
|
+
### TeamLinks
|
|
1180
|
+
|
|
1181
|
+
A team's facilitator-only links: how participants join it, and how to watch it without joining.
|
|
1182
|
+
|
|
1183
|
+
```ts
|
|
1184
|
+
type TeamLinks = {
|
|
1185
|
+
teamId: string;
|
|
1186
|
+
joinUrl: string;
|
|
1187
|
+
fallbackJoinUrl?: string;
|
|
1188
|
+
observeUrl: string;
|
|
1189
|
+
};
|
|
1190
|
+
```
|
|
1191
|
+
|
|
1192
|
+
### TeamState
|
|
1193
|
+
|
|
1194
|
+
Session-level data context for session user interfaces.
|
|
1195
|
+
|
|
1196
|
+
```ts
|
|
1197
|
+
type TeamState<TTeamContext = Record<string, unknown>> = {
|
|
1198
|
+
context: TTeamContext;
|
|
1199
|
+
completedTicks: number;
|
|
1200
|
+
timer: TimerState;
|
|
1201
|
+
revision: number;
|
|
1202
|
+
};
|
|
1203
|
+
```
|
|
1204
|
+
|
|
1205
|
+
### ThemeColorRole
|
|
1206
|
+
|
|
1207
|
+
The palette roles a theme sends, each a colour a surface may paint with.
|
|
1208
|
+
|
|
1209
|
+
```ts
|
|
1210
|
+
type ThemeColorRole = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info';
|
|
1211
|
+
```
|
|
1212
|
+
|
|
1213
|
+
### ThemeContrastText
|
|
1214
|
+
|
|
1215
|
+
One text colour per palette role, for text drawn on that role's colour.
|
|
1216
|
+
|
|
1217
|
+
```ts
|
|
1218
|
+
type ThemeContrastText = Record<ThemeColorRole, string>;
|
|
1219
|
+
```
|
|
1220
|
+
|
|
1221
|
+
### UserInterfaceLocale
|
|
1222
|
+
|
|
1223
|
+
```ts
|
|
1224
|
+
type UserInterfaceLocale = {
|
|
1225
|
+
locale: string;
|
|
1226
|
+
};
|
|
1227
|
+
```
|
|
1228
|
+
|
|
1229
|
+
### UserInterfaceModeColors
|
|
1230
|
+
|
|
1231
|
+
```ts
|
|
1232
|
+
type UserInterfaceModeColors = SurfaceModeColors;
|
|
1233
|
+
```
|
|
1234
|
+
|
|
1235
|
+
### UserInterfaceTheme
|
|
1236
|
+
|
|
1237
|
+
```ts
|
|
1238
|
+
type UserInterfaceTheme = {
|
|
1239
|
+
mode: 'dark' | 'light';
|
|
1240
|
+
dark: UserInterfaceModeColors;
|
|
1241
|
+
light: UserInterfaceModeColors;
|
|
1242
|
+
};
|
|
1243
|
+
```
|
|
1244
|
+
|
|
1245
|
+
### ViewerRole
|
|
1246
|
+
|
|
1247
|
+
Which viewer a player surface is being rendered for.
|
|
1248
|
+
|
|
1249
|
+
```ts
|
|
1250
|
+
type ViewerRole = 'participant' | 'observer';
|
|
1251
|
+
```
|
|
1252
|
+
|
|
1253
|
+
### ViewerStorageSurface
|
|
1254
|
+
|
|
1255
|
+
Which surface a wrapper renders, as far as storage is concerned.
|
|
1256
|
+
|
|
1257
|
+
```ts
|
|
1258
|
+
type ViewerStorageSurface = 'player' | 'session' | 'settings-editor' | 'presentation';
|
|
1259
|
+
```
|
|
1260
|
+
|
|
1261
|
+
### WalkthroughLink
|
|
1262
|
+
|
|
1263
|
+
Where to open the walkthrough run.
|
|
1264
|
+
|
|
1265
|
+
```ts
|
|
1266
|
+
type WalkthroughLink = {
|
|
1267
|
+
url: string;
|
|
1268
|
+
};
|
|
1269
|
+
```
|