@dreamboard-games/ui-sdk 0.0.43 → 0.0.45

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 (166) hide show
  1. package/dist/components/ActionButton.d.ts.map +1 -1
  2. package/dist/components/ActionButton.js +2 -1
  3. package/dist/components/Card.d.ts +1 -1
  4. package/dist/components/Card.d.ts.map +1 -1
  5. package/dist/components/DiceRoller.d.ts +3 -2
  6. package/dist/components/DiceRoller.d.ts.map +1 -1
  7. package/dist/components/DiceRoller.js +4 -13
  8. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  9. package/dist/components/ErrorBoundary.js +94 -2
  10. package/dist/components/InteractionForm.d.ts +1 -1
  11. package/dist/components/InteractionForm.d.ts.map +1 -1
  12. package/dist/components/InteractionForm.js +29 -15
  13. package/dist/components/PrimaryActionButton.d.ts.map +1 -1
  14. package/dist/components/PrimaryActionButton.js +7 -6
  15. package/dist/components/ResourceCounter.d.ts +59 -25
  16. package/dist/components/ResourceCounter.d.ts.map +1 -1
  17. package/dist/components/ResourceCounter.js +106 -115
  18. package/dist/components/Toast.d.ts +13 -6
  19. package/dist/components/Toast.d.ts.map +1 -1
  20. package/dist/components/Toast.js +10 -5
  21. package/dist/components/board/HexGrid.js +6 -6
  22. package/dist/components/board/target-layer.d.ts +18 -2
  23. package/dist/components/board/target-layer.d.ts.map +1 -1
  24. package/dist/components/board/target-layer.js +20 -3
  25. package/dist/components/index.d.ts +3 -4
  26. package/dist/components/index.d.ts.map +1 -1
  27. package/dist/components/index.js +3 -4
  28. package/dist/components/surfaces/InboxSurface.d.ts.map +1 -1
  29. package/dist/components/surfaces/InboxSurface.js +2 -6
  30. package/dist/components/surfaces/PlayerCardsSurface.js +2 -2
  31. package/dist/components/surfaces/internal/CardZoneRoutedForm.d.ts +7 -0
  32. package/dist/components/surfaces/internal/CardZoneRoutedForm.d.ts.map +1 -0
  33. package/dist/components/surfaces/internal/CardZoneRoutedForm.js +9 -0
  34. package/dist/components/surfaces/internal/DefaultInteractionButton.d.ts.map +1 -1
  35. package/dist/components/surfaces/internal/DefaultInteractionButton.js +5 -8
  36. package/dist/components/surfaces/internal/useCardZoneInteractions.d.ts +2 -2
  37. package/dist/components/surfaces/internal/useCardZoneInteractions.d.ts.map +1 -1
  38. package/dist/components/surfaces/internal/useCardZoneInteractions.js +19 -43
  39. package/dist/context/InteractionDraftContext.d.ts +11 -2
  40. package/dist/context/InteractionDraftContext.d.ts.map +1 -1
  41. package/dist/context/InteractionDraftContext.js +41 -4
  42. package/dist/defaults/components.d.ts +0 -5
  43. package/dist/defaults/components.d.ts.map +1 -1
  44. package/dist/defaults/components.js +7 -11
  45. package/dist/hooks/useBoardInteractions.d.ts +35 -12
  46. package/dist/hooks/useBoardInteractions.d.ts.map +1 -1
  47. package/dist/hooks/useBoardInteractions.js +186 -82
  48. package/dist/hooks/useInteractionHandle.d.ts +1 -1
  49. package/dist/hooks/useInteractionHandle.d.ts.map +1 -1
  50. package/dist/hooks/useInteractionHandle.js +12 -27
  51. package/dist/index.d.ts +11 -17
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +5 -14
  54. package/dist/primitives/board.d.ts +53 -3
  55. package/dist/primitives/board.d.ts.map +1 -1
  56. package/dist/primitives/board.js +65 -41
  57. package/dist/primitives/dialog-lifecycle.d.ts +17 -0
  58. package/dist/primitives/dialog-lifecycle.d.ts.map +1 -0
  59. package/dist/primitives/dialog-lifecycle.js +24 -0
  60. package/dist/primitives/dice.d.ts +31 -0
  61. package/dist/primitives/dice.d.ts.map +1 -0
  62. package/dist/primitives/dice.js +33 -0
  63. package/dist/primitives/game.d.ts +55 -0
  64. package/dist/primitives/game.d.ts.map +1 -0
  65. package/dist/primitives/game.js +101 -0
  66. package/dist/primitives/index.d.ts +7 -4
  67. package/dist/primitives/index.d.ts.map +1 -1
  68. package/dist/primitives/index.js +7 -4
  69. package/dist/primitives/interaction-form-binding.d.ts +12 -0
  70. package/dist/primitives/interaction-form-binding.d.ts.map +1 -0
  71. package/dist/primitives/interaction-form-binding.js +14 -0
  72. package/dist/primitives/interaction-submit.d.ts +23 -0
  73. package/dist/primitives/interaction-submit.d.ts.map +1 -0
  74. package/dist/primitives/interaction-submit.js +41 -0
  75. package/dist/primitives/interaction.d.ts +76 -6
  76. package/dist/primitives/interaction.d.ts.map +1 -1
  77. package/dist/primitives/interaction.js +210 -26
  78. package/dist/primitives/player-roster.d.ts +2 -1
  79. package/dist/primitives/player-roster.d.ts.map +1 -1
  80. package/dist/primitives/prompt.d.ts +36 -11
  81. package/dist/primitives/prompt.d.ts.map +1 -1
  82. package/dist/primitives/prompt.js +29 -17
  83. package/dist/primitives/ui.d.ts +9 -0
  84. package/dist/primitives/ui.d.ts.map +1 -0
  85. package/dist/primitives/ui.js +7 -0
  86. package/dist/primitives/zone.d.ts +111 -5
  87. package/dist/primitives/zone.d.ts.map +1 -1
  88. package/dist/primitives/zone.js +349 -9
  89. package/dist/reducer.d.ts +2 -14
  90. package/dist/reducer.d.ts.map +1 -1
  91. package/dist/reducer.js +1 -14
  92. package/dist/runtime/createPluginRuntimeAPI.js +1 -1
  93. package/dist/types/hex-color.d.ts +7 -0
  94. package/dist/types/hex-color.d.ts.map +1 -0
  95. package/dist/types/hex-color.js +13 -0
  96. package/dist/types/player-state.d.ts +28 -14
  97. package/dist/types/player-state.d.ts.map +1 -1
  98. package/dist/types/plugin-state.d.ts +9 -3
  99. package/dist/types/plugin-state.d.ts.map +1 -1
  100. package/dist/ui-contract.d.ts +119 -14
  101. package/dist/ui-contract.d.ts.map +1 -1
  102. package/dist/ui-contract.js +4 -3
  103. package/dist/ui-sdk.d.ts +1637 -1245
  104. package/dist/utils/interaction-inputs.d.ts +8 -5
  105. package/dist/utils/interaction-inputs.d.ts.map +1 -1
  106. package/dist/utils/interaction-inputs.js +82 -14
  107. package/dist/utils/interaction-router.d.ts +31 -0
  108. package/dist/utils/interaction-router.d.ts.map +1 -0
  109. package/dist/utils/interaction-router.js +114 -0
  110. package/package.json +1 -1
  111. package/src/components/ActionButton.tsx +2 -1
  112. package/src/components/Card.tsx +1 -1
  113. package/src/components/DiceRoller.tsx +13 -22
  114. package/src/components/ErrorBoundary.test.tsx +19 -0
  115. package/src/components/ErrorBoundary.tsx +113 -24
  116. package/src/components/InteractionForm.test.tsx +24 -0
  117. package/src/components/InteractionForm.tsx +48 -23
  118. package/src/components/PrimaryActionButton.tsx +19 -5
  119. package/src/components/ResourceCounter.test.tsx +13 -13
  120. package/src/components/ResourceCounter.tsx +238 -244
  121. package/src/components/Toast.tsx +23 -10
  122. package/src/components/__fixtures__/ResourceCounter.fixture.tsx +70 -169
  123. package/src/components/board/HexGrid.tsx +6 -6
  124. package/src/components/board/target-layer.ts +44 -5
  125. package/src/components/index.ts +17 -10
  126. package/src/components/surfaces/InboxSurface.tsx +7 -5
  127. package/src/components/surfaces/PlayerCardsSurface.tsx +6 -6
  128. package/src/components/surfaces/internal/CardZoneRoutedForm.tsx +35 -0
  129. package/src/components/surfaces/internal/DefaultInteractionButton.tsx +17 -7
  130. package/src/components/surfaces/internal/useCardZoneInteractions.ts +25 -67
  131. package/src/context/InteractionDraftContext.tsx +51 -5
  132. package/src/defaults/components.tsx +12 -50
  133. package/src/defaults/defaults.test.tsx +1 -50
  134. package/src/hooks/useBoardInteractions.test.tsx +240 -17
  135. package/src/hooks/useBoardInteractions.ts +330 -105
  136. package/src/hooks/useInteractionHandle.ts +23 -28
  137. package/src/index.test.ts +60 -40
  138. package/src/index.ts +30 -36
  139. package/src/primitives/board.test.tsx +73 -0
  140. package/src/primitives/board.tsx +191 -40
  141. package/src/primitives/dialog-lifecycle.ts +58 -0
  142. package/src/primitives/dice.test.tsx +47 -0
  143. package/src/primitives/dice.tsx +79 -0
  144. package/src/primitives/game.test.tsx +98 -0
  145. package/src/primitives/game.tsx +213 -0
  146. package/src/primitives/index.ts +84 -0
  147. package/src/primitives/interaction-form-binding.tsx +56 -0
  148. package/src/primitives/interaction-submit.ts +90 -0
  149. package/src/primitives/interaction.test.tsx +396 -0
  150. package/src/primitives/interaction.tsx +451 -31
  151. package/src/primitives/player-roster.tsx +2 -1
  152. package/src/primitives/prompt.test.tsx +94 -3
  153. package/src/primitives/prompt.tsx +87 -48
  154. package/src/primitives/ui.test.tsx +131 -0
  155. package/src/primitives/ui.tsx +13 -0
  156. package/src/primitives/zone.test.tsx +305 -0
  157. package/src/primitives/zone.tsx +660 -12
  158. package/src/reducer.ts +7 -20
  159. package/src/runtime/createPluginRuntimeAPI.ts +1 -1
  160. package/src/types/hex-color.ts +20 -0
  161. package/src/types/player-state.ts +36 -18
  162. package/src/types/plugin-state.ts +10 -3
  163. package/src/ui-contract.ts +253 -21
  164. package/src/utils/interaction-inputs.test.ts +400 -0
  165. package/src/utils/interaction-inputs.ts +113 -11
  166. package/src/utils/interaction-router.ts +200 -0
