@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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/workspace-contract/index.ts","../src/runtime/ui-contract.ts","../src/runtime/workspace-contract/board.ts","../src/runtime/workspace-contract/slots.ts","../src/runtime/workspace-contract/forms.ts","../src/runtime/workspace-contract/surfaces.ts","../src/runtime/workspace-contract/zones.ts","../src/runtime/workspace-contract/hand.ts"],"sourcesContent":["import { createElement } from \"react\";\nimport type { ReactNode } from \"react\";\nimport {\n ClientParamSchemaProvider,\n type ClientParamSchemaMap,\n} from \"../context/ClientParamSchemaContext.js\";\nimport {\n createResourceCounter,\n type ResourceCounterComponents,\n type ResourceDisplayConfig,\n} from \"../../ui.js\";\nimport { MobileHandTrayProvider } from \"../../ui/components.js\";\nimport { ToastProvider } from \"../../ui.js\";\nimport {\n createDreamboardUI,\n type DreamboardUI,\n type TypedGame,\n type UIContract,\n} from \"../ui-contract.js\";\nimport type {\n BoardHexGridProps,\n BoardHexViewProps,\n InteractionDialogProps,\n InteractionFormPrimitiveProps,\n InteractionStateProps,\n InteractionSubmitProps,\n InteractionTriggerProps,\n GameMeState,\n GamePlayersState,\n GameRenderState,\n GameTurnState,\n UIRootProps,\n ZoneCardRenderItem,\n} from \"../primitives/index.js\";\nimport type { ZoneListProps } from \"../primitives/zone.js\";\nimport type {\n RuntimeBoard,\n RuntimeInteraction,\n RuntimeZone,\n WorkspaceContractContext,\n WorkspaceContractOptions,\n} from \"./types.js\";\nimport { createBoardNamespace } from \"./board.js\";\nimport { createInteractionForms } from \"./forms.js\";\nimport { createSurfaceResolvers } from \"./surfaces.js\";\nimport { createZoneNamespace } from \"./zones.js\";\n\nexport type { BoardSpaceTargetProps } from \"../primitives/board.js\";\nexport type { HandRole } from \"../../ui/components.js\";\nexport type {\n WorkspaceInteractionSlotComponent,\n WorkspaceFormInputSlot,\n WorkspaceCardInputSlot,\n WorkspaceBoardTargetInputSlot,\n WorkspaceBoardSurface,\n WorkspaceZoneCardsComponent,\n WorkspaceZoneCardComponent,\n WorkspaceZoneStagingComponent,\n WorkspaceHandSurface,\n WorkspaceHandOptions,\n WorkspacePileSurface,\n WorkspaceCardCollectionSurface,\n WorkspaceBoardSurfaceDescriptor,\n WorkspaceHandSurfaceDescriptor,\n WorkspacePileSurfaceDescriptor,\n WorkspacePilesSurfaceDescriptor,\n WorkspaceCardCollectionSurfaceDescriptor,\n WorkspaceInteractionFormsDescriptor,\n WorkspaceInteractionFormDescriptor,\n WorkspaceSurfaceDescriptor,\n WorkspaceSurfaceSpec,\n WorkspaceContractOptions,\n} from \"./types.js\";\n\nexport function createWorkspaceUIContract<\n WorkspaceUI,\n Contract extends UIContract,\n Resource extends string,\n Card,\n HexBoards extends Record<string, unknown>,\n>(\n options: WorkspaceContractOptions<Contract, Resource, Card, HexBoards>,\n): WorkspaceUI {\n const baseUI = createDreamboardUI(options.uiContract);\n const runtimeInteraction = baseUI.Interaction as RuntimeInteraction;\n const runtimeBoard = baseUI.Board as RuntimeBoard;\n const runtimeZone = baseUI.Zone as RuntimeZone<Card>;\n\n const ctx: WorkspaceContractContext<Card> = {\n options,\n // The context carries the contract-erased view of the UI: every consumer\n // already neutralizes key genericity (`as never` inputs/zones), exactly as\n // the original single-file factory did with its `Runtime*` casts.\n baseUI: baseUI as unknown as DreamboardUI,\n runtimeInteraction,\n runtimeBoard,\n runtimeZone,\n withInteractionRoot: (interaction: string, children: ReactNode) =>\n createElement(runtimeInteraction.Root, {\n interaction,\n children,\n }),\n };\n\n const resourceDisplayConfig = options.resourceIds.map((resource) => {\n const presentation = options.resourcePresentationById?.[resource];\n return {\n type: resource,\n label: presentation?.label ?? resource,\n icon: presentation?.icon ?? resource,\n };\n }) satisfies ReadonlyArray<ResourceDisplayConfig<Resource>>;\n const resourceCounter = createResourceCounter<Resource>(\n resourceDisplayConfig,\n );\n\n const { Interaction, useInteractionFormSurface } =\n createInteractionForms(ctx);\n const Board = createBoardNamespace(ctx);\n const Zone = createZoneNamespace(ctx);\n const { defineSurfaces } = createSurfaceResolvers({\n Board,\n Zone,\n useInteractionFormSurface,\n });\n\n const UI = {\n ...baseUI,\n Root: ({ children, ...props }: UIRootProps) =>\n createElement(ClientParamSchemaProvider, {\n schemas: options.clientParamSchemasByPhase,\n children: createElement(ToastProvider, {\n children: createElement(MobileHandTrayProvider, {\n children: createElement(baseUI.Root, { ...props, children }),\n }),\n }),\n }),\n defineSurfaces,\n Interaction,\n Board,\n Zone,\n ResourceCounter: resourceCounter,\n };\n\n return UI as WorkspaceUI;\n}\n\nexport type {\n BoardHexGridProps,\n BoardHexViewProps,\n ClientParamSchemaMap,\n DreamboardUI,\n GameMeState,\n GamePlayersState,\n GameRenderState,\n GameTurnState,\n InteractionDialogProps,\n InteractionFormPrimitiveProps,\n InteractionStateProps,\n InteractionSubmitProps,\n InteractionTriggerProps,\n ResourceCounterComponents,\n TypedGame,\n UIContract,\n UIRootProps,\n ZoneCardRenderItem,\n ZoneListProps,\n};\n","import type {\n ButtonHTMLAttributes,\n ComponentType,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport {\n Board as BoardPrimitive,\n Dice as DicePrimitive,\n Game as GamePrimitive,\n Interaction as InteractionPrimitive,\n Phase as PhasePrimitive,\n PlayerRoster as PlayerRosterPrimitive,\n Prompt as PromptPrimitive,\n PromptInbox as PromptInboxPrimitive,\n UI as UIPrimitive,\n Zone as ZonePrimitive,\n type BoardHexGridProps,\n type BoardHexGridInteractionFilter,\n type BoardTargetProps,\n type BoardSpaceTargetProps,\n type BoardEdgeTargetProps,\n type BoardVertexTargetProps,\n type GameChromeProps,\n type DiceComponents,\n type GameRootProps,\n type InteractionCardInputProps,\n type InteractionDialogProps,\n type InteractionFieldPrimitiveProps,\n type InteractionFormPrimitiveProps,\n type InteractionRoutesMap,\n type InteractionRoutesProps,\n type InteractionRootProps,\n type InteractionSwitchRouteMap,\n type InteractionSwitchProps,\n type PhaseSwitchProps,\n type PlayerRosterComponents,\n type PlayerRosterBadge,\n type PlayerRosterEntry,\n type PlayerRosterListProps,\n type PlayerRosterPartProps,\n type PlayerRosterRootProps,\n type PlayerRosterSwitchButtonProps,\n type PromptDialogProps,\n type PromptInboxItemsProps,\n type PromptOptionRenderItem,\n type PromptOptionProps,\n type PromptOptionsProps,\n type PromptRootProps,\n type UIRootProps,\n type ZoneItemProps,\n type ZoneCardAtProps,\n type ZoneCardActionProps,\n type ZoneCardRenderItem,\n type ZoneListProps,\n type ZonePileCardsProps,\n type ZonePileRootProps,\n type ZoneRootProps,\n} from \"./primitives/index.js\";\nimport type { InteractionDescriptor } from \"./types/plugin-state.js\";\nimport type { AnyHexBoardInput, BoardSpaceIdOf } from \"../ui.js\";\n\n/**\n * Workspace-aware UI typing extension point.\n *\n * Generated workspaces will augment this interface with their concrete UI\n * contract. The unregistered SDK keeps all public keys string-compatible so\n * package-local tests and generic consumers can still import ui-sdk directly.\n */\nexport interface DreamboardUIRegister {}\n\nexport type UIContractBucket = Record<string, unknown>;\n\nexport interface UIContract {\n interactions?: UIContractBucket;\n inputs?: UIContractBucket;\n prompts?: UIContractBucket;\n promptOptions?: UIContractBucket;\n players?: UIContractBucket;\n zones?: UIContractBucket;\n cards?: UIContractBucket;\n phases?: UIContractBucket;\n boardTargets?: UIContractBucket;\n}\n\ntype RegisteredUIContract = DreamboardUIRegister extends {\n ui: infer Registered extends UIContract;\n}\n ? Registered\n : UIContract;\n\ntype BucketOf<Contract extends UIContract, Key extends keyof UIContract> =\n NonNullable<Contract[Key]> extends UIContractBucket\n ? NonNullable<Contract[Key]>\n : UIContractBucket;\n\ntype StringKeyOf<Bucket extends UIContractBucket> = Extract<\n keyof Bucket,\n string\n>;\n\ntype StringKeysOrFallback<Bucket extends UIContractBucket> = [\n StringKeyOf<Bucket>,\n] extends [never]\n ? string\n : string extends StringKeyOf<Bucket>\n ? string\n : StringKeyOf<Bucket>;\n\nexport type RegisteredUI = RegisteredUIContract;\n\nexport type InteractionKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"interactions\">>;\n\nexport type InteractionInputKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"inputs\">>;\n\nexport type PromptKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"prompts\">>;\n\nexport type PromptOptionKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"promptOptions\">>;\n\nexport type PlayerKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"players\">>;\n\nexport type ZoneKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"zones\">>;\n\nexport type CardKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"cards\">>;\n\nexport type PhaseKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"phases\">>;\n\nexport type BoardTargetKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"boardTargets\">>;\n\ntype TypedZoneCardRenderItem<Contract extends UIContract> =\n ZoneCardRenderItem<CardKey<Contract> & string> extends infer Item\n ? Item extends { id: string; zone: string }\n ? Omit<Item, \"id\" | \"zone\"> & {\n id: CardKey<Contract>;\n zone: ZoneKey<Contract>;\n }\n : never\n : never;\n\nexport type TypedInteraction<Contract extends UIContract> = Omit<\n typeof InteractionPrimitive,\n \"Root\" | \"CardInput\" | \"Dialog\" | \"Field\" | \"Form\" | \"Switch\"\n> & {\n Root<Interaction extends InteractionKey<Contract>>(\n props: InteractionRootProps<Interaction>,\n ): ReactElement | null;\n Switch(\n props: Omit<InteractionSwitchProps<InteractionKey<Contract>>, \"routes\"> & {\n routes: InteractionSwitchRouteMap<InteractionKey<Contract>>;\n },\n ): ReactElement;\n Routes(\n props: Omit<InteractionRoutesProps<InteractionKey<Contract>>, \"routes\"> & {\n routes: InteractionRoutesMap<InteractionKey<Contract>>;\n },\n ): ReactElement;\n CardInput<Input extends InteractionInputKey<Contract>>(\n props: Omit<InteractionCardInputProps, \"input\" | \"unsafeCardId\"> & {\n input: Input;\n unsafeCardId?: CardKey<Contract>;\n },\n ): ReactElement;\n Dialog<Interaction extends InteractionKey<Contract>>(\n props: InteractionDialogProps<Interaction>,\n ): ReactElement;\n Field<Input extends InteractionInputKey<Contract>>(\n props: Omit<InteractionFieldPrimitiveProps, \"input\"> & { input: Input },\n ): ReactElement | null;\n Form(props: InteractionFormPrimitiveProps): ReactElement | null;\n};\n\nexport type InteractionSlotComponent<Props = object> = ComponentType<\n Props extends { children: unknown } ? Props : Props & { children?: ReactNode }\n>;\n\nexport interface InteractionDefaultInputSlot {\n readonly Default: InteractionSlotComponent;\n}\n\nexport interface InteractionValueInputSlot<Value = unknown> {\n readonly Value: InteractionSlotComponent<{\n children: (value: Value | undefined) => ReactNode;\n }>;\n}\n\nexport interface InteractionChoiceInputSlot<Value = unknown> {\n readonly Field: InteractionSlotComponent;\n readonly Options: InteractionSlotComponent<{\n children: (option: { value: Value; label: string }) => ReactNode;\n }>;\n}\n\nexport interface InteractionChoiceListInputSlot<Value = unknown> {\n readonly Field: InteractionSlotComponent;\n readonly Options: InteractionSlotComponent<{\n children: (option: { value: Value; label: string }) => ReactNode;\n }>;\n}\n\nexport interface InteractionNumberInputSlot {\n readonly Field: InteractionSlotComponent;\n}\n\nexport interface InteractionResourceMapInputSlot<\n Resource extends string = string,\n> {\n readonly Field: InteractionSlotComponent;\n readonly Resource: InteractionSlotComponent<{ value: Resource }>;\n}\n\nexport type InteractionFormInputSlot<Value = unknown> =\n | InteractionChoiceInputSlot<Value>\n | InteractionChoiceListInputSlot<Value>\n | InteractionNumberInputSlot\n | InteractionResourceMapInputSlot;\n\nexport interface InteractionCardTargetInputSlot<Card extends string = string> {\n readonly Card: InteractionSlotComponent<\n { value: Card } & Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n | \"children\"\n | \"disabled\"\n | \"aria-disabled\"\n | \"aria-pressed\"\n | \"onClick\"\n | \"type\"\n | \"value\"\n >\n >;\n readonly Cards: InteractionSlotComponent<{\n children: (card: { id: Card }) => ReactNode;\n }>;\n}\n\nexport interface InteractionBoardTargetInputSlot<\n Target extends string = string,\n> {\n readonly Target: InteractionSlotComponent<\n { value: Target } & Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n | \"children\"\n | \"disabled\"\n | \"aria-disabled\"\n | \"aria-pressed\"\n | \"onClick\"\n | \"type\"\n | \"value\"\n >\n >;\n}\n\nexport type InteractionBoardSpaceTargetInputSlot<\n Space extends string = string,\n> = InteractionBoardTargetInputSlot<Space>;\n\nexport type InteractionBoardEdgeTargetInputSlot<Edge extends string = string> =\n InteractionBoardTargetInputSlot<Edge>;\n\nexport type InteractionBoardVertexTargetInputSlot<\n Vertex extends string = string,\n> = InteractionBoardTargetInputSlot<Vertex>;\n\nexport type InteractionBoardTileTargetInputSlot<Tile extends string = string> =\n InteractionBoardTargetInputSlot<Tile>;\n\nexport interface InteractionSubmitSlot {\n readonly Button: InteractionSlotComponent<\n Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"disabled\" | \"type\" | \"value\"\n >\n >;\n}\n\nexport type TypedPrompt<Contract extends UIContract> = Omit<\n typeof PromptPrimitive,\n \"Root\" | \"Option\" | \"Options\" | \"Dialog\"\n> & {\n Root<Prompt extends PromptKey<Contract>>(\n props: PromptRootProps<Prompt>,\n ): ReactElement | null;\n Option<Option extends PromptOptionKey<Contract>>(\n props: Omit<PromptOptionProps, \"value\"> & { value: Option },\n ): ReactElement;\n Options(\n props: Omit<PromptOptionsProps, \"children\"> & {\n children: (\n option: Omit<PromptOptionRenderItem, \"id\"> & {\n id: PromptOptionKey<Contract>;\n },\n ) => ReactNode;\n },\n ): ReactElement;\n Dialog<Prompt extends PromptKey<Contract>>(\n props: PromptDialogProps<Prompt>,\n ): ReactElement;\n};\n\nexport type TypedPromptInbox<Contract extends UIContract> = Omit<\n typeof PromptInboxPrimitive,\n \"Items\"\n> & {\n Items(\n props: Omit<PromptInboxItemsProps, \"children\"> & {\n children: (\n prompt: Omit<InteractionDescriptor, \"interactionKey\"> & {\n interactionKey: PromptKey<Contract>;\n },\n ) => ReactNode;\n },\n ): ReactElement;\n};\n\ntype TypedPlayerRosterEntry<Player extends string> = Omit<\n PlayerRosterEntry,\n \"playerId\"\n> & {\n playerId: Player;\n};\n\ntype TypedPlayerRosterRootProps<Player extends string> = Omit<\n PlayerRosterRootProps,\n \"score\" | \"scoreLabel\" | \"badges\" | \"metadata\"\n> & {\n score?: (playerId: Player) => number | undefined;\n scoreLabel?: string | ((playerId: Player) => string | undefined);\n badges?: (\n playerId: Player,\n ) => ReadonlyArray<PlayerRosterBadge | null | false | undefined>;\n metadata?: (playerId: Player) => Record<string, unknown> | undefined;\n};\n\ntype TypedPlayerRosterListProps<Player extends string> = Omit<\n PlayerRosterListProps,\n \"children\"\n> & {\n children?: (player: TypedPlayerRosterEntry<Player>) => ReactNode;\n};\n\ntype TypedPlayerRosterPartProps<Player extends string> = Omit<\n PlayerRosterPartProps,\n \"player\"\n> & {\n player: TypedPlayerRosterEntry<Player>;\n};\n\ntype TypedPlayerRosterSwitchButtonProps<Player extends string> = Omit<\n PlayerRosterSwitchButtonProps,\n \"player\"\n> & {\n player: TypedPlayerRosterEntry<Player>;\n};\n\nexport type TypedPlayerRoster<Contract extends UIContract> = Omit<\n PlayerRosterComponents,\n \"Root\" | \"List\" | \"SwitchButton\" | \"Name\" | \"Score\" | \"Badges\"\n> & {\n Root(\n props: TypedPlayerRosterRootProps<PlayerKey<Contract>>,\n ): ReactElement | null;\n List(props: TypedPlayerRosterListProps<PlayerKey<Contract>>): ReactElement;\n SwitchButton(\n props: TypedPlayerRosterSwitchButtonProps<PlayerKey<Contract>>,\n ): ReactElement;\n Name(props: TypedPlayerRosterPartProps<PlayerKey<Contract>>): ReactElement;\n Score(\n props: TypedPlayerRosterPartProps<PlayerKey<Contract>>,\n ): ReactElement | null;\n Badges(\n props: TypedPlayerRosterPartProps<PlayerKey<Contract>>,\n ): ReactElement | null;\n};\n\nexport type TypedPhase<Contract extends UIContract> = Omit<\n typeof PhasePrimitive,\n \"Switch\"\n> & {\n Switch(props: PhaseSwitchProps<PhaseKey<Contract>>): ReactElement | null;\n};\n\nexport type TypedZone<Contract extends UIContract> = Omit<\n typeof ZonePrimitive,\n | \"Root\"\n | \"Item\"\n | \"CardAt\"\n | \"TopCard\"\n | \"CardAction\"\n | \"List\"\n | \"PileRoot\"\n | \"PileCards\"\n> & {\n Root<Zone extends ZoneKey<Contract>>(\n props: Omit<ZoneRootProps, \"zone\"> & { zone: Zone },\n ): ReactElement;\n Item<Card extends CardKey<Contract>>(\n props: Omit<ZoneItemProps, \"card\"> & { card: Card },\n ): ReactElement;\n CardAction<Card extends CardKey<Contract>>(\n props: Omit<ZoneCardActionProps, \"card\"> & { card?: Card },\n ): ReactElement;\n CardAt<Zone extends ZoneKey<Contract>>(\n props: Omit<ZoneCardAtProps<Zone>, \"zone\" | \"children\"> & {\n zone?: Zone;\n children?:\n | ReactNode\n | ((card: TypedZoneCardRenderItem<Contract>) => ReactNode);\n },\n ): ReactElement | null;\n TopCard<Zone extends ZoneKey<Contract>>(\n props: Omit<ZoneCardAtProps<Zone>, \"zone\" | \"index\" | \"children\"> & {\n zone?: Zone;\n children?:\n | ReactNode\n | ((card: TypedZoneCardRenderItem<Contract>) => ReactNode);\n },\n ): ReactElement | null;\n List(\n props: Omit<ZoneListProps, \"children\"> & {\n children?:\n | ReactNode\n | ((card: TypedZoneCardRenderItem<Contract>) => ReactNode);\n },\n ): ReactElement;\n PileRoot<Zone extends ZoneKey<Contract>>(\n props: Omit<ZonePileRootProps<Zone>, \"zone\"> & {\n zone: Zone;\n },\n ): ReactElement;\n PileCards(\n props: Omit<ZonePileCardsProps, \"renderCard\"> & {\n renderCard: (card: TypedZoneCardRenderItem<Contract>) => ReactNode;\n },\n ): ReactElement | null;\n};\n\nexport type TypedBoard<Contract extends UIContract> = Omit<\n typeof BoardPrimitive,\n \"Target\" | \"SpaceTarget\" | \"EdgeTarget\" | \"VertexTarget\" | \"HexGrid\"\n> & {\n Target<Target extends BoardTargetKey<Contract>>(\n props: Omit<BoardTargetProps, \"value\"> & { value: Target },\n ): ReactElement;\n SpaceTarget<Target extends BoardTargetKey<Contract>>(\n props: Omit<BoardSpaceTargetProps, \"value\"> & { value: Target },\n ): ReactElement;\n EdgeTarget<Target extends BoardTargetKey<Contract>>(\n props: Omit<BoardEdgeTargetProps, \"value\"> & { value: Target },\n ): ReactElement;\n VertexTarget<Target extends BoardTargetKey<Contract>>(\n props: Omit<BoardVertexTargetProps, \"value\"> & { value: Target },\n ): ReactElement;\n HexGrid<\n TBoard extends AnyHexBoardInput,\n TSpaceView extends { id: BoardSpaceIdOf<TBoard> },\n >(\n props: Omit<BoardHexGridProps<TBoard, TSpaceView>, \"interactions\"> & {\n interactions?:\n | Exclude<BoardHexGridInteractionFilter, object>\n | {\n edge?: ReadonlyArray<InteractionKey<Contract>>;\n vertex?: ReadonlyArray<InteractionKey<Contract>>;\n space?: ReadonlyArray<InteractionKey<Contract>>;\n };\n },\n ): ReactElement;\n};\n\nexport type TypedGame<\n _Contract extends UIContract,\n View = unknown,\n Player extends string = PlayerKey<_Contract>,\n Phase extends string = PhaseKey<_Contract>,\n> = Omit<typeof GamePrimitive, \"Root\"> & {\n Root(props: GameRootProps<View, Player, Phase>): ReactElement;\n Chrome(\n props: GameChromeProps<View, Player, Phase, InteractionKey<_Contract>>,\n ): ReactElement;\n};\n\nexport interface DreamboardUI<Contract extends UIContract = RegisteredUI> {\n readonly contract: Contract;\n Root(props: UIRootProps): ReactElement;\n readonly Game: TypedGame<Contract>;\n readonly Interaction: TypedInteraction<Contract>;\n readonly Prompt: TypedPrompt<Contract>;\n readonly PromptInbox: TypedPromptInbox<Contract>;\n readonly PlayerRoster: TypedPlayerRoster<Contract>;\n readonly Dice: DiceComponents;\n readonly Phase: TypedPhase<Contract>;\n readonly Zone: TypedZone<Contract>;\n readonly Board: TypedBoard<Contract>;\n}\n\nexport function createDreamboardUI<const Contract extends UIContract>(\n contract: Contract,\n): DreamboardUI<Contract> {\n return {\n contract,\n Root: UIPrimitive.Root,\n Game: GamePrimitive,\n Interaction: InteractionPrimitive,\n Prompt: PromptPrimitive,\n PromptInbox: PromptInboxPrimitive,\n PlayerRoster: PlayerRosterPrimitive,\n Dice: DicePrimitive,\n Phase: PhasePrimitive,\n Zone: ZonePrimitive,\n Board: BoardPrimitive,\n } as DreamboardUI<Contract>;\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport { createElement } from \"react\";\nimport type {\n BoardHexGridProps,\n BoardHexViewProps,\n} from \"../primitives/index.js\";\nimport type { BoardSpaceTargetProps } from \"../primitives/board.js\";\nimport { createBoardTargetInputSlot } from \"./slots.js\";\nimport type {\n WorkspaceBoardSurfaceDescriptor,\n WorkspaceContractContext,\n} from \"./types.js\";\n\nexport function createUseBoardSurface<Card>(\n ctx: WorkspaceContractContext<Card>,\n) {\n const { baseUI, runtimeBoard } = ctx;\n return function useBoardSurface(_name: string) {\n return {\n Root: ({ children }: { children?: ReactNode }) =>\n createElement(baseUI.Board.Root, { children }),\n Space: (props: BoardSpaceTargetProps<string>) =>\n createElement(runtimeBoard.SpaceTarget, props),\n slot: {\n space: createBoardTargetInputSlot(ctx, \"space\"),\n playerSpace: createBoardTargetInputSlot(ctx, \"space\"),\n edge: createBoardTargetInputSlot(ctx, \"edge\"),\n vertex: createBoardTargetInputSlot(ctx, \"vertex\"),\n tile: createBoardTargetInputSlot(ctx, \"tile\"),\n },\n };\n };\n}\n\n/**\n * Assembles the `Board` namespace for one workspace contract. Called once per\n * `createWorkspaceUIContract` invocation so `HexView`/`HexGrid` keep stable\n * component identities.\n */\nexport function createBoardNamespace<Card>(\n ctx: WorkspaceContractContext<Card>,\n) {\n const { options, baseUI } = ctx;\n const useBoardSurface = createUseBoardSurface(ctx);\n\n return {\n surface<Board extends string>(\n board: Board,\n ): WorkspaceBoardSurfaceDescriptor<Board> {\n return { kind: \"board\", board };\n },\n useSurface: useBoardSurface,\n HexView({ board: boardId, ...props }: { board: string }) {\n return createElement(\n baseUI.Board.HexView as never,\n {\n ...props,\n board: options.hexStaticBoards[boardId],\n } as BoardHexViewProps<never, never>,\n ) as ReactElement;\n },\n HexGrid({ board: boardId, ...props }: { board: string }) {\n return createElement(\n baseUI.Board.HexGrid as never,\n {\n ...props,\n board: options.hexStaticBoards[boardId],\n } as BoardHexGridProps<never, never>,\n ) as ReactElement;\n },\n };\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport { Fragment as ReactFragment, createElement } from \"react\";\nimport { useResolvedCardTargetValue } from \"../primitives/index.js\";\nimport type {\n WorkspaceBoardTargetInputSlot,\n WorkspaceCardInputSlot,\n WorkspaceContractContext,\n WorkspaceFormInputSlot,\n} from \"./types.js\";\n\n/**\n * Render-prop body for the card surface `slot.card.Value`. Surfaces the live\n * draft value for the active interaction's card-target input — the selected\n * card-id array for `selection: \"many\"` collectors, or the single id for\n * `selection: \"one\"`. Renders nothing meaningful (`undefined`) outside an\n * `<Interaction.Root>`.\n */\nfunction CardSlotValue({\n children,\n}: {\n children: (value: unknown | undefined) => ReactNode;\n}): ReactElement {\n const value = useResolvedCardTargetValue();\n return createElement(ReactFragment, null, children(value));\n}\n\nexport function createFormInputSlot<Card>(\n ctx: WorkspaceContractContext<Card>,\n input: string,\n interaction?: string,\n): WorkspaceFormInputSlot {\n const { baseUI, withInteractionRoot } = ctx;\n return {\n Field: (props: { children?: ReactNode }) => {\n const field = createElement(baseUI.Interaction.Field, {\n ...props,\n input: input as never,\n });\n return interaction ? withInteractionRoot(interaction, field) : field;\n },\n Options: () => null,\n Value: ({\n children,\n }: {\n children: (value: unknown | undefined) => ReactNode;\n }) => createElement(ReactFragment, null, children(undefined)),\n Default: ({ children }: { children?: ReactNode }) =>\n createElement(ReactFragment, null, children),\n };\n}\n\nexport function createCardInputSlot<Card>(\n ctx: WorkspaceContractContext<Card>,\n): WorkspaceCardInputSlot {\n const { runtimeInteraction } = ctx;\n return {\n Card: ({ value, ...props }: { value: string; children?: ReactNode }) =>\n createElement(runtimeInteraction.CardInput, {\n ...props,\n input: \"cardId\",\n unsafeCardId: value,\n }),\n Cards: () => null,\n Value: ({\n children,\n }: {\n children: (value: unknown | undefined) => ReactNode;\n }) => createElement(CardSlotValue, { children }),\n Default: ({ children }: { children?: ReactNode }) =>\n createElement(ReactFragment, null, children),\n };\n}\n\nexport function createBoardTargetInputSlot<Card>(\n ctx: WorkspaceContractContext<Card>,\n kind: \"space\" | \"edge\" | \"vertex\" | \"tile\",\n): WorkspaceBoardTargetInputSlot<typeof kind> {\n const { runtimeBoard } = ctx;\n const Target = ({\n value,\n ...props\n }: {\n value: string;\n children?: ReactNode;\n }) => {\n if (kind === \"edge\") {\n return createElement(runtimeBoard.EdgeTarget, { ...props, value });\n }\n if (kind === \"vertex\") {\n return createElement(runtimeBoard.VertexTarget, { ...props, value });\n }\n return createElement(runtimeBoard.SpaceTarget, { ...props, value });\n };\n return {\n Target,\n Value: ({\n children,\n }: {\n children: (value: unknown | undefined) => ReactNode;\n }) => createElement(ReactFragment, null, children(undefined)),\n Default: ({ children }: { children?: ReactNode }) =>\n createElement(ReactFragment, null, children),\n };\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport { createElement } from \"react\";\nimport type {\n InteractionDialogProps,\n InteractionFormPrimitiveProps,\n InteractionStateProps,\n InteractionSubmitProps,\n InteractionTriggerProps,\n} from \"../primitives/index.js\";\nimport { createFormInputSlot } from \"./slots.js\";\nimport type {\n WorkspaceContractContext,\n WorkspaceInteractionFormDescriptor,\n WorkspaceInteractionFormsDescriptor,\n} from \"./types.js\";\n\n/**\n * Builds the interaction-form surface pieces and the `Interaction` namespace\n * for one workspace contract. Called once per `createWorkspaceUIContract`\n * invocation so `InteractionRoutes` keeps a stable component identity.\n */\nexport function createInteractionForms<Card>(\n ctx: WorkspaceContractContext<Card>,\n) {\n const { options, baseUI, runtimeInteraction, withInteractionRoot } = ctx;\n\n function InteractionRoutes({\n routes,\n fallback,\n includeUnavailable,\n }: {\n routes: Record<\n string,\n {\n collect: Record<string, unknown>;\n }\n >;\n fallback?: ReactNode;\n includeUnavailable?: boolean | null;\n }): ReactElement {\n return createElement(runtimeInteraction.Routes, {\n routes,\n fallback,\n includeUnavailable,\n });\n }\n\n function useInteractionFormSurface(interaction: string) {\n const validInputs = options.formInputKeysForInteraction(interaction);\n const slot = Object.fromEntries(\n [...validInputs].map((input) => [\n input,\n createFormInputSlot(ctx, input, interaction),\n ]),\n );\n return {\n Root: ({ children }: { children?: ReactNode }) =>\n withInteractionRoot(interaction, children),\n Form: (props: InteractionFormPrimitiveProps) =>\n withInteractionRoot(\n interaction,\n createElement(baseUI.Interaction.Form, props),\n ),\n Dialog: (props: InteractionDialogProps) =>\n withInteractionRoot(\n interaction,\n createElement(baseUI.Interaction.Dialog, props),\n ),\n State: (props: InteractionStateProps) =>\n withInteractionRoot(\n interaction,\n createElement(baseUI.Interaction.State, props),\n ),\n Arm: (props: InteractionTriggerProps) =>\n withInteractionRoot(\n interaction,\n createElement(baseUI.Interaction.Trigger, props),\n ),\n Submit: (props: InteractionSubmitProps) =>\n withInteractionRoot(\n interaction,\n createElement(baseUI.Interaction.Submit, props),\n ),\n Field: ({ input, ...props }: { input: string; children?: ReactNode }) =>\n withInteractionRoot(\n interaction,\n createElement(baseUI.Interaction.Field, {\n ...props,\n input: input as never,\n }),\n ),\n slot,\n };\n }\n\n const Interaction = {\n State: baseUI.Interaction.State,\n Dialog: baseUI.Interaction.Dialog,\n useForm: useInteractionFormSurface,\n form<const Interaction extends string>(\n interaction: Interaction,\n ): WorkspaceInteractionFormDescriptor<Interaction> {\n return { kind: \"form\", interaction };\n },\n forms<const Interactions extends Readonly<Record<string, string>>>(\n interactions: Interactions,\n ): WorkspaceInteractionFormsDescriptor<Interactions> {\n return { kind: \"forms\", interactions };\n },\n Routes: InteractionRoutes,\n };\n\n return { Interaction, useInteractionFormSurface };\n}\n","import type {\n WorkspaceHandOptions,\n WorkspaceSurfaceDescriptor,\n WorkspaceSurfaceSpec,\n} from \"./types.js\";\n\ninterface SurfaceResolverDeps {\n readonly Board: {\n useSurface(name: string): unknown;\n };\n readonly Zone: {\n useHand(name: string, zoneOptions: WorkspaceHandOptions): unknown;\n usePile(name: string, zoneOptions: { zone: string }): unknown;\n useCardCollection(\n name: string,\n zoneOptions: { zones: readonly string[]; mode?: \"all\" | \"top-card\" },\n ): unknown;\n };\n readonly useInteractionFormSurface: (interaction: string) => unknown;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isSurfaceDescriptor(\n value: unknown,\n): value is WorkspaceSurfaceDescriptor {\n return (\n isPlainObject(value) &&\n typeof (value as { kind?: unknown }).kind === \"string\"\n );\n}\n\n/**\n * Builds the surface-spec resolvers for one workspace contract. Note:\n * `resolveSurfaceDescriptor` deliberately calls `useInteractionFormSurface`\n * (and the other `use*` surface hooks) conditionally — this mirrors the\n * original single-file implementation exactly; do not \"fix\" the hook call\n * positions.\n */\nexport function createSurfaceResolvers({\n Board,\n Zone,\n useInteractionFormSurface,\n}: SurfaceResolverDeps) {\n function resolveSurfaceDescriptor(\n name: string,\n descriptor: WorkspaceSurfaceDescriptor,\n ): unknown {\n switch (descriptor.kind) {\n case \"board\":\n return Board.useSurface(name);\n case \"hand\":\n return Zone.useHand(name, {\n zone: descriptor.zone,\n role: descriptor.role,\n label: descriptor.label,\n order: descriptor.order,\n });\n case \"pile\":\n return Zone.usePile(name, { zone: descriptor.zone });\n case \"piles\":\n return Object.fromEntries(\n descriptor.zones.map((zone) => [\n zone,\n Zone.usePile(String(zone), { zone }),\n ]),\n );\n case \"cardCollection\":\n return Zone.useCardCollection(name, {\n zones: descriptor.zones,\n mode: descriptor.mode,\n });\n case \"form\":\n return useInteractionFormSurface(descriptor.interaction);\n case \"forms\":\n return Object.fromEntries(\n Object.entries(descriptor.interactions).map(([key, interaction]) => [\n key,\n useInteractionFormSurface(interaction),\n ]),\n );\n }\n }\n\n function resolveSurfaceSpec(spec: WorkspaceSurfaceSpec): unknown {\n return Object.fromEntries(\n Object.entries(spec).map(([key, value]) => [\n key,\n isSurfaceDescriptor(value)\n ? resolveSurfaceDescriptor(key, value)\n : resolveSurfaceSpec(value as WorkspaceSurfaceSpec),\n ]),\n );\n }\n\n function defineSurfaces<const Spec extends WorkspaceSurfaceSpec>(spec: Spec) {\n return function useDefinedSurfaces() {\n return resolveSurfaceSpec(spec);\n };\n }\n\n return { defineSurfaces, resolveSurfaceSpec, resolveSurfaceDescriptor };\n}\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { Fragment as ReactFragment, createElement } from \"react\";\nimport { clsx } from \"clsx\";\nimport { usePluginState } from \"../context/PluginStateContext.js\";\nimport { CardFace, type ViewCard } from \"../../ui.js\";\nimport type { InteractionCardInputRenderState } from \"../primitives/index.js\";\nimport type { ZoneListProps } from \"../primitives/zone.js\";\nimport type { PluginStateSnapshot } from \"../types/plugin-state.js\";\nimport { createHandPieces } from \"./hand.js\";\nimport { createCardInputSlot } from \"./slots.js\";\nimport type {\n WorkspaceCardCollectionSurfaceDescriptor,\n WorkspaceContractContext,\n WorkspaceHandOptions,\n WorkspaceHandSurfaceDescriptor,\n WorkspacePileSurfaceDescriptor,\n WorkspacePilesSurfaceDescriptor,\n} from \"./types.js\";\n\nconst DEFAULT_ZONE_CARD_CLASS =\n \"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\";\n\nfunction cardRenderItemToViewCard(card: unknown, cardId: string): ViewCard {\n if (\n card &&\n typeof card === \"object\" &&\n \"hidden\" in card &&\n (card as { hidden?: unknown }).hidden === false\n ) {\n return card as unknown as ViewCard;\n }\n return {\n id: cardId,\n cardType: \"hidden\",\n name: \"Hidden card\",\n properties: {},\n };\n}\n\nexport function createZoneCardsComponent<Card>(\n ctx: WorkspaceContractContext<Card>,\n zones: readonly string[],\n) {\n const { baseUI, runtimeZone } = ctx;\n return ({\n empty,\n children,\n ...props\n }: {\n empty?: ReactNode;\n children: (card: Card) => ReactNode;\n } & Omit<ZoneListProps, \"children\" | \"empty\">) =>\n createElement(\n ReactFragment,\n null,\n ...zones.map((zone) =>\n createElement(baseUI.Zone.Root, {\n key: zone,\n zone: zone as never,\n children: createElement(runtimeZone.List, {\n ...props,\n empty,\n children,\n }),\n }),\n ),\n );\n}\n\nexport function createZoneCardComponent<Card>(\n ctx: WorkspaceContractContext<Card>,\n) {\n const { options, baseUI, runtimeInteraction } = ctx;\n return ({\n card,\n children,\n className,\n ...props\n }: {\n card: Card;\n children?: ReactNode;\n } & Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"type\" | \"value\">) => {\n const cardId = options.cardIdFromZoneCard(card);\n const zone = options.zoneIdFromZoneCard(card);\n const viewCard = cardRenderItemToViewCard(card, cardId);\n const faceDown =\n !!card &&\n typeof card === \"object\" &&\n \"hidden\" in card &&\n (card as { hidden?: unknown }).hidden === true;\n const renderCardFace = (state: InteractionCardInputRenderState) =>\n createElement(CardFace, {\n card: viewCard,\n selected: state.selected,\n disabled: state.disabled || !state.eligible,\n faceDown,\n size: \"sm\",\n children,\n });\n const match = usePluginState((state: PluginStateSnapshot) => {\n const candidates =\n state.gameplay.zones[zone]?.playableByCardId[cardId] ?? [];\n for (const descriptor of candidates) {\n const input = descriptor.inputs.find(\n (candidateInput) =>\n candidateInput.domain.type === \"cardTarget\" &&\n candidateInput.domain.projection === \"resolved\" &&\n candidateInput.domain.eligibleTargets.includes(cardId),\n );\n if (input) return { descriptor, input };\n }\n return null;\n });\n if (!match) {\n return createElement(\n \"div\",\n {\n ...props,\n className: clsx(\"relative inline-flex\", className),\n \"data-dreamboard-zone-card\": \"\",\n \"data-card-id\": cardId,\n \"data-zone\": zone,\n \"data-interactive\": false,\n },\n createElement(CardFace, {\n card: viewCard,\n faceDown,\n size: \"sm\",\n children,\n }),\n );\n }\n return createElement(baseUI.Zone.Root, {\n zone: zone as never,\n children: createElement(runtimeInteraction.Root, {\n interaction: match.descriptor.interactionKey,\n children: createElement(runtimeInteraction.CardInput, {\n ...props,\n className: clsx(DEFAULT_ZONE_CARD_CLASS, className),\n input: match.input.key,\n unsafeCardId: cardId,\n children: renderCardFace,\n }),\n }),\n });\n };\n}\n\n/**\n * Assembles the `Zone` namespace for one workspace contract. Called once per\n * `createWorkspaceUIContract` invocation.\n */\nexport function createZoneNamespace<Card>(ctx: WorkspaceContractContext<Card>) {\n const { createHandCardsComponent, createStagingComponent } =\n createHandPieces(ctx);\n\n return {\n hand<Zone extends string>(\n zone: Zone,\n options: Omit<WorkspaceHandSurfaceDescriptor<Zone>, \"kind\" | \"zone\">,\n ): WorkspaceHandSurfaceDescriptor<Zone> {\n return { kind: \"hand\", zone, ...options };\n },\n pile<Zone extends string>(\n zone: Zone,\n ): WorkspacePileSurfaceDescriptor<Zone> {\n return { kind: \"pile\", zone };\n },\n piles<const Zones extends readonly string[]>(\n zones: Zones,\n ): WorkspacePilesSurfaceDescriptor<Zones> {\n return { kind: \"piles\", zones };\n },\n collection<const Zones extends readonly string[]>(\n zones: Zones,\n options: { mode?: \"all\" | \"top-card\" } = {},\n ): WorkspaceCardCollectionSurfaceDescriptor<Zones> {\n return { kind: \"cardCollection\", zones, mode: options.mode };\n },\n useHand(_name: string, zoneOptions: WorkspaceHandOptions) {\n const handComponentOptions = {\n name: _name,\n zone: zoneOptions.zone,\n role: zoneOptions.role,\n label: zoneOptions.label,\n order: zoneOptions.order,\n };\n return {\n Hand: createHandCardsComponent(handComponentOptions),\n Card: createZoneCardComponent(ctx),\n Staging: createStagingComponent(handComponentOptions),\n slot: { card: createCardInputSlot(ctx) },\n };\n },\n usePile(_name: string, zoneOptions: { zone: string }) {\n return {\n Pile: createZoneCardsComponent(ctx, [zoneOptions.zone]),\n Card: createZoneCardComponent(ctx),\n };\n },\n useCardCollection(\n _name: string,\n zoneOptions: { zones: readonly string[]; mode?: \"all\" | \"top-card\" },\n ) {\n void zoneOptions.mode;\n return {\n Collection: createZoneCardsComponent(ctx, zoneOptions.zones),\n Card: createZoneCardComponent(ctx),\n slot: { card: createCardInputSlot(ctx) },\n };\n },\n };\n}\n","import type { ReactNode } from \"react\";\nimport { createElement, useMemo } from \"react\";\nimport { clsx } from \"clsx\";\nimport { useIsMobile } from \"../../ui.js\";\nimport { useRegisterMobileHand } from \"../../ui/components.js\";\nimport { useZoneCards } from \"../primitives/index.js\";\nimport {\n HandSurfaceView,\n HandStagingView,\n dropTargetIdFor,\n type HandSelectionSummary,\n type HandSurfaceViewProps,\n type RuntimeDropTarget,\n} from \"../primitives/hand-surface.js\";\nimport type { AuthoredCardIntent } from \"../primitives/hand-intent-adapter.js\";\nimport type {\n CardDropTargetVisualState,\n HandInteractionPolicy,\n HandLayoutKind,\n HandLayoutPolicy,\n InteractionVisualState,\n} from \"../../ui.js\";\nimport type { ZoneListProps } from \"../primitives/zone.js\";\nimport { isInteractionAvailable } from \"../utils/interaction-status.js\";\nimport type {\n WorkspaceContractContext,\n WorkspaceHandComponentOptions,\n} from \"./types.js\";\n\n/**\n * Builds the hand-surface pieces for one workspace contract. Called once per\n * `createWorkspaceUIContract` invocation so `GeneratedHandCards` keeps a\n * single stable component identity per contract (its `useRegisterMobileHand`\n * registration depends on this).\n */\nexport function createHandPieces<Card>(ctx: WorkspaceContractContext<Card>) {\n const { baseUI } = ctx;\n\n function createHandCardsComponent(options: WorkspaceHandComponentOptions) {\n return ({\n empty,\n children,\n className,\n layout,\n mobileInteraction,\n cardSize,\n ariaLabel,\n dropTargets,\n renderDropTargets,\n onCardIntent,\n renderSummary,\n renderActions,\n onSelectionSummary,\n ...props\n }: {\n empty?: ReactNode;\n children: (card: Card, state: InteractionVisualState) => ReactNode;\n className?: string;\n layout?: HandLayoutKind | HandLayoutPolicy;\n mobileInteraction?: HandInteractionPolicy;\n cardSize?: \"sm\" | \"md\" | \"lg\";\n ariaLabel?: string;\n dropTargets?: ReadonlyArray<{\n target:\n | { kind: \"card\"; card: string }\n | { kind: \"space\"; target: string }\n | { kind: \"edge\"; target: string }\n | { kind: \"vertex\"; target: string }\n | { kind: \"tile\"; target: string };\n label: string;\n render: (state: CardDropTargetVisualState) => ReactNode;\n className?: string;\n role?: string;\n order?: number;\n }>;\n renderDropTargets?: (children: ReactNode) => ReactNode;\n onCardIntent?: (intent: AuthoredCardIntent) => void;\n renderSummary?: (summary: HandSelectionSummary) => ReactNode;\n renderActions?: (summary: HandSelectionSummary) => ReactNode;\n onSelectionSummary?: (summary: HandSelectionSummary) => void;\n } & Omit<ZoneListProps, \"children\" | \"empty\">) =>\n createElement(baseUI.Zone.Root, {\n zone: options.zone as never,\n // Fill the author's container instead of shrink-wrapping to the fan's\n // own measured width. Without a definite width here, a centering parent\n // sizes to the cards row, the hand measures that, recomputes a new fan\n // width, and the layout chases itself (a ResizeObserver loop). `w-full`\n // pins the outermost hand element to the available width and breaks the\n // cycle for every author layout.\n className: \"w-full min-w-0\",\n children: createElement(GeneratedHandCards, {\n ...props,\n hand: options,\n className,\n empty,\n children,\n layout,\n mobileInteraction,\n cardSize,\n ariaLabel,\n dropTargets,\n renderDropTargets,\n onCardIntent,\n renderSummary,\n renderActions,\n onSelectionSummary,\n }),\n });\n }\n\n function GeneratedHandCards({\n hand,\n empty,\n children,\n className,\n sort,\n layout,\n mobileInteraction,\n cardSize,\n ariaLabel,\n dropTargets,\n renderDropTargets,\n onCardIntent,\n renderSummary,\n renderActions,\n onSelectionSummary,\n }: {\n hand: WorkspaceHandComponentOptions;\n empty?: ReactNode;\n children: (card: Card, state: InteractionVisualState) => ReactNode;\n className?: string;\n layout?: HandLayoutKind | HandLayoutPolicy;\n mobileInteraction?: HandInteractionPolicy;\n cardSize?: \"sm\" | \"md\" | \"lg\";\n ariaLabel?: string;\n dropTargets?: ReadonlyArray<{\n target:\n | { kind: \"card\"; card: string }\n | { kind: \"space\"; target: string }\n | { kind: \"edge\"; target: string }\n | { kind: \"vertex\"; target: string }\n | { kind: \"tile\"; target: string };\n label: string;\n render: (state: CardDropTargetVisualState) => ReactNode;\n className?: string;\n role?: string;\n order?: number;\n }>;\n renderDropTargets?: (children: ReactNode) => ReactNode;\n onCardIntent?: (intent: AuthoredCardIntent) => void;\n renderSummary?: (summary: HandSelectionSummary) => ReactNode;\n renderActions?: (summary: HandSelectionSummary) => ReactNode;\n onSelectionSummary?: (summary: HandSelectionSummary) => void;\n } & Omit<ZoneListProps, \"children\" | \"empty\">) {\n const isMobile = useIsMobile();\n const { items, count } = useZoneCards({ sort });\n // One predictable presentation for every hand: the projected surface\n // (fan on desktop, tray on mobile by default). Authors choose other shapes\n // explicitly with `layout` (e.g. layout=\"strip\"). We no longer fall back to\n // a bare scroll strip when no interaction props are passed, so the layout —\n // and the eligible/selected projection — stays consistent across phases.\n const handClassName = clsx(\"min-h-[112px]\", className);\n const resolvedDropTargets = useMemo<RuntimeDropTarget[] | undefined>(() => {\n if (!dropTargets || dropTargets.length === 0) return undefined;\n return dropTargets.map((dt) => {\n const value =\n dt.target.kind === \"card\" ? dt.target.card : dt.target.target;\n return {\n targetId: dropTargetIdFor(dt.target.kind, value),\n label: dt.label,\n render: dt.render,\n className: dt.className,\n role: dt.role,\n order: dt.order,\n };\n });\n }, [dropTargets]);\n const content = useMemo(\n () =>\n createElement(HandSurfaceView, {\n zone: hand.zone,\n cards: items,\n renderCard: (card, state, _index) => children(card as Card, state),\n layout,\n mobileInteraction,\n dropTargets: resolvedDropTargets,\n renderDropTargets,\n cardSize,\n renderEmpty: empty !== undefined ? () => empty : undefined,\n ariaLabel,\n onIntentRouted: onCardIntent\n ? (intent) => onCardIntent(intent)\n : undefined,\n renderSummary,\n renderActions,\n onSelectionSummary,\n className: handClassName,\n } satisfies HandSurfaceViewProps<(typeof items)[number]>),\n [\n ariaLabel,\n cardSize,\n children,\n empty,\n hand.zone,\n handClassName,\n items,\n layout,\n mobileInteraction,\n onCardIntent,\n onSelectionSummary,\n renderActions,\n renderDropTargets,\n renderSummary,\n resolvedDropTargets,\n ],\n );\n const active = items.some(\n (item) =>\n !item.hidden &&\n item.interactions.some((descriptor) =>\n isInteractionAvailable(descriptor),\n ),\n );\n const autoOpen = items.some(\n (item) =>\n !item.hidden &&\n item.interactions.some(\n (descriptor) =>\n isInteractionAvailable(descriptor) &&\n descriptor.inputs.some(\n (input) =>\n input.domain.type === \"cardTarget\" &&\n input.domain.selection?.mode === \"many\",\n ),\n ),\n );\n const version = items\n .map((item) =>\n item.hidden\n ? `${item.id}:hidden`\n : `${item.id}:${item.cardType}:${JSON.stringify(item.properties)}`,\n )\n .join(\"|\");\n const registration = useMemo(\n () => ({\n id: `${hand.name}:${hand.zone}`,\n zone: hand.zone,\n label: hand.label,\n role: hand.role,\n order: hand.order,\n version,\n count,\n active,\n autoOpen,\n content: createElement(baseUI.Zone.Root, {\n zone: hand.zone as never,\n children: content,\n }),\n }),\n [\n active,\n autoOpen,\n content,\n count,\n hand.label,\n hand.name,\n hand.order,\n hand.role,\n hand.zone,\n version,\n ],\n );\n useRegisterMobileHand(registration);\n\n return isMobile ? null : content;\n }\n\n function createStagingComponent(options: WorkspaceHandComponentOptions) {\n return ({\n children,\n label,\n renderEmptySlot,\n cardSize,\n ariaLabel,\n className,\n }: {\n children: (card: Card) => ReactNode;\n label?: ReactNode;\n renderEmptySlot?: (index: number) => ReactNode;\n cardSize?: \"sm\" | \"md\" | \"lg\";\n ariaLabel?: string;\n className?: string;\n }) =>\n createElement(HandStagingView, {\n zone: options.zone,\n renderCard: (card) => children(card as Card),\n renderEmptySlot,\n label,\n cardSize,\n ariaLabel,\n className,\n });\n }\n\n return { createHandCardsComponent, createStagingComponent };\n}\n"],"mappings":"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","names":["createElement","createElement","createElement","createElement","createElement","Interaction","Board","Zone","ReactFragment","createElement","clsx","createElement","createElement","createElement","ReactFragment","clsx","createElement","Interaction","Board","Zone","UI"]}
@@ -1,4 +1,4 @@
1
- // src/infrastructure/workspace-codegen/preset-card-sets.ts
1
+ // ../workspace-codegen/src/preset-card-sets.ts
2
2
  var STANDARD_DECK_ID = "standard_52_deck";
