@dreamboard-games/sdk 0.2.1-alpha.0 → 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 (363) 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-fy0_QzgO.d.ts → ThemeProvider-DvMl17Ny.d.ts} +1 -1
  4. package/dist/attributes-BeRyboMS.d.ts +279 -0
  5. package/dist/browser-interaction.d.ts +708 -0
  6. package/dist/browser-interaction.js +106 -0
  7. package/dist/{chunk-KAELH4KC.js → chunk-3RQEICD3.js} +2 -2
  8. package/dist/{chunk-TDSWKVZ4.js → chunk-ADYH6PVT.js} +2457 -1265
  9. package/dist/chunk-ADYH6PVT.js.map +1 -0
  10. package/dist/{chunk-YFY3RL52.js → chunk-P7VMTJ5D.js} +2 -2
  11. package/dist/{chunk-YFY3RL52.js.map → chunk-P7VMTJ5D.js.map} +1 -1
  12. package/dist/chunk-QLG6VEMW.js +1691 -0
  13. package/dist/chunk-QLG6VEMW.js.map +1 -0
  14. package/dist/{chunk-WYPQ3GG5.js → chunk-QZ6X4B5P.js} +1177 -1106
  15. package/dist/chunk-QZ6X4B5P.js.map +1 -0
  16. package/dist/{chunk-GKKBPPSW.js → chunk-TXXLS3OI.js} +405 -309
  17. package/dist/chunk-TXXLS3OI.js.map +1 -0
  18. package/dist/{chunk-FDNZTDD6.js → chunk-W6SGFWXH.js} +48 -44
  19. package/dist/chunk-W6SGFWXH.js.map +1 -0
  20. package/dist/{chunk-MKXPVOUT.js → chunk-Y2AFYBMB.js} +48 -4
  21. package/dist/chunk-Y2AFYBMB.js.map +1 -0
  22. package/dist/{index-BwqPQtBu.d.ts → codegen.d.ts} +57 -565
  23. package/dist/{infrastructure/workspace-codegen.js → codegen.js} +3 -3
  24. package/dist/{components-D5ZRE2Hl.d.ts → components-DaIqi9QM.d.ts} +48 -37
  25. package/dist/{hex-board-view-D_07hO6O.d.ts → hex-board-view-UCUjMALd.d.ts} +3 -2
  26. package/dist/{infrastructure/reducer-bundle-abi.d.ts → index.d-BGqVifr_.d.ts} +289 -10
  27. package/dist/index.js +1 -1
  28. package/dist/package-set.d.ts +2 -2
  29. package/dist/package-set.js +1 -1
  30. package/dist/primitive-props-BNHDkgd7.d.ts +16 -0
  31. package/dist/reducer-contract.d.ts +3 -0
  32. package/dist/{infrastructure/reducer-bundle-abi.js → reducer-contract.js} +4 -4
  33. package/dist/reducer.d.ts +185 -179
  34. package/dist/reducer.js +1637 -1353
  35. package/dist/reducer.js.map +1 -1
  36. package/dist/runtime/primitives.d.ts +10 -9
  37. package/dist/runtime/primitives.js +8 -7
  38. package/dist/runtime/runtime-api.d.ts +2 -0
  39. package/dist/runtime/runtime-api.js +1 -0
  40. package/dist/runtime/workspace-contract.d.ts +63 -17
  41. package/dist/runtime/workspace-contract.js +5 -5
  42. package/dist/{runtime-api-DWxvTr-O.d.ts → runtime-api-tGL3ArsB.d.ts} +109 -4
  43. package/dist/runtime.d.ts +12 -57
  44. package/dist/runtime.js +487 -7
  45. package/dist/runtime.js.map +1 -1
  46. package/dist/testing.d.ts +4 -4
  47. package/dist/testing.js.map +1 -1
  48. package/dist/types.d.ts +1531 -85
  49. package/dist/types.js +1 -3
  50. package/dist/types.js.map +1 -1
  51. package/dist/ui/components.d.ts +7 -8
  52. package/dist/ui/components.js +1 -1
  53. package/dist/ui/defaults.d.ts +1 -1
  54. package/dist/ui/{types/player-state.d.ts → player-state.d.ts} +2 -2
  55. package/dist/{ui-contract-iQfTtUSL.d.ts → ui-contract-SctM4ibF.d.ts} +157 -150
  56. package/dist/ui.d.ts +10 -11
  57. package/dist/ui.js +2 -2
  58. package/package.json +35 -74
  59. package/dist/bundle-CDd5FKeD.d.ts +0 -283
  60. package/dist/cards-Sl3b40Mv.d.ts +0 -13
  61. package/dist/chunk-7YAHLYBR.js +0 -481
  62. package/dist/chunk-7YAHLYBR.js.map +0 -1
  63. package/dist/chunk-FDNZTDD6.js.map +0 -1
  64. package/dist/chunk-GKKBPPSW.js.map +0 -1
  65. package/dist/chunk-I46YJSOD.js +0 -1
  66. package/dist/chunk-MKXPVOUT.js.map +0 -1
  67. package/dist/chunk-T52J5RMF.js +0 -1
  68. package/dist/chunk-TDSWKVZ4.js.map +0 -1
  69. package/dist/chunk-U5C6BONG.js +0 -34
  70. package/dist/chunk-U5C6BONG.js.map +0 -1
  71. package/dist/chunk-WYPQ3GG5.js.map +0 -1
  72. package/dist/generated/runtime/primitives.d.ts +0 -12
  73. package/dist/generated/runtime/primitives.js +0 -180
  74. package/dist/generated/runtime/primitives.js.map +0 -1
  75. package/dist/generated/runtime-api.d.ts +0 -3
  76. package/dist/generated/runtime-api.js +0 -2
  77. package/dist/generated/runtime.d.ts +0 -14
  78. package/dist/generated/runtime.js +0 -18
  79. package/dist/generated/runtime.js.map +0 -1
  80. package/dist/generated/workspace-contract.d.ts +0 -14
  81. package/dist/generated/workspace-contract.js +0 -14
  82. package/dist/generated/workspace-contract.js.map +0 -1
  83. package/dist/infrastructure/reducer-bundle-abi.js.map +0 -1
  84. package/dist/infrastructure/workspace-codegen.d.ts +0 -53
  85. package/dist/infrastructure/workspace-codegen.js.map +0 -1
  86. package/dist/manifest-contract-BNHVGFtU.d.ts +0 -9
  87. package/dist/primitive-props-DpKs-GCr.d.ts +0 -11
  88. package/dist/runtime/types/runtime-api.d.ts +0 -1
  89. package/dist/runtime/types/runtime-api.js +0 -2
  90. package/dist/runtime-api-3dshj6kK.d.ts +0 -101
  91. package/dist/slots-1GPGihk8.d.ts +0 -8
  92. package/src/generated/reducer-contract/builders.ts +0 -90
  93. package/src/generated/reducer-contract/version.ts +0 -9
  94. package/src/generated/reducer-contract/wire.ts +0 -100
  95. package/src/generated/reducer-contract/zod.ts +0 -103
  96. package/src/generated/runtime/primitives.ts +0 -2
  97. package/src/generated/runtime-api.ts +0 -5
  98. package/src/generated/runtime.ts +0 -35
  99. package/src/generated/workspace-contract.ts +0 -2
  100. package/src/index.ts +0 -7
  101. package/src/infrastructure/reducer-bundle-abi.ts +0 -8
  102. package/src/infrastructure/reducer-contract/bundle.ts +0 -37
  103. package/src/infrastructure/workspace-codegen/hex-geometry.ts +0 -69
  104. package/src/infrastructure/workspace-codegen/index.ts +0 -64
  105. package/src/infrastructure/workspace-codegen/manifest-contract.ts +0 -6632
  106. package/src/infrastructure/workspace-codegen/manifest-validation.ts +0 -795
  107. package/src/infrastructure/workspace-codegen/ownership.ts +0 -131
  108. package/src/infrastructure/workspace-codegen/preset-card-sets.ts +0 -169
  109. package/src/infrastructure/workspace-codegen/seeds.ts +0 -1705
  110. package/src/infrastructure/workspace-codegen.ts +0 -1
  111. package/src/package-set.ts +0 -19
  112. package/src/reducer/authoring/contract.ts +0 -157
  113. package/src/reducer/authoring/effect.ts +0 -224
  114. package/src/reducer/authoring/game.ts +0 -23
  115. package/src/reducer/authoring/interaction.ts +0 -98
  116. package/src/reducer/authoring/phase.ts +0 -300
  117. package/src/reducer/authoring/types.ts +0 -70
  118. package/src/reducer/authoring/validation.ts +0 -382
  119. package/src/reducer/authoring/view-stage.ts +0 -68
  120. package/src/reducer/authoring.ts +0 -29
  121. package/src/reducer/bundle/ingress-bundle.ts +0 -491
  122. package/src/reducer/bundle/trusted/engine-instruction-resolver.ts +0 -254
  123. package/src/reducer/bundle/trusted/flow-instruction-resolver.ts +0 -73
  124. package/src/reducer/bundle/trusted/instruction-runner.ts +0 -414
  125. package/src/reducer/bundle/trusted/interaction-authorization.ts +0 -137
  126. package/src/reducer/bundle/trusted/interaction-collectors.ts +0 -859
  127. package/src/reducer/bundle/trusted/interaction-decision.ts +0 -747
  128. package/src/reducer/bundle/trusted/interaction-resolver.ts +0 -95
  129. package/src/reducer/bundle/trusted/interaction-types.ts +0 -171
  130. package/src/reducer/bundle/trusted/lifecycle-runner.ts +0 -427
  131. package/src/reducer/bundle/trusted/projection-builder.ts +0 -356
  132. package/src/reducer/bundle/trusted/projection-context.ts +0 -39
  133. package/src/reducer/bundle/trusted/rng-sampler.ts +0 -150
  134. package/src/reducer/bundle/trusted/runtime-registry.ts +0 -120
  135. package/src/reducer/bundle/trusted/runtime-scope.ts +0 -336
  136. package/src/reducer/bundle/trusted/simultaneous-player.ts +0 -97
  137. package/src/reducer/bundle/trusted/stage-resolver.ts +0 -87
  138. package/src/reducer/bundle/trusted/static-projection.ts +0 -116
  139. package/src/reducer/bundle/trusted/trusted-runtime-args.ts +0 -97
  140. package/src/reducer/bundle/trusted/trusted-runtime-result.ts +0 -39
  141. package/src/reducer/bundle/trusted/trusted-setup-profiles.ts +0 -43
  142. package/src/reducer/bundle/trusted/trusted-state-codec.ts +0 -48
  143. package/src/reducer/bundle/trusted-bundle.ts +0 -97
  144. package/src/reducer/bundle/types.ts +0 -171
  145. package/src/reducer/bundle.ts +0 -2
  146. package/src/reducer/client-param-schemas.ts +0 -57
  147. package/src/reducer/compose.ts +0 -34
  148. package/src/reducer/core/runtime-input.ts +0 -30
  149. package/src/reducer/core/runtime-instruction.ts +0 -59
  150. package/src/reducer/core/types.ts +0 -62
  151. package/src/reducer/definition-index.ts +0 -277
  152. package/src/reducer/derived.ts +0 -106
  153. package/src/reducer/effects.ts +0 -92
  154. package/src/reducer/engine/runtime-instruction-engine.ts +0 -155
  155. package/src/reducer/ingress/decode-runtime-input.ts +0 -7
  156. package/src/reducer/ingress/decode-session-state.ts +0 -9
  157. package/src/reducer/ingress/encode-session-state.ts +0 -6
  158. package/src/reducer/ingress/input-codec.ts +0 -18
  159. package/src/reducer/ingress/phase-schemas.ts +0 -62
  160. package/src/reducer/ingress/raw-types.ts +0 -107
  161. package/src/reducer/ingress/runtime-codec.ts +0 -14
  162. package/src/reducer/ingress/runtime-payload.ts +0 -13
  163. package/src/reducer/ingress/session-codec.ts +0 -392
  164. package/src/reducer/ingress/types.ts +0 -6
  165. package/src/reducer/inputs/boardInput.ts +0 -217
  166. package/src/reducer/inputs/boardTarget.ts +0 -190
  167. package/src/reducer/inputs/cardInput.ts +0 -86
  168. package/src/reducer/inputs/cardTarget.ts +0 -101
  169. package/src/reducer/inputs/choiceTarget.ts +0 -104
  170. package/src/reducer/inputs/defineInputs.ts +0 -71
  171. package/src/reducer/inputs/formInput.ts +0 -809
  172. package/src/reducer/inputs/many.ts +0 -120
  173. package/src/reducer/inputs/promptInput.ts +0 -87
  174. package/src/reducer/inputs/rngInput.ts +0 -58
  175. package/src/reducer/inputs/targetRule.ts +0 -123
  176. package/src/reducer/inputs.ts +0 -41
  177. package/src/reducer/model/definition.ts +0 -1072
  178. package/src/reducer/model/extract.ts +0 -745
  179. package/src/reducer/model/manifest.ts +0 -570
  180. package/src/reducer/model/queries.ts +0 -641
  181. package/src/reducer/model/runtime.ts +0 -264
  182. package/src/reducer/model/spec.ts +0 -1386
  183. package/src/reducer/model/table.ts +0 -260
  184. package/src/reducer/model.ts +0 -7
  185. package/src/reducer/ops.ts +0 -1034
  186. package/src/reducer/parse-utils.ts +0 -28
  187. package/src/reducer/per-player.ts +0 -422
  188. package/src/reducer/rng.ts +0 -69
  189. package/src/reducer/schema-helpers.ts +0 -185
  190. package/src/reducer/setup-bootstrap-helpers.ts +0 -171
  191. package/src/reducer/setup-bootstrap.ts +0 -481
  192. package/src/reducer/table-ops.ts +0 -2671
  193. package/src/reducer/table-queries.ts +0 -372
  194. package/src/reducer/transaction.ts +0 -120
  195. package/src/reducer.ts +0 -314
  196. package/src/runtime/primitives.ts +0 -1
  197. package/src/runtime/types/runtime-api.ts +0 -1
  198. package/src/runtime/workspace-contract.ts +0 -32
  199. package/src/runtime-internal/components/InteractionForm.tsx +0 -1309
  200. package/src/runtime-internal/components/PluginRuntime.tsx +0 -103
  201. package/src/runtime-internal/components/board/target-layer.ts +0 -70
  202. package/src/runtime-internal/context/ClientParamSchemaContext.tsx +0 -44
  203. package/src/runtime-internal/context/InteractionDraftContext.tsx +0 -279
  204. package/src/runtime-internal/context/PluginSessionContext.tsx +0 -47
  205. package/src/runtime-internal/context/PluginStateContext.tsx +0 -262
  206. package/src/runtime-internal/context/RuntimeContext.tsx +0 -96
  207. package/src/runtime-internal/defaults/components.tsx +0 -409
  208. package/src/runtime-internal/defaults/index.ts +0 -11
  209. package/src/runtime-internal/errors/ValidationError.ts +0 -29
  210. package/src/runtime-internal/hooks/useActivePlayers.ts +0 -33
  211. package/src/runtime-internal/hooks/useBoardInteractions.ts +0 -665
  212. package/src/runtime-internal/hooks/useGameSelector.ts +0 -105
  213. package/src/runtime-internal/hooks/useGameView.ts +0 -9
  214. package/src/runtime-internal/hooks/useInteractionByKey.ts +0 -354
  215. package/src/runtime-internal/hooks/useInteractionHandle.ts +0 -438
  216. package/src/runtime-internal/hooks/useIsMyTurn.ts +0 -20
  217. package/src/runtime-internal/hooks/useLobby.ts +0 -76
  218. package/src/runtime-internal/hooks/useMe.ts +0 -48
  219. package/src/runtime-internal/hooks/usePlayerInfo.ts +0 -28
  220. package/src/runtime-internal/hooks/usePlayerTurnOrder.ts +0 -23
  221. package/src/runtime-internal/hooks/usePluginRuntime.ts +0 -147
  222. package/src/runtime-internal/hooks/useSeatInbox.ts +0 -61
  223. package/src/runtime-internal/hooks/useSimultaneousPhase.ts +0 -10
  224. package/src/runtime-internal/index.ts +0 -42
  225. package/src/runtime-internal/internal.ts +0 -43
  226. package/src/runtime-internal/plugin-styles.css +0 -250
  227. package/src/runtime-internal/primitives/board.tsx +0 -459
  228. package/src/runtime-internal/primitives/dialog-lifecycle.ts +0 -58
  229. package/src/runtime-internal/primitives/dice.tsx +0 -79
  230. package/src/runtime-internal/primitives/game-ui-provider.tsx +0 -35
  231. package/src/runtime-internal/primitives/game.tsx +0 -387
  232. package/src/runtime-internal/primitives/hand-intent-adapter.ts +0 -147
  233. package/src/runtime-internal/primitives/hand-surface.tsx +0 -594
  234. package/src/runtime-internal/primitives/index.ts +0 -196
  235. package/src/runtime-internal/primitives/interaction-form-binding.tsx +0 -56
  236. package/src/runtime-internal/primitives/interaction-submit.ts +0 -90
  237. package/src/runtime-internal/primitives/interaction.tsx +0 -987
  238. package/src/runtime-internal/primitives/phase.tsx +0 -43
  239. package/src/runtime-internal/primitives/player-roster.tsx +0 -302
  240. package/src/runtime-internal/primitives/primitive-props.tsx +0 -101
  241. package/src/runtime-internal/primitives/prompt.tsx +0 -255
  242. package/src/runtime-internal/primitives/ui.tsx +0 -60
  243. package/src/runtime-internal/primitives/zone.tsx +0 -791
  244. package/src/runtime-internal/reducer.ts +0 -30
  245. package/src/runtime-internal/runtime/createPluginRuntimeAPI.ts +0 -605
  246. package/src/runtime-internal/types/plugin-state.ts +0 -508
  247. package/src/runtime-internal/types/reducer-state.ts +0 -24
  248. package/src/runtime-internal/types/runtime-api.ts +0 -114
  249. package/src/runtime-internal/ui-contract.ts +0 -519
  250. package/src/runtime-internal/utils/card-intent-adapter.ts +0 -546
  251. package/src/runtime-internal/utils/interaction-inputs.ts +0 -492
  252. package/src/runtime-internal/utils/interaction-labels.ts +0 -23
  253. package/src/runtime-internal/utils/interaction-router.ts +0 -273
  254. package/src/runtime-internal/utils/interaction-status.ts +0 -74
  255. package/src/runtime-internal/workspace-contract.ts +0 -1170
  256. package/src/runtime.ts +0 -34
  257. package/src/testing/create-expect-api.ts +0 -352
  258. package/src/testing/create-test-runtime.ts +0 -381
  259. package/src/testing/definitions.ts +0 -127
  260. package/src/testing/index.ts +0 -3
  261. package/src/testing.ts +0 -1
  262. package/src/type-stubs/manifest-contract.d.ts +0 -42
  263. package/src/type-stubs/manifest-contract.js +0 -72
  264. package/src/type-stubs/ui-contract.d.ts +0 -5
  265. package/src/type-stubs/ui-contract.js +0 -1
  266. package/src/types/authoring-card-properties.type-test.ts +0 -266
  267. package/src/types/authoring.ts +0 -1282
  268. package/src/types/cards.ts +0 -19
  269. package/src/types/contracts.ts +0 -1550
  270. package/src/types/generated-helpers.ts +0 -35
  271. package/src/types/index.ts +0 -147
  272. package/src/types/slots.ts +0 -11
  273. package/src/types.ts +0 -1
  274. package/src/ui/components/ActionButton.tsx +0 -97
  275. package/src/ui/components/ActionPanel.tsx +0 -315
  276. package/src/ui/components/Card.tsx +0 -378
  277. package/src/ui/components/CardDragSurface.tsx +0 -1076
  278. package/src/ui/components/ChromeSuppressionContext.tsx +0 -70
  279. package/src/ui/components/CostDisplay.tsx +0 -145
  280. package/src/ui/components/DiceRoller.tsx +0 -581
  281. package/src/ui/components/Drawer.tsx +0 -180
  282. package/src/ui/components/ErrorBoundary.tsx +0 -275
  283. package/src/ui/components/GameEndDisplay.tsx +0 -398
  284. package/src/ui/components/GameSkeleton.tsx +0 -260
  285. package/src/ui/components/Hand.tsx +0 -468
  286. package/src/ui/components/HandDock.tsx +0 -299
  287. package/src/ui/components/HandView.tsx +0 -441
  288. package/src/ui/components/MobileHandTray.tsx +0 -381
  289. package/src/ui/components/MoreActions.tsx +0 -143
  290. package/src/ui/components/PhaseIndicator.tsx +0 -341
  291. package/src/ui/components/PlayArea.tsx +0 -146
  292. package/src/ui/components/PrimaryActionButton.tsx +0 -336
  293. package/src/ui/components/PrimaryButton.tsx +0 -45
  294. package/src/ui/components/ResourceCounter.tsx +0 -270
  295. package/src/ui/components/StagingZone.tsx +0 -134
  296. package/src/ui/components/ThemedButton.tsx +0 -113
  297. package/src/ui/components/Toast.tsx +0 -264
  298. package/src/ui/components/board/HexGrid.tsx +0 -1294
  299. package/src/ui/components/board/NetworkGraph.tsx +0 -476
  300. package/src/ui/components/board/SlotSystem.tsx +0 -388
  301. package/src/ui/components/board/SquareGrid.tsx +0 -1165
  302. package/src/ui/components/board/TrackBoard.tsx +0 -496
  303. package/src/ui/components/board/ZoneMap.tsx +0 -448
  304. package/src/ui/components/board/hex-board-view.ts +0 -123
  305. package/src/ui/components/board/index.ts +0 -142
  306. package/src/ui/components/board/interaction-accessibility.ts +0 -21
  307. package/src/ui/components/board/target-layer.ts +0 -66
  308. package/src/ui/components/card-render-content.type-test.ts +0 -27
  309. package/src/ui/components/hand-layout-math.ts +0 -163
  310. package/src/ui/components/hand-pointer-engine.ts +0 -413
  311. package/src/ui/components/index.ts +0 -245
  312. package/src/ui/components.ts +0 -1
  313. package/src/ui/defaults/components.tsx +0 -106
  314. package/src/ui/defaults/index.ts +0 -8
  315. package/src/ui/defaults.ts +0 -1
  316. package/src/ui/errors/ValidationError.ts +0 -29
  317. package/src/ui/helpers/cards.ts +0 -19
  318. package/src/ui/helpers/track-board.ts +0 -211
  319. package/src/ui/hooks/useBoardTopology.ts +0 -316
  320. package/src/ui/hooks/useCards.ts +0 -10
  321. package/src/ui/hooks/useHandCardPointer.ts +0 -381
  322. package/src/ui/hooks/useHandLayout.ts +0 -378
  323. package/src/ui/hooks/useHandPresentation.ts +0 -121
  324. package/src/ui/hooks/useHexBoard.ts +0 -74
  325. package/src/ui/hooks/useHexGrid.ts +0 -185
  326. package/src/ui/hooks/useIsMobile.ts +0 -35
  327. package/src/ui/hooks/usePanZoom.ts +0 -278
  328. package/src/ui/hooks/useSquareBoard.ts +0 -124
  329. package/src/ui/hooks/useSquareGrid.ts +0 -328
  330. package/src/ui/index.ts +0 -98
  331. package/src/ui/internal/ui/alert.tsx +0 -51
  332. package/src/ui/internal/ui/button.tsx +0 -58
  333. package/src/ui/internal/ui/dialog.tsx +0 -134
  334. package/src/ui/internal/ui/input.tsx +0 -21
  335. package/src/ui/internal/ui/label.tsx +0 -21
  336. package/src/ui/internal/ui/select.tsx +0 -129
  337. package/src/ui/internal/ui/tooltip.tsx +0 -54
  338. package/src/ui/internal/ui/utils.ts +0 -5
  339. package/src/ui/plugin-styles.css +0 -250
  340. package/src/ui/primitives/dialog-lifecycle.ts +0 -58
  341. package/src/ui/primitives/dice.tsx +0 -79
  342. package/src/ui/primitives/primitive-props.tsx +0 -101
  343. package/src/ui/theme/ThemeProvider.tsx +0 -252
  344. package/src/ui/theme/board.ts +0 -61
  345. package/src/ui/theme/css-vars.ts +0 -105
  346. package/src/ui/theme/derive.ts +0 -240
  347. package/src/ui/theme/index.ts +0 -61
  348. package/src/ui/theme/presets/arcade.ts +0 -261
  349. package/src/ui/theme/presets/studio.ts +0 -261
  350. package/src/ui/theme/presets/tabletop.ts +0 -266
  351. package/src/ui/theme/tokens.ts +0 -392
  352. package/src/ui/types/hex-color.ts +0 -20
  353. package/src/ui/types/player-state.ts +0 -463
  354. package/src/ui/types/tiled-board.ts +0 -785
  355. package/src/ui/types/visual-state.ts +0 -137
  356. package/src/ui.ts +0 -1
  357. /package/dist/{chunk-I46YJSOD.js.map → browser-interaction.js.map} +0 -0
  358. /package/dist/{chunk-KAELH4KC.js.map → chunk-3RQEICD3.js.map} +0 -0
  359. /package/dist/{chunk-T52J5RMF.js.map → codegen.js.map} +0 -0
  360. /package/dist/{generated/runtime-api.js.map → reducer-contract.js.map} +0 -0
  361. /package/dist/runtime/{types/runtime-api.js.map → runtime-api.js.map} +0 -0
  362. /package/dist/ui/{types/player-state.js → player-state.js} +0 -0
  363. /package/dist/ui/{types/player-state.js.map → player-state.js.map} +0 -0