@@ -1,9 +1,17 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useContext, useMemo } from "react";
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { createContext, useContext, useMemo, } from "react";
3
+ import { useInteractionUiStore } from "../context/InteractionDraftContext.js";
4
+ import { usePluginSession } from "../context/PluginSessionContext.js";
3
5
  import { usePluginState } from "../context/PluginStateContext.js";
4
- import { renderPrimitive, } from "./primitive-props.js";
6
+ import { useRuntimeContext } from "../context/RuntimeContext.js";
7
+ import { inputByTarget, interactionInputKeys, } from "../utils/interaction-inputs.js";
8
+ import { claimInteractionSubmit, clearInteractionRoute, markInteractionPending, routeInteractionTarget, shouldRouteInteractionPending, } from "../utils/interaction-router.js";
9
+ import { useGameActionError } from "./game.js";
10
+ import { runInteractionAction } from "./interaction-submit.js";
11
+ import { composeEventHandlers, renderPrimitive, } from "./primitive-props.js";
5
12
  const ZoneContext = createContext(null);
6
13
  const ZoneCardContext = createContext(null);
14
+ const ZonePileContext = createContext(null);
7
15
  export function useZonePrimitiveContext() {
8
16
  const value = useContext(ZoneContext);
9
17
  if (!value) {
@@ -11,9 +19,19 @@ export function useZonePrimitiveContext() {
11
19
  }
12
20
  return value;
13
21
  }
22
+ export function useOptionalZonePrimitiveContext() {
23
+ return useContext(ZoneContext);
24
+ }
14
25
  export function useZoneCardContext() {
15
26
  return useContext(ZoneCardContext);
16
27
  }
28
+ export function useZonePileContext() {
29
+ const value = useContext(ZonePileContext);
30
+ if (!value) {
31
+ throw new Error("Zone pile primitives must be rendered inside <Zone.PileRoot>.");
32
+ }
33
+ return value;
34
+ }
17
35
  export function ZoneRoot({ zone, children, ...props }) {
18
36
  const snapshot = usePluginState((state) => state.gameplay.zones[zone]) ?? null;
19
37
  const value = useMemo(() => ({ zone, snapshot }), [snapshot, zone]);
@@ -25,34 +43,356 @@ export function ZoneRoot({ zone, children, ...props }) {
25
43
  children,
26
44
  }) }));
