@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
@@ -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