@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 @@
1
+ export * from "./workspace-codegen/index.js";
@@ -0,0 +1,19 @@
1
+ export const DREAMBOARD_SDK_VERSION = "0.2.0";
2
+
3
+ export const DREAMBOARD_SDK_PACKAGES = {
4
+ "@dreamboard-games/sdk": DREAMBOARD_SDK_VERSION,
5
+ } as const;
6
+
7
+ export type DreamboardSdkPackageName = keyof typeof DREAMBOARD_SDK_PACKAGES;
8
+
9
+ export type DreamboardSdkPackageSet = {
10
+ version: 1;
11
+ sdkVersion: string;
12
+ packages: Record<DreamboardSdkPackageName, string>;
13
+ };
14
+
15
+ export const DREAMBOARD_SDK_PACKAGE_SET: DreamboardSdkPackageSet = {
16
+ version: 1,
17
+ sdkVersion: DREAMBOARD_SDK_VERSION,
18
+ packages: DREAMBOARD_SDK_PACKAGES,
19
+ };
@@ -0,0 +1,157 @@
1
+ import { z } from "zod";
2
+ import { createManifestStringLiteralSchema } from "../model/manifest";
3
+ import type {
4
+ ReducerGameContract,
5
+ ReducerManifestContract,
6
+ RuntimeTableRecord,
7
+ SchemaLike,
8
+ StateDefinition,
9
+ } from "../model";
10
+ import {
11
+ type ManifestIdSchemasOf,
12
+ validateStateSchemaIdBranding,
13
+ } from "./validation";
14
+
15
+ /**
16
+ * Narrows a manifest's `literals.phaseNames` and `ids.phaseName` to the
17
+ * author-supplied phase-name tuple. Lets `defineGameContract` override the
18
+ * codegen-emitted `phaseNames: readonly string[]` / `phaseName: z.string()`
19
+ * placeholders so `PhaseNameOfContract<Contract>` resolves to a literal
20
+ * union and flows through `fx.transition`, `PhaseMapOf`, and the flow
21
+ * state's `currentPhase`.
22
+ */
23
+ type NarrowManifestPhaseNames<
24
+ Manifest,
25
+ PhaseNames extends readonly string[],
26
+ > = Omit<Manifest, "literals" | "ids"> & {
27
+ literals: Manifest extends { literals: infer L }
28
+ ? Omit<L, "phaseNames"> & { phaseNames: PhaseNames }
29
+ : { phaseNames: PhaseNames };
30
+ ids: Manifest extends { ids: infer I }
31
+ ? Omit<I, "phaseName"> & { phaseName: z.ZodType<PhaseNames[number]> }
32
+ : { phaseName: z.ZodType<PhaseNames[number]> };
33
+ };
34
+
35
+ type ReducerGameContractInput<
36
+ Table extends RuntimeTableRecord,
37
+ Manifest extends ReducerManifestContract<
38
+ Table,
39
+ string,
40
+ string,
41
+ string,
42
+ string,
43
+ string
44
+ >,
45
+ PublicSchema extends SchemaLike<object>,
46
+ PrivateSchema extends SchemaLike<object>,
47
+ HiddenSchema extends SchemaLike<object>,
48
+ Phases extends Record<string, SchemaLike<object>>,
49
+ > = {
50
+ manifest: Manifest;
51
+ state: StateDefinition<PublicSchema, PrivateSchema, HiddenSchema>;
52
+ phases: Phases;
53
+ };
54
+
55
+ export function defineGameContract<
56
+ Table extends RuntimeTableRecord,
57
+ const Manifest extends ReducerManifestContract<
58
+ Table,
59
+ string,
60
+ string,
61
+ string,
62
+ string,
63
+ string
64
+ >,
65
+ PublicSchema extends SchemaLike<object>,
66
+ PrivateSchema extends SchemaLike<object>,
67
+ HiddenSchema extends SchemaLike<object>,
68
+ const Phases extends Record<string, SchemaLike<object>>,
69
+ >(
70
+ definition: ReducerGameContractInput<
71
+ Table,
72
+ Manifest,
73
+ PublicSchema,
74
+ PrivateSchema,
75
+ HiddenSchema,
76
+ Phases
77
+ >,
78
+ ): ReducerGameContract<
79
+ Table,
80
+ NarrowManifestPhaseNames<Manifest, readonly (keyof Phases & string)[]>,
81
+ PublicSchema,
82
+ PrivateSchema,
83
+ HiddenSchema,
84
+ Phases
85
+ > & {
86
+ readonly phases: Phases;
87
+ readonly phaseNames: readonly (keyof Phases & string)[];
88
+ /**
89
+ * Ergonomic shortcut to the manifest-backed Zod id schemas. Equivalent to
90
+ * `definition.manifest.ids`. Prefer `gameContract.schemas.playerId` etc.
91
+ * over re-importing the generated `ids` namespace so that every authored
92
+ * schema is anchored to the same SDK-guided source.
93
+ */
94
+ readonly schemas: ManifestIdSchemasOf<
95
+ NarrowManifestPhaseNames<
96
+ Manifest,
97
+ readonly (keyof Phases & string)[]
98
+ >["ids"]
99
+ >;
100
+ } {
101
+ validateStateSchemaIdBranding(definition.state.public, "public");
102
+ validateStateSchemaIdBranding(definition.state.private, "private");
103
+ validateStateSchemaIdBranding(definition.state.hidden, "hidden");
104
+ const phaseNames = Object.keys(definition.phases) as (keyof Phases &
105
+ string)[];
106
+ if (phaseNames.length === 0) {
107
+ throw new Error(
108
+ "defineGameContract: phases must be a non-empty record of phase schemas.",
109
+ );
110
+ }
111
+ for (const name of phaseNames) {
112
+ if (typeof name !== "string" || name.length === 0) {
113
+ throw new Error(
114
+ "defineGameContract: phase names must be non-empty strings.",
115
+ );
116
+ }
117
+ }
118
+ const phaseNameSchema = createManifestStringLiteralSchema(phaseNames);
119
+ const narrowedManifest = {
120
+ ...definition.manifest,
121
+ literals: {
122
+ ...definition.manifest.literals,
123
+ phaseNames,
124
+ },
125
+ ids: {
126
+ ...definition.manifest.ids,
127
+ phaseName: phaseNameSchema,
128
+ },
129
+ } as unknown as NarrowManifestPhaseNames<
130
+ Manifest,
131
+ readonly (keyof Phases & string)[]
132
+ >;
133
+ const contract = {
134
+ manifest: narrowedManifest,
135
+ state: definition.state,
136
+ phases: definition.phases,
137
+ phaseNames,
138
+ schemas: narrowedManifest.ids,
139
+ } as ReducerGameContract<
140
+ Table,
141
+ NarrowManifestPhaseNames<Manifest, readonly (keyof Phases & string)[]>,
142
+ PublicSchema,
143
+ PrivateSchema,
144
+ HiddenSchema,
145
+ Phases
146
+ > & {
147
+ readonly phases: Phases;
148
+ readonly phaseNames: readonly (keyof Phases & string)[];
149
+ readonly schemas: ManifestIdSchemasOf<
150
+ NarrowManifestPhaseNames<
151
+ Manifest,
152
+ readonly (keyof Phases & string)[]
153
+ >["ids"]
154
+ >;
155
+ };
156
+ return contract;
157
+ }
@@ -0,0 +1,224 @@
1
+ import { z } from "zod";
2
+ import type {
3
+ AnySchema,
4
+ ContinuationCallable,
5
+ EffectRollDieDefinition,
6
+ EffectShuffleDefinition,
7
+ EffectShufflePlayerZoneDefinition,
8
+ ResumableEffectKind,
9
+ } from "../model";
10
+ import type {
11
+ AnyReducerGameContract,
12
+ ContractManifest,
13
+ ContractState,
14
+ } from "./types";
15
+
16
+ function createContinuationCallable<
17
+ DataSchema extends AnySchema,
18
+ ResponseSchema extends AnySchema,
19
+ State extends {
20
+ table: import("../model").RuntimeTableRecord;
21
+ flow: { currentPhase: string };
22
+ },
23
+ Manifest extends import("../model").ManifestContract<
24
+ import("../model").TableOfState<State>
25
+ >,
26
+ EffectType extends ResumableEffectKind = ResumableEffectKind,
27
+ >(definition: {
28
+ id: string;
29
+ data: DataSchema;
30
+ response: ResponseSchema;
31
+ effectKind?: EffectType;
32
+ reduce: ContinuationCallable<
33
+ DataSchema,
34
+ State,
35
+ Manifest,
36
+ string,
37
+ EffectType
38
+ >["reduce"];
39
+ }): ContinuationCallable<DataSchema, State, Manifest, string, EffectType> {
40
+ const continuation = ((data: z.infer<DataSchema>) => {
41
+ return {
42
+ id: continuation.id,
43
+ data,
44
+ };
45
+ }) as ContinuationCallable<DataSchema, State, Manifest, string, EffectType>;
46
+ continuation.id = definition.id;
47
+ continuation.source = "effect";
48
+ continuation.dataSchema = definition.data;
49
+ continuation.responseSchema = definition.response;
50
+ continuation.reduce = definition.reduce;
51
+ if (definition.effectKind !== undefined) {
52
+ continuation.effectKind = definition.effectKind;
53
+ }
54
+ return continuation;
55
+ }
56
+
57
+ // --- `defineEffect` ---
58
+ //
59
+ // Authoring factory for engine-side resumable effects (cues). An effect
60
+ // is the registered bundle of continuation callable + optional reduce,
61
+ // discriminated by `type` which aligns directly with `ResumableEffectKind`:
62
+ //
63
+ // defineEffect<GameContract>()({ type: "rollDie", id, context?, reduce? })
64
+ // defineEffect<GameContract>()({ type: "shuffleSharedZone", id, context?, reduce? })
65
+ //
66
+ // Authored effects are registered under `phase.effects` and invoked from
67
+ // a reducer via `fx.effect(effect, options)`. The wire protocol already
68
+ // isolates the continuation payload into the ingress bundle's
69
+ // `continuations` map keyed by `effectId`, so `fx.effect` never attaches
70
+ // `resume: undefined` to the wire effect.
71
+ //
72
+ // Addressed player requests are *not* effects. Author them as
73
+ // prompt-kind interactions via `defineInteraction({ kind: "prompt",
74
+ // to, options, ... })`.
75
+
76
+ type EffectRollDieInput<
77
+ Contract extends AnyReducerGameContract,
78
+ Id extends string,
79
+ ContextSchema extends AnySchema,
80
+ > = {
81
+ type: "rollDie";
82
+ id: Id;
83
+ context?: ContextSchema;
84
+ reduce?: ContinuationCallable<
85
+ ContextSchema,
86
+ ContractState<Contract>,
87
+ ContractManifest<Contract>,
88
+ Id,
89
+ "rollDie"
90
+ >["reduce"];
91
+ };
92
+
93
+ type EffectShuffleInput<
94
+ Contract extends AnyReducerGameContract,
95
+ Id extends string,
96
+ ContextSchema extends AnySchema,
97
+ > = {
98
+ type: "shuffleSharedZone";
99
+ id: Id;
100
+ context?: ContextSchema;
101
+ reduce?: ContinuationCallable<
102
+ ContextSchema,
103
+ ContractState<Contract>,
104
+ ContractManifest<Contract>,
105
+ Id,
106
+ "shuffleSharedZone"
107
+ >["reduce"];
108
+ };
109
+
110
+ type EffectShufflePlayerZoneInput<
111
+ Contract extends AnyReducerGameContract,
112
+ Id extends string,
113
+ ContextSchema extends AnySchema,
114
+ > = {
115
+ type: "shufflePlayerZone";
116
+ id: Id;
117
+ context?: ContextSchema;
118
+ reduce?: ContinuationCallable<
119
+ ContextSchema,
120
+ ContractState<Contract>,
121
+ ContractManifest<Contract>,
122
+ Id,
123
+ "shufflePlayerZone"
124
+ >["reduce"];
125
+ };
126
+
127
+ export function defineEffect<Contract extends AnyReducerGameContract>() {
128
+ type EffectInput =
129
+ | EffectRollDieInput<Contract, string, AnySchema>
130
+ | EffectShuffleInput<Contract, string, AnySchema>
131
+ | EffectShufflePlayerZoneInput<Contract, string, AnySchema>;
132
+ type EffectOutput =
133
+ | EffectRollDieDefinition<
134
+ string,
135
+ AnySchema,
136
+ ContractState<Contract>,
137
+ ContractManifest<Contract>
138
+ >
139
+ | EffectShuffleDefinition<
140
+ string,
141
+ AnySchema,
142
+ ContractState<Contract>,
143
+ ContractManifest<Contract>
144
+ >
145
+ | EffectShufflePlayerZoneDefinition<
146
+ string,
147
+ AnySchema,
148
+ ContractState<Contract>,
149
+ ContractManifest<Contract>
150
+ >;
151
+ function effect<
152
+ Id extends string,
153
+ ContextSchema extends AnySchema = z.ZodObject<Record<string, never>>,
154
+ >(
155
+ definition: EffectRollDieInput<Contract, Id, ContextSchema>,
156
+ ): EffectRollDieDefinition<
157
+ Id,
158
+ ContextSchema,
159
+ ContractState<Contract>,
160
+ ContractManifest<Contract>
161
+ >;
162
+ function effect<
163
+ Id extends string,
164
+ ContextSchema extends AnySchema = z.ZodObject<Record<string, never>>,
165
+ >(
166
+ definition: EffectShuffleInput<Contract, Id, ContextSchema>,
167
+ ): EffectShuffleDefinition<
168
+ Id,
169
+ ContextSchema,
170
+ ContractState<Contract>,
171
+ ContractManifest<Contract>
172
+ >;
173
+ function effect<
174
+ Id extends string,
175
+ ContextSchema extends AnySchema = z.ZodObject<Record<string, never>>,
176
+ >(
177
+ definition: EffectShufflePlayerZoneInput<Contract, Id, ContextSchema>,
178
+ ): EffectShufflePlayerZoneDefinition<
179
+ Id,
180
+ ContextSchema,
181
+ ContractState<Contract>,
182
+ ContractManifest<Contract>
183
+ >;
184
+ function effect(definition: EffectInput): EffectOutput {
185
+ if (
186
+ definition.type === "rollDie" ||
187
+ definition.type === "shuffleSharedZone" ||
188
+ definition.type === "shufflePlayerZone"
189
+ ) {
190
+ const effectKind: ResumableEffectKind = definition.type;
191
+ if (!definition.reduce) {
192
+ return {
193
+ type: definition.type,
194
+ id: definition.id,
195
+ contextSchema: definition.context,
196
+ } as EffectOutput;
197
+ }
198
+ const contextSchema = (definition.context ?? z.object({})) as AnySchema;
199
+ const continuation = createContinuationCallable<
200
+ AnySchema,
201
+ AnySchema,
202
+ ContractState<Contract>,
203
+ ContractManifest<Contract>,
204
+ ResumableEffectKind
205
+ >({
206
+ id: definition.id,
207
+ data: contextSchema,
208
+ response: z.unknown() as AnySchema,
209
+ effectKind,
210
+ reduce: definition.reduce,
211
+ });
212
+ return {
213
+ type: definition.type,
214
+ id: definition.id,
215
+ contextSchema,
216
+ __continuation: continuation,
217
+ } as EffectOutput;
218
+ }
219
+ throw new Error(
220
+ `defineEffect: unknown effect definition. Expected type 'rollDie' | 'shuffleSharedZone' | 'shufflePlayerZone'. Addressed prompts are authored as prompt-kind interactions via defineInteraction({ kind: "prompt" }).`,
221
+ );
222
+ }
223
+ return effect;
224
+ }
@@ -0,0 +1,23 @@
1
+ import type { PhaseMapOf, ReducerGameDefinition, ViewMapOf } from "../model";
2
+ import type { AnyReducerGameContract } from "./types";
3
+ import {
4
+ validateDefineGamePhaseNames,
5
+ validateDefineGameSimultaneousPhases,
6
+ validateDefineGameZoneWiring,
7
+ } from "./validation";
8
+
9
+ export function defineGame<
10
+ const Contract extends AnyReducerGameContract,
11
+ Definitions extends PhaseMapOf<Contract>,
12
+ Views extends ViewMapOf<Contract> = Record<string, never>,
13
+ >(
14
+ definition: { contract: Contract } & Omit<
15
+ ReducerGameDefinition<NoInfer<Contract>, Definitions, Views>,
16
+ "contract"
17
+ >,
18
+ ): ReducerGameDefinition<Contract, Definitions, Views> {
19
+ validateDefineGamePhaseNames(definition);
20
+ validateDefineGameSimultaneousPhases(definition);
21
+ validateDefineGameZoneWiring(definition);
22
+ return definition;
23
+ }
@@ -0,0 +1,98 @@
1
+ import type {
2
+ CardActionSpec,
3
+ InputCollector,
4
+ InteractionRule,
5
+ InteractionSpec,
6
+ PlayerZoneIdOfManifest,
7
+ ScopedPhaseState,
8
+ } from "../model";
9
+ import type {
10
+ AnyReducerGameContract,
11
+ ContractManifest,
12
+ ContractState,
13
+ InferPhaseState,
14
+ PhaseStateInput,
15
+ } from "./types";
16
+ import { validateInteractionLikeDefinition } from "./validation";
17
+
18
+ export function defineInteraction<
19
+ Contract extends AnyReducerGameContract,
20
+ PhaseState extends PhaseStateInput = import("../model").SchemaLike<object>,
21
+ >() {
22
+ return <Collectors extends Record<string, InputCollector>>(
23
+ definition: InteractionSpec<
24
+ Collectors,
25
+ ScopedPhaseState<ContractState<Contract>, InferPhaseState<PhaseState>>,
26
+ ContractManifest<Contract>
27
+ >,
28
+ ): InteractionSpec<
29
+ Collectors,
30
+ ScopedPhaseState<ContractState<Contract>, InferPhaseState<PhaseState>>,
31
+ ContractManifest<Contract>
32
+ > => {
33
+ validateInteractionLikeDefinition(
34
+ definition as {
35
+ inputs?: Record<string, InputCollector>;
36
+ commit?: { mode: string };
37
+ paramsSchema?: unknown;
38
+ },
39
+ "defineInteraction",
40
+ );
41
+ return definition;
42
+ };
43
+ }
44
+
45
+ export function defineInteractionRule<
46
+ Contract extends AnyReducerGameContract,
47
+ PhaseState extends PhaseStateInput = import("../model").SchemaLike<object>,
48
+ >() {
49
+ return <
50
+ Collectors extends Record<string, InputCollector> = Record<
51
+ string,
52
+ InputCollector
53
+ >,
54
+ >(
55
+ definition: InteractionRule<
56
+ Collectors,
57
+ ScopedPhaseState<ContractState<Contract>, InferPhaseState<PhaseState>>,
58
+ ContractManifest<Contract>
59
+ >,
60
+ ): InteractionRule<
61
+ Collectors,
62
+ ScopedPhaseState<ContractState<Contract>, InferPhaseState<PhaseState>>,
63
+ ContractManifest<Contract>
64
+ > => definition;
65
+ }
66
+
67
+ export function defineCardAction<
68
+ Contract extends AnyReducerGameContract,
69
+ PhaseState extends PhaseStateInput,
70
+ >() {
71
+ return <
72
+ Collectors extends Record<string, InputCollector> = Record<string, never>,
73
+ const PlayFrom extends PlayerZoneIdOfManifest<ContractManifest<Contract>> =
74
+ PlayerZoneIdOfManifest<ContractManifest<Contract>>,
75
+ >(
76
+ definition: CardActionSpec<
77
+ Collectors,
78
+ ScopedPhaseState<ContractState<Contract>, InferPhaseState<PhaseState>>,
79
+ ContractManifest<Contract>,
80
+ PlayFrom
81
+ >,
82
+ ): CardActionSpec<
83
+ Collectors,
84
+ ScopedPhaseState<ContractState<Contract>, InferPhaseState<PhaseState>>,
85
+ ContractManifest<Contract>,
86
+ PlayFrom
87
+ > => {
88
+ validateInteractionLikeDefinition(
89
+ definition as {
90
+ inputs?: Record<string, InputCollector>;
91
+ commit?: { mode: string };
92
+ paramsSchema?: unknown;
93
+ },
94
+ "defineCardAction",
95
+ );
96
+ return definition;
97
+ };
98
+ }