27
45
  }
28
- export function ZoneList({ children, ...props }) {
46
+ export function ZoneList({ children, empty, sort, ...props }) {
29
47
  const { zone, snapshot } = useZonePrimitiveContext();
48
+ const cards = (snapshot?.cardIds ?? []).map((cardId, index) => createZoneCardRenderItem(zone, snapshot, cardId, index));
49
+ const items = sort ? [...cards].sort(sort) : cards;
30
50
  const isEmpty = (snapshot?.cardIds.length ?? 0) === 0;
51
+ const renderedChildren = typeof children === "function"
52
+ ? isEmpty
53
+ ? empty
54
+ : items.map((item) => (_jsx(ZoneItem, { card: item, children: children(item) }, item.id)))
55
+ : isEmpty && empty !== undefined
56
+ ? empty
57
+ : children;
31
58
  return renderPrimitive("div", {
32
59
  ...props,
33
60
  role: props.role ?? "list",
34
61
  "data-dreamboard-zone-list": "",
35
62
  "data-zone": zone,
36
63
  "data-empty": isEmpty || undefined,
37
- children,
64
+ children: renderedChildren,
38
65
  });
39
66
  }
40
67
  export function ZoneItem({ card, children, ...props }) {
41
68
  const { zone, snapshot } = useZonePrimitiveContext();
42
- const playable = snapshot?.playableByCardId[card] ?? [];
43
- const cardContext = useMemo(() => ({ zone, cardId: card }), [card, zone]);
69
+ const item = typeof card === "string"
70
+ ? createZoneCardRenderItem(zone, snapshot, card, indexOfCard(snapshot, card))
71
+ : card;
72
+ const cardContext = useMemo(() => ({ zone, cardId: item.id }), [item.id, zone]);
44
73
  return (_jsx(ZoneCardContext.Provider, { value: cardContext, children: renderPrimitive("div", {
45
74
  ...props,
46
75
  role: props.role ?? "listitem",
47
76
  "data-dreamboard-zone-item": "",
48
77
  "data-zone": zone,
49
- "data-card-id": card,
50
- "data-playable": playable.some((descriptor) => descriptor.available) || undefined,
78
+ "data-card-id": item.id,
79
+ "data-card-type": item.hidden ? undefined : item.cardType,
80
+ "data-card-index": item.index,
81
+ "data-card-hidden": item.hidden || undefined,
82
+ "data-playable": item.hidden ? undefined : item.playable || undefined,
51
83
  children,
52
84
  }) }));
53
85
  }
86
+ function ZoneCardAtContent({ index, children, empty = null, ...props }) {
87
+ const { zone, snapshot } = useZonePrimitiveContext();
88
+ const cardIndex = resolveZoneCardIndex(snapshot, index);
89
+ if (cardIndex === null)
90
+ return _jsx(_Fragment, { children: empty });
91
+ const cardId = snapshot?.cardIds[cardIndex];
92
+ if (!cardId)
93
+ return _jsx(_Fragment, { children: empty });
94
+ const card = createZoneCardRenderItem(zone, snapshot, cardId, cardIndex);
95
+ return (_jsx(ZoneItem, { card: card, ...props, children: typeof children === "function" ? children(card) : children }));
96
+ }
97
+ export function ZoneCardAt({ zone, ...props }) {
98
+ if (zone) {
99
+ return (_jsx(ZoneRoot, { zone: zone, children: _jsx(ZoneCardAtContent, { ...props }) }));
100
+ }
101
+ return _jsx(ZoneCardAtContent, { ...props });
102
+ }
103
+ export function ZoneTopCard(props) {
104
+ return _jsx(ZoneCardAt, { ...props, index: 0 });
105
+ }
106
+ export function ZoneCardAction({ card, interaction, input, extraInputs, onSelect, onSelectError, disabled, onClick, children, ...props }) {
107
+ const { controllingPlayerId } = usePluginSession();
108
+ const runtime = useRuntimeContext();
109
+ const store = useInteractionUiStore();
110
+ const contextCard = useZoneCardContext();
111
+ const { snapshot } = useZonePrimitiveContext();
112
+ const gameActionError = useGameActionError();
113
+ const cardId = card ?? contextCard?.cardId;
114
+ const route = useZoneCardActionRoute(cardId, snapshot, interaction, input);
115
+ const isDisabled = disabled ??
116
+ (!cardId ||
117
+ !route.descriptor ||
118
+ !route.inputKey ||
119
+ route.ambiguous ||
120
+ !route.descriptor.available);
121
+ return renderPrimitive("button", {
122
+ type: "button",
123
+ ...props,
124
+ children,
125
+ disabled: isDisabled,
126
+ "aria-disabled": isDisabled,
127
+ "data-dreamboard-zone-card-action": "",
128
+ "data-card-id": cardId,
129
+ "data-interaction-id": route.descriptor?.interactionId,
130
+ "data-interaction-key": route.descriptor?.interactionKey ?? interaction,
131
+ "data-input-name": route.inputKey ?? input,
132
+ "data-eligible": Boolean(route.descriptor && route.inputKey),
133
+ "data-ambiguous": route.ambiguous || undefined,
134
+ "data-disabled": isDisabled || undefined,
135
+ onClick: composeEventHandlers(onClick, () => {
136
+ if (isDisabled ||
137
+ !cardId ||
138
+ !route.descriptor ||
139
+ !route.inputKey ||
140
+ !controllingPlayerId) {
141
+ return;
142
+ }
143
+ const descriptor = route.descriptor;
144
+ const inputKey = route.inputKey;
145
+ void runInteractionAction(async () => {
146
+ const { params, readiness } = routeInteractionTarget(store, descriptor, {
147
+ inputKey,
148
+ value: cardId,
149
+ extraInputs: resolveCardActionExtraInputs(extraInputs, cardId),
150
+ });
151
+ if (shouldRouteInteractionPending(descriptor, readiness)) {
152
+ markInteractionPending(store, descriptor);
153
+ return {
154
+ status: "pending",
155
+ interactionKey: descriptor.interactionKey,
156
+ descriptor,
157
+ missingInputs: readiness.missingInputs,
158
+ };
159
+ }
160
+ if (!claimInteractionSubmit(store, descriptor)) {
161
+ return {
162
+ status: "submitted",
163
+ interactionKey: descriptor.interactionKey,
164
+ descriptor,
165
+ };
166
+ }
167
+ try {
168
+ await runtime.submitInteraction(controllingPlayerId, descriptor.interactionId, params);
169
+ clearInteractionRoute(store, descriptor);
170
+ return {
171
+ status: "submitted",
172
+ interactionKey: descriptor.interactionKey,
173
+ descriptor,
174
+ };
175
+ }
176
+ finally {
177
+ store.setSubmitting(descriptor.interactionKey, false);
178
+ }
179
+ }, {
180
+ onSuccess: onSelect,
181
+ onError: onSelectError ?? gameActionError ?? undefined,
182
+ });
183
+ }),
184
+ });
185
+ }
186
+ export function ZonePileRoot({ zone, label, hiddenDescription = null, emptyDescription = null, visibleDescription = null, children, ...props }) {
187
+ return (_jsx(ZoneRoot, { zone: zone, ...props, children: _jsx(ZonePileProvider, { emptyDescription: emptyDescription, hiddenDescription: hiddenDescription, label: label, visibleDescription: visibleDescription, children: children }) }));
188
+ }
189
+ function ZonePileProvider({ label, hiddenDescription, emptyDescription, visibleDescription, children, }) {
190
+ const { zone, snapshot } = useZonePrimitiveContext();
191
+ // Snapshot is the single source of truth for what's in a pile. A zone that
192
+ // isn't in the current phase's projection scope (snapshot === null) is
193
+ // treated as hidden — author should change the reducer projection rather
194
+ // than inject ids in the UI.
195
+ const cards = snapshot?.cardIds ?? [];
196
+ const items = cards.map((cardId, index) => createZoneCardRenderItem(zone, snapshot, cardId, index));
197
+ const count = cards.length;
198
+ const isHidden = snapshot === null;
199
+ // PileCards iterates whatever the snapshot exposes. Items are tagged
200
+ // `hidden: true | false` so the author's `renderCard` discriminates on
201
+ // honest data — including the "id without contents" case — rather than
202
+ // receiving a lying ViewCard with `cardType: "unknown"`.
203
+ const hasVisibleCards = items.length > 0;
204
+ const description = isHidden
205
+ ? hiddenDescription
206
+ : hasVisibleCards
207
+ ? (visibleDescription?.(count) ?? null)
208
+ : emptyDescription;
209
+ const value = useMemo(() => ({
210
+ zone,
211
+ label,
212
+ count,
213
+ cards,
214
+ items,
215
+ hasVisibleCards,
216
+ isHidden,
217
+ description,
218
+ }), [cards, count, description, hasVisibleCards, isHidden, items, label, zone]);
219
+ return (_jsx(ZonePileContext.Provider, { value: value, children: children }));
220
+ }
221
+ export function ZonePileTrigger({ children, ...props }) {
222
+ const pile = useZonePileContext();
223
+ return renderPrimitive("button", {
224
+ type: "button",
225
+ ...props,
226
+ "aria-label": props["aria-label"] ?? `Show ${pile.label} pile`,
227
+ "data-dreamboard-zone-pile-trigger": "",
228
+ "data-zone": pile.zone,
229
+ "data-card-count": pile.count,
230
+ "data-hidden": pile.isHidden || undefined,
231
+ children,
232
+ });
233
+ }
234
+ export function ZonePileLabel({ children, ...props }) {
235
+ const pile = useZonePileContext();
236
+ return renderPrimitive("span", {
237
+ ...props,
238
+ "data-dreamboard-zone-pile-label": "",
239
+ "data-zone": pile.zone,
240
+ children: children ?? pile.label,
241
+ });
242
+ }
243
+ export function ZonePileCount({ children, ...props }) {
244
+ const pile = useZonePileContext();
245
+ return renderPrimitive("span", {
246
+ ...props,
247
+ "data-dreamboard-zone-pile-count": "",
248
+ "data-zone": pile.zone,
249
+ "data-card-count": pile.count,
250
+ children: children ?? `${pile.count} cards`,
251
+ });
252
+ }
253
+ export function ZonePileDescription({ children, ...props }) {
254
+ const pile = useZonePileContext();
255
+ const description = children ?? pile.description;
256
+ if (description === null || description === undefined)
257
+ return null;
258
+ return renderPrimitive("span", {
259
+ ...props,
260
+ "data-dreamboard-zone-pile-description": "",
261
+ "data-zone": pile.zone,
262
+ children: description,
263
+ });
264
+ }
265
+ export function ZonePileCards({ renderCard, ...props }) {
266
+ const pile = useZonePileContext();
267
+ if (!pile.hasVisibleCards)
268
+ return null;
269
+ return (_jsx(ZoneList, { ...props, children: pile.items.map((card) => (_jsx(ZoneItem, { card: card, children: renderCard(card) }, card.id))) }));
270
+ }
271
+ function indexOfCard(snapshot, cardId) {
272
+ return snapshot?.cardIds.indexOf(cardId) ?? -1;
273
+ }
274
+ function resolveZoneCardIndex(snapshot, index) {
275
+ const count = snapshot?.cardIds.length ?? 0;
276
+ const resolved = index < 0 ? count + index : index;
277
+ return resolved >= 0 && resolved < count ? resolved : null;
278
+ }
279
+ function createZoneCardRenderItem(zone, snapshot, cardId, index) {
280
+ const card = parseViewCard(snapshot?.cardsById[cardId]);
281
+ if (card === null) {
282
+ // The snapshot exposes this card id but not its contents. Surface that
283
+ // honestly via the `hidden: true` variant instead of fabricating a
284
+ // ViewCard with a fake `cardType: "unknown"`.
285
+ return { id: cardId, zone, index, hidden: true };
286
+ }
287
+ const interactions = snapshot?.playableByCardId[cardId] ?? [];
288
+ return {
289
+ ...card,
290
+ id: cardId,
291
+ zone,
292
+ index,
293
+ hidden: false,
294
+ playable: interactions.some((descriptor) => descriptor.available),
295
+ interactions,
296
+ };
297
+ }
298
+ function useZoneCardActionRoute(cardId, snapshot, interaction, input) {
299
+ return useMemo(() => {
300
+ if (!cardId || !snapshot) {
301
+ return { descriptor: null, inputKey: null, ambiguous: false };
302
+ }
303
+ const interactions = snapshot.playableByCardId[cardId] ?? [];
304
+ if (interaction) {
305
+ const descriptor = interactions.find((candidate) => candidate.interactionKey === interaction ||
306
+ candidate.interactionId === interaction) ?? null;
307
+ return {
308
+ descriptor,
309
+ inputKey: descriptor
310
+ ? inputKeyForCardAction(descriptor, cardId, input)
311
+ : null,
312
+ ambiguous: false,
313
+ };
314
+ }
315
+ const matches = interactions.flatMap((descriptor) => {
316
+ if (!descriptor.available)
317
+ return [];
318
+ const inputKey = inputKeyForCardAction(descriptor, cardId, input);
319
+ return inputKey ? [{ descriptor, inputKey }] : [];
320
+ });
321
+ if (matches.length !== 1) {
322
+ return {
323
+ descriptor: matches[0]?.descriptor ?? null,
324
+ inputKey: matches[0]?.inputKey ?? null,
325
+ ambiguous: matches.length > 1,
326
+ };
327
+ }
328
+ const match = matches[0];
329
+ if (!match) {
330
+ return { descriptor: null, inputKey: null, ambiguous: false };
331
+ }
332
+ return {
333
+ descriptor: match.descriptor,
334
+ inputKey: match.inputKey,
335
+ ambiguous: false,
336
+ };
337
+ }, [cardId, input, interaction, snapshot]);
338
+ }
339
+ function inputKeyForCardAction(descriptor, cardId, explicitInput) {
340
+ if (explicitInput) {
341
+ const input = descriptor.inputs.find((candidate) => candidate.key === explicitInput);
342
+ return input?.domain.type === "target" &&
343
+ input.domain.targetKind === "card" &&
344
+ (input.domain.eligibleTargets === undefined ||
345
+ input.domain.eligibleTargets.includes(cardId))
346
+ ? input.key
347
+ : null;
348
+ }
349
+ const targetInput = inputByTarget(descriptor, "card", cardId);
350
+ if (targetInput)
351
+ return targetInput.key;
352
+ if (interactionInputKeys(descriptor).includes("cardId")) {
353
+ return descriptor.inputs.find((candidate) => candidate.key === "cardId")
354
+ ? "cardId"
355
+ : null;
356
+ }
357
+ return null;
358
+ }
359
+ function resolveCardActionExtraInputs(extraInputs, cardId) {
360
+ return typeof extraInputs === "function"
361
+ ? extraInputs(cardId)
362
+ : (extraInputs ?? {});
363
+ }
364
+ function parseViewCard(serialized) {
365
+ if (!serialized)
366
+ return null;
367
+ try {
368
+ const parsed = JSON.parse(serialized);
369
+ if (typeof parsed.id !== "string" || typeof parsed.cardType !== "string") {
370
+ return null;
371
+ }
372
+ return {
373
+ ...parsed,
374
+ id: parsed.id,
375
+ cardType: parsed.cardType,
376
+ properties: parsed.properties && typeof parsed.properties === "object"
377
+ ? parsed.properties
378
+ : {},
379
+ };
380
+ }
381
+ catch {
382
+ return null;
383
+ }
384
+ }
54
385
  export const Zone = {
55
386
  Root: ZoneRoot,
56
387
  List: ZoneList,
57
388
  Item: ZoneItem,
389
+ CardAt: ZoneCardAt,
390
+ TopCard: ZoneTopCard,
391
+ CardAction: ZoneCardAction,
392
+ PileRoot: ZonePileRoot,
393
+ PileTrigger: ZonePileTrigger,
394
+ PileLabel: ZonePileLabel,
395
+ PileCount: ZonePileCount,
396
+ PileDescription: ZonePileDescription,
397
+ PileCards: ZonePileCards,
58
398
  };
package/dist/reducer.d.ts CHANGED
@@ -1,21 +1,9 @@
1
- export { useActivePlayers } from "./hooks/useActivePlayers.js";
2
- export { useSimultaneousPhase } from "./hooks/useSimultaneousPhase.js";
3
- export { usePlayerTurnOrder } from "./hooks/usePlayerTurnOrder.js";
4
- export { useGameSelector } from "./hooks/useGameSelector.js";
5
- export { useIsMyTurn } from "./hooks/useIsMyTurn.js";
6
- export { useCards } from "./hooks/useCards.js";
7
- export { useGameView } from "./hooks/useGameView.js";
8
- export { useLobby } from "./hooks/useLobby.js";
9
- export { useMe } from "./hooks/useMe.js";
10
- export { usePlayerInfo } from "./hooks/usePlayerInfo.js";
11
- export { useSeatInbox, type SeatInbox } from "./hooks/useSeatInbox.js";
12
- export { useInteractionHandle, type InteractionHandle, type InteractionHandleStatus, type DraftValidation, type InteractionParamsShape, } from "./hooks/useInteractionHandle.js";
13
- export { useInteractionByKey } from "./hooks/useInteractionByKey.js";
14
- export { usePluginSession } from "./context/PluginSessionContext.js";
15
1
  export { type ClientParamSchema, type ClientParamSchemaMap, } from "./context/ClientParamSchemaContext.js";
16
2
  export type { GameplayPromptOption, GameplaySnapshot, PluginStateSnapshot, } from "./types/reducer-state.js";
17
3
  export type { InteractionDescriptor, InteractionContext, InteractionContextOption, } from "./types/plugin-state.js";
18
4
  export type { LobbyState } from "./hooks/useLobby.js";
19
5
  export type { Player } from "./hooks/useMe.js";
6
+ export type { SeatInbox } from "./hooks/useSeatInbox.js";
7
+ export type { DraftValidation, InteractionHandle, InteractionHandleStatus, InteractionParamsShape, } from "./hooks/useInteractionHandle.js";
20
8
  export type { CardCollection, ViewCard, ViewSlotOccupant, } from "@dreamboard/sdk-types";
21
9
  //# sourceMappingURL=reducer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../src/reducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EACL,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,uCAAuC,CAAC;AAE/C,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EACV,cAAc,EACd,QAAQ,EACR,gBAAgB,GACjB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../src/reducer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,uCAAuC,CAAC;AAE/C,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,cAAc,EACd,QAAQ,EACR,gBAAgB,GACjB,MAAM,uBAAuB,CAAC"}
package/dist/reducer.js CHANGED
@@ -1,14 +1 @@
1
- export { useActivePlayers } from "./hooks/useActivePlayers.js";
2
- export { useSimultaneousPhase } from "./hooks/useSimultaneousPhase.js";
3
- export { usePlayerTurnOrder } from "./hooks/usePlayerTurnOrder.js";
4
- export { useGameSelector } from "./hooks/useGameSelector.js";
5
- export { useIsMyTurn } from "./hooks/useIsMyTurn.js";
6
- export { useCards } from "./hooks/useCards.js";
7
- export { useGameView } from "./hooks/useGameView.js";
8
- export { useLobby } from "./hooks/useLobby.js";
9
- export { useMe } from "./hooks/useMe.js";
10
- export { usePlayerInfo } from "./hooks/usePlayerInfo.js";
11
- export { useSeatInbox } from "./hooks/useSeatInbox.js";
12
- export { useInteractionHandle, } from "./hooks/useInteractionHandle.js";
13
- export { useInteractionByKey } from "./hooks/useInteractionByKey.js";
14
- export { usePluginSession } from "./context/PluginSessionContext.js";
1
+ export {};
@@ -241,7 +241,7 @@ export function createPluginRuntimeAPI() {
241
241
  }, "*");