3
3
  function createEnumPropertySchema(enums, description) {
4
4
  return {
@@ -136,7 +136,7 @@ function getSuitValue(suit) {
136
136
  }
137
137
  }
138
138
 
139
- // src/infrastructure/workspace-codegen/hex-geometry.ts
139
+ // ../workspace-codegen/src/hex-geometry.ts
140
140
  var HEX_CORNERS = ["ne-e", "e-se", "se-sw", "sw-w", "w-nw", "nw-ne"];
141
141
  var HEX_CORNER_OFFSETS = {
142
142
  "ne-e": [2, -1, -1],
@@ -186,7 +186,7 @@ function resolveHexVertexGeometryKey(ref, spacesById) {
186
186
  return vertexKey;
187
187
  }
188
188
 
189
- // src/infrastructure/workspace-codegen/manifest-contract.ts
189
+ // ../workspace-codegen/src/manifest-contract.ts
190
190
  function isCardPropertySchemaVariants(schema) {
191
191
  return Boolean(schema && "variants" in schema);
192
192
  }
@@ -5651,7 +5651,7 @@ function generateManifestContractSources(manifest) {
5651
5651
  };
5652
5652
  }
5653
5653
 
5654
- // src/infrastructure/workspace-codegen/manifest-validation.ts
5654
+ // ../workspace-codegen/src/manifest-validation.ts
5655
5655
  function isHexBoardTemplateSpec2(boardTemplate) {
5656
5656
  return boardTemplate.layout === "hex";
5657
5657
  }
@@ -6275,9 +6275,9 @@ function validateManifestAuthoring(manifest) {
6275
6275
  };
6276
6276
  }
