@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,392 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token contract for `@dreamboard/ui-sdk`.
|
|
3
|
+
*
|
|
4
|
+
* The {@link Theme} object is the only thing components consume for
|
|
5
|
+
* visual styling. Every preset (tabletop, arcade, studio) is just a
|
|
6
|
+
* different fully-resolved {@link Theme}; every author override is a
|
|
7
|
+
* deep partial of it. Components never inline hex codes, font stacks,
|
|
8
|
+
* or shadow strings — they read from `useTheme()` (or, when written in
|
|
9
|
+
* Tailwind, from CSS variables that the {@link ThemeProvider} writes
|
|
10
|
+
* onto its wrapper element).
|
|
11
|
+
*
|
|
12
|
+
* Architectural rules:
|
|
13
|
+
*
|
|
14
|
+
* 1. **Foundation → Semantic → Component.** Foundation palette ramps
|
|
15
|
+
* (`color.neutral`, `color.brand`, …) are never read directly by
|
|
16
|
+
* components. Components read `semantic.*` (e.g. `surface.card`,
|
|
17
|
+
* `intent.primary`) which the preset maps from foundation tokens.
|
|
18
|
+
* 2. **No optional deep keys.** Presets must supply every leaf so
|
|
19
|
+
* components don't need fallbacks. Author-supplied overrides are
|
|
20
|
+
* `DeepPartial<Theme>` and merged before the provider mounts.
|
|
21
|
+
* 3. **Scalar leaves only.** Every leaf is a string (CSS-ready) so the
|
|
22
|
+
* serializer can emit a CSS variable for it without per-token
|
|
23
|
+
* formatting logic.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/** Identity-only metadata. */
|
|
27
|
+
export interface ThemeMeta {
|
|
28
|
+
/** Stable id used by `data-dreamboard-theme` and CSS-var scoping. */
|
|
29
|
+
readonly id: string;
|
|
30
|
+
/** Human-readable name for dev tools. */
|
|
31
|
+
readonly name: string;
|
|
32
|
+
/**
|
|
33
|
+
* Render mode hint for components that need to choose between light
|
|
34
|
+
* and dark sub-tokens. Presets pick one; authors don't toggle this.
|
|
35
|
+
*/
|
|
36
|
+
readonly mode: "light" | "dark";
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Foundation color ramp. Six stops keeps presets compact. */
|
|
40
|
+
export interface ColorRamp {
|
|
41
|
+
readonly 50: string;
|
|
42
|
+
readonly 100: string;
|
|
43
|
+
readonly 200: string;
|
|
44
|
+
readonly 400: string;
|
|
45
|
+
readonly 600: string;
|
|
46
|
+
readonly 800: string;
|
|
47
|
+
readonly 950: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Per-player color tokens. The {@link Theme.player} array is indexed by
|
|
52
|
+
* 0-based seat slot (`player[0]` = first seat). Each entry carries a
|
|
53
|
+
* `solid` brand color, a `soft` tint usable as a background, and `on`
|
|
54
|
+
* — the recommended foreground when text sits on `solid`.
|
|
55
|
+
*/
|
|
56
|
+
export interface PlayerColor {
|
|
57
|
+
readonly solid: string;
|
|
58
|
+
readonly soft: string;
|
|
59
|
+
readonly on: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Foundation palette. Components never read this directly; presets map
|
|
64
|
+
* these into {@link SemanticTokens}. Exposed so authors who write a
|
|
65
|
+
* full theme can compose without inventing their own palette type.
|
|
66
|
+
*/
|
|
67
|
+
export interface FoundationColor {
|
|
68
|
+
readonly neutral: ColorRamp;
|
|
69
|
+
readonly brand: ColorRamp;
|
|
70
|
+
readonly accent: ColorRamp;
|
|
71
|
+
readonly success: ColorRamp;
|
|
72
|
+
readonly warning: ColorRamp;
|
|
73
|
+
readonly danger: ColorRamp;
|
|
74
|
+
readonly info: ColorRamp;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Semantic colors consumed by every component. These are the *only*
|
|
79
|
+
* color tokens components should reference. Names describe role
|
|
80
|
+
* ("the surface a player card sits on"), not appearance ("light grey").
|
|
81
|
+
*/
|
|
82
|
+
export interface SemanticColor {
|
|
83
|
+
readonly surface: {
|
|
84
|
+
/** Outermost shell background. */
|
|
85
|
+
readonly app: string;
|
|
86
|
+
/** Board canvas background (behind tiles). */
|
|
87
|
+
readonly board: string;
|
|
88
|
+
/** HUD chrome panels (top bar, action bar, side rails). */
|
|
89
|
+
readonly hud: string;
|
|
90
|
+
/** Standalone cards (player cards, action cards, hand cards). */
|
|
91
|
+
readonly card: string;
|
|
92
|
+
/** Modal/sheet body. */
|
|
93
|
+
readonly sheet: string;
|
|
94
|
+
/** Scrim behind a blocker overlay. */
|
|
95
|
+
readonly overlay: string;
|
|
96
|
+
/** Subtle inset (resource pills, count badges, …). */
|
|
97
|
+
readonly inset: string;
|
|
98
|
+
};
|
|
99
|
+
readonly text: {
|
|
100
|
+
/** Default body and headline text on light surfaces. */
|
|
101
|
+
readonly primary: string;
|
|
102
|
+
/** De-emphasised metadata, hint copy, captions. */
|
|
103
|
+
readonly muted: string;
|
|
104
|
+
/** Text used on `intent.primary` solid backgrounds. */
|
|
105
|
+
readonly onIntent: string;
|
|
106
|
+
/** Brand-tinted text for emphasis (links, key numbers). */
|
|
107
|
+
readonly accent: string;
|
|
108
|
+
/** Disabled text (button labels in disabled state). */
|
|
109
|
+
readonly disabled: string;
|
|
110
|
+
};
|
|
111
|
+
readonly border: {
|
|
112
|
+
/** Hairline divider between sibling rows. */
|
|
113
|
+
readonly subtle: string;
|
|
114
|
+
/** Standard card / panel border. */
|
|
115
|
+
readonly default: string;
|
|
116
|
+
/** Outlined emphasis (hovered tiles, selected card). */
|
|
117
|
+
readonly strong: string;
|
|
118
|
+
/** Focus ring (keyboard nav). */
|
|
119
|
+
readonly focus: string;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Intent colours map to action emphasis. Components pick a slot
|
|
123
|
+
* (`primary` for "do the main thing now", `danger` for destructive
|
|
124
|
+
* confirms, etc.) and read both the surface and on-color from it.
|
|
125
|
+
*/
|
|
126
|
+
readonly intent: {
|
|
127
|
+
readonly primary: IntentColor;
|
|
128
|
+
readonly secondary: IntentColor;
|
|
129
|
+
readonly success: IntentColor;
|
|
130
|
+
readonly danger: IntentColor;
|
|
131
|
+
readonly warning: IntentColor;
|
|
132
|
+
readonly info: IntentColor;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** A semantic intent (button background + matching foreground + soft tint). */
|
|
137
|
+
export interface IntentColor {
|
|
138
|
+
/** Solid fill (button bg, badge bg). */
|
|
139
|
+
readonly solid: string;
|
|
140
|
+
/** Recommended text/icon color sitting on `solid`. */
|
|
141
|
+
readonly on: string;
|
|
142
|
+
/** Subtle tint (e.g. badge bg with `text` for foreground). */
|
|
143
|
+
readonly soft: string;
|
|
144
|
+
/** Suitable foreground when sitting on `soft`. */
|
|
145
|
+
readonly onSoft: string;
|
|
146
|
+
/** Border tint matched to this intent (e.g. focus ring on intent). */
|
|
147
|
+
readonly border: string;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** Border-radius ramp. */
|
|
151
|
+
export interface Radius {
|
|
152
|
+
readonly none: string;
|
|
153
|
+
readonly sm: string;
|
|
154
|
+
readonly md: string;
|
|
155
|
+
readonly lg: string;
|
|
156
|
+
/** HUD chrome (top bar pieces, action-bar bar). */
|
|
157
|
+
readonly hud: string;
|
|
158
|
+
/** Fully-round badges/pills. */
|
|
159
|
+
readonly pill: string;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** Spacing ramp (rem-based by default). */
|
|
163
|
+
export interface Space {
|
|
164
|
+
readonly 0: string;
|
|
165
|
+
readonly 0.5: string;
|
|
166
|
+
readonly 1: string;
|
|
167
|
+
readonly 1.5: string;
|
|
168
|
+
readonly 2: string;
|
|
169
|
+
readonly 3: string;
|
|
170
|
+
readonly 4: string;
|
|
171
|
+
readonly 6: string;
|
|
172
|
+
readonly 8: string;
|
|
173
|
+
readonly 12: string;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** Typography tokens. */
|
|
177
|
+
export interface Typography {
|
|
178
|
+
readonly fontFamily: {
|
|
179
|
+
/** Hero text — phase name, scoreboard headline, winner banner. */
|
|
180
|
+
readonly display: string;
|
|
181
|
+
/** Default UI body text. */
|
|
182
|
+
readonly body: string;
|
|
183
|
+
/** Numeric runs (scores, counters, tabular data). Tabular figures preferred. */
|
|
184
|
+
readonly tabular: string;
|
|
185
|
+
/** Source/code/raw-id rendering. */
|
|
186
|
+
readonly mono: string;
|
|
187
|
+
};
|
|
188
|
+
readonly fontSize: {
|
|
189
|
+
readonly xs: string;
|
|
190
|
+
readonly sm: string;
|
|
191
|
+
readonly md: string;
|
|
192
|
+
readonly lg: string;
|
|
193
|
+
readonly xl: string;
|
|
194
|
+
readonly "2xl": string;
|
|
195
|
+
readonly "3xl": string;
|
|
196
|
+
};
|
|
197
|
+
readonly fontWeight: {
|
|
198
|
+
readonly regular: string;
|
|
199
|
+
readonly medium: string;
|
|
200
|
+
readonly bold: string;
|
|
201
|
+
};
|
|
202
|
+
readonly lineHeight: {
|
|
203
|
+
readonly tight: string;
|
|
204
|
+
readonly normal: string;
|
|
205
|
+
readonly relaxed: string;
|
|
206
|
+
};
|
|
207
|
+
readonly letterSpacing: {
|
|
208
|
+
readonly tight: string;
|
|
209
|
+
readonly normal: string;
|
|
210
|
+
readonly wide: string;
|
|
211
|
+
/** All-caps labels ("YOUR TURN"). */
|
|
212
|
+
readonly caps: string;
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** Drop-shadow elevation ramp. */
|
|
217
|
+
export interface Elevation {
|
|
218
|
+
/** Resting state (cards, panels). */
|
|
219
|
+
readonly rest: string;
|
|
220
|
+
/** Hover-lift (interactive cards). */
|
|
221
|
+
readonly hover: string;
|
|
222
|
+
/** Selected / dragged element. */
|
|
223
|
+
readonly lifted: string;
|
|
224
|
+
/** Modal / overlay stack. */
|
|
225
|
+
readonly overlay: string;
|
|
226
|
+
/** Inner shadow (board canvas inset, resource pill well). */
|
|
227
|
+
readonly inset: string;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Motion tokens. Components import durations and easings from here so a
|
|
232
|
+
* single `prefers-reduced-motion` switch zeroes everything out at the
|
|
233
|
+
* provider, not per-component.
|
|
234
|
+
*/
|
|
235
|
+
export interface Motion {
|
|
236
|
+
readonly duration: {
|
|
237
|
+
/** Hover, focus, micro-press (~80ms). */
|
|
238
|
+
readonly fast: string;
|
|
239
|
+
/** Default — most state changes (~160ms). */
|
|
240
|
+
readonly normal: string;
|
|
241
|
+
/** Layout shifts, drawer open/close (~280ms). */
|
|
242
|
+
readonly slow: string;
|
|
243
|
+
/**
|
|
244
|
+
* Looping ambient pulses — active-player breath, dice glow.
|
|
245
|
+
* Components should respect `motion.reducedMotion` before kicking
|
|
246
|
+
* off looping animations.
|
|
247
|
+
*/
|
|
248
|
+
readonly ambient: string;
|
|
249
|
+
};
|
|
250
|
+
readonly easing: {
|
|
251
|
+
/** Default for entering / settling. */
|
|
252
|
+
readonly out: string;
|
|
253
|
+
/** Default for exiting. */
|
|
254
|
+
readonly in: string;
|
|
255
|
+
/** Symmetric. */
|
|
256
|
+
readonly inOut: string;
|
|
257
|
+
/** Springy — selected card lift, active-player wobble. */
|
|
258
|
+
readonly spring: string;
|
|
259
|
+
};
|
|
260
|
+
/**
|
|
261
|
+
* `"true"` when the active client requests reduced motion. Components
|
|
262
|
+
* should branch on this rather than forcing animations off via CSS,
|
|
263
|
+
* because some animations (e.g. dice roll, shuffle) are critical for
|
|
264
|
+
* conveying state and need a static fallback.
|
|
265
|
+
*/
|
|
266
|
+
readonly reducedMotion: "true" | "false";
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Component-level token slots derived from semantic + foundation tokens.
|
|
271
|
+
* Kept intentionally tiny — a slot is added here only when a component
|
|
272
|
+
* needs to deviate from the semantic mapping in a way that authors
|
|
273
|
+
* should be able to customise without re-skinning the whole intent
|
|
274
|
+
* scale.
|
|
275
|
+
*/
|
|
276
|
+
export interface ComponentTokens {
|
|
277
|
+
readonly board: {
|
|
278
|
+
/** Outer ring around the board canvas. */
|
|
279
|
+
readonly frameBorder: string;
|
|
280
|
+
/** Inner board surface tint (overlays the canvas tile renderer). */
|
|
281
|
+
readonly frameBackground: string;
|
|
282
|
+
/** Highlight ring drawn on hovered interactive targets. */
|
|
283
|
+
readonly hoverRing: string;
|
|
284
|
+
/** Idle hint colour for eligible-but-unhovered targets. */
|
|
285
|
+
readonly eligibleHint: string;
|
|
286
|
+
};
|
|
287
|
+
readonly card: {
|
|
288
|
+
/** Border drawn around face-up cards. */
|
|
289
|
+
readonly border: string;
|
|
290
|
+
/** Border drawn around face-down cards. */
|
|
291
|
+
readonly backBorder: string;
|
|
292
|
+
/** Card-back fill colour. */
|
|
293
|
+
readonly backBackground: string;
|
|
294
|
+
/** Selected outline. */
|
|
295
|
+
readonly selectedRing: string;
|
|
296
|
+
};
|
|
297
|
+
readonly playerCard: {
|
|
298
|
+
/** Background of the active-player card. */
|
|
299
|
+
readonly activeBackground: string;
|
|
300
|
+
/** Border of the active-player card. */
|
|
301
|
+
readonly activeBorder: string;
|
|
302
|
+
/** Glow colour radiated by the active-player card. */
|
|
303
|
+
readonly activeGlow: string;
|
|
304
|
+
/** Background of the "you" badge. */
|
|
305
|
+
readonly youBadgeBackground: string;
|
|
306
|
+
/** Foreground of the "you" badge. */
|
|
307
|
+
readonly youBadgeForeground: string;
|
|
308
|
+
};
|
|
309
|
+
readonly toast: {
|
|
310
|
+
readonly successBackground: string;
|
|
311
|
+
readonly errorBackground: string;
|
|
312
|
+
readonly infoBackground: string;
|
|
313
|
+
readonly foreground: string;
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* The complete theme contract. Every leaf is a CSS-ready string so the
|
|
319
|
+
* provider can emit a CSS variable for each path without per-leaf
|
|
320
|
+
* formatting. {@link DeepPartial} is exported for author overrides.
|
|
321
|
+
*/
|
|
322
|
+
export interface Theme {
|
|
323
|
+
readonly meta: ThemeMeta;
|
|
324
|
+
readonly color: FoundationColor;
|
|
325
|
+
readonly semantic: SemanticColor;
|
|
326
|
+
readonly radius: Radius;
|
|
327
|
+
readonly space: Space;
|
|
328
|
+
readonly typography: Typography;
|
|
329
|
+
readonly elevation: Elevation;
|
|
330
|
+
readonly motion: Motion;
|
|
331
|
+
readonly player: readonly [
|
|
332
|
+
PlayerColor,
|
|
333
|
+
PlayerColor,
|
|
334
|
+
PlayerColor,
|
|
335
|
+
PlayerColor,
|
|
336
|
+
PlayerColor,
|
|
337
|
+
PlayerColor,
|
|
338
|
+
];
|
|
339
|
+
readonly component: ComponentTokens;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Recursive partial for theme overrides. Authors pass this to
|
|
344
|
+
* `<ThemeProvider override={...}/>` (or to a preset's `extend`
|
|
345
|
+
* helper) to tweak individual tokens without re-declaring the whole
|
|
346
|
+
* tree.
|
|
347
|
+
*/
|
|
348
|
+
export type ThemeOverride = DeepPartial<Theme>;
|
|
349
|
+
|
|
350
|
+
type DeepPartial<T> =
|
|
351
|
+
T extends ReadonlyArray<infer U>
|
|
352
|
+
? ReadonlyArray<DeepPartial<U>>
|
|
353
|
+
: T extends object
|
|
354
|
+
? { readonly [K in keyof T]?: DeepPartial<T[K]> }
|
|
355
|
+
: T;
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Deep merge for {@link Theme} overrides. Arrays (notably
|
|
359
|
+
* {@link Theme.player}) are *replaced* rather than merged so callers
|
|
360
|
+
* can't accidentally end up with mixed-preset palettes.
|
|
361
|
+
*/
|
|
362
|
+
export function mergeTheme(base: Theme, override?: ThemeOverride): Theme {
|
|
363
|
+
if (!override) return base;
|
|
364
|
+
return mergeDeep(base, override) as Theme;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
function mergeDeep<T>(base: T, override: unknown): T {
|
|
368
|
+
if (Array.isArray(override)) {
|
|
369
|
+
// Arrays replace wholesale — see contract docs.
|
|
370
|
+
return override as T;
|
|
371
|
+
}
|
|
372
|
+
if (
|
|
373
|
+
base &&
|
|
374
|
+
typeof base === "object" &&
|
|
375
|
+
override &&
|
|
376
|
+
typeof override === "object" &&
|
|
377
|
+
!Array.isArray(base)
|
|
378
|
+
) {
|
|
379
|
+
const result: Record<string, unknown> = {
|
|
380
|
+
...(base as Record<string, unknown>),
|
|
381
|
+
};
|
|
382
|
+
for (const [key, value] of Object.entries(
|
|
383
|
+
override as Record<string, unknown>,
|
|
384
|
+
)) {
|
|
385
|
+
if (value === undefined) continue;
|
|
386
|
+
const baseValue = (base as Record<string, unknown>)[key];
|
|
387
|
+
result[key] = mergeDeep(baseValue, value);
|
|
388
|
+
}
|
|
389
|
+
return result as T;
|
|
390
|
+
}
|
|
391
|
+
return override === undefined ? base : (override as T);
|
|
392
|
+
}
|