242
242
  // Tier-0 perf: after notifyStateListeners has kicked React's
243
243
  // render, schedule a post-commit microtask + rAF chain so the
244
- // follow-up `state-rendered` message lands close to when the
244
+ // paired `state-rendered` message lands close to when the
245
245
  // plugin's DOM would have been painted. `queueMicrotask` is
246
246
  // used first because most React listeners finish synchronously;
247
247
  // `requestAnimationFrame` then bounces to the next paint tick.
@@ -0,0 +1,7 @@
1
+ export type HexColor = string & {
2
+ readonly __brand: "HexColor";
3
+ };
4
+ export declare function isHexColor(value: unknown): value is HexColor;
5
+ export declare function parseHexColor(value: unknown): HexColor | undefined;
6
+ export declare function hexColor(value: string): HexColor;
7
+ //# sourceMappingURL=hex-color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hex-color.d.ts","sourceRoot":"","sources":["../../src/types/hex-color.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC;AAIjE,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAElE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAOhD"}
@@ -0,0 +1,13 @@
1
+ const HEX_COLOR_PATTERN = /^#[0-9A-Fa-f]{6}$/;
2
+ export function isHexColor(value) {
3
+ return typeof value === "string" && HEX_COLOR_PATTERN.test(value);
4
+ }
5
+ export function parseHexColor(value) {
6
+ return isHexColor(value) ? value : undefined;
7
+ }
8
+ export function hexColor(value) {
9
+ if (!isHexColor(value)) {
10
+ throw new Error(`Expected a 6-digit hex color such as #E53935, received '${value}'.`);
11
+ }
12
+ return value;
13
+ }
@@ -1,6 +1,19 @@
1
1
  import type { ViewCard } from "@dreamboard/sdk-types";
