react-os-shell 1.6.0 → 2.0.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.
Files changed (66) hide show
  1. package/README.md +8 -9
  2. package/dist/Browser-HGX2YS22.js +7 -0
  3. package/dist/{Browser-ELO6K7YY.js.map → Browser-HGX2YS22.js.map} +1 -1
  4. package/dist/{Calculator-X26IEHCN.js → Calculator-JJZMCBIN.js} +4 -4
  5. package/dist/{Calculator-X26IEHCN.js.map → Calculator-JJZMCBIN.js.map} +1 -1
  6. package/dist/{CurrencyConverter-5UHIRF2P.js → CurrencyConverter-VCZGTULI.js} +4 -4
  7. package/dist/{CurrencyConverter-5UHIRF2P.js.map → CurrencyConverter-VCZGTULI.js.map} +1 -1
  8. package/dist/{Documents-7KYHOORU.js → Documents-W6JNKYE3.js} +4 -4
  9. package/dist/{Documents-7KYHOORU.js.map → Documents-W6JNKYE3.js.map} +1 -1
  10. package/dist/Files-232FHLMO.js +13 -0
  11. package/dist/{Files-3455T525.js.map → Files-232FHLMO.js.map} +1 -1
  12. package/dist/{Notepad-RLQ4NXJI.js → Notepad-G2UOOZOU.js} +4 -4
  13. package/dist/{Notepad-RLQ4NXJI.js.map → Notepad-G2UOOZOU.js.map} +1 -1
  14. package/dist/{PomodoroTimer-PG4J5NNI.js → PomodoroTimer-TEZJH7E6.js} +4 -4
  15. package/dist/{PomodoroTimer-PG4J5NNI.js.map → PomodoroTimer-TEZJH7E6.js.map} +1 -1
  16. package/dist/Preview-QXM6YE7A.js +9 -0
  17. package/dist/{Preview-H5IOBX66.js.map → Preview-QXM6YE7A.js.map} +1 -1
  18. package/dist/Spreadsheet-7V6GLIIW.js +7 -0
  19. package/dist/{Spreadsheet-6C6O6BGG.js.map → Spreadsheet-7V6GLIIW.js.map} +1 -1
  20. package/dist/{Stock-TIJVSHPV.js → Stock-QVTMAGIU.js} +4 -4
  21. package/dist/{Stock-TIJVSHPV.js.map → Stock-QVTMAGIU.js.map} +1 -1
  22. package/dist/{Weather-WVDLOH74.js → Weather-PXUZW22T.js} +4 -4
  23. package/dist/{Weather-WVDLOH74.js.map → Weather-PXUZW22T.js.map} +1 -1
  24. package/dist/{WorldClock-OV4GU5J3.js → WorldClock-CRESQVKE.js} +4 -4
  25. package/dist/{WorldClock-OV4GU5J3.js.map → WorldClock-CRESQVKE.js.map} +1 -1
  26. package/dist/apps/index.d.ts +1 -20
  27. package/dist/apps/index.js +20 -35
  28. package/dist/apps/index.js.map +1 -1
  29. package/dist/{chunk-GWVVILYQ.js → chunk-5FEW4QE5.js} +3 -3
  30. package/dist/{chunk-GWVVILYQ.js.map → chunk-5FEW4QE5.js.map} +1 -1
  31. package/dist/{chunk-ISNP6BHR.js → chunk-AYTCQLZ4.js} +3 -3
  32. package/dist/{chunk-ISNP6BHR.js.map → chunk-AYTCQLZ4.js.map} +1 -1
  33. package/dist/{chunk-32CXFFKW.js → chunk-JZS5427T.js} +4 -4
  34. package/dist/{chunk-32CXFFKW.js.map → chunk-JZS5427T.js.map} +1 -1
  35. package/dist/{chunk-KKEWB6RG.js → chunk-LXCTOIXP.js} +4 -4
  36. package/dist/{chunk-KKEWB6RG.js.map → chunk-LXCTOIXP.js.map} +1 -1
  37. package/dist/{chunk-VAMMHJR3.js → chunk-Q4EH3NFS.js} +4 -4
  38. package/dist/{chunk-VAMMHJR3.js.map → chunk-Q4EH3NFS.js.map} +1 -1
  39. package/dist/{chunk-4PSDLG2P.js → chunk-QESYOYZS.js} +5 -5
  40. package/dist/{chunk-4PSDLG2P.js.map → chunk-QESYOYZS.js.map} +1 -1
  41. package/dist/{chunk-ZIV7JFJ5.js → chunk-XF7JN5E5.js} +4 -4
  42. package/dist/{chunk-ZIV7JFJ5.js.map → chunk-XF7JN5E5.js.map} +1 -1
  43. package/dist/{chunk-Q3USVEUR.js → chunk-XO4ZJAUB.js} +4 -4
  44. package/dist/{chunk-Q3USVEUR.js.map → chunk-XO4ZJAUB.js.map} +1 -1
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.js +37 -11
  47. package/dist/index.js.map +1 -1
  48. package/package.json +1 -1
  49. package/dist/Browser-ELO6K7YY.js +0 -7
  50. package/dist/Checkers-MIAHIKJH.js +0 -214
  51. package/dist/Checkers-MIAHIKJH.js.map +0 -1
  52. package/dist/Chess-C5BY45NA.js +0 -190
  53. package/dist/Chess-C5BY45NA.js.map +0 -1
  54. package/dist/Files-3455T525.js +0 -13
  55. package/dist/Game2048-3RH3ELRD.js +0 -191
  56. package/dist/Game2048-3RH3ELRD.js.map +0 -1
  57. package/dist/Minesweeper-OXRRSCVF.js +0 -271
  58. package/dist/Minesweeper-OXRRSCVF.js.map +0 -1
  59. package/dist/Preview-H5IOBX66.js +0 -9
  60. package/dist/Spreadsheet-6C6O6BGG.js +0 -7
  61. package/dist/Sudoku-XHLYCEVT.js +0 -197
  62. package/dist/Sudoku-XHLYCEVT.js.map +0 -1
  63. package/dist/Tetris-ZHCZYL24.js +0 -243
  64. package/dist/Tetris-ZHCZYL24.js.map +0 -1
  65. package/dist/chunk-Y4QYGQKS.js +0 -31
  66. package/dist/chunk-Y4QYGQKS.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-os-shell",
3
- "version": "1.6.0",
3
+ "version": "2.0.1",
4
4
  "description": "Desktop-style React UI shell — windows, taskbar, start menu, sticky notes, frosted glass theming, and bundled apps.",
5
5
  "license": "MIT",
6
6
  "author": "Victor Y. Mau",
