@dreamboard-games/sdk 0.2.1-alpha.1 → 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 (372) 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-BBMVT3KG.d.ts → ThemeProvider-DvMl17Ny.d.ts} +1 -1
  4. package/dist/{chunk-NKCRKGR2.js → chunk-3RQEICD3.js} +2 -2
  5. package/dist/{chunk-ZABVH7AO.js → chunk-ADYH6PVT.js} +1336 -1363
  6. package/dist/chunk-ADYH6PVT.js.map +1 -0
  7. package/dist/{chunk-PEI3FIL2.js → chunk-P7VMTJ5D.js} +2 -2
  8. package/dist/{chunk-PEI3FIL2.js.map → chunk-P7VMTJ5D.js.map} +1 -1
  9. package/dist/{chunk-WG4JQL3S.js → chunk-QZ6X4B5P.js} +1177 -1109
  10. package/dist/chunk-QZ6X4B5P.js.map +1 -0
  11. package/dist/{chunk-MZNVHMJ5.js → chunk-TXXLS3OI.js} +405 -309
  12. package/dist/chunk-TXXLS3OI.js.map +1 -0
  13. package/dist/{chunk-FDNZTDD6.js → chunk-W6SGFWXH.js} +48 -44
  14. package/dist/chunk-W6SGFWXH.js.map +1 -0
  15. package/dist/{chunk-MKXPVOUT.js → chunk-Y2AFYBMB.js} +48 -4
  16. package/dist/chunk-Y2AFYBMB.js.map +1 -0
  17. package/dist/{index-BwqPQtBu.d.ts → codegen.d.ts} +57 -565
  18. package/dist/{infrastructure/workspace-codegen.js → codegen.js} +3 -3
  19. package/dist/{components-BoiVSYqx.d.ts → components-DaIqi9QM.d.ts} +48 -37
  20. package/dist/{hex-board-view-1iAyJRFn.d.ts → hex-board-view-UCUjMALd.d.ts} +2 -2
  21. package/dist/{infrastructure/reducer-bundle-abi.d.ts → index.d-BGqVifr_.d.ts} +289 -10
  22. package/dist/index.js +1 -1
  23. package/dist/package-set.d.ts +2 -2
  24. package/dist/package-set.js +1 -1
  25. package/dist/primitive-props-BNHDkgd7.d.ts +16 -0
  26. package/dist/reducer-contract.d.ts +3 -0
  27. package/dist/{infrastructure/reducer-bundle-abi.js → reducer-contract.js} +4 -4
  28. package/dist/reducer.d.ts +185 -179
  29. package/dist/reducer.js +1363 -1372
  30. package/dist/reducer.js.map +1 -1
  31. package/dist/runtime/primitives.d.ts +9 -9
  32. package/dist/runtime/primitives.js +7 -7
  33. package/dist/runtime/runtime-api.d.ts +2 -0
  34. package/dist/runtime/runtime-api.js +1 -0
  35. package/dist/runtime/workspace-contract.d.ts +62 -17
  36. package/dist/runtime/workspace-contract.js +5 -6
  37. package/dist/{runtime-api-CPLm_XDG.d.ts → runtime-api-tGL3ArsB.d.ts} +103 -4
  38. package/dist/runtime.d.ts +11 -57
  39. package/dist/runtime.js +487 -8
  40. package/dist/runtime.js.map +1 -1
  41. package/dist/testing.d.ts +4 -4
  42. package/dist/testing.js.map +1 -1
  43. package/dist/types.d.ts +1531 -85
  44. package/dist/types.js +1 -3
  45. package/dist/types.js.map +1 -1
  46. package/dist/ui/components.d.ts +7 -8
  47. package/dist/ui/components.js +1 -1
  48. package/dist/ui/defaults.d.ts +1 -1
  49. package/dist/ui/{types/player-state.d.ts → player-state.d.ts} +2 -2
  50. package/dist/{ui-contract-rzKBwOLC.d.ts → ui-contract-SctM4ibF.d.ts} +155 -150
  51. package/dist/ui.d.ts +10 -11
  52. package/dist/ui.js +2 -2
  53. package/package.json +30 -75
  54. package/dist/bundle-CDd5FKeD.d.ts +0 -283
  55. package/dist/cards-Sl3b40Mv.d.ts +0 -13
  56. package/dist/chunk-326PGVAA.js +0 -34
  57. package/dist/chunk-326PGVAA.js.map +0 -1
  58. package/dist/chunk-FDNZTDD6.js.map +0 -1
  59. package/dist/chunk-I46YJSOD.js +0 -1
  60. package/dist/chunk-MKXPVOUT.js.map +0 -1
  61. package/dist/chunk-MZNVHMJ5.js.map +0 -1
  62. package/dist/chunk-T52J5RMF.js +0 -1
  63. package/dist/chunk-WG4JQL3S.js.map +0 -1
  64. package/dist/chunk-XV6D3ET4.js +0 -485
  65. package/dist/chunk-XV6D3ET4.js.map +0 -1
  66. package/dist/chunk-ZABVH7AO.js.map +0 -1
  67. package/dist/generated/runtime/primitives.d.ts +0 -13
  68. package/dist/generated/runtime/primitives.js +0 -181
  69. package/dist/generated/runtime/primitives.js.map +0 -1
  70. package/dist/generated/runtime-api.d.ts +0 -3
  71. package/dist/generated/runtime-api.js +0 -2
  72. package/dist/generated/runtime.d.ts +0 -15
  73. package/dist/generated/runtime.js +0 -19
  74. package/dist/generated/runtime.js.map +0 -1
  75. package/dist/generated/workspace-contract.d.ts +0 -15
  76. package/dist/generated/workspace-contract.js +0 -15
  77. package/dist/generated/workspace-contract.js.map +0 -1
  78. package/dist/infrastructure/reducer-bundle-abi.js.map +0 -1
  79. package/dist/infrastructure/workspace-codegen.d.ts +0 -53
  80. package/dist/infrastructure/workspace-codegen.js.map +0 -1
  81. package/dist/manifest-contract-BNHVGFtU.d.ts +0 -9
  82. package/dist/primitive-props-DpKs-GCr.d.ts +0 -11
  83. package/dist/runtime/types/runtime-api.d.ts +0 -1
  84. package/dist/runtime/types/runtime-api.js +0 -2
  85. package/dist/runtime/types/runtime-api.js.map +0 -1
  86. package/dist/runtime-api-3dshj6kK.d.ts +0 -101
  87. package/dist/slots-1GPGihk8.d.ts +0 -8
  88. package/src/browser-interaction/attributes.ts +0 -211
  89. package/src/browser-interaction/canonical.ts +0 -77
  90. package/src/browser-interaction/constants.ts +0 -77
  91. package/src/browser-interaction/effects.ts +0 -176
  92. package/src/browser-interaction/index.ts +0 -111
  93. package/src/browser-interaction/normalize.ts +0 -997
  94. package/src/browser-interaction/registry.ts +0 -70
  95. package/src/browser-interaction/resolve.ts +0 -596
  96. package/src/browser-interaction/schemas.ts +0 -152
  97. package/src/browser-interaction/types.ts +0 -304
  98. package/src/browser-interaction.ts +0 -1
  99. package/src/generated/reducer-contract/builders.ts +0 -90
  100. package/src/generated/reducer-contract/version.ts +0 -9
  101. package/src/generated/reducer-contract/wire.ts +0 -100
  102. package/src/generated/reducer-contract/zod.ts +0 -103
  103. package/src/generated/runtime/primitives.ts +0 -2
  104. package/src/generated/runtime-api.ts +0 -5
  105. package/src/generated/runtime.ts +0 -35
  106. package/src/generated/workspace-contract.ts +0 -2
  107. package/src/index.ts +0 -7
  108. package/src/infrastructure/reducer-bundle-abi.ts +0 -8
  109. package/src/infrastructure/reducer-contract/bundle.ts +0 -37
  110. package/src/infrastructure/workspace-codegen/hex-geometry.ts +0 -69
  111. package/src/infrastructure/workspace-codegen/index.ts +0 -64
  112. package/src/infrastructure/workspace-codegen/manifest-contract.ts +0 -6632
  113. package/src/infrastructure/workspace-codegen/manifest-validation.ts +0 -795
  114. package/src/infrastructure/workspace-codegen/ownership.ts +0 -131
  115. package/src/infrastructure/workspace-codegen/preset-card-sets.ts +0 -169
  116. package/src/infrastructure/workspace-codegen/seeds.ts +0 -1705
  117. package/src/infrastructure/workspace-codegen.ts +0 -1
  118. package/src/package-set.ts +0 -19
  119. package/src/reducer/authoring/contract.ts +0 -157
  120. package/src/reducer/authoring/effect.ts +0 -224
  121. package/src/reducer/authoring/game.ts +0 -23
  122. package/src/reducer/authoring/interaction.ts +0 -98
  123. package/src/reducer/authoring/phase.ts +0 -300
  124. package/src/reducer/authoring/types.ts +0 -70
  125. package/src/reducer/authoring/validation.ts +0 -382
  126. package/src/reducer/authoring/view-stage.ts +0 -68
  127. package/src/reducer/authoring.ts +0 -29
  128. package/src/reducer/bundle/ingress-bundle.ts +0 -491
  129. package/src/reducer/bundle/trusted/engine-instruction-resolver.ts +0 -254
  130. package/src/reducer/bundle/trusted/flow-instruction-resolver.ts +0 -73
  131. package/src/reducer/bundle/trusted/instruction-runner.ts +0 -414
  132. package/src/reducer/bundle/trusted/interaction-authorization.ts +0 -137
  133. package/src/reducer/bundle/trusted/interaction-collectors.ts +0 -859
  134. package/src/reducer/bundle/trusted/interaction-decision.ts +0 -747
  135. package/src/reducer/bundle/trusted/interaction-resolver.ts +0 -95
  136. package/src/reducer/bundle/trusted/interaction-types.ts +0 -174
  137. package/src/reducer/bundle/trusted/lifecycle-runner.ts +0 -427
  138. package/src/reducer/bundle/trusted/projection-builder.ts +0 -680
  139. package/src/reducer/bundle/trusted/projection-context.ts +0 -39
  140. package/src/reducer/bundle/trusted/rng-sampler.ts +0 -150
  141. package/src/reducer/bundle/trusted/runtime-registry.ts +0 -120
  142. package/src/reducer/bundle/trusted/runtime-scope.ts +0 -336
  143. package/src/reducer/bundle/trusted/simultaneous-player.ts +0 -97
  144. package/src/reducer/bundle/trusted/stage-resolver.ts +0 -87
  145. package/src/reducer/bundle/trusted/static-projection.ts +0 -116
  146. package/src/reducer/bundle/trusted/trusted-runtime-args.ts +0 -97
  147. package/src/reducer/bundle/trusted/trusted-runtime-result.ts +0 -39
  148. package/src/reducer/bundle/trusted/trusted-setup-profiles.ts +0 -43
  149. package/src/reducer/bundle/trusted/trusted-state-codec.ts +0 -48
  150. package/src/reducer/bundle/trusted-bundle.ts +0 -97
  151. package/src/reducer/bundle/types.ts +0 -171
  152. package/src/reducer/bundle.ts +0 -2
  153. package/src/reducer/client-param-schemas.ts +0 -57
  154. package/src/reducer/compose.ts +0 -34
  155. package/src/reducer/core/runtime-input.ts +0 -30
  156. package/src/reducer/core/runtime-instruction.ts +0 -59
  157. package/src/reducer/core/types.ts +0 -62
  158. package/src/reducer/definition-index.ts +0 -277
  159. package/src/reducer/derived.ts +0 -106
  160. package/src/reducer/effects.ts +0 -92
  161. package/src/reducer/engine/runtime-instruction-engine.ts +0 -155
  162. package/src/reducer/ingress/decode-runtime-input.ts +0 -7
  163. package/src/reducer/ingress/decode-session-state.ts +0 -9
  164. package/src/reducer/ingress/encode-session-state.ts +0 -6
  165. package/src/reducer/ingress/input-codec.ts +0 -18
  166. package/src/reducer/ingress/phase-schemas.ts +0 -62
  167. package/src/reducer/ingress/raw-types.ts +0 -107
  168. package/src/reducer/ingress/runtime-codec.ts +0 -14
  169. package/src/reducer/ingress/runtime-payload.ts +0 -13
  170. package/src/reducer/ingress/session-codec.ts +0 -392
  171. package/src/reducer/ingress/types.ts +0 -6
  172. package/src/reducer/inputs/boardInput.ts +0 -217
  173. package/src/reducer/inputs/boardTarget.ts +0 -190
  174. package/src/reducer/inputs/cardInput.ts +0 -86
  175. package/src/reducer/inputs/cardTarget.ts +0 -101
  176. package/src/reducer/inputs/choiceTarget.ts +0 -104
  177. package/src/reducer/inputs/defineInputs.ts +0 -71
  178. package/src/reducer/inputs/formInput.ts +0 -809
  179. package/src/reducer/inputs/many.ts +0 -120
  180. package/src/reducer/inputs/promptInput.ts +0 -87
  181. package/src/reducer/inputs/rngInput.ts +0 -58
  182. package/src/reducer/inputs/targetRule.ts +0 -123
  183. package/src/reducer/inputs.ts +0 -41
  184. package/src/reducer/model/definition.ts +0 -1072
  185. package/src/reducer/model/extract.ts +0 -745
  186. package/src/reducer/model/manifest.ts +0 -570
  187. package/src/reducer/model/queries.ts +0 -641
  188. package/src/reducer/model/runtime.ts +0 -264
  189. package/src/reducer/model/spec.ts +0 -1386
  190. package/src/reducer/model/table.ts +0 -260
  191. package/src/reducer/model.ts +0 -7
  192. package/src/reducer/ops.ts +0 -1034
  193. package/src/reducer/parse-utils.ts +0 -28
  194. package/src/reducer/per-player.ts +0 -422
  195. package/src/reducer/rng.ts +0 -69
  196. package/src/reducer/schema-helpers.ts +0 -185
  197. package/src/reducer/setup-bootstrap-helpers.ts +0 -171
  198. package/src/reducer/setup-bootstrap.ts +0 -481
  199. package/src/reducer/table-ops.ts +0 -2671
  200. package/src/reducer/table-queries.ts +0 -372
  201. package/src/reducer/transaction.ts +0 -120
  202. package/src/reducer.ts +0 -314
  203. package/src/runtime/primitives.ts +0 -1
  204. package/src/runtime/types/runtime-api.ts +0 -1
  205. package/src/runtime/workspace-contract.ts +0 -32
  206. package/src/runtime-internal/components/InteractionForm.tsx +0 -1647
  207. package/src/runtime-internal/components/PluginRuntime.tsx +0 -105
  208. package/src/runtime-internal/components/board/target-layer.ts +0 -72
  209. package/src/runtime-internal/context/ClientParamSchemaContext.tsx +0 -44
  210. package/src/runtime-internal/context/InteractionDraftContext.tsx +0 -279
  211. package/src/runtime-internal/context/PluginSessionContext.tsx +0 -47
  212. package/src/runtime-internal/context/PluginStateContext.tsx +0 -303
  213. package/src/runtime-internal/context/RuntimeContext.tsx +0 -96
  214. package/src/runtime-internal/defaults/components.tsx +0 -409
  215. package/src/runtime-internal/defaults/index.ts +0 -11
  216. package/src/runtime-internal/errors/ValidationError.ts +0 -29
  217. package/src/runtime-internal/hooks/useActivePlayers.ts +0 -33
  218. package/src/runtime-internal/hooks/useBoardInteractions.ts +0 -727
  219. package/src/runtime-internal/hooks/useGameSelector.ts +0 -105
  220. package/src/runtime-internal/hooks/useGameView.ts +0 -9
  221. package/src/runtime-internal/hooks/useInteractionByKey.ts +0 -354
  222. package/src/runtime-internal/hooks/useInteractionHandle.ts +0 -438
  223. package/src/runtime-internal/hooks/useIsMyTurn.ts +0 -20
  224. package/src/runtime-internal/hooks/useLobby.ts +0 -76
  225. package/src/runtime-internal/hooks/useMe.ts +0 -48
  226. package/src/runtime-internal/hooks/usePlayerInfo.ts +0 -28
  227. package/src/runtime-internal/hooks/usePlayerTurnOrder.ts +0 -23
  228. package/src/runtime-internal/hooks/usePluginRuntime.ts +0 -147
  229. package/src/runtime-internal/hooks/useSeatInbox.ts +0 -61
  230. package/src/runtime-internal/hooks/useSimultaneousPhase.ts +0 -10
  231. package/src/runtime-internal/index.ts +0 -42
  232. package/src/runtime-internal/internal.ts +0 -43
  233. package/src/runtime-internal/plugin-styles.css +0 -250
  234. package/src/runtime-internal/primitives/board.tsx +0 -530
  235. package/src/runtime-internal/primitives/dialog-lifecycle.ts +0 -58
  236. package/src/runtime-internal/primitives/dice.tsx +0 -79
  237. package/src/runtime-internal/primitives/game-ui-provider.tsx +0 -35
  238. package/src/runtime-internal/primitives/game.tsx +0 -387
  239. package/src/runtime-internal/primitives/hand-intent-adapter.ts +0 -147
  240. package/src/runtime-internal/primitives/hand-surface.tsx +0 -594
  241. package/src/runtime-internal/primitives/index.ts +0 -196
  242. package/src/runtime-internal/primitives/interaction-form-binding.tsx +0 -56
  243. package/src/runtime-internal/primitives/interaction-submit.ts +0 -90
  244. package/src/runtime-internal/primitives/interaction.tsx +0 -1146
  245. package/src/runtime-internal/primitives/phase.tsx +0 -43
  246. package/src/runtime-internal/primitives/player-roster.tsx +0 -302
  247. package/src/runtime-internal/primitives/primitive-props.tsx +0 -101
  248. package/src/runtime-internal/primitives/prompt.tsx +0 -255
  249. package/src/runtime-internal/primitives/ui.tsx +0 -60
  250. package/src/runtime-internal/primitives/zone.tsx +0 -791
  251. package/src/runtime-internal/reducer.ts +0 -30
  252. package/src/runtime-internal/runtime/createPluginRuntimeAPI.ts +0 -605
  253. package/src/runtime-internal/types/plugin-state.ts +0 -514
  254. package/src/runtime-internal/types/reducer-state.ts +0 -24
  255. package/src/runtime-internal/types/runtime-api.ts +0 -114
  256. package/src/runtime-internal/ui-contract.ts +0 -519
  257. package/src/runtime-internal/utils/browser-interaction-effects.ts +0 -240
  258. package/src/runtime-internal/utils/card-intent-adapter.ts +0 -546
  259. package/src/runtime-internal/utils/interaction-draft-digest.ts +0 -252
  260. package/src/runtime-internal/utils/interaction-inputs.ts +0 -492
  261. package/src/runtime-internal/utils/interaction-labels.ts +0 -23
  262. package/src/runtime-internal/utils/interaction-router.ts +0 -273
  263. package/src/runtime-internal/utils/interaction-status.ts +0 -74
  264. package/src/runtime-internal/utils/semantic-projection-digest.ts +0 -407
  265. package/src/runtime-internal/workspace-contract.ts +0 -1170
  266. package/src/runtime.ts +0 -34
  267. package/src/testing/create-expect-api.ts +0 -352
  268. package/src/testing/create-test-runtime.ts +0 -381
  269. package/src/testing/definitions.ts +0 -127
  270. package/src/testing/index.ts +0 -3
  271. package/src/testing.ts +0 -1
  272. package/src/type-stubs/manifest-contract.d.ts +0 -42
  273. package/src/type-stubs/manifest-contract.js +0 -72
  274. package/src/type-stubs/ui-contract.d.ts +0 -5
  275. package/src/type-stubs/ui-contract.js +0 -1
  276. package/src/types/authoring-card-properties.type-test.ts +0 -266
  277. package/src/types/authoring.ts +0 -1282
  278. package/src/types/cards.ts +0 -19
  279. package/src/types/contracts.ts +0 -1550
  280. package/src/types/generated-helpers.ts +0 -35
  281. package/src/types/index.ts +0 -147
  282. package/src/types/slots.ts +0 -11
  283. package/src/types.ts +0 -1
  284. package/src/ui/components/ActionButton.tsx +0 -97
  285. package/src/ui/components/ActionPanel.tsx +0 -315
  286. package/src/ui/components/Card.tsx +0 -378
  287. package/src/ui/components/CardDragSurface.tsx +0 -1076
  288. package/src/ui/components/ChromeSuppressionContext.tsx +0 -70
  289. package/src/ui/components/CostDisplay.tsx +0 -145
  290. package/src/ui/components/DiceRoller.tsx +0 -581
  291. package/src/ui/components/Drawer.tsx +0 -180
  292. package/src/ui/components/ErrorBoundary.tsx +0 -275
  293. package/src/ui/components/GameEndDisplay.tsx +0 -398
  294. package/src/ui/components/GameSkeleton.tsx +0 -260
  295. package/src/ui/components/Hand.tsx +0 -468
  296. package/src/ui/components/HandDock.tsx +0 -299
  297. package/src/ui/components/HandView.tsx +0 -441
  298. package/src/ui/components/MobileHandTray.tsx +0 -381
  299. package/src/ui/components/MoreActions.tsx +0 -143
  300. package/src/ui/components/PhaseIndicator.tsx +0 -341
  301. package/src/ui/components/PlayArea.tsx +0 -146
  302. package/src/ui/components/PrimaryActionButton.tsx +0 -336
  303. package/src/ui/components/PrimaryButton.tsx +0 -45
  304. package/src/ui/components/ResourceCounter.tsx +0 -270
  305. package/src/ui/components/StagingZone.tsx +0 -134
  306. package/src/ui/components/ThemedButton.tsx +0 -113
  307. package/src/ui/components/Toast.tsx +0 -264
  308. package/src/ui/components/board/HexGrid.tsx +0 -1297
  309. package/src/ui/components/board/NetworkGraph.tsx +0 -476
  310. package/src/ui/components/board/SlotSystem.tsx +0 -388
  311. package/src/ui/components/board/SquareGrid.tsx +0 -1165
  312. package/src/ui/components/board/TrackBoard.tsx +0 -496
  313. package/src/ui/components/board/ZoneMap.tsx +0 -448
  314. package/src/ui/components/board/hex-board-view.ts +0 -123
  315. package/src/ui/components/board/index.ts +0 -142
  316. package/src/ui/components/board/interaction-accessibility.ts +0 -21
  317. package/src/ui/components/board/target-layer.ts +0 -67
  318. package/src/ui/components/card-render-content.type-test.ts +0 -27
  319. package/src/ui/components/hand-layout-math.ts +0 -163
  320. package/src/ui/components/hand-pointer-engine.ts +0 -413
  321. package/src/ui/components/index.ts +0 -245
  322. package/src/ui/components.ts +0 -1
  323. package/src/ui/defaults/components.tsx +0 -106
  324. package/src/ui/defaults/index.ts +0 -8
  325. package/src/ui/defaults.ts +0 -1
  326. package/src/ui/errors/ValidationError.ts +0 -29
  327. package/src/ui/helpers/cards.ts +0 -19
  328. package/src/ui/helpers/track-board.ts +0 -211
  329. package/src/ui/hooks/useBoardTopology.ts +0 -316
  330. package/src/ui/hooks/useCards.ts +0 -10
  331. package/src/ui/hooks/useHandCardPointer.ts +0 -381
  332. package/src/ui/hooks/useHandLayout.ts +0 -378
  333. package/src/ui/hooks/useHandPresentation.ts +0 -121
  334. package/src/ui/hooks/useHexBoard.ts +0 -74
  335. package/src/ui/hooks/useHexGrid.ts +0 -185
  336. package/src/ui/hooks/useIsMobile.ts +0 -35
  337. package/src/ui/hooks/usePanZoom.ts +0 -278
  338. package/src/ui/hooks/useSquareBoard.ts +0 -124
  339. package/src/ui/hooks/useSquareGrid.ts +0 -328
  340. package/src/ui/index.ts +0 -98
  341. package/src/ui/internal/ui/alert.tsx +0 -51
  342. package/src/ui/internal/ui/button.tsx +0 -58
  343. package/src/ui/internal/ui/dialog.tsx +0 -134
  344. package/src/ui/internal/ui/input.tsx +0 -21
  345. package/src/ui/internal/ui/label.tsx +0 -21
  346. package/src/ui/internal/ui/select.tsx +0 -129
  347. package/src/ui/internal/ui/tooltip.tsx +0 -54
  348. package/src/ui/internal/ui/utils.ts +0 -5
  349. package/src/ui/plugin-styles.css +0 -250
  350. package/src/ui/primitives/dialog-lifecycle.ts +0 -58
  351. package/src/ui/primitives/dice.tsx +0 -79
  352. package/src/ui/primitives/primitive-props.tsx +0 -101
  353. package/src/ui/theme/ThemeProvider.tsx +0 -252
  354. package/src/ui/theme/board.ts +0 -61
  355. package/src/ui/theme/css-vars.ts +0 -105
  356. package/src/ui/theme/derive.ts +0 -240
  357. package/src/ui/theme/index.ts +0 -61
  358. package/src/ui/theme/presets/arcade.ts +0 -261
  359. package/src/ui/theme/presets/studio.ts +0 -261
  360. package/src/ui/theme/presets/tabletop.ts +0 -266
  361. package/src/ui/theme/tokens.ts +0 -392
  362. package/src/ui/types/hex-color.ts +0 -20
  363. package/src/ui/types/player-state.ts +0 -463
  364. package/src/ui/types/tiled-board.ts +0 -785
  365. package/src/ui/types/visual-state.ts +0 -137
  366. package/src/ui.ts +0 -1
  367. /package/dist/{chunk-NKCRKGR2.js.map → chunk-3RQEICD3.js.map} +0 -0
  368. /package/dist/{chunk-I46YJSOD.js.map → codegen.js.map} +0 -0
  369. /package/dist/{chunk-T52J5RMF.js.map → reducer-contract.js.map} +0 -0
  370. /package/dist/{generated → runtime}/runtime-api.js.map +0 -0
  371. /package/dist/ui/{types/player-state.js → player-state.js} +0 -0
  372. /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-326PGVAA.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-ZABVH7AO.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-WG4JQL3S.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-MZNVHMJ5.js.map
694
+ //# sourceMappingURL=chunk-TXXLS3OI.js.map