2
- import type { PlayerId, CardId, CardIdsByDeckId, CardProperties, EdgeTypeId, VertexTypeId, BoardBaseId, BoardId, BoardRef, PerPlayer, PerPlayerBoardRef, PieceId, PieceTypeId, SharedBoardRef, SpaceId, SpaceTypeId, DieId } from "@dreamboard/manifest-contract";
3
- export type { BoardRef, PerPlayer, PerPlayerBoardRef, SharedBoardRef };
2
+ import type { PlayerId, CardId, CardIdsByDeckId, CardProperties, EdgeTypeId, VertexTypeId, BoardBaseId, BoardId, PieceId, PieceTypeId, SpaceId, SpaceTypeId, DieId } from "@dreamboard/manifest-contract";
3
+ import type { HexColor } from "./hex-color.js";
4
+ export interface PerPlayer<Value> {
5
+ readonly __perPlayer: true;
6
+ readonly entries: ReadonlyArray<readonly [PlayerId, Value]>;
7
+ }
8
+ export interface SharedBoardRef<BaseId extends string = BoardBaseId> {
9
+ readonly baseId: BaseId;
10
+ readonly seat?: undefined;
11
+ }
12
+ export interface PerPlayerBoardRef<BaseId extends string = BoardBaseId, Id extends string = PlayerId> {
13
+ readonly baseId: BaseId;
14
+ readonly seat: Id;
15
+ }
16
+ export type BoardRef<BaseId extends string = BoardBaseId, Id extends string = PlayerId> = SharedBoardRef<BaseId> | PerPlayerBoardRef<BaseId, Id>;
4
17
  /**
5
18
  * Hands are keyed by the authored hand id and split per seat. The per-seat
6
19
  * entries are populated from the runtime seat list, not the static manifest
@@ -19,9 +32,9 @@ export interface Player {
19
32
  /** Whether this player is the host */