@@ -1,7 +0,0 @@
1
- export { Browser as default, setBrowserStartUrl } from './chunk-ZIV7JFJ5.js';
2
- import './chunk-32CXFFKW.js';
3
- import './chunk-GWVVILYQ.js';
4
- import './chunk-UBN4IUDE.js';
5
- import './chunk-ZF6AYO4G.js';
6
- //# sourceMappingURL=Browser-ELO6K7YY.js.map
7
- //# sourceMappingURL=Browser-ELO6K7YY.js.map
@@ -1,214 +0,0 @@
1
- import { useState, useCallback, useEffect } from 'react';
2
- import { jsxs, jsx } from 'react/jsx-runtime';
3
-
4
- // src/apps/Checkers.tsx
5
- var DIRS_B = [[-1, -1], [-1, 1]];
6
- var DIRS_R = [[1, -1], [1, 1]];
7
- var ALL = [...DIRS_B, ...DIRS_R];
8
- var initBoard = () => {
9
- const b = Array.from({ length: 8 }, () => Array(8).fill(null));
10
- for (let r = 0; r < 3; r++)
11
- for (let c = 0; c < 8; c++)
12
- if ((r + c) % 2 === 1) b[r][c] = { color: "r", king: false };
13
- for (let r = 5; r < 8; r++)
14
- for (let c = 0; c < 8; c++)
15
- if ((r + c) % 2 === 1) b[r][c] = { color: "b", king: false };
16
- return b;
17
- };
18
- var clone = (b) => b.map((r) => r.map((c) => c ? { ...c } : null));
19
- var inB = (r, c) => r >= 0 && r < 8 && c >= 0 && c < 8;
20
- var getJumps = (b, r, c) => {
21
- const p = b[r][c];
22
- if (!p) return [];
23
- const dirs = p.king ? ALL : p.color === "b" ? DIRS_B : DIRS_R;
24
- const jumps = [];
25
- for (const [dr, dc] of dirs) {
26
- const mr = r + dr, mc = c + dc, tr = r + 2 * dr, tc = c + 2 * dc;
27
- if (inB(tr, tc) && b[mr][mc] && b[mr][mc].color !== p.color && !b[tr][tc])
28
- jumps.push({ to: [tr, tc], cap: [mr, mc] });
29
- }
30
- return jumps;
31
- };
32
- var getMoves = (b, r, c) => {
33
- const p = b[r][c];
34
- if (!p) return [];
35
- const dirs = p.king ? ALL : p.color === "b" ? DIRS_B : DIRS_R;
36
- return dirs.filter(([dr, dc]) => {
37
- const nr = r + dr, nc = c + dc;
38
- return inB(nr, nc) && !b[nr][nc];
39
- }).map(([dr, dc]) => [r + dr, c + dc]);
40
- };
41
- var allMoves = (b, color) => {
42
- const pieces = [];
43
- let hasJump = false;
44
- for (let r = 0; r < 8; r++) for (let c = 0; c < 8; c++) {
45
- if (b[r][c]?.color !== color) continue;
46
- const jumps = getJumps(b, r, c), moves = getMoves(b, r, c);
47
- if (jumps.length) hasJump = true;
48
- if (jumps.length || moves.length) pieces.push({ r, c, jumps, moves });
49
- }
50
- if (hasJump) return pieces.filter((p) => p.jumps.length).map((p) => ({ ...p, moves: [] }));
51
- return pieces;
52
- };
53
- function Checkers() {
54
- const [board, setBoard] = useState(initBoard);
55
- const [turn, setTurn] = useState("b");
56
- const [sel, setSel] = useState(null);
57
- const [valid, setValid] = useState([]);
58
- const [caps, setCaps] = useState({ r: 0, b: 0 });
59
- const [winner, setWinner] = useState(null);
60
- const [jumping, setJumping] = useState(false);
61
- const checkWin = useCallback((b, next) => {
62
- const m = allMoves(b, next);
63
- if (m.length === 0) setWinner(next === "b" ? "Red" : "Black");
64
- }, []);
65
- const handleClick = useCallback((r, c) => {
66
- if (winner || turn !== "b") return;
67
- const moves = allMoves(board, "b");
68
- const mustJump = moves.length > 0 && moves[0].jumps.length > 0;
69
- if (jumping && sel) {
70
- const jumps = getJumps(board, sel[0], sel[1]);
71
- const j = jumps.find((j2) => j2.to[0] === r && j2.to[1] === c);
72
- if (!j) return;
73
- const nb2 = clone(board);
74
- nb2[r][c] = nb2[sel[0]][sel[1]];
75
- nb2[sel[0]][sel[1]] = null;
76
- nb2[j.cap[0]][j.cap[1]] = null;
77
- if (r === 0 && nb2[r][c].color === "b") nb2[r][c].king = true;
78
- setCaps((p) => ({ ...p, r: p.r + 1 }));
79
- const moreJumps = getJumps(nb2, r, c);
80
- if (moreJumps.length && !(r === 0 && !board[sel[0]][sel[1]].king)) {
81
- setBoard(nb2);
82
- setSel([r, c]);
83
- setValid(moreJumps.map((j2) => j2.to));
84
- return;
85
- }
86
- setBoard(nb2);
87
- setSel(null);
88
- setValid([]);
89
- setJumping(false);
90
- setTurn("r");
91
- checkWin(nb2, "r");
92
- return;
93
- }
94
- if (board[r][c]?.color === "b") {
95
- const piece = moves.find((m) => m.r === r && m.c === c);
96
- if (!piece) return;
97
- setSel([r, c]);
98
- setValid(mustJump ? piece.jumps.map((j) => j.to) : piece.moves);
99
- return;
100
- }
101
- if (!sel || !valid.some(([vr, vc]) => vr === r && vc === c)) return;
102
- const nb = clone(board);
103
- if (mustJump) {
104
- const piece = moves.find((m) => m.r === sel[0] && m.c === sel[1]);
105
- const j = piece.jumps.find((j2) => j2.to[0] === r && j2.to[1] === c);
106
- nb[r][c] = nb[sel[0]][sel[1]];
107
- nb[sel[0]][sel[1]] = null;
108
- nb[j.cap[0]][j.cap[1]] = null;
109
- const wasKing = nb[r][c].king;
110
- if (r === 0 && nb[r][c].color === "b") nb[r][c].king = true;
111
- setCaps((p) => ({ ...p, r: p.r + 1 }));
112
- const moreJumps = getJumps(nb, r, c);
113
- if (moreJumps.length && !(r === 0 && !wasKing)) {
114
- setBoard(nb);
115
- setSel([r, c]);
116
- setValid(moreJumps.map((j2) => j2.to));
117
- setJumping(true);
118
- return;
119
- }
120
- } else {
121
- nb[r][c] = nb[sel[0]][sel[1]];
122
- nb[sel[0]][sel[1]] = null;
123
- if (r === 0 && nb[r][c].color === "b") nb[r][c].king = true;
124
- }
125
- setBoard(nb);
126
- setSel(null);
127
- setValid([]);
128
- setTurn("r");
129
- checkWin(nb, "r");
130
- }, [board, turn, sel, valid, winner, jumping, checkWin]);
131
- useEffect(() => {
132
- if (turn !== "r" || winner) return;
133
- const t = setTimeout(() => {
134
- const moves = allMoves(board, "r");
135
- if (moves.length === 0) {
136
- setWinner("Black");
137
- return;
138
- }
139
- const mustJump = moves[0].jumps.length > 0;
140
- const pick = moves[Math.floor(Math.random() * moves.length)];
141
- const nb = clone(board);
142
- let cr = pick.r, cc = pick.c, capCount = 0;
143
- if (mustJump) {
144
- let jumps = pick.jumps;
145
- while (jumps.length) {
146
- const j = jumps[Math.floor(Math.random() * jumps.length)];
147
- nb[j.to[0]][j.to[1]] = nb[cr][cc];
148
- nb[cr][cc] = null;
149
- nb[j.cap[0]][j.cap[1]] = null;
150
- capCount++;
151
- const wasKing = nb[j.to[0]][j.to[1]].king;
152
- if (j.to[0] === 7) nb[j.to[0]][j.to[1]].king = true;
153
- cr = j.to[0];
154
- cc = j.to[1];
155
- if (j.to[0] === 7 && !wasKing) break;
156
- jumps = getJumps(nb, cr, cc);
157
- }
158
- } else {
159
- const m = pick.moves[Math.floor(Math.random() * pick.moves.length)];
160
- nb[m[0]][m[1]] = nb[cr][cc];
161
- nb[cr][cc] = null;
162
- if (m[0] === 7) nb[m[0]][m[1]].king = true;
163
- }
164
- setCaps((p) => ({ ...p, b: p.b + capCount }));
165
- setBoard(nb);
166
- setTurn("b");
167
- checkWin(nb, "b");
168
- }, 400);
169
- return () => clearTimeout(t);
170
- }, [turn, board, winner, checkWin]);
171
- const reset = () => {
172
- setBoard(initBoard());
173
- setTurn("b");
174
- setSel(null);
175
- setValid([]);
176
- setCaps({ r: 0, b: 0 });
177
- setWinner(null);
178
- setJumping(false);
179
- };
180
- const isValid = (r, c) => valid.some(([vr, vc]) => vr === r && vc === c);
181
- const isSel = (r, c) => sel?.[0] === r && sel?.[1] === c;
182
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-2 p-2", children: [
183
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between w-full max-w-[352px]", children: [
184
- /* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: winner ? `${winner} wins!` : turn === "b" ? "Your turn (Black)" : "Red is thinking..." }),
185
- /* @__PURE__ */ jsx("button", { onClick: reset, className: "px-3 py-1 text-xs bg-gray-700 text-white rounded hover:bg-gray-600", children: "New Game" })
186
- ] }),
187
- /* @__PURE__ */ jsxs("div", { className: "text-xs text-gray-500 flex gap-4", children: [
188
- /* @__PURE__ */ jsxs("span", { children: [
189
- "Red captured: ",
190
- caps.r
191
- ] }),
192
- /* @__PURE__ */ jsxs("span", { children: [
193
- "Black captured: ",
194
- caps.b
195
- ] })
196
- ] }),
197
- /* @__PURE__ */ jsx("div", { className: "border-2 border-gray-800 inline-block", children: board.map((row, r) => /* @__PURE__ */ jsx("div", { className: "flex", children: row.map((cell, c) => {
198
- const dark = (r + c) % 2 === 1;
199
- return /* @__PURE__ */ jsx(
200
- "div",
201
- {
202
- onClick: () => dark && handleClick(r, c),
203
- className: `w-[41px] h-[41px] flex items-center justify-center ${dark ? "bg-emerald-800" : "bg-amber-100"} ${isValid(r, c) ? "ring-2 ring-inset ring-green-400 bg-green-700/60 cursor-pointer" : ""} ${dark ? "cursor-pointer" : ""}`,
204
- children: cell && /* @__PURE__ */ jsx("div", { className: `w-8 h-8 rounded-full flex items-center justify-center text-xs font-bold shadow-md ${cell.color === "r" ? "bg-red-600 border-2 border-red-400" : "bg-gray-900 border-2 border-gray-600"} ${isSel(r, c) ? "ring-2 ring-yellow-400 ring-offset-1" : ""}`, children: cell.king && /* @__PURE__ */ jsx("span", { className: "text-yellow-300 text-sm", children: "\u2655" }) })
205
- },
206
- c
207
- );
208
- }) }, r)) })
209
- ] });
210
- }
211
-
212
- export { Checkers as default };
213
- //# sourceMappingURL=Checkers-MIAHIKJH.js.map
214
- //# sourceMappingURL=Checkers-MIAHIKJH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/apps/Checkers.tsx"],"names":["j","nb"],"mappings":";;;;AAKA,IAAM,MAAA,GAAgB,CAAC,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,CAAC,EAAA,EAAI,CAAC,CAAC,CAAA;AACxC,IAAM,MAAA,GAAgB,CAAC,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AACtC,IAAM,GAAA,GAAa,CAAC,GAAG,MAAA,EAAQ,GAAG,MAAM,CAAA;AAExC,IAAM,YAAY,MAAgB;AAChC,EAAA,MAAM,CAAA,GAAc,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAE,EAAG,MAAM,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AACvE,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA;AACrB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA;AACrB,MAAA,IAAA,CAAK,CAAA,GAAI,CAAA,IAAK,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,EAAE,KAAA,EAAO,GAAA,EAAK,MAAM,KAAA,EAAM;AAC/D,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA;AACrB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA;AACrB,MAAA,IAAA,CAAK,CAAA,GAAI,CAAA,IAAK,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,EAAE,KAAA,EAAO,GAAA,EAAK,MAAM,KAAA,EAAM;AAC/D,EAAA,OAAO,CAAA;AACT,CAAA;AAEA,IAAM,KAAA,GAAQ,CAAC,CAAA,KAA0B,CAAA,CAAE,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,IAAI,EAAE,GAAG,CAAA,EAAE,GAAI,IAAI,CAAC,CAAA;AACnF,IAAM,GAAA,GAAM,CAAC,CAAA,EAAW,CAAA,KAAc,CAAA,IAAK,KAAK,CAAA,GAAI,CAAA,IAAK,CAAA,IAAK,CAAA,IAAK,CAAA,GAAI,CAAA;AAEvE,IAAM,QAAA,GAAW,CAAC,CAAA,EAAa,CAAA,EAAW,CAAA,KAAuC;AAC/E,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAA;AAChB,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAC;AAChB,EAAA,MAAM,OAAO,CAAA,CAAE,IAAA,GAAO,MAAM,CAAA,CAAE,KAAA,KAAU,MAAM,MAAA,GAAS,MAAA;AACvD,EAAA,MAAM,QAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,CAAC,EAAA,EAAI,EAAE,CAAA,IAAK,IAAA,EAAM;AAC3B,IAAA,MAAM,EAAA,GAAK,CAAA,GAAI,EAAA,EAAI,EAAA,GAAK,CAAA,GAAI,EAAA,EAAI,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,EAAA,EAAI,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,EAAA;AAC9D,IAAA,IAAI,GAAA,CAAI,IAAI,EAAE,CAAA,IAAK,EAAE,EAAE,CAAA,CAAE,EAAE,CAAA,IAAK,CAAA,CAAE,EAAE,CAAA,CAAE,EAAE,EAAG,KAAA,KAAU,CAAA,CAAE,SAAS,CAAC,CAAA,CAAE,EAAE,CAAA,CAAE,EAAE,CAAA;AACvE,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,EAAA,EAAI,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,GAAA,EAAK,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,IAAM,QAAA,GAAW,CAAC,CAAA,EAAa,CAAA,EAAW,CAAA,KAAqB;AAC7D,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAA;AAChB,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAC;AAChB,EAAA,MAAM,OAAO,CAAA,CAAE,IAAA,GAAO,MAAM,CAAA,CAAE,KAAA,KAAU,MAAM,MAAA,GAAS,MAAA;AACvD,EAAA,OAAO,KAAK,MAAA,CAAO,CAAC,CAAC,EAAA,EAAI,EAAE,CAAA,KAAM;AAAE,IAAA,MAAM,EAAA,GAAK,CAAA,GAAI,EAAA,EAAI,EAAA,GAAK,CAAA,GAAI,EAAA;AAAI,IAAA,OAAO,GAAA,CAAI,IAAI,EAAE,CAAA,IAAK,CAAC,CAAA,CAAE,EAAE,EAAE,EAAE,CAAA;AAAA,EAAG,CAAC,CAAA,CACnG,GAAA,CAAI,CAAC,CAAC,EAAA,EAAI,EAAE,CAAA,KAAM,CAAC,CAAA,GAAI,EAAA,EAAI,CAAA,GAAI,EAAE,CAAQ,CAAA;AAC9C,CAAA;AAEA,IAAM,QAAA,GAAW,CAAC,CAAA,EAAa,KAAA,KAAqB;AAClD,EAAA,MAAM,SAAmF,EAAC;AAC1F,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,WAAc,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AACtD,IAAA,IAAI,EAAE,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG,UAAU,KAAA,EAAO;AAC9B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAC,GAAG,KAAA,GAAQ,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACzD,IAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,GAAU,IAAA;AAC5B,IAAA,IAAI,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,KAAA,EAAO,CAAA;AAAA,EACtE;AACA,EAAA,IAAI,SAAS,OAAO,MAAA,CAAO,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,KAAA,CAAM,MAAM,CAAA,CAAE,GAAA,CAAI,QAAM,EAAE,GAAG,GAAG,KAAA,EAAO,IAAY,CAAE,CAAA;AAC9F,EAAA,OAAO,MAAA;AACT,CAAA;AAEe,SAAR,QAAA,GAA4B;AACjC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,SAAS,CAAA;AAC5C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAoB,GAAG,CAAA;AAC/C,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,SAAqB,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAAgB,EAAE,CAAA;AAC5C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,QAAA,CAAS,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA;AAC/C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAwB,IAAI,CAAA;AACxD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,CAAC,CAAA,EAAa,IAAA,KAAoB;AAC7D,IAAA,MAAM,CAAA,GAAI,QAAA,CAAS,CAAA,EAAG,IAAI,CAAA;AAC1B,IAAA,IAAI,EAAE,MAAA,KAAW,CAAA,YAAa,IAAA,KAAS,GAAA,GAAM,QAAQ,OAAO,CAAA;AAAA,EAC9D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,CAAC,CAAA,EAAW,CAAA,KAAc;AACxD,IAAA,IAAI,MAAA,IAAU,SAAS,GAAA,EAAK;AAC5B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,EAAO,GAAG,CAAA;AACjC,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,GAAS,CAAA,IAAK,MAAM,CAAC,CAAA,CAAE,MAAM,MAAA,GAAS,CAAA;AAE7D,IAAA,IAAI,WAAW,GAAA,EAAK;AAElB,MAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,EAAO,GAAA,CAAI,CAAC,CAAA,EAAG,GAAA,CAAI,CAAC,CAAC,CAAA;AAC5C,MAAA,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,CAAAA,OAAKA,EAAAA,CAAE,EAAA,CAAG,CAAC,CAAA,KAAM,CAAA,IAAKA,EAAAA,CAAE,EAAA,CAAG,CAAC,MAAM,CAAC,CAAA;AACxD,MAAA,IAAI,CAAC,CAAA,EAAG;AACR,MAAA,MAAMC,GAAAA,GAAK,MAAM,KAAK,CAAA;AACtB,MAAAA,GAAAA,CAAG,CAAC,CAAA,CAAE,CAAC,CAAA,GAAIA,GAAAA,CAAG,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA;AAC5B,MAAAA,GAAAA,CAAG,IAAI,CAAC,CAAC,EAAE,GAAA,CAAI,CAAC,CAAC,CAAA,GAAI,IAAA;AACrB,MAAAA,GAAAA,CAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,GAAI,IAAA;AACzB,MAAA,IAAI,CAAA,KAAM,CAAA,IAAKA,GAAAA,CAAG,CAAC,EAAE,CAAC,CAAA,CAAG,KAAA,KAAU,GAAA,EAAKA,GAAAA,CAAG,CAAC,CAAA,CAAE,CAAC,EAAG,IAAA,GAAO,IAAA;AACzD,MAAA,OAAA,CAAQ,CAAA,CAAA,MAAM,EAAE,GAAG,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA,GAAI,GAAE,CAAE,CAAA;AACnC,MAAA,MAAM,SAAA,GAAY,QAAA,CAASA,GAAAA,EAAI,CAAA,EAAG,CAAC,CAAA;AACnC,MAAA,IAAI,SAAA,CAAU,MAAA,IAAU,EAAE,CAAA,KAAM,KAAK,CAAC,KAAA,CAAM,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,EAAG,IAAA,CAAA,EAAO;AAClE,QAAA,QAAA,CAASA,GAAE,CAAA;AAAG,QAAA,MAAA,CAAO,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAG,QAAA,QAAA,CAAS,UAAU,GAAA,CAAI,CAAAD,EAAAA,KAAKA,EAAAA,CAAE,EAAE,CAAC,CAAA;AAC/D,QAAA;AAAA,MACF;AACA,MAAA,QAAA,CAASC,GAAE,CAAA;AAAG,MAAA,MAAA,CAAO,IAAI,CAAA;AAAG,MAAA,QAAA,CAAS,EAAE,CAAA;AAAG,MAAA,UAAA,CAAW,KAAK,CAAA;AAAG,MAAA,OAAA,CAAQ,GAAG,CAAA;AACxE,MAAA,QAAA,CAASA,KAAI,GAAG,CAAA;AAChB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,MAAM,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG,UAAU,GAAA,EAAK;AAC9B,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,CAAA,KAAM,CAAA,IAAK,CAAA,CAAE,CAAA,KAAM,CAAC,CAAA;AACpD,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,MAAA,CAAO,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AACb,MAAA,QAAA,CAAS,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,CAAI,OAAK,CAAA,CAAE,EAAE,CAAA,GAAI,KAAA,CAAM,KAAK,CAAA;AAC5D,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,KAAA,CAAM,KAAK,CAAC,CAAC,EAAA,EAAI,EAAE,CAAA,KAAM,EAAA,KAAO,CAAA,IAAK,EAAA,KAAO,CAAC,CAAA,EAAG;AAC7D,IAAA,MAAM,EAAA,GAAK,MAAM,KAAK,CAAA;AACtB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,CAAA,KAAM,GAAA,CAAI,CAAC,CAAA,IAAK,CAAA,CAAE,CAAA,KAAM,GAAA,CAAI,CAAC,CAAC,CAAA;AAC9D,MAAA,MAAM,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,CAAAD,EAAAA,KAAKA,EAAAA,CAAE,EAAA,CAAG,CAAC,MAAM,CAAA,IAAKA,EAAAA,CAAE,EAAA,CAAG,CAAC,MAAM,CAAC,CAAA;AAC9D,MAAA,EAAA,CAAG,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,EAAA,CAAG,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA;AAAG,MAAA,EAAA,CAAG,IAAI,CAAC,CAAC,EAAE,GAAA,CAAI,CAAC,CAAC,CAAA,GAAI,IAAA;AACpD,MAAA,EAAA,CAAG,CAAA,CAAE,IAAI,CAAC,CAAC,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,GAAI,IAAA;AACzB,MAAA,MAAM,OAAA,GAAU,EAAA,CAAG,CAAC,CAAA,CAAE,CAAC,CAAA,CAAG,IAAA;AAC1B,MAAA,IAAI,CAAA,KAAM,CAAA,IAAK,EAAA,CAAG,CAAC,EAAE,CAAC,CAAA,CAAG,KAAA,KAAU,GAAA,EAAK,EAAA,CAAG,CAAC,CAAA,CAAE,CAAC,EAAG,IAAA,GAAO,IAAA;AACzD,MAAA,OAAA,CAAQ,CAAA,CAAA,MAAM,EAAE,GAAG,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA,GAAI,GAAE,CAAE,CAAA;AACnC,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,CAAC,CAAA;AACnC,MAAA,IAAI,UAAU,MAAA,IAAU,EAAE,CAAA,KAAM,CAAA,IAAK,CAAC,OAAA,CAAA,EAAU;AAC9C,QAAA,QAAA,CAAS,EAAE,CAAA;AAAG,QAAA,MAAA,CAAO,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAG,QAAA,QAAA,CAAS,UAAU,GAAA,CAAI,CAAAA,EAAAA,KAAKA,EAAAA,CAAE,EAAE,CAAC,CAAA;AAAG,QAAA,UAAA,CAAW,IAAI,CAAA;AACjF,QAAA;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,EAAA,CAAG,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,EAAA,CAAG,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA;AAAG,MAAA,EAAA,CAAG,IAAI,CAAC,CAAC,EAAE,GAAA,CAAI,CAAC,CAAC,CAAA,GAAI,IAAA;AACpD,MAAA,IAAI,CAAA,KAAM,CAAA,IAAK,EAAA,CAAG,CAAC,EAAE,CAAC,CAAA,CAAG,KAAA,KAAU,GAAA,EAAK,EAAA,CAAG,CAAC,CAAA,CAAE,CAAC,EAAG,IAAA,GAAO,IAAA;AAAA,IAC3D;AACA,IAAA,QAAA,CAAS,EAAE,CAAA;AAAG,IAAA,MAAA,CAAO,IAAI,CAAA;AAAG,IAAA,QAAA,CAAS,EAAE,CAAA;AAAG,IAAA,OAAA,CAAQ,GAAG,CAAA;AACrD,IAAA,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,KAAA,EAAO,IAAA,EAAM,KAAK,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,QAAQ,CAAC,CAAA;AAGvD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,KAAS,OAAO,MAAA,EAAQ;AAC5B,IAAA,MAAM,CAAA,GAAI,WAAW,MAAM;AACzB,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,EAAO,GAAG,CAAA;AACjC,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AAAE,QAAA,SAAA,CAAU,OAAO,CAAA;AAAG,QAAA;AAAA,MAAQ;AACtD,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,MAAA,GAAS,CAAA;AACzC,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAC3D,MAAA,MAAM,EAAA,GAAK,MAAM,KAAK,CAAA;AACtB,MAAA,IAAI,KAAK,IAAA,CAAK,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,GAAG,QAAA,GAAW,CAAA;AACzC,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,QAAQ,IAAA,CAAK,KAAA;AACjB,QAAA,OAAO,MAAM,MAAA,EAAQ;AACnB,UAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AACxD,UAAA,EAAA,CAAG,CAAA,CAAE,EAAA,CAAG,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,EAAA,CAAG,CAAC,CAAC,CAAA,GAAI,EAAA,CAAG,EAAE,EAAE,EAAE,CAAA;AAAG,UAAA,EAAA,CAAG,EAAE,CAAA,CAAE,EAAE,CAAA,GAAI,IAAA;AAChD,UAAA,EAAA,CAAG,CAAA,CAAE,IAAI,CAAC,CAAC,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,GAAI,IAAA;AAAM,UAAA,QAAA,EAAA;AAC/B,UAAA,MAAM,OAAA,GAAU,EAAA,CAAG,CAAA,CAAE,EAAA,CAAG,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,EAAA,CAAG,CAAC,CAAC,CAAA,CAAG,IAAA;AACtC,UAAA,IAAI,EAAE,EAAA,CAAG,CAAC,CAAA,KAAM,CAAA,KAAM,CAAA,CAAE,EAAA,CAAG,CAAC,CAAC,EAAE,CAAA,CAAE,EAAA,CAAG,CAAC,CAAC,EAAG,IAAA,GAAO,IAAA;AAChD,UAAA,EAAA,GAAK,CAAA,CAAE,GAAG,CAAC,CAAA;AAAG,UAAA,EAAA,GAAK,CAAA,CAAE,GAAG,CAAC,CAAA;AACzB,UAAA,IAAI,EAAE,EAAA,CAAG,CAAC,CAAA,KAAM,CAAA,IAAK,CAAC,OAAA,EAAS;AAC/B,UAAA,KAAA,GAAQ,QAAA,CAAS,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA;AAAA,QAC7B;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,GAAI,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA;AAClE,QAAA,EAAA,CAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,EAAA,CAAG,EAAE,CAAA,CAAE,EAAE,CAAA;AAAG,QAAA,EAAA,CAAG,EAAE,CAAA,CAAE,EAAE,CAAA,GAAI,IAAA;AAC1C,QAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,EAAG,EAAA,CAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,CAAC,CAAC,EAAG,IAAA,GAAO,IAAA;AAAA,MACzC;AACA,MAAA,OAAA,CAAQ,CAAA,CAAA,MAAM,EAAE,GAAG,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA,GAAI,UAAS,CAAE,CAAA;AAC1C,MAAA,QAAA,CAAS,EAAE,CAAA;AAAG,MAAA,OAAA,CAAQ,GAAG,CAAA;AACzB,MAAA,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,IAClB,GAAG,GAAG,CAAA;AACN,IAAA,OAAO,MAAM,aAAa,CAAC,CAAA;AAAA,EAC7B,GAAG,CAAC,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAElC,EAAA,MAAM,QAAQ,MAAM;AAAE,IAAA,QAAA,CAAS,WAAW,CAAA;AAAG,IAAA,OAAA,CAAQ,GAAG,CAAA;AAAG,IAAA,MAAA,CAAO,IAAI,CAAA;AAAG,IAAA,QAAA,CAAS,EAAE,CAAA;AAAG,IAAA,OAAA,CAAQ,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA;AAAG,IAAA,SAAA,CAAU,IAAI,CAAA;AAAG,IAAA,UAAA,CAAW,KAAK,CAAA;AAAA,EAAG,CAAA;AACpJ,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,EAAW,CAAA,KAAc,MAAM,IAAA,CAAK,CAAC,CAAC,EAAA,EAAI,EAAE,CAAA,KAAM,EAAA,KAAO,CAAA,IAAK,OAAO,CAAC,CAAA;AACvF,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,EAAW,CAAA,KAAc,GAAA,GAAM,CAAC,CAAA,KAAM,CAAA,IAAK,GAAA,GAAM,CAAC,CAAA,KAAM,CAAA;AAEvE,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wDAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,MAAA,CAAA,GAAW,IAAA,KAAS,GAAA,GAAM,mBAAA,GAAsB,oBAAA,EAAqB,CAAA;AAAA,0BAC7H,QAAA,EAAA,EAAO,OAAA,EAAS,KAAA,EAAO,SAAA,EAAU,sEAAqE,QAAA,EAAA,UAAA,EAAQ;AAAA,KAAA,EACjH,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,QAAA,gBAAA;AAAA,QAAe,IAAA,CAAK;AAAA,OAAA,EAAE,CAAA;AAAA,2BAAQ,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,QAAA,kBAAA;AAAA,QAAiB,IAAA,CAAK;AAAA,OAAA,EAAE;AAAA,KAAA,EACnE,CAAA;AAAA,wBACC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACZ,QAAA,EAAA,KAAA,CAAM,IAAI,CAAC,GAAA,EAAK,CAAA,qBACf,GAAA,CAAC,SAAY,SAAA,EAAU,MAAA,EACpB,cAAI,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AACpB,MAAA,MAAM,IAAA,GAAA,CAAQ,CAAA,GAAI,CAAA,IAAK,CAAA,KAAM,CAAA;AAC7B,MAAA,uBACE,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAAY,OAAA,EAAS,MAAM,IAAA,IAAQ,WAAA,CAAY,GAAG,CAAC,CAAA;AAAA,UAClD,SAAA,EAAW,CAAA,mDAAA,EAAsD,IAAA,GAAO,gBAAA,GAAmB,cAAc,CAAA,CAAA,EAAI,OAAA,CAAQ,CAAA,EAAG,CAAC,IAAI,iEAAA,GAAoE,EAAE,CAAA,CAAA,EAAI,IAAA,GAAO,mBAAmB,EAAE,CAAA,CAAA;AAAA,UAClO,QAAA,EAAA,IAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,kFAAA,EAAqF,KAAK,KAAA,KAAU,GAAA,GAAM,oCAAA,GAAuC,sCAAsC,CAAA,CAAA,EAAI,KAAA,CAAM,GAAG,CAAC,CAAA,GAAI,sCAAA,GAAyC,EAAE,CAAA,CAAA,EACjQ,QAAA,EAAA,IAAA,CAAK,IAAA,oBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA0B,QAAA,EAAA,QAAA,EAAO,CAAA,EACjE;AAAA,SAAA;AAAA,QALM;AAAA,OAOV;AAAA,IAEJ,CAAC,CAAA,EAAA,EAbO,CAcV,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ","file":"Checkers-MIAHIKJH.js","sourcesContent":["import { useState, useCallback, useEffect } from 'react';\n\ntype Cell = null | { color: 'r' | 'b'; king: boolean };\ntype Pos = [number, number];\n\nconst DIRS_B: Pos[] = [[-1, -1], [-1, 1]]; // black moves up\nconst DIRS_R: Pos[] = [[1, -1], [1, 1]]; // red moves down\nconst ALL: Pos[] = [...DIRS_B, ...DIRS_R];\n\nconst initBoard = (): Cell[][] => {\n const b: Cell[][] = Array.from({ length: 8 }, () => Array(8).fill(null));\n for (let r = 0; r < 3; r++)\n for (let c = 0; c < 8; c++)\n if ((r + c) % 2 === 1) b[r][c] = { color: 'r', king: false };\n for (let r = 5; r < 8; r++)\n for (let c = 0; c < 8; c++)\n if ((r + c) % 2 === 1) b[r][c] = { color: 'b', king: false };\n return b;\n};\n\nconst clone = (b: Cell[][]): Cell[][] => b.map(r => r.map(c => c ? { ...c } : null));\nconst inB = (r: number, c: number) => r >= 0 && r < 8 && c >= 0 && c < 8;\n\nconst getJumps = (b: Cell[][], r: number, c: number): { to: Pos; cap: Pos }[] => {\n const p = b[r][c];\n if (!p) return [];\n const dirs = p.king ? ALL : p.color === 'b' ? DIRS_B : DIRS_R;\n const jumps: { to: Pos; cap: Pos }[] = [];\n for (const [dr, dc] of dirs) {\n const mr = r + dr, mc = c + dc, tr = r + 2 * dr, tc = c + 2 * dc;\n if (inB(tr, tc) && b[mr][mc] && b[mr][mc]!.color !== p.color && !b[tr][tc])\n jumps.push({ to: [tr, tc], cap: [mr, mc] });\n }\n return jumps;\n};\n\nconst getMoves = (b: Cell[][], r: number, c: number): Pos[] => {\n const p = b[r][c];\n if (!p) return [];\n const dirs = p.king ? ALL : p.color === 'b' ? DIRS_B : DIRS_R;\n return dirs.filter(([dr, dc]) => { const nr = r + dr, nc = c + dc; return inB(nr, nc) && !b[nr][nc]; })\n .map(([dr, dc]) => [r + dr, c + dc] as Pos);\n};\n\nconst allMoves = (b: Cell[][], color: 'r' | 'b') => {\n const pieces: { r: number; c: number; jumps: { to: Pos; cap: Pos }[]; moves: Pos[] }[] = [];\n let hasJump = false;\n for (let r = 0; r < 8; r++) for (let c = 0; c < 8; c++) {\n if (b[r][c]?.color !== color) continue;\n const jumps = getJumps(b, r, c), moves = getMoves(b, r, c);\n if (jumps.length) hasJump = true;\n if (jumps.length || moves.length) pieces.push({ r, c, jumps, moves });\n }\n if (hasJump) return pieces.filter(p => p.jumps.length).map(p => ({ ...p, moves: [] as Pos[] }));\n return pieces;\n};\n\nexport default function Checkers() {\n const [board, setBoard] = useState(initBoard);\n const [turn, setTurn] = useState<'b' | 'r'>('b');\n const [sel, setSel] = useState<Pos | null>(null);\n const [valid, setValid] = useState<Pos[]>([]);\n const [caps, setCaps] = useState({ r: 0, b: 0 });\n const [winner, setWinner] = useState<string | null>(null);\n const [jumping, setJumping] = useState(false);\n\n const checkWin = useCallback((b: Cell[][], next: 'r' | 'b') => {\n const m = allMoves(b, next);\n if (m.length === 0) setWinner(next === 'b' ? 'Red' : 'Black');\n }, []);\n\n const handleClick = useCallback((r: number, c: number) => {\n if (winner || turn !== 'b') return;\n const moves = allMoves(board, 'b');\n const mustJump = moves.length > 0 && moves[0].jumps.length > 0;\n\n if (jumping && sel) {\n // mid multi-jump: only allow continuing jump from selected piece\n const jumps = getJumps(board, sel[0], sel[1]);\n const j = jumps.find(j => j.to[0] === r && j.to[1] === c);\n if (!j) return;\n const nb = clone(board);\n nb[r][c] = nb[sel[0]][sel[1]];\n nb[sel[0]][sel[1]] = null;\n nb[j.cap[0]][j.cap[1]] = null;\n if (r === 0 && nb[r][c]!.color === 'b') nb[r][c]!.king = true;\n setCaps(p => ({ ...p, r: p.r + 1 }));\n const moreJumps = getJumps(nb, r, c);\n if (moreJumps.length && !(r === 0 && !board[sel[0]][sel[1]]!.king)) {\n setBoard(nb); setSel([r, c]); setValid(moreJumps.map(j => j.to));\n return;\n }\n setBoard(nb); setSel(null); setValid([]); setJumping(false); setTurn('r');\n checkWin(nb, 'r');\n return;\n }\n\n // selecting a piece\n if (board[r][c]?.color === 'b') {\n const piece = moves.find(m => m.r === r && m.c === c);\n if (!piece) return;\n setSel([r, c]);\n setValid(mustJump ? piece.jumps.map(j => j.to) : piece.moves);\n return;\n }\n\n // moving to a square\n if (!sel || !valid.some(([vr, vc]) => vr === r && vc === c)) return;\n const nb = clone(board);\n if (mustJump) {\n const piece = moves.find(m => m.r === sel[0] && m.c === sel[1])!;\n const j = piece.jumps.find(j => j.to[0] === r && j.to[1] === c)!;\n nb[r][c] = nb[sel[0]][sel[1]]; nb[sel[0]][sel[1]] = null;\n nb[j.cap[0]][j.cap[1]] = null;\n const wasKing = nb[r][c]!.king;\n if (r === 0 && nb[r][c]!.color === 'b') nb[r][c]!.king = true;\n setCaps(p => ({ ...p, r: p.r + 1 }));\n const moreJumps = getJumps(nb, r, c);\n if (moreJumps.length && !(r === 0 && !wasKing)) {\n setBoard(nb); setSel([r, c]); setValid(moreJumps.map(j => j.to)); setJumping(true);\n return;\n }\n } else {\n nb[r][c] = nb[sel[0]][sel[1]]; nb[sel[0]][sel[1]] = null;\n if (r === 0 && nb[r][c]!.color === 'b') nb[r][c]!.king = true;\n }\n setBoard(nb); setSel(null); setValid([]); setTurn('r');\n checkWin(nb, 'r');\n }, [board, turn, sel, valid, winner, jumping, checkWin]);\n\n // AI turn\n useEffect(() => {\n if (turn !== 'r' || winner) return;\n const t = setTimeout(() => {\n const moves = allMoves(board, 'r');\n if (moves.length === 0) { setWinner('Black'); return; }\n const mustJump = moves[0].jumps.length > 0;\n const pick = moves[Math.floor(Math.random() * moves.length)];\n const nb = clone(board);\n let cr = pick.r, cc = pick.c, capCount = 0;\n if (mustJump) {\n let jumps = pick.jumps;\n while (jumps.length) {\n const j = jumps[Math.floor(Math.random() * jumps.length)];\n nb[j.to[0]][j.to[1]] = nb[cr][cc]; nb[cr][cc] = null;\n nb[j.cap[0]][j.cap[1]] = null; capCount++;\n const wasKing = nb[j.to[0]][j.to[1]]!.king;\n if (j.to[0] === 7) nb[j.to[0]][j.to[1]]!.king = true;\n cr = j.to[0]; cc = j.to[1];\n if (j.to[0] === 7 && !wasKing) break;\n jumps = getJumps(nb, cr, cc);\n }\n } else {\n const m = pick.moves[Math.floor(Math.random() * pick.moves.length)];\n nb[m[0]][m[1]] = nb[cr][cc]; nb[cr][cc] = null;\n if (m[0] === 7) nb[m[0]][m[1]]!.king = true;\n }\n setCaps(p => ({ ...p, b: p.b + capCount }));\n setBoard(nb); setTurn('b');\n checkWin(nb, 'b');\n }, 400);\n return () => clearTimeout(t);\n }, [turn, board, winner, checkWin]);\n\n const reset = () => { setBoard(initBoard()); setTurn('b'); setSel(null); setValid([]); setCaps({ r: 0, b: 0 }); setWinner(null); setJumping(false); };\n const isValid = (r: number, c: number) => valid.some(([vr, vc]) => vr === r && vc === c);\n const isSel = (r: number, c: number) => sel?.[0] === r && sel?.[1] === c;\n\n return (\n <div className=\"flex flex-col items-center gap-2 p-2\">\n <div className=\"flex items-center justify-between w-full max-w-[352px]\">\n <span className=\"text-sm font-medium\">{winner ? `${winner} wins!` : turn === 'b' ? 'Your turn (Black)' : 'Red is thinking...'}</span>\n <button onClick={reset} className=\"px-3 py-1 text-xs bg-gray-700 text-white rounded hover:bg-gray-600\">New Game</button>\n </div>\n <div className=\"text-xs text-gray-500 flex gap-4\">\n <span>Red captured: {caps.r}</span><span>Black captured: {caps.b}</span>\n </div>\n <div className=\"border-2 border-gray-800 inline-block\">\n {board.map((row, r) => (\n <div key={r} className=\"flex\">\n {row.map((cell, c) => {\n const dark = (r + c) % 2 === 1;\n return (\n <div key={c} onClick={() => dark && handleClick(r, c)}\n className={`w-[41px] h-[41px] flex items-center justify-center ${dark ? 'bg-emerald-800' : 'bg-amber-100'} ${isValid(r, c) ? 'ring-2 ring-inset ring-green-400 bg-green-700/60 cursor-pointer' : ''} ${dark ? 'cursor-pointer' : ''}`}>\n {cell && (\n <div className={`w-8 h-8 rounded-full flex items-center justify-center text-xs font-bold shadow-md ${cell.color === 'r' ? 'bg-red-600 border-2 border-red-400' : 'bg-gray-900 border-2 border-gray-600'} ${isSel(r, c) ? 'ring-2 ring-yellow-400 ring-offset-1' : ''}`}>\n {cell.king && <span className=\"text-yellow-300 text-sm\">&#9813;</span>}\n </div>\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n );\n}\n"]}
@@ -1,190 +0,0 @@
1
- import { useState, useCallback } from 'react';
2
- import { jsxs, jsx } from 'react/jsx-runtime';
3
-
4
- // src/apps/Chess.tsx
5
- var ICONS = {
6
- wK: "\u2654",
7
- wQ: "\u2655",
8
- wR: "\u2656",
9
- wB: "\u2657",
10
- wN: "\u2658",
11
- wP: "\u2659",
12
- bK: "\u265A",
13
- bQ: "\u265B",
14
- bR: "\u265C",
15
- bB: "\u265D",
16
- bN: "\u265E",
17
- bP: "\u265F"
18
- };
19
- var initBoard = () => {
20
- const b = Array.from({ length: 8 }, () => Array(8).fill(null));
21
- const back = ["R", "N", "B", "Q", "K", "B", "N", "R"];
22
- for (let c = 0; c < 8; c++) {
23
- b[0][c] = { type: back[c], color: "b" };
24
- b[1][c] = { type: "P", color: "b" };
25
- b[6][c] = { type: "P", color: "w" };
26
- b[7][c] = { type: back[c], color: "w" };
27
- }
28
- return b;
29
- };
30
- var inBounds = (r, c) => r >= 0 && r < 8 && c >= 0 && c < 8;
31
- function getValidMoves(board, [r, c]) {
32
- const p = board[r][c];
33
- if (!p) return [];
34
- const moves = [];
35
- const add = (nr, nc) => {
36
- if (!inBounds(nr, nc)) return false;
37
- const t = board[nr][nc];
38
- if (t && t.color === p.color) return false;
39
- moves.push([nr, nc]);
40
- return !t;
41
- };
42
- const slide = (dr, dc) => {
43
- for (let i = 1; i < 8; i++) if (!add(r + dr * i, c + dc * i)) break;
44
- };
45
- switch (p.type) {
46
- case "P": {
47
- const dir = p.color === "w" ? -1 : 1;
48
- const start = p.color === "w" ? 6 : 1;
49
- if (inBounds(r + dir, c) && !board[r + dir][c]) {
50
- moves.push([r + dir, c]);
51
- if (r === start && !board[r + 2 * dir][c]) moves.push([r + 2 * dir, c]);
52
- }
53
- for (const dc of [-1, 1]) {
54
- const nr = r + dir, nc = c + dc;
55
- if (inBounds(nr, nc) && board[nr][nc] && board[nr][nc].color !== p.color)
56
- moves.push([nr, nc]);
57
- }
58
- break;
59
- }
60
- case "R":
61
- [[-1, 0], [1, 0], [0, -1], [0, 1]].forEach(([dr, dc]) => slide(dr, dc));
62
- break;
63
- case "B":
64
- [[-1, -1], [-1, 1], [1, -1], [1, 1]].forEach(([dr, dc]) => slide(dr, dc));
65
- break;
66
- case "Q":
67
- [[-1, 0], [1, 0], [0, -1], [0, 1], [-1, -1], [-1, 1], [1, -1], [1, 1]].forEach(([dr, dc]) => slide(dr, dc));
68
- break;
69
- case "N":
70
- [[-2, -1], [-2, 1], [-1, -2], [-1, 2], [1, -2], [1, 2], [2, -1], [2, 1]].forEach(([dr, dc]) => add(r + dr, c + dc));
71
- break;
72
- case "K":
73
- [[-1, -1], [-1, 0], [-1, 1], [0, -1], [0, 1], [1, -1], [1, 0], [1, 1]].forEach(([dr, dc]) => add(r + dr, c + dc));
74
- break;
75
- }
76
- return moves;
77
- }
78
- function cloneBoard(b) {
79
- return b.map((row) => row.map((p) => p ? { ...p } : null));
80
- }
81
- function Chess() {
82
- const [board, setBoard] = useState(initBoard);
83
- const [selected, setSelected] = useState(null);
84
- const [validMoves, setValidMoves] = useState([]);
85
- const [turn, setTurn] = useState("w");
86
- const [captured, setCaptured] = useState({ w: [], b: [] });
87
- const [gameOver, setGameOver] = useState(false);
88
- const aiMove = useCallback((b, cap) => {
89
- const allMoves = [];
90
- for (let r = 0; r < 8; r++)
91
- for (let c = 0; c < 8; c++)
92
- if (b[r][c]?.color === "b")
93
- getValidMoves(b, [r, c]).forEach((to) => allMoves.push({ from: [r, c], to }));
94
- if (!allMoves.length) {
95
- setGameOver(true);
96
- return;
97
- }
98
- const m = allMoves[Math.floor(Math.random() * allMoves.length)];
99
- const nb = cloneBoard(b);
100
- const newCap = { w: [...cap.w], b: [...cap.b] };
101
- const target = nb[m.to[0]][m.to[1]];
102
- if (target) newCap.w.push(ICONS[target.color + target.type]);
103
- nb[m.to[0]][m.to[1]] = nb[m.from[0]][m.from[1]];
104
- nb[m.from[0]][m.from[1]] = null;
105
- setBoard(nb);
106
- setCaptured(newCap);
107
- setTurn("w");
108
- }, []);
109
- const handleClick = (r, c) => {
110
- if (gameOver || turn !== "w") return;
111
- if (selected) {
112
- if (validMoves.some(([mr, mc]) => mr === r && mc === c)) {
113
- const nb = cloneBoard(board);
114
- const newCap = { w: [...captured.w], b: [...captured.b] };
115
- const target = nb[r][c];
116
- if (target) newCap.b.push(ICONS[target.color + target.type]);
117
- nb[r][c] = nb[selected[0]][selected[1]];
118
- nb[selected[0]][selected[1]] = null;
119
- setBoard(nb);
120
- setCaptured(newCap);
121
- setSelected(null);
122
- setValidMoves([]);
123
- setTurn("b");
124
- setTimeout(() => aiMove(nb, newCap), 300);
125
- return;
126
- }
127
- if (board[r][c]?.color === "w") {
128
- setSelected([r, c]);
129
- setValidMoves(getValidMoves(board, [r, c]));
130
- return;
131
- }
132
- setSelected(null);
133
- setValidMoves([]);
134
- return;
135
- }
136
- if (board[r][c]?.color === "w") {
137
- setSelected([r, c]);
138
- setValidMoves(getValidMoves(board, [r, c]));
139
- }
140
- };
141
- const reset = () => {
142
- setBoard(initBoard());
143
- setSelected(null);
144
- setValidMoves([]);
145
- setTurn("w");
146
- setCaptured({ w: [], b: [] });
147
- setGameOver(false);
148
- };
149
- const isValid = (r, c) => validMoves.some(([mr, mc]) => mr === r && mc === c);
150
- const isSel = (r, c) => selected?.[0] === r && selected?.[1] === c;
151
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-3 p-4", children: [
152
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between w-full max-w-md", children: [
153
- /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-gray-700 dark:text-gray-200", children: gameOver ? "Game Over" : turn === "w" ? "\u2654 White to move" : "\u265A Black thinking..." }),
154
- /* @__PURE__ */ jsx("button", { onClick: reset, className: "px-3 py-1 text-xs font-medium bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-200 rounded hover:bg-gray-300 dark:hover:bg-gray-600", children: "New Game" })
155
- ] }),
156
- captured.b.length > 0 && /* @__PURE__ */ jsxs("div", { className: "text-sm text-gray-500 dark:text-gray-400 w-full max-w-md", children: [
157
- "Captured: ",
158
- captured.b.join(" ")
159
- ] }),
160
- /* @__PURE__ */ jsx("div", { className: "border-2 border-gray-700 dark:border-gray-400 rounded overflow-hidden", children: board.map((row, r) => /* @__PURE__ */ jsx("div", { className: "flex", children: row.map((piece, c) => {
161
- const light = (r + c) % 2 === 0;
162
- const sel = isSel(r, c);
163
- const valid = isValid(r, c);
164
- return /* @__PURE__ */ jsxs(
165
- "div",
166
- {
167
- onClick: () => handleClick(r, c),
168
- className: `w-[52px] h-[52px] flex items-center justify-center text-3xl cursor-pointer relative select-none
169
- ${light ? "bg-amber-100 dark:bg-amber-200" : "bg-amber-700 dark:bg-amber-800"}
170
- ${sel ? "ring-2 ring-inset ring-blue-500" : ""}
171
- ${valid && piece ? "ring-2 ring-inset ring-red-400" : ""}
172
- `,
173
- children: [
174
- piece && /* @__PURE__ */ jsx("span", { className: piece.color === "w" ? "text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]" : "text-gray-900 drop-shadow-[0_1px_1px_rgba(255,255,255,0.3)]", children: ICONS[piece.color + piece.type] }),
175
- valid && !piece && /* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-green-500 opacity-60" })
176
- ]
177
- },
178
- c
179
- );
180
- }) }, r)) }),
181
- captured.w.length > 0 && /* @__PURE__ */ jsxs("div", { className: "text-sm text-gray-500 dark:text-gray-400 w-full max-w-md", children: [
182
- "Captured: ",
183
- captured.w.join(" ")
184
- ] })
185
- ] });
186
- }
187
-
188
- export { Chess as default };
189
- //# sourceMappingURL=Chess-C5BY45NA.js.map
190
- //# sourceMappingURL=Chess-C5BY45NA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/apps/Chess.tsx"],"names":[],"mappings":"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","file":"Chess-C5BY45NA.js","sourcesContent":["import { useState, useCallback } from 'react'\n\ntype Piece = { type: string; color: 'w' | 'b' } | null\ntype Board = Piece[][]\ntype Pos = [number, number]\n\nconst ICONS: Record<string, string> = {\n wK: '♔', wQ: '♕', wR: '♖', wB: '♗', wN: '♘', wP: '♙',\n bK: '♚', bQ: '♛', bR: '♜', bB: '♝', bN: '♞', bP: '♟',\n}\n\nconst initBoard = (): Board => {\n const b: Board = Array.from({ length: 8 }, () => Array(8).fill(null))\n const back = ['R', 'N', 'B', 'Q', 'K', 'B', 'N', 'R']\n for (let c = 0; c < 8; c++) {\n b[0][c] = { type: back[c], color: 'b' }\n b[1][c] = { type: 'P', color: 'b' }\n b[6][c] = { type: 'P', color: 'w' }\n b[7][c] = { type: back[c], color: 'w' }\n }\n return b\n}\n\nconst inBounds = (r: number, c: number) => r >= 0 && r < 8 && c >= 0 && c < 8\n\nfunction getValidMoves(board: Board, [r, c]: Pos): Pos[] {\n const p = board[r][c]\n if (!p) return []\n const moves: Pos[] = []\n const add = (nr: number, nc: number) => {\n if (!inBounds(nr, nc)) return false\n const t = board[nr][nc]\n if (t && t.color === p.color) return false\n moves.push([nr, nc])\n return !t\n }\n const slide = (dr: number, dc: number) => {\n for (let i = 1; i < 8; i++) if (!add(r + dr * i, c + dc * i)) break\n }\n\n switch (p.type) {\n case 'P': {\n const dir = p.color === 'w' ? -1 : 1\n const start = p.color === 'w' ? 6 : 1\n if (inBounds(r + dir, c) && !board[r + dir][c]) {\n moves.push([r + dir, c])\n if (r === start && !board[r + 2 * dir][c]) moves.push([r + 2 * dir, c])\n }\n for (const dc of [-1, 1]) {\n const nr = r + dir, nc = c + dc\n if (inBounds(nr, nc) && board[nr][nc] && board[nr][nc]!.color !== p.color)\n moves.push([nr, nc])\n }\n break\n }\n case 'R': [[-1,0],[1,0],[0,-1],[0,1]].forEach(([dr,dc]) => slide(dr,dc)); break\n case 'B': [[-1,-1],[-1,1],[1,-1],[1,1]].forEach(([dr,dc]) => slide(dr,dc)); break\n case 'Q': [[-1,0],[1,0],[0,-1],[0,1],[-1,-1],[-1,1],[1,-1],[1,1]].forEach(([dr,dc]) => slide(dr,dc)); break\n case 'N': [[-2,-1],[-2,1],[-1,-2],[-1,2],[1,-2],[1,2],[2,-1],[2,1]].forEach(([dr,dc]) => add(r+dr,c+dc)); break\n case 'K': [[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1]].forEach(([dr,dc]) => add(r+dr,c+dc)); break\n }\n return moves\n}\n\nfunction cloneBoard(b: Board): Board { return b.map(row => row.map(p => p ? { ...p } : null)) }\n\nexport default function Chess() {\n const [board, setBoard] = useState<Board>(initBoard)\n const [selected, setSelected] = useState<Pos | null>(null)\n const [validMoves, setValidMoves] = useState<Pos[]>([])\n const [turn, setTurn] = useState<'w' | 'b'>('w')\n const [captured, setCaptured] = useState<{ w: string[]; b: string[] }>({ w: [], b: [] })\n const [gameOver, setGameOver] = useState(false)\n\n const aiMove = useCallback((b: Board, cap: { w: string[]; b: string[] }) => {\n const allMoves: { from: Pos; to: Pos }[] = []\n for (let r = 0; r < 8; r++)\n for (let c = 0; c < 8; c++)\n if (b[r][c]?.color === 'b')\n getValidMoves(b, [r, c]).forEach(to => allMoves.push({ from: [r, c], to }))\n if (!allMoves.length) { setGameOver(true); return }\n const m = allMoves[Math.floor(Math.random() * allMoves.length)]\n const nb = cloneBoard(b)\n const newCap = { w: [...cap.w], b: [...cap.b] }\n const target = nb[m.to[0]][m.to[1]]\n if (target) newCap.w.push(ICONS[target.color + target.type])\n nb[m.to[0]][m.to[1]] = nb[m.from[0]][m.from[1]]\n nb[m.from[0]][m.from[1]] = null\n setBoard(nb)\n setCaptured(newCap)\n setTurn('w')\n }, [])\n\n const handleClick = (r: number, c: number) => {\n if (gameOver || turn !== 'w') return\n if (selected) {\n if (validMoves.some(([mr, mc]) => mr === r && mc === c)) {\n const nb = cloneBoard(board)\n const newCap = { w: [...captured.w], b: [...captured.b] }\n const target = nb[r][c]\n if (target) newCap.b.push(ICONS[target.color + target.type])\n nb[r][c] = nb[selected[0]][selected[1]]\n nb[selected[0]][selected[1]] = null\n setBoard(nb)\n setCaptured(newCap)\n setSelected(null)\n setValidMoves([])\n setTurn('b')\n setTimeout(() => aiMove(nb, newCap), 300)\n return\n }\n if (board[r][c]?.color === 'w') {\n setSelected([r, c])\n setValidMoves(getValidMoves(board, [r, c]))\n return\n }\n setSelected(null)\n setValidMoves([])\n return\n }\n if (board[r][c]?.color === 'w') {\n setSelected([r, c])\n setValidMoves(getValidMoves(board, [r, c]))\n }\n }\n\n const reset = () => {\n setBoard(initBoard())\n setSelected(null)\n setValidMoves([])\n setTurn('w')\n setCaptured({ w: [], b: [] })\n setGameOver(false)\n }\n\n const isValid = (r: number, c: number) => validMoves.some(([mr, mc]) => mr === r && mc === c)\n const isSel = (r: number, c: number) => selected?.[0] === r && selected?.[1] === c\n\n return (\n <div className=\"flex flex-col items-center gap-3 p-4\">\n <div className=\"flex items-center justify-between w-full max-w-md\">\n <span className=\"text-sm font-semibold text-gray-700 dark:text-gray-200\">\n {gameOver ? 'Game Over' : turn === 'w' ? '♔ White to move' : '♚ Black thinking...'}\n </span>\n <button onClick={reset} className=\"px-3 py-1 text-xs font-medium bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-200 rounded hover:bg-gray-300 dark:hover:bg-gray-600\">\n New Game\n </button>\n </div>\n\n {captured.b.length > 0 && (\n <div className=\"text-sm text-gray-500 dark:text-gray-400 w-full max-w-md\">\n Captured: {captured.b.join(' ')}\n </div>\n )}\n\n <div className=\"border-2 border-gray-700 dark:border-gray-400 rounded overflow-hidden\">\n {board.map((row, r) => (\n <div key={r} className=\"flex\">\n {row.map((piece, c) => {\n const light = (r + c) % 2 === 0\n const sel = isSel(r, c)\n const valid = isValid(r, c)\n return (\n <div\n key={c}\n onClick={() => handleClick(r, c)}\n className={`w-[52px] h-[52px] flex items-center justify-center text-3xl cursor-pointer relative select-none\n ${light ? 'bg-amber-100 dark:bg-amber-200' : 'bg-amber-700 dark:bg-amber-800'}\n ${sel ? 'ring-2 ring-inset ring-blue-500' : ''}\n ${valid && piece ? 'ring-2 ring-inset ring-red-400' : ''}\n `}\n >\n {piece && <span className={piece.color === 'w' ? 'text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]' : 'text-gray-900 drop-shadow-[0_1px_1px_rgba(255,255,255,0.3)]'}>\n {ICONS[piece.color + piece.type]}\n </span>}\n {valid && !piece && <div className=\"w-3 h-3 rounded-full bg-green-500 opacity-60\" />}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n\n {captured.w.length > 0 && (\n <div className=\"text-sm text-gray-500 dark:text-gray-400 w-full max-w-md\">\n Captured: {captured.w.join(' ')}\n </div>\n )}\n </div>\n )\n}\n"]}
@@ -1,13 +0,0 @@
1
- export { Files as default, openFilesInTrashMode, setFilesDemoTree } from './chunk-4PSDLG2P.js';
2
- import './chunk-VAMMHJR3.js';
3
- import './chunk-VGTEM5RZ.js';
4
- import './chunk-Q3USVEUR.js';
5
- import './chunk-KUIPWCTJ.js';
6
- import './chunk-WIJ45SYD.js';
7
- import './chunk-KKEWB6RG.js';
8
- import './chunk-32CXFFKW.js';
9
- import './chunk-GWVVILYQ.js';
10
- import './chunk-UBN4IUDE.js';
11
- import './chunk-ZF6AYO4G.js';
12
- //# sourceMappingURL=Files-3455T525.js.map
13
- //# sourceMappingURL=Files-3455T525.js.map