6277
6277
 
6278
- // src/infrastructure/workspace-codegen/ownership.ts
6278
+ // ../workspace-codegen/src/ownership.ts
6279
6279
  var WORKSPACE_CODEGEN_OWNERSHIP = {
6280
- version: 26,
6280
+ version: 27,
6281
6281
  allowedPaths: {
6282
6282
  rootFiles: [
6283
6283
  ".npmrc",
@@ -6288,7 +6288,7 @@ var WORKSPACE_CODEGEN_OWNERSHIP = {
6288
6288
  "manifest.tsconfig.json",
6289
6289
  "rule.md"
6290
6290
  ],
6291
- directoryPrefixes: ["app/", "ui/", "shared/", "test/"]
6291
+ directoryPrefixes: ["app/", "manifest/", "ui/", "shared/", "test/"]
6292
6292
  },
6293
6293
  dynamic: {
6294
6294
  generatedFiles: [
@@ -6375,7 +6375,7 @@ function isLibraryPath(filePath) {
6375
6375
  return isAuthoritativeGeneratedPath(path);
6376
6376
  }
6377
6377
 
6378
- // src/infrastructure/workspace-codegen/seeds.ts
6378
+ // ../workspace-codegen/src/seeds.ts
6379
6379
  var SETUP_PROFILES_SEED_MARKER = "Generated by dreamboard setup-profiles scaffold.";
6380
6380
  function generateUiContractContent() {
6381
6381
  return `/**
@@ -6403,42 +6403,46 @@ import {
6403
6403
  type BoardSpaceIdOf,
6404
6404
  type InteractionVisualState,
6405
6405
  } from "@dreamboard-games/sdk/ui";
6406
- import { type InteractionDescriptor } from "@dreamboard-games/sdk/generated/runtime";
6406
+ import { type InteractionDescriptor } from "@dreamboard-games/sdk/runtime";
6407
6407
  import {
6408
6408
  createWorkspaceUIContract,
6409
6409
  type BoardHexGridProps as BoardHexGridPropsGeneric,
6410
6410
  type BoardHexViewProps as BoardHexViewPropsGeneric,
6411
6411
  type BoardSpaceTargetProps as BoardSpaceTargetPropsGeneric,
6412
- type ClientParamSchemaMap,
6413
- type DreamboardUI,
6414
- type GameMeState,
6415
- type GamePlayersState,
6416
- type GameRenderState,
6417
- type GameTurnState,
6418
- type ResourceCounterComponents,
6419
- type TypedGame,
6420
- type UIContract,
6421
- type UIRootProps,
6422
- type WorkspaceBoardSurfaceDescriptor,
6423
- type WorkspaceBoardSurface,
6424
- type WorkspaceBoardTargetInputSlot,
6425
- type WorkspaceCardCollectionSurface,
6426
- type WorkspaceCardCollectionSurfaceDescriptor,
6427
- type WorkspaceCardInputSlot,
6428
- type WorkspaceFormInputSlot,
6429
- type WorkspaceHandSurfaceDescriptor,
6430
- type WorkspaceHandSurface,
6431
- type WorkspaceInteractionFormDescriptor,
6432
- type WorkspaceInteractionSlotComponent,
6433
- type WorkspaceInteractionFormsDescriptor,
6434
- type WorkspacePileSurface,
6435
- type WorkspacePileSurfaceDescriptor,
6436
- type WorkspacePilesSurfaceDescriptor,
6437
- type WorkspaceSurfaceSpec,
6438
- type ZoneCardRenderItem,
6439
- type ZoneListProps,
6440
- } from "@dreamboard-games/sdk/generated/workspace-contract";
6441
- import { type ButtonHTMLAttributes, type ReactElement, type ReactNode } from "react";
6412
+ type ClientParamSchemaMap,
6413
+ type DreamboardUI,
6414
+ type GameMeState,
6415
+ type GamePlayersState,
6416
+ type GameRenderState,
6417
+ type GameTurnState,
6418
+ type ResourceCounterComponents,
6419
+ type TypedGame,
6420
+ type UIContract,
6421
+ type UIRootProps,
6422
+ type WorkspaceBoardSurfaceDescriptor,
6423
+ type WorkspaceBoardSurface,
6424
+ type WorkspaceBoardTargetInputSlot,
6425
+ type WorkspaceCardCollectionSurface,
6426
+ type WorkspaceCardCollectionSurfaceDescriptor,
6427
+ type WorkspaceCardInputSlot,
6428
+ type WorkspaceFormInputSlot,
6429
+ type WorkspaceHandSurfaceDescriptor,
6430
+ type WorkspaceHandSurface,
6431
+ type WorkspaceInteractionFormDescriptor,
6432
+ type WorkspaceInteractionSlotComponent,
6433
+ type WorkspaceInteractionFormsDescriptor,
6434
+ type WorkspacePileSurface,
6435
+ type WorkspacePileSurfaceDescriptor,
6436
+ type WorkspacePilesSurfaceDescriptor,
6437
+ type WorkspaceSurfaceSpec,
6438
+ type ZoneCardRenderItem,
6439
+ type ZoneListProps,
6440
+ } from "@dreamboard-games/sdk/runtime/workspace-contract";
6441
+ import {
6442
+ type ButtonHTMLAttributes,
6443
+ type ReactElement,
6444
+ type ReactNode,
6445
+ } from "react";
6442
6446
  import {
6443
6447
  boardHelpers,
6444
6448
  literals,
@@ -6472,7 +6476,7 @@ import {
6472
6476
  */
6473
6477
  type IsAny<T> = 0 extends 1 & T ? true : false;
6474
6478
  type AssertNotAny<T> = IsAny<T> extends true
6475
- ? "SDK runtime types resolved to any \u2014 boundary degraded"
6479
+ ? "sdk runtime types resolved to any \u2014 boundary degraded"
6476
6480
  : true;
6477
6481
  const _uiRuntimeBoundaryResolved: [
6478
6482
  AssertNotAny<InteractionDescriptor>,
@@ -7353,7 +7357,7 @@ export const uiContract = {
7353
7357
  boardTargets: {} as UIBoardTargetRegistry,
7354
7358
  } satisfies UIContract;
7355
7359
 
7356
- declare module "@dreamboard-games/sdk/generated/runtime" {
7360
+ declare module "@dreamboard-games/sdk/runtime" {
7357
7361
  interface DreamboardUIRegister {
7358
7362
  contract: GameDefinition;
7359
7363
  ui: typeof uiContract;
@@ -7673,7 +7677,7 @@ function generateReducerDerivedSeed() {
7673
7677
  //
7674
7678
  // Uncomment the example below once you have something to derive.
7675
7679
 
7676
- // import { defineDerived } from "../../reducer.js";
7680
+ // import { defineDerived } from "@dreamboard-games/sdk/reducer";
7677
7681
  // import type { GameContract } from "./game-contract";
7678
7682
  //
7679
7683
  // export const winnerOf = defineDerived<GameContract>()({
@@ -8047,7 +8051,7 @@ function generateFrameworkFiles(manifest) {
8047
8051
  };
8048
8052
  }
8049
8053
 
8050
- // src/infrastructure/workspace-codegen/index.ts
8054
+ // ../workspace-codegen/src/index.ts
8051
8055
  function generateAuthoritativeFiles(manifest) {
8052
8056
  return {
8053
8057
  ...generateManifestContractSources(manifest),
@@ -8082,4 +8086,4 @@ export {
8082
8086
  generateAuthoritativeFiles,
8083
8087
  generateDynamicGeneratedFiles
8084
8088
  };
8085
- //# sourceMappingURL=chunk-FDNZTDD6.js.map
8089
+ //# sourceMappingURL=chunk-W6SGFWXH.js.map