@dreamboard-games/sdk 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (369) hide show
  1. package/LICENSE.md +96 -0
  2. package/README.md +12 -0
  3. package/dist/HandView-ncJIVLhN.d.ts +193 -0
  4. package/dist/ResourceCounter-CTREyF73.d.ts +102 -0
  5. package/dist/ThemeProvider-fy0_QzgO.d.ts +99 -0
  6. package/dist/bundle-TIZcw8LB.d.ts +281 -0
  7. package/dist/cards-Sl3b40Mv.d.ts +13 -0
  8. package/dist/chunk-7YAHLYBR.js +481 -0
  9. package/dist/chunk-7YAHLYBR.js.map +1 -0
  10. package/dist/chunk-FDNZTDD6.js +8085 -0
  11. package/dist/chunk-FDNZTDD6.js.map +1 -0
  12. package/dist/chunk-GKKBPPSW.js +598 -0
  13. package/dist/chunk-GKKBPPSW.js.map +1 -0
  14. package/dist/chunk-I46YJSOD.js +1 -0
  15. package/dist/chunk-I46YJSOD.js.map +1 -0
  16. package/dist/chunk-KAELH4KC.js +104 -0
  17. package/dist/chunk-KAELH4KC.js.map +1 -0
  18. package/dist/chunk-PZ5AY32C.js +10 -0
  19. package/dist/chunk-PZ5AY32C.js.map +1 -0
  20. package/dist/chunk-T3ZKNUZ7.js +1 -0
  21. package/dist/chunk-T3ZKNUZ7.js.map +1 -0
  22. package/dist/chunk-T52J5RMF.js +1 -0
  23. package/dist/chunk-T52J5RMF.js.map +1 -0
  24. package/dist/chunk-TDSWKVZ4.js +5401 -0
  25. package/dist/chunk-TDSWKVZ4.js.map +1 -0
  26. package/dist/chunk-U5C6BONG.js +34 -0
  27. package/dist/chunk-U5C6BONG.js.map +1 -0
  28. package/dist/chunk-VDXOF4FW.js +69 -0
  29. package/dist/chunk-VDXOF4FW.js.map +1 -0
  30. package/dist/chunk-VFTAA4WO.js +115 -0
  31. package/dist/chunk-VFTAA4WO.js.map +1 -0
  32. package/dist/chunk-WN74KVNY.js +17 -0
  33. package/dist/chunk-WN74KVNY.js.map +1 -0
  34. package/dist/chunk-WYPQ3GG5.js +10990 -0
  35. package/dist/chunk-WYPQ3GG5.js.map +1 -0
  36. package/dist/components-D5ZRE2Hl.d.ts +1451 -0
  37. package/dist/generated/runtime/primitives.d.ts +12 -0
  38. package/dist/generated/runtime/primitives.js +180 -0
  39. package/dist/generated/runtime/primitives.js.map +1 -0
  40. package/dist/generated/runtime-api.d.ts +3 -0
  41. package/dist/generated/runtime-api.js +2 -0
  42. package/dist/generated/runtime-api.js.map +1 -0
  43. package/dist/generated/runtime.d.ts +14 -0
  44. package/dist/generated/runtime.js +18 -0
  45. package/dist/generated/runtime.js.map +1 -0
  46. package/dist/generated/workspace-contract.d.ts +14 -0
  47. package/dist/generated/workspace-contract.js +14 -0
  48. package/dist/generated/workspace-contract.js.map +1 -0
  49. package/dist/hex-board-view-D_07hO6O.d.ts +933 -0
  50. package/dist/hex-color-MhOyuY-o.d.ts +8 -0
  51. package/dist/index-BwqPQtBu.d.ts +1433 -0
  52. package/dist/index.d.ts +1 -0
  53. package/dist/index.js +12 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/infrastructure/reducer-bundle-abi.d.ts +1083 -0
  56. package/dist/infrastructure/reducer-bundle-abi.js +14 -0
  57. package/dist/infrastructure/reducer-bundle-abi.js.map +1 -0
  58. package/dist/infrastructure/workspace-codegen.d.ts +53 -0
  59. package/dist/infrastructure/workspace-codegen.js +44 -0
  60. package/dist/infrastructure/workspace-codegen.js.map +1 -0
  61. package/dist/manifest-contract-BNHVGFtU.d.ts +9 -0
  62. package/dist/package-set.d.ts +13 -0
  63. package/dist/package-set.js +12 -0
  64. package/dist/package-set.js.map +1 -0
  65. package/dist/primitive-props-DpKs-GCr.d.ts +11 -0
  66. package/dist/reducer.d.ts +3786 -0
  67. package/dist/reducer.js +8131 -0
  68. package/dist/reducer.js.map +1 -0
  69. package/dist/runtime/primitives.d.ts +226 -0
  70. package/dist/runtime/primitives.js +180 -0
  71. package/dist/runtime/primitives.js.map +1 -0
  72. package/dist/runtime/types/runtime-api.d.ts +1 -0
  73. package/dist/runtime/types/runtime-api.js +2 -0
  74. package/dist/runtime/types/runtime-api.js.map +1 -0
  75. package/dist/runtime/workspace-contract.d.ts +172 -0
  76. package/dist/runtime/workspace-contract.js +14 -0
  77. package/dist/runtime/workspace-contract.js.map +1 -0
  78. package/dist/runtime-api-3dshj6kK.d.ts +101 -0
  79. package/dist/runtime-api-DWxvTr-O.d.ts +379 -0
  80. package/dist/runtime.d.ts +58 -0
  81. package/dist/runtime.js +13 -0
  82. package/dist/runtime.js.map +1 -0
  83. package/dist/slots-1GPGihk8.d.ts +8 -0
  84. package/dist/testing.d.ts +149 -0
  85. package/dist/testing.js +513 -0
  86. package/dist/testing.js.map +1 -0
  87. package/dist/types.d.ts +496 -0
  88. package/dist/types.js +28 -0
  89. package/dist/types.js.map +1 -0
  90. package/dist/ui/components.d.ts +16 -0
  91. package/dist/ui/components.js +192 -0
  92. package/dist/ui/components.js.map +1 -0
  93. package/dist/ui/defaults.d.ts +19 -0
  94. package/dist/ui/defaults.js +104 -0
  95. package/dist/ui/defaults.js.map +1 -0
  96. package/dist/ui/plugin-styles.css +250 -0
  97. package/dist/ui/types/player-state.d.ts +365 -0
  98. package/dist/ui/types/player-state.js +1 -0
  99. package/dist/ui/types/player-state.js.map +1 -0
  100. package/dist/ui-contract-iQfTtUSL.d.ts +1161 -0
  101. package/dist/ui.d.ts +320 -0
  102. package/dist/ui.js +253 -0
  103. package/dist/ui.js.map +1 -0
  104. package/package.json +199 -0
  105. package/src/generated/reducer-contract/builders.ts +90 -0
  106. package/src/generated/reducer-contract/version.ts +9 -0
  107. package/src/generated/reducer-contract/wire.ts +100 -0
  108. package/src/generated/reducer-contract/zod.ts +101 -0
  109. package/src/generated/runtime/primitives.ts +2 -0
  110. package/src/generated/runtime-api.ts +5 -0
  111. package/src/generated/runtime.ts +35 -0
  112. package/src/generated/workspace-contract.ts +2 -0
  113. package/src/index.ts +7 -0
  114. package/src/infrastructure/reducer-bundle-abi.ts +8 -0
  115. package/src/infrastructure/reducer-contract/bundle.ts +37 -0
  116. package/src/infrastructure/workspace-codegen/hex-geometry.ts +69 -0
  117. package/src/infrastructure/workspace-codegen/index.ts +64 -0
  118. package/src/infrastructure/workspace-codegen/manifest-contract.ts +6632 -0
  119. package/src/infrastructure/workspace-codegen/manifest-validation.ts +795 -0
  120. package/src/infrastructure/workspace-codegen/ownership.ts +131 -0
  121. package/src/infrastructure/workspace-codegen/preset-card-sets.ts +169 -0
  122. package/src/infrastructure/workspace-codegen/seeds.ts +1705 -0
  123. package/src/infrastructure/workspace-codegen.ts +1 -0
  124. package/src/package-set.ts +19 -0
  125. package/src/reducer/authoring/contract.ts +157 -0
  126. package/src/reducer/authoring/effect.ts +224 -0
  127. package/src/reducer/authoring/game.ts +23 -0
  128. package/src/reducer/authoring/interaction.ts +98 -0
  129. package/src/reducer/authoring/phase.ts +300 -0
  130. package/src/reducer/authoring/types.ts +70 -0
  131. package/src/reducer/authoring/validation.ts +382 -0
  132. package/src/reducer/authoring/view-stage.ts +68 -0
  133. package/src/reducer/authoring.ts +29 -0
  134. package/src/reducer/bundle/ingress-bundle.ts +491 -0
  135. package/src/reducer/bundle/trusted/engine-instruction-resolver.ts +254 -0
  136. package/src/reducer/bundle/trusted/flow-instruction-resolver.ts +73 -0
  137. package/src/reducer/bundle/trusted/instruction-runner.ts +414 -0
  138. package/src/reducer/bundle/trusted/interaction-authorization.ts +137 -0
  139. package/src/reducer/bundle/trusted/interaction-collectors.ts +859 -0
  140. package/src/reducer/bundle/trusted/interaction-decision.ts +747 -0
  141. package/src/reducer/bundle/trusted/interaction-resolver.ts +95 -0
  142. package/src/reducer/bundle/trusted/interaction-types.ts +171 -0
  143. package/src/reducer/bundle/trusted/lifecycle-runner.ts +427 -0
  144. package/src/reducer/bundle/trusted/projection-builder.ts +356 -0
  145. package/src/reducer/bundle/trusted/projection-context.ts +39 -0
  146. package/src/reducer/bundle/trusted/rng-sampler.ts +150 -0
  147. package/src/reducer/bundle/trusted/runtime-registry.ts +120 -0
  148. package/src/reducer/bundle/trusted/runtime-scope.ts +336 -0
  149. package/src/reducer/bundle/trusted/simultaneous-player.ts +97 -0
  150. package/src/reducer/bundle/trusted/stage-resolver.ts +87 -0
  151. package/src/reducer/bundle/trusted/static-projection.ts +116 -0
  152. package/src/reducer/bundle/trusted/trusted-runtime-args.ts +97 -0
  153. package/src/reducer/bundle/trusted/trusted-runtime-result.ts +39 -0
  154. package/src/reducer/bundle/trusted/trusted-setup-profiles.ts +43 -0
  155. package/src/reducer/bundle/trusted/trusted-state-codec.ts +48 -0
  156. package/src/reducer/bundle/trusted-bundle.ts +97 -0
  157. package/src/reducer/bundle/types.ts +171 -0
  158. package/src/reducer/bundle.ts +2 -0
  159. package/src/reducer/client-param-schemas.ts +57 -0
  160. package/src/reducer/compose.ts +34 -0
  161. package/src/reducer/core/runtime-input.ts +30 -0
  162. package/src/reducer/core/runtime-instruction.ts +59 -0
  163. package/src/reducer/core/types.ts +62 -0
  164. package/src/reducer/definition-index.ts +277 -0
  165. package/src/reducer/derived.ts +106 -0
  166. package/src/reducer/effects.ts +92 -0
  167. package/src/reducer/engine/runtime-instruction-engine.ts +155 -0
  168. package/src/reducer/ingress/decode-runtime-input.ts +7 -0
  169. package/src/reducer/ingress/decode-session-state.ts +9 -0
  170. package/src/reducer/ingress/encode-session-state.ts +6 -0
  171. package/src/reducer/ingress/input-codec.ts +18 -0
  172. package/src/reducer/ingress/phase-schemas.ts +62 -0
  173. package/src/reducer/ingress/raw-types.ts +107 -0
  174. package/src/reducer/ingress/runtime-codec.ts +14 -0
  175. package/src/reducer/ingress/runtime-payload.ts +13 -0
  176. package/src/reducer/ingress/session-codec.ts +392 -0
  177. package/src/reducer/ingress/types.ts +6 -0
  178. package/src/reducer/inputs/boardInput.ts +217 -0
  179. package/src/reducer/inputs/boardTarget.ts +190 -0
  180. package/src/reducer/inputs/cardInput.ts +86 -0
  181. package/src/reducer/inputs/cardTarget.ts +101 -0
  182. package/src/reducer/inputs/choiceTarget.ts +104 -0
  183. package/src/reducer/inputs/defineInputs.ts +71 -0
  184. package/src/reducer/inputs/formInput.ts +809 -0
  185. package/src/reducer/inputs/many.ts +120 -0
  186. package/src/reducer/inputs/promptInput.ts +87 -0
  187. package/src/reducer/inputs/rngInput.ts +58 -0
  188. package/src/reducer/inputs/targetRule.ts +123 -0
  189. package/src/reducer/inputs.ts +41 -0
  190. package/src/reducer/model/definition.ts +1072 -0
  191. package/src/reducer/model/extract.ts +745 -0
  192. package/src/reducer/model/manifest.ts +570 -0
  193. package/src/reducer/model/queries.ts +641 -0
  194. package/src/reducer/model/runtime.ts +264 -0
  195. package/src/reducer/model/spec.ts +1386 -0
  196. package/src/reducer/model/table.ts +260 -0
  197. package/src/reducer/model.ts +7 -0
  198. package/src/reducer/ops.ts +1034 -0
  199. package/src/reducer/parse-utils.ts +28 -0
  200. package/src/reducer/per-player.ts +422 -0
  201. package/src/reducer/rng.ts +69 -0
  202. package/src/reducer/schema-helpers.ts +185 -0
  203. package/src/reducer/setup-bootstrap-helpers.ts +171 -0
  204. package/src/reducer/setup-bootstrap.ts +481 -0
  205. package/src/reducer/table-ops.ts +2671 -0
  206. package/src/reducer/table-queries.ts +372 -0
  207. package/src/reducer/transaction.ts +120 -0
  208. package/src/reducer.ts +314 -0
  209. package/src/runtime/primitives.ts +1 -0
  210. package/src/runtime/types/runtime-api.ts +1 -0
  211. package/src/runtime/workspace-contract.ts +32 -0
  212. package/src/runtime-internal/components/InteractionForm.tsx +1309 -0
  213. package/src/runtime-internal/components/PluginRuntime.tsx +103 -0
  214. package/src/runtime-internal/components/board/target-layer.ts +70 -0
  215. package/src/runtime-internal/context/ClientParamSchemaContext.tsx +44 -0
  216. package/src/runtime-internal/context/InteractionDraftContext.tsx +279 -0
  217. package/src/runtime-internal/context/PluginSessionContext.tsx +47 -0
  218. package/src/runtime-internal/context/PluginStateContext.tsx +262 -0
  219. package/src/runtime-internal/context/RuntimeContext.tsx +96 -0
  220. package/src/runtime-internal/defaults/components.tsx +409 -0
  221. package/src/runtime-internal/defaults/index.ts +11 -0
  222. package/src/runtime-internal/errors/ValidationError.ts +29 -0
  223. package/src/runtime-internal/hooks/useActivePlayers.ts +33 -0
  224. package/src/runtime-internal/hooks/useBoardInteractions.ts +665 -0
  225. package/src/runtime-internal/hooks/useGameSelector.ts +105 -0
  226. package/src/runtime-internal/hooks/useGameView.ts +9 -0
  227. package/src/runtime-internal/hooks/useInteractionByKey.ts +354 -0
  228. package/src/runtime-internal/hooks/useInteractionHandle.ts +438 -0
  229. package/src/runtime-internal/hooks/useIsMyTurn.ts +20 -0
  230. package/src/runtime-internal/hooks/useLobby.ts +76 -0
  231. package/src/runtime-internal/hooks/useMe.ts +48 -0
  232. package/src/runtime-internal/hooks/usePlayerInfo.ts +28 -0
  233. package/src/runtime-internal/hooks/usePlayerTurnOrder.ts +23 -0
  234. package/src/runtime-internal/hooks/usePluginRuntime.ts +147 -0
  235. package/src/runtime-internal/hooks/useSeatInbox.ts +61 -0
  236. package/src/runtime-internal/hooks/useSimultaneousPhase.ts +10 -0
  237. package/src/runtime-internal/index.ts +42 -0
  238. package/src/runtime-internal/internal.ts +43 -0
  239. package/src/runtime-internal/plugin-styles.css +250 -0
  240. package/src/runtime-internal/primitives/board.tsx +459 -0
  241. package/src/runtime-internal/primitives/dialog-lifecycle.ts +58 -0
  242. package/src/runtime-internal/primitives/dice.tsx +79 -0
  243. package/src/runtime-internal/primitives/game-ui-provider.tsx +35 -0
  244. package/src/runtime-internal/primitives/game.tsx +387 -0
  245. package/src/runtime-internal/primitives/hand-intent-adapter.ts +147 -0
  246. package/src/runtime-internal/primitives/hand-surface.tsx +594 -0
  247. package/src/runtime-internal/primitives/index.ts +196 -0
  248. package/src/runtime-internal/primitives/interaction-form-binding.tsx +56 -0
  249. package/src/runtime-internal/primitives/interaction-submit.ts +90 -0
  250. package/src/runtime-internal/primitives/interaction.tsx +987 -0
  251. package/src/runtime-internal/primitives/phase.tsx +43 -0
  252. package/src/runtime-internal/primitives/player-roster.tsx +302 -0
  253. package/src/runtime-internal/primitives/primitive-props.tsx +101 -0
  254. package/src/runtime-internal/primitives/prompt.tsx +255 -0
  255. package/src/runtime-internal/primitives/ui.tsx +60 -0
  256. package/src/runtime-internal/primitives/zone.tsx +791 -0
  257. package/src/runtime-internal/reducer.ts +30 -0
  258. package/src/runtime-internal/runtime/createPluginRuntimeAPI.ts +605 -0
  259. package/src/runtime-internal/types/plugin-state.ts +508 -0
  260. package/src/runtime-internal/types/reducer-state.ts +24 -0
  261. package/src/runtime-internal/types/runtime-api.ts +114 -0
  262. package/src/runtime-internal/ui-contract.ts +519 -0
  263. package/src/runtime-internal/utils/card-intent-adapter.ts +546 -0
  264. package/src/runtime-internal/utils/interaction-inputs.ts +492 -0
  265. package/src/runtime-internal/utils/interaction-labels.ts +23 -0
  266. package/src/runtime-internal/utils/interaction-router.ts +273 -0
  267. package/src/runtime-internal/utils/interaction-status.ts +74 -0
  268. package/src/runtime-internal/workspace-contract.ts +1170 -0
  269. package/src/runtime.ts +34 -0
  270. package/src/testing/create-expect-api.ts +352 -0
  271. package/src/testing/create-test-runtime.ts +381 -0
  272. package/src/testing/definitions.ts +127 -0
  273. package/src/testing/index.ts +3 -0
  274. package/src/testing.ts +1 -0
  275. package/src/type-stubs/manifest-contract.d.ts +42 -0
  276. package/src/type-stubs/manifest-contract.js +72 -0
  277. package/src/type-stubs/ui-contract.d.ts +5 -0
  278. package/src/type-stubs/ui-contract.js +1 -0
  279. package/src/types/authoring-card-properties.type-test.ts +266 -0
  280. package/src/types/authoring.ts +1282 -0
  281. package/src/types/cards.ts +19 -0
  282. package/src/types/contracts.ts +1550 -0
  283. package/src/types/generated-helpers.ts +35 -0
  284. package/src/types/index.ts +147 -0
  285. package/src/types/slots.ts +11 -0
  286. package/src/types.ts +1 -0
  287. package/src/ui/components/ActionButton.tsx +97 -0
  288. package/src/ui/components/ActionPanel.tsx +315 -0
  289. package/src/ui/components/Card.tsx +378 -0
  290. package/src/ui/components/CardDragSurface.tsx +1076 -0
  291. package/src/ui/components/ChromeSuppressionContext.tsx +70 -0
  292. package/src/ui/components/CostDisplay.tsx +145 -0
  293. package/src/ui/components/DiceRoller.tsx +581 -0
  294. package/src/ui/components/Drawer.tsx +180 -0
  295. package/src/ui/components/ErrorBoundary.tsx +275 -0
  296. package/src/ui/components/GameEndDisplay.tsx +398 -0
  297. package/src/ui/components/GameSkeleton.tsx +260 -0
  298. package/src/ui/components/Hand.tsx +468 -0
  299. package/src/ui/components/HandDock.tsx +299 -0
  300. package/src/ui/components/HandView.tsx +441 -0
  301. package/src/ui/components/MobileHandTray.tsx +381 -0
  302. package/src/ui/components/MoreActions.tsx +143 -0
  303. package/src/ui/components/PhaseIndicator.tsx +341 -0
  304. package/src/ui/components/PlayArea.tsx +146 -0
  305. package/src/ui/components/PrimaryActionButton.tsx +336 -0
  306. package/src/ui/components/PrimaryButton.tsx +45 -0
  307. package/src/ui/components/ResourceCounter.tsx +270 -0
  308. package/src/ui/components/StagingZone.tsx +134 -0
  309. package/src/ui/components/ThemedButton.tsx +113 -0
  310. package/src/ui/components/Toast.tsx +264 -0
  311. package/src/ui/components/board/HexGrid.tsx +1294 -0
  312. package/src/ui/components/board/NetworkGraph.tsx +476 -0
  313. package/src/ui/components/board/SlotSystem.tsx +388 -0
  314. package/src/ui/components/board/SquareGrid.tsx +1165 -0
  315. package/src/ui/components/board/TrackBoard.tsx +496 -0
  316. package/src/ui/components/board/ZoneMap.tsx +448 -0
  317. package/src/ui/components/board/hex-board-view.ts +123 -0
  318. package/src/ui/components/board/index.ts +142 -0
  319. package/src/ui/components/board/interaction-accessibility.ts +21 -0
  320. package/src/ui/components/board/target-layer.ts +66 -0
  321. package/src/ui/components/card-render-content.type-test.ts +27 -0
  322. package/src/ui/components/hand-layout-math.ts +163 -0
  323. package/src/ui/components/hand-pointer-engine.ts +413 -0
  324. package/src/ui/components/index.ts +245 -0
  325. package/src/ui/components.ts +1 -0
  326. package/src/ui/defaults/components.tsx +106 -0
  327. package/src/ui/defaults/index.ts +8 -0
  328. package/src/ui/defaults.ts +1 -0
  329. package/src/ui/errors/ValidationError.ts +29 -0
  330. package/src/ui/helpers/cards.ts +19 -0
  331. package/src/ui/helpers/track-board.ts +211 -0
  332. package/src/ui/hooks/useBoardTopology.ts +316 -0
  333. package/src/ui/hooks/useCards.ts +10 -0
  334. package/src/ui/hooks/useHandCardPointer.ts +381 -0
  335. package/src/ui/hooks/useHandLayout.ts +378 -0
  336. package/src/ui/hooks/useHandPresentation.ts +121 -0
  337. package/src/ui/hooks/useHexBoard.ts +74 -0
  338. package/src/ui/hooks/useHexGrid.ts +185 -0
  339. package/src/ui/hooks/useIsMobile.ts +35 -0
  340. package/src/ui/hooks/usePanZoom.ts +278 -0
  341. package/src/ui/hooks/useSquareBoard.ts +124 -0
  342. package/src/ui/hooks/useSquareGrid.ts +328 -0
  343. package/src/ui/index.ts +98 -0
  344. package/src/ui/internal/ui/alert.tsx +51 -0
  345. package/src/ui/internal/ui/button.tsx +58 -0
  346. package/src/ui/internal/ui/dialog.tsx +134 -0
  347. package/src/ui/internal/ui/input.tsx +21 -0
  348. package/src/ui/internal/ui/label.tsx +21 -0
  349. package/src/ui/internal/ui/select.tsx +129 -0
  350. package/src/ui/internal/ui/tooltip.tsx +54 -0
  351. package/src/ui/internal/ui/utils.ts +5 -0
  352. package/src/ui/plugin-styles.css +250 -0
  353. package/src/ui/primitives/dialog-lifecycle.ts +58 -0
  354. package/src/ui/primitives/dice.tsx +79 -0
  355. package/src/ui/primitives/primitive-props.tsx +101 -0
  356. package/src/ui/theme/ThemeProvider.tsx +252 -0
  357. package/src/ui/theme/board.ts +61 -0
  358. package/src/ui/theme/css-vars.ts +105 -0
  359. package/src/ui/theme/derive.ts +240 -0
  360. package/src/ui/theme/index.ts +61 -0
  361. package/src/ui/theme/presets/arcade.ts +261 -0
  362. package/src/ui/theme/presets/studio.ts +261 -0
  363. package/src/ui/theme/presets/tabletop.ts +266 -0
  364. package/src/ui/theme/tokens.ts +392 -0
  365. package/src/ui/types/hex-color.ts +20 -0
  366. package/src/ui/types/player-state.ts +463 -0
  367. package/src/ui/types/tiled-board.ts +785 -0
  368. package/src/ui/types/visual-state.ts +137 -0
  369. package/src/ui.ts +1 -0
