@littlepartytime/dev-kit 1.0.0 → 1.1.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 (46) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +4 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/dev.d.ts +6 -0
  5. package/dist/commands/dev.d.ts.map +1 -0
  6. package/dist/commands/dev.js +59 -0
  7. package/dist/commands/dev.js.map +1 -0
  8. package/dist/server/engine-loader.d.ts +11 -0
  9. package/dist/server/engine-loader.d.ts.map +1 -0
  10. package/dist/server/engine-loader.js +45 -0
  11. package/dist/server/engine-loader.js.map +1 -0
  12. package/dist/server/game-room.d.ts +25 -0
  13. package/dist/server/game-room.d.ts.map +1 -0
  14. package/dist/server/game-room.js +78 -0
  15. package/dist/server/game-room.js.map +1 -0
  16. package/dist/server/socket-server.d.ts +16 -0
  17. package/dist/server/socket-server.d.ts.map +1 -0
  18. package/dist/server/socket-server.js +167 -0
  19. package/dist/server/socket-server.js.map +1 -0
  20. package/dist/webapp/App.d.ts +3 -0
  21. package/dist/webapp/App.d.ts.map +1 -0
  22. package/dist/webapp/App.js +70 -0
  23. package/dist/webapp/App.js.map +1 -0
  24. package/dist/webapp/App.tsx +40 -0
  25. package/dist/webapp/index.html +16 -0
  26. package/dist/webapp/main.d.ts +2 -0
  27. package/dist/webapp/main.d.ts.map +1 -0
  28. package/dist/webapp/main.js +12 -0
  29. package/dist/webapp/main.js.map +1 -0
  30. package/dist/webapp/main.tsx +9 -0
  31. package/dist/webapp/pages/Debug.d.ts +3 -0
  32. package/dist/webapp/pages/Debug.d.ts.map +1 -0
  33. package/dist/webapp/pages/Debug.js +69 -0
  34. package/dist/webapp/pages/Debug.js.map +1 -0
  35. package/dist/webapp/pages/Debug.tsx +40 -0
  36. package/dist/webapp/pages/Play.d.ts +3 -0
  37. package/dist/webapp/pages/Play.d.ts.map +1 -0
  38. package/dist/webapp/pages/Play.js +129 -0
  39. package/dist/webapp/pages/Play.js.map +1 -0
  40. package/dist/webapp/pages/Play.tsx +137 -0
  41. package/dist/webapp/pages/Preview.d.ts +3 -0
  42. package/dist/webapp/pages/Preview.d.ts.map +1 -0
  43. package/dist/webapp/pages/Preview.js +118 -0
  44. package/dist/webapp/pages/Preview.js.map +1 -0
  45. package/dist/webapp/pages/Preview.tsx +112 -0
  46. package/package.json +13 -3
