@littlepartytime/dev-kit 1.2.0 → 1.2.1
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/dist/cli.js +0 -0
- package/package.json +2 -2
- package/dist/webapp/App.d.ts +0 -3
- package/dist/webapp/App.d.ts.map +0 -1
- package/dist/webapp/App.js +0 -70
- package/dist/webapp/App.js.map +0 -1
- package/dist/webapp/main.d.ts +0 -2
- package/dist/webapp/main.d.ts.map +0 -1
- package/dist/webapp/main.js +0 -12
- package/dist/webapp/main.js.map +0 -1
- package/dist/webapp/pages/Debug.d.ts +0 -3
- package/dist/webapp/pages/Debug.d.ts.map +0 -1
- package/dist/webapp/pages/Debug.js +0 -69
- package/dist/webapp/pages/Debug.js.map +0 -1
- package/dist/webapp/pages/Play.d.ts +0 -3
- package/dist/webapp/pages/Play.d.ts.map +0 -1
- package/dist/webapp/pages/Play.js +0 -129
- package/dist/webapp/pages/Play.js.map +0 -1
- package/dist/webapp/pages/Preview.d.ts +0 -3
- package/dist/webapp/pages/Preview.d.ts.map +0 -1
- package/dist/webapp/pages/Preview.js +0 -118
- package/dist/webapp/pages/Preview.js.map +0 -1
package/dist/cli.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@littlepartytime/dev-kit",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.1",
|
|
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",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"lpt-dev-kit": "./dist/cli.js"
|
|
19
19
|
},
|
|
20
20
|
"scripts": {
|
|
21
|
-
"build": "tsc && cp -r src/webapp dist/",
|
|
21
|
+
"build": "rm -rf dist && tsc && cp -r src/webapp dist/",
|
|
22
22
|
"dev": "tsc --watch",
|
|
23
23
|
"test": "vitest run",
|
|
24
24
|
"test:watch": "vitest"
|
package/dist/webapp/App.d.ts
DELETED
package/dist/webapp/App.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/webapp/App.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAOxC,MAAM,CAAC,OAAO,UAAU,GAAG,sBAgC1B"}
|
package/dist/webapp/App.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.default = App;
|
|
40
|
-
const react_1 = __importStar(require("react"));
|
|
41
|
-
const Preview_1 = __importDefault(require("./pages/Preview"));
|
|
42
|
-
const Play_1 = __importDefault(require("./pages/Play"));
|
|
43
|
-
const Debug_1 = __importDefault(require("./pages/Debug"));
|
|
44
|
-
function App() {
|
|
45
|
-
const [page, setPage] = (0, react_1.useState)(() => {
|
|
46
|
-
const path = window.location.pathname;
|
|
47
|
-
if (path.includes('play'))
|
|
48
|
-
return 'play';
|
|
49
|
-
if (path.includes('debug'))
|
|
50
|
-
return 'debug';
|
|
51
|
-
return 'preview';
|
|
52
|
-
});
|
|
53
|
-
return (<div className="min-h-screen flex flex-col">
|
|
54
|
-
{/* Nav */}
|
|
55
|
-
<nav className="bg-zinc-900 border-b border-zinc-800 px-4 py-2 flex gap-4">
|
|
56
|
-
<span className="text-amber-500 font-bold mr-4">LPT Dev Kit</span>
|
|
57
|
-
{['preview', 'play', 'debug'].map((p) => (<button key={p} onClick={() => { setPage(p); history.pushState(null, '', `/${p}`); }} className={`px-3 py-1 rounded ${page === p ? 'bg-amber-600 text-white' : 'text-zinc-400 hover:text-white'}`}>
|
|
58
|
-
{p.charAt(0).toUpperCase() + p.slice(1)}
|
|
59
|
-
</button>))}
|
|
60
|
-
</nav>
|
|
61
|
-
|
|
62
|
-
{/* Content */}
|
|
63
|
-
<main className="flex-1 p-4">
|
|
64
|
-
{page === 'preview' && <Preview_1.default />}
|
|
65
|
-
{page === 'play' && <Play_1.default />}
|
|
66
|
-
{page === 'debug' && <Debug_1.default />}
|
|
67
|
-
</main>
|
|
68
|
-
</div>);
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=App.js.map
|
package/dist/webapp/App.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/webapp/App.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,sBAgCC;AAvCD,+CAAwC;AACxC,8DAAsC;AACtC,wDAAgC;AAChC,0DAAkC;AAIlC,SAAwB,GAAG;IACzB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAO,GAAG,EAAE;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,CAAC,GAAG,CAAC,SAAS,CAAC,4BAA4B,CACzC;MAAA,CAAC,SAAS,CACV;MAAA,CAAC,GAAG,CAAC,SAAS,CAAC,2DAA2D,CACxE;QAAA,CAAC,IAAI,CAAC,SAAS,CAAC,+BAA+B,CAAC,WAAW,EAAE,IAAI,CACjE;QAAA,CAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnD,CAAC,MAAM,CACL,GAAG,CAAC,CAAC,CAAC,CAAC,CACP,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACrE,SAAS,CAAC,CAAC,qBAAqB,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,gCAAgC,EAAE,CAAC,CAE5G;YAAA,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACzC;UAAA,EAAE,MAAM,CAAC,CACV,CAAC,CACJ;MAAA,EAAE,GAAG,CAEL;;MAAA,CAAC,aAAa,CACd;MAAA,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAC1B;QAAA,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,iBAAO,CAAC,AAAD,EAAG,CAClC;QAAA,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,cAAI,CAAC,AAAD,EAAG,CAC5B;QAAA,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,eAAK,CAAC,AAAD,EAAG,CAChC;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
|
package/dist/webapp/main.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/webapp/main.tsx"],"names":[],"mappings":""}
|
package/dist/webapp/main.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const react_1 = __importDefault(require("react"));
|
|
7
|
-
const client_1 = __importDefault(require("react-dom/client"));
|
|
8
|
-
const App_1 = __importDefault(require("./App"));
|
|
9
|
-
client_1.default.createRoot(document.getElementById('root')).render(<react_1.default.StrictMode>
|
|
10
|
-
<App_1.default />
|
|
11
|
-
</react_1.default.StrictMode>);
|
|
12
|
-
//# sourceMappingURL=main.js.map
|
package/dist/webapp/main.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/webapp/main.tsx"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,8DAAwC;AACxC,gDAAwB;AAExB,gBAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAE,CAAC,CAAC,MAAM,CAC1D,CAAC,eAAK,CAAC,UAAU,CACf;IAAA,CAAC,aAAG,CAAC,AAAD,EACN;EAAA,EAAE,eAAK,CAAC,UAAU,CAAC,CACpB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Debug.d.ts","sourceRoot":"","sources":["../../../src/webapp/pages/Debug.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,MAAM,CAAC,OAAO,UAAU,KAAK,sBAoC5B"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.default = Debug;
|
|
37
|
-
const react_1 = __importStar(require("react"));
|
|
38
|
-
const socket_io_client_1 = require("socket.io-client");
|
|
39
|
-
function Debug() {
|
|
40
|
-
const [socket, setSocket] = (0, react_1.useState)(null);
|
|
41
|
-
const [room, setRoom] = (0, react_1.useState)({ players: [], phase: 'lobby' });
|
|
42
|
-
const [fullState, setFullState] = (0, react_1.useState)(null);
|
|
43
|
-
(0, react_1.useEffect)(() => {
|
|
44
|
-
const sock = (0, socket_io_client_1.io)('http://localhost:4001', { query: { nickname: '__debug__' } });
|
|
45
|
-
sock.on('room:update', setRoom);
|
|
46
|
-
sock.on('game:state', setFullState);
|
|
47
|
-
sock.on('debug:state', setFullState);
|
|
48
|
-
setSocket(sock);
|
|
49
|
-
return () => { sock.disconnect(); };
|
|
50
|
-
}, []);
|
|
51
|
-
return (<div className="grid grid-cols-2 gap-4 h-[calc(100vh-80px)]">
|
|
52
|
-
{/* Room State */}
|
|
53
|
-
<div className="bg-zinc-900 rounded-lg p-4 overflow-auto">
|
|
54
|
-
<h2 className="text-lg font-bold mb-4 text-amber-400">Room State</h2>
|
|
55
|
-
<pre className="text-xs font-mono whitespace-pre-wrap">
|
|
56
|
-
{JSON.stringify(room, null, 2)}
|
|
57
|
-
</pre>
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
{/* Game State */}
|
|
61
|
-
<div className="bg-zinc-900 rounded-lg p-4 overflow-auto">
|
|
62
|
-
<h2 className="text-lg font-bold mb-4 text-amber-400">Full Game State</h2>
|
|
63
|
-
<pre className="text-xs font-mono whitespace-pre-wrap">
|
|
64
|
-
{fullState ? JSON.stringify(fullState, null, 2) : 'No game in progress'}
|
|
65
|
-
</pre>
|
|
66
|
-
</div>
|
|
67
|
-
</div>);
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=Debug.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Debug.js","sourceRoot":"","sources":["../../../src/webapp/pages/Debug.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,wBAoCC;AAvCD,+CAAmD;AACnD,uDAA8C;AAE9C,SAAwB,KAAK;IAC3B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAM,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACvE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAM,IAAI,CAAC,CAAC;IAEtD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,IAAA,qBAAE,EAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAE/E,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAErC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEhB,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,CAAC,GAAG,CAAC,SAAS,CAAC,6CAA6C,CAC1D;MAAA,CAAC,gBAAgB,CACjB;MAAA,CAAC,GAAG,CAAC,SAAS,CAAC,0CAA0C,CACvD;QAAA,CAAC,EAAE,CAAC,SAAS,CAAC,uCAAuC,CAAC,UAAU,EAAE,EAAE,CACpE;QAAA,CAAC,GAAG,CAAC,SAAS,CAAC,uCAAuC,CACpD;UAAA,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAChC;QAAA,EAAE,GAAG,CACP;MAAA,EAAE,GAAG,CAEL;;MAAA,CAAC,gBAAgB,CACjB;MAAA,CAAC,GAAG,CAAC,SAAS,CAAC,0CAA0C,CACvD;QAAA,CAAC,EAAE,CAAC,SAAS,CAAC,uCAAuC,CAAC,eAAe,EAAE,EAAE,CACzE;QAAA,CAAC,GAAG,CAAC,SAAS,CAAC,uCAAuC,CACpD;UAAA,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CACzE;QAAA,EAAE,GAAG,CACP;MAAA,EAAE,GAAG,CACP;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Play.d.ts","sourceRoot":"","sources":["../../../src/webapp/pages/Play.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAGhE,MAAM,CAAC,OAAO,UAAU,IAAI,sBAqI3B"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.default = Play;
|
|
37
|
-
const react_1 = __importStar(require("react"));
|
|
38
|
-
const socket_io_client_1 = require("socket.io-client");
|
|
39
|
-
function Play() {
|
|
40
|
-
const [socket, setSocket] = (0, react_1.useState)(null);
|
|
41
|
-
const [nickname, setNickname] = (0, react_1.useState)('');
|
|
42
|
-
const [joined, setJoined] = (0, react_1.useState)(false);
|
|
43
|
-
const [room, setRoom] = (0, react_1.useState)({ players: [], phase: 'lobby' });
|
|
44
|
-
const [gameState, setGameState] = (0, react_1.useState)(null);
|
|
45
|
-
const [myId, setMyId] = (0, react_1.useState)(null);
|
|
46
|
-
const [GameRenderer, setGameRenderer] = (0, react_1.useState)(null);
|
|
47
|
-
// Load renderer
|
|
48
|
-
(0, react_1.useEffect)(() => {
|
|
49
|
-
Promise.resolve().then(() => __importStar(require('/src/renderer.tsx'))).then((mod) => {
|
|
50
|
-
setGameRenderer(() => mod.default || mod.Renderer);
|
|
51
|
-
}).catch(console.error);
|
|
52
|
-
}, []);
|
|
53
|
-
const join = (0, react_1.useCallback)(() => {
|
|
54
|
-
if (!nickname.trim())
|
|
55
|
-
return;
|
|
56
|
-
const sock = (0, socket_io_client_1.io)('http://localhost:4001', { query: { nickname } });
|
|
57
|
-
sock.on('connect', () => {
|
|
58
|
-
setMyId(sock.id);
|
|
59
|
-
setJoined(true);
|
|
60
|
-
});
|
|
61
|
-
sock.on('room:update', setRoom);
|
|
62
|
-
sock.on('game:state', setGameState);
|
|
63
|
-
sock.on('game:result', (result) => {
|
|
64
|
-
console.log('Game result:', result);
|
|
65
|
-
});
|
|
66
|
-
setSocket(sock);
|
|
67
|
-
}, [nickname]);
|
|
68
|
-
const me = room.players.find((p) => socket && p.socketId === socket.id) || room.players.find((p) => p.nickname === nickname);
|
|
69
|
-
const isHost = me?.isHost;
|
|
70
|
-
const isReady = me?.ready;
|
|
71
|
-
const platform = socket ? {
|
|
72
|
-
getPlayers: () => room.players.map((p) => ({ id: p.id, nickname: p.nickname, avatarUrl: null, isHost: p.isHost })),
|
|
73
|
-
getLocalPlayer: () => me ? { id: me.id, nickname: me.nickname, avatarUrl: null, isHost: me.isHost } : { id: '', nickname: '', avatarUrl: null, isHost: false },
|
|
74
|
-
send: (action) => socket.emit('game:action', action),
|
|
75
|
-
on: (event, handler) => {
|
|
76
|
-
if (event === 'stateUpdate')
|
|
77
|
-
socket.on('game:state', handler);
|
|
78
|
-
},
|
|
79
|
-
off: (event, handler) => {
|
|
80
|
-
if (event === 'stateUpdate')
|
|
81
|
-
socket.off('game:state', handler);
|
|
82
|
-
},
|
|
83
|
-
reportResult: () => { },
|
|
84
|
-
} : null;
|
|
85
|
-
if (!joined) {
|
|
86
|
-
return (<div className="flex items-center justify-center h-[60vh]">
|
|
87
|
-
<div className="bg-zinc-900 rounded-lg p-6 w-80">
|
|
88
|
-
<h2 className="text-xl font-bold mb-4">Join Game</h2>
|
|
89
|
-
<input type="text" placeholder="Your nickname" value={nickname} onChange={(e) => setNickname(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && join()} className="w-full bg-zinc-800 border border-zinc-700 rounded px-3 py-2 mb-4"/>
|
|
90
|
-
<button onClick={join} className="w-full bg-amber-600 hover:bg-amber-500 text-white py-2 rounded font-semibold">
|
|
91
|
-
Join
|
|
92
|
-
</button>
|
|
93
|
-
</div>
|
|
94
|
-
</div>);
|
|
95
|
-
}
|
|
96
|
-
if (room.phase === 'lobby' || room.phase === 'ready') {
|
|
97
|
-
return (<div className="max-w-md mx-auto mt-8">
|
|
98
|
-
<div className="bg-zinc-900 rounded-lg p-6">
|
|
99
|
-
<h2 className="text-xl font-bold mb-4">Lobby</h2>
|
|
100
|
-
<div className="space-y-2 mb-6">
|
|
101
|
-
{room.players.map((p) => (<div key={p.id} className="flex items-center justify-between bg-zinc-800 rounded px-3 py-2">
|
|
102
|
-
<span>{p.nickname} {p.isHost && '(Host)'}</span>
|
|
103
|
-
<span className={p.ready ? 'text-green-400' : 'text-zinc-500'}>
|
|
104
|
-
{p.ready ? 'Ready' : 'Not Ready'}
|
|
105
|
-
</span>
|
|
106
|
-
</div>))}
|
|
107
|
-
</div>
|
|
108
|
-
<div className="flex gap-2">
|
|
109
|
-
<button onClick={() => socket?.emit('player:ready', !isReady)} className={`flex-1 py-2 rounded font-semibold ${isReady ? 'bg-zinc-700 text-zinc-300' : 'bg-green-600 text-white'}`}>
|
|
110
|
-
{isReady ? 'Cancel Ready' : 'Ready'}
|
|
111
|
-
</button>
|
|
112
|
-
{isHost && (<button onClick={() => socket?.emit('game:start')} disabled={!room.players.every((p) => p.ready) || room.players.length < 2} className="flex-1 bg-amber-600 hover:bg-amber-500 disabled:opacity-50 text-white py-2 rounded font-semibold">
|
|
113
|
-
Start Game
|
|
114
|
-
</button>)}
|
|
115
|
-
</div>
|
|
116
|
-
</div>
|
|
117
|
-
</div>);
|
|
118
|
-
}
|
|
119
|
-
// Playing or ended
|
|
120
|
-
return (<div className="h-[calc(100vh-80px)]">
|
|
121
|
-
{GameRenderer && platform && gameState ? (<GameRenderer platform={platform} state={gameState}/>) : (<div className="p-4 text-zinc-500">Loading game...</div>)}
|
|
122
|
-
{room.phase === 'ended' && isHost && (<div className="fixed bottom-4 left-1/2 -translate-x-1/2">
|
|
123
|
-
<button onClick={() => socket?.emit('game:playAgain')} className="bg-amber-600 hover:bg-amber-500 text-white px-6 py-2 rounded-full font-semibold">
|
|
124
|
-
Play Again
|
|
125
|
-
</button>
|
|
126
|
-
</div>)}
|
|
127
|
-
</div>);
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=Play.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Play.js","sourceRoot":"","sources":["../../../src/webapp/pages/Play.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Preview.d.ts","sourceRoot":"","sources":["../../../src/webapp/pages/Preview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAEhE,MAAM,CAAC,OAAO,UAAU,OAAO,sBA6G9B"}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.default = Preview;
|
|
37
|
-
const react_1 = __importStar(require("react"));
|
|
38
|
-
function Preview() {
|
|
39
|
-
const [state, setState] = (0, react_1.useState)({ phase: 'playing', players: [], data: {} });
|
|
40
|
-
const [stateJson, setStateJson] = (0, react_1.useState)('');
|
|
41
|
-
const [playerIndex, setPlayerIndex] = (0, react_1.useState)(0);
|
|
42
|
-
const [actions, setActions] = (0, react_1.useState)([]);
|
|
43
|
-
const [GameRenderer, setGameRenderer] = (0, react_1.useState)(null);
|
|
44
|
-
// Load renderer dynamically
|
|
45
|
-
(0, react_1.useEffect)(() => {
|
|
46
|
-
Promise.resolve().then(() => __importStar(require('/src/renderer.tsx'))).then((mod) => {
|
|
47
|
-
setGameRenderer(() => mod.default || mod.Renderer);
|
|
48
|
-
}).catch((err) => {
|
|
49
|
-
console.error('Failed to load renderer:', err);
|
|
50
|
-
});
|
|
51
|
-
}, []);
|
|
52
|
-
// Mock players
|
|
53
|
-
const mockPlayers = [
|
|
54
|
-
{ id: 'player-1', nickname: 'Alice', avatarUrl: null, isHost: true },
|
|
55
|
-
{ id: 'player-2', nickname: 'Bob', avatarUrl: null, isHost: false },
|
|
56
|
-
{ id: 'player-3', nickname: 'Carol', avatarUrl: null, isHost: false },
|
|
57
|
-
];
|
|
58
|
-
// Mock platform
|
|
59
|
-
const platform = {
|
|
60
|
-
getPlayers: () => mockPlayers,
|
|
61
|
-
getLocalPlayer: () => mockPlayers[playerIndex],
|
|
62
|
-
send: (action) => {
|
|
63
|
-
setActions((prev) => [...prev, { time: new Date().toISOString(), player: mockPlayers[playerIndex].nickname, action }]);
|
|
64
|
-
},
|
|
65
|
-
on: () => { },
|
|
66
|
-
off: () => { },
|
|
67
|
-
reportResult: () => { },
|
|
68
|
-
};
|
|
69
|
-
const updateState = (0, react_1.useCallback)(() => {
|
|
70
|
-
try {
|
|
71
|
-
const parsed = JSON.parse(stateJson);
|
|
72
|
-
setState(parsed);
|
|
73
|
-
}
|
|
74
|
-
catch (e) {
|
|
75
|
-
// ignore
|
|
76
|
-
}
|
|
77
|
-
}, [stateJson]);
|
|
78
|
-
(0, react_1.useEffect)(() => {
|
|
79
|
-
setStateJson(JSON.stringify(state, null, 2));
|
|
80
|
-
}, []);
|
|
81
|
-
return (<div className="flex gap-4 h-[calc(100vh-80px)]">
|
|
82
|
-
{/* Renderer */}
|
|
83
|
-
<div className="flex-1 bg-zinc-900 rounded-lg overflow-auto">
|
|
84
|
-
{GameRenderer ? (<GameRenderer platform={platform} state={state}/>) : (<div className="p-4 text-zinc-500">Loading renderer...</div>)}
|
|
85
|
-
</div>
|
|
86
|
-
|
|
87
|
-
{/* Control Panel */}
|
|
88
|
-
<div className="w-80 flex flex-col gap-4">
|
|
89
|
-
{/* Player Switcher */}
|
|
90
|
-
<div className="bg-zinc-900 rounded-lg p-3">
|
|
91
|
-
<h3 className="text-sm font-bold text-zinc-400 mb-2">Current Player</h3>
|
|
92
|
-
<select value={playerIndex} onChange={(e) => setPlayerIndex(Number(e.target.value))} className="w-full bg-zinc-800 border border-zinc-700 rounded px-2 py-1">
|
|
93
|
-
{mockPlayers.map((p, i) => (<option key={p.id} value={i}>{p.nickname}</option>))}
|
|
94
|
-
</select>
|
|
95
|
-
</div>
|
|
96
|
-
|
|
97
|
-
{/* State Editor */}
|
|
98
|
-
<div className="bg-zinc-900 rounded-lg p-3 flex-1 flex flex-col">
|
|
99
|
-
<h3 className="text-sm font-bold text-zinc-400 mb-2">Game State</h3>
|
|
100
|
-
<textarea value={stateJson} onChange={(e) => setStateJson(e.target.value)} className="flex-1 bg-zinc-800 border border-zinc-700 rounded p-2 font-mono text-xs resize-none"/>
|
|
101
|
-
<button onClick={updateState} className="mt-2 bg-amber-600 hover:bg-amber-500 text-white px-3 py-1 rounded text-sm">
|
|
102
|
-
Apply State
|
|
103
|
-
</button>
|
|
104
|
-
</div>
|
|
105
|
-
|
|
106
|
-
{/* Action Log */}
|
|
107
|
-
<div className="bg-zinc-900 rounded-lg p-3 h-48 overflow-auto">
|
|
108
|
-
<h3 className="text-sm font-bold text-zinc-400 mb-2">Action Log</h3>
|
|
109
|
-
{actions.length === 0 ? (<p className="text-zinc-500 text-xs">No actions yet</p>) : (<div className="space-y-1">
|
|
110
|
-
{actions.map((a, i) => (<div key={i} className="text-xs font-mono bg-zinc-800 rounded p-1">
|
|
111
|
-
<span className="text-amber-400">{a.player}</span>: {JSON.stringify(a.action)}
|
|
112
|
-
</div>))}
|
|
113
|
-
</div>)}
|
|
114
|
-
</div>
|
|
115
|
-
</div>
|
|
116
|
-
</div>);
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=Preview.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Preview.js","sourceRoot":"","sources":["../../../src/webapp/pages/Preview.tsx"],"names":[],"mappings":"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"}
|