@smoregg/sdk 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/dist/cjs/config.cjs.map +1 -1
  2. package/dist/cjs/controller.cjs +215 -145
  3. package/dist/cjs/controller.cjs.map +1 -1
  4. package/dist/cjs/screen.cjs +220 -178
  5. package/dist/cjs/screen.cjs.map +1 -1
  6. package/dist/cjs/testing.cjs +160 -151
  7. package/dist/cjs/testing.cjs.map +1 -1
  8. package/dist/esm/config.js.map +1 -1
  9. package/dist/esm/controller.js +216 -146
  10. package/dist/esm/controller.js.map +1 -1
  11. package/dist/esm/screen.js +221 -179
  12. package/dist/esm/screen.js.map +1 -1
  13. package/dist/esm/testing.js +160 -151
  14. package/dist/esm/testing.js.map +1 -1
  15. package/dist/types/config.d.ts +1 -2
  16. package/dist/types/config.d.ts.map +1 -1
  17. package/dist/types/controller.d.ts +22 -43
  18. package/dist/types/controller.d.ts.map +1 -1
  19. package/dist/types/index.d.ts +14 -14
  20. package/dist/types/index.d.ts.map +1 -1
  21. package/dist/types/screen.d.ts +26 -37
  22. package/dist/types/screen.d.ts.map +1 -1
  23. package/dist/types/testing.d.ts +16 -0
  24. package/dist/types/testing.d.ts.map +1 -1
  25. package/dist/types/types.d.ts +244 -338
  26. package/dist/types/types.d.ts.map +1 -1
  27. package/dist/umd/smore-sdk.umd.js +595 -474
  28. package/dist/umd/smore-sdk.umd.js.map +1 -1
  29. package/dist/umd/smore-sdk.umd.min.js +1 -1
  30. package/dist/umd/smore-sdk.umd.min.js.map +1 -1
  31. package/package.json +1 -1
  32. package/dist/cjs/SmoreHost.cjs +0 -306
  33. package/dist/cjs/SmoreHost.cjs.map +0 -1
  34. package/dist/cjs/SmorePlayer.cjs +0 -229
  35. package/dist/cjs/SmorePlayer.cjs.map +0 -1
  36. package/dist/cjs/components/DirectionPad.cjs +0 -68
  37. package/dist/cjs/components/DirectionPad.cjs.map +0 -1
  38. package/dist/cjs/components/DirectionPad.module.css.cjs +0 -12
  39. package/dist/cjs/components/DirectionPad.module.css.cjs.map +0 -1
  40. package/dist/cjs/components/HoldButton.cjs +0 -57
  41. package/dist/cjs/components/HoldButton.cjs.map +0 -1
  42. package/dist/cjs/components/HoldButton.module.css.cjs +0 -12
  43. package/dist/cjs/components/HoldButton.module.css.cjs.map +0 -1
  44. package/dist/cjs/components/IframeGameBridge.cjs +0 -115
  45. package/dist/cjs/components/IframeGameBridge.cjs.map +0 -1
  46. package/dist/cjs/components/SwipeArea.cjs +0 -58
  47. package/dist/cjs/components/SwipeArea.cjs.map +0 -1
  48. package/dist/cjs/components/SwipeArea.module.css.cjs +0 -12
  49. package/dist/cjs/components/SwipeArea.module.css.cjs.map +0 -1
  50. package/dist/cjs/components/TapButton.cjs +0 -58
  51. package/dist/cjs/components/TapButton.cjs.map +0 -1
  52. package/dist/cjs/components/TapButton.module.css.cjs +0 -12
  53. package/dist/cjs/components/TapButton.module.css.cjs.map +0 -1
  54. package/dist/cjs/context/RoomProvider.cjs +0 -118
  55. package/dist/cjs/context/RoomProvider.cjs.map +0 -1
  56. package/dist/cjs/hooks/useExternalGames.cjs +0 -49
  57. package/dist/cjs/hooks/useExternalGames.cjs.map +0 -1
  58. package/dist/cjs/hooks/useGameHost.cjs +0 -206
  59. package/dist/cjs/hooks/useGameHost.cjs.map +0 -1
  60. package/dist/cjs/hooks/useGamePlayer.cjs +0 -134
  61. package/dist/cjs/hooks/useGamePlayer.cjs.map +0 -1
  62. package/dist/cjs/iframe/index.cjs +0 -260
  63. package/dist/cjs/iframe/index.cjs.map +0 -1
  64. package/dist/cjs/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.cjs +0 -33
  65. package/dist/cjs/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.cjs.map +0 -1
  66. package/dist/cjs/server/index.cjs +0 -45
  67. package/dist/cjs/server/index.cjs.map +0 -1
  68. package/dist/cjs/transport/DirectTransport.cjs +0 -23
  69. package/dist/cjs/transport/DirectTransport.cjs.map +0 -1
  70. package/dist/cjs/utils/connectionMonitor.cjs +0 -77
  71. package/dist/cjs/utils/connectionMonitor.cjs.map +0 -1
  72. package/dist/cjs/utils/preloadAssets.cjs +0 -66
  73. package/dist/cjs/utils/preloadAssets.cjs.map +0 -1
  74. package/dist/cjs/utils/serverTime.cjs +0 -43
  75. package/dist/cjs/utils/serverTime.cjs.map +0 -1
  76. package/dist/esm/SmoreHost.js +0 -304
  77. package/dist/esm/SmoreHost.js.map +0 -1
  78. package/dist/esm/SmorePlayer.js +0 -227
  79. package/dist/esm/SmorePlayer.js.map +0 -1
  80. package/dist/esm/components/DirectionPad.js +0 -66
  81. package/dist/esm/components/DirectionPad.js.map +0 -1
  82. package/dist/esm/components/DirectionPad.module.css.js +0 -8
  83. package/dist/esm/components/DirectionPad.module.css.js.map +0 -1
  84. package/dist/esm/components/HoldButton.js +0 -55
  85. package/dist/esm/components/HoldButton.js.map +0 -1
  86. package/dist/esm/components/HoldButton.module.css.js +0 -8
  87. package/dist/esm/components/HoldButton.module.css.js.map +0 -1
  88. package/dist/esm/components/IframeGameBridge.js +0 -113
  89. package/dist/esm/components/IframeGameBridge.js.map +0 -1
  90. package/dist/esm/components/SwipeArea.js +0 -56
  91. package/dist/esm/components/SwipeArea.js.map +0 -1
  92. package/dist/esm/components/SwipeArea.module.css.js +0 -8
  93. package/dist/esm/components/SwipeArea.module.css.js.map +0 -1
  94. package/dist/esm/components/TapButton.js +0 -56
  95. package/dist/esm/components/TapButton.js.map +0 -1
  96. package/dist/esm/components/TapButton.module.css.js +0 -8
  97. package/dist/esm/components/TapButton.module.css.js.map +0 -1
  98. package/dist/esm/context/RoomProvider.js +0 -109
  99. package/dist/esm/context/RoomProvider.js.map +0 -1
  100. package/dist/esm/hooks/useExternalGames.js +0 -47
  101. package/dist/esm/hooks/useExternalGames.js.map +0 -1
  102. package/dist/esm/hooks/useGameHost.js +0 -204
  103. package/dist/esm/hooks/useGameHost.js.map +0 -1
  104. package/dist/esm/hooks/useGamePlayer.js +0 -132
  105. package/dist/esm/hooks/useGamePlayer.js.map +0 -1
  106. package/dist/esm/iframe/index.js +0 -257
  107. package/dist/esm/iframe/index.js.map +0 -1
  108. package/dist/esm/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js +0 -29
  109. package/dist/esm/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
  110. package/dist/esm/server/index.js +0 -43
  111. package/dist/esm/server/index.js.map +0 -1
  112. package/dist/esm/transport/DirectTransport.js +0 -21
  113. package/dist/esm/transport/DirectTransport.js.map +0 -1
  114. package/dist/esm/utils/connectionMonitor.js +0 -75
  115. package/dist/esm/utils/connectionMonitor.js.map +0 -1
  116. package/dist/esm/utils/preloadAssets.js +0 -63
  117. package/dist/esm/utils/preloadAssets.js.map +0 -1
  118. package/dist/esm/utils/serverTime.js +0 -41
  119. package/dist/esm/utils/serverTime.js.map +0 -1
  120. package/dist/types/SmoreHost.d.ts +0 -187
  121. package/dist/types/SmoreHost.d.ts.map +0 -1
  122. package/dist/types/SmorePlayer.d.ts +0 -146
  123. package/dist/types/SmorePlayer.d.ts.map +0 -1
  124. package/dist/types/components/DirectionPad.d.ts +0 -21
  125. package/dist/types/components/DirectionPad.d.ts.map +0 -1
  126. package/dist/types/components/HoldButton.d.ts +0 -22
  127. package/dist/types/components/HoldButton.d.ts.map +0 -1
  128. package/dist/types/components/IframeGameBridge.d.ts +0 -38
  129. package/dist/types/components/IframeGameBridge.d.ts.map +0 -1
  130. package/dist/types/components/SwipeArea.d.ts +0 -19
  131. package/dist/types/components/SwipeArea.d.ts.map +0 -1
  132. package/dist/types/components/TapButton.d.ts +0 -19
  133. package/dist/types/components/TapButton.d.ts.map +0 -1
  134. package/dist/types/components/index.d.ts +0 -6
  135. package/dist/types/components/index.d.ts.map +0 -1
  136. package/dist/types/context/RoomProvider.d.ts +0 -69
  137. package/dist/types/context/RoomProvider.d.ts.map +0 -1
  138. package/dist/types/context/index.d.ts +0 -3
  139. package/dist/types/context/index.d.ts.map +0 -1
  140. package/dist/types/dev/DevSimulator.d.ts +0 -31
  141. package/dist/types/dev/DevSimulator.d.ts.map +0 -1
  142. package/dist/types/dev/index.d.ts +0 -2
  143. package/dist/types/dev/index.d.ts.map +0 -1
  144. package/dist/types/hooks/index.d.ts +0 -7
  145. package/dist/types/hooks/index.d.ts.map +0 -1
  146. package/dist/types/hooks/useExternalGames.d.ts +0 -32
  147. package/dist/types/hooks/useExternalGames.d.ts.map +0 -1
  148. package/dist/types/hooks/useGameHost.d.ts +0 -67
  149. package/dist/types/hooks/useGameHost.d.ts.map +0 -1
  150. package/dist/types/hooks/useGamePlayer.d.ts +0 -55
  151. package/dist/types/hooks/useGamePlayer.d.ts.map +0 -1
  152. package/dist/types/iframe/IframeRoomProvider.d.ts +0 -31
  153. package/dist/types/iframe/IframeRoomProvider.d.ts.map +0 -1
  154. package/dist/types/iframe/index.d.ts +0 -18
  155. package/dist/types/iframe/index.d.ts.map +0 -1
  156. package/dist/types/iframe/vanilla-entry.d.ts +0 -7
  157. package/dist/types/iframe/vanilla-entry.d.ts.map +0 -1
  158. package/dist/types/iframe/vanilla.d.ts +0 -49
  159. package/dist/types/iframe/vanilla.d.ts.map +0 -1
  160. package/dist/types/server/createGameRelay.d.ts +0 -26
  161. package/dist/types/server/createGameRelay.d.ts.map +0 -1
  162. package/dist/types/server/index.d.ts +0 -3
  163. package/dist/types/server/index.d.ts.map +0 -1
  164. package/dist/types/utils/connectionMonitor.d.ts +0 -57
  165. package/dist/types/utils/connectionMonitor.d.ts.map +0 -1
  166. package/dist/types/utils/index.d.ts +0 -7
  167. package/dist/types/utils/index.d.ts.map +0 -1
  168. package/dist/types/utils/preloadAssets.d.ts +0 -29
  169. package/dist/types/utils/preloadAssets.d.ts.map +0 -1
  170. package/dist/types/utils/serverTime.d.ts +0 -28
  171. package/dist/types/utils/serverTime.d.ts.map +0 -1
  172. package/dist/umd/smore-sdk-iframe.umd.js +0 -266
  173. package/dist/umd/smore-sdk-iframe.umd.js.map +0 -1
  174. package/dist/umd/smore-sdk-iframe.umd.min.js +0 -2
  175. package/dist/umd/smore-sdk-iframe.umd.min.js.map +0 -1
  176. package/dist/umd/smore-sdk-vanilla.umd.js +0 -1275
  177. package/dist/umd/smore-sdk-vanilla.umd.js.map +0 -1
  178. package/dist/umd/smore-sdk-vanilla.umd.min.js +0 -2
  179. package/dist/umd/smore-sdk-vanilla.umd.min.js.map +0 -1