20
33
  isHost?: boolean;
21
34
  /** Player's assigned color */
22
- color?: string;
35
+ color?: HexColor;
23
36
  }
24
- export interface HexTileState<B extends string = BoardId, SpaceIdValue extends SpaceId = SpaceId, Properties = B extends keyof TilePropertiesByBoardId ? TilePropertiesByBoardId[B] : undefined, View = unknown> {
37
+ export interface HexTileState<B extends string = BoardId, SpaceIdValue extends string = SpaceId, Properties = B extends keyof TilePropertiesByBoardId ? TilePropertiesByBoardId[B] : undefined, View = unknown> {
25
38
  /** Unique tile identifier */
26
39
  id: SpaceIdValue;
27
40
  /** Axial coordinate Q */
@@ -38,13 +51,13 @@ export interface HexTileState<B extends string = BoardId, SpaceIdValue extends S
38
51
  properties?: Properties;
39
52
  /**
40
53
  * Optional view-projection overlay merged onto the static topology by
41
- * `createHexBoardView` / `useHexBoardView`. Authored boards can also
42
- * supply this directly when building tiles by hand.
54
+ * component-first board helpers such as `Board.HexView`. Authored boards can
55
+ * also supply this directly when building tiles by hand.
43
56
  */
44
57
  view?: View;
45
58
  }
46
59
  /** State of an edge on a reducer-projected hex board. */
47
- export interface HexEdgeState<B extends string = BoardId, SpaceIdValue extends SpaceId = SpaceId, EdgeIdValue extends string = string, Properties = B extends keyof EdgePropertiesByBoardId ? EdgePropertiesByBoardId[B] : undefined> {
60
+ export interface HexEdgeState<B extends string = BoardId, SpaceIdValue extends string = SpaceId, EdgeIdValue extends string = string, Properties = B extends keyof EdgePropertiesByBoardId ? EdgePropertiesByBoardId[B] : undefined> {
48
61
  /** Unique edge identifier (serialized string, e.g., "tile1-tile2") */
49
62
  id: EdgeIdValue;
50
63
  /** First hex tile ID this edge borders */
@@ -61,7 +74,7 @@ export interface HexEdgeState<B extends string = BoardId, SpaceIdValue extends S
61
74
  properties?: Properties;
62
75
  }
63
76
  /** State of a vertex on a reducer-projected hex board. */
64
- export interface HexVertexState<B extends string = BoardId, SpaceIdValue extends SpaceId = SpaceId, VertexIdValue extends string = string, Properties = B extends keyof VertexPropertiesByBoardId ? VertexPropertiesByBoardId[B] : undefined> {
77
+ export interface HexVertexState<B extends string = BoardId, SpaceIdValue extends string = SpaceId, VertexIdValue extends string = string, Properties = B extends keyof VertexPropertiesByBoardId ? VertexPropertiesByBoardId[B] : undefined> {
65
78
  /** Unique vertex identifier (serialized string, e.g., "tile1-tile2-tile3") */
66
79
  id: VertexIdValue;
67
80
  /** The hex tile IDs this vertex touches */
@@ -76,7 +89,7 @@ export interface HexVertexState<B extends string = BoardId, SpaceIdValue extends
76
89
  properties?: Properties;
77
90
  }
78
91
  /** Complete state of a reducer-projected hex board. */
79
- export interface HexBoardState<B extends string = BoardId, SpaceIdValue extends SpaceId = SpaceId, EdgeIdValue extends string = string, VertexIdValue extends string = string, TileProperties = B extends keyof TilePropertiesByBoardId ? TilePropertiesByBoardId[B] : undefined, EdgeProperties = B extends keyof EdgePropertiesByBoardId ? EdgePropertiesByBoardId[B] : undefined, VertexProperties = B extends keyof VertexPropertiesByBoardId ? VertexPropertiesByBoardId[B] : undefined> {
92
+ export interface HexBoardState<B extends string = BoardId, SpaceIdValue extends string = SpaceId, EdgeIdValue extends string = string, VertexIdValue extends string = string, TileProperties = B extends keyof TilePropertiesByBoardId ? TilePropertiesByBoardId[B] : undefined, EdgeProperties = B extends keyof EdgePropertiesByBoardId ? EdgePropertiesByBoardId[B] : undefined, VertexProperties = B extends keyof VertexPropertiesByBoardId ? VertexPropertiesByBoardId[B] : undefined> {
80
93
  /** Unique board identifier */
81
94
  id: B;
82
95
  /** All tiles on the board */
@@ -145,7 +158,7 @@ export interface NetworkBoardState {
145
158
  pieces: NetworkPieceState[];
146
159
  }
147
160
  /** State of a cell on a reducer-projected square grid board. */
148
- export interface SquareCellState<SpaceIdValue extends SpaceId = SpaceId, Properties = Record<string, unknown>> {
161
+ export interface SquareCellState<SpaceIdValue extends string = SpaceId, Properties = Record<string, unknown>> {
149
162
  /** Unique cell identifier */
150
163
  id: SpaceIdValue;
151
164
  /** Row index (0-based) */
@@ -162,7 +175,7 @@ export interface SquareCellState<SpaceIdValue extends SpaceId = SpaceId, Propert
162
175
  properties?: Properties;
163
176
  }
164
177
  /** State of an edge on a reducer-projected square grid board. */
165
- export interface SquareEdgeState<SpaceIdValue extends SpaceId = SpaceId, EdgeIdValue extends string = string, Properties = Record<string, unknown>> {
178
+ export interface SquareEdgeState<SpaceIdValue extends string = SpaceId, EdgeIdValue extends string = string, Properties = Record<string, unknown>> {
166
179
  /** Unique edge identifier */
167
180
  id: EdgeIdValue;
168
181
  /** The cell IDs this edge borders */
@@ -177,7 +190,7 @@ export interface SquareEdgeState<SpaceIdValue extends SpaceId = SpaceId, EdgeIdV
177
190
  properties?: Properties;
178
191
  }
179
192
  /** State of a vertex on a reducer-projected square grid board. */
180
- export interface SquareVertexState<SpaceIdValue extends SpaceId = SpaceId, VertexIdValue extends string = string, Properties = Record<string, unknown>> {
193
+ export interface SquareVertexState<SpaceIdValue extends string = SpaceId, VertexIdValue extends string = string, Properties = Record<string, unknown>> {
181
194
  /** Unique vertex identifier */
182
195
  id: VertexIdValue;
183
196
  /** The cell IDs that touch this corner */
@@ -192,7 +205,7 @@ export interface SquareVertexState<SpaceIdValue extends SpaceId = SpaceId, Verte
192
205
  properties?: Properties;
193
206
  }
194
207
  /** State of a piece placed on a reducer-projected square grid cell. */
195
- export interface SquarePieceState<PieceIdValue extends PieceId = PieceId, Properties = Record<string, unknown>> {
208
+ export interface SquarePieceState<PieceIdValue extends string = PieceId, Properties = Record<string, unknown>> {
196
209
  /** Unique piece identifier */
197
210
  id: PieceIdValue;
198
211
  /** Row index where piece is located */
@@ -207,7 +220,7 @@ export interface SquarePieceState<PieceIdValue extends PieceId = PieceId, Proper
207
220
  properties?: Properties;
208
221
  }
209
222
  /** Complete state of a reducer-projected square grid board. */
210
- export interface SquareBoardState<B extends string = BoardId, SpaceIdValue extends SpaceId = SpaceId, EdgeIdValue extends string = string, VertexIdValue extends string = string, PieceIdValue extends PieceId = PieceId, CellProperties = Record<string, unknown>, EdgeProperties = Record<string, unknown>, VertexProperties = Record<string, unknown>, PieceProperties = Record<string, unknown>> {
223
+ export interface SquareBoardState<B extends string = BoardId, SpaceIdValue extends string = SpaceId, EdgeIdValue extends string = string, VertexIdValue extends string = string, PieceIdValue extends string = PieceId, CellProperties = Record<string, unknown>, EdgeProperties = Record<string, unknown>, VertexProperties = Record<string, unknown>, PieceProperties = Record<string, unknown>> {
211
224
  /** Unique board identifier */
212
225
  id: B;
213
226
  /** Number of rows in the grid */
@@ -334,4 +347,5 @@ export interface GameState {
334
347
  boards: BoardStates;
335
348
  dice: DiceStates;
336
349
  }
350
+ export {};
337
351
  //# sourceMappingURL=player-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"player-state.d.ts","sourceRoot":"","sources":["../../src/types/player-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"player-state.d.ts","sourceRoot":"","sources":["../../src/types/player-state.ts"],"names":[],"mappings":"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"}