@dreamboard-games/sdk 0.2.1-alpha.1 → 0.3.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.
Files changed (372) hide show
  1. package/dist/{HandView-ncJIVLhN.d.ts → HandView-PYDmehVD.d.ts} +1 -1
  2. package/dist/{ResourceCounter-CTREyF73.d.ts → ResourceCounter-BTXklCEZ.d.ts} +1 -1
  3. package/dist/{ThemeProvider-BBMVT3KG.d.ts → ThemeProvider-DvMl17Ny.d.ts} +1 -1
  4. package/dist/{chunk-NKCRKGR2.js → chunk-3RQEICD3.js} +2 -2
  5. package/dist/{chunk-ZABVH7AO.js → chunk-ADYH6PVT.js} +1336 -1363
  6. package/dist/chunk-ADYH6PVT.js.map +1 -0
  7. package/dist/{chunk-PEI3FIL2.js → chunk-P7VMTJ5D.js} +2 -2
  8. package/dist/{chunk-PEI3FIL2.js.map → chunk-P7VMTJ5D.js.map} +1 -1
  9. package/dist/{chunk-WG4JQL3S.js → chunk-QZ6X4B5P.js} +1177 -1109
  10. package/dist/chunk-QZ6X4B5P.js.map +1 -0
  11. package/dist/{chunk-MZNVHMJ5.js → chunk-TXXLS3OI.js} +405 -309
  12. package/dist/chunk-TXXLS3OI.js.map +1 -0
  13. package/dist/{chunk-FDNZTDD6.js → chunk-W6SGFWXH.js} +48 -44
  14. package/dist/chunk-W6SGFWXH.js.map +1 -0
  15. package/dist/{chunk-MKXPVOUT.js → chunk-Y2AFYBMB.js} +48 -4
  16. package/dist/chunk-Y2AFYBMB.js.map +1 -0
  17. package/dist/{index-BwqPQtBu.d.ts → codegen.d.ts} +57 -565
  18. package/dist/{infrastructure/workspace-codegen.js → codegen.js} +3 -3
  19. package/dist/{components-BoiVSYqx.d.ts → components-DaIqi9QM.d.ts} +48 -37
  20. package/dist/{hex-board-view-1iAyJRFn.d.ts → hex-board-view-UCUjMALd.d.ts} +2 -2
  21. package/dist/{infrastructure/reducer-bundle-abi.d.ts → index.d-BGqVifr_.d.ts} +289 -10
  22. package/dist/index.js +1 -1
  23. package/dist/package-set.d.ts +2 -2
  24. package/dist/package-set.js +1 -1
  25. package/dist/primitive-props-BNHDkgd7.d.ts +16 -0
  26. package/dist/reducer-contract.d.ts +3 -0
  27. package/dist/{infrastructure/reducer-bundle-abi.js → reducer-contract.js} +4 -4
  28. package/dist/reducer.d.ts +185 -179
  29. package/dist/reducer.js +1363 -1372
  30. package/dist/reducer.js.map +1 -1
  31. package/dist/runtime/primitives.d.ts +9 -9
  32. package/dist/runtime/primitives.js +7 -7
  33. package/dist/runtime/runtime-api.d.ts +2 -0
  34. package/dist/runtime/runtime-api.js +1 -0
  35. package/dist/runtime/workspace-contract.d.ts +62 -17
  36. package/dist/runtime/workspace-contract.js +5 -6
  37. package/dist/{runtime-api-CPLm_XDG.d.ts → runtime-api-tGL3ArsB.d.ts} +103 -4
  38. package/dist/runtime.d.ts +11 -57
  39. package/dist/runtime.js +487 -8
  40. package/dist/runtime.js.map +1 -1
  41. package/dist/testing.d.ts +4 -4
  42. package/dist/testing.js.map +1 -1
  43. package/dist/types.d.ts +1531 -85
  44. package/dist/types.js +1 -3
  45. package/dist/types.js.map +1 -1
  46. package/dist/ui/components.d.ts +7 -8
  47. package/dist/ui/components.js +1 -1
  48. package/dist/ui/defaults.d.ts +1 -1
  49. package/dist/ui/{types/player-state.d.ts → player-state.d.ts} +2 -2
  50. package/dist/{ui-contract-rzKBwOLC.d.ts → ui-contract-SctM4ibF.d.ts} +155 -150
  51. package/dist/ui.d.ts +10 -11
  52. package/dist/ui.js +2 -2
  53. package/package.json +30 -75
  54. package/dist/bundle-CDd5FKeD.d.ts +0 -283
  55. package/dist/cards-Sl3b40Mv.d.ts +0 -13
  56. package/dist/chunk-326PGVAA.js +0 -34
  57. package/dist/chunk-326PGVAA.js.map +0 -1
  58. package/dist/chunk-FDNZTDD6.js.map +0 -1
  59. package/dist/chunk-I46YJSOD.js +0 -1
  60. package/dist/chunk-MKXPVOUT.js.map +0 -1
  61. package/dist/chunk-MZNVHMJ5.js.map +0 -1
  62. package/dist/chunk-T52J5RMF.js +0 -1
  63. package/dist/chunk-WG4JQL3S.js.map +0 -1
  64. package/dist/chunk-XV6D3ET4.js +0 -485
  65. package/dist/chunk-XV6D3ET4.js.map +0 -1
  66. package/dist/chunk-ZABVH7AO.js.map +0 -1
  67. package/dist/generated/runtime/primitives.d.ts +0 -13
  68. package/dist/generated/runtime/primitives.js +0 -181
  69. package/dist/generated/runtime/primitives.js.map +0 -1
  70. package/dist/generated/runtime-api.d.ts +0 -3
  71. package/dist/generated/runtime-api.js +0 -2
  72. package/dist/generated/runtime.d.ts +0 -15
  73. package/dist/generated/runtime.js +0 -19
  74. package/dist/generated/runtime.js.map +0 -1
  75. package/dist/generated/workspace-contract.d.ts +0 -15
  76. package/dist/generated/workspace-contract.js +0 -15
  77. package/dist/generated/workspace-contract.js.map +0 -1
  78. package/dist/infrastructure/reducer-bundle-abi.js.map +0 -1
  79. package/dist/infrastructure/workspace-codegen.d.ts +0 -53
  80. package/dist/infrastructure/workspace-codegen.js.map +0 -1
  81. package/dist/manifest-contract-BNHVGFtU.d.ts +0 -9
  82. package/dist/primitive-props-DpKs-GCr.d.ts +0 -11
  83. package/dist/runtime/types/runtime-api.d.ts +0 -1
  84. package/dist/runtime/types/runtime-api.js +0 -2
  85. package/dist/runtime/types/runtime-api.js.map +0 -1
  86. package/dist/runtime-api-3dshj6kK.d.ts +0 -101
  87. package/dist/slots-1GPGihk8.d.ts +0 -8
  88. package/src/browser-interaction/attributes.ts +0 -211
  89. package/src/browser-interaction/canonical.ts +0 -77
  90. package/src/browser-interaction/constants.ts +0 -77
  91. package/src/browser-interaction/effects.ts +0 -176
  92. package/src/browser-interaction/index.ts +0 -111
  93. package/src/browser-interaction/normalize.ts +0 -997
  94. package/src/browser-interaction/registry.ts +0 -70
  95. package/src/browser-interaction/resolve.ts +0 -596
  96. package/src/browser-interaction/schemas.ts +0 -152
  97. package/src/browser-interaction/types.ts +0 -304
  98. package/src/browser-interaction.ts +0 -1
  99. package/src/generated/reducer-contract/builders.ts +0 -90
  100. package/src/generated/reducer-contract/version.ts +0 -9
  101. package/src/generated/reducer-contract/wire.ts +0 -100
  102. package/src/generated/reducer-contract/zod.ts +0 -103
  103. package/src/generated/runtime/primitives.ts +0 -2
  104. package/src/generated/runtime-api.ts +0 -5
  105. package/src/generated/runtime.ts +0 -35
  106. package/src/generated/workspace-contract.ts +0 -2
  107. package/src/index.ts +0 -7
  108. package/src/infrastructure/reducer-bundle-abi.ts +0 -8
  109. package/src/infrastructure/reducer-contract/bundle.ts +0 -37
  110. package/src/infrastructure/workspace-codegen/hex-geometry.ts +0 -69
  111. package/src/infrastructure/workspace-codegen/index.ts +0 -64
  112. package/src/infrastructure/workspace-codegen/manifest-contract.ts +0 -6632
  113. package/src/infrastructure/workspace-codegen/manifest-validation.ts +0 -795
  114. package/src/infrastructure/workspace-codegen/ownership.ts +0 -131
  115. package/src/infrastructure/workspace-codegen/preset-card-sets.ts +0 -169
  116. package/src/infrastructure/workspace-codegen/seeds.ts +0 -1705
  117. package/src/infrastructure/workspace-codegen.ts +0 -1
  118. package/src/package-set.ts +0 -19
  119. package/src/reducer/authoring/contract.ts +0 -157
  120. package/src/reducer/authoring/effect.ts +0 -224
  121. package/src/reducer/authoring/game.ts +0 -23
  122. package/src/reducer/authoring/interaction.ts +0 -98
  123. package/src/reducer/authoring/phase.ts +0 -300
  124. package/src/reducer/authoring/types.ts +0 -70
  125. package/src/reducer/authoring/validation.ts +0 -382
  126. package/src/reducer/authoring/view-stage.ts +0 -68
  127. package/src/reducer/authoring.ts +0 -29
  128. package/src/reducer/bundle/ingress-bundle.ts +0 -491
  129. package/src/reducer/bundle/trusted/engine-instruction-resolver.ts +0 -254
  130. package/src/reducer/bundle/trusted/flow-instruction-resolver.ts +0 -73
  131. package/src/reducer/bundle/trusted/instruction-runner.ts +0 -414
  132. package/src/reducer/bundle/trusted/interaction-authorization.ts +0 -137
  133. package/src/reducer/bundle/trusted/interaction-collectors.ts +0 -859
  134. package/src/reducer/bundle/trusted/interaction-decision.ts +0 -747
  135. package/src/reducer/bundle/trusted/interaction-resolver.ts +0 -95
  136. package/src/reducer/bundle/trusted/interaction-types.ts +0 -174
  137. package/src/reducer/bundle/trusted/lifecycle-runner.ts +0 -427
  138. package/src/reducer/bundle/trusted/projection-builder.ts +0 -680
  139. package/src/reducer/bundle/trusted/projection-context.ts +0 -39
  140. package/src/reducer/bundle/trusted/rng-sampler.ts +0 -150
  141. package/src/reducer/bundle/trusted/runtime-registry.ts +0 -120
  142. package/src/reducer/bundle/trusted/runtime-scope.ts +0 -336
  143. package/src/reducer/bundle/trusted/simultaneous-player.ts +0 -97
  144. package/src/reducer/bundle/trusted/stage-resolver.ts +0 -87
  145. package/src/reducer/bundle/trusted/static-projection.ts +0 -116
  146. package/src/reducer/bundle/trusted/trusted-runtime-args.ts +0 -97
  147. package/src/reducer/bundle/trusted/trusted-runtime-result.ts +0 -39
  148. package/src/reducer/bundle/trusted/trusted-setup-profiles.ts +0 -43
  149. package/src/reducer/bundle/trusted/trusted-state-codec.ts +0 -48
  150. package/src/reducer/bundle/trusted-bundle.ts +0 -97
  151. package/src/reducer/bundle/types.ts +0 -171
  152. package/src/reducer/bundle.ts +0 -2
  153. package/src/reducer/client-param-schemas.ts +0 -57
  154. package/src/reducer/compose.ts +0 -34
  155. package/src/reducer/core/runtime-input.ts +0 -30
  156. package/src/reducer/core/runtime-instruction.ts +0 -59
  157. package/src/reducer/core/types.ts +0 -62
  158. package/src/reducer/definition-index.ts +0 -277
  159. package/src/reducer/derived.ts +0 -106
  160. package/src/reducer/effects.ts +0 -92
  161. package/src/reducer/engine/runtime-instruction-engine.ts +0 -155
  162. package/src/reducer/ingress/decode-runtime-input.ts +0 -7
  163. package/src/reducer/ingress/decode-session-state.ts +0 -9
  164. package/src/reducer/ingress/encode-session-state.ts +0 -6
  165. package/src/reducer/ingress/input-codec.ts +0 -18
  166. package/src/reducer/ingress/phase-schemas.ts +0 -62
  167. package/src/reducer/ingress/raw-types.ts +0 -107
  168. package/src/reducer/ingress/runtime-codec.ts +0 -14
  169. package/src/reducer/ingress/runtime-payload.ts +0 -13
  170. package/src/reducer/ingress/session-codec.ts +0 -392
  171. package/src/reducer/ingress/types.ts +0 -6
  172. package/src/reducer/inputs/boardInput.ts +0 -217
  173. package/src/reducer/inputs/boardTarget.ts +0 -190
  174. package/src/reducer/inputs/cardInput.ts +0 -86
  175. package/src/reducer/inputs/cardTarget.ts +0 -101
  176. package/src/reducer/inputs/choiceTarget.ts +0 -104
  177. package/src/reducer/inputs/defineInputs.ts +0 -71
  178. package/src/reducer/inputs/formInput.ts +0 -809
  179. package/src/reducer/inputs/many.ts +0 -120
  180. package/src/reducer/inputs/promptInput.ts +0 -87
  181. package/src/reducer/inputs/rngInput.ts +0 -58
  182. package/src/reducer/inputs/targetRule.ts +0 -123
  183. package/src/reducer/inputs.ts +0 -41
  184. package/src/reducer/model/definition.ts +0 -1072
  185. package/src/reducer/model/extract.ts +0 -745
  186. package/src/reducer/model/manifest.ts +0 -570
  187. package/src/reducer/model/queries.ts +0 -641
  188. package/src/reducer/model/runtime.ts +0 -264
  189. package/src/reducer/model/spec.ts +0 -1386
  190. package/src/reducer/model/table.ts +0 -260
  191. package/src/reducer/model.ts +0 -7
  192. package/src/reducer/ops.ts +0 -1034
  193. package/src/reducer/parse-utils.ts +0 -28
  194. package/src/reducer/per-player.ts +0 -422
  195. package/src/reducer/rng.ts +0 -69
  196. package/src/reducer/schema-helpers.ts +0 -185
  197. package/src/reducer/setup-bootstrap-helpers.ts +0 -171
  198. package/src/reducer/setup-bootstrap.ts +0 -481
  199. package/src/reducer/table-ops.ts +0 -2671
  200. package/src/reducer/table-queries.ts +0 -372
  201. package/src/reducer/transaction.ts +0 -120
  202. package/src/reducer.ts +0 -314
  203. package/src/runtime/primitives.ts +0 -1
  204. package/src/runtime/types/runtime-api.ts +0 -1
  205. package/src/runtime/workspace-contract.ts +0 -32
  206. package/src/runtime-internal/components/InteractionForm.tsx +0 -1647
  207. package/src/runtime-internal/components/PluginRuntime.tsx +0 -105
  208. package/src/runtime-internal/components/board/target-layer.ts +0 -72
  209. package/src/runtime-internal/context/ClientParamSchemaContext.tsx +0 -44
  210. package/src/runtime-internal/context/InteractionDraftContext.tsx +0 -279
  211. package/src/runtime-internal/context/PluginSessionContext.tsx +0 -47
  212. package/src/runtime-internal/context/PluginStateContext.tsx +0 -303
  213. package/src/runtime-internal/context/RuntimeContext.tsx +0 -96
  214. package/src/runtime-internal/defaults/components.tsx +0 -409
  215. package/src/runtime-internal/defaults/index.ts +0 -11
  216. package/src/runtime-internal/errors/ValidationError.ts +0 -29
  217. package/src/runtime-internal/hooks/useActivePlayers.ts +0 -33
  218. package/src/runtime-internal/hooks/useBoardInteractions.ts +0 -727
  219. package/src/runtime-internal/hooks/useGameSelector.ts +0 -105
  220. package/src/runtime-internal/hooks/useGameView.ts +0 -9
  221. package/src/runtime-internal/hooks/useInteractionByKey.ts +0 -354
  222. package/src/runtime-internal/hooks/useInteractionHandle.ts +0 -438
  223. package/src/runtime-internal/hooks/useIsMyTurn.ts +0 -20
  224. package/src/runtime-internal/hooks/useLobby.ts +0 -76
  225. package/src/runtime-internal/hooks/useMe.ts +0 -48
  226. package/src/runtime-internal/hooks/usePlayerInfo.ts +0 -28
  227. package/src/runtime-internal/hooks/usePlayerTurnOrder.ts +0 -23
  228. package/src/runtime-internal/hooks/usePluginRuntime.ts +0 -147
  229. package/src/runtime-internal/hooks/useSeatInbox.ts +0 -61
  230. package/src/runtime-internal/hooks/useSimultaneousPhase.ts +0 -10
  231. package/src/runtime-internal/index.ts +0 -42
  232. package/src/runtime-internal/internal.ts +0 -43
  233. package/src/runtime-internal/plugin-styles.css +0 -250
  234. package/src/runtime-internal/primitives/board.tsx +0 -530
  235. package/src/runtime-internal/primitives/dialog-lifecycle.ts +0 -58
  236. package/src/runtime-internal/primitives/dice.tsx +0 -79
  237. package/src/runtime-internal/primitives/game-ui-provider.tsx +0 -35
  238. package/src/runtime-internal/primitives/game.tsx +0 -387
  239. package/src/runtime-internal/primitives/hand-intent-adapter.ts +0 -147
  240. package/src/runtime-internal/primitives/hand-surface.tsx +0 -594
  241. package/src/runtime-internal/primitives/index.ts +0 -196
  242. package/src/runtime-internal/primitives/interaction-form-binding.tsx +0 -56
  243. package/src/runtime-internal/primitives/interaction-submit.ts +0 -90
  244. package/src/runtime-internal/primitives/interaction.tsx +0 -1146
  245. package/src/runtime-internal/primitives/phase.tsx +0 -43
  246. package/src/runtime-internal/primitives/player-roster.tsx +0 -302
  247. package/src/runtime-internal/primitives/primitive-props.tsx +0 -101
  248. package/src/runtime-internal/primitives/prompt.tsx +0 -255
  249. package/src/runtime-internal/primitives/ui.tsx +0 -60
  250. package/src/runtime-internal/primitives/zone.tsx +0 -791
  251. package/src/runtime-internal/reducer.ts +0 -30
  252. package/src/runtime-internal/runtime/createPluginRuntimeAPI.ts +0 -605
  253. package/src/runtime-internal/types/plugin-state.ts +0 -514
  254. package/src/runtime-internal/types/reducer-state.ts +0 -24
  255. package/src/runtime-internal/types/runtime-api.ts +0 -114
  256. package/src/runtime-internal/ui-contract.ts +0 -519
  257. package/src/runtime-internal/utils/browser-interaction-effects.ts +0 -240
  258. package/src/runtime-internal/utils/card-intent-adapter.ts +0 -546
  259. package/src/runtime-internal/utils/interaction-draft-digest.ts +0 -252
  260. package/src/runtime-internal/utils/interaction-inputs.ts +0 -492
  261. package/src/runtime-internal/utils/interaction-labels.ts +0 -23
  262. package/src/runtime-internal/utils/interaction-router.ts +0 -273
  263. package/src/runtime-internal/utils/interaction-status.ts +0 -74
  264. package/src/runtime-internal/utils/semantic-projection-digest.ts +0 -407
  265. package/src/runtime-internal/workspace-contract.ts +0 -1170
  266. package/src/runtime.ts +0 -34
  267. package/src/testing/create-expect-api.ts +0 -352
  268. package/src/testing/create-test-runtime.ts +0 -381
  269. package/src/testing/definitions.ts +0 -127
  270. package/src/testing/index.ts +0 -3
  271. package/src/testing.ts +0 -1
  272. package/src/type-stubs/manifest-contract.d.ts +0 -42
  273. package/src/type-stubs/manifest-contract.js +0 -72
  274. package/src/type-stubs/ui-contract.d.ts +0 -5
  275. package/src/type-stubs/ui-contract.js +0 -1
  276. package/src/types/authoring-card-properties.type-test.ts +0 -266
  277. package/src/types/authoring.ts +0 -1282
  278. package/src/types/cards.ts +0 -19
  279. package/src/types/contracts.ts +0 -1550
  280. package/src/types/generated-helpers.ts +0 -35
  281. package/src/types/index.ts +0 -147
  282. package/src/types/slots.ts +0 -11
  283. package/src/types.ts +0 -1
  284. package/src/ui/components/ActionButton.tsx +0 -97
  285. package/src/ui/components/ActionPanel.tsx +0 -315
  286. package/src/ui/components/Card.tsx +0 -378
  287. package/src/ui/components/CardDragSurface.tsx +0 -1076
  288. package/src/ui/components/ChromeSuppressionContext.tsx +0 -70
  289. package/src/ui/components/CostDisplay.tsx +0 -145
  290. package/src/ui/components/DiceRoller.tsx +0 -581
  291. package/src/ui/components/Drawer.tsx +0 -180
  292. package/src/ui/components/ErrorBoundary.tsx +0 -275
  293. package/src/ui/components/GameEndDisplay.tsx +0 -398
  294. package/src/ui/components/GameSkeleton.tsx +0 -260
  295. package/src/ui/components/Hand.tsx +0 -468
  296. package/src/ui/components/HandDock.tsx +0 -299
  297. package/src/ui/components/HandView.tsx +0 -441
  298. package/src/ui/components/MobileHandTray.tsx +0 -381
  299. package/src/ui/components/MoreActions.tsx +0 -143
  300. package/src/ui/components/PhaseIndicator.tsx +0 -341
  301. package/src/ui/components/PlayArea.tsx +0 -146
  302. package/src/ui/components/PrimaryActionButton.tsx +0 -336
  303. package/src/ui/components/PrimaryButton.tsx +0 -45
  304. package/src/ui/components/ResourceCounter.tsx +0 -270
  305. package/src/ui/components/StagingZone.tsx +0 -134
  306. package/src/ui/components/ThemedButton.tsx +0 -113
  307. package/src/ui/components/Toast.tsx +0 -264
  308. package/src/ui/components/board/HexGrid.tsx +0 -1297
  309. package/src/ui/components/board/NetworkGraph.tsx +0 -476
  310. package/src/ui/components/board/SlotSystem.tsx +0 -388
  311. package/src/ui/components/board/SquareGrid.tsx +0 -1165
  312. package/src/ui/components/board/TrackBoard.tsx +0 -496
  313. package/src/ui/components/board/ZoneMap.tsx +0 -448
  314. package/src/ui/components/board/hex-board-view.ts +0 -123
  315. package/src/ui/components/board/index.ts +0 -142
  316. package/src/ui/components/board/interaction-accessibility.ts +0 -21
  317. package/src/ui/components/board/target-layer.ts +0 -67
  318. package/src/ui/components/card-render-content.type-test.ts +0 -27
  319. package/src/ui/components/hand-layout-math.ts +0 -163
  320. package/src/ui/components/hand-pointer-engine.ts +0 -413
  321. package/src/ui/components/index.ts +0 -245
  322. package/src/ui/components.ts +0 -1
  323. package/src/ui/defaults/components.tsx +0 -106
  324. package/src/ui/defaults/index.ts +0 -8
  325. package/src/ui/defaults.ts +0 -1
  326. package/src/ui/errors/ValidationError.ts +0 -29
  327. package/src/ui/helpers/cards.ts +0 -19
  328. package/src/ui/helpers/track-board.ts +0 -211
  329. package/src/ui/hooks/useBoardTopology.ts +0 -316
  330. package/src/ui/hooks/useCards.ts +0 -10
  331. package/src/ui/hooks/useHandCardPointer.ts +0 -381
  332. package/src/ui/hooks/useHandLayout.ts +0 -378
  333. package/src/ui/hooks/useHandPresentation.ts +0 -121
  334. package/src/ui/hooks/useHexBoard.ts +0 -74
  335. package/src/ui/hooks/useHexGrid.ts +0 -185
  336. package/src/ui/hooks/useIsMobile.ts +0 -35
  337. package/src/ui/hooks/usePanZoom.ts +0 -278
  338. package/src/ui/hooks/useSquareBoard.ts +0 -124
  339. package/src/ui/hooks/useSquareGrid.ts +0 -328
  340. package/src/ui/index.ts +0 -98
  341. package/src/ui/internal/ui/alert.tsx +0 -51
  342. package/src/ui/internal/ui/button.tsx +0 -58
  343. package/src/ui/internal/ui/dialog.tsx +0 -134
  344. package/src/ui/internal/ui/input.tsx +0 -21
  345. package/src/ui/internal/ui/label.tsx +0 -21
  346. package/src/ui/internal/ui/select.tsx +0 -129
  347. package/src/ui/internal/ui/tooltip.tsx +0 -54
  348. package/src/ui/internal/ui/utils.ts +0 -5
  349. package/src/ui/plugin-styles.css +0 -250
  350. package/src/ui/primitives/dialog-lifecycle.ts +0 -58
  351. package/src/ui/primitives/dice.tsx +0 -79
  352. package/src/ui/primitives/primitive-props.tsx +0 -101
  353. package/src/ui/theme/ThemeProvider.tsx +0 -252
  354. package/src/ui/theme/board.ts +0 -61
  355. package/src/ui/theme/css-vars.ts +0 -105
  356. package/src/ui/theme/derive.ts +0 -240
  357. package/src/ui/theme/index.ts +0 -61
  358. package/src/ui/theme/presets/arcade.ts +0 -261
  359. package/src/ui/theme/presets/studio.ts +0 -261
  360. package/src/ui/theme/presets/tabletop.ts +0 -266
  361. package/src/ui/theme/tokens.ts +0 -392
  362. package/src/ui/types/hex-color.ts +0 -20
  363. package/src/ui/types/player-state.ts +0 -463
  364. package/src/ui/types/tiled-board.ts +0 -785
  365. package/src/ui/types/visual-state.ts +0 -137
  366. package/src/ui.ts +0 -1
  367. /package/dist/{chunk-NKCRKGR2.js.map → chunk-3RQEICD3.js.map} +0 -0
  368. /package/dist/{chunk-I46YJSOD.js.map → codegen.js.map} +0 -0
  369. /package/dist/{chunk-T52J5RMF.js.map → reducer-contract.js.map} +0 -0
  370. /package/dist/{generated → runtime}/runtime-api.js.map +0 -0
  371. /package/dist/ui/{types/player-state.js → player-state.js} +0 -0
  372. /package/dist/ui/{types/player-state.js.map → player-state.js.map} +0 -0
