@dreamboard-games/sdk 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +96 -0
- package/README.md +12 -0
- package/dist/HandView-ncJIVLhN.d.ts +193 -0
- package/dist/ResourceCounter-CTREyF73.d.ts +102 -0
- package/dist/ThemeProvider-fy0_QzgO.d.ts +99 -0
- package/dist/bundle-TIZcw8LB.d.ts +281 -0
- package/dist/cards-Sl3b40Mv.d.ts +13 -0
- package/dist/chunk-7YAHLYBR.js +481 -0
- package/dist/chunk-7YAHLYBR.js.map +1 -0
- package/dist/chunk-FDNZTDD6.js +8085 -0
- package/dist/chunk-FDNZTDD6.js.map +1 -0
- package/dist/chunk-GKKBPPSW.js +598 -0
- package/dist/chunk-GKKBPPSW.js.map +1 -0
- package/dist/chunk-I46YJSOD.js +1 -0
- package/dist/chunk-I46YJSOD.js.map +1 -0
- package/dist/chunk-KAELH4KC.js +104 -0
- package/dist/chunk-KAELH4KC.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-PZ5AY32C.js.map +1 -0
- package/dist/chunk-T3ZKNUZ7.js +1 -0
- package/dist/chunk-T3ZKNUZ7.js.map +1 -0
- package/dist/chunk-T52J5RMF.js +1 -0
- package/dist/chunk-T52J5RMF.js.map +1 -0
- package/dist/chunk-TDSWKVZ4.js +5401 -0
- package/dist/chunk-TDSWKVZ4.js.map +1 -0
- package/dist/chunk-U5C6BONG.js +34 -0
- package/dist/chunk-U5C6BONG.js.map +1 -0
- package/dist/chunk-VDXOF4FW.js +69 -0
- package/dist/chunk-VDXOF4FW.js.map +1 -0
- package/dist/chunk-VFTAA4WO.js +115 -0
- package/dist/chunk-VFTAA4WO.js.map +1 -0
- package/dist/chunk-WN74KVNY.js +17 -0
- package/dist/chunk-WN74KVNY.js.map +1 -0
- package/dist/chunk-WYPQ3GG5.js +10990 -0
- package/dist/chunk-WYPQ3GG5.js.map +1 -0
- package/dist/components-D5ZRE2Hl.d.ts +1451 -0
- package/dist/generated/runtime/primitives.d.ts +12 -0
- package/dist/generated/runtime/primitives.js +180 -0
- package/dist/generated/runtime/primitives.js.map +1 -0
- package/dist/generated/runtime-api.d.ts +3 -0
- package/dist/generated/runtime-api.js +2 -0
- package/dist/generated/runtime-api.js.map +1 -0
- package/dist/generated/runtime.d.ts +14 -0
- package/dist/generated/runtime.js +18 -0
- package/dist/generated/runtime.js.map +1 -0
- package/dist/generated/workspace-contract.d.ts +14 -0
- package/dist/generated/workspace-contract.js +14 -0
- package/dist/generated/workspace-contract.js.map +1 -0
- package/dist/hex-board-view-D_07hO6O.d.ts +933 -0
- package/dist/hex-color-MhOyuY-o.d.ts +8 -0
- package/dist/index-BwqPQtBu.d.ts +1433 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/reducer-bundle-abi.d.ts +1083 -0
- package/dist/infrastructure/reducer-bundle-abi.js +14 -0
- package/dist/infrastructure/reducer-bundle-abi.js.map +1 -0
- package/dist/infrastructure/workspace-codegen.d.ts +53 -0
- package/dist/infrastructure/workspace-codegen.js +44 -0
- package/dist/infrastructure/workspace-codegen.js.map +1 -0
- package/dist/manifest-contract-BNHVGFtU.d.ts +9 -0
- package/dist/package-set.d.ts +13 -0
- package/dist/package-set.js +12 -0
- package/dist/package-set.js.map +1 -0
- package/dist/primitive-props-DpKs-GCr.d.ts +11 -0
- package/dist/reducer.d.ts +3786 -0
- package/dist/reducer.js +8131 -0
- package/dist/reducer.js.map +1 -0
- package/dist/runtime/primitives.d.ts +226 -0
- package/dist/runtime/primitives.js +180 -0
- package/dist/runtime/primitives.js.map +1 -0
- package/dist/runtime/types/runtime-api.d.ts +1 -0
- package/dist/runtime/types/runtime-api.js +2 -0
- package/dist/runtime/types/runtime-api.js.map +1 -0
- package/dist/runtime/workspace-contract.d.ts +172 -0
- package/dist/runtime/workspace-contract.js +14 -0
- package/dist/runtime/workspace-contract.js.map +1 -0
- package/dist/runtime-api-3dshj6kK.d.ts +101 -0
- package/dist/runtime-api-DWxvTr-O.d.ts +379 -0
- package/dist/runtime.d.ts +58 -0
- package/dist/runtime.js +13 -0
- package/dist/runtime.js.map +1 -0
- package/dist/slots-1GPGihk8.d.ts +8 -0
- package/dist/testing.d.ts +149 -0
- package/dist/testing.js +513 -0
- package/dist/testing.js.map +1 -0
- package/dist/types.d.ts +496 -0
- package/dist/types.js +28 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/components.d.ts +16 -0
- package/dist/ui/components.js +192 -0
- package/dist/ui/components.js.map +1 -0
- package/dist/ui/defaults.d.ts +19 -0
- package/dist/ui/defaults.js +104 -0
- package/dist/ui/defaults.js.map +1 -0
- package/dist/ui/plugin-styles.css +250 -0
- package/dist/ui/types/player-state.d.ts +365 -0
- package/dist/ui/types/player-state.js +1 -0
- package/dist/ui/types/player-state.js.map +1 -0
- package/dist/ui-contract-iQfTtUSL.d.ts +1161 -0
- package/dist/ui.d.ts +320 -0
- package/dist/ui.js +253 -0
- package/dist/ui.js.map +1 -0
- package/package.json +199 -0
- package/src/generated/reducer-contract/builders.ts +90 -0
- package/src/generated/reducer-contract/version.ts +9 -0
- package/src/generated/reducer-contract/wire.ts +100 -0
- package/src/generated/reducer-contract/zod.ts +101 -0
- package/src/generated/runtime/primitives.ts +2 -0
- package/src/generated/runtime-api.ts +5 -0
- package/src/generated/runtime.ts +35 -0
- package/src/generated/workspace-contract.ts +2 -0
- package/src/index.ts +7 -0
- package/src/infrastructure/reducer-bundle-abi.ts +8 -0
- package/src/infrastructure/reducer-contract/bundle.ts +37 -0
- package/src/infrastructure/workspace-codegen/hex-geometry.ts +69 -0
- package/src/infrastructure/workspace-codegen/index.ts +64 -0
- package/src/infrastructure/workspace-codegen/manifest-contract.ts +6632 -0
- package/src/infrastructure/workspace-codegen/manifest-validation.ts +795 -0
- package/src/infrastructure/workspace-codegen/ownership.ts +131 -0
- package/src/infrastructure/workspace-codegen/preset-card-sets.ts +169 -0
- package/src/infrastructure/workspace-codegen/seeds.ts +1705 -0
- package/src/infrastructure/workspace-codegen.ts +1 -0
- package/src/package-set.ts +19 -0
- package/src/reducer/authoring/contract.ts +157 -0
- package/src/reducer/authoring/effect.ts +224 -0
- package/src/reducer/authoring/game.ts +23 -0
- package/src/reducer/authoring/interaction.ts +98 -0
- package/src/reducer/authoring/phase.ts +300 -0
- package/src/reducer/authoring/types.ts +70 -0
- package/src/reducer/authoring/validation.ts +382 -0
- package/src/reducer/authoring/view-stage.ts +68 -0
- package/src/reducer/authoring.ts +29 -0
- package/src/reducer/bundle/ingress-bundle.ts +491 -0
- package/src/reducer/bundle/trusted/engine-instruction-resolver.ts +254 -0
- package/src/reducer/bundle/trusted/flow-instruction-resolver.ts +73 -0
- package/src/reducer/bundle/trusted/instruction-runner.ts +414 -0
- package/src/reducer/bundle/trusted/interaction-authorization.ts +137 -0
- package/src/reducer/bundle/trusted/interaction-collectors.ts +859 -0
- package/src/reducer/bundle/trusted/interaction-decision.ts +747 -0
- package/src/reducer/bundle/trusted/interaction-resolver.ts +95 -0
- package/src/reducer/bundle/trusted/interaction-types.ts +171 -0
- package/src/reducer/bundle/trusted/lifecycle-runner.ts +427 -0
- package/src/reducer/bundle/trusted/projection-builder.ts +356 -0
- package/src/reducer/bundle/trusted/projection-context.ts +39 -0
- package/src/reducer/bundle/trusted/rng-sampler.ts +150 -0
- package/src/reducer/bundle/trusted/runtime-registry.ts +120 -0
- package/src/reducer/bundle/trusted/runtime-scope.ts +336 -0
- package/src/reducer/bundle/trusted/simultaneous-player.ts +97 -0
- package/src/reducer/bundle/trusted/stage-resolver.ts +87 -0
- package/src/reducer/bundle/trusted/static-projection.ts +116 -0
- package/src/reducer/bundle/trusted/trusted-runtime-args.ts +97 -0
- package/src/reducer/bundle/trusted/trusted-runtime-result.ts +39 -0
- package/src/reducer/bundle/trusted/trusted-setup-profiles.ts +43 -0
- package/src/reducer/bundle/trusted/trusted-state-codec.ts +48 -0
- package/src/reducer/bundle/trusted-bundle.ts +97 -0
- package/src/reducer/bundle/types.ts +171 -0
- package/src/reducer/bundle.ts +2 -0
- package/src/reducer/client-param-schemas.ts +57 -0
- package/src/reducer/compose.ts +34 -0
- package/src/reducer/core/runtime-input.ts +30 -0
- package/src/reducer/core/runtime-instruction.ts +59 -0
- package/src/reducer/core/types.ts +62 -0
- package/src/reducer/definition-index.ts +277 -0
- package/src/reducer/derived.ts +106 -0
- package/src/reducer/effects.ts +92 -0
- package/src/reducer/engine/runtime-instruction-engine.ts +155 -0
- package/src/reducer/ingress/decode-runtime-input.ts +7 -0
- package/src/reducer/ingress/decode-session-state.ts +9 -0
- package/src/reducer/ingress/encode-session-state.ts +6 -0
- package/src/reducer/ingress/input-codec.ts +18 -0
- package/src/reducer/ingress/phase-schemas.ts +62 -0
- package/src/reducer/ingress/raw-types.ts +107 -0
- package/src/reducer/ingress/runtime-codec.ts +14 -0
- package/src/reducer/ingress/runtime-payload.ts +13 -0
- package/src/reducer/ingress/session-codec.ts +392 -0
- package/src/reducer/ingress/types.ts +6 -0
- package/src/reducer/inputs/boardInput.ts +217 -0
- package/src/reducer/inputs/boardTarget.ts +190 -0
- package/src/reducer/inputs/cardInput.ts +86 -0
- package/src/reducer/inputs/cardTarget.ts +101 -0
- package/src/reducer/inputs/choiceTarget.ts +104 -0
- package/src/reducer/inputs/defineInputs.ts +71 -0
- package/src/reducer/inputs/formInput.ts +809 -0
- package/src/reducer/inputs/many.ts +120 -0
- package/src/reducer/inputs/promptInput.ts +87 -0
- package/src/reducer/inputs/rngInput.ts +58 -0
- package/src/reducer/inputs/targetRule.ts +123 -0
- package/src/reducer/inputs.ts +41 -0
- package/src/reducer/model/definition.ts +1072 -0
- package/src/reducer/model/extract.ts +745 -0
- package/src/reducer/model/manifest.ts +570 -0
- package/src/reducer/model/queries.ts +641 -0
- package/src/reducer/model/runtime.ts +264 -0
- package/src/reducer/model/spec.ts +1386 -0
- package/src/reducer/model/table.ts +260 -0
- package/src/reducer/model.ts +7 -0
- package/src/reducer/ops.ts +1034 -0
- package/src/reducer/parse-utils.ts +28 -0
- package/src/reducer/per-player.ts +422 -0
- package/src/reducer/rng.ts +69 -0
- package/src/reducer/schema-helpers.ts +185 -0
- package/src/reducer/setup-bootstrap-helpers.ts +171 -0
- package/src/reducer/setup-bootstrap.ts +481 -0
- package/src/reducer/table-ops.ts +2671 -0
- package/src/reducer/table-queries.ts +372 -0
- package/src/reducer/transaction.ts +120 -0
- package/src/reducer.ts +314 -0
- package/src/runtime/primitives.ts +1 -0
- package/src/runtime/types/runtime-api.ts +1 -0
- package/src/runtime/workspace-contract.ts +32 -0
- package/src/runtime-internal/components/InteractionForm.tsx +1309 -0
- package/src/runtime-internal/components/PluginRuntime.tsx +103 -0
- package/src/runtime-internal/components/board/target-layer.ts +70 -0
- package/src/runtime-internal/context/ClientParamSchemaContext.tsx +44 -0
- package/src/runtime-internal/context/InteractionDraftContext.tsx +279 -0
- package/src/runtime-internal/context/PluginSessionContext.tsx +47 -0
- package/src/runtime-internal/context/PluginStateContext.tsx +262 -0
- package/src/runtime-internal/context/RuntimeContext.tsx +96 -0
- package/src/runtime-internal/defaults/components.tsx +409 -0
- package/src/runtime-internal/defaults/index.ts +11 -0
- package/src/runtime-internal/errors/ValidationError.ts +29 -0
- package/src/runtime-internal/hooks/useActivePlayers.ts +33 -0
- package/src/runtime-internal/hooks/useBoardInteractions.ts +665 -0
- package/src/runtime-internal/hooks/useGameSelector.ts +105 -0
- package/src/runtime-internal/hooks/useGameView.ts +9 -0
- package/src/runtime-internal/hooks/useInteractionByKey.ts +354 -0
- package/src/runtime-internal/hooks/useInteractionHandle.ts +438 -0
- package/src/runtime-internal/hooks/useIsMyTurn.ts +20 -0
- package/src/runtime-internal/hooks/useLobby.ts +76 -0
- package/src/runtime-internal/hooks/useMe.ts +48 -0
- package/src/runtime-internal/hooks/usePlayerInfo.ts +28 -0
- package/src/runtime-internal/hooks/usePlayerTurnOrder.ts +23 -0
- package/src/runtime-internal/hooks/usePluginRuntime.ts +147 -0
- package/src/runtime-internal/hooks/useSeatInbox.ts +61 -0
- package/src/runtime-internal/hooks/useSimultaneousPhase.ts +10 -0
- package/src/runtime-internal/index.ts +42 -0
- package/src/runtime-internal/internal.ts +43 -0
- package/src/runtime-internal/plugin-styles.css +250 -0
- package/src/runtime-internal/primitives/board.tsx +459 -0
- package/src/runtime-internal/primitives/dialog-lifecycle.ts +58 -0
- package/src/runtime-internal/primitives/dice.tsx +79 -0
- package/src/runtime-internal/primitives/game-ui-provider.tsx +35 -0
- package/src/runtime-internal/primitives/game.tsx +387 -0
- package/src/runtime-internal/primitives/hand-intent-adapter.ts +147 -0
- package/src/runtime-internal/primitives/hand-surface.tsx +594 -0
- package/src/runtime-internal/primitives/index.ts +196 -0
- package/src/runtime-internal/primitives/interaction-form-binding.tsx +56 -0
- package/src/runtime-internal/primitives/interaction-submit.ts +90 -0
- package/src/runtime-internal/primitives/interaction.tsx +987 -0
- package/src/runtime-internal/primitives/phase.tsx +43 -0
- package/src/runtime-internal/primitives/player-roster.tsx +302 -0
- package/src/runtime-internal/primitives/primitive-props.tsx +101 -0
- package/src/runtime-internal/primitives/prompt.tsx +255 -0
- package/src/runtime-internal/primitives/ui.tsx +60 -0
- package/src/runtime-internal/primitives/zone.tsx +791 -0
- package/src/runtime-internal/reducer.ts +30 -0
- package/src/runtime-internal/runtime/createPluginRuntimeAPI.ts +605 -0
- package/src/runtime-internal/types/plugin-state.ts +508 -0
- package/src/runtime-internal/types/reducer-state.ts +24 -0
- package/src/runtime-internal/types/runtime-api.ts +114 -0
- package/src/runtime-internal/ui-contract.ts +519 -0
- package/src/runtime-internal/utils/card-intent-adapter.ts +546 -0
- package/src/runtime-internal/utils/interaction-inputs.ts +492 -0
- package/src/runtime-internal/utils/interaction-labels.ts +23 -0
- package/src/runtime-internal/utils/interaction-router.ts +273 -0
- package/src/runtime-internal/utils/interaction-status.ts +74 -0
- package/src/runtime-internal/workspace-contract.ts +1170 -0
- package/src/runtime.ts +34 -0
- package/src/testing/create-expect-api.ts +352 -0
- package/src/testing/create-test-runtime.ts +381 -0
- package/src/testing/definitions.ts +127 -0
- package/src/testing/index.ts +3 -0
- package/src/testing.ts +1 -0
- package/src/type-stubs/manifest-contract.d.ts +42 -0
- package/src/type-stubs/manifest-contract.js +72 -0
- package/src/type-stubs/ui-contract.d.ts +5 -0
- package/src/type-stubs/ui-contract.js +1 -0
- package/src/types/authoring-card-properties.type-test.ts +266 -0
- package/src/types/authoring.ts +1282 -0
- package/src/types/cards.ts +19 -0
- package/src/types/contracts.ts +1550 -0
- package/src/types/generated-helpers.ts +35 -0
- package/src/types/index.ts +147 -0
- package/src/types/slots.ts +11 -0
- package/src/types.ts +1 -0
- package/src/ui/components/ActionButton.tsx +97 -0
- package/src/ui/components/ActionPanel.tsx +315 -0
- package/src/ui/components/Card.tsx +378 -0
- package/src/ui/components/CardDragSurface.tsx +1076 -0
- package/src/ui/components/ChromeSuppressionContext.tsx +70 -0
- package/src/ui/components/CostDisplay.tsx +145 -0
- package/src/ui/components/DiceRoller.tsx +581 -0
- package/src/ui/components/Drawer.tsx +180 -0
- package/src/ui/components/ErrorBoundary.tsx +275 -0
- package/src/ui/components/GameEndDisplay.tsx +398 -0
- package/src/ui/components/GameSkeleton.tsx +260 -0
- package/src/ui/components/Hand.tsx +468 -0
- package/src/ui/components/HandDock.tsx +299 -0
- package/src/ui/components/HandView.tsx +441 -0
- package/src/ui/components/MobileHandTray.tsx +381 -0
- package/src/ui/components/MoreActions.tsx +143 -0
- package/src/ui/components/PhaseIndicator.tsx +341 -0
- package/src/ui/components/PlayArea.tsx +146 -0
- package/src/ui/components/PrimaryActionButton.tsx +336 -0
- package/src/ui/components/PrimaryButton.tsx +45 -0
- package/src/ui/components/ResourceCounter.tsx +270 -0
- package/src/ui/components/StagingZone.tsx +134 -0
- package/src/ui/components/ThemedButton.tsx +113 -0
- package/src/ui/components/Toast.tsx +264 -0
- package/src/ui/components/board/HexGrid.tsx +1294 -0
- package/src/ui/components/board/NetworkGraph.tsx +476 -0
- package/src/ui/components/board/SlotSystem.tsx +388 -0
- package/src/ui/components/board/SquareGrid.tsx +1165 -0
- package/src/ui/components/board/TrackBoard.tsx +496 -0
- package/src/ui/components/board/ZoneMap.tsx +448 -0
- package/src/ui/components/board/hex-board-view.ts +123 -0
- package/src/ui/components/board/index.ts +142 -0
- package/src/ui/components/board/interaction-accessibility.ts +21 -0
- package/src/ui/components/board/target-layer.ts +66 -0
- package/src/ui/components/card-render-content.type-test.ts +27 -0
- package/src/ui/components/hand-layout-math.ts +163 -0
- package/src/ui/components/hand-pointer-engine.ts +413 -0
- package/src/ui/components/index.ts +245 -0
- package/src/ui/components.ts +1 -0
- package/src/ui/defaults/components.tsx +106 -0
- package/src/ui/defaults/index.ts +8 -0
- package/src/ui/defaults.ts +1 -0
- package/src/ui/errors/ValidationError.ts +29 -0
- package/src/ui/helpers/cards.ts +19 -0
- package/src/ui/helpers/track-board.ts +211 -0
- package/src/ui/hooks/useBoardTopology.ts +316 -0
- package/src/ui/hooks/useCards.ts +10 -0
- package/src/ui/hooks/useHandCardPointer.ts +381 -0
- package/src/ui/hooks/useHandLayout.ts +378 -0
- package/src/ui/hooks/useHandPresentation.ts +121 -0
- package/src/ui/hooks/useHexBoard.ts +74 -0
- package/src/ui/hooks/useHexGrid.ts +185 -0
- package/src/ui/hooks/useIsMobile.ts +35 -0
- package/src/ui/hooks/usePanZoom.ts +278 -0
- package/src/ui/hooks/useSquareBoard.ts +124 -0
- package/src/ui/hooks/useSquareGrid.ts +328 -0
- package/src/ui/index.ts +98 -0
- package/src/ui/internal/ui/alert.tsx +51 -0
- package/src/ui/internal/ui/button.tsx +58 -0
- package/src/ui/internal/ui/dialog.tsx +134 -0
- package/src/ui/internal/ui/input.tsx +21 -0
- package/src/ui/internal/ui/label.tsx +21 -0
- package/src/ui/internal/ui/select.tsx +129 -0
- package/src/ui/internal/ui/tooltip.tsx +54 -0
- package/src/ui/internal/ui/utils.ts +5 -0
- package/src/ui/plugin-styles.css +250 -0
- package/src/ui/primitives/dialog-lifecycle.ts +58 -0
- package/src/ui/primitives/dice.tsx +79 -0
- package/src/ui/primitives/primitive-props.tsx +101 -0
- package/src/ui/theme/ThemeProvider.tsx +252 -0
- package/src/ui/theme/board.ts +61 -0
- package/src/ui/theme/css-vars.ts +105 -0
- package/src/ui/theme/derive.ts +240 -0
- package/src/ui/theme/index.ts +61 -0
- package/src/ui/theme/presets/arcade.ts +261 -0
- package/src/ui/theme/presets/studio.ts +261 -0
- package/src/ui/theme/presets/tabletop.ts +266 -0
- package/src/ui/theme/tokens.ts +392 -0
- package/src/ui/types/hex-color.ts +20 -0
- package/src/ui/types/player-state.ts +463 -0
- package/src/ui/types/tiled-board.ts +785 -0
- package/src/ui/types/visual-state.ts +137 -0
- package/src/ui.ts +1 -0
|
@@ -0,0 +1,1433 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supported player-count metadata for the game
|
|
3
|
+
*/
|
|
4
|
+
type PlayersDefinition = {
|
|
5
|
+
minPlayers: number;
|
|
6
|
+
maxPlayers: number;
|
|
7
|
+
optimalPlayers?: number;
|
|
8
|
+
};
|
|
9
|
+
type PresetCardSetDefinition = {
|
|
10
|
+
/**
|
|
11
|
+
* Unique local identifier for the authored card set
|
|
12
|
+
*/
|
|
13
|
+
id: string;
|
|
14
|
+
/**
|
|
15
|
+
* Built-in preset card-set selector
|
|
16
|
+
*/
|
|
17
|
+
presetId: string;
|
|
18
|
+
/**
|
|
19
|
+
* Display name of the card set
|
|
20
|
+
*/
|
|
21
|
+
name: string;
|
|
22
|
+
/**
|
|
23
|
+
* Type of card set source
|
|
24
|
+
*/
|
|
25
|
+
type: 'preset';
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Arbitrary authored JSON value.
|
|
29
|
+
*/
|
|
30
|
+
type JsonValue = string | number | boolean | null | Array<JsonValue> | {
|
|
31
|
+
[key: string]: JsonValue;
|
|
32
|
+
};
|
|
33
|
+
type PropertySchema = {
|
|
34
|
+
/**
|
|
35
|
+
* The data type of the property.
|
|
36
|
+
*/
|
|
37
|
+
type: 'string' | 'integer' | 'number' | 'boolean' | 'zoneId' | 'cardId' | 'playerId' | 'boardId' | 'edgeId' | 'vertexId' | 'spaceId' | 'pieceId' | 'dieId' | 'resourceId' | 'array' | 'object' | 'record' | 'enum';
|
|
38
|
+
/**
|
|
39
|
+
* Optional description of the property's purpose and usage.
|
|
40
|
+
*/
|
|
41
|
+
description?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Whether an object property may be omitted.
|
|
44
|
+
*/
|
|
45
|
+
optional?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Whether the value may be null.
|
|
48
|
+
*/
|
|
49
|
+
nullable?: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Optional authored default value for this property. When present, omitted
|
|
52
|
+
* seed values materialize to the default and generated TypeScript treats
|
|
53
|
+
* the property as present even if `optional: true` is also set.
|
|
54
|
+
*
|
|
55
|
+
*/
|
|
56
|
+
default?: JsonValue;
|
|
57
|
+
/**
|
|
58
|
+
* For array types, the schema of the array items. Required if type is 'array'.
|
|
59
|
+
*/
|
|
60
|
+
items?: PropertySchema;
|
|
61
|
+
/**
|
|
62
|
+
* For object types, the schema of the object's properties. Required if type is 'object'.
|
|
63
|
+
*/
|
|
64
|
+
properties?: {
|
|
65
|
+
[key: string]: PropertySchema;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* For enum types, the list of allowed string values. Required if type is 'enum'.
|
|
69
|
+
*/
|
|
70
|
+
enums?: Array<string>;
|
|
71
|
+
/**
|
|
72
|
+
* For record types, the schema of the record's values. Required if type is 'record'.
|
|
73
|
+
*/
|
|
74
|
+
values?: PropertySchema;
|
|
75
|
+
};
|
|
76
|
+
type ObjectSchema = {
|
|
77
|
+
/**
|
|
78
|
+
* Map of property names to their schemas. Type is always 'object' and all properties are required.
|
|
79
|
+
*/
|
|
80
|
+
properties: {
|
|
81
|
+
[key: string]: PropertySchema;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
type CardPropertySchemaVariants = {
|
|
85
|
+
/**
|
|
86
|
+
* Property schemas present on every card-type variant.
|
|
87
|
+
*/
|
|
88
|
+
shared?: {
|
|
89
|
+
[key: string]: PropertySchema;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Property schema for each card type in this manual card set.
|
|
93
|
+
*/
|
|
94
|
+
variants: {
|
|
95
|
+
[key: string]: ObjectSchema;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
type CardPropertySchema = ObjectSchema | CardPropertySchemaVariants;
|
|
99
|
+
type DetachedHomeSpec = {
|
|
100
|
+
type: 'detached';
|
|
101
|
+
};
|
|
102
|
+
type ZoneHomeSpec = {
|
|
103
|
+
type: 'zone';
|
|
104
|
+
zoneId: string;
|
|
105
|
+
};
|
|
106
|
+
type SpaceHomeSpec = {
|
|
107
|
+
type: 'space';
|
|
108
|
+
boardId: string;
|
|
109
|
+
spaceId: string;
|
|
110
|
+
};
|
|
111
|
+
type ContainerHomeSpec = {
|
|
112
|
+
type: 'container';
|
|
113
|
+
boardId: string;
|
|
114
|
+
containerId: string;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Tiled board edge identified by the spaces that border it
|
|
118
|
+
*/
|
|
119
|
+
type BoardEdgeRef = {
|
|
120
|
+
spaces: Array<string>;
|
|
121
|
+
};
|
|
122
|
+
type EdgeHomeSpec = {
|
|
123
|
+
type: 'edge';
|
|
124
|
+
boardId: string;
|
|
125
|
+
ref: BoardEdgeRef;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Tiled board vertex identified by the spaces that touch it
|
|
129
|
+
*/
|
|
130
|
+
type BoardVertexRef = {
|
|
131
|
+
spaces: Array<string>;
|
|
132
|
+
};
|
|
133
|
+
type VertexHomeSpec = {
|
|
134
|
+
type: 'vertex';
|
|
135
|
+
boardId: string;
|
|
136
|
+
ref: BoardVertexRef;
|
|
137
|
+
};
|
|
138
|
+
type PieceSlotHostRef = {
|
|
139
|
+
kind: 'piece';
|
|
140
|
+
id: string;
|
|
141
|
+
};
|
|
142
|
+
type DieSlotHostRef = {
|
|
143
|
+
kind: 'die';
|
|
144
|
+
id: string;
|
|
145
|
+
};
|
|
146
|
+
type SlotHostRef = ({
|
|
147
|
+
kind: 'piece';
|
|
148
|
+
} & PieceSlotHostRef) | ({
|
|
149
|
+
kind: 'die';
|
|
150
|
+
} & DieSlotHostRef);
|
|
151
|
+
type SlotHomeSpec = {
|
|
152
|
+
type: 'slot';
|
|
153
|
+
host: SlotHostRef;
|
|
154
|
+
slotId: string;
|
|
155
|
+
};
|
|
156
|
+
type ComponentHomeSpec = ({
|
|
157
|
+
type: 'detached';
|
|
158
|
+
} & DetachedHomeSpec) | ({
|
|
159
|
+
type: 'zone';
|
|
160
|
+
} & ZoneHomeSpec) | ({
|
|
161
|
+
type: 'space';
|
|
162
|
+
} & SpaceHomeSpec) | ({
|
|
163
|
+
type: 'container';
|
|
164
|
+
} & ContainerHomeSpec) | ({
|
|
165
|
+
type: 'edge';
|
|
166
|
+
} & EdgeHomeSpec) | ({
|
|
167
|
+
type: 'vertex';
|
|
168
|
+
} & VertexHomeSpec) | ({
|
|
169
|
+
type: 'slot';
|
|
170
|
+
} & SlotHomeSpec);
|
|
171
|
+
/**
|
|
172
|
+
* Default authored visibility for a component instance
|
|
173
|
+
*/
|
|
174
|
+
type ComponentVisibilitySpec = {
|
|
175
|
+
faceUp?: boolean;
|
|
176
|
+
/**
|
|
177
|
+
* When omitted, visible to all players
|
|
178
|
+
*/
|
|
179
|
+
visibleTo?: Array<string>;
|
|
180
|
+
};
|
|
181
|
+
type BoardCard = {
|
|
182
|
+
/**
|
|
183
|
+
* Card type identifier used to generate runtime CardIds. When count > 1, runtime IDs are generated as '{type}-1', '{type}-2', etc.
|
|
184
|
+
*/
|
|
185
|
+
type: string;
|
|
186
|
+
/**
|
|
187
|
+
* Display name of the card
|
|
188
|
+
*/
|
|
189
|
+
name: string;
|
|
190
|
+
/**
|
|
191
|
+
* URL to the card's image
|
|
192
|
+
*/
|
|
193
|
+
imageUrl?: string;
|
|
194
|
+
/**
|
|
195
|
+
* Text content on the card
|
|
196
|
+
*/
|
|
197
|
+
text?: string;
|
|
198
|
+
/**
|
|
199
|
+
* Number of copies of this card
|
|
200
|
+
*/
|
|
201
|
+
count: number;
|
|
202
|
+
/**
|
|
203
|
+
* Optional authored card category or subtype identifier
|
|
204
|
+
*/
|
|
205
|
+
cardType?: string;
|
|
206
|
+
/**
|
|
207
|
+
* Optional authored home for this card inventory. When omitted, cards start detached until reducer setup places them.
|
|
208
|
+
*/
|
|
209
|
+
home?: ComponentHomeSpec;
|
|
210
|
+
/**
|
|
211
|
+
* Default authored visibility for the card inventory
|
|
212
|
+
*/
|
|
213
|
+
visibility?: ComponentVisibilitySpec;
|
|
214
|
+
/**
|
|
215
|
+
* Actual property values for this specific card instance. Keys must match the properties defined in the referenced cardSchema.
|
|
216
|
+
*/
|
|
217
|
+
properties: {
|
|
218
|
+
[key: string]: JsonValue;
|
|
219
|
+
};
|
|
220
|
+
};
|
|
221
|
+
type ManualCardSetDefinition = {
|
|
222
|
+
/**
|
|
223
|
+
* Unique identifier for the card set
|
|
224
|
+
*/
|
|
225
|
+
id: string;
|
|
226
|
+
/**
|
|
227
|
+
* Display name of the card set
|
|
228
|
+
*/
|
|
229
|
+
name: string;
|
|
230
|
+
/**
|
|
231
|
+
* Type of card set source
|
|
232
|
+
*/
|
|
233
|
+
type: 'manual';
|
|
234
|
+
/**
|
|
235
|
+
* Schema definition for authored card properties in this card set
|
|
236
|
+
*/
|
|
237
|
+
cardSchema: CardPropertySchema;
|
|
238
|
+
/**
|
|
239
|
+
* List of authored cards in this card set
|
|
240
|
+
*/
|
|
241
|
+
cards: Array<BoardCard>;
|
|
242
|
+
};
|
|
243
|
+
type CardSetDefinition = ({
|
|
244
|
+
type: 'preset';
|
|
245
|
+
} & PresetCardSetDefinition) | ({
|
|
246
|
+
type: 'manual';
|
|
247
|
+
} & ManualCardSetDefinition);
|
|
248
|
+
/**
|
|
249
|
+
* Whether authored topology exists once for the table or once per player
|
|
250
|
+
*/
|
|
251
|
+
type TopologyScope = 'shared' | 'perPlayer';
|
|
252
|
+
/**
|
|
253
|
+
* Default topology visibility for a zone or slot
|
|
254
|
+
*/
|
|
255
|
+
type ZoneVisibility = 'ownerOnly' | 'public' | 'hidden';
|
|
256
|
+
/**
|
|
257
|
+
* Generic authored container that can hold cards, pieces, or dice
|
|
258
|
+
*/
|
|
259
|
+
type ZoneSpec = {
|
|
260
|
+
/**
|
|
261
|
+
* Stable zone identifier
|
|
262
|
+
*/
|
|
263
|
+
id: string;
|
|
264
|
+
/**
|
|
265
|
+
* Display name for the zone
|
|
266
|
+
*/
|
|
267
|
+
name: string;
|
|
268
|
+
scope: TopologyScope;
|
|
269
|
+
/**
|
|
270
|
+
* Optional card-set restriction for this zone
|
|
271
|
+
*/
|
|
272
|
+
allowedCardSetIds?: Array<string>;
|
|
273
|
+
visibility?: ZoneVisibility;
|
|
274
|
+
};
|
|
275
|
+
/**
|
|
276
|
+
* Stable authored board space or slot anchor
|
|
277
|
+
*/
|
|
278
|
+
type BoardSpaceSpec = {
|
|
279
|
+
/**
|
|
280
|
+
* Stable space identifier local to the board
|
|
281
|
+
*/
|
|
282
|
+
id: string;
|
|
283
|
+
/**
|
|
284
|
+
* Human-readable space name
|
|
285
|
+
*/
|
|
286
|
+
name?: string;
|
|
287
|
+
/**
|
|
288
|
+
* Optional authored space type identifier
|
|
289
|
+
*/
|
|
290
|
+
typeId?: string;
|
|
291
|
+
/**
|
|
292
|
+
* Typed authored fields validated against the board's spaceFieldsSchema
|
|
293
|
+
*/
|
|
294
|
+
fields?: {
|
|
295
|
+
[key: string]: JsonValue;
|
|
296
|
+
};
|
|
297
|
+
};
|
|
298
|
+
/**
|
|
299
|
+
* Named relation between two authored spaces
|
|
300
|
+
*/
|
|
301
|
+
type BoardRelationSpec = {
|
|
302
|
+
/**
|
|
303
|
+
* Optional stable relation identifier
|
|
304
|
+
*/
|
|
305
|
+
id?: string;
|
|
306
|
+
/**
|
|
307
|
+
* Relation type identifier such as adjacent, covers, blocks, or linked
|
|
308
|
+
*/
|
|
309
|
+
typeId: string;
|
|
310
|
+
fromSpaceId: string;
|
|
311
|
+
toSpaceId: string;
|
|
312
|
+
directed?: boolean;
|
|
313
|
+
/**
|
|
314
|
+
* Typed authored relation fields validated against relationFieldsSchema
|
|
315
|
+
*/
|
|
316
|
+
fields?: {
|
|
317
|
+
[key: string]: JsonValue;
|
|
318
|
+
};
|
|
319
|
+
};
|
|
320
|
+
type BoardHostSpec = {
|
|
321
|
+
type: 'board';
|
|
322
|
+
};
|
|
323
|
+
type SpaceHostSpec = {
|
|
324
|
+
type: 'space';
|
|
325
|
+
spaceId: string;
|
|
326
|
+
};
|
|
327
|
+
type BoardContainerHostSpec = ({
|
|
328
|
+
type: 'board';
|
|
329
|
+
} & BoardHostSpec) | ({
|
|
330
|
+
type: 'space';
|
|
331
|
+
} & SpaceHostSpec);
|
|
332
|
+
/**
|
|
333
|
+
* Authored board-attached or space-attached container/slot
|
|
334
|
+
*/
|
|
335
|
+
type BoardContainerSpec = {
|
|
336
|
+
/**
|
|
337
|
+
* Stable container identifier local to the board
|
|
338
|
+
*/
|
|
339
|
+
id: string;
|
|
340
|
+
/**
|
|
341
|
+
* Display name for the container
|
|
342
|
+
*/
|
|
343
|
+
name: string;
|
|
344
|
+
host: BoardContainerHostSpec;
|
|
345
|
+
allowedCardSetIds?: Array<string>;
|
|
346
|
+
/**
|
|
347
|
+
* Typed authored container fields validated against containerFieldsSchema
|
|
348
|
+
*/
|
|
349
|
+
fields?: {
|
|
350
|
+
[key: string]: JsonValue;
|
|
351
|
+
};
|
|
352
|
+
};
|
|
353
|
+
/**
|
|
354
|
+
* Reusable authored board topology template
|
|
355
|
+
*/
|
|
356
|
+
type GenericBoardTemplateSpec = {
|
|
357
|
+
/**
|
|
358
|
+
* Stable template identifier
|
|
359
|
+
*/
|
|
360
|
+
id: string;
|
|
361
|
+
name: string;
|
|
362
|
+
layout: 'generic';
|
|
363
|
+
/**
|
|
364
|
+
* Optional authored board type identifier such as track, map, tableau, or grid
|
|
365
|
+
*/
|
|
366
|
+
typeId?: string;
|
|
367
|
+
boardFieldsSchema?: ObjectSchema;
|
|
368
|
+
spaceFieldsSchema?: ObjectSchema;
|
|
369
|
+
relationFieldsSchema?: ObjectSchema;
|
|
370
|
+
containerFieldsSchema?: ObjectSchema;
|
|
371
|
+
spaces?: Array<BoardSpaceSpec>;
|
|
372
|
+
relations?: Array<BoardRelationSpec>;
|
|
373
|
+
containers?: Array<BoardContainerSpec>;
|
|
374
|
+
};
|
|
375
|
+
/**
|
|
376
|
+
* Visual orientation for authored hex coordinates
|
|
377
|
+
*/
|
|
378
|
+
type HexOrientation = 'pointy-top' | 'flat-top';
|
|
379
|
+
/**
|
|
380
|
+
* One authored hex space in axial coordinates
|
|
381
|
+
*/
|
|
382
|
+
type HexSpaceSpec = {
|
|
383
|
+
/**
|
|
384
|
+
* Stable space identifier local to the board
|
|
385
|
+
*/
|
|
386
|
+
id: string;
|
|
387
|
+
/**
|
|
388
|
+
* Axial q coordinate
|
|
389
|
+
*/
|
|
390
|
+
q: number;
|
|
391
|
+
/**
|
|
392
|
+
* Axial r coordinate
|
|
393
|
+
*/
|
|
394
|
+
r: number;
|
|
395
|
+
/**
|
|
396
|
+
* Optional authored space type identifier
|
|
397
|
+
*/
|
|
398
|
+
typeId?: string;
|
|
399
|
+
/**
|
|
400
|
+
* Optional hex-space label for setup or rendering
|
|
401
|
+
*/
|
|
402
|
+
label?: string;
|
|
403
|
+
/**
|
|
404
|
+
* Typed authored fields validated against the board's spaceFieldsSchema
|
|
405
|
+
*/
|
|
406
|
+
fields?: {
|
|
407
|
+
[key: string]: JsonValue;
|
|
408
|
+
};
|
|
409
|
+
};
|
|
410
|
+
/**
|
|
411
|
+
* Hex edge identified by two adjacent hex spaces
|
|
412
|
+
*/
|
|
413
|
+
type HexEdgeRef = {
|
|
414
|
+
spaces: [
|
|
415
|
+
string,
|
|
416
|
+
string
|
|
417
|
+
];
|
|
418
|
+
};
|
|
419
|
+
/**
|
|
420
|
+
* Authored metadata attached to one derived hex edge
|
|
421
|
+
*/
|
|
422
|
+
type HexEdgeSpec = {
|
|
423
|
+
ref: HexEdgeRef;
|
|
424
|
+
/**
|
|
425
|
+
* Optional authored edge type identifier
|
|
426
|
+
*/
|
|
427
|
+
typeId?: string;
|
|
428
|
+
/**
|
|
429
|
+
* Optional edge label for setup or rendering
|
|
430
|
+
*/
|
|
431
|
+
label?: string;
|
|
432
|
+
tags?: Array<string>;
|
|
433
|
+
/**
|
|
434
|
+
* Typed authored edge fields validated against edgeFieldsSchema
|
|
435
|
+
*/
|
|
436
|
+
fields?: {
|
|
437
|
+
[key: string]: JsonValue;
|
|
438
|
+
};
|
|
439
|
+
};
|
|
440
|
+
/**
|
|
441
|
+
* Hex vertex identified by three touching hex spaces
|
|
442
|
+
*/
|
|
443
|
+
type HexVertexRef = {
|
|
444
|
+
spaces: [
|
|
445
|
+
string,
|
|
446
|
+
string,
|
|
447
|
+
string
|
|
448
|
+
];
|
|
449
|
+
};
|
|
450
|
+
/**
|
|
451
|
+
* Authored metadata attached to one derived hex vertex
|
|
452
|
+
*/
|
|
453
|
+
type HexVertexSpec = {
|
|
454
|
+
ref: HexVertexRef;
|
|
455
|
+
/**
|
|
456
|
+
* Optional authored vertex type identifier
|
|
457
|
+
*/
|
|
458
|
+
typeId?: string;
|
|
459
|
+
/**
|
|
460
|
+
* Optional vertex label for setup or rendering
|
|
461
|
+
*/
|
|
462
|
+
label?: string;
|
|
463
|
+
tags?: Array<string>;
|
|
464
|
+
/**
|
|
465
|
+
* Typed authored vertex fields validated against vertexFieldsSchema
|
|
466
|
+
*/
|
|
467
|
+
fields?: {
|
|
468
|
+
[key: string]: JsonValue;
|
|
469
|
+
};
|
|
470
|
+
};
|
|
471
|
+
/**
|
|
472
|
+
* Reusable authored hex board topology template
|
|
473
|
+
*/
|
|
474
|
+
type HexBoardTemplateSpec = {
|
|
475
|
+
/**
|
|
476
|
+
* Stable template identifier
|
|
477
|
+
*/
|
|
478
|
+
id: string;
|
|
479
|
+
name: string;
|
|
480
|
+
layout: 'hex';
|
|
481
|
+
/**
|
|
482
|
+
* Optional authored board type identifier
|
|
483
|
+
*/
|
|
484
|
+
typeId?: string;
|
|
485
|
+
orientation?: HexOrientation;
|
|
486
|
+
boardFieldsSchema?: ObjectSchema;
|
|
487
|
+
spaceFieldsSchema?: ObjectSchema;
|
|
488
|
+
edgeFieldsSchema?: ObjectSchema;
|
|
489
|
+
vertexFieldsSchema?: ObjectSchema;
|
|
490
|
+
spaces?: Array<HexSpaceSpec>;
|
|
491
|
+
edges?: Array<HexEdgeSpec>;
|
|
492
|
+
vertices?: Array<HexVertexSpec>;
|
|
493
|
+
};
|
|
494
|
+
/**
|
|
495
|
+
* One authored square space in row/column coordinates
|
|
496
|
+
*/
|
|
497
|
+
type SquareSpaceSpec = {
|
|
498
|
+
/**
|
|
499
|
+
* Stable space identifier local to the board
|
|
500
|
+
*/
|
|
501
|
+
id: string;
|
|
502
|
+
/**
|
|
503
|
+
* Zero-based row coordinate
|
|
504
|
+
*/
|
|
505
|
+
row: number;
|
|
506
|
+
/**
|
|
507
|
+
* Zero-based column coordinate
|
|
508
|
+
*/
|
|
509
|
+
col: number;
|
|
510
|
+
/**
|
|
511
|
+
* Optional authored space type identifier
|
|
512
|
+
*/
|
|
513
|
+
typeId?: string;
|
|
514
|
+
/**
|
|
515
|
+
* Optional square-space label for setup or rendering
|
|
516
|
+
*/
|
|
517
|
+
label?: string;
|
|
518
|
+
/**
|
|
519
|
+
* Typed authored fields validated against the board's spaceFieldsSchema
|
|
520
|
+
*/
|
|
521
|
+
fields?: {
|
|
522
|
+
[key: string]: JsonValue;
|
|
523
|
+
};
|
|
524
|
+
};
|
|
525
|
+
/**
|
|
526
|
+
* Authored metadata attached to one derived square edge
|
|
527
|
+
*/
|
|
528
|
+
type SquareEdgeSpec = {
|
|
529
|
+
ref: BoardEdgeRef;
|
|
530
|
+
/**
|
|
531
|
+
* Optional authored edge type identifier
|
|
532
|
+
*/
|
|
533
|
+
typeId?: string;
|
|
534
|
+
/**
|
|
535
|
+
* Optional edge label for setup or rendering
|
|
536
|
+
*/
|
|
537
|
+
label?: string;
|
|
538
|
+
tags?: Array<string>;
|
|
539
|
+
/**
|
|
540
|
+
* Typed authored edge fields validated against edgeFieldsSchema
|
|
541
|
+
*/
|
|
542
|
+
fields?: {
|
|
543
|
+
[key: string]: JsonValue;
|
|
544
|
+
};
|
|
545
|
+
};
|
|
546
|
+
/**
|
|
547
|
+
* Authored metadata attached to one derived square vertex
|
|
548
|
+
*/
|
|
549
|
+
type SquareVertexSpec = {
|
|
550
|
+
ref: BoardVertexRef;
|
|
551
|
+
/**
|
|
552
|
+
* Optional authored vertex type identifier
|
|
553
|
+
*/
|
|
554
|
+
typeId?: string;
|
|
555
|
+
/**
|
|
556
|
+
* Optional vertex label for setup or rendering
|
|
557
|
+
*/
|
|
558
|
+
label?: string;
|
|
559
|
+
tags?: Array<string>;
|
|
560
|
+
/**
|
|
561
|
+
* Typed authored vertex fields validated against vertexFieldsSchema
|
|
562
|
+
*/
|
|
563
|
+
fields?: {
|
|
564
|
+
[key: string]: JsonValue;
|
|
565
|
+
};
|
|
566
|
+
};
|
|
567
|
+
/**
|
|
568
|
+
* Reusable authored square board topology template
|
|
569
|
+
*/
|
|
570
|
+
type SquareBoardTemplateSpec = {
|
|
571
|
+
/**
|
|
572
|
+
* Stable template identifier
|
|
573
|
+
*/
|
|
574
|
+
id: string;
|
|
575
|
+
name: string;
|
|
576
|
+
layout: 'square';
|
|
577
|
+
/**
|
|
578
|
+
* Optional authored board type identifier
|
|
579
|
+
*/
|
|
580
|
+
typeId?: string;
|
|
581
|
+
boardFieldsSchema?: ObjectSchema;
|
|
582
|
+
spaceFieldsSchema?: ObjectSchema;
|
|
583
|
+
relationFieldsSchema?: ObjectSchema;
|
|
584
|
+
containerFieldsSchema?: ObjectSchema;
|
|
585
|
+
edgeFieldsSchema?: ObjectSchema;
|
|
586
|
+
vertexFieldsSchema?: ObjectSchema;
|
|
587
|
+
spaces?: Array<SquareSpaceSpec>;
|
|
588
|
+
relations?: Array<BoardRelationSpec>;
|
|
589
|
+
containers?: Array<BoardContainerSpec>;
|
|
590
|
+
edges?: Array<SquareEdgeSpec>;
|
|
591
|
+
vertices?: Array<SquareVertexSpec>;
|
|
592
|
+
};
|
|
593
|
+
type BoardTemplateSpec = ({
|
|
594
|
+
layout: 'generic';
|
|
595
|
+
} & GenericBoardTemplateSpec) | ({
|
|
596
|
+
layout: 'hex';
|
|
597
|
+
} & HexBoardTemplateSpec) | ({
|
|
598
|
+
layout: 'square';
|
|
599
|
+
} & SquareBoardTemplateSpec);
|
|
600
|
+
/**
|
|
601
|
+
* Shared or per-player authored board instance shell
|
|
602
|
+
*/
|
|
603
|
+
type GenericBoardSpec = {
|
|
604
|
+
/**
|
|
605
|
+
* Stable board identifier
|
|
606
|
+
*/
|
|
607
|
+
id: string;
|
|
608
|
+
name: string;
|
|
609
|
+
layout: 'generic';
|
|
610
|
+
/**
|
|
611
|
+
* Optional authored board type identifier such as track, map, tableau, or grid
|
|
612
|
+
*/
|
|
613
|
+
typeId?: string;
|
|
614
|
+
scope: TopologyScope;
|
|
615
|
+
/**
|
|
616
|
+
* Optional board template to clone before applying inline authored additions
|
|
617
|
+
*/
|
|
618
|
+
templateId?: string;
|
|
619
|
+
boardFieldsSchema?: ObjectSchema;
|
|
620
|
+
spaceFieldsSchema?: ObjectSchema;
|
|
621
|
+
relationFieldsSchema?: ObjectSchema;
|
|
622
|
+
containerFieldsSchema?: ObjectSchema;
|
|
623
|
+
/**
|
|
624
|
+
* Typed authored board fields validated against boardFieldsSchema
|
|
625
|
+
*/
|
|
626
|
+
fields?: {
|
|
627
|
+
[key: string]: JsonValue;
|
|
628
|
+
};
|
|
629
|
+
spaces?: Array<BoardSpaceSpec>;
|
|
630
|
+
relations?: Array<BoardRelationSpec>;
|
|
631
|
+
containers?: Array<BoardContainerSpec>;
|
|
632
|
+
};
|
|
633
|
+
/**
|
|
634
|
+
* Shared or per-player authored hex board instance shell
|
|
635
|
+
*/
|
|
636
|
+
type HexBoardSpec = {
|
|
637
|
+
/**
|
|
638
|
+
* Stable board identifier
|
|
639
|
+
*/
|
|
640
|
+
id: string;
|
|
641
|
+
name: string;
|
|
642
|
+
layout: 'hex';
|
|
643
|
+
/**
|
|
644
|
+
* Optional authored board type identifier
|
|
645
|
+
*/
|
|
646
|
+
typeId?: string;
|
|
647
|
+
scope: TopologyScope;
|
|
648
|
+
/**
|
|
649
|
+
* Optional hex board template to clone before applying inline authored additions
|
|
650
|
+
*/
|
|
651
|
+
templateId?: string;
|
|
652
|
+
orientation?: HexOrientation;
|
|
653
|
+
boardFieldsSchema?: ObjectSchema;
|
|
654
|
+
spaceFieldsSchema?: ObjectSchema;
|
|
655
|
+
edgeFieldsSchema?: ObjectSchema;
|
|
656
|
+
vertexFieldsSchema?: ObjectSchema;
|
|
657
|
+
/**
|
|
658
|
+
* Typed authored board fields validated against boardFieldsSchema
|
|
659
|
+
*/
|
|
660
|
+
fields?: {
|
|
661
|
+
[key: string]: JsonValue;
|
|
662
|
+
};
|
|
663
|
+
spaces?: Array<HexSpaceSpec>;
|
|
664
|
+
edges?: Array<HexEdgeSpec>;
|
|
665
|
+
vertices?: Array<HexVertexSpec>;
|
|
666
|
+
};
|
|
667
|
+
/**
|
|
668
|
+
* Shared or per-player authored square board instance shell
|
|
669
|
+
*/
|
|
670
|
+
type SquareBoardSpec = {
|
|
671
|
+
/**
|
|
672
|
+
* Stable board identifier
|
|
673
|
+
*/
|
|
674
|
+
id: string;
|
|
675
|
+
name: string;
|
|
676
|
+
layout: 'square';
|
|
677
|
+
/**
|
|
678
|
+
* Optional authored board type identifier
|
|
679
|
+
*/
|
|
680
|
+
typeId?: string;
|
|
681
|
+
scope: TopologyScope;
|
|
682
|
+
/**
|
|
683
|
+
* Optional square board template to clone before applying inline authored additions
|
|
684
|
+
*/
|
|
685
|
+
templateId?: string;
|
|
686
|
+
boardFieldsSchema?: ObjectSchema;
|
|
687
|
+
spaceFieldsSchema?: ObjectSchema;
|
|
688
|
+
relationFieldsSchema?: ObjectSchema;
|
|
689
|
+
containerFieldsSchema?: ObjectSchema;
|
|
690
|
+
edgeFieldsSchema?: ObjectSchema;
|
|
691
|
+
vertexFieldsSchema?: ObjectSchema;
|
|
692
|
+
/**
|
|
693
|
+
* Typed authored board fields validated against boardFieldsSchema
|
|
694
|
+
*/
|
|
695
|
+
fields?: {
|
|
696
|
+
[key: string]: JsonValue;
|
|
697
|
+
};
|
|
698
|
+
spaces?: Array<SquareSpaceSpec>;
|
|
699
|
+
relations?: Array<BoardRelationSpec>;
|
|
700
|
+
containers?: Array<BoardContainerSpec>;
|
|
701
|
+
edges?: Array<SquareEdgeSpec>;
|
|
702
|
+
vertices?: Array<SquareVertexSpec>;
|
|
703
|
+
};
|
|
704
|
+
type BoardSpec = ({
|
|
705
|
+
layout: 'generic';
|
|
706
|
+
} & GenericBoardSpec) | ({
|
|
707
|
+
layout: 'hex';
|
|
708
|
+
} & HexBoardSpec) | ({
|
|
709
|
+
layout: 'square';
|
|
710
|
+
} & SquareBoardSpec);
|
|
711
|
+
/**
|
|
712
|
+
* Named authored slot exposed by a piece or die type
|
|
713
|
+
*/
|
|
714
|
+
type ComponentSlotSpec = {
|
|
715
|
+
id: string;
|
|
716
|
+
name?: string;
|
|
717
|
+
};
|
|
718
|
+
/**
|
|
719
|
+
* Reusable authored piece type
|
|
720
|
+
*/
|
|
721
|
+
type PieceTypeSpec = {
|
|
722
|
+
id: string;
|
|
723
|
+
name: string;
|
|
724
|
+
fieldsSchema?: ObjectSchema;
|
|
725
|
+
slots?: Array<ComponentSlotSpec>;
|
|
726
|
+
};
|
|
727
|
+
/**
|
|
728
|
+
* Authored seeded piece inventory or supply definition
|
|
729
|
+
*/
|
|
730
|
+
type PieceSeedSpec = {
|
|
731
|
+
/**
|
|
732
|
+
* Stable piece id seed. When count > 1, runtime ids are generated as '{id}-1', '{id}-2', etc.
|
|
733
|
+
*/
|
|
734
|
+
id?: string;
|
|
735
|
+
name?: string;
|
|
736
|
+
typeId: string;
|
|
737
|
+
count?: number;
|
|
738
|
+
ownerId?: string;
|
|
739
|
+
home?: ComponentHomeSpec;
|
|
740
|
+
visibility?: ComponentVisibilitySpec;
|
|
741
|
+
/**
|
|
742
|
+
* Typed authored piece fields validated against the piece type schema
|
|
743
|
+
*/
|
|
744
|
+
fields?: {
|
|
745
|
+
[key: string]: JsonValue;
|
|
746
|
+
};
|
|
747
|
+
};
|
|
748
|
+
/**
|
|
749
|
+
* Reusable authored die type
|
|
750
|
+
*/
|
|
751
|
+
type DieTypeSpec$1 = {
|
|
752
|
+
id: string;
|
|
753
|
+
name: string;
|
|
754
|
+
sides?: number;
|
|
755
|
+
fieldsSchema?: ObjectSchema;
|
|
756
|
+
slots?: Array<ComponentSlotSpec>;
|
|
757
|
+
};
|
|
758
|
+
/**
|
|
759
|
+
* Authored seeded die inventory or supply definition
|
|
760
|
+
*/
|
|
761
|
+
type DieSeedSpec = {
|
|
762
|
+
/**
|
|
763
|
+
* Stable die id seed. When count > 1, runtime ids are generated as '{id}-1', '{id}-2', etc.
|
|
764
|
+
*/
|
|
765
|
+
id?: string;
|
|
766
|
+
name?: string;
|
|
767
|
+
typeId: string;
|
|
768
|
+
count?: number;
|
|
769
|
+
ownerId?: string;
|
|
770
|
+
home?: ComponentHomeSpec;
|
|
771
|
+
visibility?: ComponentVisibilitySpec;
|
|
772
|
+
/**
|
|
773
|
+
* Typed authored die fields validated against the die type schema
|
|
774
|
+
*/
|
|
775
|
+
fields?: {
|
|
776
|
+
[key: string]: JsonValue;
|
|
777
|
+
};
|
|
778
|
+
};
|
|
779
|
+
/**
|
|
780
|
+
* Definition of a game resource type
|
|
781
|
+
*/
|
|
782
|
+
type ResourceDefinition = {
|
|
783
|
+
/**
|
|
784
|
+
* Unique identifier for the resource. Used as a typed ResourceId.
|
|
785
|
+
*/
|
|
786
|
+
id: string;
|
|
787
|
+
/**
|
|
788
|
+
* Human-readable display name for the resource
|
|
789
|
+
*/
|
|
790
|
+
name: string;
|
|
791
|
+
/**
|
|
792
|
+
* Optional compact icon or emoji rendered by generic UI resource controls.
|
|
793
|
+
*/
|
|
794
|
+
icon?: string;
|
|
795
|
+
};
|
|
796
|
+
/**
|
|
797
|
+
* One authored setup option choice
|
|
798
|
+
*/
|
|
799
|
+
type SetupOptionChoiceSpec = {
|
|
800
|
+
id: string;
|
|
801
|
+
label: string;
|
|
802
|
+
description?: string;
|
|
803
|
+
};
|
|
804
|
+
/**
|
|
805
|
+
* Authored setup module/variant axis metadata
|
|
806
|
+
*/
|
|
807
|
+
type SetupOptionSpec = {
|
|
808
|
+
id: string;
|
|
809
|
+
name: string;
|
|
810
|
+
description?: string;
|
|
811
|
+
choices?: Array<SetupOptionChoiceSpec>;
|
|
812
|
+
};
|
|
813
|
+
/**
|
|
814
|
+
* Reducer-consumed authored setup profile, recipe, or loadout metadata
|
|
815
|
+
*/
|
|
816
|
+
type SetupProfileSpec = {
|
|
817
|
+
id: string;
|
|
818
|
+
name: string;
|
|
819
|
+
description?: string;
|
|
820
|
+
/**
|
|
821
|
+
* Selected setup-option values for this profile
|
|
822
|
+
*/
|
|
823
|
+
optionValues?: {
|
|
824
|
+
[key: string]: string;
|
|
825
|
+
};
|
|
826
|
+
};
|
|
827
|
+
/**
|
|
828
|
+
* Authoritative topology manifest for reducer-native games
|
|
829
|
+
*/
|
|
830
|
+
type GameTopologyManifest$1 = {
|
|
831
|
+
players: PlayersDefinition;
|
|
832
|
+
/**
|
|
833
|
+
* Authored card catalogs and schemas
|
|
834
|
+
*/
|
|
835
|
+
cardSets: Array<CardSetDefinition>;
|
|
836
|
+
/**
|
|
837
|
+
* Shared and per-player authored containers
|
|
838
|
+
*/
|
|
839
|
+
zones?: Array<ZoneSpec>;
|
|
840
|
+
/**
|
|
841
|
+
* Reusable board topology templates
|
|
842
|
+
*/
|
|
843
|
+
boardTemplates?: Array<BoardTemplateSpec>;
|
|
844
|
+
/**
|
|
845
|
+
* Shared and per-player authored board shells
|
|
846
|
+
*/
|
|
847
|
+
boards?: Array<BoardSpec>;
|
|
848
|
+
pieceTypes?: Array<PieceTypeSpec>;
|
|
849
|
+
pieceSeeds?: Array<PieceSeedSpec>;
|
|
850
|
+
dieTypes?: Array<DieTypeSpec$1>;
|
|
851
|
+
dieSeeds?: Array<DieSeedSpec>;
|
|
852
|
+
resources?: Array<ResourceDefinition>;
|
|
853
|
+
/**
|
|
854
|
+
* Authored setup-option metadata consumed by reducer-owned setup flows
|
|
855
|
+
*/
|
|
856
|
+
setupOptions?: Array<SetupOptionSpec>;
|
|
857
|
+
/**
|
|
858
|
+
* Authored setup recipes, loadouts, or module profiles consumed by reducer setup code
|
|
859
|
+
*/
|
|
860
|
+
setupProfiles?: Array<SetupProfileSpec>;
|
|
861
|
+
};
|
|
862
|
+
/**
|
|
863
|
+
* Authenticated user acting in a session.
|
|
864
|
+
*/
|
|
865
|
+
type SessionActorAuthUser = {
|
|
866
|
+
kind: 'AUTH_USER';
|
|
867
|
+
/**
|
|
868
|
+
* Internal user id
|
|
869
|
+
*/
|
|
870
|
+
id: string;
|
|
871
|
+
};
|
|
872
|
+
/**
|
|
873
|
+
* Anonymous demo principal for one demo_sessions row (shared across tabs).
|
|
874
|
+
*/
|
|
875
|
+
type SessionActorDemoGuest = {
|
|
876
|
+
kind: 'DEMO_GUEST';
|
|
877
|
+
/**
|
|
878
|
+
* demo_sessions.id
|
|
879
|
+
*/
|
|
880
|
+
demoActorSessionId: string;
|
|
881
|
+
};
|
|
882
|
+
type SessionActor = ({
|
|
883
|
+
kind: 'AUTH_USER';
|
|
884
|
+
} & SessionActorAuthUser) | ({
|
|
885
|
+
kind: 'DEMO_GUEST';
|
|
886
|
+
} & SessionActorDemoGuest);
|
|
887
|
+
type SessionGameSourceUserCompiled = {
|
|
888
|
+
kind: 'USER_COMPILED';
|
|
889
|
+
ownerUserId: string;
|
|
890
|
+
gameId: string;
|
|
891
|
+
compiledResultId: string;
|
|
892
|
+
};
|
|
893
|
+
type SessionGameSourceDemoRevision = {
|
|
894
|
+
kind: 'DEMO_REVISION';
|
|
895
|
+
slug: string;
|
|
896
|
+
revisionId: string;
|
|
897
|
+
};
|
|
898
|
+
type SessionGameSource = ({
|
|
899
|
+
kind: 'USER_COMPILED';
|
|
900
|
+
} & SessionGameSourceUserCompiled) | ({
|
|
901
|
+
kind: 'DEMO_REVISION';
|
|
902
|
+
} & SessionGameSourceDemoRevision);
|
|
903
|
+
type SessionSnapshotPhase = 'lobby' | 'gameplay' | 'ended';
|
|
904
|
+
type HostSessionStatus = 'active' | 'ended';
|
|
905
|
+
/**
|
|
906
|
+
* Summary of a game state history entry.
|
|
907
|
+
*/
|
|
908
|
+
type HistoryEntrySummary = {
|
|
909
|
+
id: string;
|
|
910
|
+
generation: number;
|
|
911
|
+
version: number;
|
|
912
|
+
timestamp: string;
|
|
913
|
+
description: string;
|
|
914
|
+
playerId?: string;
|
|
915
|
+
actionType?: string;
|
|
916
|
+
isCurrent: boolean;
|
|
917
|
+
};
|
|
918
|
+
type SessionSnapshotHistory = {
|
|
919
|
+
entries: Array<HistoryEntrySummary>;
|
|
920
|
+
currentIndex: number;
|
|
921
|
+
canGoBack: boolean;
|
|
922
|
+
canGoForward: boolean;
|
|
923
|
+
};
|
|
924
|
+
type HostSessionContext = {
|
|
925
|
+
/**
|
|
926
|
+
* Unique identifier for the session.
|
|
927
|
+
*/
|
|
928
|
+
sessionId: string;
|
|
929
|
+
/**
|
|
930
|
+
* Memorable short code for sharing.
|
|
931
|
+
*/
|
|
932
|
+
shortCode: string;
|
|
933
|
+
phase: SessionSnapshotPhase;
|
|
934
|
+
status: HostSessionStatus;
|
|
935
|
+
hostActor: SessionActor;
|
|
936
|
+
gameSource: SessionGameSource;
|
|
937
|
+
/**
|
|
938
|
+
* Selected authored setup profile for this session.
|
|
939
|
+
*/
|
|
940
|
+
setupProfileId?: string;
|
|
941
|
+
/**
|
|
942
|
+
* Player IDs the authenticated session actor may select.
|
|
943
|
+
*/
|
|
944
|
+
switchablePlayerIds: Array<string>;
|
|
945
|
+
history?: SessionSnapshotHistory;
|
|
946
|
+
};
|
|
947
|
+
type SeatAssignment = {
|
|
948
|
+
/**
|
|
949
|
+
* Player identifier (e.g., 'player-1')
|
|
950
|
+
*/
|
|
951
|
+
playerId: string;
|
|
952
|
+
/**
|
|
953
|
+
* Session actor controlling this seat (null if empty)
|
|
954
|
+
*/
|
|
955
|
+
controllerActor?: SessionActor;
|
|
956
|
+
/**
|
|
957
|
+
* Display name for this seat/player
|
|
958
|
+
*/
|
|
959
|
+
displayName: string;
|
|
960
|
+
/**
|
|
961
|
+
* Hex color code for the player (e.g., '#FF5733')
|
|
962
|
+
*/
|
|
963
|
+
playerColor?: string;
|
|
964
|
+
/**
|
|
965
|
+
* Whether this seat is the host
|
|
966
|
+
*/
|
|
967
|
+
isHost?: boolean;
|
|
968
|
+
};
|
|
969
|
+
type HostLobbyView = {
|
|
970
|
+
/**
|
|
971
|
+
* Current public seat assignments for the session.
|
|
972
|
+
*/
|
|
973
|
+
seats: Array<SeatAssignment>;
|
|
974
|
+
/**
|
|
975
|
+
* Whether the lobby can currently be started.
|
|
976
|
+
*/
|
|
977
|
+
canStart: boolean;
|
|
978
|
+
/**
|
|
979
|
+
* Session actor that hosts this session.
|
|
980
|
+
*/
|
|
981
|
+
hostActor: SessionActor;
|
|
982
|
+
/**
|
|
983
|
+
* Selected authored setup profile for this session.
|
|
984
|
+
*/
|
|
985
|
+
setupProfileId?: string;
|
|
986
|
+
};
|
|
987
|
+
type HostLobbySessionSnapshot = {
|
|
988
|
+
type: 'lobby';
|
|
989
|
+
context: HostSessionContext;
|
|
990
|
+
lobby: HostLobbyView;
|
|
991
|
+
};
|
|
992
|
+
type SimultaneousPhaseSnapshot = {
|
|
993
|
+
phaseName: string;
|
|
994
|
+
interactionId: string;
|
|
995
|
+
actorIds: Array<string>;
|
|
996
|
+
sealedPlayerIds: Array<string>;
|
|
997
|
+
pendingPlayerIds: Array<string>;
|
|
998
|
+
};
|
|
999
|
+
type HostGameplaySharedView = {
|
|
1000
|
+
/**
|
|
1001
|
+
* Player IDs currently active in the game state.
|
|
1002
|
+
*/
|
|
1003
|
+
activePlayers: Array<string>;
|
|
1004
|
+
/**
|
|
1005
|
+
* Current reducer-native gameplay phase.
|
|
1006
|
+
*/
|
|
1007
|
+
currentPhase: string;
|
|
1008
|
+
/**
|
|
1009
|
+
* Current stage within the phase. Null when the phase has no active stage.
|
|
1010
|
+
*/
|
|
1011
|
+
currentStage: string | null;
|
|
1012
|
+
/**
|
|
1013
|
+
* Player IDs this stage currently admits.
|
|
1014
|
+
*/
|
|
1015
|
+
stageSeats: Array<string>;
|
|
1016
|
+
/**
|
|
1017
|
+
* Visibility-safe progress metadata for an active simultaneous-player phase.
|
|
1018
|
+
*/
|
|
1019
|
+
simultaneousPhase?: SimultaneousPhaseSnapshot | null;
|
|
1020
|
+
/**
|
|
1021
|
+
* JSON-serialized session-scoped static view. Populated on gameplay bootstrap payloads only.
|
|
1022
|
+
*/
|
|
1023
|
+
boardStatic?: string | null;
|
|
1024
|
+
/**
|
|
1025
|
+
* Content hash of the session-scoped static view held on the host.
|
|
1026
|
+
*/
|
|
1027
|
+
boardStaticHash?: string | null;
|
|
1028
|
+
};
|
|
1029
|
+
/**
|
|
1030
|
+
* Draft commit policy consumed by default UI surfaces.
|
|
1031
|
+
*/
|
|
1032
|
+
type InteractionCommitPolicy = {
|
|
1033
|
+
mode: 'manual' | 'autoWhenReady';
|
|
1034
|
+
};
|
|
1035
|
+
/**
|
|
1036
|
+
* Single-value input selection.
|
|
1037
|
+
*/
|
|
1038
|
+
type SingleInputSelection = {
|
|
1039
|
+
mode: 'single';
|
|
1040
|
+
};
|
|
1041
|
+
/**
|
|
1042
|
+
* Multi-value input selection.
|
|
1043
|
+
*/
|
|
1044
|
+
type ManyInputSelection = {
|
|
1045
|
+
mode: 'many';
|
|
1046
|
+
min: number;
|
|
1047
|
+
max?: number;
|
|
1048
|
+
distinct?: boolean;
|
|
1049
|
+
};
|
|
1050
|
+
type InputSelection = ({
|
|
1051
|
+
mode: 'single';
|
|
1052
|
+
} & SingleInputSelection) | ({
|
|
1053
|
+
mode: 'many';
|
|
1054
|
+
} & ManyInputSelection);
|
|
1055
|
+
type InputDomain = ({
|
|
1056
|
+
type: 'cardTarget';
|
|
1057
|
+
} & CardTargetDomain) | ({
|
|
1058
|
+
type: 'boardTarget';
|
|
1059
|
+
} & BoardTargetDomain) | ({
|
|
1060
|
+
type: 'resourceMap';
|
|
1061
|
+
} & ResourceMapDomain) | ({
|
|
1062
|
+
type: 'boundedNumber';
|
|
1063
|
+
} & BoundedNumberDomain) | ({
|
|
1064
|
+
type: 'choice';
|
|
1065
|
+
} & ChoiceDomain) | ({
|
|
1066
|
+
type: 'choiceList';
|
|
1067
|
+
} & ChoiceListDomain);
|
|
1068
|
+
type InputDomainDependencyCase = {
|
|
1069
|
+
when: {
|
|
1070
|
+
[key: string]: string;
|
|
1071
|
+
};
|
|
1072
|
+
domain: InputDomain;
|
|
1073
|
+
};
|
|
1074
|
+
type EagerInputDomainDependencies = {
|
|
1075
|
+
mode: 'eager';
|
|
1076
|
+
dependentCases: Array<InputDomainDependencyCase>;
|
|
1077
|
+
};
|
|
1078
|
+
type ResolvedCardTargetDomain = {
|
|
1079
|
+
type: 'cardTarget';
|
|
1080
|
+
projection: 'resolved';
|
|
1081
|
+
targetKind: 'card';
|
|
1082
|
+
zoneIds: Array<string>;
|
|
1083
|
+
eligibleTargets: Array<string>;
|
|
1084
|
+
selection?: InputSelection;
|
|
1085
|
+
dependencies?: EagerInputDomainDependencies;
|
|
1086
|
+
};
|
|
1087
|
+
type InputDomainResolver = {
|
|
1088
|
+
interactionKey?: string;
|
|
1089
|
+
inputKey: string;
|
|
1090
|
+
};
|
|
1091
|
+
type LazyInputDomainDependencies = {
|
|
1092
|
+
mode: 'lazy';
|
|
1093
|
+
dependsOn: Array<string>;
|
|
1094
|
+
resolver: InputDomainResolver;
|
|
1095
|
+
};
|
|
1096
|
+
type LazyCardTargetDomain = {
|
|
1097
|
+
type: 'cardTarget';
|
|
1098
|
+
projection: 'lazy';
|
|
1099
|
+
targetKind: 'card';
|
|
1100
|
+
zoneIds: Array<string>;
|
|
1101
|
+
selection?: InputSelection;
|
|
1102
|
+
dependencies: LazyInputDomainDependencies;
|
|
1103
|
+
};
|
|
1104
|
+
type CardTargetDomain = ({
|
|
1105
|
+
projection: 'resolved';
|
|
1106
|
+
} & ResolvedCardTargetDomain) | ({
|
|
1107
|
+
projection: 'lazy';
|
|
1108
|
+
} & LazyCardTargetDomain);
|
|
1109
|
+
type ResolvedBoardTargetDomain = {
|
|
1110
|
+
type: 'boardTarget';
|
|
1111
|
+
projection: 'resolved';
|
|
1112
|
+
targetKind: 'edge' | 'vertex' | 'space' | 'tile';
|
|
1113
|
+
boardId: string;
|
|
1114
|
+
valueKind?: 'board-id' | 'player-board-space';
|
|
1115
|
+
eligibleTargets: Array<string>;
|
|
1116
|
+
selection?: InputSelection;
|
|
1117
|
+
dependencies?: EagerInputDomainDependencies;
|
|
1118
|
+
};
|
|
1119
|
+
type LazyBoardTargetDomain = {
|
|
1120
|
+
type: 'boardTarget';
|
|
1121
|
+
projection: 'lazy';
|
|
1122
|
+
targetKind: 'edge' | 'vertex' | 'space' | 'tile';
|
|
1123
|
+
boardId: string;
|
|
1124
|
+
valueKind?: 'board-id' | 'player-board-space';
|
|
1125
|
+
selection?: InputSelection;
|
|
1126
|
+
dependencies: LazyInputDomainDependencies;
|
|
1127
|
+
};
|
|
1128
|
+
type BoardTargetDomain = ({
|
|
1129
|
+
projection: 'resolved';
|
|
1130
|
+
} & ResolvedBoardTargetDomain) | ({
|
|
1131
|
+
projection: 'lazy';
|
|
1132
|
+
} & LazyBoardTargetDomain);
|
|
1133
|
+
type ResourceMapDomainEntry = {
|
|
1134
|
+
resourceId: string;
|
|
1135
|
+
label?: string;
|
|
1136
|
+
icon?: string;
|
|
1137
|
+
min: number;
|
|
1138
|
+
max: number;
|
|
1139
|
+
};
|
|
1140
|
+
type ResourceMapDomain = {
|
|
1141
|
+
type: 'resourceMap';
|
|
1142
|
+
resources: Array<ResourceMapDomainEntry>;
|
|
1143
|
+
selection?: InputSelection;
|
|
1144
|
+
};
|
|
1145
|
+
type BoundedNumberDomain = {
|
|
1146
|
+
type: 'boundedNumber';
|
|
1147
|
+
min: number;
|
|
1148
|
+
max: number;
|
|
1149
|
+
step?: number;
|
|
1150
|
+
selection?: InputSelection;
|
|
1151
|
+
};
|
|
1152
|
+
type ChoiceDomainOption = {
|
|
1153
|
+
value: string | null;
|
|
1154
|
+
label: string;
|
|
1155
|
+
icon?: string;
|
|
1156
|
+
badge?: string;
|
|
1157
|
+
description?: string;
|
|
1158
|
+
disabled?: boolean;
|
|
1159
|
+
disabledReason?: string;
|
|
1160
|
+
};
|
|
1161
|
+
type ChoiceDomain = {
|
|
1162
|
+
type: 'choice';
|
|
1163
|
+
choices: Array<ChoiceDomainOption>;
|
|
1164
|
+
selection?: InputSelection;
|
|
1165
|
+
dependencies?: EagerInputDomainDependencies;
|
|
1166
|
+
};
|
|
1167
|
+
type ChoiceListDomain = {
|
|
1168
|
+
type: 'choiceList';
|
|
1169
|
+
choices: Array<ChoiceDomainOption>;
|
|
1170
|
+
min?: number;
|
|
1171
|
+
max?: number;
|
|
1172
|
+
selection?: InputSelection;
|
|
1173
|
+
dependencies?: EagerInputDomainDependencies;
|
|
1174
|
+
};
|
|
1175
|
+
/**
|
|
1176
|
+
* Canonical descriptor for one interaction input collector.
|
|
1177
|
+
*/
|
|
1178
|
+
type InteractionInputDescriptor = {
|
|
1179
|
+
key: string;
|
|
1180
|
+
kind: string;
|
|
1181
|
+
domain: InputDomain;
|
|
1182
|
+
/**
|
|
1183
|
+
* Optional default value applied to this input when the player has not
|
|
1184
|
+
* yet drafted a value. Mirrors the input collector's `defaultValue`
|
|
1185
|
+
* from the authored interaction, so plugins can render a sensible
|
|
1186
|
+
* starting state (e.g. a pre-selected resource for a bank trade).
|
|
1187
|
+
*
|
|
1188
|
+
*/
|
|
1189
|
+
defaultValue?: JsonValue;
|
|
1190
|
+
};
|
|
1191
|
+
type AvailableInteractionAvailability = {
|
|
1192
|
+
status: 'available';
|
|
1193
|
+
};
|
|
1194
|
+
type NotYourTurnInteractionAvailability = {
|
|
1195
|
+
status: 'notYourTurn';
|
|
1196
|
+
reason: string;
|
|
1197
|
+
};
|
|
1198
|
+
type InsufficientResourcesInteractionAvailability = {
|
|
1199
|
+
status: 'insufficientResources';
|
|
1200
|
+
reason: string;
|
|
1201
|
+
/**
|
|
1202
|
+
* Resource shortfall by resource id when a costed interaction is not currently affordable.
|
|
1203
|
+
*/
|
|
1204
|
+
missingResources: {
|
|
1205
|
+
[key: string]: number;
|
|
1206
|
+
};
|
|
1207
|
+
};
|
|
1208
|
+
type BlockedInteractionAvailability = {
|
|
1209
|
+
status: 'blocked';
|
|
1210
|
+
reason: string;
|
|
1211
|
+
code?: string;
|
|
1212
|
+
};
|
|
1213
|
+
type InteractionAvailability = ({
|
|
1214
|
+
status: 'available';
|
|
1215
|
+
} & AvailableInteractionAvailability) | ({
|
|
1216
|
+
status: 'notYourTurn';
|
|
1217
|
+
} & NotYourTurnInteractionAvailability) | ({
|
|
1218
|
+
status: 'insufficientResources';
|
|
1219
|
+
} & InsufficientResourcesInteractionAvailability) | ({
|
|
1220
|
+
status: 'blocked';
|
|
1221
|
+
} & BlockedInteractionAvailability);
|
|
1222
|
+
/**
|
|
1223
|
+
* Authoritative interaction descriptor resolved by the trusted bundle.
|
|
1224
|
+
*/
|
|
1225
|
+
type InteractionDescriptorBase = {
|
|
1226
|
+
phaseName: string;
|
|
1227
|
+
interactionKey: string;
|
|
1228
|
+
interactionId: string;
|
|
1229
|
+
zoneId?: string;
|
|
1230
|
+
/**
|
|
1231
|
+
* Draft commit policy materialized by the trusted reducer bundle. Omitted authoring specs default to manual before this descriptor crosses the runtime boundary.
|
|
1232
|
+
*/
|
|
1233
|
+
commit: InteractionCommitPolicy;
|
|
1234
|
+
/**
|
|
1235
|
+
* Ordered input descriptors. Each entry is the canonical source for its collector key, collector kind, and valid-value domain.
|
|
1236
|
+
*/
|
|
1237
|
+
inputs: Array<InteractionInputDescriptor>;
|
|
1238
|
+
cost?: {
|
|
1239
|
+
[key: string]: JsonValue;
|
|
1240
|
+
};
|
|
1241
|
+
currentResources?: {
|
|
1242
|
+
[key: string]: JsonValue;
|
|
1243
|
+
};
|
|
1244
|
+
availability: InteractionAvailability;
|
|
1245
|
+
};
|
|
1246
|
+
type ActionInteractionDescriptor = InteractionDescriptorBase & {
|
|
1247
|
+
kind: 'action';
|
|
1248
|
+
};
|
|
1249
|
+
type InteractionContextOption = {
|
|
1250
|
+
id: string;
|
|
1251
|
+
label: string;
|
|
1252
|
+
};
|
|
1253
|
+
type InteractionContext = {
|
|
1254
|
+
to: string;
|
|
1255
|
+
title?: string;
|
|
1256
|
+
payload?: {
|
|
1257
|
+
[key: string]: JsonValue;
|
|
1258
|
+
};
|
|
1259
|
+
options?: Array<InteractionContextOption>;
|
|
1260
|
+
};
|
|
1261
|
+
type PromptInteractionDescriptor = InteractionDescriptorBase & {
|
|
1262
|
+
kind: 'prompt';
|
|
1263
|
+
context: InteractionContext;
|
|
1264
|
+
};
|
|
1265
|
+
type InteractionDescriptor = ({
|
|
1266
|
+
kind: 'action';
|
|
1267
|
+
} & ActionInteractionDescriptor) | ({
|
|
1268
|
+
kind: 'prompt';
|
|
1269
|
+
} & PromptInteractionDescriptor);
|
|
1270
|
+
type ZoneHandles = {
|
|
1271
|
+
cardIds: Array<string>;
|
|
1272
|
+
cardViewsById: {
|
|
1273
|
+
[key: string]: string;
|
|
1274
|
+
};
|
|
1275
|
+
playableByCardId: {
|
|
1276
|
+
[key: string]: Array<string>;
|
|
1277
|
+
};
|
|
1278
|
+
};
|
|
1279
|
+
type HostGameplaySeatView = {
|
|
1280
|
+
/**
|
|
1281
|
+
* Opaque revision token for this seat's available descriptors and input domains.
|
|
1282
|
+
*/
|
|
1283
|
+
actionSetVersion: string;
|
|
1284
|
+
/**
|
|
1285
|
+
* JSON-serialized reducer-projected UI view for this player.
|
|
1286
|
+
*/
|
|
1287
|
+
view: string | null;
|
|
1288
|
+
/**
|
|
1289
|
+
* Descriptor refs for interactions available to this player.
|
|
1290
|
+
*/
|
|
1291
|
+
availableInteractionRefs: Array<string>;
|
|
1292
|
+
/**
|
|
1293
|
+
* Zone handles for this player, keyed by zone id.
|
|
1294
|
+
*/
|
|
1295
|
+
zones: {
|
|
1296
|
+
[key: string]: ZoneHandles;
|
|
1297
|
+
};
|
|
1298
|
+
};
|
|
1299
|
+
type HostPlayerGameplayView = {
|
|
1300
|
+
/**
|
|
1301
|
+
* Monotonic gameplay version for stale-client detection.
|
|
1302
|
+
*/
|
|
1303
|
+
version: number;
|
|
1304
|
+
/**
|
|
1305
|
+
* Opaque revision token for the returned descriptors and input domains.
|
|
1306
|
+
*/
|
|
1307
|
+
actionSetVersion: string;
|
|
1308
|
+
/**
|
|
1309
|
+
* Player ID currently selected for rendering and input.
|
|
1310
|
+
*/
|
|
1311
|
+
perspectivePlayerId: string;
|
|
1312
|
+
/**
|
|
1313
|
+
* Player IDs included in this normalized projection envelope.
|
|
1314
|
+
*/
|
|
1315
|
+
controllablePlayerIds: Array<string>;
|
|
1316
|
+
shared: HostGameplaySharedView;
|
|
1317
|
+
/**
|
|
1318
|
+
* Deduplicated interaction descriptor registry keyed by stable descriptor ref.
|
|
1319
|
+
*/
|
|
1320
|
+
interactionsByRef: {
|
|
1321
|
+
[key: string]: InteractionDescriptor;
|
|
1322
|
+
};
|
|
1323
|
+
/**
|
|
1324
|
+
* Player-scoped projections keyed by authorized player id.
|
|
1325
|
+
*/
|
|
1326
|
+
seats: {
|
|
1327
|
+
[key: string]: HostGameplaySeatView;
|
|
1328
|
+
};
|
|
1329
|
+
};
|
|
1330
|
+
type HostGameplaySessionSnapshot = {
|
|
1331
|
+
type: 'gameplay';
|
|
1332
|
+
context: HostSessionContext;
|
|
1333
|
+
lobby: HostLobbyView;
|
|
1334
|
+
gameplay: HostPlayerGameplayView;
|
|
1335
|
+
};
|
|
1336
|
+
type HostEndedSessionSnapshot = {
|
|
1337
|
+
type: 'ended';
|
|
1338
|
+
context: HostSessionContext;
|
|
1339
|
+
lobby: HostLobbyView;
|
|
1340
|
+
};
|
|
1341
|
+
type HostSessionSnapshot = ({
|
|
1342
|
+
type: 'lobby';
|
|
1343
|
+
} & HostLobbySessionSnapshot) | ({
|
|
1344
|
+
type: 'gameplay';
|
|
1345
|
+
} & HostGameplaySessionSnapshot) | ({
|
|
1346
|
+
type: 'ended';
|
|
1347
|
+
} & HostEndedSessionSnapshot);
|
|
1348
|
+
type HostSessionEventCausation = {
|
|
1349
|
+
clientActionId?: string;
|
|
1350
|
+
};
|
|
1351
|
+
type HostSessionGameplayUpdatedEvent = {
|
|
1352
|
+
type: 'session.gameplayUpdated';
|
|
1353
|
+
context: HostSessionContext;
|
|
1354
|
+
gameplay: HostPlayerGameplayView;
|
|
1355
|
+
causation?: HostSessionEventCausation;
|
|
1356
|
+
};
|
|
1357
|
+
type HostActionSubmitResponse = {
|
|
1358
|
+
success: boolean;
|
|
1359
|
+
version: number;
|
|
1360
|
+
actionSetVersion: string;
|
|
1361
|
+
accepted?: boolean;
|
|
1362
|
+
durabilityStatus?: 'COMMITTED';
|
|
1363
|
+
errorCode?: string;
|
|
1364
|
+
message?: string;
|
|
1365
|
+
clientActionId?: string;
|
|
1366
|
+
update?: HostSessionGameplayUpdatedEvent;
|
|
1367
|
+
};
|
|
1368
|
+
/**
|
|
1369
|
+
* Type of parameter accepted by a runtime action
|
|
1370
|
+
*/
|
|
1371
|
+
type ParameterType = 'cardId' | 'cardType' | 'playerId' | 'string' | 'number' | 'boolean' | 'zoneId' | 'pieceId' | 'dieId' | 'boardId' | 'edgeId' | 'vertexId' | 'spaceId' | 'resourceId';
|
|
1372
|
+
/**
|
|
1373
|
+
* Defines a parameter for an action
|
|
1374
|
+
*/
|
|
1375
|
+
type ActionParameterDefinition = {
|
|
1376
|
+
name: string;
|
|
1377
|
+
type: ParameterType;
|
|
1378
|
+
required?: boolean;
|
|
1379
|
+
array?: boolean;
|
|
1380
|
+
minLength?: number;
|
|
1381
|
+
maxLength?: number;
|
|
1382
|
+
/**
|
|
1383
|
+
* Optional card set ID to specify which card set a CARD_ID parameter refers to
|
|
1384
|
+
*/
|
|
1385
|
+
cardSetId?: string;
|
|
1386
|
+
description?: string;
|
|
1387
|
+
};
|
|
1388
|
+
/**
|
|
1389
|
+
* Defines an available player action with metadata and parameter definitions
|
|
1390
|
+
*/
|
|
1391
|
+
type ActionDefinition = {
|
|
1392
|
+
/**
|
|
1393
|
+
* Unique action identifier
|
|
1394
|
+
*/
|
|
1395
|
+
actionType: string;
|
|
1396
|
+
/**
|
|
1397
|
+
* UI display name for this action
|
|
1398
|
+
*/
|
|
1399
|
+
displayName: string;
|
|
1400
|
+
/**
|
|
1401
|
+
* Optional help text describing the action
|
|
1402
|
+
*/
|
|
1403
|
+
description?: string;
|
|
1404
|
+
/**
|
|
1405
|
+
* List of parameters this action accepts
|
|
1406
|
+
*/
|
|
1407
|
+
parameters: Array<ActionParameterDefinition>;
|
|
1408
|
+
/**
|
|
1409
|
+
* List of possible validation error codes
|
|
1410
|
+
*/
|
|
1411
|
+
errorCodes?: Array<string>;
|
|
1412
|
+
};
|
|
1413
|
+
/**
|
|
1414
|
+
* Type of source for the card set
|
|
1415
|
+
*/
|
|
1416
|
+
type CardSetSourceType = 'preset' | 'csv' | 'manual';
|
|
1417
|
+
/**
|
|
1418
|
+
* Engine-level structural board layout discriminator
|
|
1419
|
+
*/
|
|
1420
|
+
type BoardLayout = 'generic' | 'hex' | 'square';
|
|
1421
|
+
/**
|
|
1422
|
+
* Unique identifier for the player (e.g., 'player-1')
|
|
1423
|
+
*/
|
|
1424
|
+
type PlayerId = string;
|
|
1425
|
+
|
|
1426
|
+
type DieTypeSpec = Omit<DieTypeSpec$1, "sides"> & {
|
|
1427
|
+
sides?: DieTypeSpec$1["sides"];
|
|
1428
|
+
};
|
|
1429
|
+
type GameTopologyManifest = Omit<GameTopologyManifest$1, "dieTypes"> & {
|
|
1430
|
+
dieTypes?: Array<DieTypeSpec>;
|
|
1431
|
+
};
|
|
1432
|
+
|
|
1433
|
+
export type { HostGameplaySessionSnapshot as $, ActionDefinition as A, BlockedInteractionAvailability as B, CardPropertySchema as C, ContainerHomeSpec as D, DetachedHomeSpec as E, DieSeedSpec as F, DieSlotHostRef as G, DieTypeSpec$1 as H, DieTypeSpec as I, EagerInputDomainDependencies as J, EdgeHomeSpec as K, GameTopologyManifest as L, GameTopologyManifest$1 as M, GenericBoardSpec as N, GenericBoardTemplateSpec as O, HexBoardSpec as P, HexBoardTemplateSpec as Q, HexEdgeRef as R, HexEdgeSpec as S, HexOrientation as T, HexSpaceSpec as U, HexVertexRef as V, HexVertexSpec as W, HistoryEntrySummary as X, HostActionSubmitResponse as Y, HostEndedSessionSnapshot as Z, HostGameplaySeatView as _, ActionInteractionDescriptor as a, SquareEdgeSpec as a$, HostGameplaySharedView as a0, HostLobbySessionSnapshot as a1, HostLobbyView as a2, HostPlayerGameplayView as a3, HostSessionContext as a4, HostSessionEventCausation as a5, HostSessionGameplayUpdatedEvent as a6, HostSessionSnapshot as a7, HostSessionStatus as a8, InputDomain as a9, PromptInteractionDescriptor as aA, PropertySchema as aB, ResolvedBoardTargetDomain as aC, ResolvedCardTargetDomain as aD, ResourceDefinition as aE, ResourceMapDomain as aF, ResourceMapDomainEntry as aG, SeatAssignment as aH, SessionActor as aI, SessionActorAuthUser as aJ, SessionActorDemoGuest as aK, SessionGameSource as aL, SessionGameSourceDemoRevision as aM, SessionGameSourceUserCompiled as aN, SessionSnapshotHistory as aO, SessionSnapshotPhase as aP, SetupOptionChoiceSpec as aQ, SetupOptionSpec as aR, SetupProfileSpec as aS, SimultaneousPhaseSnapshot as aT, SingleInputSelection as aU, SlotHomeSpec as aV, SlotHostRef as aW, SpaceHomeSpec as aX, SpaceHostSpec as aY, SquareBoardSpec as aZ, SquareBoardTemplateSpec as a_, InputDomainDependencyCase as aa, InputDomainResolver as ab, InputSelection as ac, InsufficientResourcesInteractionAvailability as ad, InteractionAvailability as ae, InteractionCommitPolicy as af, InteractionContext as ag, InteractionContextOption as ah, InteractionDescriptor as ai, InteractionDescriptorBase as aj, InteractionInputDescriptor as ak, JsonValue as al, LazyBoardTargetDomain as am, LazyCardTargetDomain as an, LazyInputDomainDependencies as ao, ManualCardSetDefinition as ap, ManyInputSelection as aq, NotYourTurnInteractionAvailability as ar, ObjectSchema as as, ParameterType as at, PieceSeedSpec as au, PieceSlotHostRef as av, PieceTypeSpec as aw, PlayerId as ax, PlayersDefinition as ay, PresetCardSetDefinition as az, ActionParameterDefinition as b, SquareSpaceSpec as b0, SquareVertexSpec as b1, TopologyScope as b2, VertexHomeSpec as b3, ZoneHandles as b4, ZoneHomeSpec as b5, ZoneSpec as b6, ZoneVisibility as b7, AvailableInteractionAvailability as c, BoardCard as d, BoardContainerHostSpec as e, BoardContainerSpec as f, BoardEdgeRef as g, BoardHostSpec as h, BoardLayout as i, BoardRelationSpec as j, BoardSpaceSpec as k, BoardSpec as l, BoardTargetDomain as m, BoardTemplateSpec as n, BoardVertexRef as o, BoundedNumberDomain as p, CardPropertySchemaVariants as q, CardSetDefinition as r, CardSetSourceType as s, CardTargetDomain as t, ChoiceDomain as u, ChoiceDomainOption as v, ChoiceListDomain as w, ComponentHomeSpec as x, ComponentSlotSpec as y, ComponentVisibilitySpec as z };
|