@@ -1,146 +0,0 @@
1
- /**
2
- * SmorePlayer - Unified Player-side class for the S'MORE SDK (AirConsole style)
3
- *
4
- * Works in any environment: React, Phaser, Vanilla JS.
5
- * Automatically detects iframe vs bundled environment.
6
- *
7
- * @example Iframe game (auto-detection)
8
- * ```ts
9
- * const player = new SmorePlayer({
10
- * onReady: () => console.log('Ready! My index:', player.myIndex),
11
- * listeners: {
12
- * 'phase-update': (data) => handlePhaseUpdate(data),
13
- * },
14
- * });
15
- *
16
- * // Later
17
- * player.send('tap', { timestamp: Date.now() });
18
- * ```
19
- *
20
- * @example Bundled game (direct socket)
21
- * ```ts
22
- * const player = new SmorePlayer({
23
- * socket,
24
- * roomCode: 'ABCD',
25
- * myIndex: 0,
26
- * isLeader: true,
27
- * listeners: { ... },
28
- * });
29
- * ```
30
- */
31
- import type { Socket } from 'socket.io-client';
32
- /**
33
- * Player information.
34
- */
35
- export interface SmorePlayerInfo {
36
- /** Player index (0, 1, 2, ...) */
37
- playerIndex: number;
38
- /** Player's chosen nickname */
39
- nickname: string;
40
- /** Whether player is currently connected */
41
- connected: boolean;
42
- }
43
- /**
44
- * Configuration for SmorePlayer constructor.
45
- */
46
- export interface SmorePlayerConfig {
47
- /** Called when the player is ready and initialized (iframe games only) */
48
- onReady?: () => void;
49
- /** Called when another player joins the room */
50
- onPlayerJoin?: (playerIndex: number) => void;
51
- /** Called when another player leaves the room */
52
- onPlayerLeave?: (playerIndex: number) => void;
53
- /**
54
- * Event listeners for specific events.
55
- * Keys are event names (no colons), values are handler functions.
56
- * Handler receives (data) only - player side doesn't need playerIndex.
57
- */
58
- listeners?: Record<string, (data: any) => void>;
59
- /** Socket.IO socket instance (bundled games only) */
60
- socket?: Socket;
61
- /** Room code (bundled games only) */
62
- roomCode?: string;
63
- /** My player index (bundled games only) */
64
- myIndex?: number;
65
- /** Am I the leader? (bundled games only) */
66
- isLeader?: boolean;
67
- /** Parent window origin for postMessage validation (iframe games) */
68
- parentOrigin?: string;
69
- }
70
- /**
71
- * SmorePlayer - Main player-side class for game development.
72
- *
73
- * Automatically detects iframe vs bundled environment:
74
- * - Iframe: Uses PostMessageTransport, waits for smore:init from parent
75
- * - Bundled: Uses DirectTransport with provided socket
76
- */
77
- export declare class SmorePlayer {
78
- private transport;
79
- private config;
80
- private _roomCode;
81
- private _myIndex;
82
- private _isLeader;
83
- private _isReady;
84
- private _isDestroyed;
85
- private boundMessageHandler;
86
- private registeredHandlers;
87
- constructor(config?: SmorePlayerConfig);
88
- private initBundled;
89
- private initIframe;
90
- private setupEventHandlers;
91
- private registerHandler;
92
- /**
93
- * Get my player index (0, 1, 2, ...).
94
- */
95
- get myIndex(): number;
96
- /**
97
- * Check if I am the room leader.
98
- */
99
- get isLeader(): boolean;
100
- /**
101
- * Get the room code.
102
- */
103
- get roomCode(): string;
104
- /**
105
- * Check if the player is initialized and ready.
106
- */
107
- get isReady(): boolean;
108
- /**
109
- * Send an event to the host.
110
- *
111
- * @param event - Event name (no colons allowed)
112
- * @param data - Optional data payload
113
- *
114
- * @example
115
- * ```ts
116
- * player.send('tap', { timestamp: Date.now() });
117
- * player.send('answer', { choice: 2 });
118
- * ```
119
- */
120
- send(event: string, data?: any): void;
121
- /**
122
- * Add a listener for a specific event after construction.
123
- *
124
- * @param event - Event name (no colons allowed)
125
- * @param handler - Handler function (data) => void
126
- * @returns Cleanup function to remove the listener
127
- *
128
- * @example
129
- * ```ts
130
- * const cleanup = player.on('phase-update', (data) => {
131
- * console.log('New phase:', data.phase);
132
- * });
133
- *
134
- * // Later
135
- * cleanup();
136
- * ```
137
- */
138
- on(event: string, handler: (data: any) => void): () => void;
139
- /**
140
- * Clean up all resources.
141
- * Call this when unmounting/destroying the game.
142
- */
143
- destroy(): void;
144
- private ensureReady;
145
- }
146
- //# sourceMappingURL=SmorePlayer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SmorePlayer.d.ts","sourceRoot":"","sources":["../../src/SmorePlayer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAsC/C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAGhC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB,gDAAgD;IAChD,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C,iDAAiD;IACjD,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAE9C;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;IAIhD,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IAInB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD;;;;;;GAMG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,mBAAmB,CAA4C;IACvE,OAAO,CAAC,kBAAkB,CAAgE;gBAE9E,MAAM,GAAE,iBAAsB;IAwB1C,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,UAAU;IAkDlB,OAAO,CAAC,kBAAkB;IA6B1B,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAMD;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAMrC;;;;;;;;;;;;;;;;OAgBG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI;IAgB3D;;;OAGG;IACH,OAAO,IAAI,IAAI;IA6Bf,OAAO,CAAC,WAAW;CAQpB"}
@@ -1,21 +0,0 @@
1
- /**
2
- * S'MORE Game SDK - DirectionPad Component
3
- *
4
- * 4-direction or 2-direction control pad
5
- */
6
- import type { DirectionPadProps } from '../types';
7
- /**
8
- * DirectionPad - For directional input
9
- *
10
- * @example
11
- * ```tsx
12
- * // 4 directions
13
- * <DirectionPad onDirection={(dir) => send('move', { direction: dir })} />
14
- *
15
- * // Left/Right only
16
- * <DirectionPad leftRightOnly onDirection={(dir) => send('move', { direction: dir })} />
17
- * ```
18
- */
19
- export declare function DirectionPad({ onDirection, leftRightOnly, upDownOnly, className, }: DirectionPadProps): import("react/jsx-runtime").JSX.Element;
20
- export default DirectionPad;
21
- //# sourceMappingURL=DirectionPad.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DirectionPad.d.ts","sourceRoot":"","sources":["../../../src/components/DirectionPad.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,aAAqB,EACrB,UAAkB,EAClB,SAAS,GACV,EAAE,iBAAiB,2CAwEnB;AAED,eAAe,YAAY,CAAC"}
@@ -1,22 +0,0 @@
1
- /**
2
- * S'MORE Game SDK - HoldButton Component
3
- *
4
- * Button that detects hold start/end events
5
- */
6
- import type { HoldButtonProps } from '../types';
7
- /**
8
- * HoldButton - For hold/release input patterns
9
- *
10
- * @example
11
- * ```tsx
12
- * <HoldButton
13
- * onHoldStart={() => send('charge', { type: 'start' })}
14
- * onHoldEnd={() => send('charge', { type: 'end' })}
15
- * >
16
- * HOLD
17
- * </HoldButton>
18
- * ```
19
- */
20
- export declare function HoldButton({ onHoldStart, onHoldEnd, children, className, disabled, }: HoldButtonProps): import("react/jsx-runtime").JSX.Element;
21
- export default HoldButton;
22
- //# sourceMappingURL=HoldButton.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HoldButton.d.ts","sourceRoot":"","sources":["../../../src/components/HoldButton.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EACzB,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAgB,GACjB,EAAE,eAAe,2CAiDjB;AAED,eAAe,UAAU,CAAC"}
@@ -1,38 +0,0 @@
1
- /**
2
- * IframeGameBridge - Parent-side bridge between iframe and Socket.IO.
3
- *
4
- * Renders an iframe loading the external game URL.
5
- * Bridges postMessage ↔ Socket.IO:
6
- * - iframe sends `smore:emit` → bridge relays to `socket.emit()` as-is
7
- * - socket receives events → bridge relays to iframe via `smore:event` as-is
8
- *
9
- * No event translation is performed; events are passed through unchanged.
10
- *
11
- * Used by GameOverlay (host) and GameView (player) when the game type is 'external'.
12
- */
13
- import React from 'react';
14
- import type { Socket } from 'socket.io-client';
15
- interface Player {
16
- playerIndex: number;
17
- name: string;
18
- connected?: boolean;
19
- }
20
- export interface IframeGameBridgeProps {
21
- gameId: string;
22
- url: string;
23
- socket: Socket;
24
- side: 'host' | 'player';
25
- roomCode: string;
26
- players: Player[];
27
- leaderId: string | null;
28
- myIndex?: number;
29
- isLeader?: boolean;
30
- onReady?: () => void;
31
- onLoaded?: () => void;
32
- onGameOver?: (results: any) => void;
33
- style?: React.CSSProperties;
34
- className?: string;
35
- }
36
- export declare const IframeGameBridge: React.FC<IframeGameBridgeProps>;
37
- export {};
38
- //# sourceMappingURL=IframeGameBridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IframeGameBridge.d.ts","sourceRoot":"","sources":["../../../src/components/IframeGameBridge.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAyC,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI/C,UAAU,MAAM;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA+H5D,CAAC"}
@@ -1,19 +0,0 @@
1
- /**
2
- * S'MORE Game SDK - SwipeArea Component
3
- *
4
- * Detects swipe gestures
5
- */
6
- import type { SwipeAreaProps } from '../types';
7
- /**
8
- * SwipeArea - For swipe gesture input
9
- *
10
- * @example
11
- * ```tsx
12
- * <SwipeArea onSwipe={(dir) => send('swipe', { direction: dir })}>
13
- * <div>Swipe here!</div>
14
- * </SwipeArea>
15
- * ```
16
- */
17
- export declare function SwipeArea({ onSwipe, threshold, children, className, }: SwipeAreaProps): import("react/jsx-runtime").JSX.Element;
18
- export default SwipeArea;
19
- //# sourceMappingURL=SwipeArea.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwipeArea.d.ts","sourceRoot":"","sources":["../../../src/components/SwipeArea.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,SAAc,EACd,QAAQ,EACR,SAAS,GACV,EAAE,cAAc,2CAqDhB;AAED,eAAe,SAAS,CAAC"}
@@ -1,19 +0,0 @@
1
- /**
2
- * S'MORE Game SDK - TapButton Component
3
- *
4
- * Optimized touch button with haptic feedback
5
- */
6
- import type { TapButtonProps } from '../types';
7
- /**
8
- * TapButton - Optimized for mobile touch input
9
- *
10
- * @example
11
- * ```tsx
12
- * <TapButton onTap={() => send('tap')}>
13
- * TAP!
14
- * </TapButton>
15
- * ```
16
- */
17
- export declare function TapButton({ onTap, children, className, disabled, }: TapButtonProps): import("react/jsx-runtime").JSX.Element;
18
- export default TapButton;
19
- //# sourceMappingURL=TapButton.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TapButton.d.ts","sourceRoot":"","sources":["../../../src/components/TapButton.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,QAAgB,GACjB,EAAE,cAAc,2CAmDhB;AAED,eAAe,SAAS,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * S'MORE Game SDK - Components
3
- *
4
- * Note: IframeGameBridge has been moved to @smore/client-shared
5
- */
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1,69 +0,0 @@
1
- /**
2
- * RoomProvider - SDK Room Context
3
- *
4
- * Foundation context that all other SDK hooks depend on.
5
- * Provides room state (players, roomCode, leaderId) for both host and player sides.
6
- *
7
- * Also provides a Transport abstraction via TransportContext.
8
- * - HostRoomProvider / PlayerRoomProvider create a DirectTransport from the socket.
9
- * - IframeRoomProvider (external) provides a PostMessageTransport.
10
- *
11
- * Usage:
12
- * - Host: <HostRoomProvider roomCode={...} players={...} leaderId={...} socket={...}>
13
- * - Player: <PlayerRoomProvider roomCode={...} players={...} leaderId={...} myIndex={...} isLeader={...} socket={...} isConnected={...}>
14
- */
15
- import React from 'react';
16
- import type { Player } from '@smoregg/shared';
17
- import type { Socket } from 'socket.io-client';
18
- import type { Transport } from '../transport/types';
19
- declare const TransportContext: React.Context<Transport | null>;
20
- export declare function useTransport(): Transport;
21
- export { TransportContext };
22
- export interface RoomState {
23
- roomCode: string;
24
- players: Player[];
25
- connectedPlayers: Player[];
26
- leaderId: string | null;
27
- }
28
- export interface HostRoomState extends RoomState {
29
- socket: Socket;
30
- }
31
- export interface PlayerRoomState extends RoomState {
32
- myIndex: number;
33
- isLeader: boolean;
34
- socket: Socket;
35
- isConnected: boolean;
36
- }
37
- export interface RoomContextValue {
38
- roomCode: string;
39
- players: Player[];
40
- connectedPlayers: Player[];
41
- leaderId: string | null;
42
- side: 'host' | 'player';
43
- host: HostRoomState | null;
44
- player: PlayerRoomState | null;
45
- }
46
- export declare const RoomContext: React.Context<RoomContextValue | null>;
47
- interface HostRoomProviderProps {
48
- roomCode: string;
49
- players: Player[];
50
- leaderId: string | null;
51
- socket: Socket;
52
- children: React.ReactNode;
53
- }
54
- export declare const HostRoomProvider: React.FC<HostRoomProviderProps>;
55
- interface PlayerRoomProviderProps {
56
- roomCode: string;
57
- players: Player[];
58
- leaderId: string | null;
59
- myIndex: number;
60
- isLeader: boolean;
61
- socket: Socket;
62
- isConnected: boolean;
63
- children: React.ReactNode;
64
- }
65
- export declare const PlayerRoomProvider: React.FC<PlayerRoomProviderProps>;
66
- export declare function useRoom(): RoomContextValue;
67
- export declare function useHostRoom(): HostRoomState;
68
- export declare function usePlayerRoom(): PlayerRoomState;
69
- //# sourceMappingURL=RoomProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RoomProvider.d.ts","sourceRoot":"","sources":["../../../src/context/RoomProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAA6C,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKpD,QAAA,MAAM,gBAAgB,iCAAwC,CAAC;AAE/D,wBAAgB,YAAY,IAAI,SAAS,CAMxC;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAI5B,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CAChC;AAID,eAAO,MAAM,WAAW,wCAA+C,CAAC;AAIxE,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAqC5D,CAAC;AAIF,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAiDhE,CAAC;AAIF,wBAAgB,OAAO,IAAI,gBAAgB,CAM1C;AAED,wBAAgB,WAAW,IAAI,aAAa,CAM3C;AAED,wBAAgB,aAAa,IAAI,eAAe,CAM/C"}
@@ -1,3 +0,0 @@
1
- export { HostRoomProvider, PlayerRoomProvider, useRoom, useHostRoom, usePlayerRoom, useTransport, TransportContext, } from './RoomProvider';
2
- export type { RoomState, HostRoomState, PlayerRoomState, RoomContextValue, } from './RoomProvider';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,OAAO,EACP,WAAW,EACX,aAAa,EACb,YAAY,EACZ,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,SAAS,EACT,aAAa,EACb,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
@@ -1,31 +0,0 @@
1
- /**
2
- * DevSimulator - Local development tool for testing iframe games without a server.
3
- *
4
- * Renders a host iframe and N player iframes side by side.
5
- * Routes postMessage between iframes directly (no Socket.IO needed).
6
- *
7
- * Usage:
8
- * ```tsx
9
- * import { DevSimulator } from '@smoregg/sdk/dev';
10
- *
11
- * function App() {
12
- * return (
13
- * <DevSimulator
14
- * hostUrl="http://localhost:3000/screen.html"
15
- * playerUrl="http://localhost:3000/controller.html"
16
- * playerCount={2}
17
- * />
18
- * );
19
- * }
20
- * ```
21
- */
22
- import React from 'react';
23
- interface DevSimulatorProps {
24
- hostUrl: string;
25
- playerUrl: string;
26
- playerCount?: number;
27
- roomCode?: string;
28
- }
29
- export declare const DevSimulator: React.FC<DevSimulatorProps>;
30
- export {};
31
- //# sourceMappingURL=DevSimulator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DevSimulator.d.ts","sourceRoot":"","sources":["../../../src/dev/DevSimulator.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAIxE,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAQD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAuIpD,CAAC"}
@@ -1,2 +0,0 @@
1
- export { DevSimulator } from './DevSimulator';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dev/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,7 +0,0 @@
1
- export { useGameHost } from './useGameHost';
2
- export type { UseGameHostConfig, UseGameHostReturn } from './useGameHost';
3
- export { useGamePlayer } from './useGamePlayer';
4
- export type { UseGamePlayerConfig, UseGamePlayerReturn } from './useGamePlayer';
5
- export { useExternalGames } from './useExternalGames';
6
- export type { ExternalGameMetadata, UseExternalGamesConfig } from './useExternalGames';
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,32 +0,0 @@
1
- /**
2
- * useExternalGames - Fetches external games from the server API.
3
- *
4
- * Returns a list of GameMetadata-compatible objects for external (iframe) games.
5
- * Consumers merge this with their local GAMES array.
6
- */
7
- export interface ExternalGameMetadata {
8
- id: string;
9
- title: string;
10
- description: string;
11
- minPlayers: number;
12
- maxPlayers: number;
13
- thumbnail: string;
14
- categories: string[];
15
- type: 'external';
16
- hostUrl: string | null;
17
- playerUrl: string | null;
18
- available: boolean;
19
- rating: number;
20
- heroRequired: boolean;
21
- }
22
- export interface UseExternalGamesConfig {
23
- serverUrl: string;
24
- enabled?: boolean;
25
- }
26
- export declare function useExternalGames(config: UseExternalGamesConfig): {
27
- games: ExternalGameMetadata[];
28
- loading: boolean;
29
- error: string | null;
30
- refresh: () => void;
31
- };
32
- //# sourceMappingURL=useExternalGames.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useExternalGames.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExternalGames.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG;IAChE,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAiDA"}
@@ -1,67 +0,0 @@
1
- import type { Player } from '../types';
2
- export interface UseGameHostConfig<T extends Record<string, any> = Record<string, any>> {
3
- /** Called when the host is ready and connected. */
4
- onReady?: () => void;
5
- /** Called when a player joins the room. */
6
- onPlayerJoin?: (playerIndex: number) => void;
7
- /** Called when a player leaves the room. */
8
- onPlayerLeave?: (playerIndex: number) => void;
9
- /**
10
- * Event listeners for player inputs.
11
- * Keys are event names (without prefix), values are handler functions.
12
- * Handler receives (playerIndex, data) where playerIndex identifies the player (0, 1, 2, ...).
13
- */
14
- listeners?: {
15
- [K in keyof T]?: (playerIndex: number, data: T[K]) => void;
16
- };
17
- /**
18
- * Optional connection monitoring (AirConsole pattern).
19
- * When enabled, automatically pauses/resumes game on connection issues.
20
- */
21
- connectionMonitor?: {
22
- /** Enable connection monitoring */
23
- enabled: boolean;
24
- /** Called when connection becomes unstable */
25
- onPause: () => void;
26
- /** Called after connection restores and countdown completes */
27
- onResume: () => void;
28
- /** Called during resume countdown with seconds remaining */
29
- onCountdown?: (secondsLeft: number) => void;
30
- /** Latency threshold to trigger pause (ms), default 2000 */
31
- latencyThreshold?: number;
32
- /** Resume countdown duration (ms), default 3000 */
33
- resumeCountdown?: number;
34
- };
35
- /** Called when any device's custom state changes (AirConsole pattern) */
36
- onCustomStateChange?: (playerIndex: number, state: Record<string, any>) => void;
37
- }
38
- export interface UseGameHostReturn {
39
- /** List of all players in the room. */
40
- players: Player[];
41
- /** The player index of the room leader (-1 if no leader). */
42
- leaderIndex: number;
43
- /** The room code. */
44
- roomCode: string;
45
- /**
46
- * Emit an event to all players.
47
- * Event name must not contain colons.
48
- */
49
- emit: (event: string, data?: any) => void;
50
- /**
51
- * Send an event to a specific player.
52
- * Event name must not contain colons.
53
- */
54
- sendToPlayer: (playerIndex: number, event: string, data?: any) => void;
55
- /** Signal game over with optional results. */
56
- gameOver: (results?: any) => void;
57
- /** Return all players to lobby. */
58
- returnToLobby: () => void;
59
- /** Set custom device state (AirConsole pattern) - merges with existing state */
60
- setCustomState: (state: Record<string, any>) => void;
61
- /** Whether game is currently paused due to connection issues (only if connectionMonitor enabled) */
62
- isPaused: boolean;
63
- /** Current network latency in ms (only if connectionMonitor enabled) */
64
- latency: number;
65
- }
66
- export declare function useGameHost<T extends Record<string, any> = Record<string, any>>(config?: UseGameHostConfig<T>): UseGameHostReturn;
67
- //# sourceMappingURL=useGameHost.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useGameHost.d.ts","sourceRoot":"","sources":["../../../src/hooks/useGameHost.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAkDvC,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACpF,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C,4CAA4C;IAC5C,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAE9C;;;;OAIG;IACH,SAAS,CAAC,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;KAAE,CAAC;IAE3E;;;OAGG;IACH,iBAAiB,CAAC,EAAE;QAClB,mCAAmC;QACnC,OAAO,EAAE,OAAO,CAAC;QACjB,8CAA8C;QAC9C,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,+DAA+D;QAC/D,QAAQ,EAAE,MAAM,IAAI,CAAC;QACrB,4DAA4D;QAC5D,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5C,4DAA4D;QAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,mDAAmD;QACnD,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IAEF,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;CACjF;AAED,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IAEpB,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAE1C;;;OAGG;IACH,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAEvE,8CAA8C;IAC9C,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAElC,mCAAmC;IACnC,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,gFAAgF;IAChF,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAErD,oGAAoG;IACpG,QAAQ,EAAE,OAAO,CAAC;IAElB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7E,MAAM,GAAE,iBAAiB,CAAC,CAAC,CAAM,GAChC,iBAAiB,CA+OnB"}
@@ -1,55 +0,0 @@
1
- import type { Player } from '@smoregg/shared';
2
- export interface UseGamePlayerConfig<T = Record<string, any>> {
3
- /** Called when smore:ready is received */
4
- onReady?: () => void;
5
- /** Called when a player joins */
6
- onPlayerJoin?: (player: Player) => void;
7
- /** Called when a player leaves */
8
- onPlayerLeave?: (playerIndex: number) => void;
9
- /** Custom event listeners (event name -> handler) */
10
- listeners?: {
11
- [K in keyof T]?: (data: T[K]) => void;
12
- };
13
- /** Called when any device's custom state changes (AirConsole pattern) */
14
- onCustomStateChange?: (playerIndex: number, state: Record<string, any>) => void;
15
- /**
16
- * Optional connection monitoring (AirConsole pattern).
17
- * When enabled, automatically pauses/resumes game on connection issues.
18
- */
19
- connectionMonitor?: {
20
- /** Enable connection monitoring */
21
- enabled: boolean;
22
- /** Called when connection becomes unstable */
23
- onPause: () => void;
24
- /** Called after connection restores and countdown completes */
25
- onResume: () => void;
26
- /** Called during resume countdown with seconds remaining */
27
- onCountdown?: (secondsLeft: number) => void;
28
- /** Latency threshold to trigger pause (ms), default 2000 */
29
- latencyThreshold?: number;
30
- /** Resume countdown duration (ms), default 3000 */
31
- resumeCountdown?: number;
32
- };
33
- }
34
- export interface UseGamePlayerReturn {
35
- /** All players in the room */
36
- players: Player[];
37
- /** Leader player's session ID */
38
- leaderId: string | null;
39
- /** Room code */
40
- roomCode: string;
41
- /** My player index (0, 1, 2, ...) */
42
- myIndex: number;
43
- /** Am I the leader? */
44
- isLeader: boolean;
45
- /** Emit event to host (event name must not contain ':') */
46
- emit: (event: string, data?: any) => void;
47
- /** Set custom device state (AirConsole pattern) - merges with existing state */
48
- setCustomState: (state: Record<string, any>) => void;
49
- /** Whether game is currently paused due to connection issues (only if connectionMonitor enabled) */
50
- isPaused: boolean;
51
- /** Current network latency in ms (only if connectionMonitor enabled) */
52
- latency: number;
53
- }
54
- export declare function useGamePlayer<T = Record<string, any>>(config?: UseGamePlayerConfig<T>): UseGamePlayerReturn;
55
- //# sourceMappingURL=useGamePlayer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useGamePlayer.d.ts","sourceRoot":"","sources":["../../../src/hooks/useGamePlayer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA0B9C,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC1D,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,iCAAiC;IACjC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,kCAAkC;IAClC,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,qDAAqD;IACrD,SAAS,CAAC,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;KAAE,CAAC;IACtD,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAChF;;;OAGG;IACH,iBAAiB,CAAC,EAAE;QAClB,mCAAmC;QACnC,OAAO,EAAE,OAAO,CAAC;QACjB,8CAA8C;QAC9C,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,+DAA+D;QAC/D,QAAQ,EAAE,MAAM,IAAI,CAAC;QACrB,4DAA4D;QAC5D,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5C,4DAA4D;QAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,mDAAmD;QACnD,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1C,gFAAgF;IAChF,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACrD,oGAAoG;IACpG,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,wBAAgB,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnD,MAAM,GAAE,mBAAmB,CAAC,CAAC,CAAM,GAClC,mBAAmB,CAkJrB"}
@@ -1,31 +0,0 @@
1
- /**
2
- * IframeRoomProvider - Entry point for external (iframe-hosted) games.
3
- *
4
- * Usage inside an external game's iframe:
5
- * ```tsx
6
- * import { IframeRoomProvider } from '@smoregg/sdk/iframe';
7
- * import { useGameHost } from '@smoregg/sdk/iframe';
8
- *
9
- * function App() {
10
- * return (
11
- * <IframeRoomProvider>
12
- * <MyGame />
13
- * </IframeRoomProvider>
14
- * );
15
- * }
16
- * ```
17
- *
18
- * Lifecycle:
19
- * 1. Mount → sends `smore:ready` to parent
20
- * 2. Receives `smore:init` from parent with room state
21
- * 3. Creates PostMessageTransport
22
- * 4. Renders children with RoomContext + TransportContext
23
- */
24
- import React from 'react';
25
- interface IframeRoomProviderProps {
26
- children: React.ReactNode;
27
- parentOrigin?: string;
28
- }
29
- export declare const IframeRoomProvider: React.FC<IframeRoomProviderProps>;
30
- export {};
31
- //# sourceMappingURL=IframeRoomProvider.d.ts.map