@@ -1,30 +0,0 @@
1
- export {
2
- type ClientParamSchema,
3
- type ClientParamSchemaMap,
4
- } from "./context/ClientParamSchemaContext.js";
5
-
6
- export type {
7
- GameplayPromptOption,
8
- GameplaySnapshot,
9
- PluginStateSnapshot,
10
- } from "./types/reducer-state.js";
11
- export type {
12
- InteractionDescriptor,
13
- InteractionContext,
14
- InteractionContextOption,
15
- ZoneHandlesSnapshot,
16
- } from "./types/plugin-state.js";
17
- export type { LobbyState } from "./hooks/useLobby.js";
18
- export type { Player } from "./hooks/useMe.js";
19
- export type { SeatInbox } from "./hooks/useSeatInbox.js";
20
- export type {
21
- DraftValidation,
22
- InteractionHandle,
23
- InteractionHandleStatus,
24
- InteractionParamsShape,
25
- } from "./hooks/useInteractionHandle.js";
26
- export type {
27
- CardCollection,
28
- ViewCard,
29
- ViewSlotOccupant,
30
- } from "../types/index.js";
@@ -1,605 +0,0 @@
1
- import { z } from "zod";
2
- import type { PlayerId } from "@dreamboard/manifest-contract";
3
- import type {
4
- RuntimeAPI,
5
- PluginSessionState,
6
- ValidationResult,
7
- } from "../types/runtime-api.js";
8
- import type { PluginStateSnapshot } from "../types/plugin-state.js";
9
-
10
- /**
11
- * Message schemas from main app to plugin
12
- * We define them here to avoid circular dependencies with apps/web
13
- */
14
-
15
- // Main → Plugin: Initialize plugin with session info
16
- const InitMessageSchema = z.object({
17
- type: z.literal("init"),
18
- sessionId: z.string(),
19
- controllablePlayerIds: z.array(z.string()),
20
- controllingPlayerId: z.string(),
21
- userId: z.string().nullable(),
22
- });
23
-
24
- // Main → Plugin: Health check ping
25
- const PingMessageSchema = z.object({
26
- type: z.literal("ping"),
27
- });
28
-
29
- // Main → Plugin: State sync - sends complete state snapshot
30
- const StateSyncMessageSchema = z.object({
31
- type: z.literal("state-sync"),
32
- syncId: z.number(),
33
- state: z.custom<PluginStateSnapshot>((data: unknown) => {
34
- return (
35
- typeof data === "object" &&
36
- data !== null &&
37
- "session" in data &&
38
- "notifications" in data
39
- );
40
- }),
41
- });
42
-
43
- // Main → Plugin: Validation result response
44
- const ValidateInteractionResultMessageSchema = z.object({
45
- type: z.literal("validate-interaction-result"),
46
- messageId: z.string(),
47
- result: z.object({
48
- valid: z.boolean(),
49
- errorCode: z.string().nullable().optional(),
50
- message: z.string().nullable().optional(),
51
- }),
52
- });
53
-
54
- const SubmitResultMessageSchema = z.object({
55
- type: z.literal("submit-result"),
56
- messageId: z.string(),
57
- accepted: z.boolean(),
58
- errorCode: z.string().nullable().optional(),
59
- message: z.string().nullable().optional(),
60
- });
61
-
62
- // Union of all messages from main → plugin
63
- const MainToPluginMessageSchema = z.discriminatedUnion("type", [
64
- InitMessageSchema,
65
- PingMessageSchema,
66
- StateSyncMessageSchema,
67
- ValidateInteractionResultMessageSchema,
68
- SubmitResultMessageSchema,
69
- ]);
70
-
71
- /**
72
- * Extended RuntimeAPI with plugin-specific methods for state-sync architecture.
73
- */
74
- export interface PluginRuntimeAPI extends RuntimeAPI {
75
- /**
76
- * Get the current state snapshot.
77
- * Returns null if no state-sync has been received yet.
78
- *
79
- * @example
80
- * ```typescript
81
- * const snapshot = runtime.getSnapshot();
82
- * if (snapshot?.view) {
83
- * console.log('Current view:', snapshot.view);
84
- * }
85
- * ```
86
- */
87
- getSnapshot: () => PluginStateSnapshot | null;
88
-
89
- /**
90
- * Subscribe to state changes from state-sync messages.
91
- * Called whenever the host sends a new state-sync.
92
- *
93
- * @param listener - Callback invoked with new state snapshot
94
- * @returns Unsubscribe function
95
- *
96
- * @example
97
- * ```typescript
98
- * const unsubscribe = runtime.subscribeToState((state) => {
99
- * console.log('New phase:', state.gameplay.currentPhase);
100
- * });
101
- * ```
102
- */
103
- subscribeToState: (
104
- listener: (state: PluginStateSnapshot) => void,
105
- ) => () => void;
106
-
107
- /** Internal API for RuntimeContext to subscribe to session state changes */
108
- _subscribeToSessionState: (
109
- listener: (state: PluginSessionState) => void,
110
- ) => () => void;
111
-
112
- /**
113
- * Request to restore game state to a previous history entry.
114
- * Only works if the user is the host.
115
- *
116
- * @param entryId - ID of the history entry to restore to
117
- *
118
- * @example
119
- * ```typescript
120
- * // Restore to a previous state
121
- * runtime.restoreHistory?.('entry-abc-123');
122
- * ```
123
- */
124
- restoreHistory?: (entryId: string) => void;
125
- }
126
-
127
- /**
128
- * Mint a client-side correlation id for a single submitted interaction.
129
- * This id flows plugin -> host gateway -> backend HTTP header
130
- * (`X-Dreamboard-Client-Action-Id`), and back to the host via the recorded
131
- * `version -> actionId` map so the full t0..t8 latency trace can be
132
- * assembled for Tier-0 input-latency observability. Falls back to a
133
- * timestamp-seeded pseudo-uuid on environments without `crypto.randomUUID`
134
- * (older sandboxed browsers in tests) so we never crash the plugin.
135
- */
136
- const mintClientActionId = (): string => {
137
- const cryptoLike = (
138
- globalThis as typeof globalThis & {
139
- crypto?: { randomUUID?: () => string };
140
- }
141
- ).crypto;
142
- if (cryptoLike?.randomUUID) {
143
- try {
144
- return cryptoLike.randomUUID();
145
- } catch {
146
- // fall through to fallback
147
- }
148
- }
149
- const rand = Math.random().toString(16).slice(2);
150
- return `cid-${Date.now().toString(16)}-${rand}`;
151
- };
152
-
153
- const PLUGIN_RUNTIME_SINGLETON_KEY = "__dreamboardPluginRuntimeApi";
154
-
155
- type PluginRuntimeGlobal = typeof globalThis & {
156
- [PLUGIN_RUNTIME_SINGLETON_KEY]?: PluginRuntimeAPI;
157
- };
158
-
159
- /**
160
- * Creates a RuntimeAPI implementation for plugin iframes.
161
- *
162
- * Architecture (state-sync):
163
- * - Host maintains all state in GameSessionStore
164
- * - Host sends complete state snapshots via state-sync messages
165
- * - Plugin stores received state and notifies subscribers
166
- * - No buffering needed - plugin only renders when state exists
167
- *
168
- * Security:
169
- * - Plugin runs in sandboxed iframe (no network access, no same-origin)
170
- * - All backend communication goes through main app
171
- *
172
- * @returns PluginRuntimeAPI instance
173
- */
174
- export function createPluginRuntimeAPI(): PluginRuntimeAPI {
175
- const existingRuntime = (globalThis as PluginRuntimeGlobal)[
176
- PLUGIN_RUNTIME_SINGLETON_KEY
177
- ];
178
- if (existingRuntime) {
179
- return existingRuntime;
180
- }
181
-
182
- // State-sync state
183
- let currentStateSnapshot: PluginStateSnapshot | null = null;
184
- const stateListeners = new Set<(state: PluginStateSnapshot) => void>();
185
-
186
- // Session state
187
- const sessionState: PluginSessionState = {
188
- status: "loading",
189
- sessionId: null,
190
- controllablePlayerIds: [],
191
- controllingPlayerId: null,
192
- userId: null,
193
- };
194
- const sessionStateListeners = new Set<(state: PluginSessionState) => void>();
195
-
196
- // Pending validation requests
197
- const pendingValidations = new Map<
198
- string,
199
- (result: ValidationResult) => void
200
- >();
201
- let validationIdCounter = 0;
202
- const pendingSubmissions = new Map<
203
- string,
204
- {
205
- resolve: () => void;
206
- reject: (error: Error & { errorCode?: string }) => void;
207
- }
208
- >();
209
- let submitIdCounter = 0;
210
-
211
- // Helper functions
212
- const notifySessionStateChange = () => {
213
- sessionStateListeners.forEach((listener) => {
214
- try {
215
- listener({ ...sessionState });
216
- } catch {
217
- // Silently catch listener errors
218
- }
219
- });
220
- };
221
-
222
- const notifyStateListeners = () => {
223
- if (!currentStateSnapshot) return;
224
- const snapshot = currentStateSnapshot;
225
- stateListeners.forEach((listener) => {
226
- try {
227
- listener(snapshot);
228
- } catch {
229
- // Silently catch listener errors
230
- }
231
- });
232
- };
233
-
234
- const createSubmissionError = (
235
- errorCode?: string,
236
- message?: string,
237
- ): Error & { errorCode?: string } => {
238
- const error = new Error(message ?? "Submission failed") as Error & {
239
- errorCode?: string;
240
- name: string;
241
- };
242
- error.name = "SubmissionError";
243
- error.errorCode = errorCode;
244
- return error;
245
- };
246
-
247
- const submitViaParent = (payload: {
248
- type: "interaction";
249
- playerId: PlayerId;
250
- interactionId: string;
251
- params: unknown;
252
- clientActionId?: string;
253
- }): Promise<void> =>
254
- new Promise((resolve, reject) => {
255
- const messageId = `submit-${++submitIdCounter}`;
256
- pendingSubmissions.set(messageId, { resolve, reject });
257
-
258
- // Plugin-iframe `Date.now()` ships alongside the postMessage
259
- // as the `t0_click` timestamp for Tier-0 input-latency
260
- // observability. Date.now() (not performance.now()) is
261
- // intentional: the iframe and the host share a wall-clock
262
- // base but not a `performance.now()` origin.
263
- const clientSubmittedAtMs = Date.now();
264
-
265
- if (payload.clientActionId && typeof performance !== "undefined") {
266
- try {
267
- performance.mark(`dreamboard.t0_click.${payload.clientActionId}`, {
268
- detail: { clientActionId: payload.clientActionId },
269
- });
270
- } catch {
271
- // performance.mark detail arg not supported in older browsers; ignore
272
- }
273
- }
274
-
275
- window.parent.postMessage(
276
- { ...payload, messageId, clientSubmittedAtMs },
277
- "*",
278
- );
279
-
280
- setTimeout(() => {
281
- const pending = pendingSubmissions.get(messageId);
282
- if (!pending) {
283
- return;
284
- }
285
- pendingSubmissions.delete(messageId);
286
- pending.reject(
287
- createSubmissionError(
288
- "submission-timeout",
289
- "Submission request timed out",
290
- ),
291
- );
292
- }, 10000);
293
- });
294
-
295
- // Message handler
296
- const handleMessage = (event: MessageEvent) => {
297
- const rawMessage = event.data;
298
-
299
- const parseResult = MainToPluginMessageSchema.safeParse(rawMessage);
300
- if (!parseResult.success) {
301
- // Only warn for messages that look like they're meant for us
302
- if (rawMessage?.type && typeof rawMessage.type === "string") {
303
- // eslint-disable-next-line no-console
304
- console.warn(
305
- "[Plugin RuntimeAPI] Invalid message received:",
306
- rawMessage.type,
307
- );
308
- }
309
- return;
310
- }
311
-
312
- const message = parseResult.data;
313
-
314
- switch (message.type) {
315
- case "init": {
316
- // eslint-disable-next-line no-console
317
- console.log("[Plugin RuntimeAPI] Received init message");
318
-
319
- sessionState.status = "ready";
320
- sessionState.sessionId = message.sessionId;
321
- sessionState.controllablePlayerIds =
322
- message.controllablePlayerIds as PlayerId[];
323
- sessionState.controllingPlayerId =
324
- message.controllingPlayerId as PlayerId;
325
- sessionState.userId = message.userId;
326
-
327
- notifySessionStateChange();
328
- window.parent.postMessage({ type: "ready" }, "*");
329
- break;
330
- }
331
-
332
- case "ping": {
333
- window.parent.postMessage({ type: "pong" }, "*");
334
- break;
335
- }
336
-
337
- case "state-sync": {
338
- // Handle state-sync from host
339
- // eslint-disable-next-line no-console
340
- console.log(
341
- "[Plugin RuntimeAPI] Received state-sync, syncId:",
342
- message.syncId,
343
- );
344
-
345
- // Tier-0 perf: capture `t7_state_sync_received` wall-clock
346
- // timestamp up-front so the host can stitch it onto the
347
- // perf HUD via the outgoing state-ack message.
348
- const clientReceivedAtMs = Date.now();
349
- if (typeof performance !== "undefined") {
350
- try {
351
- performance.mark(
352
- `dreamboard.t7_state_sync_received.sync-${message.syncId}`,
353
- { detail: { syncId: message.syncId } },
354
- );
355
- } catch {
356
- // performance.mark detail arg not supported; ignore
357
- }
358
- }
359
-
360
- currentStateSnapshot = message.state;
361
-
362
- // Update session state from snapshot
363
- if (message.state.session) {
364
- sessionState.sessionId = message.state.session.sessionId;
365
- sessionState.controllablePlayerIds =
366
- message.state.session.controllablePlayerIds;
367
- sessionState.controllingPlayerId =
368
- message.state.session.controllingPlayerId;
369
- sessionState.userId = message.state.session.userId;
370
- sessionState.status = "ready";
371
- notifySessionStateChange();
372
- }
373
-
374
- // Notify state listeners
375
- notifyStateListeners();
376
-
377
- // Send acknowledgment (carrying t7 timestamp for the host
378
- // perf HUD; host ignores it when perf is disabled).
379
- window.parent.postMessage(
380
- {
381
- type: "state-ack",
382
- syncId: message.syncId,
383
- clientReceivedAtMs,
384
- },
385
- "*",
386
- );
387
-
388
- // Tier-0 perf: after notifyStateListeners has kicked React's
389
- // render, schedule a post-commit microtask + rAF chain so the
390
- // paired `state-rendered` message lands close to when the
391
- // plugin's DOM would have been painted. `queueMicrotask` is
392
- // used first because most React listeners finish synchronously;
393
- // `requestAnimationFrame` then bounces to the next paint tick.
394
- const schedulePostRender = () => {
395
- const send = () => {
396
- const clientRenderedAtMs = Date.now();
397
- if (typeof performance !== "undefined") {
398
- try {
399
- performance.mark(
400
- `dreamboard.t8_render_commit.sync-${message.syncId}`,
401
- { detail: { syncId: message.syncId } },
402
- );
403
- } catch {
404
- // ignore
405
- }
406
- }
407
- window.parent.postMessage(
408
- {
409
- type: "state-rendered",
410
- syncId: message.syncId,
411
- clientReceivedAtMs,
412
- clientRenderedAtMs,
413
- },
414
- "*",
415
- );
416
- };
417
- if (typeof requestAnimationFrame === "function") {
418
- requestAnimationFrame(send);
419
- } else {
420
- queueMicrotask(send);
421
- }
422
- };
423
- queueMicrotask(schedulePostRender);
424
-
425
- break;
426
- }
427
-
428
- case "validate-interaction-result": {
429
- const resolver = pendingValidations.get(message.messageId);
430
- if (resolver) {
431
- pendingValidations.delete(message.messageId);
432
- resolver({
433
- valid: message.result.valid,
434
- errorCode: message.result.errorCode ?? undefined,
435
- message: message.result.message ?? undefined,
436
- });
437
- }
438
- break;
439
- }
440
-
441
- case "submit-result": {
442
- const pending = pendingSubmissions.get(message.messageId);
443
- if (!pending) {
444
- break;
445
- }
446
-
447
- if (typeof performance !== "undefined") {
448
- try {
449
- performance.mark(`dreamboard.t3b_ack.${message.messageId}`, {
450
- detail: { messageId: message.messageId },
451
- });
452
- } catch {
453
- // ignore
454
- }
455
- }
456
-
457
- pendingSubmissions.delete(message.messageId);
458
- if (message.accepted) {
459
- pending.resolve();
460
- } else {
461
- pending.reject(
462
- createSubmissionError(
463
- message.errorCode ?? undefined,
464
- message.message ?? undefined,
465
- ),
466
- );
467
- }
468
- break;
469
- }
470
- }
471
- };
472
-
473
- window.addEventListener("message", handleMessage);
474
-
475
- // Error handlers
476
- const sendErrorToParent = (message: string, code: string, stack?: string) => {
477
- // eslint-disable-next-line no-console
478
- console.error(`[Plugin RuntimeAPI] ${code}:`, message, stack || "");
479
- window.parent.postMessage(
480
- {
481
- type: "error",
482
- message: stack ? `${message}\n${stack}` : message,
483
- code,
484
- },
485
- "*",
486
- );
487
- };
488
-
489
- window.onerror = (message, source, lineno, colno, error) => {
490
- const errorMessage =
491
- typeof message === "string" ? message : error?.message || "Unknown error";
492
- const location = source ? ` at ${source}:${lineno}:${colno}` : "";
493
- sendErrorToParent(errorMessage + location, "UNCAUGHT_ERROR", error?.stack);
494
- return false;
495
- };
496
-
497
- window.onunhandledrejection = (event: PromiseRejectionEvent) => {
498
- const reason = event.reason;
499
- const message =
500
- reason instanceof Error
501
- ? reason.message
502
- : typeof reason === "string"
503
- ? reason
504
- : JSON.stringify(reason);
505
- const stack = reason instanceof Error ? reason.stack : undefined;
506
- sendErrorToParent(message, "UNHANDLED_REJECTION", stack);
507
- };
508
-
509
- // eslint-disable-next-line no-console
510
- console.log("[Plugin RuntimeAPI] ✅ Initialized (state-sync architecture)");
511
-
512
- const runtime: PluginRuntimeAPI = {
513
- // State-sync methods
514
- getSnapshot: () => currentStateSnapshot,
515
-
516
- subscribeToState: (listener) => {
517
- stateListeners.add(listener);
518
- // Immediately notify with current state if available
519
- if (currentStateSnapshot) {
520
- try {
521
- listener(currentStateSnapshot);
522
- } catch {
523
- // Silently catch listener errors
524
- }
525
- }
526
- return () => {
527
- stateListeners.delete(listener);
528
- };
529
- },
530
-
531
- validateInteraction: async (playerId, interactionId, params) => {
532
- return new Promise((resolve) => {
533
- const messageId = `validate-${++validationIdCounter}`;
534
- pendingValidations.set(messageId, resolve);
535
-
536
- window.parent.postMessage(
537
- {
538
- type: "validate-interaction",
539
- playerId,
540
- interactionId,
541
- params,
542
- messageId,
543
- },
544
- "*",
545
- );
546
-
547
- // Timeout after 10 seconds to avoid hanging forever
548
- setTimeout(() => {
549
- if (pendingValidations.has(messageId)) {
550
- pendingValidations.delete(messageId);
551
- resolve({
552
- valid: false,
553
- errorCode: "validation-timeout",
554
- message: "Validation request timed out",
555
- });
556
- }
557
- }, 10000);
558
- });
559
- },
560
-
561
- submitInteraction: async (playerId, interactionId, params) =>
562
- submitViaParent({
563
- type: "interaction",
564
- playerId,
565
- interactionId,
566
- params,
567
- clientActionId: mintClientActionId(),
568
- }),
569
-
570
- getSessionState: () => ({ ...sessionState }),
571
-
572
- disconnect: () => {
573
- window.removeEventListener("message", handleMessage);
574
- window.onerror = null;
575
- window.onunhandledrejection = null;
576
- sessionStateListeners.clear();
577
- stateListeners.clear();
578
- pendingValidations.clear();
579
- pendingSubmissions.clear();
580
- currentStateSnapshot = null;
581
- },
582
-
583
- switchPlayer: (playerId: PlayerId) => {
584
- window.parent.postMessage({ type: "switch-player", playerId }, "*");
585
- },
586
-
587
- restoreHistory: (entryId: string) => {
588
- window.parent.postMessage({ type: "restore-history", entryId }, "*");
589
- },
590
-
591
- _subscribeToSessionState: (
592
- listener: (state: PluginSessionState) => void,
593
- ) => {
594
- sessionStateListeners.add(listener);
595
- listener({ ...sessionState });
596
- return () => {
597
- sessionStateListeners.delete(listener);
598
- };
599
- },
600
- };
601
-
602
- (globalThis as PluginRuntimeGlobal)[PLUGIN_RUNTIME_SINGLETON_KEY] = runtime;
603
-
604
- return runtime;
605
- }