@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,546 +0,0 @@
1
- import type { InteractionUiStore } from "../context/InteractionDraftContext.js";
2
- import type {
3
- InteractionDescriptor,
4
- PluginStateSnapshot,
5
- ZoneHandlesSnapshot,
6
- } from "../types/plugin-state.js";
7
- import {
8
- inputByKey,
9
- inputByTarget,
10
- isResolvedTargetDomain,
11
- isTargetDomain,
12
- } from "./interaction-inputs.js";
13
- import {
14
- claimInteractionSubmit,
15
- clearInteractionRoute,
16
- markInteractionPending,
17
- routeCardInputIntent,
18
- shouldRouteInteractionPending,
19
- type InteractionDraftReadiness,
20
- type RoutedInteractionTargetResult,
21
- } from "./interaction-router.js";
22
- import { isInteractionAvailable } from "./interaction-status.js";
23
-
24
- /**
25
- * Opaque drop-target identifier emitted by SDK presentation. The runtime
26
- * adapter resolves it back into a typed `(inputKey, value)` pair against the
27
- * descriptor of the card the drop is for.
28
- *
29
- * Two encodings are supported, both opaque to SDK presentation:
30
- *
31
- * - `dreamboard:drop:input:<inputKey>:<value>` — explicit collector input
32
- * key. Used by callers (CLI/scaffold tests, lower-level adapters) that
33
- * already know the descriptor input shape.
34
- * - `dreamboard:drop:kind:<targetKind>:<value>` — typed kind reference.
35
- * Used by the generated hand surface, where authors describe a target by
36
- * its domain kind (`card` for staging, `space`/`edge`/`vertex`/`tile`
37
- * for board destinations). The runtime adapter resolves it to the
38
- * matching collector input on the live descriptor at drop time.
39
- */
40
- export type RuntimeDropTargetId = string;
41
-
42
- const DROP_TARGET_PREFIX = "dreamboard:drop";
43
-
44
- export type RuntimeDropTargetKind =
45
- | "card"
46
- | "space"
47
- | "edge"
48
- | "vertex"
49
- | "tile";
50
-
51
- /**
52
- * Build an opaque drop-target id keyed by the descriptor input name. Used
53
- * when the caller already knows the collector input shape.
54
- */
55
- export function encodeRuntimeDropTargetId(
56
- inputKey: string,
57
- value: string,
58
- ): RuntimeDropTargetId {
59
- return `${DROP_TARGET_PREFIX}:input:${inputKey}:${value}`;
60
- }
61
-
62
- /**
63
- * Build an opaque drop-target id keyed by typed target kind. Used by the
64
- * generated hand surface, where authors do not (and should not) know the
65
- * collector input names.
66
- */
67
- export function encodeRuntimeDropTargetKind(
68
- kind: RuntimeDropTargetKind,
69
- value: string,
70
- ): RuntimeDropTargetId {
71
- return `${DROP_TARGET_PREFIX}:kind:${kind}:${value}`;
72
- }
73
-
74
- export type DecodedRuntimeDropTarget =
75
- | { mode: "input"; inputKey: string; value: string }
76
- | { mode: "kind"; kind: RuntimeDropTargetKind; value: string };
77
-
78
- export function decodeRuntimeDropTargetId(
79
- targetId: RuntimeDropTargetId,
80
- ): DecodedRuntimeDropTarget | null {
81
- if (!targetId.startsWith(`${DROP_TARGET_PREFIX}:`)) return null;
82
- const rest = targetId.slice(DROP_TARGET_PREFIX.length + 1);
83
- if (rest.startsWith("input:")) {
84
- const body = rest.slice("input:".length);
85
- const sep = body.indexOf(":");
86
- if (sep === -1) return null;
87
- return {
88
- mode: "input",
89
- inputKey: body.slice(0, sep),
90
- value: body.slice(sep + 1),
91
- };
92
- }
93
- if (rest.startsWith("kind:")) {
94
- const body = rest.slice("kind:".length);
95
- const sep = body.indexOf(":");
96
- if (sep === -1) return null;
97
- const kind = body.slice(0, sep) as RuntimeDropTargetKind;
98
- const value = body.slice(sep + 1);
99
- if (
100
- kind === "card" ||
101
- kind === "space" ||
102
- kind === "edge" ||
103
- kind === "vertex" ||
104
- kind === "tile"
105
- ) {
106
- return { mode: "kind", kind, value };
107
- }
108
- return null;
109
- }
110
- // Legacy format, kept for any external callers still using
111
- // `dreamboard:drop:<inputKey>:<value>`. New writers should use one of the
112
- // namespaced encoders above.
113
- const sep = rest.indexOf(":");
114
- if (sep === -1) return null;
115
- return {
116
- mode: "input",
117
- inputKey: rest.slice(0, sep),
118
- value: rest.slice(sep + 1),
119
- };
120
- }
121
-
122
- export interface CardIntentAdapterContext {
123
- store: InteractionUiStore;
124
- /** Project-side snapshot of all available interactions (gameplay slice). */
125
- availableInteractions: readonly InteractionDescriptor[];
126
- /** Zone snapshot for the originating hand. */
127
- zoneSnapshot: ZoneHandlesSnapshot | null;
128
- /** Submit through the canonical runtime path. */
129
- submit: (
130
- descriptor: InteractionDescriptor,
131
- params: Record<string, unknown>,
132
- ) => Promise<void>;
133
- /**
134
- * Optional explicit interaction key. When provided, the adapter only routes
135
- * intents through this interaction; otherwise it picks the first interaction
136
- * eligible for the card.
137
- */
138
- interactionKey?: string;
139
- }
140
-
141
- export type CardIntentInput =
142
- | { type: "activate"; cardId: string }
143
- | { type: "drop"; cardId: string; targetId: string };
144
-
145
- export type CardIntentResult =
146
- | { status: "ignored"; reason: CardIntentIgnoredReason }
147
- | {
148
- status: "pending";
149
- descriptor: InteractionDescriptor;
150
- readiness: InteractionDraftReadiness;
151
- params: Record<string, unknown>;
152
- }
153
- | {
154
- status: "submitted";
155
- descriptor: InteractionDescriptor;
156
- readiness: InteractionDraftReadiness;
157
- params: Record<string, unknown>;
158
- }
159
- | {
160
- status: "submitting";
161
- descriptor: InteractionDescriptor;
162
- readiness: InteractionDraftReadiness;
163
- params: Record<string, unknown>;
164
- }
165
- | {
166
- status: "error";
167
- descriptor: InteractionDescriptor;
168
- error: unknown;
169
- };
170
-
171
- export type CardIntentIgnoredReason =
172
- | "no-descriptor"
173
- | "interaction-unavailable"
174
- | "no-card-input"
175
- | "card-not-eligible"
176
- | "drop-target-not-decodable"
177
- | "drop-target-input-unknown"
178
- | "drop-target-not-eligible"
179
- | "ambiguous-drop"
180
- | "already-submitting";
181
-
182
- interface CardRouteCandidate {
183
- descriptor: InteractionDescriptor;
184
- cardInputKey: string;
185
- }
186
-
187
- /**
188
- * Enumerate descriptors that can accept this card. Used both to pick a
189
- * single-action route for `activate` intents and to filter joint
190
- * `(card, destination)` matches for `drop` intents.
191
- */
192
- function listCardRouteCandidates(
193
- ctx: CardIntentAdapterContext,
194
- cardId: string,
195
- ): CardRouteCandidate[] {
196
- const explicitKey = ctx.interactionKey;
197
- const candidates = ctx.zoneSnapshot
198
- ? (ctx.zoneSnapshot.playableByCardId[cardId] ?? [])
199
- : ctx.availableInteractions.filter(
200
- (descriptor) =>
201
- !explicitKey ||
202
- descriptor.interactionKey === explicitKey ||
203
- descriptor.interactionId === explicitKey,
204
- );
205
- const result: CardRouteCandidate[] = [];
206
- for (const descriptor of candidates) {
207
- if (explicitKey && descriptor.interactionKey !== explicitKey) continue;
208
- if (!isInteractionAvailable(descriptor)) continue;
209
- const targetInput = inputByTarget(descriptor, "card", cardId);
210
- if (targetInput) {
211
- result.push({ descriptor, cardInputKey: targetInput.key });
212
- continue;
213
- }
214
- const fallback = descriptor.inputs.find((input) => input.key === "cardId");
215
- if (fallback && isTargetDomain(fallback.domain)) {
216
- result.push({ descriptor, cardInputKey: fallback.key });
217
- }
218
- }
219
- return result;
220
- }
221
-
222
- /**
223
- * Apply an SDK `CardIntent` (generic activate/drop) to canonical Dreamboard
224
- * collector state. Returns the runtime classification for the call site to
225
- * react to (pending vs submitted vs ignored).
226
- *
227
- * Behavior:
228
- * - `activate` is mapped onto `routeCardInputIntent` with no destination.
229
- * - `drop` decodes the opaque target id; when it points at a typed input on
230
- * the same descriptor, both the card and the destination are written
231
- * atomically before readiness/`autoWhenReady` is evaluated.
232
- * - Disabled, unavailable or ineligible intents return `ignored` even if the
233
- * caller emits them.
234
- */
235
- export async function applyCardIntent(
236
- ctx: CardIntentAdapterContext,
237
- intent: CardIntentInput,
238
- ): Promise<CardIntentResult> {
239
- const candidates = listCardRouteCandidates(ctx, intent.cardId);
240
- if (candidates.length === 0) {
241
- return { status: "ignored", reason: "no-descriptor" };
242
- }
243
- // Filter out candidates whose card input rejects this card. The card
244
- // domain may be unresolved (lazy) — those still pass since their
245
- // eligibility is computed from the draft itself.
246
- const cardEligible = candidates.filter(({ descriptor, cardInputKey }) => {
247
- const cardInput = inputByKey(descriptor, cardInputKey);
248
- if (!cardInput) return false;
249
- if (!isResolvedTargetDomain(cardInput.domain)) return true;
250
- return cardInput.domain.eligibleTargets.includes(intent.cardId);
251
- });
252
- if (cardEligible.length === 0) {
253
- return { status: "ignored", reason: "card-not-eligible" };
254
- }
255
-
256
- let descriptor: InteractionDescriptor;
257
- let cardInputKey: string;
258
- let dropTarget: { inputKey: string; value: string } | undefined;
259
-
260
- if (intent.type === "drop") {
261
- const decoded = decodeRuntimeDropTargetId(intent.targetId);
262
- if (!decoded) {
263
- return { status: "ignored", reason: "drop-target-not-decodable" };
264
- }
265
- // Score every card-eligible candidate against the decoded destination.
266
- // A descriptor is a "match" only when it accepts both the card and the
267
- // dropped target; ambiguity is reported explicitly so authors can fix
268
- // the underlying descriptor projection rather than getting silent
269
- // submissions of the wrong action.
270
- const matches = cardEligible.flatMap((candidate) => {
271
- const resolvedInputKey =
272
- decoded.mode === "input"
273
- ? decoded.inputKey
274
- : resolveDropTargetInputKey(
275
- candidate.descriptor,
276
- decoded.kind,
277
- decoded.value,
278
- );
279
- if (!resolvedInputKey) return [];
280
- const dropInput = inputByKey(candidate.descriptor, resolvedInputKey);
281
- if (!dropInput) return [];
282
- if (
283
- isResolvedTargetDomain(dropInput.domain) &&
284
- !dropInput.domain.eligibleTargets.includes(decoded.value)
285
- ) {
286
- return [];
287
- }
288
- return [
289
- {
290
- ...candidate,
291
- dropTarget: { inputKey: resolvedInputKey, value: decoded.value },
292
- },
293
- ];
294
- });
295
- if (matches.length === 0) {
296
- // Distinguish "no descriptor declares this input/kind at all" from
297
- // "the dropped value is not eligible for any descriptor that does".
298
- const anyKnowsKey = cardEligible.some((candidate) => {
299
- if (decoded.mode === "input") {
300
- return (
301
- inputByKey(candidate.descriptor, decoded.inputKey) !== undefined
302
- );
303
- }
304
- return (
305
- resolveDropTargetInputKey(
306
- candidate.descriptor,
307
- decoded.kind,
308
- decoded.value,
309
- ) !== null
310
- );
311
- });
312
- return {
313
- status: "ignored",
314
- reason: anyKnowsKey
315
- ? "drop-target-not-eligible"
316
- : "drop-target-input-unknown",
317
- };
318
- }
319
- if (matches.length > 1) {
320
- // Ambiguity: more than one descriptor accepts both this card and this
321
- // destination. Signal so callers/tests catch the descriptor design
322
- // bug rather than the runtime silently picking one.
323
- return { status: "ignored", reason: "ambiguous-drop" };
324
- }
325
- descriptor = matches[0]!.descriptor;
326
- cardInputKey = matches[0]!.cardInputKey;
327
- dropTarget = matches[0]!.dropTarget;
328
- } else {
329
- descriptor = cardEligible[0]!.descriptor;
330
- cardInputKey = cardEligible[0]!.cardInputKey;
331
- }
332
-
333
- if (!isInteractionAvailable(descriptor)) {
334
- return { status: "ignored", reason: "interaction-unavailable" };
335
- }
336
- if (!inputByKey(descriptor, cardInputKey)) {
337
- return { status: "ignored", reason: "no-card-input" };
338
- }
339
-
340
- const routed: RoutedInteractionTargetResult = routeCardInputIntent(
341
- ctx.store,
342
- descriptor,
343
- {
344
- cardInputKey,
345
- cardId: intent.cardId,
346
- dropTarget,
347
- },
348
- );
349
-
350
- if (shouldRouteInteractionPending(descriptor, routed.readiness)) {
351
- markInteractionPending(ctx.store, descriptor);
352
- return {
353
- status: "pending",
354
- descriptor,
355
- readiness: routed.readiness,
356
- params: routed.params,
357
- };
358
- }
359
-
360
- if (!claimInteractionSubmit(ctx.store, descriptor)) {
361
- return {
362
- status: "submitting",
363
- descriptor,
364
- readiness: routed.readiness,
365
- params: routed.params,
366
- };
367
- }
368
-
369
- try {
370
- await ctx.submit(descriptor, routed.params);
371
- clearInteractionRoute(ctx.store, descriptor);
372
- return {
373
- status: "submitted",
374
- descriptor,
375
- readiness: routed.readiness,
376
- params: routed.params,
377
- };
378
- } catch (error) {
379
- return { status: "error", descriptor, error };
380
- } finally {
381
- ctx.store.setSubmitting(descriptor.interactionKey, false);
382
- }
383
- }
384
-
385
- /**
386
- * Resolve a typed drop-target kind/value pair to the descriptor's collector
387
- * input key. Authors describe targets at the type level (e.g. board space
388
- * `hex-a`) but the descriptor names that input by its authored collector
389
- * key (e.g. `spaceId`). This bridges the two without surfacing collector
390
- * names in the authoring API.
391
- */
392
- function resolveDropTargetInputKey(
393
- descriptor: InteractionDescriptor,
394
- kind: RuntimeDropTargetKind,
395
- value: string,
396
- ): string | null {
397
- // Prefer an input whose authoritative resolved domain advertises this
398
- // value as eligible. Falls back to a kind-only match for lazy domains.
399
- let kindOnlyMatch: string | null = null;
400
- for (const input of descriptor.inputs) {
401
- if (!matchesDropTargetKind(input.domain, kind)) continue;
402
- if (
403
- isResolvedTargetDomain(input.domain) &&
404
- input.domain.eligibleTargets.includes(value)
405
- ) {
406
- return input.key;
407
- }
408
- if (kindOnlyMatch === null) {
409
- kindOnlyMatch = input.key;
410
- }
411
- }
412
- return kindOnlyMatch;
413
- }
414
-
415
- function matchesDropTargetKind(
416
- domain: InteractionDescriptor["inputs"][number]["domain"],
417
- kind: RuntimeDropTargetKind,
418
- ): boolean {
419
- if (kind === "card") {
420
- return isTargetDomain(domain) && domain.type === "cardTarget";
421
- }
422
- return (
423
- isTargetDomain(domain) &&
424
- domain.type === "boardTarget" &&
425
- domain.targetKind === kind
426
- );
427
- }
428
-
429
- /**
430
- * Project descriptor + draft state into per-card visual flags used by the
431
- * runtime hand surface. Each entry tracks which card ids are currently part
432
- * of any card-target draft, and which of those have field validation errors.
433
- */
434
- export interface DraftCardProjectionEntry {
435
- descriptor: InteractionDescriptor;
436
- cardInputKeys: readonly string[];
437
- draftCardIds: ReadonlySet<string>;
438
- invalidCardIds: ReadonlySet<string>;
439
- }
440
-
441
- export function projectDraftCardState(
442
- availableInteractions: readonly InteractionDescriptor[],
443
- drafts: Readonly<Record<string, Readonly<Record<string, unknown>>>>,
444
- validate: (
445
- descriptor: InteractionDescriptor,
446
- draft: Readonly<Record<string, unknown>>,
447
- ) => Partial<Record<string, readonly string[]>>,
448
- ): DraftCardProjectionEntry[] {
449
- const entries: DraftCardProjectionEntry[] = [];
450
- for (const descriptor of availableInteractions) {
451
- const cardInputs = descriptor.inputs.filter(
452
- (input) =>
453
- isTargetDomain(input.domain) && input.domain.type === "cardTarget",
454
- );
455
- if (cardInputs.length === 0) continue;
456
- const draft = drafts[descriptor.interactionKey] ?? {};
457
- const draftCardIds = new Set<string>();
458
- for (const input of cardInputs) {
459
- const value = draft[input.key];
460
- if (Array.isArray(value)) {
461
- for (const item of value) {
462
- if (typeof item === "string") draftCardIds.add(item);
463
- }
464
- } else if (typeof value === "string") {
465
- draftCardIds.add(value);
466
- }
467
- }
468
- const fieldErrors = validate(descriptor, draft);
469
- const invalidCardIds = new Set<string>();
470
- for (const input of cardInputs) {
471
- if ((fieldErrors[input.key]?.length ?? 0) === 0) continue;
472
- const value = draft[input.key];
473
- if (Array.isArray(value)) {
474
- for (const item of value) {
475
- if (typeof item === "string") invalidCardIds.add(item);
476
- }
477
- } else if (typeof value === "string") {
478
- invalidCardIds.add(value);
479
- }
480
- }
481
- entries.push({
482
- descriptor,
483
- cardInputKeys: cardInputs.map((input) => input.key),
484
- draftCardIds,
485
- invalidCardIds,
486
- });
487
- }
488
- return entries;
489
- }
490
-
491
- export interface ProjectedCardVisualState {
492
- selected: boolean;
493
- invalid: boolean;
494
- }
495
-
496
- /**
497
- * Combine the per-descriptor projection into a single per-card flag tuple.
498
- */
499
- export function visualStateForCard(
500
- cardId: string,
501
- projection: readonly DraftCardProjectionEntry[],
502
- ): ProjectedCardVisualState {
503
- let selected = false;
504
- let invalid = false;
505
- for (const entry of projection) {
506
- if (entry.draftCardIds.has(cardId)) selected = true;
507
- if (entry.invalidCardIds.has(cardId)) invalid = true;
508
- }
509
- return { selected, invalid };
510
- }
511
-
512
- /**
513
- * Return the set of card ids that are currently part of a many-selection
514
- * draft for any descriptor in the zone. Used by the hand view to drop
515
- * selected cards out of the visible hand layout while keeping the runtime
516
- * source of truth in the zone snapshot.
517
- */
518
- export function selectedCardIdsForZone(
519
- store: Pick<InteractionUiStore, "getDraft">,
520
- zone: string,
521
- state: PluginStateSnapshot,
522
- ): readonly string[] {
523
- const result = new Set<string>();
524
- for (const descriptor of state.gameplay.availableInteractions) {
525
- const cardInput = descriptor.inputs.find((input) => {
526
- if (!isTargetDomain(input.domain)) return false;
527
- if (input.domain.type !== "cardTarget") return false;
528
- const declaredZones =
529
- input.domain.zoneId !== undefined
530
- ? [input.domain.zoneId]
531
- : (input.domain.zoneIds ?? []);
532
- return declaredZones.length === 0 || declaredZones.includes(zone);
533
- });
534
- if (!cardInput) continue;
535
- if (!isTargetDomain(cardInput.domain)) continue;
536
- if (cardInput.domain.type !== "cardTarget") continue;
537
- const draft = store.getDraft(descriptor.interactionKey);
538
- const value = draft[cardInput.key];
539
- if (cardInput.domain.selection?.mode === "many" && Array.isArray(value)) {
540
- for (const item of value) {
541
- if (typeof item === "string") result.add(item);
542
- }
543
- }
544
- }
545
- return [...result];
546
- }