@@ -0,0 +1,112 @@
1
+ import React, { useState, useEffect, useCallback } from 'react';
2
+
3
+ export default function Preview() {
4
+ const [state, setState] = useState<any>({ phase: 'playing', players: [], data: {} });
5
+ const [stateJson, setStateJson] = useState('');
6
+ const [playerIndex, setPlayerIndex] = useState(0);
7
+ const [actions, setActions] = useState<any[]>([]);
8
+ const [GameRenderer, setGameRenderer] = useState<React.ComponentType<any> | null>(null);
9
+
10
+ // Load renderer dynamically
11
+ useEffect(() => {
12
+ import('/src/renderer.tsx').then((mod) => {
13
+ setGameRenderer(() => mod.default || mod.Renderer);
14
+ }).catch((err) => {
15
+ console.error('Failed to load renderer:', err);
16
+ });
17
+ }, []);
18
+
19
+ // Mock players
20
+ const mockPlayers = [
21
+ { id: 'player-1', nickname: 'Alice', avatarUrl: null, isHost: true },
22
+ { id: 'player-2', nickname: 'Bob', avatarUrl: null, isHost: false },
23
+ { id: 'player-3', nickname: 'Carol', avatarUrl: null, isHost: false },
24
+ ];
25
+
26
+ // Mock platform
27
+ const platform = {
28
+ getPlayers: () => mockPlayers,
29
+ getLocalPlayer: () => mockPlayers[playerIndex],
30
+ send: (action: any) => {
31
+ setActions((prev) => [...prev, { time: new Date().toISOString(), player: mockPlayers[playerIndex].nickname, action }]);
32
+ },
33
+ on: () => {},
34
+ off: () => {},
35
+ reportResult: () => {},
36
+ };
37
+
38
+ const updateState = useCallback(() => {
39
+ try {
40
+ const parsed = JSON.parse(stateJson);
41
+ setState(parsed);
42
+ } catch (e) {
43
+ // ignore
44
+ }
45
+ }, [stateJson]);
46
+
47
+ useEffect(() => {
48
+ setStateJson(JSON.stringify(state, null, 2));
49
+ }, []);
50
+
51
+ return (
52
+ <div className="flex gap-4 h-[calc(100vh-80px)]">
53
+ {/* Renderer */}
54
+ <div className="flex-1 bg-zinc-900 rounded-lg overflow-auto">
55
+ {GameRenderer ? (
56
+ <GameRenderer platform={platform} state={state} />
57
+ ) : (
58
+ <div className="p-4 text-zinc-500">Loading renderer...</div>
59
+ )}
60
+ </div>
61
+
62
+ {/* Control Panel */}
63
+ <div className="w-80 flex flex-col gap-4">
64
+ {/* Player Switcher */}
65
+ <div className="bg-zinc-900 rounded-lg p-3">
66
+ <h3 className="text-sm font-bold text-zinc-400 mb-2">Current Player</h3>
67
+ <select
68
+ value={playerIndex}
69
+ onChange={(e) => setPlayerIndex(Number(e.target.value))}
70
+ className="w-full bg-zinc-800 border border-zinc-700 rounded px-2 py-1"
71
+ >
72
+ {mockPlayers.map((p, i) => (
73
+ <option key={p.id} value={i}>{p.nickname}</option>
74
+ ))}
75
+ </select>
76
+ </div>
77
+
78
+ {/* State Editor */}
79
+ <div className="bg-zinc-900 rounded-lg p-3 flex-1 flex flex-col">
80
+ <h3 className="text-sm font-bold text-zinc-400 mb-2">Game State</h3>
81
+ <textarea
82
+ value={stateJson}
83
+ onChange={(e) => setStateJson(e.target.value)}
84
+ className="flex-1 bg-zinc-800 border border-zinc-700 rounded p-2 font-mono text-xs resize-none"
85
+ />
86
+ <button
87
+ onClick={updateState}
88
+ className="mt-2 bg-amber-600 hover:bg-amber-500 text-white px-3 py-1 rounded text-sm"
89
+ >
90
+ Apply State
91
+ </button>
92
+ </div>
93
+
94
+ {/* Action Log */}
95
+ <div className="bg-zinc-900 rounded-lg p-3 h-48 overflow-auto">
96
+ <h3 className="text-sm font-bold text-zinc-400 mb-2">Action Log</h3>
97
+ {actions.length === 0 ? (
98
+ <p className="text-zinc-500 text-xs">No actions yet</p>
99
+ ) : (
100
+ <div className="space-y-1">
101
+ {actions.map((a, i) => (
102
+ <div key={i} className="text-xs font-mono bg-zinc-800 rounded p-1">
103
+ <span className="text-amber-400">{a.player}</span>: {JSON.stringify(a.action)}
104
+ </div>
105
+ ))}
106
+ </div>
107
+ )}
108
+ </div>
109
+ </div>
110
+ </div>
111
+ );
112
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@littlepartytime/dev-kit",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Development toolkit CLI for Little Party Time game developers",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -8,7 +8,7 @@
8
8
  "lpt-dev-kit": "./dist/cli.js"
9
9
  },
10
10
  "scripts": {
11
- "build": "tsc",
11
+ "build": "tsc && cp -r src/webapp dist/",
12
12
  "dev": "tsc --watch",
13
13
  "test": "vitest run",
14
14
  "test:watch": "vitest"
@@ -22,11 +22,21 @@
22
22
  "directory": "packages/dev-kit"
23
23
  },
24
24
  "dependencies": {
25
- "archiver": "^7"
25
+ "@vitejs/plugin-react": "^5",
26
+ "archiver": "^7",
27
+ "chokidar": "^4",
28
+ "express": "^5",
29
+ "react": "^19",
30
+ "react-dom": "^19",
31
+ "socket.io": "^4",
32
+ "vite": "^7"
26
33
  },
27
34
  "devDependencies": {
28
35
  "@types/archiver": "^6",
36
+ "@types/express": "^5",
29
37
  "@types/node": "^22",
38
+ "@types/react": "^19",
39
+ "@types/react-dom": "^19",
30
40
  "typescript": "^5",
31
41
  "vitest": "^3"
32
42
  }