@@ -0,0 +1,745 @@
1
+ import type { StringKeyOf } from "./table";
2
+ import type {
3
+ GeneratedManifestContractLike,
4
+ ManifestContract,
5
+ StateDefinition,
6
+ } from "./manifest";
7
+ import type { z } from "zod";
8
+ import type { SchemaLike } from "./table";
9
+
10
+ export type TableOfState<State> = State extends { table: infer Table }
11
+ ? Table
12
+ : never;
13
+ export type TableOfManifest<Manifest> =
14
+ Manifest extends GeneratedManifestContractLike<infer Table> ? Table : never;
15
+ export type PhaseNameOfState<State> = State extends {
16
+ flow: { currentPhase: infer PhaseName };
17
+ }
18
+ ? Extract<PhaseName, string>
19
+ : never;
20
+ export type PhaseNameOfManifest<Manifest> = Manifest extends {
21
+ literals: { phaseNames: readonly (infer PhaseName)[] };
22
+ }
23
+ ? Extract<PhaseName, string>
24
+ : never;
25
+ export type PlayerIdOfTable<Table> = Table extends {
26
+ playerOrder: readonly (infer PlayerId)[];
27
+ }
28
+ ? Extract<PlayerId, string>
29
+ : never;
30
+ export type PlayerIdOfManifest<Manifest> = Manifest extends {
31
+ literals: { playerIds: readonly (infer PlayerId)[] };
32
+ }
33
+ ? Extract<PlayerId, string>
34
+ : string;
35
+ export type PlayerIdOfState<State> = PlayerIdOfTable<TableOfState<State>>;
36
+ /**
37
+ * Manifest-declared resource id union for a runtime table.
38
+ *
39
+ * Derived from the shape of `table.resources`, which the generated
40
+ * manifest contract seeds as `PerPlayer<Record<ResourceId, number>>`.
41
+ * The helper peeks inside the `PerPlayer` wrapper to surface the
42
+ * resource-id keys without forcing callers to remember the wrapper.
43
+ */
44
+ export type ResourceIdOfTable<Table> = Table extends {
45
+ resources: infer Resources;
46
+ }
47
+ ? ValueOfPerPlayer<Resources> extends infer PerPlayerValue
48
+ ? PerPlayerValue extends Record<string, unknown>
49
+ ? StringKeyOf<PerPlayerValue>
50
+ : never
51
+ : never
52
+ : never;
53
+ export type ResourceIdOfState<State> = ResourceIdOfTable<TableOfState<State>>;
54
+ /**
55
+ * Per-player balance shape for a runtime table. Strips the `PerPlayer`
56
+ * wrapper around `table.resources` so callers receive the manifest-typed
57
+ * record directly (e.g. `Record<ResourceId, number>`).
58
+ */
59
+ export type ResourceBalancesOfTable<Table> = Table extends {
60
+ resources: infer Resources;
61
+ }
62
+ ? ValueOfPerPlayer<Resources> extends infer PerPlayerValue
63
+ ? PerPlayerValue extends Record<string, unknown>
64
+ ? PerPlayerValue
65
+ : never
66
+ : never
67
+ : never;
68
+ export type ResourceBalancesOfState<State> = ResourceBalancesOfTable<
69
+ TableOfState<State>
70
+ >;
71
+ export type ResourceIdOfManifest<Manifest> = Manifest extends {
72
+ literals: { resourceIds: readonly (infer ResourceId)[] };
73
+ }
74
+ ? Extract<ResourceId, string>
75
+ : string;
76
+ /**
77
+ * Per-player resource counts: a partial `Record<ResourceId, number>`.
78
+ *
79
+ * Used as the input shape for {@link ReducerOps.addResources},
80
+ * {@link ReducerOps.spendResources}, and {@link ReducerOps.transferResources}.
81
+ */
82
+ export type ResourceAmountsOfTable<Table> = Partial<
83
+ Record<ResourceIdOfTable<Table>, number>
84
+ >;
85
+ export type PhaseStateOfState<State> = State extends { phase: infer PhaseState }
86
+ ? PhaseState
87
+ : never;
88
+ export type PhaseStepOfState<State> =
89
+ PhaseStateOfState<State> extends {
90
+ step?: infer Step;
91
+ }
92
+ ? Extract<NonNullable<Step>, string>
93
+ : never;
94
+ export type PhaseMapOfState<State> = PhaseStateOfState<State>;
95
+ export type PublicStateOfState<State> = State extends {
96
+ publicState: infer PublicState;
97
+ }
98
+ ? PublicState
99
+ : never;
100
+ export type HiddenStateOfState<State> = State extends {
101
+ hiddenState: infer HiddenState;
102
+ }
103
+ ? HiddenState
104
+ : never;
105
+ export type PrivateStateOfState<State> = State extends {
106
+ privateState: Record<string, infer PrivateState>;
107
+ }
108
+ ? PrivateState
109
+ : never;
110
+ export type DeckIdOfTable<Table> = Table extends { decks: infer Decks }
111
+ ? StringKeyOf<Decks>
112
+ : never;
113
+ export type HandIdOfTable<Table> = Table extends { hands: infer Hands }
114
+ ? StringKeyOf<Hands>
115
+ : never;
116
+ export type CardIdOfTable<Table> = Table extends { cards: infer Cards }
117
+ ? StringKeyOf<Cards>
118
+ : never;
119
+ export type CardTypeOfTable<Table> = Table extends {
120
+ cards: Record<string, { cardType: infer CardType }>;
121
+ }
122
+ ? Extract<CardType, string>
123
+ : string;
124
+ export type DeckIdOfState<State> = DeckIdOfTable<TableOfState<State>>;
125
+ export type HandIdOfState<State> = HandIdOfTable<TableOfState<State>>;
126
+ export type CardIdOfState<State> = CardIdOfTable<TableOfState<State>>;
127
+ export type CardTypeOfState<State> = CardTypeOfTable<TableOfState<State>>;
128
+ export type CardIdOfManifest<Manifest> = Manifest extends {
129
+ literals: { cardIds: readonly (infer CardId)[] };
130
+ }
131
+ ? Extract<CardId, string>
132
+ : string;
133
+ export type SharedZoneIdOfTable<Table> = DeckIdOfTable<Table>;
134
+ export type PlayerZoneIdOfTable<Table> = HandIdOfTable<Table>;
135
+ export type BoardMapOfTable<Table> = Table extends {
136
+ boards: { byId: infer Boards };
137
+ }
138
+ ? Boards
139
+ : never;
140
+ export type BoardIdOfTable<Table> = StringKeyOf<BoardMapOfTable<Table>>;
141
+ export type BoardStateOfTable<
142
+ Table,
143
+ BoardId extends BoardIdOfTable<Table>,
144
+ > = BoardMapOfTable<Table>[BoardId];
145
+ export type BoardTypeIdOfTable<Table> =
146
+ BoardStateOfTable<Table, BoardIdOfTable<Table>> extends {
147
+ typeId?: infer BoardTypeId | null;
148
+ }
149
+ ? Extract<BoardTypeId, string>
150
+ : never;
151
+ export type TiledBoardIdOfTable<Table> = {
152
+ [BoardId in BoardIdOfTable<Table>]: BoardStateOfTable<
153
+ Table,
154
+ BoardId
155
+ > extends { layout: "hex" | "square" }
156
+ ? BoardId
157
+ : never;
158
+ }[BoardIdOfTable<Table>];
159
+ export type TiledBoardStateOfTable<
160
+ Table,
161
+ BoardId extends TiledBoardIdOfTable<Table>,
162
+ > =
163
+ BoardStateOfTable<Table, BoardId> extends infer BoardState
164
+ ? BoardState extends {
165
+ layout: "hex" | "square";
166
+ spaces: Record<string, unknown>;
167
+ edges: readonly { id: string }[];
168
+ vertices: readonly { id: string }[];
169
+ }
170
+ ? BoardState
171
+ : never
172
+ : never;
173
+ export type HexBoardIdOfTable<Table> = {
174
+ [BoardId in BoardIdOfTable<Table>]: BoardStateOfTable<
175
+ Table,
176
+ BoardId
177
+ > extends { layout: "hex" }
178
+ ? BoardId
179
+ : never;
180
+ }[BoardIdOfTable<Table>];
181
+ export type HexBoardStateOfTable<
182
+ Table,
183
+ BoardId extends HexBoardIdOfTable<Table>,
184
+ > =
185
+ BoardStateOfTable<Table, BoardId> extends infer BoardState
186
+ ? BoardState extends {
187
+ layout: "hex";
188
+ spaces: Record<string, unknown>;
189
+ edges: readonly { id: string }[];
190
+ vertices: readonly { id: string }[];
191
+ }
192
+ ? BoardState
193
+ : never
194
+ : never;
195
+ export type SquareBoardIdOfTable<Table> = {
196
+ [BoardId in BoardIdOfTable<Table>]: BoardStateOfTable<
197
+ Table,
198
+ BoardId
199
+ > extends { layout: "square" }
200
+ ? BoardId
201
+ : never;
202
+ }[BoardIdOfTable<Table>];
203
+ export type SquareBoardStateOfTable<
204
+ Table,
205
+ BoardId extends SquareBoardIdOfTable<Table>,
206
+ > =
207
+ BoardStateOfTable<Table, BoardId> extends infer BoardState
208
+ ? BoardState extends {
209
+ layout: "square";
210
+ spaces: Record<string, unknown>;
211
+ edges: readonly { id: string }[];
212
+ vertices: readonly { id: string }[];
213
+ }
214
+ ? BoardState
215
+ : never
216
+ : never;
217
+ export type SpaceIdOfTable<Table, BoardId extends BoardIdOfTable<Table>> =
218
+ BoardStateOfTable<Table, BoardId> extends { spaces: infer Spaces }
219
+ ? StringKeyOf<Spaces>
220
+ : never;
221
+ export type SpaceTypeIdOfTable<Table, BoardId extends BoardIdOfTable<Table>> =
222
+ BoardStateOfTable<Table, BoardId> extends {
223
+ spaces: infer Spaces extends Record<string, unknown>;
224
+ }
225
+ ? Spaces[StringKeyOf<Spaces>] extends { typeId?: infer SpaceTypeId | null }
226
+ ? Extract<SpaceTypeId, string>
227
+ : never
228
+ : never;
229
+ export type BoardContainerIdOfTable<
230
+ Table,
231
+ BoardId extends BoardIdOfTable<Table>,
232
+ > =
233
+ BoardStateOfTable<Table, BoardId> extends { containers: infer Containers }
234
+ ? StringKeyOf<Containers>
235
+ : never;
236
+ export type RelationTypeIdOfTable<
237
+ Table,
238
+ BoardId extends BoardIdOfTable<Table>,
239
+ > =
240
+ BoardStateOfTable<Table, BoardId> extends {
241
+ relations: readonly (infer Relation)[];
242
+ }
243
+ ? Relation extends { typeId: infer RelationTypeId }
244
+ ? Extract<RelationTypeId, string>
245
+ : never
246
+ : never;
247
+ export type TiledSpaceIdOfTable<
248
+ Table,
249
+ BoardId extends TiledBoardIdOfTable<Table>,
250
+ > =
251
+ TiledBoardStateOfTable<Table, BoardId> extends { spaces: infer Spaces }
252
+ ? StringKeyOf<Spaces>
253
+ : never;
254
+ export type HexSpaceIdOfTable<Table, BoardId extends HexBoardIdOfTable<Table>> =
255
+ HexBoardStateOfTable<Table, BoardId> extends { spaces: infer Spaces }
256
+ ? StringKeyOf<Spaces>
257
+ : never;
258
+ export type SquareSpaceIdOfTable<
259
+ Table,
260
+ BoardId extends SquareBoardIdOfTable<Table>,
261
+ > =
262
+ SquareBoardStateOfTable<Table, BoardId> extends { spaces: infer Spaces }
263
+ ? StringKeyOf<Spaces>
264
+ : never;
265
+ export type HexSpaceTypeIdOfTable<
266
+ Table,
267
+ BoardId extends HexBoardIdOfTable<Table>,
268
+ > =
269
+ HexBoardStateOfTable<Table, BoardId> extends {
270
+ spaces: infer Spaces extends Record<string, unknown>;
271
+ }
272
+ ? Spaces[StringKeyOf<Spaces>] extends { typeId?: infer SpaceTypeId | null }
273
+ ? Extract<SpaceTypeId, string>
274
+ : never
275
+ : never;
276
+ export type SquareSpaceTypeIdOfTable<
277
+ Table,
278
+ BoardId extends SquareBoardIdOfTable<Table>,
279
+ > =
280
+ SquareBoardStateOfTable<Table, BoardId> extends {
281
+ spaces: infer Spaces extends Record<string, unknown>;
282
+ }
283
+ ? Spaces[StringKeyOf<Spaces>] extends { typeId?: infer SpaceTypeId | null }
284
+ ? Extract<SpaceTypeId, string>
285
+ : never
286
+ : never;
287
+ export type TiledEdgeIdOfTable<
288
+ Table,
289
+ BoardId extends TiledBoardIdOfTable<Table>,
290
+ > =
291
+ TiledBoardStateOfTable<Table, BoardId> extends {
292
+ edges: readonly (infer Edge)[];
293
+ }
294
+ ? Edge extends { id: infer EdgeId }
295
+ ? Extract<EdgeId, string>
296
+ : never
297
+ : never;
298
+ export type HexEdgeIdOfTable<Table, BoardId extends HexBoardIdOfTable<Table>> =
299
+ HexBoardStateOfTable<Table, BoardId> extends {
300
+ edges: readonly (infer Edge)[];
301
+ }
302
+ ? Edge extends { id: infer EdgeId }
303
+ ? Extract<EdgeId, string>
304
+ : never
305
+ : never;
306
+ export type SquareEdgeIdOfTable<
307
+ Table,
308
+ BoardId extends SquareBoardIdOfTable<Table>,
309
+ > =
310
+ SquareBoardStateOfTable<Table, BoardId> extends {
311
+ edges: readonly (infer Edge)[];
312
+ }
313
+ ? Edge extends { id: infer EdgeId }
314
+ ? Extract<EdgeId, string>
315
+ : never
316
+ : never;
317
+ /**
318
+ * Edge record on a tiled board narrowed to a specific `EdgeId` literal.
319
+ *
320
+ * The generated board state stores edges as a single array element type
321
+ * `{ id: <union-of-edge-ids>, spaceIds, typeId, fields, ... }`. Looking up an
322
+ * edge by id should return a record whose `id` is narrowed to the literal
323
+ * that was requested, not the entire edge-id union.
324
+ */
325
+ export type TiledEdgeStateOfTable<
326
+ Table,
327
+ BoardId extends TiledBoardIdOfTable<Table>,
328
+ EdgeId extends TiledEdgeIdOfTable<Table, BoardId>,
329
+ > =
330
+ TiledBoardStateOfTable<Table, BoardId> extends {
331
+ edges: readonly (infer Edge)[];
332
+ }
333
+ ? Edge extends { id: string }
334
+ ? Omit<Edge, "id"> & { id: EdgeId }
335
+ : never
336
+ : never;
337
+
338
+ export type HexEdgeStateOfTable<
339
+ Table,
340
+ BoardId extends HexBoardIdOfTable<Table>,
341
+ EdgeId extends HexEdgeIdOfTable<Table, BoardId>,
342
+ > =
343
+ HexBoardStateOfTable<Table, BoardId> extends {
344
+ edges: readonly (infer Edge)[];
345
+ }
346
+ ? Edge extends { id: string }
347
+ ? Omit<Edge, "id"> & { id: EdgeId }
348
+ : never
349
+ : never;
350
+
351
+ export type SquareEdgeStateOfTable<
352
+ Table,
353
+ BoardId extends SquareBoardIdOfTable<Table>,
354
+ EdgeId extends SquareEdgeIdOfTable<Table, BoardId>,
355
+ > =
356
+ SquareBoardStateOfTable<Table, BoardId> extends {
357
+ edges: readonly (infer Edge)[];
358
+ }
359
+ ? Edge extends { id: string }
360
+ ? Omit<Edge, "id"> & { id: EdgeId }
361
+ : never
362
+ : never;
363
+
364
+ export type TiledEdgeTypeIdOfTable<
365
+ Table,
366
+ BoardId extends TiledBoardIdOfTable<Table>,
367
+ > =
368
+ TiledBoardStateOfTable<Table, BoardId> extends {
369
+ edges: readonly (infer Edge)[];
370
+ }
371
+ ? Edge extends { typeId?: infer EdgeTypeId | null }
372
+ ? Extract<EdgeTypeId, string>
373
+ : never
374
+ : never;
375
+ export type HexEdgeTypeIdOfTable<
376
+ Table,
377
+ BoardId extends HexBoardIdOfTable<Table>,
378
+ > =
379
+ HexBoardStateOfTable<Table, BoardId> extends {
380
+ edges: readonly (infer Edge)[];
381
+ }
382
+ ? Edge extends { typeId?: infer EdgeTypeId | null }
383
+ ? Extract<EdgeTypeId, string>
384
+ : never
385
+ : never;
386
+ export type SquareEdgeTypeIdOfTable<
387
+ Table,
388
+ BoardId extends SquareBoardIdOfTable<Table>,
389
+ > =
390
+ SquareBoardStateOfTable<Table, BoardId> extends {
391
+ edges: readonly (infer Edge)[];
392
+ }
393
+ ? Edge extends { typeId?: infer EdgeTypeId | null }
394
+ ? Extract<EdgeTypeId, string>
395
+ : never
396
+ : never;
397
+ export type TiledVertexIdOfTable<
398
+ Table,
399
+ BoardId extends TiledBoardIdOfTable<Table>,
400
+ > =
401
+ TiledBoardStateOfTable<Table, BoardId> extends {
402
+ vertices: readonly (infer Vertex)[];
403
+ }
404
+ ? Vertex extends { id: infer VertexId }
405
+ ? Extract<VertexId, string>
406
+ : never
407
+ : never;
408
+ export type HexVertexIdOfTable<
409
+ Table,
410
+ BoardId extends HexBoardIdOfTable<Table>,
411
+ > =
412
+ HexBoardStateOfTable<Table, BoardId> extends {
413
+ vertices: readonly (infer Vertex)[];
414
+ }
415
+ ? Vertex extends { id: infer VertexId }
416
+ ? Extract<VertexId, string>
417
+ : never
418
+ : never;
419
+ export type SquareVertexIdOfTable<
420
+ Table,
421
+ BoardId extends SquareBoardIdOfTable<Table>,
422
+ > =
423
+ SquareBoardStateOfTable<Table, BoardId> extends {
424
+ vertices: readonly (infer Vertex)[];
425
+ }
426
+ ? Vertex extends { id: infer VertexId }
427
+ ? Extract<VertexId, string>
428
+ : never
429
+ : never;
430
+ /**
431
+ * Vertex record on a tiled board narrowed to a specific `VertexId` literal.
432
+ * See {@link TiledEdgeStateOfTable} for rationale.
433
+ */
434
+ export type TiledVertexStateOfTable<
435
+ Table,
436
+ BoardId extends TiledBoardIdOfTable<Table>,
437
+ VertexId extends TiledVertexIdOfTable<Table, BoardId>,
438
+ > =
439
+ TiledBoardStateOfTable<Table, BoardId> extends {
440
+ vertices: readonly (infer Vertex)[];
441
+ }
442
+ ? Vertex extends { id: string }
443
+ ? Omit<Vertex, "id"> & { id: VertexId }
444
+ : never
445
+ : never;
446
+
447
+ export type HexVertexStateOfTable<
448
+ Table,
449
+ BoardId extends HexBoardIdOfTable<Table>,
450
+ VertexId extends HexVertexIdOfTable<Table, BoardId>,
451
+ > =
452
+ HexBoardStateOfTable<Table, BoardId> extends {
453
+ vertices: readonly (infer Vertex)[];
454
+ }
455
+ ? Vertex extends { id: string }
456
+ ? Omit<Vertex, "id"> & { id: VertexId }
457
+ : never
458
+ : never;
459
+
460
+ export type SquareVertexStateOfTable<
461
+ Table,
462
+ BoardId extends SquareBoardIdOfTable<Table>,
463
+ VertexId extends SquareVertexIdOfTable<Table, BoardId>,
464
+ > =
465
+ SquareBoardStateOfTable<Table, BoardId> extends {
466
+ vertices: readonly (infer Vertex)[];
467
+ }
468
+ ? Vertex extends { id: string }
469
+ ? Omit<Vertex, "id"> & { id: VertexId }
470
+ : never
471
+ : never;
472
+
473
+ export type TiledVertexTypeIdOfTable<
474
+ Table,
475
+ BoardId extends TiledBoardIdOfTable<Table>,
476
+ > =
477
+ TiledBoardStateOfTable<Table, BoardId> extends {
478
+ vertices: readonly (infer Vertex)[];
479
+ }
480
+ ? Vertex extends { typeId?: infer VertexTypeId | null }
481
+ ? Extract<VertexTypeId, string>
482
+ : never
483
+ : never;
484
+ export type HexVertexTypeIdOfTable<
485
+ Table,
486
+ BoardId extends HexBoardIdOfTable<Table>,
487
+ > =
488
+ HexBoardStateOfTable<Table, BoardId> extends {
489
+ vertices: readonly (infer Vertex)[];
490
+ }
491
+ ? Vertex extends { typeId?: infer VertexTypeId | null }
492
+ ? Extract<VertexTypeId, string>
493
+ : never
494
+ : never;
495
+ export type SquareVertexTypeIdOfTable<
496
+ Table,
497
+ BoardId extends SquareBoardIdOfTable<Table>,
498
+ > =
499
+ SquareBoardStateOfTable<Table, BoardId> extends {
500
+ vertices: readonly (infer Vertex)[];
501
+ }
502
+ ? Vertex extends { typeId?: infer VertexTypeId | null }
503
+ ? Extract<VertexTypeId, string>
504
+ : never
505
+ : never;
506
+ export type TiledSpaceMap<
507
+ Table,
508
+ BoardId extends TiledBoardIdOfTable<Table>,
509
+ Value,
510
+ > = Partial<Record<TiledSpaceIdOfTable<Table, BoardId>, Value>>;
511
+ export type TiledEdgeMap<
512
+ Table,
513
+ BoardId extends TiledBoardIdOfTable<Table>,
514
+ Value,
515
+ > = Partial<Record<TiledEdgeIdOfTable<Table, BoardId>, Value>>;
516
+ export type TiledVertexMap<
517
+ Table,
518
+ BoardId extends TiledBoardIdOfTable<Table>,
519
+ Value,
520
+ > = Partial<Record<TiledVertexIdOfTable<Table, BoardId>, Value>>;
521
+ export type ComponentIdOfTable<Table> = Table extends {
522
+ componentLocations: infer ComponentLocations;
523
+ }
524
+ ? StringKeyOf<ComponentLocations>
525
+ : never;
526
+ export type SharedZoneIdOfManifest<Manifest> = Manifest extends {
527
+ literals: { sharedZoneIds: readonly (infer ZoneId)[] };
528
+ }
529
+ ? Extract<ZoneId, string>
530
+ : string;
531
+ export type PlayerZoneIdOfManifest<Manifest> = Manifest extends {
532
+ literals: { playerZoneIds: readonly (infer ZoneId)[] };
533
+ }
534
+ ? Extract<ZoneId, string>
535
+ : string;
536
+ export type SharedZoneIdOfState<State> = DeckIdOfState<State>;
537
+ export type PlayerZoneIdOfState<State> = HandIdOfState<State>;
538
+ export type BoardIdOfManifest<Manifest> = Manifest extends {
539
+ literals: { boardIds: readonly (infer BoardId)[] };
540
+ }
541
+ ? Extract<BoardId, string>
542
+ : string;
543
+ export type BoardLayoutOfManifest<Manifest> = Manifest extends {
544
+ literals: { boardLayouts: readonly (infer BoardLayout)[] };
545
+ }
546
+ ? Extract<BoardLayout, string>
547
+ : "generic" | "hex" | "square";
548
+ export type BoardTypeIdOfManifest<Manifest> = Manifest extends {
549
+ literals: { boardTypeIds: readonly (infer BoardTypeId)[] };
550
+ }
551
+ ? Extract<BoardTypeId, string>
552
+ : string;
553
+ export type BoardBaseIdOfManifest<Manifest> = Manifest extends {
554
+ literals: { boardBaseIds: readonly (infer BoardBaseId)[] };
555
+ }
556
+ ? Extract<BoardBaseId, string>
557
+ : string;
558
+ export type RelationTypeIdOfManifest<Manifest> = Manifest extends {
559
+ literals: { relationTypeIds: readonly (infer RelationTypeId)[] };
560
+ }
561
+ ? Extract<RelationTypeId, string>
562
+ : string;
563
+ export type BoardContainerIdOfManifest<Manifest> = Manifest extends {
564
+ literals: { boardContainerIds: readonly (infer ContainerId)[] };
565
+ }
566
+ ? Extract<ContainerId, string>
567
+ : string;
568
+ export type EdgeTypeIdOfManifest<Manifest> = Manifest extends {
569
+ literals: { edgeTypeIds: readonly (infer EdgeTypeId)[] };
570
+ }
571
+ ? Extract<EdgeTypeId, string>
572
+ : string;
573
+ export type VertexTypeIdOfManifest<Manifest> = Manifest extends {
574
+ literals: { vertexTypeIds: readonly (infer VertexTypeId)[] };
575
+ }
576
+ ? Extract<VertexTypeId, string>
577
+ : string;
578
+ export type SpaceIdOfManifest<Manifest> = Manifest extends {
579
+ literals: { spaceIds: readonly (infer SpaceId)[] };
580
+ }
581
+ ? Extract<SpaceId, string>
582
+ : string;
583
+ export type SpaceTypeIdOfManifest<Manifest> = Manifest extends {
584
+ literals: { spaceTypeIds: readonly (infer SpaceTypeId)[] };
585
+ }
586
+ ? Extract<SpaceTypeId, string>
587
+ : string;
588
+ export type PieceIdOfManifest<Manifest> = Manifest extends {
589
+ literals: { pieceIds: readonly (infer PieceId)[] };
590
+ }
591
+ ? Extract<PieceId, string>
592
+ : string;
593
+ export type DieIdOfManifest<Manifest> = Manifest extends {
594
+ literals: { dieIds: readonly (infer DieId)[] };
595
+ }
596
+ ? Extract<DieId, string>
597
+ : string;
598
+ export type ManifestOf<Source> = Source extends { contract: infer Contract }
599
+ ? ManifestOf<Contract>
600
+ : Source extends { manifest: infer Manifest }
601
+ ? Manifest
602
+ : never;
603
+ export type SetupOptionIdOfManifest<Manifest> = Manifest extends {
604
+ literals: { setupOptionIds: readonly (infer SetupOptionId)[] };
605
+ }
606
+ ? Extract<SetupOptionId, string>
607
+ : string;
608
+ export type SetupProfileIdOfManifest<Manifest> = Manifest extends {
609
+ literals: { setupProfileIds: readonly (infer SetupProfileId)[] };
610
+ }
611
+ ? Extract<SetupProfileId, string>
612
+ : string;
613
+ export type SetupSelectionInputOfManifest<Manifest> = {
614
+ profileId: SetupProfileIdOfManifest<Manifest>;
615
+ optionValues?: Partial<Record<SetupOptionIdOfManifest<Manifest>, string>>;
616
+ };
617
+ export type SetupSelectionOfManifest<Manifest> = {
618
+ profileId: SetupProfileIdOfManifest<Manifest>;
619
+ optionValues: Record<SetupOptionIdOfManifest<Manifest>, string | null>;
620
+ };
621
+ export type RuntimeSetupSelectionInput<
622
+ Manifest extends GeneratedManifestContractLike =
623
+ GeneratedManifestContractLike,
624
+ > = SetupSelectionInputOfManifest<Manifest>;
625
+ export type RuntimeSetupSelection<
626
+ Manifest extends GeneratedManifestContractLike =
627
+ GeneratedManifestContractLike,
628
+ > = SetupSelectionOfManifest<Manifest>;
629
+ export type RuntimeSetupSelectionOverride<
630
+ Manifest extends GeneratedManifestContractLike =
631
+ GeneratedManifestContractLike,
632
+ > = SetupSelectionInputOfManifest<Manifest>;
633
+ export type StateDefinitionOfContract<Contract> = Contract extends {
634
+ state: infer StateDefinitionValue;
635
+ }
636
+ ? StateDefinitionValue
637
+ : never;
638
+ export type PhaseSchemasOfContract<Contract> = Contract extends {
639
+ phases: infer Phases extends Record<string, SchemaLike<object>>;
640
+ }
641
+ ? Phases
642
+ : Record<PhaseNameOfManifest<ManifestOf<Contract>>, SchemaLike<object>>;
643
+ export type PhaseStateMapOfContract<Contract> = {
644
+ [Name in keyof PhaseSchemasOfContract<Contract> & string]: z.infer<
645
+ PhaseSchemasOfContract<Contract>[Name]
646
+ >;
647
+ };
648
+ export type PublicSchemaOfContract<Contract> =
649
+ StateDefinitionOfContract<Contract> extends StateDefinition<
650
+ infer PublicSchema,
651
+ infer _PrivateSchema,
652
+ infer _HiddenSchema
653
+ >
654
+ ? PublicSchema
655
+ : never;
656
+ export type PrivateSchemaOfContract<Contract> =
657
+ StateDefinitionOfContract<Contract> extends StateDefinition<
658
+ infer _PublicSchema,
659
+ infer PrivateSchema,
660
+ infer _HiddenSchema
661
+ >
662
+ ? PrivateSchema
663
+ : never;
664
+ export type HiddenSchemaOfContract<Contract> =
665
+ StateDefinitionOfContract<Contract> extends StateDefinition<
666
+ infer _PublicSchema,
667
+ infer _PrivateSchema,
668
+ infer HiddenSchema
669
+ >
670
+ ? HiddenSchema
671
+ : never;
672
+ export type PhaseNameOfContract<Contract> =
673
+ keyof PhaseSchemasOfContract<Contract> extends string
674
+ ? keyof PhaseSchemasOfContract<Contract> & string
675
+ : PhaseNameOfManifest<ManifestOf<Contract>>;
676
+ export type ManifestContractOf<Contract> = ManifestContract<
677
+ TableOfManifest<ManifestOf<Contract>>
678
+ >;
679
+ export type ExactManifestContractOf<Contract> = ManifestOf<Contract> &
680
+ GeneratedManifestContractLike<TableOfManifest<ManifestOf<Contract>>>;
681
+ export type PhaseNameOf<Source> = Source extends {
682
+ flow: { currentPhase: infer PhaseName };
683
+ }
684
+ ? Extract<PhaseName, string>
685
+ : PhaseNameOfContract<Source>;
686
+ export type DeckCardsOfTable<
687
+ Table,
688
+ DeckId extends DeckIdOfTable<Table>,
689
+ > = Table extends {
690
+ decks: infer Decks extends Record<string, readonly unknown[]>;
691
+ }
692
+ ? Decks[DeckId]
693
+ : never;
694
+ // `hands` is a `Record<string, PerPlayer<string[]>>`-shaped map. Extracting the
695
+ // per-player cards type through the `PerPlayer<Value>` wrapper requires
696
+ // digging into the `entries` tuple. This intermediate helper resolves the
697
+ // tuple-value type even when `PerPlayer` is generic.
698
+ type ValueOfPerPlayer<T> = T extends {
699
+ readonly entries: ReadonlyArray<readonly [unknown, infer Value]>;
700
+ }
701
+ ? Value
702
+ : never;
703
+ export type HandCardsOfTable<
704
+ Table,
705
+ HandId extends HandIdOfTable<Table>,
706
+ > = Table extends {
707
+ hands: infer Hands extends Record<string, unknown>;
708
+ }
709
+ ? HandId extends keyof Hands
710
+ ? ValueOfPerPlayer<Hands[HandId]> extends infer Value
711
+ ? Value extends readonly unknown[]
712
+ ? Value
713
+ : never
714
+ : never
715
+ : never
716
+ : never;
717
+ export type CardIdOfDeck<
718
+ Table,
719
+ DeckId extends DeckIdOfTable<Table>,
720
+ > = DeckCardsOfTable<Table, DeckId>[number];
721
+ export type CardIdOfHand<
722
+ Table,
723
+ HandId extends HandIdOfTable<Table>,
724
+ > = HandCardsOfTable<Table, HandId>[number];
725
+ export type CompatibleHandIdForDeck<
726
+ Table,
727
+ DeckId extends DeckIdOfTable<Table>,
728
+ > = {
729
+ [CandidateHandId in HandIdOfTable<Table>]: Extract<
730
+ CardIdOfDeck<Table, DeckId>,
731
+ CardIdOfHand<Table, CandidateHandId>
732
+ > extends never
733
+ ? never
734
+ : CandidateHandId;
735
+ }[HandIdOfTable<Table>];
736
+ export type CompatibleCardIdForHandAndDeck<
737
+ Table,
738
+ HandId extends HandIdOfTable<Table>,
739
+ DeckId extends DeckIdOfTable<Table>,
740
+ > = Extract<CardIdOfHand<Table, HandId>, CardIdOfDeck<Table, DeckId>>;
741
+ export type CompatibleCardIdForTwoPlayerZones<
742
+ Table,
743
+ FromZoneId extends HandIdOfTable<Table>,
744
+ ToZoneId extends HandIdOfTable<Table>,
745
+ > = Extract<CardIdOfHand<Table, FromZoneId>, CardIdOfHand<Table, ToZoneId>>;