@dreamboard-games/ui-sdk 0.0.41
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.
- package/LICENSE +89 -0
- package/NOTICE +1 -0
- package/README.md +154 -0
- package/dist/components/ActionButton.d.ts +13 -0
- package/dist/components/ActionButton.d.ts.map +1 -0
- package/dist/components/ActionButton.js +14 -0
- package/dist/components/ActionPanel.d.ts +33 -0
- package/dist/components/ActionPanel.d.ts.map +1 -0
- package/dist/components/ActionPanel.js +148 -0
- package/dist/components/Card.d.ts +29 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Card.js +220 -0
- package/dist/components/ChromeSuppressionContext.d.ts +7 -0
- package/dist/components/ChromeSuppressionContext.d.ts.map +1 -0
- package/dist/components/ChromeSuppressionContext.js +34 -0
- package/dist/components/CostDisplay.d.ts +22 -0
- package/dist/components/CostDisplay.d.ts.map +1 -0
- package/dist/components/CostDisplay.js +41 -0
- package/dist/components/DiceRoller.d.ts +30 -0
- package/dist/components/DiceRoller.d.ts.map +1 -0
- package/dist/components/DiceRoller.js +319 -0
- package/dist/components/Drawer.d.ts +19 -0
- package/dist/components/Drawer.d.ts.map +1 -0
- package/dist/components/Drawer.js +55 -0
- package/dist/components/ErrorBoundary.d.ts +24 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +37 -0
- package/dist/components/GameEndDisplay.d.ts +27 -0
- package/dist/components/GameEndDisplay.d.ts.map +1 -0
- package/dist/components/GameEndDisplay.js +185 -0
- package/dist/components/GameSkeleton.d.ts +12 -0
- package/dist/components/GameSkeleton.d.ts.map +1 -0
- package/dist/components/GameSkeleton.js +54 -0
- package/dist/components/Hand.d.ts +99 -0
- package/dist/components/Hand.d.ts.map +1 -0
- package/dist/components/Hand.js +162 -0
- package/dist/components/HandDock.d.ts +35 -0
- package/dist/components/HandDock.d.ts.map +1 -0
- package/dist/components/HandDock.js +124 -0
- package/dist/components/InteractionForm.d.ts +50 -0
- package/dist/components/InteractionForm.d.ts.map +1 -0
- package/dist/components/InteractionForm.js +402 -0
- package/dist/components/MoreActions.d.ts +49 -0
- package/dist/components/MoreActions.d.ts.map +1 -0
- package/dist/components/MoreActions.js +64 -0
- package/dist/components/PhaseIndicator.d.ts +35 -0
- package/dist/components/PhaseIndicator.d.ts.map +1 -0
- package/dist/components/PhaseIndicator.js +212 -0
- package/dist/components/PlayArea.d.ts +28 -0
- package/dist/components/PlayArea.d.ts.map +1 -0
- package/dist/components/PlayArea.js +48 -0
- package/dist/components/PluginRuntime.d.ts +37 -0
- package/dist/components/PluginRuntime.d.ts.map +1 -0
- package/dist/components/PluginRuntime.js +47 -0
- package/dist/components/PrimaryActionButton.d.ts +98 -0
- package/dist/components/PrimaryActionButton.d.ts.map +1 -0
- package/dist/components/PrimaryActionButton.js +183 -0
- package/dist/components/PrimaryButton.d.ts +20 -0
- package/dist/components/PrimaryButton.d.ts.map +1 -0
- package/dist/components/PrimaryButton.js +5 -0
- package/dist/components/PromptDialogHost.d.ts +15 -0
- package/dist/components/PromptDialogHost.d.ts.map +1 -0
- package/dist/components/PromptDialogHost.js +22 -0
- package/dist/components/ResourceCounter.d.ts +38 -0
- package/dist/components/ResourceCounter.d.ts.map +1 -0
- package/dist/components/ResourceCounter.js +118 -0
- package/dist/components/ThemedButton.d.ts +12 -0
- package/dist/components/ThemedButton.d.ts.map +1 -0
- package/dist/components/ThemedButton.js +38 -0
- package/dist/components/Toast.d.ts +35 -0
- package/dist/components/Toast.d.ts.map +1 -0
- package/dist/components/Toast.js +116 -0
- package/dist/components/board/HexGrid.d.ts +344 -0
- package/dist/components/board/HexGrid.d.ts.map +1 -0
- package/dist/components/board/HexGrid.js +340 -0
- package/dist/components/board/NetworkGraph.d.ts +100 -0
- package/dist/components/board/NetworkGraph.d.ts.map +1 -0
- package/dist/components/board/NetworkGraph.js +123 -0
- package/dist/components/board/SlotSystem.d.ts +71 -0
- package/dist/components/board/SlotSystem.d.ts.map +1 -0
- package/dist/components/board/SlotSystem.js +87 -0
- package/dist/components/board/SquareGrid.d.ts +188 -0
- package/dist/components/board/SquareGrid.d.ts.map +1 -0
- package/dist/components/board/SquareGrid.js +328 -0
- package/dist/components/board/TrackBoard.d.ts +113 -0
- package/dist/components/board/TrackBoard.d.ts.map +1 -0
- package/dist/components/board/TrackBoard.js +135 -0
- package/dist/components/board/ZoneMap.d.ts +88 -0
- package/dist/components/board/ZoneMap.d.ts.map +1 -0
- package/dist/components/board/ZoneMap.js +133 -0
- package/dist/components/board/hex-board-view.d.ts +69 -0
- package/dist/components/board/hex-board-view.d.ts.map +1 -0
- package/dist/components/board/hex-board-view.js +60 -0
- package/dist/components/board/index.d.ts +23 -0
- package/dist/components/board/index.d.ts.map +1 -0
- package/dist/components/board/index.js +40 -0
- package/dist/components/board/interaction-accessibility.d.ts +5 -0
- package/dist/components/board/interaction-accessibility.d.ts.map +1 -0
- package/dist/components/board/interaction-accessibility.js +13 -0
- package/dist/components/board/target-layer.d.ts +13 -0
- package/dist/components/board/target-layer.d.ts.map +1 -0
- package/dist/components/board/target-layer.js +10 -0
- package/dist/components/card-render-content.type-test.d.ts +2 -0
- package/dist/components/card-render-content.type-test.d.ts.map +1 -0
- package/dist/components/card-render-content.type-test.js +1 -0
- package/dist/components/index.d.ts +34 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +35 -0
- package/dist/components/interaction-dialog-behavior.d.ts +15 -0
- package/dist/components/interaction-dialog-behavior.d.ts.map +1 -0
- package/dist/components/interaction-dialog-behavior.js +9 -0
- package/dist/components/surfaces/BlockerSurface.d.ts +27 -0
- package/dist/components/surfaces/BlockerSurface.d.ts.map +1 -0
- package/dist/components/surfaces/BlockerSurface.js +38 -0
- package/dist/components/surfaces/BoardSurface.d.ts +77 -0
- package/dist/components/surfaces/BoardSurface.d.ts.map +1 -0
- package/dist/components/surfaces/BoardSurface.js +180 -0
- package/dist/components/surfaces/ChromeSurface.d.ts +29 -0
- package/dist/components/surfaces/ChromeSurface.d.ts.map +1 -0
- package/dist/components/surfaces/ChromeSurface.js +34 -0
- package/dist/components/surfaces/ExhaustivenessAudit.d.ts +32 -0
- package/dist/components/surfaces/ExhaustivenessAudit.d.ts.map +1 -0
- package/dist/components/surfaces/ExhaustivenessAudit.js +65 -0
- package/dist/components/surfaces/InboxSurface.d.ts +40 -0
- package/dist/components/surfaces/InboxSurface.d.ts.map +1 -0
- package/dist/components/surfaces/InboxSurface.js +99 -0
- package/dist/components/surfaces/MarketSurface.d.ts +62 -0
- package/dist/components/surfaces/MarketSurface.d.ts.map +1 -0
- package/dist/components/surfaces/MarketSurface.js +242 -0
- package/dist/components/surfaces/PanelSurface.d.ts +111 -0
- package/dist/components/surfaces/PanelSurface.d.ts.map +1 -0
- package/dist/components/surfaces/PanelSurface.js +180 -0
- package/dist/components/surfaces/PlayerCardsSurface.d.ts +104 -0
- package/dist/components/surfaces/PlayerCardsSurface.d.ts.map +1 -0
- package/dist/components/surfaces/PlayerCardsSurface.js +178 -0
- package/dist/components/surfaces/internal/CardZoneFollowUpForm.d.ts +7 -0
- package/dist/components/surfaces/internal/CardZoneFollowUpForm.d.ts.map +1 -0
- package/dist/components/surfaces/internal/CardZoneFollowUpForm.js +9 -0
- package/dist/components/surfaces/internal/DefaultInteractionButton.d.ts +71 -0
- package/dist/components/surfaces/internal/DefaultInteractionButton.d.ts.map +1 -0
- package/dist/components/surfaces/internal/DefaultInteractionButton.js +82 -0
- package/dist/components/surfaces/internal/useCardZoneInteractions.d.ts +21 -0
- package/dist/components/surfaces/internal/useCardZoneInteractions.d.ts.map +1 -0
- package/dist/components/surfaces/internal/useCardZoneInteractions.js +202 -0
- package/dist/components/surfaces/types.d.ts +59 -0
- package/dist/components/surfaces/types.d.ts.map +1 -0
- package/dist/components/surfaces/types.js +1 -0
- package/dist/context/ClientParamSchemaContext.d.ts +21 -0
- package/dist/context/ClientParamSchemaContext.d.ts.map +1 -0
- package/dist/context/ClientParamSchemaContext.js +12 -0
- package/dist/context/InteractionDraftContext.d.ts +69 -0
- package/dist/context/InteractionDraftContext.d.ts.map +1 -0
- package/dist/context/InteractionDraftContext.js +145 -0
- package/dist/context/PluginSessionContext.d.ts +33 -0
- package/dist/context/PluginSessionContext.d.ts.map +1 -0
- package/dist/context/PluginSessionContext.js +38 -0
- package/dist/context/PluginStateContext.d.ts +116 -0
- package/dist/context/PluginStateContext.d.ts.map +1 -0
- package/dist/context/PluginStateContext.js +186 -0
- package/dist/context/RuntimeContext.d.ts +49 -0
- package/dist/context/RuntimeContext.d.ts.map +1 -0
- package/dist/context/RuntimeContext.js +67 -0
- package/dist/defaults/components.d.ts +52 -0
- package/dist/defaults/components.d.ts.map +1 -0
- package/dist/defaults/components.js +159 -0
- package/dist/defaults/index.d.ts +2 -0
- package/dist/defaults/index.d.ts.map +1 -0
- package/dist/defaults/index.js +1 -0
- package/dist/errors/ValidationError.d.ts +10 -0
- package/dist/errors/ValidationError.d.ts.map +1 -0
- package/dist/errors/ValidationError.js +23 -0
- package/dist/helpers/cards.d.ts +3 -0
- package/dist/helpers/cards.d.ts.map +1 -0
- package/dist/helpers/cards.js +11 -0
- package/dist/helpers/track-board.d.ts +79 -0
- package/dist/helpers/track-board.d.ts.map +1 -0
- package/dist/helpers/track-board.js +56 -0
- package/dist/hooks/useActivePlayers.d.ts +16 -0
- package/dist/hooks/useActivePlayers.d.ts.map +1 -0
- package/dist/hooks/useActivePlayers.js +17 -0
- package/dist/hooks/useBoardInteractions.d.ts +110 -0
- package/dist/hooks/useBoardInteractions.d.ts.map +1 -0
- package/dist/hooks/useBoardInteractions.js +248 -0
- package/dist/hooks/useBoardTopology.d.ts +23 -0
- package/dist/hooks/useBoardTopology.d.ts.map +1 -0
- package/dist/hooks/useBoardTopology.js +128 -0
- package/dist/hooks/useCards.d.ts +3 -0
- package/dist/hooks/useCards.d.ts.map +1 -0
- package/dist/hooks/useCards.js +5 -0
- package/dist/hooks/useGameSelector.d.ts +13 -0
- package/dist/hooks/useGameSelector.d.ts.map +1 -0
- package/dist/hooks/useGameSelector.js +67 -0
- package/dist/hooks/useGameView.d.ts +6 -0
- package/dist/hooks/useGameView.d.ts.map +1 -0
- package/dist/hooks/useGameView.js +7 -0
- package/dist/hooks/useHandLayout.d.ts +120 -0
- package/dist/hooks/useHandLayout.d.ts.map +1 -0
- package/dist/hooks/useHandLayout.js +235 -0
- package/dist/hooks/useHexBoard.d.ts +19 -0
- package/dist/hooks/useHexBoard.d.ts.map +1 -0
- package/dist/hooks/useHexBoard.js +28 -0
- package/dist/hooks/useHexGrid.d.ts +56 -0
- package/dist/hooks/useHexGrid.d.ts.map +1 -0
- package/dist/hooks/useHexGrid.js +112 -0
- package/dist/hooks/useInteractionByKey.d.ts +29 -0
- package/dist/hooks/useInteractionByKey.d.ts.map +1 -0
- package/dist/hooks/useInteractionByKey.js +263 -0
- package/dist/hooks/useInteractionHandle.d.ts +103 -0
- package/dist/hooks/useInteractionHandle.d.ts.map +1 -0
- package/dist/hooks/useInteractionHandle.js +254 -0
- package/dist/hooks/useIsMobile.d.ts +7 -0
- package/dist/hooks/useIsMobile.d.ts.map +1 -0
- package/dist/hooks/useIsMobile.js +29 -0
- package/dist/hooks/useIsMyTurn.d.ts +6 -0
- package/dist/hooks/useIsMyTurn.d.ts.map +1 -0
- package/dist/hooks/useIsMyTurn.js +11 -0
- package/dist/hooks/useLobby.d.ts +28 -0
- package/dist/hooks/useLobby.d.ts.map +1 -0
- package/dist/hooks/useLobby.js +60 -0
- package/dist/hooks/useMe.d.ts +11 -0
- package/dist/hooks/useMe.d.ts.map +1 -0
- package/dist/hooks/useMe.js +32 -0
- package/dist/hooks/usePanZoom.d.ts +113 -0
- package/dist/hooks/usePanZoom.d.ts.map +1 -0
- package/dist/hooks/usePanZoom.js +165 -0
- package/dist/hooks/usePlayerInfo.d.ts +4 -0
- package/dist/hooks/usePlayerInfo.d.ts.map +1 -0
- package/dist/hooks/usePlayerInfo.js +21 -0
- package/dist/hooks/usePlayerTurnOrder.d.ts +15 -0
- package/dist/hooks/usePlayerTurnOrder.d.ts.map +1 -0
- package/dist/hooks/usePlayerTurnOrder.js +22 -0
- package/dist/hooks/usePluginRuntime.d.ts +45 -0
- package/dist/hooks/usePluginRuntime.d.ts.map +1 -0
- package/dist/hooks/usePluginRuntime.js +92 -0
- package/dist/hooks/useSeatInbox.d.ts +22 -0
- package/dist/hooks/useSeatInbox.d.ts.map +1 -0
- package/dist/hooks/useSeatInbox.js +43 -0
- package/dist/hooks/useSimultaneousPhase.d.ts +7 -0
- package/dist/hooks/useSimultaneousPhase.d.ts.map +1 -0
- package/dist/hooks/useSimultaneousPhase.js +8 -0
- package/dist/hooks/useSquareBoard.d.ts +21 -0
- package/dist/hooks/useSquareBoard.d.ts.map +1 -0
- package/dist/hooks/useSquareBoard.js +67 -0
- package/dist/hooks/useSquareGrid.d.ts +96 -0
- package/dist/hooks/useSquareGrid.d.ts.map +1 -0
- package/dist/hooks/useSquareGrid.js +152 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/internal/ui/alert.d.ts +8 -0
- package/dist/internal/ui/alert.d.ts.map +1 -0
- package/dist/internal/ui/alert.js +11 -0
- package/dist/internal/ui/button.d.ts +10 -0
- package/dist/internal/ui/button.d.ts.map +1 -0
- package/dist/internal/ui/button.js +21 -0
- package/dist/internal/ui/dialog.d.ts +16 -0
- package/dist/internal/ui/dialog.d.ts.map +1 -0
- package/dist/internal/ui/dialog.js +35 -0
- package/dist/internal/ui/input.d.ts +3 -0
- package/dist/internal/ui/input.d.ts.map +1 -0
- package/dist/internal/ui/input.js +5 -0
- package/dist/internal/ui/label.d.ts +4 -0
- package/dist/internal/ui/label.d.ts.map +1 -0
- package/dist/internal/ui/label.js +7 -0
- package/dist/internal/ui/select.d.ts +9 -0
- package/dist/internal/ui/select.d.ts.map +1 -0
- package/dist/internal/ui/select.js +23 -0
- package/dist/internal/ui/tooltip.d.ts +7 -0
- package/dist/internal/ui/tooltip.d.ts.map +1 -0
- package/dist/internal/ui/tooltip.js +16 -0
- package/dist/internal/ui/utils.d.ts +3 -0
- package/dist/internal/ui/utils.d.ts.map +1 -0
- package/dist/internal/ui/utils.js +4 -0
- package/dist/internal.d.ts +7 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +4 -0
- package/dist/plugin-styles.css +246 -0
- package/dist/primitives/board.d.ts +29 -0
- package/dist/primitives/board.d.ts.map +1 -0
- package/dist/primitives/board.js +163 -0
- package/dist/primitives/game-ui-provider.d.ts +12 -0
- package/dist/primitives/game-ui-provider.d.ts.map +1 -0
- package/dist/primitives/game-ui-provider.js +7 -0
- package/dist/primitives/index.d.ts +8 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +7 -0
- package/dist/primitives/interaction.d.ts +52 -0
- package/dist/primitives/interaction.d.ts.map +1 -0
- package/dist/primitives/interaction.js +250 -0
- package/dist/primitives/phase.d.ts +15 -0
- package/dist/primitives/phase.d.ts.map +1 -0
- package/dist/primitives/phase.js +18 -0
- package/dist/primitives/player-roster.d.ts +64 -0
- package/dist/primitives/player-roster.d.ts.map +1 -0
- package/dist/primitives/player-roster.js +149 -0
- package/dist/primitives/primitive-props.d.ts +15 -0
- package/dist/primitives/primitive-props.d.ts.map +1 -0
- package/dist/primitives/primitive-props.js +39 -0
- package/dist/primitives/prompt.d.ts +44 -0
- package/dist/primitives/prompt.d.ts.map +1 -0
- package/dist/primitives/prompt.js +101 -0
- package/dist/primitives/zone.d.ts +31 -0
- package/dist/primitives/zone.d.ts.map +1 -0
- package/dist/primitives/zone.js +58 -0
- package/dist/reducer.d.ts +21 -0
- package/dist/reducer.d.ts.map +1 -0
- package/dist/reducer.js +14 -0
- package/dist/runtime/createPluginRuntimeAPI.d.ts +67 -0
- package/dist/runtime/createPluginRuntimeAPI.d.ts.map +1 -0
- package/dist/runtime/createPluginRuntimeAPI.js +419 -0
- package/dist/theme/ThemeProvider.d.ts +98 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +148 -0
- package/dist/theme/board.d.ts +42 -0
- package/dist/theme/board.d.ts.map +1 -0
- package/dist/theme/board.js +34 -0
- package/dist/theme/css-vars.d.ts +31 -0
- package/dist/theme/css-vars.d.ts.map +1 -0
- package/dist/theme/css-vars.js +88 -0
- package/dist/theme/derive.d.ts +66 -0
- package/dist/theme/derive.d.ts.map +1 -0
- package/dist/theme/derive.js +161 -0
- package/dist/theme/index.d.ts +22 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +20 -0
- package/dist/theme/presets/arcade.d.ts +10 -0
- package/dist/theme/presets/arcade.d.ts.map +1 -0
- package/dist/theme/presets/arcade.js +257 -0
- package/dist/theme/presets/studio.d.ts +10 -0
- package/dist/theme/presets/studio.d.ts.map +1 -0
- package/dist/theme/presets/studio.js +257 -0
- package/dist/theme/presets/tabletop.d.ts +15 -0
- package/dist/theme/presets/tabletop.d.ts.map +1 -0
- package/dist/theme/presets/tabletop.js +262 -0
- package/dist/theme/tokens.d.ts +345 -0
- package/dist/theme/tokens.d.ts.map +1 -0
- package/dist/theme/tokens.js +57 -0
- package/dist/types/player-state.d.ts +337 -0
- package/dist/types/player-state.d.ts.map +1 -0
- package/dist/types/player-state.js +1 -0
- package/dist/types/plugin-state.d.ts +324 -0
- package/dist/types/plugin-state.d.ts.map +1 -0
- package/dist/types/plugin-state.js +1 -0
- package/dist/types/reducer-state.d.ts +10 -0
- package/dist/types/reducer-state.d.ts.map +1 -0
- package/dist/types/reducer-state.js +1 -0
- package/dist/types/runtime-api.d.ts +99 -0
- package/dist/types/runtime-api.d.ts.map +1 -0
- package/dist/types/runtime-api.js +1 -0
- package/dist/types/tiled-board.d.ts +187 -0
- package/dist/types/tiled-board.d.ts.map +1 -0
- package/dist/types/tiled-board.js +226 -0
- package/dist/ui-contract.d.ts +78 -0
- package/dist/ui-contract.d.ts.map +1 -0
- package/dist/ui-contract.js +15 -0
- package/dist/ui-sdk.d.ts +3409 -0
- package/dist/utils/interaction-inputs.d.ts +22 -0
- package/dist/utils/interaction-inputs.d.ts.map +1 -0
- package/dist/utils/interaction-inputs.js +219 -0
- package/dist/utils/interaction-labels.d.ts +4 -0
- package/dist/utils/interaction-labels.d.ts.map +1 -0
- package/dist/utils/interaction-labels.js +18 -0
- package/dist/utils/interaction-status.d.ts +15 -0
- package/dist/utils/interaction-status.d.ts.map +1 -0
- package/dist/utils/interaction-status.js +31 -0
- package/package.json +101 -0
- package/src/components/ActionButton.tsx +48 -0
- package/src/components/ActionPanel.tsx +310 -0
- package/src/components/Card.tsx +385 -0
- package/src/components/ChromeSuppressionContext.tsx +70 -0
- package/src/components/CostDisplay.test.tsx +23 -0
- package/src/components/CostDisplay.tsx +145 -0
- package/src/components/DiceRoller.tsx +601 -0
- package/src/components/Drawer.tsx +179 -0
- package/src/components/ErrorBoundary.tsx +119 -0
- package/src/components/GameEndDisplay.test.tsx +19 -0
- package/src/components/GameEndDisplay.tsx +398 -0
- package/src/components/GameSkeleton.tsx +260 -0
- package/src/components/Hand.tsx +387 -0
- package/src/components/HandDock.tsx +257 -0
- package/src/components/InteractionForm.test.tsx +303 -0
- package/src/components/InteractionForm.tsx +1029 -0
- package/src/components/MoreActions.test.tsx +93 -0
- package/src/components/MoreActions.tsx +143 -0
- package/src/components/PhaseIndicator.tsx +341 -0
- package/src/components/PlayArea.tsx +125 -0
- package/src/components/PluginRuntime.tsx +92 -0
- package/src/components/PrimaryActionButton.test.tsx +138 -0
- package/src/components/PrimaryActionButton.tsx +351 -0
- package/src/components/PrimaryButton.tsx +44 -0
- package/src/components/PromptDialogHost.tsx +92 -0
- package/src/components/ResourceCounter.test.tsx +29 -0
- package/src/components/ResourceCounter.tsx +275 -0
- package/src/components/ThemedButton.tsx +78 -0
- package/src/components/Toast.tsx +251 -0
- package/src/components/__fixtures__/ActionButton.fixture.tsx +234 -0
- package/src/components/__fixtures__/ActionPanel.fixture.tsx +298 -0
- package/src/components/__fixtures__/Card.fixture.tsx +185 -0
- package/src/components/__fixtures__/CostDisplay.fixture.tsx +156 -0
- package/src/components/__fixtures__/DiceRoller.fixture.tsx +435 -0
- package/src/components/__fixtures__/Drawer.fixture.tsx +113 -0
- package/src/components/__fixtures__/ErrorBoundary.fixture.tsx +82 -0
- package/src/components/__fixtures__/GameEndDisplay.fixture.tsx +188 -0
- package/src/components/__fixtures__/GameSkeleton.fixture.tsx +46 -0
- package/src/components/__fixtures__/Hand.fixture.tsx +522 -0
- package/src/components/__fixtures__/HexGrid.fixture.tsx +1181 -0
- package/src/components/__fixtures__/NetworkGraph.fixture.tsx +599 -0
- package/src/components/__fixtures__/PhaseIndicator.fixture.tsx +181 -0
- package/src/components/__fixtures__/PlayArea.fixture.tsx +221 -0
- package/src/components/__fixtures__/ResourceCounter.fixture.tsx +227 -0
- package/src/components/__fixtures__/SlotSystem.fixture.tsx +824 -0
- package/src/components/__fixtures__/SquareGrid.fixture.tsx +764 -0
- package/src/components/__fixtures__/Toast.fixture.tsx +97 -0
- package/src/components/__fixtures__/TrackBoard.fixture.tsx +685 -0
- package/src/components/__fixtures__/ZoneMap.fixture.tsx +754 -0
- package/src/components/board/HexGrid.tsx +1294 -0
- package/src/components/board/NetworkGraph.tsx +476 -0
- package/src/components/board/SlotSystem.tsx +339 -0
- package/src/components/board/SquareGrid.tsx +1165 -0
- package/src/components/board/TrackBoard.tsx +496 -0
- package/src/components/board/ZoneMap.tsx +448 -0
- package/src/components/board/hex-board-view.test.tsx +114 -0
- package/src/components/board/hex-board-view.ts +123 -0
- package/src/components/board/index.ts +142 -0
- package/src/components/board/interaction-accessibility.ts +21 -0
- package/src/components/board/target-layer-grids.test.tsx +420 -0
- package/src/components/board/target-layer.ts +30 -0
- package/src/components/card-render-content.type-test.ts +27 -0
- package/src/components/index.ts +208 -0
- package/src/components/interaction-dialog-behavior.test.ts +23 -0
- package/src/components/interaction-dialog-behavior.ts +22 -0
- package/src/components/surfaces/BlockerSurface.test.tsx +158 -0
- package/src/components/surfaces/BlockerSurface.tsx +127 -0
- package/src/components/surfaces/BoardSurface.tsx +340 -0
- package/src/components/surfaces/ChromeSurface.tsx +123 -0
- package/src/components/surfaces/ExhaustivenessAudit.tsx +91 -0
- package/src/components/surfaces/InboxSurface.test.tsx +149 -0
- package/src/components/surfaces/InboxSurface.tsx +245 -0
- package/src/components/surfaces/MarketSurface.tsx +544 -0
- package/src/components/surfaces/PanelSurface.test.tsx +496 -0
- package/src/components/surfaces/PanelSurface.tsx +458 -0
- package/src/components/surfaces/PlayerCardsSurface.tsx +525 -0
- package/src/components/surfaces/internal/CardZoneFollowUpForm.tsx +35 -0
- package/src/components/surfaces/internal/DefaultInteractionButton.tsx +219 -0
- package/src/components/surfaces/internal/useCardZoneInteractions.ts +311 -0
- package/src/components/surfaces/types.ts +100 -0
- package/src/context/ClientParamSchemaContext.tsx +44 -0
- package/src/context/InteractionDraftContext.tsx +204 -0
- package/src/context/PluginSessionContext.tsx +47 -0
- package/src/context/PluginStateContext.tsx +254 -0
- package/src/context/RuntimeContext.tsx +96 -0
- package/src/defaults/components.tsx +442 -0
- package/src/defaults/defaults.test.tsx +230 -0
- package/src/defaults/index.ts +1 -0
- package/src/errors/ValidationError.ts +29 -0
- package/src/helpers/cards.ts +19 -0
- package/src/helpers/track-board.ts +211 -0
- package/src/hooks/useActivePlayers.ts +19 -0
- package/src/hooks/useBoardInteractions.test.tsx +622 -0
- package/src/hooks/useBoardInteractions.ts +434 -0
- package/src/hooks/useBoardTopology.ts +316 -0
- package/src/hooks/useCards.test.tsx +129 -0
- package/src/hooks/useCards.ts +10 -0
- package/src/hooks/useGameSelector.ts +105 -0
- package/src/hooks/useGameView.ts +9 -0
- package/src/hooks/useHandLayout.ts +349 -0
- package/src/hooks/useHexBoard.ts +74 -0
- package/src/hooks/useHexGrid.ts +185 -0
- package/src/hooks/useInteractionByKey.ts +349 -0
- package/src/hooks/useInteractionHandle.ts +437 -0
- package/src/hooks/useIsMobile.ts +35 -0
- package/src/hooks/useIsMyTurn.test.tsx +99 -0
- package/src/hooks/useIsMyTurn.ts +15 -0
- package/src/hooks/useLobby.ts +76 -0
- package/src/hooks/useMe.ts +48 -0
- package/src/hooks/usePanZoom.ts +278 -0
- package/src/hooks/usePlayerInfo.ts +28 -0
- package/src/hooks/usePlayerTurnOrder.ts +23 -0
- package/src/hooks/usePluginRuntime.test.tsx +102 -0
- package/src/hooks/usePluginRuntime.ts +130 -0
- package/src/hooks/useSeatInbox.ts +61 -0
- package/src/hooks/useSimultaneousPhase.ts +10 -0
- package/src/hooks/useSquareBoard.ts +124 -0
- package/src/hooks/useSquareGrid.ts +328 -0
- package/src/index.test.ts +474 -0
- package/src/index.ts +148 -0
- package/src/internal/ui/alert.tsx +51 -0
- package/src/internal/ui/button.tsx +58 -0
- package/src/internal/ui/dialog.tsx +134 -0
- package/src/internal/ui/input.tsx +21 -0
- package/src/internal/ui/label.tsx +21 -0
- package/src/internal/ui/select.tsx +129 -0
- package/src/internal/ui/tooltip.tsx +54 -0
- package/src/internal/ui/utils.ts +5 -0
- package/src/internal.ts +18 -0
- package/src/plugin-styles.css +246 -0
- package/src/primitives/board.test.tsx +139 -0
- package/src/primitives/board.tsx +267 -0
- package/src/primitives/game-ui-provider.tsx +35 -0
- package/src/primitives/index.ts +83 -0
- package/src/primitives/interaction.test.tsx +420 -0
- package/src/primitives/interaction.tsx +405 -0
- package/src/primitives/phase.test.tsx +82 -0
- package/src/primitives/phase.tsx +43 -0
- package/src/primitives/player-roster.test.tsx +168 -0
- package/src/primitives/player-roster.tsx +301 -0
- package/src/primitives/primitive-props.tsx +82 -0
- package/src/primitives/prompt.test.tsx +159 -0
- package/src/primitives/prompt.tsx +203 -0
- package/src/primitives/zone.tsx +113 -0
- package/src/reducer.ts +42 -0
- package/src/runtime/createPluginRuntimeAPI.ts +605 -0
- package/src/theme/ThemeProvider.test.tsx +36 -0
- package/src/theme/ThemeProvider.tsx +252 -0
- package/src/theme/board.ts +61 -0
- package/src/theme/css-vars.ts +105 -0
- package/src/theme/derive.ts +240 -0
- package/src/theme/index.ts +61 -0
- package/src/theme/presets/arcade.ts +261 -0
- package/src/theme/presets/studio.ts +261 -0
- package/src/theme/presets/tabletop.ts +266 -0
- package/src/theme/theme.test.ts +258 -0
- package/src/theme/tokens.ts +392 -0
- package/src/types/player-state.ts +445 -0
- package/src/types/plugin-state.ts +407 -0
- package/src/types/reducer-state.ts +24 -0
- package/src/types/runtime-api.ts +114 -0
- package/src/types/tiled-board.ts +785 -0
- package/src/ui-contract.ts +168 -0
- package/src/utils/interaction-inputs.test.ts +109 -0
- package/src/utils/interaction-inputs.ts +331 -0
- package/src/utils/interaction-labels.ts +23 -0
- package/src/utils/interaction-status.ts +59 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode, SelectHTMLAttributes } from "react";
|
|
2
|
+
import { type InteractionRootProps, type PrimitiveCommonProps } from "../primitives/index.js";
|
|
3
|
+
import type { InteractionDescriptor, InteractionInputDescriptor } from "../types/plugin-state.js";
|
|
4
|
+
import type { InteractionInputKey, InteractionKey, ZoneKey } from "../ui-contract.js";
|
|
5
|
+
type LayoutPrimitiveProps = PrimitiveCommonProps & HTMLAttributes<HTMLElement>;
|
|
6
|
+
export declare function GameLayoutRoot({ children, style, ...props }: LayoutPrimitiveProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
7
|
+
export declare function GameLayoutHeader({ children, style, ...props }: LayoutPrimitiveProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
8
|
+
export declare function GameLayoutBoard({ children, style, ...props }: LayoutPrimitiveProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
9
|
+
export declare function GameLayoutSidebar({ children, style, ...props }: LayoutPrimitiveProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
10
|
+
export declare function GameLayoutBottom({ children, style, ...props }: LayoutPrimitiveProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
11
|
+
export declare const GameLayout: {
|
|
12
|
+
Root: typeof GameLayoutRoot;
|
|
13
|
+
Header: typeof GameLayoutHeader;
|
|
14
|
+
Board: typeof GameLayoutBoard;
|
|
15
|
+
Sidebar: typeof GameLayoutSidebar;
|
|
16
|
+
Bottom: typeof GameLayoutBottom;
|
|
17
|
+
};
|
|
18
|
+
export interface DefaultPromptInboxProps extends PrimitiveCommonProps {
|
|
19
|
+
empty?: ReactNode;
|
|
20
|
+
renderPrompt?: (prompt: InteractionDescriptor) => ReactNode;
|
|
21
|
+
}
|
|
22
|
+
export declare function DefaultPromptInbox({ empty, renderPrompt, ...props }: DefaultPromptInboxProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export interface DefaultInteractionListProps extends PrimitiveCommonProps {
|
|
24
|
+
empty?: ReactNode;
|
|
25
|
+
includeUnavailable?: boolean;
|
|
26
|
+
renderInteraction?: (interaction: InteractionDescriptor) => ReactNode;
|
|
27
|
+
}
|
|
28
|
+
export declare function DefaultInteractionList({ empty, includeUnavailable, renderInteraction, ...props }: DefaultInteractionListProps): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
export type DefaultInteractionItemProps<InteractionKeyValue extends string = InteractionKey> = Omit<InteractionRootProps<InteractionKeyValue>, "children"> & PrimitiveCommonProps;
|
|
30
|
+
export declare function DefaultInteractionItem<InteractionKeyValue extends string = InteractionKey>({ interaction, unavailable, ...props }: DefaultInteractionItemProps<InteractionKeyValue>): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export interface DefaultInteractionFormProps extends PrimitiveCommonProps {
|
|
32
|
+
submitLabel?: ReactNode;
|
|
33
|
+
renderField?: (input: InteractionInputDescriptor) => ReactNode;
|
|
34
|
+
}
|
|
35
|
+
export declare function DefaultInteractionForm({ submitLabel, renderField, ...props }: DefaultInteractionFormProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
36
|
+
export interface DefaultZoneProps<ZoneValue extends string = ZoneKey> extends PrimitiveCommonProps {
|
|
37
|
+
zone: ZoneValue;
|
|
38
|
+
empty?: ReactNode;
|
|
39
|
+
layout?: "row" | "column" | "grid" | "fan";
|
|
40
|
+
interaction?: InteractionKey;
|
|
41
|
+
input?: InteractionInputKey;
|
|
42
|
+
renderCard?: (card: DefaultZoneCard) => ReactNode;
|
|
43
|
+
}
|
|
44
|
+
export interface DefaultZoneCard {
|
|
45
|
+
id: string;
|
|
46
|
+
serialized: string;
|
|
47
|
+
data: unknown;
|
|
48
|
+
}
|
|
49
|
+
export declare function DefaultZone<ZoneValue extends string = ZoneKey>({ zone, empty, layout, interaction, input, renderCard, ...props }: DefaultZoneProps<ZoneValue>): import("react/jsx-runtime").JSX.Element;
|
|
50
|
+
export type DefaultChoiceInputProps = SelectHTMLAttributes<HTMLSelectElement>;
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/defaults/components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Interaction, Prompt, PromptInbox, Zone, renderPrimitive, useInteractionPrimitiveContext, useZonePrimitiveContext, } from "../primitives/index.js";
|
|
3
|
+
import { useSeatInbox } from "../hooks/useSeatInbox.js";
|
|
4
|
+
function layoutStyle(base, style) {
|
|
5
|
+
return style ? { ...base, ...style } : base;
|
|
6
|
+
}
|
|
7
|
+
export function GameLayoutRoot({ children, style, ...props }) {
|
|
8
|
+
return renderPrimitive("div", {
|
|
9
|
+
...props,
|
|
10
|
+
"data-dreamboard-game-layout": "",
|
|
11
|
+
style: layoutStyle({
|
|
12
|
+
display: "grid",
|
|
13
|
+
gridTemplateColumns: "minmax(0, 1fr) minmax(18rem, 24rem)",
|
|
14
|
+
gridTemplateRows: "auto minmax(0, 1fr) auto",
|
|
15
|
+
gridTemplateAreas: `"header header" "board sidebar" "bottom sidebar"`,
|
|
16
|
+
minHeight: "100%",
|
|
17
|
+
gap: "1rem",
|
|
18
|
+
}, style),
|
|
19
|
+
children,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export function GameLayoutHeader({ children, style, ...props }) {
|
|
23
|
+
return renderPrimitive("header", {
|
|
24
|
+
...props,
|
|
25
|
+
"data-dreamboard-game-layout-header": "",
|
|
26
|
+
style: layoutStyle({ gridArea: "header" }, style),
|
|
27
|
+
children,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
export function GameLayoutBoard({ children, style, ...props }) {
|
|
31
|
+
return renderPrimitive("section", {
|
|
32
|
+
...props,
|
|
33
|
+
"data-dreamboard-game-layout-board": "",
|
|
34
|
+
style: layoutStyle({ gridArea: "board", minWidth: 0 }, style),
|
|
35
|
+
children,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
export function GameLayoutSidebar({ children, style, ...props }) {
|
|
39
|
+
return renderPrimitive("aside", {
|
|
40
|
+
...props,
|
|
41
|
+
"data-dreamboard-game-layout-sidebar": "",
|
|
42
|
+
style: layoutStyle({
|
|
43
|
+
gridArea: "sidebar",
|
|
44
|
+
minWidth: 0,
|
|
45
|
+
display: "flex",
|
|
46
|
+
flexDirection: "column",
|
|
47
|
+
gap: "0.75rem",
|
|
48
|
+
}, style),
|
|
49
|
+
children,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
export function GameLayoutBottom({ children, style, ...props }) {
|
|
53
|
+
return renderPrimitive("section", {
|
|
54
|
+
...props,
|
|
55
|
+
"data-dreamboard-game-layout-bottom": "",
|
|
56
|
+
style: layoutStyle({ gridArea: "bottom", minWidth: 0 }, style),
|
|
57
|
+
children,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
export const GameLayout = {
|
|
61
|
+
Root: GameLayoutRoot,
|
|
62
|
+
Header: GameLayoutHeader,
|
|
63
|
+
Board: GameLayoutBoard,
|
|
64
|
+
Sidebar: GameLayoutSidebar,
|
|
65
|
+
Bottom: GameLayoutBottom,
|
|
66
|
+
};
|
|
67
|
+
export function DefaultPromptInbox({ empty = "No available prompts.", renderPrompt, ...props }) {
|
|
68
|
+
return (_jsx(PromptInbox.Root, { children: renderPrimitive("section", {
|
|
69
|
+
...props,
|
|
70
|
+
"data-dreamboard-default-prompt-inbox": "",
|
|
71
|
+
children: (_jsxs(_Fragment, { children: [_jsx(PromptInbox.Empty, { children: empty }), _jsx(PromptInbox.Items, { children: (prompt) => renderPrompt ? (renderPrompt(prompt)) : (_jsxs(Prompt.Root, { interaction: prompt.interactionKey, children: [_jsx(Prompt.Title, {}), _jsx(Prompt.Message, {}), _jsx("div", { "data-dreamboard-default-prompt-options": "", children: _jsx(Prompt.Options, {}) })] }, prompt.interactionKey)) })] })),
|
|
72
|
+
}) }));
|
|
73
|
+
}
|
|
74
|
+
export function DefaultInteractionList({ empty = null, includeUnavailable = false, renderInteraction, ...props }) {
|
|
75
|
+
const inbox = useSeatInbox();
|
|
76
|
+
const interactions = (inbox.bySurface.panel ?? []).filter((descriptor) => includeUnavailable || descriptor.available);
|
|
77
|
+
if (interactions.length === 0)
|
|
78
|
+
return _jsx(_Fragment, { children: empty });
|
|
79
|
+
return renderPrimitive("section", {
|
|
80
|
+
...props,
|
|
81
|
+
"data-dreamboard-default-interaction-list": "",
|
|
82
|
+
children: interactions.map((descriptor) => renderInteraction ? (renderInteraction(descriptor)) : (_jsx(DefaultInteractionItem, { interaction: descriptor.interactionKey }, descriptor.interactionKey))),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
export function DefaultInteractionItem({ interaction, unavailable, ...props }) {
|
|
86
|
+
return (_jsx(Interaction.Root, { interaction: interaction, unavailable: unavailable, children: renderPrimitive("article", {
|
|
87
|
+
...props,
|
|
88
|
+
"data-dreamboard-default-interaction-item": "",
|
|
89
|
+
children: (_jsxs(_Fragment, { children: [_jsx(Interaction.Label, {}), _jsx(Interaction.UnavailableMessage, {}), _jsx(DefaultInteractionForm, {})] })),
|
|
90
|
+
}) }));
|
|
91
|
+
}
|
|
92
|
+
export function DefaultInteractionForm({ submitLabel = "Submit", renderField, ...props }) {
|
|
93
|
+
const { descriptor } = useInteractionPrimitiveContext();
|
|
94
|
+
const fields = descriptor?.inputs ?? [];
|
|
95
|
+
return renderPrimitive("div", {
|
|
96
|
+
...props,
|
|
97
|
+
"data-dreamboard-default-interaction-form": "",
|
|
98
|
+
children: (_jsxs(_Fragment, { children: [fields.map((input) => renderField ? (renderField(input)) : (_jsx(DefaultInteractionField, { input: input }, input.key))), _jsx(Interaction.ValidationMessage, {}), _jsx(Interaction.Submit, { children: submitLabel })] })),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function DefaultInteractionField({ input, }) {
|
|
102
|
+
if (input.domain.type === "choice") {
|
|
103
|
+
return _jsx(DefaultChoiceField, { input: input });
|
|
104
|
+
}
|
|
105
|
+
if (input.domain.type === "boundedNumber") {
|
|
106
|
+
return (_jsxs("label", { "data-dreamboard-default-interaction-field": "", children: [input.key, _jsx(Interaction.Input, { name: input.key, type: "number", min: input.domain.min, max: input.domain.max, step: input.domain.step, parse: (value) => Number(value) })] }));
|
|
107
|
+
}
|
|
108
|
+
return (_jsxs("label", { "data-dreamboard-default-interaction-field": "", children: [input.key, _jsx(Interaction.Input, { name: input.key })] }));
|
|
109
|
+
}
|
|
110
|
+
function DefaultChoiceField({ input }) {
|
|
111
|
+
const { handle } = useInteractionPrimitiveContext();
|
|
112
|
+
const value = handle?.draft[input.key] ?? handle?.values[input.key];
|
|
113
|
+
return (_jsxs("label", { "data-dreamboard-default-interaction-field": "", children: [input.key, _jsxs("select", { name: input.key, value: value === undefined ? "" : String(value), "data-dreamboard-default-choice-input": "", disabled: !handle?.available, onChange: (event) => handle?.setInput(input.key, event.currentTarget.value), children: [_jsx("option", { value: "" }), (input.domain.choices ?? []).map((choice) => (_jsx("option", { value: choice.value, disabled: choice.disabled, children: choice.label }, choice.value)))] })] }));
|
|
114
|
+
}
|
|
115
|
+
export function DefaultZone({ zone, empty = null, layout = "row", interaction, input, renderCard, ...props }) {
|
|
116
|
+
const content = (_jsx(Zone.Root, { zone: zone, children: _jsx(DefaultZoneList, { empty: empty, input: input, layout: layout, renderCard: renderCard, ...props }) }));
|
|
117
|
+
return interaction ? (_jsx(Interaction.Root, { interaction: interaction, children: content })) : (content);
|
|
118
|
+
}
|
|
119
|
+
function DefaultZoneList({ empty, input, layout = "row", renderCard, style, ...props }) {
|
|
120
|
+
const { snapshot } = useZonePrimitiveContext();
|
|
121
|
+
const cardIds = snapshot?.cardIds ?? [];
|
|
122
|
+
if (cardIds.length === 0)
|
|
123
|
+
return _jsx(_Fragment, { children: empty });
|
|
124
|
+
return (_jsx(Zone.List, { ...props, "data-dreamboard-default-zone": "", "data-layout": layout, style: layoutStyle(defaultZoneLayoutStyle(layout), style), children: cardIds.map((cardId) => {
|
|
125
|
+
const serialized = snapshot?.cardsById[cardId] ?? "";
|
|
126
|
+
const card = {
|
|
127
|
+
id: cardId,
|
|
128
|
+
serialized,
|
|
129
|
+
data: parseCardData(serialized),
|
|
130
|
+
};
|
|
131
|
+
const body = renderCard ? renderCard(card) : card.id;
|
|
132
|
+
return (_jsx(Zone.Item, { card: cardId, children: input ? (_jsx(Interaction.CardInput, { input: input, card: cardId, children: body })) : (body) }, cardId));
|
|
133
|
+
}) }));
|
|
134
|
+
}
|
|
135
|
+
function defaultZoneLayoutStyle(layout) {
|
|
136
|
+
if (layout === "grid") {
|
|
137
|
+
return {
|
|
138
|
+
display: "grid",
|
|
139
|
+
gridTemplateColumns: "repeat(auto-fit, minmax(5rem, 1fr))",
|
|
140
|
+
gap: "0.5rem",
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
display: "flex",
|
|
145
|
+
flexDirection: layout === "column" ? "column" : "row",
|
|
146
|
+
flexWrap: layout === "fan" ? "nowrap" : "wrap",
|
|
147
|
+
gap: "0.5rem",
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function parseCardData(serialized) {
|
|
151
|
+
if (!serialized)
|
|
152
|
+
return null;
|
|
153
|
+
try {
|
|
154
|
+
return JSON.parse(serialized);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return serialized;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/defaults/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./components.js";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error thrown when action validation fails.
|
|
3
|
+
* Contains the error code and optional message from the validation result.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ValidationError extends Error {
|
|
6
|
+
readonly errorCode?: string | undefined;
|
|
7
|
+
constructor(errorCode?: string | undefined, message?: string);
|
|
8
|
+
}
|
|
9
|
+
export declare function validationErrorFromUnknown(error: unknown, fallbackMessage?: string): ValidationError;
|
|
10
|
+
//# sourceMappingURL=ValidationError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationError.d.ts","sourceRoot":"","sources":["../../src/errors/ValidationError.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,SAAS,CAAC,EAAE,MAAM;gBAAlB,SAAS,CAAC,EAAE,MAAM,YAAA,EAClC,OAAO,CAAC,EAAE,MAAM;CAKnB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,eAAe,SAAkC,GAChD,eAAe,CAWjB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error thrown when action validation fails.
|
|
3
|
+
* Contains the error code and optional message from the validation result.
|
|
4
|
+
*/
|
|
5
|
+
export class ValidationError extends Error {
|
|
6
|
+
constructor(errorCode, message) {
|
|
7
|
+
super(message || errorCode || "Validation failed");
|
|
8
|
+
this.errorCode = errorCode;
|
|
9
|
+
this.name = "ValidationError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function validationErrorFromUnknown(error, fallbackMessage = "Interaction submission failed") {
|
|
13
|
+
if (error instanceof ValidationError)
|
|
14
|
+
return error;
|
|
15
|
+
const errorCode = typeof error === "object" &&
|
|
16
|
+
error !== null &&
|
|
17
|
+
"errorCode" in error &&
|
|
18
|
+
typeof error.errorCode === "string"
|
|
19
|
+
? error.errorCode
|
|
20
|
+
: undefined;
|
|
21
|
+
const message = error instanceof Error ? error.message : fallbackMessage;
|
|
22
|
+
return new ValidationError(errorCode, message);
|
|
23
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { CardCollection, ViewCard } from "@dreamboard/sdk-types";
|
|
2
|
+
export declare function materializeCards<CardIdValue extends string, CardValue extends ViewCard<CardIdValue>>(collection: CardCollection<CardIdValue, CardValue>): CardValue[];
|
|
3
|
+
//# sourceMappingURL=cards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../src/helpers/cards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtE,wBAAgB,gBAAgB,CAC9B,WAAW,SAAS,MAAM,EAC1B,SAAS,SAAS,QAAQ,CAAC,WAAW,CAAC,EACvC,UAAU,EAAE,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,SAAS,EAAE,CAajE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { TrackPiece, TrackSpace } from "../components/board/TrackBoard.js";
|
|
2
|
+
interface GenericBoardSpaceLike<SpaceIdValue extends string = string, Fields = Record<string, unknown>> {
|
|
3
|
+
id: SpaceIdValue;
|
|
4
|
+
name?: string | null;
|
|
5
|
+
typeId?: string | null;
|
|
6
|
+
fields: Fields;
|
|
7
|
+
}
|
|
8
|
+
interface GenericBoardRelationLike<SpaceIdValue extends string = string> {
|
|
9
|
+
fromSpaceId: SpaceIdValue;
|
|
10
|
+
toSpaceId: SpaceIdValue;
|
|
11
|
+
directed: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface GenericBoardLike<BoardIdValue extends string = string, SpaceIdValue extends string = string, SpaceFields = Record<string, unknown>> {
|
|
14
|
+
id: BoardIdValue;
|
|
15
|
+
spaces: Readonly<Record<SpaceIdValue, GenericBoardSpaceLike<SpaceIdValue, SpaceFields>>>;
|
|
16
|
+
relations?: ReadonlyArray<GenericBoardRelationLike<SpaceIdValue>>;
|
|
17
|
+
}
|
|
18
|
+
export interface TrackBoardPieceLike<PieceIdValue extends string = string, SpaceIdValue extends string = string, OwnerIdValue extends string = string, Fields = unknown> {
|
|
19
|
+
id: PieceIdValue;
|
|
20
|
+
spaceId: SpaceIdValue;
|
|
21
|
+
owner: OwnerIdValue;
|
|
22
|
+
typeId?: string | null;
|
|
23
|
+
fields?: Fields;
|
|
24
|
+
}
|
|
25
|
+
type BoardSpaceOf<TBoard extends GenericBoardLike> = TBoard["spaces"][keyof TBoard["spaces"]];
|
|
26
|
+
type SpaceIdOf<TBoard extends GenericBoardLike> = BoardSpaceOf<TBoard> extends {
|
|
27
|
+
id: infer Id extends string;
|
|
28
|
+
} ? Id : never;
|
|
29
|
+
type SpaceFieldsOf<TBoard extends GenericBoardLike> = BoardSpaceOf<TBoard> extends {
|
|
30
|
+
fields: infer Fields;
|
|
31
|
+
} ? Fields : never;
|
|
32
|
+
type PieceIdOf<TPiece extends TrackBoardPieceLike> = TPiece extends {
|
|
33
|
+
id: infer Id extends string;
|
|
34
|
+
} ? Id : never;
|
|
35
|
+
type PieceOwnerOf<TPiece extends TrackBoardPieceLike> = TPiece extends {
|
|
36
|
+
owner: infer Owner extends string;
|
|
37
|
+
} ? Owner : never;
|
|
38
|
+
type PieceFieldsOf<TPiece extends TrackBoardPieceLike> = TPiece extends {
|
|
39
|
+
fields?: infer Fields;
|
|
40
|
+
} ? Fields : never;
|
|
41
|
+
type TrackLayout = {
|
|
42
|
+
type: "linear";
|
|
43
|
+
axis?: "x" | "y";
|
|
44
|
+
spacing?: number;
|
|
45
|
+
origin?: {
|
|
46
|
+
x: number;
|
|
47
|
+
y: number;
|
|
48
|
+
};
|
|
49
|
+
} | {
|
|
50
|
+
type: "circular";
|
|
51
|
+
center: {
|
|
52
|
+
x: number;
|
|
53
|
+
y: number;
|
|
54
|
+
};
|
|
55
|
+
radius: number;
|
|
56
|
+
startAngleDeg?: number;
|
|
57
|
+
clockwise?: boolean;
|
|
58
|
+
};
|
|
59
|
+
type PositionOptions<TBoard extends GenericBoardLike> = {
|
|
60
|
+
getPosition: (space: BoardSpaceOf<TBoard>, index: number, spaces: ReadonlyArray<BoardSpaceOf<TBoard>>) => {
|
|
61
|
+
x: number;
|
|
62
|
+
y: number;
|
|
63
|
+
};
|
|
64
|
+
layout?: never;
|
|
65
|
+
} | {
|
|
66
|
+
getPosition?: never;
|
|
67
|
+
layout: TrackLayout;
|
|
68
|
+
};
|
|
69
|
+
export type ToTrackBoardDataOptions<TBoard extends GenericBoardLike, TPiece extends TrackBoardPieceLike<string, SpaceIdOf<TBoard>, string, unknown>> = PositionOptions<TBoard> & {
|
|
70
|
+
pieces?: readonly TPiece[];
|
|
71
|
+
getNextSpaces?: (space: BoardSpaceOf<TBoard>, board: TBoard) => ReadonlyArray<SpaceIdOf<TBoard>> | undefined;
|
|
72
|
+
getJumpTo?: (space: BoardSpaceOf<TBoard>, board: TBoard) => SpaceIdOf<TBoard> | undefined;
|
|
73
|
+
};
|
|
74
|
+
export declare function toTrackBoardData<TBoard extends GenericBoardLike, TPiece extends TrackBoardPieceLike<string, SpaceIdOf<TBoard>, string, unknown>>(board: TBoard, options: ToTrackBoardDataOptions<TBoard, TPiece>): {
|
|
75
|
+
spaces: Array<TrackSpace<SpaceIdOf<TBoard>, SpaceFieldsOf<TBoard>>>;
|
|
76
|
+
pieces: Array<TrackPiece<PieceIdOf<TPiece>, SpaceIdOf<TBoard>, PieceOwnerOf<TPiece>, PieceFieldsOf<TPiece>>>;
|
|
77
|
+
};
|
|
78
|
+
export {};
|
|
79
|
+
//# sourceMappingURL=track-board.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-board.d.ts","sourceRoot":"","sources":["../../src/helpers/track-board.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
function positionForLayout(layout, index, count) {
|
|
2
|
+
if (layout.type === "linear") {
|
|
3
|
+
const spacing = layout.spacing ?? 72;
|
|
4
|
+
const origin = layout.origin ?? { x: 0, y: 0 };
|
|
5
|
+
return layout.axis === "y"
|
|
6
|
+
? { x: origin.x, y: origin.y + index * spacing }
|
|
7
|
+
: { x: origin.x + index * spacing, y: origin.y };
|
|
8
|
+
}
|
|
9
|
+
const startAngleDeg = layout.startAngleDeg ?? -90;
|
|
10
|
+
const clockwise = layout.clockwise ?? true;
|
|
11
|
+
const angleStep = count === 0 ? 0 : 360 / count;
|
|
12
|
+
const angleDeg = startAngleDeg + (clockwise ? 1 : -1) * angleStep * index;
|
|
13
|
+
const angle = (angleDeg * Math.PI) / 180;
|
|
14
|
+
return {
|
|
15
|
+
x: layout.center.x + Math.cos(angle) * layout.radius,
|
|
16
|
+
y: layout.center.y + Math.sin(angle) * layout.radius,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function defaultNextSpaces(board, spaceId) {
|
|
20
|
+
const relations = board.relations ?? [];
|
|
21
|
+
return relations.flatMap((relation) => {
|
|
22
|
+
if (relation.fromSpaceId === spaceId) {
|
|
23
|
+
return [relation.toSpaceId];
|
|
24
|
+
}
|
|
25
|
+
if (!relation.directed && relation.toSpaceId === spaceId) {
|
|
26
|
+
return [relation.fromSpaceId];
|
|
27
|
+
}
|
|
28
|
+
return [];
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
export function toTrackBoardData(board, options) {
|
|
32
|
+
const spaces = Object.values(board.spaces);
|
|
33
|
+
const orderedSpaces = [...spaces].sort((left, right) => left.id.localeCompare(right.id));
|
|
34
|
+
return {
|
|
35
|
+
spaces: orderedSpaces.map((space, index, allSpaces) => ({
|
|
36
|
+
id: space.id,
|
|
37
|
+
index,
|
|
38
|
+
name: space.name ?? undefined,
|
|
39
|
+
type: space.typeId ?? undefined,
|
|
40
|
+
nextSpaces: (options.getNextSpaces?.(space, board) ??
|
|
41
|
+
defaultNextSpaces(board, space.id)),
|
|
42
|
+
jumpTo: options.getJumpTo?.(space, board),
|
|
43
|
+
position: "getPosition" in options && options.getPosition
|
|
44
|
+
? options.getPosition(space, index, allSpaces)
|
|
45
|
+
: positionForLayout(options.layout, index, allSpaces.length),
|
|
46
|
+
data: space.fields,
|
|
47
|
+
})),
|
|
48
|
+
pieces: (options.pieces ?? []).map((piece) => ({
|
|
49
|
+
id: piece.id,
|
|
50
|
+
spaceId: piece.spaceId,
|
|
51
|
+
owner: piece.owner,
|
|
52
|
+
type: piece.typeId ?? undefined,
|
|
53
|
+
data: piece.fields,
|
|
54
|
+
})),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PlayerId } from "@dreamboard/manifest-contract";
|
|
2
|
+
/**
|
|
3
|
+
* Returns the list of players the engine currently considers active, as
|
|
4
|
+
* reported by the most recent gameplay snapshot.
|
|
5
|
+
*
|
|
6
|
+
* - For single-active-player phases, this has one entry.
|
|
7
|
+
* - For multi-active-player phases (e.g. "all players discard at once"), it
|
|
8
|
+
* includes every seat that is expected to act.
|
|
9
|
+
* - Returns an empty array before the first gameplay snapshot arrives.
|
|
10
|
+
*
|
|
11
|
+
* Prefer this hook over re-projecting `currentPlayerId` / `turnOrder` into
|
|
12
|
+
* the view: flow state belongs to the engine, and `useActivePlayers()` is
|
|
13
|
+
* always in lock-step with server-authoritative state.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useActivePlayers(): readonly PlayerId[];
|
|
16
|
+
//# sourceMappingURL=useActivePlayers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useActivePlayers.d.ts","sourceRoot":"","sources":["../../src/hooks/useActivePlayers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,IAAI,SAAS,QAAQ,EAAE,CAEtD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { usePluginState } from "../context/PluginStateContext.js";
|
|
2
|
+
/**
|
|
3
|
+
* Returns the list of players the engine currently considers active, as
|
|
4
|
+
* reported by the most recent gameplay snapshot.
|
|
5
|
+
*
|
|
6
|
+
* - For single-active-player phases, this has one entry.
|
|
7
|
+
* - For multi-active-player phases (e.g. "all players discard at once"), it
|
|
8
|
+
* includes every seat that is expected to act.
|
|
9
|
+
* - Returns an empty array before the first gameplay snapshot arrives.
|
|
10
|
+
*
|
|
11
|
+
* Prefer this hook over re-projecting `currentPlayerId` / `turnOrder` into
|
|
12
|
+
* the view: flow state belongs to the engine, and `useActivePlayers()` is
|
|
13
|
+
* always in lock-step with server-authoritative state.
|
|
14
|
+
*/
|
|
15
|
+
export function useActivePlayers() {
|
|
16
|
+
return usePluginState((state) => state.gameplay.activePlayers);
|
|
17
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { InteractiveTargetLayer } from "../components/board/target-layer.js";
|
|
2
|
+
import type { InteractionDescriptor } from "../types/plugin-state.js";
|
|
3
|
+
import { type BoardTargetKind } from "../utils/interaction-inputs.js";
|
|
4
|
+
export type BoardEligibleTargets = Readonly<Record<BoardTargetKind, ReadonlySet<string>>>;
|
|
5
|
+
export interface BoardTargetLayerOptions {
|
|
6
|
+
enabled?: boolean;
|
|
7
|
+
extraInputs?: Record<string, unknown> | ((targetId: string) => Record<string, unknown>);
|
|
8
|
+
onBeforeSelect?: () => void;
|
|
9
|
+
onError?: (error: unknown) => void;
|
|
10
|
+
}
|
|
11
|
+
export type BoardTargetLayerFactory = (options?: BoardTargetLayerOptions) => InteractiveTargetLayer;
|
|
12
|
+
export interface BoardInteractionsOptions {
|
|
13
|
+
/**
|
|
14
|
+
* Target kinds the hook pulls interactions from. Defaults to every board
|
|
15
|
+
* target kind. Restrict when a specific screen should only react to a subset
|
|
16
|
+
* (e.g. a discard screen that only cares about tile clicks).
|
|
17
|
+
*/
|
|
18
|
+
targetKinds?: readonly BoardTargetKind[];
|
|
19
|
+
}
|
|
20
|
+
export declare class BoardInteractionConflictError extends Error {
|
|
21
|
+
readonly name = "BoardInteractionConflictError";
|
|
22
|
+
readonly targetKind: BoardTargetKind;
|
|
23
|
+
readonly targetId: string;
|
|
24
|
+
readonly interactionKeys: readonly string[];
|
|
25
|
+
constructor({ targetKind, targetId, interactionKeys, }: {
|
|
26
|
+
targetKind: BoardTargetKind;
|
|
27
|
+
targetId: string;
|
|
28
|
+
interactionKeys: readonly string[];
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Opinionated board-level dispatch context. Collapses the repeated
|
|
33
|
+
* "collect every board handle, merge target domains across them,
|
|
34
|
+
* route each click into the right interaction" pattern that advanced
|
|
35
|
+
* board games (Catan-class) otherwise have to re-implement by hand.
|
|
36
|
+
*/
|
|
37
|
+
export interface BoardInteractionsContext<I extends string = string> {
|
|
38
|
+
/**
|
|
39
|
+
* All board-surface interactions projected onto the controlling seat
|
|
40
|
+
* — both available and unavailable. Rendered greyed-out states can
|
|
41
|
+
* key off this even when the interaction isn't dispatchable yet.
|
|
42
|
+
*/
|
|
43
|
+
interactions: ReadonlyArray<InteractionDescriptor<I>>;
|
|
44
|
+
/**
|
|
45
|
+
* Per-target-kind eligibility sets merged across every currently-
|
|
46
|
+
* available board interaction. `eligible.vertex` answers "which
|
|
47
|
+
* vertex ids can be clicked right now?" without the caller manually
|
|
48
|
+
* unioning descriptor eligibility across handles or knowing the
|
|
49
|
+
* authored input key.
|
|
50
|
+
*/
|
|
51
|
+
eligible: BoardEligibleTargets;
|
|
52
|
+
/**
|
|
53
|
+
* True when `targetId` is eligible for at least one available
|
|
54
|
+
* interaction. Pass `targetKind` to scope the check to a specific
|
|
55
|
+
* board target kind.
|
|
56
|
+
*/
|
|
57
|
+
isEligible(targetId: string, targetKind?: BoardTargetKind): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Target-kind dispatch. Routes by board geometry (`edge`, `vertex`,
|
|
60
|
+
* `space`, `tile`) rather than authored input-key strings.
|
|
61
|
+
*/
|
|
62
|
+
select: {
|
|
63
|
+
edge(targetId: string, extraInputs?: Record<string, unknown>): Promise<string | null>;
|
|
64
|
+
vertex(targetId: string, extraInputs?: Record<string, unknown>): Promise<string | null>;
|
|
65
|
+
space(targetId: string, extraInputs?: Record<string, unknown>): Promise<string | null>;
|
|
66
|
+
tile(targetId: string, extraInputs?: Record<string, unknown>): Promise<string | null>;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Reducer-aware target layers for board primitives. Pass these directly
|
|
70
|
+
* to grids so eligibility, dispatch, and submit error handling stay in
|
|
71
|
+
* one place instead of being re-wired per component.
|
|
72
|
+
*/
|
|
73
|
+
targetLayers: {
|
|
74
|
+
edge: BoardTargetLayerFactory;
|
|
75
|
+
vertex: BoardTargetLayerFactory;
|
|
76
|
+
space: BoardTargetLayerFactory;
|
|
77
|
+
tile: BoardTargetLayerFactory;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Board-surface orchestration helper that removes the boilerplate of
|
|
82
|
+
* wiring many `useInteractionById(...)` calls, merging their
|
|
83
|
+
* eligibility sets, and dispatching clicks to the right handle.
|
|
84
|
+
*
|
|
85
|
+
* Use this alongside (or instead of) `<BoardSurface>` when a game
|
|
86
|
+
* keeps multiple board interactions live simultaneously and dispatch
|
|
87
|
+
* is target-driven rather than armed-then-clicked. The typical
|
|
88
|
+
* Catan-class shape:
|
|
89
|
+
*
|
|
90
|
+
* ```tsx
|
|
91
|
+
* const board = useBoardInteractions();
|
|
92
|
+
*
|
|
93
|
+
* return (
|
|
94
|
+
* <HexGrid
|
|
95
|
+
* interactiveVertices={board.targetLayers.vertex()}
|
|
96
|
+
* interactiveEdges={board.targetLayers.edge()}
|
|
97
|
+
* onTileClick={(id) =>
|
|
98
|
+
* board.select.space(id, { stealFromPlayerId: null })
|
|
99
|
+
* }
|
|
100
|
+
* />
|
|
101
|
+
* );
|
|
102
|
+
* ```
|
|
103
|
+
*
|
|
104
|
+
* Eligibility and availability remain authoritative on reducer-projected
|
|
105
|
+
* descriptors. Armed follow-up descriptors beat ambient board descriptors.
|
|
106
|
+
* Multiple unarmed matches are ambiguous and throw
|
|
107
|
+
* {@link BoardInteractionConflictError}.
|
|
108
|
+
*/
|
|
109
|
+
export declare function useBoardInteractions<I extends string = string>(options?: BoardInteractionsOptions): BoardInteractionsContext<I>;
|
|
110
|
+
//# sourceMappingURL=useBoardInteractions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBoardInteractions.d.ts","sourceRoot":"","sources":["../../src/hooks/useBoardInteractions.ts"],"names":[],"mappings":"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"}
|