package/dist/types.d.ts CHANGED
@@ -1,16 +1,1455 @@
1
- import { M as GameTopologyManifest$1, H as DieTypeSpec$1, g as BoardEdgeRef, o as BoardVertexRef, al as JsonValue } from './index-BwqPQtBu.js';
2
- export { A as ActionDefinition, a as ActionInteractionDescriptor, b as ActionParameterDefinition, c as AvailableInteractionAvailability, B as BlockedInteractionAvailability, d as BoardCard, e as BoardContainerHostSpec, f as BoardContainerSpec, h as BoardHostSpec, i as BoardLayout, j as BoardRelationSpec, k as BoardSpaceSpec, l as BoardSpec, m as BoardTargetDomain, n as BoardTemplateSpec, p as BoundedNumberDomain, C as CardPropertySchema, q as CardPropertySchemaVariants, r as CardSetDefinition, s as CardSetSourceType, t as CardTargetDomain, u as ChoiceDomain, v as ChoiceDomainOption, w as ChoiceListDomain, x as ComponentHomeSpec, y as ComponentSlotSpec, z as ComponentVisibilitySpec, D as ContainerHomeSpec, E as DetachedHomeSpec, F as DieSeedSpec, G as DieSlotHostRef, I as DieTypeSpec, J as EagerInputDomainDependencies, K as EdgeHomeSpec, L as GameTopologyManifest, N as GenericBoardSpec, O as GenericBoardTemplateSpec, P as HexBoardSpec, Q as HexBoardTemplateSpec, R as HexEdgeRef, S as HexEdgeSpec, T as HexOrientation, U as HexSpaceSpec, V as HexVertexRef, W as HexVertexSpec, X as HistoryEntrySummary, Y as HostActionSubmitResponse, Z as HostEndedSessionSnapshot, _ as HostGameplaySeatView, $ as HostGameplaySessionSnapshot, a0 as HostGameplaySharedView, a1 as HostLobbySessionSnapshot, a2 as HostLobbyView, a3 as HostPlayerGameplayView, a4 as HostSessionContext, a5 as HostSessionEventCausation, a6 as HostSessionGameplayUpdatedEvent, a7 as HostSessionSnapshot, a8 as HostSessionStatus, a9 as InputDomain, aa as InputDomainDependencyCase, ab as InputDomainResolver, ac as InputSelection, ad as InsufficientResourcesInteractionAvailability, ae as InteractionAvailability, af as InteractionCommitPolicy, ag as InteractionContext, ah as InteractionContextOption, ai as InteractionDescriptor, aj as InteractionDescriptorBase, ak as InteractionInputDescriptor, am as LazyBoardTargetDomain, an as LazyCardTargetDomain, ao as LazyInputDomainDependencies, ap as ManualCardSetDefinition, aq as ManyInputSelection, ar as NotYourTurnInteractionAvailability, as as ObjectSchema, at as ParameterType, au as PieceSeedSpec, av as PieceSlotHostRef, aw as PieceTypeSpec, ax as PlayerId, ay as PlayersDefinition, az as PresetCardSetDefinition, aA as PromptInteractionDescriptor, aB as PropertySchema, aC as ResolvedBoardTargetDomain, aD as ResolvedCardTargetDomain, aE as ResourceDefinition, aF as ResourceMapDomain, aG as ResourceMapDomainEntry, aH as SeatAssignment, aI as SessionActor, aJ as SessionActorAuthUser, aK as SessionActorDemoGuest, aL as SessionGameSource, aM as SessionGameSourceDemoRevision, aN as SessionGameSourceUserCompiled, aO as SessionSnapshotHistory, aP as SessionSnapshotPhase, aQ as SetupOptionChoiceSpec, aR as SetupOptionSpec, aS as SetupProfileSpec, aT as SimultaneousPhaseSnapshot, aU as SingleInputSelection, aV as SlotHomeSpec, aW as SlotHostRef, aX as SpaceHomeSpec, aY as SpaceHostSpec, aZ as SquareBoardSpec, a_ as SquareBoardTemplateSpec, a$ as SquareEdgeSpec, b0 as SquareSpaceSpec, b1 as SquareVertexSpec, b2 as TopologyScope, b3 as VertexHomeSpec, b4 as ZoneHandles, b5 as ZoneHomeSpec, b6 as ZoneSpec, b7 as ZoneVisibility } from './index-BwqPQtBu.js';
3
- export { C as CardCollection, V as ViewCard } from './cards-Sl3b40Mv.js';
4
- export { V as ViewSlotOccupant } from './slots-1GPGihk8.js';
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$2 = {
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$2 = {
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$2>;
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$1 = string;
1425
+
1426
+ interface ViewCard<CardIdValue extends string = string, CardTypeValue extends string = string, Properties extends Record<string, unknown> = Record<string, unknown>> {
1427
+ id: CardIdValue;
1428
+ cardType: CardTypeValue;
1429
+ name?: string;
1430
+ text?: string;
1431
+ properties: Properties;
1432
+ }
1433
+ interface CardCollection<CardIdValue extends string = string, Card extends ViewCard<CardIdValue> = ViewCard<CardIdValue>> {
1434
+ cardIds: readonly CardIdValue[];
1435
+ cardsById: Readonly<Record<CardIdValue, Card | undefined>>;
1436
+ }
5
1437
 
6
- type DieTypeSpec = Omit<DieTypeSpec$1, "sides"> & {
7
- sides?: DieTypeSpec$1["sides"];
1438
+ interface ViewSlotOccupant<PieceIdValue extends string = string, PlayerIdValue extends string = string, SlotIdValue extends string = string, Data extends Record<string, unknown> = Record<string, unknown>> {
1439
+ pieceId: PieceIdValue;
1440
+ playerId: PlayerIdValue | null;
1441
+ slotId: SlotIdValue;
1442
+ data?: Data;
1443
+ }
1444
+
1445
+ type DieTypeSpec$1 = Omit<DieTypeSpec$2, "sides"> & {
1446
+ sides?: DieTypeSpec$2["sides"];
8
1447
  };
9
1448
  type DeepReadonly<T> = T extends (...args: readonly unknown[]) => unknown ? T : T extends readonly (infer Item)[] ? ReadonlyArray<DeepReadonly<Item>> : T extends object ? {
10
1449
  readonly [Key in keyof T]: DeepReadonly<T[Key]>;
11
1450
  } : T;
12
- type GameTopologyManifest = DeepReadonly<Omit<GameTopologyManifest$1, "dieTypes"> & {
13
- dieTypes?: readonly DieTypeSpec[];
1451
+ type GameTopologyManifest$1 = DeepReadonly<Omit<GameTopologyManifest$2, "dieTypes"> & {
1452
+ dieTypes?: readonly DieTypeSpec$1[];
14
1453
  }>;
15
1454
  type ArrayItem<T> = T extends readonly (infer Item)[] ? Item : never;
16
1455
  type EntryId<T> = T extends {
@@ -18,36 +1457,36 @@ type EntryId<T> = T extends {
18
1457
  } ? Id : never;
19
1458
  type IdsOf<T> = EntryId<ArrayItem<NonNullable<T>>>;
20
1459
  type RuntimeRecord = Record<string, JsonValue>;
21
- type CardSetId<Manifest extends GameTopologyManifest> = IdsOf<Manifest["cardSets"]>;
22
- type ZoneId<Manifest extends GameTopologyManifest> = IdsOf<Manifest["zones"]>;
23
- type BoardId<Manifest extends GameTopologyManifest> = IdsOf<Manifest["boards"]>;
24
- type PerPlayerZoneId<Manifest extends GameTopologyManifest> = EntryId<Extract<ArrayItem<NonNullable<Manifest["zones"]>>, {
1460
+ type CardSetId<Manifest extends GameTopologyManifest$1> = IdsOf<Manifest["cardSets"]>;
1461
+ type ZoneId<Manifest extends GameTopologyManifest$1> = IdsOf<Manifest["zones"]>;
1462
+ type BoardId<Manifest extends GameTopologyManifest$1> = IdsOf<Manifest["boards"]>;
1463
+ type PerPlayerZoneId<Manifest extends GameTopologyManifest$1> = EntryId<Extract<ArrayItem<NonNullable<Manifest["zones"]>>, {
25
1464
  scope: "perPlayer";
26
1465
  }>>;
27
- type SharedZoneId<Manifest extends GameTopologyManifest> = Exclude<ZoneId<Manifest>, PerPlayerZoneId<Manifest>>;
28
- type PerPlayerBoardId<Manifest extends GameTopologyManifest> = EntryId<Extract<ArrayItem<NonNullable<Manifest["boards"]>>, {
1466
+ type SharedZoneId<Manifest extends GameTopologyManifest$1> = Exclude<ZoneId<Manifest>, PerPlayerZoneId<Manifest>>;
1467
+ type PerPlayerBoardId<Manifest extends GameTopologyManifest$1> = EntryId<Extract<ArrayItem<NonNullable<Manifest["boards"]>>, {
29
1468
  scope: "perPlayer";
30
1469
  }>>;
31
- type SharedBoardId<Manifest extends GameTopologyManifest> = Exclude<BoardId<Manifest>, PerPlayerBoardId<Manifest>>;
32
- type ResourceId<Manifest extends GameTopologyManifest> = IdsOf<Manifest["resources"]>;
33
- type PieceTypeId<Manifest extends GameTopologyManifest> = IdsOf<Manifest["pieceTypes"]>;
34
- type DieTypeId<Manifest extends GameTopologyManifest> = IdsOf<Manifest["dieTypes"]>;
35
- type PieceSeedOf<Manifest extends GameTopologyManifest> = ArrayItem<NonNullable<Manifest["pieceSeeds"]>>;
36
- type DieSeedOf<Manifest extends GameTopologyManifest> = ArrayItem<NonNullable<Manifest["dieSeeds"]>>;
37
- type SetupOptionId<Manifest extends GameTopologyManifest> = IdsOf<Manifest["setupOptions"]>;
38
- type ManualCardSetOf<Manifest extends GameTopologyManifest> = Extract<ArrayItem<NonNullable<Manifest["cardSets"]>>, {
1470
+ type SharedBoardId<Manifest extends GameTopologyManifest$1> = Exclude<BoardId<Manifest>, PerPlayerBoardId<Manifest>>;
1471
+ type ResourceId<Manifest extends GameTopologyManifest$1> = IdsOf<Manifest["resources"]>;
1472
+ type PieceTypeId<Manifest extends GameTopologyManifest$1> = IdsOf<Manifest["pieceTypes"]>;
1473
+ type DieTypeId<Manifest extends GameTopologyManifest$1> = IdsOf<Manifest["dieTypes"]>;
1474
+ type PieceSeedOf<Manifest extends GameTopologyManifest$1> = ArrayItem<NonNullable<Manifest["pieceSeeds"]>>;
1475
+ type DieSeedOf<Manifest extends GameTopologyManifest$1> = ArrayItem<NonNullable<Manifest["dieSeeds"]>>;
1476
+ type SetupOptionId<Manifest extends GameTopologyManifest$1> = IdsOf<Manifest["setupOptions"]>;
1477
+ type ManualCardSetOf<Manifest extends GameTopologyManifest$1> = Extract<ArrayItem<NonNullable<Manifest["cardSets"]>>, {
39
1478
  type: "manual";
40
1479
  }>;
41
- type CardOf<Manifest extends GameTopologyManifest> = ManualCardSetOf<Manifest> extends infer CardSet ? CardSet extends {
1480
+ type CardOf<Manifest extends GameTopologyManifest$1> = ManualCardSetOf<Manifest> extends infer CardSet ? CardSet extends {
42
1481
  cards: infer Cards extends readonly unknown[];
43
1482
  } ? ArrayItem<Cards> : never : never;
44
- type BoardOf<Manifest extends GameTopologyManifest, CurrentBoardId extends BoardId<Manifest>> = Extract<ArrayItem<NonNullable<Manifest["boards"]>>, {
1483
+ type BoardOf<Manifest extends GameTopologyManifest$1, CurrentBoardId extends BoardId<Manifest>> = Extract<ArrayItem<NonNullable<Manifest["boards"]>>, {
45
1484
  id: CurrentBoardId;
46
1485
  }>;
47
- type BoardTemplateOf<Manifest extends GameTopologyManifest, CurrentTemplateId extends string> = Extract<ArrayItem<NonNullable<Manifest["boardTemplates"]>>, {
1486
+ type BoardTemplateOf<Manifest extends GameTopologyManifest$1, CurrentTemplateId extends string> = Extract<ArrayItem<NonNullable<Manifest["boardTemplates"]>>, {
48
1487
  id: CurrentTemplateId;
49
1488
  }>;
50
- type ResolvedBoardLikeOf<Manifest extends GameTopologyManifest, CurrentBoardId extends BoardId<Manifest>> = BoardOf<Manifest, CurrentBoardId> | (BoardOf<Manifest, CurrentBoardId> extends {
1489
+ type ResolvedBoardLikeOf<Manifest extends GameTopologyManifest$1, CurrentBoardId extends BoardId<Manifest>> = BoardOf<Manifest, CurrentBoardId> | (BoardOf<Manifest, CurrentBoardId> extends {
51
1490
  templateId: infer CurrentTemplateId extends string;
52
1491
  } ? BoardTemplateOf<Manifest, CurrentTemplateId> : never);
53
1492
  type SpaceIdOf<BoardLike> = IdsOf<BoardLike extends {
@@ -67,18 +1506,18 @@ type HexSpaceOf<BoardLike> = Extract<SpaceOf<BoardLike>, {
67
1506
  q: number;
68
1507
  r: number;
69
1508
  }>;
70
- type BoardEntryOf<Manifest extends GameTopologyManifest> = ArrayItem<NonNullable<Manifest["boards"]>>;
71
- type TemplateForBoardEntry<Manifest extends GameTopologyManifest, Entry> = Entry extends {
1509
+ type BoardEntryOf<Manifest extends GameTopologyManifest$1> = ArrayItem<NonNullable<Manifest["boards"]>>;
1510
+ type TemplateForBoardEntry<Manifest extends GameTopologyManifest$1, Entry> = Entry extends {
72
1511
  templateId: infer TemplateId extends string;
73
1512
  layout: infer Layout;
74
1513
  } ? Extract<BoardTemplateOf<Manifest, TemplateId>, {
75
1514
  layout: Layout;
76
1515
  }> : never;
77
- type BoardLikeForEntry<Manifest extends GameTopologyManifest, Entry> = Entry extends BoardEntryOf<Manifest> ? Entry extends {
1516
+ type BoardLikeForEntry<Manifest extends GameTopologyManifest$1, Entry> = Entry extends BoardEntryOf<Manifest> ? Entry extends {
78
1517
  id: infer CurrentBoardId extends BoardId<Manifest>;
79
1518
  } ? ResolvedBoardLikeOf<Manifest, CurrentBoardId> : Entry : Entry;
80
- type SpaceIdForBoard<Manifest extends GameTopologyManifest, CurrentBoardId extends BoardId<Manifest>> = SpaceIdOf<ResolvedBoardLikeOf<Manifest, CurrentBoardId>>;
81
- type ContainerIdForBoard<Manifest extends GameTopologyManifest, CurrentBoardId extends BoardId<Manifest>> = ContainerIdOf<ResolvedBoardLikeOf<Manifest, CurrentBoardId>>;
1519
+ type SpaceIdForBoard<Manifest extends GameTopologyManifest$1, CurrentBoardId extends BoardId<Manifest>> = SpaceIdOf<ResolvedBoardLikeOf<Manifest, CurrentBoardId>>;
1520
+ type ContainerIdForBoard<Manifest extends GameTopologyManifest$1, CurrentBoardId extends BoardId<Manifest>> = ContainerIdOf<ResolvedBoardLikeOf<Manifest, CurrentBoardId>>;
82
1521
  type RuntimeIdsFromCount<BaseId extends string, Count> = Count extends number ? number extends Count ? BaseId | `${BaseId}-${number}` : Count extends 1 ? BaseId : `${BaseId}-${OneTo<Count>}` : BaseId;
83
1522
  type CardRuntimeId<Card> = Card extends {
84
1523
  type: infer TypeId extends string;
@@ -92,32 +1531,32 @@ type SeedRuntimeId<Seed> = Seed extends {
92
1531
  } ? Id : TypeId, Seed extends {
93
1532
  count: infer Count extends number;
94
1533
  } ? Count : never> : never;
95
- type CardId<Manifest extends GameTopologyManifest> = CardRuntimeId<CardOf<Manifest>>;
96
- type PieceId<Manifest extends GameTopologyManifest> = SeedRuntimeId<PieceSeedOf<Manifest>>;
97
- type DieId<Manifest extends GameTopologyManifest> = SeedRuntimeId<DieSeedOf<Manifest>>;
98
- type PieceTypeOf<Manifest extends GameTopologyManifest, CurrentTypeId extends PieceTypeId<Manifest>> = Extract<ArrayItem<NonNullable<Manifest["pieceTypes"]>>, {
1534
+ type CardId<Manifest extends GameTopologyManifest$1> = CardRuntimeId<CardOf<Manifest>>;
1535
+ type PieceId<Manifest extends GameTopologyManifest$1> = SeedRuntimeId<PieceSeedOf<Manifest>>;
1536
+ type DieId<Manifest extends GameTopologyManifest$1> = SeedRuntimeId<DieSeedOf<Manifest>>;
1537
+ type PieceTypeOf<Manifest extends GameTopologyManifest$1, CurrentTypeId extends PieceTypeId<Manifest>> = Extract<ArrayItem<NonNullable<Manifest["pieceTypes"]>>, {
99
1538
  id: CurrentTypeId;
100
1539
  }>;
101
- type DieTypeOf<Manifest extends GameTopologyManifest, CurrentTypeId extends DieTypeId<Manifest>> = Extract<ArrayItem<NonNullable<Manifest["dieTypes"]>>, {
1540
+ type DieTypeOf<Manifest extends GameTopologyManifest$1, CurrentTypeId extends DieTypeId<Manifest>> = Extract<ArrayItem<NonNullable<Manifest["dieTypes"]>>, {
102
1541
  id: CurrentTypeId;
103
1542
  }>;
104
1543
  type SlotIdOf<TypeSpec> = IdsOf<TypeSpec extends {
105
1544
  slots?: infer Slots;
106
1545
  } ? Slots : never>;
107
- type SlotIdForPieceType<Manifest extends GameTopologyManifest, CurrentTypeId extends PieceTypeId<Manifest>> = SlotIdOf<PieceTypeOf<Manifest, CurrentTypeId>>;
108
- type SlotIdForDieType<Manifest extends GameTopologyManifest, CurrentTypeId extends DieTypeId<Manifest>> = SlotIdOf<DieTypeOf<Manifest, CurrentTypeId>>;
1546
+ type SlotIdForPieceType<Manifest extends GameTopologyManifest$1, CurrentTypeId extends PieceTypeId<Manifest>> = SlotIdOf<PieceTypeOf<Manifest, CurrentTypeId>>;
1547
+ type SlotIdForDieType<Manifest extends GameTopologyManifest$1, CurrentTypeId extends DieTypeId<Manifest>> = SlotIdOf<DieTypeOf<Manifest, CurrentTypeId>>;
109
1548
  type SingletonExplicitSeed<Seed> = Seed extends {
110
1549
  id: infer _Id extends string;
111
1550
  } ? Seed extends {
112
1551
  count: infer Count extends number;
113
1552
  } ? Count extends 1 ? Seed : never : Seed : never;
114
- type TypedPieceSlotHostSeed<Manifest extends GameTopologyManifest> = SingletonExplicitSeed<PieceSeedOf<Manifest>> extends infer Seed ? Seed extends {
1553
+ type TypedPieceSlotHostSeed<Manifest extends GameTopologyManifest$1> = SingletonExplicitSeed<PieceSeedOf<Manifest>> extends infer Seed ? Seed extends {
115
1554
  typeId: infer CurrentTypeId extends PieceTypeId<Manifest>;
116
1555
  } ? [SlotIdForPieceType<Manifest, CurrentTypeId>] extends [never] ? never : Seed : never : never;
117
- type TypedDieSlotHostSeed<Manifest extends GameTopologyManifest> = SingletonExplicitSeed<DieSeedOf<Manifest>> extends infer Seed ? Seed extends {
1556
+ type TypedDieSlotHostSeed<Manifest extends GameTopologyManifest$1> = SingletonExplicitSeed<DieSeedOf<Manifest>> extends infer Seed ? Seed extends {
118
1557
  typeId: infer CurrentTypeId extends DieTypeId<Manifest>;
119
1558
  } ? [SlotIdForDieType<Manifest, CurrentTypeId>] extends [never] ? never : Seed : never : never;
120
- type TypedPieceSlotHomeSpec<Manifest extends GameTopologyManifest> = TypedPieceSlotHostSeed<Manifest> extends infer Seed ? Seed extends {
1559
+ type TypedPieceSlotHomeSpec<Manifest extends GameTopologyManifest$1> = TypedPieceSlotHostSeed<Manifest> extends infer Seed ? Seed extends {
121
1560
  id: infer HostId extends string;
122
1561
  typeId: infer CurrentTypeId extends PieceTypeId<Manifest>;
123
1562
  } ? {
@@ -128,7 +1567,7 @@ type TypedPieceSlotHomeSpec<Manifest extends GameTopologyManifest> = TypedPieceS
128
1567
  };
129
1568
  slotId: SlotIdForPieceType<Manifest, CurrentTypeId>;
130
1569
  } : never : never;
131
- type TypedDieSlotHomeSpec<Manifest extends GameTopologyManifest> = TypedDieSlotHostSeed<Manifest> extends infer Seed ? Seed extends {
1570
+ type TypedDieSlotHomeSpec<Manifest extends GameTopologyManifest$1> = TypedDieSlotHostSeed<Manifest> extends infer Seed ? Seed extends {
132
1571
  id: infer HostId extends string;
133
1572
  typeId: infer CurrentTypeId extends DieTypeId<Manifest>;
134
1573
  } ? {
@@ -153,12 +1592,12 @@ type OptionalSchemaKeys<Properties extends Readonly<Record<string, unknown>>> =
153
1592
  default: unknown;
154
1593
  } ? Key : never;
155
1594
  }[keyof Properties];
156
- type SchemaValueFromObjectProperties<Properties extends Readonly<Record<string, unknown>>, Manifest extends GameTopologyManifest, BoardLike = never> = keyof Properties extends never ? RuntimeRecord : {
1595
+ type SchemaValueFromObjectProperties<Properties extends Readonly<Record<string, unknown>>, Manifest extends GameTopologyManifest$1, BoardLike = never> = keyof Properties extends never ? RuntimeRecord : {
157
1596
  [Key in RequiredSchemaKeys<Properties>]: SchemaValueForProperty<Properties[Key], Manifest, BoardLike>;
158
1597
  } & {
159
1598
  [Key in OptionalSchemaKeys<Properties>]?: SchemaValueForProperty<Properties[Key], Manifest, BoardLike>;
160
1599
  };
161
- type SchemaValueForObjectSchema<Schema, Manifest extends GameTopologyManifest, BoardLike = never> = Schema extends {
1600
+ type SchemaValueForObjectSchema<Schema, Manifest extends GameTopologyManifest$1, BoardLike = never> = Schema extends {
162
1601
  properties: infer Properties extends Readonly<Record<string, unknown>>;
163
1602
  } ? SchemaValueFromObjectProperties<Properties, Manifest, BoardLike> : RuntimeRecord;
164
1603
  type MergeSharedProperties<Variant, Shared> = Variant extends {
@@ -166,7 +1605,7 @@ type MergeSharedProperties<Variant, Shared> = Variant extends {
166
1605
  } ? {
167
1606
  properties: Shared extends Readonly<Record<string, unknown>> ? Omit<Shared, keyof VariantProperties> & VariantProperties : VariantProperties;
168
1607
  } : Variant;
169
- type BaseSchemaValueForProperty<Schema, Manifest extends GameTopologyManifest, BoardLike = never> = Schema extends {
1608
+ type BaseSchemaValueForProperty<Schema, Manifest extends GameTopologyManifest$1, BoardLike = never> = Schema extends {
170
1609
  type: "string";
171
1610
  } ? string : Schema extends {
172
1611
  type: "integer" | "number";
@@ -211,14 +1650,14 @@ type BaseSchemaValueForProperty<Schema, Manifest extends GameTopologyManifest, B
211
1650
  } ? Record<string, SchemaValueForProperty<Schema extends {
212
1651
  values?: infer Values;
213
1652
  } ? Values : undefined, Manifest, BoardLike>> : RuntimeRecord;
214
- type SchemaValueForProperty<Schema, Manifest extends GameTopologyManifest, BoardLike = never> = Schema extends {
1653
+ type SchemaValueForProperty<Schema, Manifest extends GameTopologyManifest$1, BoardLike = never> = Schema extends {
215
1654
  nullable: true;
216
1655
  } ? BaseSchemaValueForProperty<Schema, Manifest, BoardLike> | null : BaseSchemaValueForProperty<Schema, Manifest, BoardLike>;
217
1656
  type BuildTuple<Length extends number, Accumulator extends unknown[] = []> = Accumulator["length"] extends Length ? Accumulator : BuildTuple<Length, [...Accumulator, unknown]>;
218
1657
  type EnumerateInternal<Length extends number, Accumulator extends number[] = []> = Accumulator["length"] extends Length ? Accumulator[number] : EnumerateInternal<Length, [...Accumulator, Accumulator["length"]]>;
219
1658
  type AddOne<Count extends number> = [...BuildTuple<Count>, unknown]["length"] & number;
220
1659
  type OneTo<Count extends number> = Exclude<EnumerateInternal<AddOne<Count>>, 0>;
221
- type PlayerId<Manifest extends GameTopologyManifest> = Manifest["players"]["maxPlayers"] extends infer MaxPlayers extends number ? `player-${OneTo<MaxPlayers>}` : `player-${number}`;
1660
+ type PlayerId<Manifest extends GameTopologyManifest$1> = Manifest["players"]["maxPlayers"] extends infer MaxPlayers extends number ? `player-${OneTo<MaxPlayers>}` : `player-${number}`;
222
1661
  type ToNumber<Input extends string> = Input extends `${infer Value extends number}` ? Value : never;
223
1662
  type AbsoluteNumber<Count extends number> = `${Count}` extends `-${infer Value extends number}` ? Value : Count;
224
1663
  type IsNegative<Count extends number> = `${Count}` extends `-${string}` ? true : false;
@@ -277,80 +1716,80 @@ type DerivedVertexIdOf<BoardLike> = BoardLike extends {
277
1716
  type SetupOptionChoiceId<Option> = IdsOf<Option extends {
278
1717
  choices?: infer Choices;
279
1718
  } ? Choices : never>;
280
- type SetupOptionOf<Manifest extends GameTopologyManifest> = ArrayItem<NonNullable<Manifest["setupOptions"]>>;
281
- type SetupOptionChoiceIdFor<Manifest extends GameTopologyManifest, OptionId extends SetupOptionId<Manifest>> = SetupOptionChoiceId<Extract<SetupOptionOf<Manifest>, {
1719
+ type SetupOptionOf<Manifest extends GameTopologyManifest$1> = ArrayItem<NonNullable<Manifest["setupOptions"]>>;
1720
+ type SetupOptionChoiceIdFor<Manifest extends GameTopologyManifest$1, OptionId extends SetupOptionId<Manifest>> = SetupOptionChoiceId<Extract<SetupOptionOf<Manifest>, {
282
1721
  id: OptionId;
283
1722
  }>>;
284
- type TypedSharedSpaceHomeSpec<Manifest extends GameTopologyManifest> = {
1723
+ type TypedSharedSpaceHomeSpec<Manifest extends GameTopologyManifest$1> = {
285
1724
  [CurrentBoardId in SharedBoardId<Manifest>]: {
286
1725
  type: "space";
287
1726
  boardId: CurrentBoardId;
288
1727
  spaceId: SpaceIdForBoard<Manifest, CurrentBoardId>;
289
1728
  };
290
1729
  }[SharedBoardId<Manifest>];
291
- type TypedPerPlayerSpaceHomeSpec<Manifest extends GameTopologyManifest> = {
1730
+ type TypedPerPlayerSpaceHomeSpec<Manifest extends GameTopologyManifest$1> = {
292
1731
  [CurrentBoardId in PerPlayerBoardId<Manifest>]: {
293
1732
  type: "space";
294
1733
  boardId: CurrentBoardId;
295
1734
  spaceId: SpaceIdForBoard<Manifest, CurrentBoardId>;
296
1735
  };
297
1736
  }[PerPlayerBoardId<Manifest>];
298
- type TypedSharedContainerHomeSpec<Manifest extends GameTopologyManifest> = {
1737
+ type TypedSharedContainerHomeSpec<Manifest extends GameTopologyManifest$1> = {
299
1738
  [CurrentBoardId in SharedBoardId<Manifest>]: {
300
1739
  type: "container";
301
1740
  boardId: CurrentBoardId;
302
1741
  containerId: ContainerIdForBoard<Manifest, CurrentBoardId>;
303
1742
  };
304
1743
  }[SharedBoardId<Manifest>];
305
- type TypedPerPlayerContainerHomeSpec<Manifest extends GameTopologyManifest> = {
1744
+ type TypedPerPlayerContainerHomeSpec<Manifest extends GameTopologyManifest$1> = {
306
1745
  [CurrentBoardId in PerPlayerBoardId<Manifest>]: {
307
1746
  type: "container";
308
1747
  boardId: CurrentBoardId;
309
1748
  containerId: ContainerIdForBoard<Manifest, CurrentBoardId>;
310
1749
  };
311
1750
  }[PerPlayerBoardId<Manifest>];
312
- type TypedSharedEdgeHomeSpec<Manifest extends GameTopologyManifest> = {
1751
+ type TypedSharedEdgeHomeSpec<Manifest extends GameTopologyManifest$1> = {
313
1752
  [CurrentBoardId in SharedBoardId<Manifest>]: {
314
1753
  type: "edge";
315
1754
  boardId: CurrentBoardId;
316
1755
  ref: BoardEdgeRef;
317
1756
  };
318
1757
  }[SharedBoardId<Manifest>];
319
- type TypedPerPlayerEdgeHomeSpec<Manifest extends GameTopologyManifest> = {
1758
+ type TypedPerPlayerEdgeHomeSpec<Manifest extends GameTopologyManifest$1> = {
320
1759
  [CurrentBoardId in PerPlayerBoardId<Manifest>]: {
321
1760
  type: "edge";
322
1761
  boardId: CurrentBoardId;
323
1762
  ref: BoardEdgeRef;
324
1763
  };
325
1764
  }[PerPlayerBoardId<Manifest>];
326
- type TypedSharedVertexHomeSpec<Manifest extends GameTopologyManifest> = {
1765
+ type TypedSharedVertexHomeSpec<Manifest extends GameTopologyManifest$1> = {
327
1766
  [CurrentBoardId in SharedBoardId<Manifest>]: {
328
1767
  type: "vertex";
329
1768
  boardId: CurrentBoardId;
330
1769
  ref: BoardVertexRef;
331
1770
  };
332
1771
  }[SharedBoardId<Manifest>];
333
- type TypedPerPlayerVertexHomeSpec<Manifest extends GameTopologyManifest> = {
1772
+ type TypedPerPlayerVertexHomeSpec<Manifest extends GameTopologyManifest$1> = {
334
1773
  [CurrentBoardId in PerPlayerBoardId<Manifest>]: {
335
1774
  type: "vertex";
336
1775
  boardId: CurrentBoardId;
337
1776
  ref: BoardVertexRef;
338
1777
  };
339
1778
  }[PerPlayerBoardId<Manifest>];
340
- type TypedSharedZoneHomeSpec<Manifest extends GameTopologyManifest> = {
1779
+ type TypedSharedZoneHomeSpec<Manifest extends GameTopologyManifest$1> = {
341
1780
  type: "zone";
342
1781
  zoneId: SharedZoneId<Manifest>;
343
1782
  };
344
- type TypedPerPlayerZoneHomeSpec<Manifest extends GameTopologyManifest> = {
1783
+ type TypedPerPlayerZoneHomeSpec<Manifest extends GameTopologyManifest$1> = {
345
1784
  type: "zone";
346
1785
  zoneId: PerPlayerZoneId<Manifest>;
347
1786
  };
348
- type TypedPlayerScopedComponentHomeSpec<Manifest extends GameTopologyManifest> = TypedPerPlayerZoneHomeSpec<Manifest> | TypedPerPlayerSpaceHomeSpec<Manifest> | TypedPerPlayerContainerHomeSpec<Manifest> | TypedPerPlayerEdgeHomeSpec<Manifest> | TypedPerPlayerVertexHomeSpec<Manifest>;
349
- type TypedSharedComponentHomeSpec<Manifest extends GameTopologyManifest> = {
1787
+ type TypedPlayerScopedComponentHomeSpec<Manifest extends GameTopologyManifest$1> = TypedPerPlayerZoneHomeSpec<Manifest> | TypedPerPlayerSpaceHomeSpec<Manifest> | TypedPerPlayerContainerHomeSpec<Manifest> | TypedPerPlayerEdgeHomeSpec<Manifest> | TypedPerPlayerVertexHomeSpec<Manifest>;
1788
+ type TypedSharedComponentHomeSpec<Manifest extends GameTopologyManifest$1> = {
350
1789
  type: "detached";
351
1790
  } | TypedSharedZoneHomeSpec<Manifest> | TypedSharedSpaceHomeSpec<Manifest> | TypedSharedContainerHomeSpec<Manifest> | TypedSharedEdgeHomeSpec<Manifest> | TypedSharedVertexHomeSpec<Manifest> | TypedPieceSlotHomeSpec<Manifest> | TypedDieSlotHomeSpec<Manifest>;
352
- type TypedComponentHomeSpec<Manifest extends GameTopologyManifest> = TypedSharedComponentHomeSpec<Manifest> | TypedPlayerScopedComponentHomeSpec<Manifest>;
353
- type TypedSeedLocationSpec<Seed, Manifest extends GameTopologyManifest> = Seed extends {
1791
+ type TypedComponentHomeSpec<Manifest extends GameTopologyManifest$1> = TypedSharedComponentHomeSpec<Manifest> | TypedPlayerScopedComponentHomeSpec<Manifest>;
1792
+ type TypedSeedLocationSpec<Seed, Manifest extends GameTopologyManifest$1> = Seed extends {
354
1793
  home: infer Home;
355
1794
  } ? Home extends TypedPlayerScopedComponentHomeSpec<Manifest> ? Omit<Seed, "ownerId" | "home"> & {
356
1795
  ownerId: PlayerId<Manifest>;
@@ -362,16 +1801,16 @@ type TypedSeedLocationSpec<Seed, Manifest extends GameTopologyManifest> = Seed e
362
1801
  ownerId?: PlayerId<Manifest>;
363
1802
  home?: TypedComponentHomeSpec<Manifest>;
364
1803
  };
365
- type TypedVisibilitySpec<Manifest extends GameTopologyManifest> = {
1804
+ type TypedVisibilitySpec<Manifest extends GameTopologyManifest$1> = {
366
1805
  faceUp?: boolean;
367
1806
  visibleTo?: readonly PlayerId<Manifest>[];
368
1807
  };
369
- type TypedVisibility<T, Manifest extends GameTopologyManifest> = T extends {
1808
+ type TypedVisibility<T, Manifest extends GameTopologyManifest$1> = T extends {
370
1809
  visibility?: unknown;
371
1810
  } ? Omit<T, "visibility"> & {
372
1811
  visibility?: TypedVisibilitySpec<Manifest>;
373
1812
  } : T;
374
- type TypedFields<T, Schema, Manifest extends GameTopologyManifest, BoardLike = never> = T extends {
1813
+ type TypedFields<T, Schema, Manifest extends GameTopologyManifest$1, BoardLike = never> = T extends {
375
1814
  fields?: unknown;
376
1815
  } ? Omit<T, "fields"> & {
377
1816
  fields?: SchemaValueForObjectSchema<Schema, Manifest, BoardLike>;
@@ -382,12 +1821,12 @@ type TypedBoardContainerHost<Host, BoardLike> = Host extends {
382
1821
  } ? Omit<Host, "spaceId"> & {
383
1822
  spaceId: SpaceIdOf<BoardLike>;
384
1823
  } : Host;
385
- type TypedBoardContainer<Container, Manifest extends GameTopologyManifest, BoardLike, ContainerSchema> = Container extends {
1824
+ type TypedBoardContainer<Container, Manifest extends GameTopologyManifest$1, BoardLike, ContainerSchema> = Container extends {
386
1825
  host: infer Host;
387
1826
  } ? Omit<TypedFields<TypedAllowedCardSetIds<Container, Manifest>, ContainerSchema, Manifest, BoardLike>, "host"> & {
388
1827
  host: TypedBoardContainerHost<Host, BoardLike>;
389
1828
  } : TypedFields<TypedAllowedCardSetIds<Container, Manifest>, ContainerSchema, Manifest, BoardLike>;
390
- type TypedBoardRelation<Relation, Manifest extends GameTopologyManifest, BoardLike, RelationSchema> = Relation extends object ? Omit<TypedFields<Relation, RelationSchema, Manifest, BoardLike>, "fromSpaceId" | "toSpaceId"> & {
1829
+ type TypedBoardRelation<Relation, Manifest extends GameTopologyManifest$1, BoardLike, RelationSchema> = Relation extends object ? Omit<TypedFields<Relation, RelationSchema, Manifest, BoardLike>, "fromSpaceId" | "toSpaceId"> & {
391
1830
  fromSpaceId: SpaceIdOf<BoardLike>;
392
1831
  toSpaceId: SpaceIdOf<BoardLike>;
393
1832
  } : Relation;
@@ -396,22 +1835,22 @@ type TypedOptionalArray<Base, Source, Key extends string, Item> = Source extends
396
1835
  } ? Base & {
397
1836
  [Property in Key]?: ReadonlyArray<Item>;
398
1837
  } : Base;
399
- type EffectiveSchemaForEntry<Manifest extends GameTopologyManifest, Entry, Key extends string> = Key extends keyof Entry ? Entry[Key] : TemplateForBoardEntry<Manifest, Entry> extends infer Template ? Key extends keyof Template ? Template[Key] : undefined : undefined;
400
- type TypedGenericBoardLike<Entry, Manifest extends GameTopologyManifest, BoardLike> = TypedOptionalArray<TypedOptionalArray<TypedOptionalArray<TypedFields<Omit<Entry, "spaces" | "relations" | "containers">, EffectiveSchemaForEntry<Manifest, Entry, "boardFieldsSchema">, Manifest, BoardLike>, Entry, "spaces", TypedFields<ArrayItem<NonNullable<Entry extends {
1838
+ type EffectiveSchemaForEntry<Manifest extends GameTopologyManifest$1, Entry, Key extends string> = Key extends keyof Entry ? Entry[Key] : TemplateForBoardEntry<Manifest, Entry> extends infer Template ? Key extends keyof Template ? Template[Key] : undefined : undefined;
1839
+ type TypedGenericBoardLike<Entry, Manifest extends GameTopologyManifest$1, BoardLike> = TypedOptionalArray<TypedOptionalArray<TypedOptionalArray<TypedFields<Omit<Entry, "spaces" | "relations" | "containers">, EffectiveSchemaForEntry<Manifest, Entry, "boardFieldsSchema">, Manifest, BoardLike>, Entry, "spaces", TypedFields<ArrayItem<NonNullable<Entry extends {
401
1840
  spaces?: infer Spaces;
402
1841
  } ? Spaces : never>>, EffectiveSchemaForEntry<Manifest, Entry, "spaceFieldsSchema">, Manifest, BoardLike>>, Entry, "relations", TypedBoardRelation<ArrayItem<NonNullable<Entry extends {
403
1842
  relations?: infer Relations;
404
1843
  } ? Relations : never>>, Manifest, BoardLike, EffectiveSchemaForEntry<Manifest, Entry, "relationFieldsSchema">>>, Entry, "containers", TypedBoardContainer<ArrayItem<NonNullable<Entry extends {
405
1844
  containers?: infer Containers;
406
1845
  } ? Containers : never>>, Manifest, BoardLike, EffectiveSchemaForEntry<Manifest, Entry, "containerFieldsSchema">>>;
407
- type TypedHexBoardLike<Entry, Manifest extends GameTopologyManifest, BoardLike> = TypedOptionalArray<TypedOptionalArray<TypedOptionalArray<TypedFields<Omit<Entry, "spaces" | "edges" | "vertices">, EffectiveSchemaForEntry<Manifest, Entry, "boardFieldsSchema">, Manifest, BoardLike>, Entry, "spaces", TypedFields<ArrayItem<NonNullable<Entry extends {
1846
+ type TypedHexBoardLike<Entry, Manifest extends GameTopologyManifest$1, BoardLike> = TypedOptionalArray<TypedOptionalArray<TypedOptionalArray<TypedFields<Omit<Entry, "spaces" | "edges" | "vertices">, EffectiveSchemaForEntry<Manifest, Entry, "boardFieldsSchema">, Manifest, BoardLike>, Entry, "spaces", TypedFields<ArrayItem<NonNullable<Entry extends {
408
1847
  spaces?: infer Spaces;
409
1848
  } ? Spaces : never>>, EffectiveSchemaForEntry<Manifest, Entry, "spaceFieldsSchema">, Manifest, BoardLike>>, Entry, "edges", TypedFields<ArrayItem<NonNullable<Entry extends {
410
1849
  edges?: infer Edges;
411
1850
  } ? Edges : never>>, EffectiveSchemaForEntry<Manifest, Entry, "edgeFieldsSchema">, Manifest, BoardLike>>, Entry, "vertices", TypedFields<ArrayItem<NonNullable<Entry extends {
412
1851
  vertices?: infer Vertices;
413
1852
  } ? Vertices : never>>, EffectiveSchemaForEntry<Manifest, Entry, "vertexFieldsSchema">, Manifest, BoardLike>>;
414
- type TypedSquareBoardLike<Entry, Manifest extends GameTopologyManifest, BoardLike> = TypedOptionalArray<TypedOptionalArray<TypedOptionalArray<TypedOptionalArray<TypedOptionalArray<TypedFields<Omit<Entry, "spaces" | "relations" | "containers" | "edges" | "vertices">, EffectiveSchemaForEntry<Manifest, Entry, "boardFieldsSchema">, Manifest, BoardLike>, Entry, "spaces", TypedFields<ArrayItem<NonNullable<Entry extends {
1853
+ type TypedSquareBoardLike<Entry, Manifest extends GameTopologyManifest$1, BoardLike> = TypedOptionalArray<TypedOptionalArray<TypedOptionalArray<TypedOptionalArray<TypedOptionalArray<TypedFields<Omit<Entry, "spaces" | "relations" | "containers" | "edges" | "vertices">, EffectiveSchemaForEntry<Manifest, Entry, "boardFieldsSchema">, Manifest, BoardLike>, Entry, "spaces", TypedFields<ArrayItem<NonNullable<Entry extends {
415
1854
  spaces?: infer Spaces;
416
1855
  } ? Spaces : never>>, EffectiveSchemaForEntry<Manifest, Entry, "spaceFieldsSchema">, Manifest, BoardLike>>, Entry, "relations", TypedBoardRelation<ArrayItem<NonNullable<Entry extends {
417
1856
  relations?: infer Relations;
@@ -422,14 +1861,14 @@ type TypedSquareBoardLike<Entry, Manifest extends GameTopologyManifest, BoardLik
422
1861
  } ? Edges : never>>, EffectiveSchemaForEntry<Manifest, Entry, "edgeFieldsSchema">, Manifest, BoardLike>>, Entry, "vertices", TypedFields<ArrayItem<NonNullable<Entry extends {
423
1862
  vertices?: infer Vertices;
424
1863
  } ? Vertices : never>>, EffectiveSchemaForEntry<Manifest, Entry, "vertexFieldsSchema">, Manifest, BoardLike>>;
425
- type TypedBoardLikeEntry<Entry, Manifest extends GameTopologyManifest> = Entry extends {
1864
+ type TypedBoardLikeEntry<Entry, Manifest extends GameTopologyManifest$1> = Entry extends {
426
1865
  layout: "generic";
427
1866
  } ? TypedGenericBoardLike<Entry, Manifest, BoardLikeForEntry<Manifest, Entry>> : Entry extends {
428
1867
  layout: "hex";
429
1868
  } ? TypedHexBoardLike<Entry, Manifest, BoardLikeForEntry<Manifest, Entry>> : Entry extends {
430
1869
  layout: "square";
431
1870
  } ? TypedSquareBoardLike<Entry, Manifest, BoardLikeForEntry<Manifest, Entry>> : Entry;
432
- type TypedCard<Card, Manifest extends GameTopologyManifest, CardSchema> = Card extends {
1871
+ type TypedCard<Card, Manifest extends GameTopologyManifest$1, CardSchema> = Card extends {
433
1872
  type: infer CardType extends string;
434
1873
  } ? Omit<TypedVisibility<Card, Manifest>, "home" | "properties"> & {
435
1874
  home?: TypedComponentHomeSpec<Manifest>;
@@ -438,18 +1877,18 @@ type TypedCard<Card, Manifest extends GameTopologyManifest, CardSchema> = Card e
438
1877
  shared?: infer Shared;
439
1878
  } ? CardType extends keyof Variants ? SchemaValueForObjectSchema<MergeSharedProperties<Variants[CardType], Shared>, Manifest> : never : SchemaValueForObjectSchema<CardSchema, Manifest>;
440
1879
  } : Card;
441
- type TypedCardSet<CardSet, Manifest extends GameTopologyManifest> = CardSet extends {
1880
+ type TypedCardSet<CardSet, Manifest extends GameTopologyManifest$1> = CardSet extends {
442
1881
  type: "manual";
443
1882
  cardSchema: infer CardSchema;
444
1883
  cards: infer Cards extends readonly unknown[];
445
1884
  } ? Omit<CardSet, "cards"> & {
446
1885
  cards: ReadonlyArray<TypedCard<ArrayItem<Cards>, Manifest, CardSchema>>;
447
1886
  } : CardSet;
448
- type TypedAllowedCardSetIds<T, Manifest extends GameTopologyManifest> = T extends object ? Omit<T, "allowedCardSetIds"> & {
1887
+ type TypedAllowedCardSetIds<T, Manifest extends GameTopologyManifest$1> = T extends object ? Omit<T, "allowedCardSetIds"> & {
449
1888
  allowedCardSetIds?: readonly CardSetId<Manifest>[];
450
1889
  } : T;
451
- type TypedZone<Zone, Manifest extends GameTopologyManifest> = TypedAllowedCardSetIds<Zone, Manifest>;
452
- type TypedPieceSeed<Seed, Manifest extends GameTopologyManifest> = Seed extends {
1890
+ type TypedZone<Zone, Manifest extends GameTopologyManifest$1> = TypedAllowedCardSetIds<Zone, Manifest>;
1891
+ type TypedPieceSeed<Seed, Manifest extends GameTopologyManifest$1> = Seed extends {
453
1892
  typeId: infer CurrentTypeId;
454
1893
  } ? CurrentTypeId extends PieceTypeId<Manifest> ? Omit<TypedSeedLocationSpec<TypedVisibility<Seed, Manifest>, Manifest>, "typeId" | "ownerId" | "home" | "fields"> & {
455
1894
  typeId: CurrentTypeId;
@@ -459,7 +1898,7 @@ type TypedPieceSeed<Seed, Manifest extends GameTopologyManifest> = Seed extends
459
1898
  } & Pick<TypedSeedLocationSpec<TypedVisibility<Seed, Manifest>, Manifest>, "ownerId" | "home"> : Omit<Seed, "typeId"> & {
460
1899
  typeId: PieceTypeId<Manifest>;
461
1900
  } : never;
462
- type TypedDieSeed<Seed, Manifest extends GameTopologyManifest> = Seed extends {
1901
+ type TypedDieSeed<Seed, Manifest extends GameTopologyManifest$1> = Seed extends {
463
1902
  typeId: infer CurrentTypeId;
464
1903
  } ? CurrentTypeId extends DieTypeId<Manifest> ? Omit<TypedSeedLocationSpec<TypedVisibility<Seed, Manifest>, Manifest>, "typeId" | "ownerId" | "home" | "fields"> & {
465
1904
  typeId: CurrentTypeId;
@@ -469,13 +1908,13 @@ type TypedDieSeed<Seed, Manifest extends GameTopologyManifest> = Seed extends {
469
1908
  } & Pick<TypedSeedLocationSpec<TypedVisibility<Seed, Manifest>, Manifest>, "ownerId" | "home"> : Omit<Seed, "typeId"> & {
470
1909
  typeId: DieTypeId<Manifest>;
471
1910
  } : never;
472
- type TypedSetupOptionValues<Manifest extends GameTopologyManifest> = Partial<{
1911
+ type TypedSetupOptionValues<Manifest extends GameTopologyManifest$1> = Partial<{
473
1912
  [OptionId in SetupOptionId<Manifest>]: SetupOptionChoiceIdFor<Manifest, OptionId>;
474
1913
  }>;
475
- type TypedSetupProfile<Profile, Manifest extends GameTopologyManifest> = Profile extends object ? Omit<Profile, "optionValues"> & {
1914
+ type TypedSetupProfile<Profile, Manifest extends GameTopologyManifest$1> = Profile extends object ? Omit<Profile, "optionValues"> & {
476
1915
  optionValues?: TypedSetupOptionValues<Manifest>;
477
1916
  } : Profile;
478
- type TypedTopologyManifest<Manifest extends GameTopologyManifest> = Omit<Manifest, "cardSets" | "zones" | "boardTemplates" | "boards" | "pieceSeeds" | "dieSeeds" | "setupProfiles"> & {
1917
+ type TypedTopologyManifest<Manifest extends GameTopologyManifest$1> = Omit<Manifest, "cardSets" | "zones" | "boardTemplates" | "boards" | "pieceSeeds" | "dieSeeds" | "setupProfiles"> & {
479
1918
  cardSets: ReadonlyArray<TypedCardSet<ArrayItem<Manifest["cardSets"]>, Manifest>>;
480
1919
  zones?: Manifest["zones"] extends readonly unknown[] ? ReadonlyArray<TypedZone<ArrayItem<Manifest["zones"]>, Manifest>> : Manifest["zones"];
481
1920
  boardTemplates?: Manifest["boardTemplates"] extends readonly unknown[] ? ReadonlyArray<TypedBoardLikeEntry<ArrayItem<Manifest["boardTemplates"]>, Manifest>> : Manifest["boardTemplates"];
@@ -484,8 +1923,8 @@ type TypedTopologyManifest<Manifest extends GameTopologyManifest> = Omit<Manifes
484
1923
  dieSeeds?: Manifest["dieSeeds"] extends readonly unknown[] ? ReadonlyArray<TypedDieSeed<ArrayItem<Manifest["dieSeeds"]>, Manifest>> : Manifest["dieSeeds"];
485
1924
  setupProfiles?: Manifest["setupProfiles"] extends readonly unknown[] ? ReadonlyArray<TypedSetupProfile<ArrayItem<Manifest["setupProfiles"]>, Manifest>> : Manifest["setupProfiles"];
486
1925
  };
487
- type TopologyManifestValidation<Manifest> = Manifest extends GameTopologyManifest ? TypedTopologyManifest<Manifest> : GameTopologyManifest;
488
- type DefinedTopologyManifest<Manifest> = Manifest extends GameTopologyManifest ? Manifest : GameTopologyManifest;
1926
+ type TopologyManifestValidation<Manifest> = Manifest extends GameTopologyManifest$1 ? TypedTopologyManifest<Manifest> : GameTopologyManifest$1;
1927
+ type DefinedTopologyManifest<Manifest> = Manifest extends GameTopologyManifest$1 ? Manifest : GameTopologyManifest$1;
489
1928
  declare function defineTopologyManifest<const Manifest>(manifest: Manifest & TopologyManifestValidation<NoInfer<Manifest>>): DefinedTopologyManifest<Manifest>;
490
1929
 
491
1930
  type RecordInitializer<Id extends string, Value> = Value | ((id: Id) => Value);
@@ -493,4 +1932,11 @@ declare function buildTypedRecord<Id extends string, Value>(ids: readonly Id[],
493
1932
  declare function isTypedId<Id extends string>(ids: readonly Id[], value: string): value is Id;
494
1933
  declare function expectTypedId<Id extends string>(ids: readonly Id[], value: string, description: string): Id;
495
1934
 
496
- export { BoardEdgeRef, BoardVertexRef, JsonValue, type TypedTopologyManifest, buildTypedRecord, defineTopologyManifest, expectTypedId, isTypedId };
1935
+ type DieTypeSpec = Omit<DieTypeSpec$2, "sides"> & {
1936
+ sides?: DieTypeSpec$2["sides"];
1937
+ };
1938
+ type GameTopologyManifest = Omit<GameTopologyManifest$2, "dieTypes"> & {
1939
+ dieTypes?: Array<DieTypeSpec>;
1940
+ };
1941
+
1942
+ export { type ActionDefinition, type ActionInteractionDescriptor, type ActionParameterDefinition, type AvailableInteractionAvailability, type BlockedInteractionAvailability, type BoardCard, type BoardContainerHostSpec, type BoardContainerSpec, type BoardEdgeRef, type BoardHostSpec, type BoardLayout, type BoardRelationSpec, type BoardSpaceSpec, type BoardSpec, type BoardTargetDomain, type BoardTemplateSpec, type BoardVertexRef, type BoundedNumberDomain, type CardCollection, type CardPropertySchema, type CardPropertySchemaVariants, type CardSetDefinition, type CardSetSourceType, type CardTargetDomain, type ChoiceDomain, type ChoiceDomainOption, type ChoiceListDomain, type ComponentHomeSpec, type ComponentSlotSpec, type ComponentVisibilitySpec, type ContainerHomeSpec, type DetachedHomeSpec, type DieSeedSpec, type DieSlotHostRef, type DieTypeSpec, type EagerInputDomainDependencies, type EdgeHomeSpec, type GameTopologyManifest, type GenericBoardSpec, type GenericBoardTemplateSpec, type HexBoardSpec, type HexBoardTemplateSpec, type HexEdgeRef, type HexEdgeSpec, type HexOrientation, type HexSpaceSpec, type HexVertexRef, type HexVertexSpec, type HistoryEntrySummary, type HostActionSubmitResponse, type HostEndedSessionSnapshot, type HostGameplaySeatView, type HostGameplaySessionSnapshot, type HostGameplaySharedView, type HostLobbySessionSnapshot, type HostLobbyView, type HostPlayerGameplayView, type HostSessionContext, type HostSessionEventCausation, type HostSessionGameplayUpdatedEvent, type HostSessionSnapshot, type HostSessionStatus, type InputDomain, type InputDomainDependencyCase, type InputDomainResolver, type InputSelection, type InsufficientResourcesInteractionAvailability, type InteractionAvailability, type InteractionCommitPolicy, type InteractionContext, type InteractionContextOption, type InteractionDescriptor, type InteractionDescriptorBase, type InteractionInputDescriptor, type JsonValue, type LazyBoardTargetDomain, type LazyCardTargetDomain, type LazyInputDomainDependencies, type ManualCardSetDefinition, type ManyInputSelection, type NotYourTurnInteractionAvailability, type ObjectSchema, type ParameterType, type PieceSeedSpec, type PieceSlotHostRef, type PieceTypeSpec, type PlayerId$1 as PlayerId, type PlayersDefinition, type PresetCardSetDefinition, type PromptInteractionDescriptor, type PropertySchema, type ResolvedBoardTargetDomain, type ResolvedCardTargetDomain, type ResourceDefinition, type ResourceMapDomain, type ResourceMapDomainEntry, type SeatAssignment, type SessionActor, type SessionActorAuthUser, type SessionActorDemoGuest, type SessionGameSource, type SessionGameSourceDemoRevision, type SessionGameSourceUserCompiled, type SessionSnapshotHistory, type SessionSnapshotPhase, type SetupOptionChoiceSpec, type SetupOptionSpec, type SetupProfileSpec, type SimultaneousPhaseSnapshot, type SingleInputSelection, type SlotHomeSpec, type SlotHostRef, type SpaceHomeSpec, type SpaceHostSpec, type SquareBoardSpec, type SquareBoardTemplateSpec, type SquareEdgeSpec, type SquareSpaceSpec, type SquareVertexSpec, type TopologyScope, type TypedTopologyManifest, type VertexHomeSpec, type ViewCard, type ViewSlotOccupant, type ZoneHandles, type ZoneHomeSpec, type ZoneSpec, type ZoneVisibility, buildTypedRecord, defineTopologyManifest, expectTypedId, isTypedId };