@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,16 +1,23 @@
1
1
  import {
2
- createDreamboardUI
3
- } from "./chunk-U5C6BONG.js";
4
- import {
2
+ Board,
5
3
  ClientParamSchemaProvider,
4
+ Dice,
5
+ Game,
6
6
  HandStagingView,
7
7
  HandSurfaceView,
8
+ Interaction,
9
+ Phase,
10
+ PlayerRoster,
11
+ Prompt,
12
+ PromptInbox,
13
+ UI,
14
+ Zone,
8
15
  dropTargetIdFor,
9
16
  isInteractionAvailable,
10
17
  usePluginState,
11
18
  useResolvedCardTargetValue,
12
19
  useZoneCards
13
- } from "./chunk-TDSWKVZ4.js";
20
+ } from "./chunk-ADYH6PVT.js";
14
21
  import {
15
22
  CardFace,
16
23
  MobileHandTrayProvider,
@@ -18,144 +25,188 @@ import {
18
25
  createResourceCounter,
19
26
  useIsMobile,
20
27
  useRegisterMobileHand
21
- } from "./chunk-WYPQ3GG5.js";
28
+ } from "./chunk-QZ6X4B5P.js";
22
29
 
23
- // src/runtime-internal/workspace-contract.ts
24
- import { Fragment as ReactFragment, createElement, useMemo } from "react";
25
- import { clsx } from "clsx";
26
- var DEFAULT_ZONE_CARD_CLASS = "group relative border-0 bg-transparent p-0 transition-transform enabled:cursor-pointer enabled:hover:-translate-y-2 data-[selected=true]:-translate-y-3 disabled:cursor-not-allowed data-[eligible=false]:opacity-45 data-[eligible=false]:grayscale data-[eligible=false]:hover:translate-y-0 data-[card-available=false]:opacity-45 data-[card-available=false]:grayscale";
27
- function cardRenderItemToViewCard(card, cardId) {
28
- if (card && typeof card === "object" && "hidden" in card && card.hidden === false) {
29
- return card;
30
- }
30
+ // src/runtime/workspace-contract/index.ts
31
+ import { createElement as createElement6 } from "react";
32
+
33
+ // src/runtime/ui-contract.ts
34
+ function createDreamboardUI(contract) {
31
35
  return {
32
- id: cardId,
33
- cardType: "hidden",
34
- name: "Hidden card",
35
- properties: {}
36
+ contract,
37
+ Root: UI.Root,
38
+ Game,
39
+ Interaction,
40
+ Prompt,
41
+ PromptInbox,
42
+ PlayerRoster,
43
+ Dice,
44
+ Phase,
45
+ Zone,
46
+ Board
36
47
  };
37
48
  }
49
+
50
+ // src/runtime/workspace-contract/board.ts
51
+ import { createElement as createElement2 } from "react";
52
+
53
+ // src/runtime/workspace-contract/slots.ts
54
+ import { Fragment as ReactFragment, createElement } from "react";
38
55
  function CardSlotValue({
39
56
  children
40
57
  }) {
41
58
  const value = useResolvedCardTargetValue();
42
59
  return createElement(ReactFragment, null, children(value));
43
60
  }
44
- function createWorkspaceUIContract(options) {
45
- const baseUI = createDreamboardUI(options.uiContract);
46
- const runtimeInteraction = baseUI.Interaction;
47
- const runtimeBoard = baseUI.Board;
48
- const runtimeZone = baseUI.Zone;
49
- const resourceDisplayConfig = options.resourceIds.map((resource) => {
50
- const presentation = options.resourcePresentationById?.[resource];
61
+ function createFormInputSlot(ctx, input, interaction) {
62
+ const { baseUI, withInteractionRoot } = ctx;
63
+ return {
64
+ Field: (props) => {
65
+ const field = createElement(baseUI.Interaction.Field, {
66
+ ...props,
67
+ input
68
+ });
69
+ return interaction ? withInteractionRoot(interaction, field) : field;
70
+ },
71
+ Options: () => null,
72
+ Value: ({
73
+ children
74
+ }) => createElement(ReactFragment, null, children(void 0)),
75
+ Default: ({ children }) => createElement(ReactFragment, null, children)
76
+ };
77
+ }
78
+ function createCardInputSlot(ctx) {
79
+ const { runtimeInteraction } = ctx;
80
+ return {
81
+ Card: ({ value, ...props }) => createElement(runtimeInteraction.CardInput, {
82
+ ...props,
83
+ input: "cardId",
84
+ unsafeCardId: value
85
+ }),
86
+ Cards: () => null,
87
+ Value: ({
88
+ children
89
+ }) => createElement(CardSlotValue, { children }),
90
+ Default: ({ children }) => createElement(ReactFragment, null, children)
91
+ };
92
+ }
93
+ function createBoardTargetInputSlot(ctx, kind) {
94
+ const { runtimeBoard } = ctx;
95
+ const Target = ({
96
+ value,
97
+ ...props
98
+ }) => {
99
+ if (kind === "edge") {
100
+ return createElement(runtimeBoard.EdgeTarget, { ...props, value });
101
+ }
102
+ if (kind === "vertex") {
103
+ return createElement(runtimeBoard.VertexTarget, { ...props, value });
104
+ }
105
+ return createElement(runtimeBoard.SpaceTarget, { ...props, value });
106
+ };
107
+ return {
108
+ Target,
109
+ Value: ({
110
+ children
111
+ }) => createElement(ReactFragment, null, children(void 0)),
112
+ Default: ({ children }) => createElement(ReactFragment, null, children)
113
+ };
114
+ }
115
+
116
+ // src/runtime/workspace-contract/board.ts
117
+ function createUseBoardSurface(ctx) {
118
+ const { baseUI, runtimeBoard } = ctx;
119
+ return function useBoardSurface(_name) {
51
120
  return {
52
- type: resource,
53
- label: presentation?.label ?? resource,
54
- icon: presentation?.icon ?? resource
121
+ Root: ({ children }) => createElement2(baseUI.Board.Root, { children }),
122
+ Space: (props) => createElement2(runtimeBoard.SpaceTarget, props),
123
+ slot: {
124
+ space: createBoardTargetInputSlot(ctx, "space"),
125
+ playerSpace: createBoardTargetInputSlot(ctx, "space"),
126
+ edge: createBoardTargetInputSlot(ctx, "edge"),
127
+ vertex: createBoardTargetInputSlot(ctx, "vertex"),
128
+ tile: createBoardTargetInputSlot(ctx, "tile")
129
+ }
55
130
  };
56
- });
57
- const resourceCounter = createResourceCounter(
58
- resourceDisplayConfig
59
- );
131
+ };
132
+ }
133
+ function createBoardNamespace(ctx) {
134
+ const { options, baseUI } = ctx;
135
+ const useBoardSurface = createUseBoardSurface(ctx);
136
+ return {
137
+ surface(board) {
138
+ return { kind: "board", board };
139
+ },
140
+ useSurface: useBoardSurface,
141
+ HexView({ board: boardId, ...props }) {
142
+ return createElement2(
143
+ baseUI.Board.HexView,
144
+ {
145
+ ...props,
146
+ board: options.hexStaticBoards[boardId]
147
+ }
148
+ );
149
+ },
150
+ HexGrid({ board: boardId, ...props }) {
151
+ return createElement2(
152
+ baseUI.Board.HexGrid,
153
+ {
154
+ ...props,
155
+ board: options.hexStaticBoards[boardId]
156
+ }
157
+ );
158
+ }
159
+ };
160
+ }
161
+
162
+ // src/runtime/workspace-contract/forms.ts
163
+ import { createElement as createElement3 } from "react";
164
+ function createInteractionForms(ctx) {
165
+ const { options, baseUI, runtimeInteraction, withInteractionRoot } = ctx;
60
166
  function InteractionRoutes({
61
167
  routes,
62
168
  fallback,
63
169
  includeUnavailable
64
170
  }) {
65
- return createElement(runtimeInteraction.Routes, {
171
+ return createElement3(runtimeInteraction.Routes, {
66
172
  routes,
67
173
  fallback,
68
174
  includeUnavailable
69
175
  });
70
176
  }
71
- const withInteractionRoot = (interaction, children) => createElement(runtimeInteraction.Root, {
72
- interaction,
73
- children
74
- });
75
- function createFormInputSlot(input, interaction) {
76
- return {
77
- Field: (props) => {
78
- const field = createElement(baseUI.Interaction.Field, {
79
- ...props,
80
- input
81
- });
82
- return interaction ? withInteractionRoot(interaction, field) : field;
83
- },
84
- Options: () => null,
85
- Value: ({
86
- children
87
- }) => createElement(ReactFragment, null, children(void 0)),
88
- Default: ({ children }) => createElement(ReactFragment, null, children)
89
- };
90
- }
91
- function createCardInputSlot() {
92
- return {
93
- Card: ({ value, ...props }) => createElement(runtimeInteraction.CardInput, {
94
- ...props,
95
- input: "cardId",
96
- unsafeCardId: value
97
- }),
98
- Cards: () => null,
99
- Value: ({
100
- children
101
- }) => createElement(CardSlotValue, { children }),
102
- Default: ({ children }) => createElement(ReactFragment, null, children)
103
- };
104
- }
105
- function createBoardTargetInputSlot(kind) {
106
- const Target = ({
107
- value,
108
- ...props
109
- }) => {
110
- if (kind === "edge") {
111
- return createElement(runtimeBoard.EdgeTarget, { ...props, value });
112
- }
113
- if (kind === "vertex") {
114
- return createElement(runtimeBoard.VertexTarget, { ...props, value });
115
- }
116
- return createElement(runtimeBoard.SpaceTarget, { ...props, value });
117
- };
118
- return {
119
- Target,
120
- Value: ({
121
- children
122
- }) => createElement(ReactFragment, null, children(void 0)),
123
- Default: ({ children }) => createElement(ReactFragment, null, children)
124
- };
125
- }
126
177
  function useInteractionFormSurface(interaction) {
127
178
  const validInputs = options.formInputKeysForInteraction(interaction);
128
179
  const slot = Object.fromEntries(
129
180
  [...validInputs].map((input) => [
130
181
  input,
131
- createFormInputSlot(input, interaction)
182
+ createFormInputSlot(ctx, input, interaction)
132
183
  ])
133
184
  );
134
185
  return {
135
186
  Root: ({ children }) => withInteractionRoot(interaction, children),
136
187
  Form: (props) => withInteractionRoot(
137
188
  interaction,
138
- createElement(baseUI.Interaction.Form, props)
189
+ createElement3(baseUI.Interaction.Form, props)
139
190
  ),
140
191
  Dialog: (props) => withInteractionRoot(
141
192
  interaction,
142
- createElement(baseUI.Interaction.Dialog, props)
193
+ createElement3(baseUI.Interaction.Dialog, props)
143
194
  ),
144
195
  State: (props) => withInteractionRoot(
145
196
  interaction,
146
- createElement(baseUI.Interaction.State, props)
197
+ createElement3(baseUI.Interaction.State, props)
147
198
  ),
148
199
  Arm: (props) => withInteractionRoot(
149
200
  interaction,
150
- createElement(baseUI.Interaction.Trigger, props)
201
+ createElement3(baseUI.Interaction.Trigger, props)
151
202
  ),
152
203
  Submit: (props) => withInteractionRoot(
153
204
  interaction,
154
- createElement(baseUI.Interaction.Submit, props)
205
+ createElement3(baseUI.Interaction.Submit, props)
155
206
  ),
156
207
  Field: ({ input, ...props }) => withInteractionRoot(
157
208
  interaction,
158
- createElement(baseUI.Interaction.Field, {
209
+ createElement3(baseUI.Interaction.Field, {
159
210
  ...props,
160
211
  input
161
212
  })
@@ -163,41 +214,95 @@ function createWorkspaceUIContract(options) {
163
214
  slot
164
215
  };
165
216
  }
166
- function useBoardSurface(_name) {
167
- return {
168
- Root: ({ children }) => createElement(baseUI.Board.Root, { children }),
169
- Space: (props) => createElement(runtimeBoard.SpaceTarget, props),
170
- slot: {
171
- space: createBoardTargetInputSlot("space"),
172
- playerSpace: createBoardTargetInputSlot("space"),
173
- edge: createBoardTargetInputSlot("edge"),
174
- vertex: createBoardTargetInputSlot("vertex"),
175
- tile: createBoardTargetInputSlot("tile")
176
- }
177
- };
217
+ const Interaction2 = {
218
+ State: baseUI.Interaction.State,
219
+ Dialog: baseUI.Interaction.Dialog,
220
+ useForm: useInteractionFormSurface,
221
+ form(interaction) {
222
+ return { kind: "form", interaction };
223
+ },
224
+ forms(interactions) {
225
+ return { kind: "forms", interactions };
226
+ },
227
+ Routes: InteractionRoutes
228
+ };
229
+ return { Interaction: Interaction2, useInteractionFormSurface };
230
+ }
231
+
232
+ // src/runtime/workspace-contract/surfaces.ts
233
+ function isPlainObject(value) {
234
+ return !!value && typeof value === "object" && !Array.isArray(value);
235
+ }
236
+ function isSurfaceDescriptor(value) {
237
+ return isPlainObject(value) && typeof value.kind === "string";
238
+ }
239
+ function createSurfaceResolvers({
240
+ Board: Board2,
241
+ Zone: Zone2,
242
+ useInteractionFormSurface
243
+ }) {
244
+ function resolveSurfaceDescriptor(name, descriptor) {
245
+ switch (descriptor.kind) {
246
+ case "board":
247
+ return Board2.useSurface(name);
248
+ case "hand":
249
+ return Zone2.useHand(name, {
250
+ zone: descriptor.zone,
251
+ role: descriptor.role,
252
+ label: descriptor.label,
253
+ order: descriptor.order
254
+ });
255
+ case "pile":
256
+ return Zone2.usePile(name, { zone: descriptor.zone });
257
+ case "piles":
258
+ return Object.fromEntries(
259
+ descriptor.zones.map((zone) => [
260
+ zone,
261
+ Zone2.usePile(String(zone), { zone })
262
+ ])
263
+ );
264
+ case "cardCollection":
265
+ return Zone2.useCardCollection(name, {
266
+ zones: descriptor.zones,
267
+ mode: descriptor.mode
268
+ });
269
+ case "form":
270
+ return useInteractionFormSurface(descriptor.interaction);
271
+ case "forms":
272
+ return Object.fromEntries(
273
+ Object.entries(descriptor.interactions).map(([key, interaction]) => [
274
+ key,
275
+ useInteractionFormSurface(interaction)
276
+ ])
277
+ );
278
+ }
178
279
  }
179
- function createZoneCardsComponent(zones) {
180
- return ({
181
- empty,
182
- children,
183
- ...props
184
- }) => createElement(
185
- ReactFragment,
186
- null,
187
- ...zones.map(
188
- (zone) => createElement(baseUI.Zone.Root, {
189
- key: zone,
190
- zone,
191
- children: createElement(runtimeZone.List, {
192
- ...props,
193
- empty,
194
- children
195
- })
196
- })
197
- )
280
+ function resolveSurfaceSpec(spec) {
281
+ return Object.fromEntries(
282
+ Object.entries(spec).map(([key, value]) => [
283
+ key,
284
+ isSurfaceDescriptor(value) ? resolveSurfaceDescriptor(key, value) : resolveSurfaceSpec(value)
285
+ ])
198
286
  );
199
287
  }
200
- function createHandCardsComponent(options2) {
288
+ function defineSurfaces(spec) {
289
+ return function useDefinedSurfaces() {
290
+ return resolveSurfaceSpec(spec);
291
+ };
292
+ }
293
+ return { defineSurfaces, resolveSurfaceSpec, resolveSurfaceDescriptor };
294
+ }
295
+
296
+ // src/runtime/workspace-contract/zones.ts
297
+ import { Fragment as ReactFragment2, createElement as createElement5 } from "react";
298
+ import { clsx as clsx2 } from "clsx";
299
+
300
+ // src/runtime/workspace-contract/hand.ts
301
+ import { createElement as createElement4, useMemo } from "react";
302
+ import { clsx } from "clsx";
303
+ function createHandPieces(ctx) {
304
+ const { baseUI } = ctx;
305
+ function createHandCardsComponent(options) {
201
306
  return ({
202
307
  empty,
203
308
  children,
@@ -213,8 +318,8 @@ function createWorkspaceUIContract(options) {
213
318
  renderActions,
214
319
  onSelectionSummary,
215
320
  ...props
216
- }) => createElement(baseUI.Zone.Root, {
217
- zone: options2.zone,
321
+ }) => createElement4(baseUI.Zone.Root, {
322
+ zone: options.zone,
218
323
  // Fill the author's container instead of shrink-wrapping to the fan's
219
324
  // own measured width. Without a definite width here, a centering parent
220
325
  // sizes to the cards row, the hand measures that, recomputes a new fan
@@ -222,9 +327,9 @@ function createWorkspaceUIContract(options) {
222
327
  // pins the outermost hand element to the available width and breaks the
223
328
  // cycle for every author layout.
224
329
  className: "w-full min-w-0",
225
- children: createElement(GeneratedHandCards, {
330
+ children: createElement4(GeneratedHandCards, {
226
331
  ...props,
227
- hand: options2,
332
+ hand: options,
228
333
  className,
229
334
  empty,
230
335
  children,
@@ -276,7 +381,7 @@ function createWorkspaceUIContract(options) {
276
381
  });
277
382
  }, [dropTargets]);
278
383
  const content = useMemo(
279
- () => createElement(HandSurfaceView, {
384
+ () => createElement4(HandSurfaceView, {
280
385
  zone: hand.zone,
281
386
  cards: items,
282
387
  renderCard: (card, state, _index) => children(card, state),
@@ -337,7 +442,7 @@ function createWorkspaceUIContract(options) {
337
442
  count,
338
443
  active,
339
444
  autoOpen,
340
- content: createElement(baseUI.Zone.Root, {
445
+ content: createElement4(baseUI.Zone.Root, {
341
446
  zone: hand.zone,
342
447
  children: content
343
448
  })
@@ -358,94 +463,7 @@ function createWorkspaceUIContract(options) {
358
463
  useRegisterMobileHand(registration);
359
464
  return isMobile ? null : content;
360
465
  }
361
- function createZoneCardComponent() {
362
- return ({
363
- card,
364
- children,
365
- className,
366
- ...props
367
- }) => {
368
- const cardId = options.cardIdFromZoneCard(card);
369
- const zone = options.zoneIdFromZoneCard(card);
370
- const viewCard = cardRenderItemToViewCard(card, cardId);
371
- const faceDown = !!card && typeof card === "object" && "hidden" in card && card.hidden === true;
372
- const renderCardFace = (state) => createElement(CardFace, {
373
- card: viewCard,
374
- selected: state.selected,
375
- disabled: state.disabled || !state.eligible,
376
- faceDown,
377
- size: "sm",
378
- children
379
- });
380
- const match = usePluginState((state) => {
381
- const candidates = state.gameplay.zones[zone]?.playableByCardId[cardId] ?? [];
382
- for (const descriptor of candidates) {
383
- const input = descriptor.inputs.find(
384
- (candidateInput) => candidateInput.domain.type === "cardTarget" && candidateInput.domain.projection === "resolved" && candidateInput.domain.eligibleTargets.includes(cardId)
385
- );
386
- if (input) return { descriptor, input };
387
- }
388
- return null;
389
- });
390
- if (!match) {
391
- return createElement(
392
- "div",
393
- {
394
- ...props,
395
- className: clsx("relative inline-flex", className),
396
- "data-dreamboard-zone-card": "",
397
- "data-card-id": cardId,
398
- "data-zone": zone,
399
- "data-interactive": false
400
- },
401
- createElement(CardFace, {
402
- card: viewCard,
403
- faceDown,
404
- size: "sm",
405
- children
406
- })
407
- );
408
- }
409
- return createElement(baseUI.Zone.Root, {
410
- zone,
411
- children: createElement(runtimeInteraction.Root, {
412
- interaction: match.descriptor.interactionKey,
413
- children: createElement(runtimeInteraction.CardInput, {
414
- ...props,
415
- className: clsx(DEFAULT_ZONE_CARD_CLASS, className),
416
- input: match.input.key,
417
- unsafeCardId: cardId,
418
- children: renderCardFace
419
- })
420
- })
421
- });
422
- };
423
- }
424
- const Board = {
425
- surface(board) {
426
- return { kind: "board", board };
427
- },
428
- useSurface: useBoardSurface,
429
- HexView({ board: boardId, ...props }) {
430
- return createElement(
431
- baseUI.Board.HexView,
432
- {
433
- ...props,
434
- board: options.hexStaticBoards[boardId]
435
- }
436
- );
437
- },
438
- HexGrid({ board: boardId, ...props }) {
439
- return createElement(
440
- baseUI.Board.HexGrid,
441
- {
442
- ...props,
443
- board: options.hexStaticBoards[boardId]
444
- }
445
- );
446
- }
447
- };
448
- function createStagingComponent(options2) {
466
+ function createStagingComponent(options) {
449
467
  return ({
450
468
  children,
451
469
  label,
@@ -453,8 +471,8 @@ function createWorkspaceUIContract(options) {
453
471
  cardSize,
454
472
  ariaLabel,
455
473
  className
456
- }) => createElement(HandStagingView, {
457
- zone: options2.zone,
474
+ }) => createElement4(HandStagingView, {
475
+ zone: options.zone,
458
476
  renderCard: (card) => children(card),
459
477
  renderEmptySlot,
460
478
  label,
@@ -463,9 +481,113 @@ function createWorkspaceUIContract(options) {
463
481
  className
464
482
  });
465
483
  }
466
- const Zone = {
467
- hand(zone, options2) {
468
- return { kind: "hand", zone, ...options2 };
484
+ return { createHandCardsComponent, createStagingComponent };
485
+ }
486
+
487
+ // src/runtime/workspace-contract/zones.ts
488
+ var DEFAULT_ZONE_CARD_CLASS = "group relative border-0 bg-transparent p-0 transition-transform enabled:cursor-pointer enabled:hover:-translate-y-2 data-[selected=true]:-translate-y-3 disabled:cursor-not-allowed data-[eligible=false]:opacity-45 data-[eligible=false]:grayscale data-[eligible=false]:hover:translate-y-0 data-[card-available=false]:opacity-45 data-[card-available=false]:grayscale";
489
+ function cardRenderItemToViewCard(card, cardId) {
490
+ if (card && typeof card === "object" && "hidden" in card && card.hidden === false) {
491
+ return card;
492
+ }
493
+ return {
494
+ id: cardId,
495
+ cardType: "hidden",
496
+ name: "Hidden card",
497
+ properties: {}
498
+ };
499
+ }
500
+ function createZoneCardsComponent(ctx, zones) {
501
+ const { baseUI, runtimeZone } = ctx;
502
+ return ({
503
+ empty,
504
+ children,
505
+ ...props
506
+ }) => createElement5(
507
+ ReactFragment2,
508
+ null,
509
+ ...zones.map(
510
+ (zone) => createElement5(baseUI.Zone.Root, {
511
+ key: zone,
512
+ zone,
513
+ children: createElement5(runtimeZone.List, {
514
+ ...props,
515
+ empty,
516
+ children
517
+ })
518
+ })
519
+ )
520
+ );
521
+ }
522
+ function createZoneCardComponent(ctx) {
523
+ const { options, baseUI, runtimeInteraction } = ctx;
524
+ return ({
525
+ card,
526
+ children,
527
+ className,
528
+ ...props
529
+ }) => {
530
+ const cardId = options.cardIdFromZoneCard(card);
531
+ const zone = options.zoneIdFromZoneCard(card);
532
+ const viewCard = cardRenderItemToViewCard(card, cardId);
533
+ const faceDown = !!card && typeof card === "object" && "hidden" in card && card.hidden === true;
534
+ const renderCardFace = (state) => createElement5(CardFace, {
535
+ card: viewCard,
536
+ selected: state.selected,
537
+ disabled: state.disabled || !state.eligible,
538
+ faceDown,
539
+ size: "sm",
540
+ children
541
+ });
542
+ const match = usePluginState((state) => {
543
+ const candidates = state.gameplay.zones[zone]?.playableByCardId[cardId] ?? [];
544
+ for (const descriptor of candidates) {
545
+ const input = descriptor.inputs.find(
546
+ (candidateInput) => candidateInput.domain.type === "cardTarget" && candidateInput.domain.projection === "resolved" && candidateInput.domain.eligibleTargets.includes(cardId)
547
+ );
548
+ if (input) return { descriptor, input };
549
+ }
550
+ return null;
551
+ });
552
+ if (!match) {
553
+ return createElement5(
554
+ "div",
555
+ {
556
+ ...props,
557
+ className: clsx2("relative inline-flex", className),
558
+ "data-dreamboard-zone-card": "",
559
+ "data-card-id": cardId,
560
+ "data-zone": zone,
561
+ "data-interactive": false
562
+ },
563
+ createElement5(CardFace, {
564
+ card: viewCard,
565
+ faceDown,
566
+ size: "sm",
567
+ children
568
+ })
569
+ );
570
+ }
571
+ return createElement5(baseUI.Zone.Root, {
572
+ zone,
573
+ children: createElement5(runtimeInteraction.Root, {
574
+ interaction: match.descriptor.interactionKey,
575
+ children: createElement5(runtimeInteraction.CardInput, {
576
+ ...props,
577
+ className: clsx2(DEFAULT_ZONE_CARD_CLASS, className),
578
+ input: match.input.key,
579
+ unsafeCardId: cardId,
580
+ children: renderCardFace
581
+ })
582
+ })
583
+ });
584
+ };
585
+ }
586
+ function createZoneNamespace(ctx) {
587
+ const { createHandCardsComponent, createStagingComponent } = createHandPieces(ctx);
588
+ return {
589
+ hand(zone, options) {
590
+ return { kind: "hand", zone, ...options };
469
591
  },
470
592
  pile(zone) {
471
593
  return { kind: "pile", zone };
@@ -473,8 +595,8 @@ function createWorkspaceUIContract(options) {
473
595
  piles(zones) {
474
596
  return { kind: "piles", zones };
475
597
  },
476
- collection(zones, options2 = {}) {
477
- return { kind: "cardCollection", zones, mode: options2.mode };
598
+ collection(zones, options = {}) {
599
+ return { kind: "cardCollection", zones, mode: options.mode };
478
600
  },
479
601
  useHand(_name, zoneOptions) {
480
602
  const handComponentOptions = {
@@ -486,113 +608,87 @@ function createWorkspaceUIContract(options) {
486
608
  };
487
609
  return {
488
610
  Hand: createHandCardsComponent(handComponentOptions),
489
- Card: createZoneCardComponent(),
611
+ Card: createZoneCardComponent(ctx),
490
612
  Staging: createStagingComponent(handComponentOptions),
491
- slot: { card: createCardInputSlot() }
613
+ slot: { card: createCardInputSlot(ctx) }
492
614
  };
493
615
  },
494
616
  usePile(_name, zoneOptions) {
495
617
  return {
496
- Pile: createZoneCardsComponent([zoneOptions.zone]),
497
- Card: createZoneCardComponent()
618
+ Pile: createZoneCardsComponent(ctx, [zoneOptions.zone]),
619
+ Card: createZoneCardComponent(ctx)
498
620
  };
499
621
  },
500
622
  useCardCollection(_name, zoneOptions) {
501
623
  void zoneOptions.mode;
502
624
  return {
503
- Collection: createZoneCardsComponent(zoneOptions.zones),
504
- Card: createZoneCardComponent(),
505
- slot: { card: createCardInputSlot() }
625
+ Collection: createZoneCardsComponent(ctx, zoneOptions.zones),
626
+ Card: createZoneCardComponent(ctx),
627
+ slot: { card: createCardInputSlot(ctx) }
506
628
  };
507
629
  }
508
630
  };
509
- const Interaction = {
510
- State: baseUI.Interaction.State,
511
- Dialog: baseUI.Interaction.Dialog,
512
- useForm: useInteractionFormSurface,
513
- form(interaction) {
514
- return { kind: "form", interaction };
515
- },
516
- forms(interactions) {
517
- return { kind: "forms", interactions };
518
- },
519
- Routes: InteractionRoutes
631
+ }
632
+
633
+ // src/runtime/workspace-contract/index.ts
634
+ function createWorkspaceUIContract(options) {
635
+ const baseUI = createDreamboardUI(options.uiContract);
636
+ const runtimeInteraction = baseUI.Interaction;
637
+ const runtimeBoard = baseUI.Board;
638
+ const runtimeZone = baseUI.Zone;
639
+ const ctx = {
640
+ options,
641
+ // The context carries the contract-erased view of the UI: every consumer
642
+ // already neutralizes key genericity (`as never` inputs/zones), exactly as
643
+ // the original single-file factory did with its `Runtime*` casts.
644
+ baseUI,
645
+ runtimeInteraction,
646
+ runtimeBoard,
647
+ runtimeZone,
648
+ withInteractionRoot: (interaction, children) => createElement6(runtimeInteraction.Root, {
649
+ interaction,
650
+ children
651
+ })
520
652
  };
521
- function isPlainObject(value) {
522
- return !!value && typeof value === "object" && !Array.isArray(value);
523
- }
524
- function isSurfaceDescriptor(value) {
525
- return isPlainObject(value) && typeof value.kind === "string";
526
- }
527
- function resolveSurfaceDescriptor(name, descriptor) {
528
- switch (descriptor.kind) {
529
- case "board":
530
- return Board.useSurface(name);
531
- case "hand":
532
- return Zone.useHand(name, {
533
- zone: descriptor.zone,
534
- role: descriptor.role,
535
- label: descriptor.label,
536
- order: descriptor.order
537
- });
538
- case "pile":
539
- return Zone.usePile(name, { zone: descriptor.zone });
540
- case "piles":
541
- return Object.fromEntries(
542
- descriptor.zones.map((zone) => [
543
- zone,
544
- Zone.usePile(String(zone), { zone })
545
- ])
546
- );
547
- case "cardCollection":
548
- return Zone.useCardCollection(name, {
549
- zones: descriptor.zones,
550
- mode: descriptor.mode
551
- });
552
- case "form":
553
- return useInteractionFormSurface(descriptor.interaction);
554
- case "forms":
555
- return Object.fromEntries(
556
- Object.entries(descriptor.interactions).map(([key, interaction]) => [
557
- key,
558
- useInteractionFormSurface(interaction)
559
- ])
560
- );
561
- }
562
- }
563
- function resolveSurfaceSpec(spec) {
564
- return Object.fromEntries(
565
- Object.entries(spec).map(([key, value]) => [
566
- key,
567
- isSurfaceDescriptor(value) ? resolveSurfaceDescriptor(key, value) : resolveSurfaceSpec(value)
568
- ])
569
- );
570
- }
571
- function defineSurfaces(spec) {
572
- return function useDefinedSurfaces() {
573
- return resolveSurfaceSpec(spec);
653
+ const resourceDisplayConfig = options.resourceIds.map((resource) => {
654
+ const presentation = options.resourcePresentationById?.[resource];
655
+ return {
656
+ type: resource,
657
+ label: presentation?.label ?? resource,
658
+ icon: presentation?.icon ?? resource
574
659
  };
575
- }
576
- const UI = {
660
+ });
661
+ const resourceCounter = createResourceCounter(
662
+ resourceDisplayConfig
663
+ );
664
+ const { Interaction: Interaction2, useInteractionFormSurface } = createInteractionForms(ctx);
665
+ const Board2 = createBoardNamespace(ctx);
666
+ const Zone2 = createZoneNamespace(ctx);
667
+ const { defineSurfaces } = createSurfaceResolvers({
668
+ Board: Board2,
669
+ Zone: Zone2,
670
+ useInteractionFormSurface
671
+ });
672
+ const UI2 = {
577
673
  ...baseUI,
578
- Root: ({ children, ...props }) => createElement(ClientParamSchemaProvider, {
674
+ Root: ({ children, ...props }) => createElement6(ClientParamSchemaProvider, {
579
675
  schemas: options.clientParamSchemasByPhase,
580
- children: createElement(ToastProvider, {
581
- children: createElement(MobileHandTrayProvider, {
582
- children: createElement(baseUI.Root, { ...props, children })
676
+ children: createElement6(ToastProvider, {
677
+ children: createElement6(MobileHandTrayProvider, {
678
+ children: createElement6(baseUI.Root, { ...props, children })
583
679
  })
584
680
  })
585
681
  }),
586
682
  defineSurfaces,
587
- Interaction,
588
- Board,
589
- Zone,
683
+ Interaction: Interaction2,
684
+ Board: Board2,
685
+ Zone: Zone2,
590
686
  ResourceCounter: resourceCounter
591
687
  };
592
- return UI;
688
+ return UI2;
593
689
  }
594
690
 
595
691
  export {
596
692
  createWorkspaceUIContract
597
693
  };
598
- //# sourceMappingURL=chunk-GKKBPPSW.js.map
694
+ //# sourceMappingURL=chunk-TXXLS3OI.js.map