{"ast":null,"code":"var _jsxFileName = \"/home/violet/documents/development/portfolio/public/src/App.js\",\n _s = $RefreshSig$();\nimport { useState } from 'react';\nimport { jsxDEV as _jsxDEV, Fragment as _Fragment } from \"react/jsx-dev-runtime\";\nfunction Square({\n value,\n onSquareClick\n}) {\n return /*#__PURE__*/_jsxDEV(\"button\", {\n className: \"square\",\n onClick: onSquareClick,\n children: value\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 5,\n columnNumber: 5\n }, this);\n}\n_c = Square;\nfunction Board({\n xIsNext,\n squares,\n onPlay\n}) {\n function handleClick(i) {\n if (calculateWinner(squares) || squares[i]) {\n return;\n }\n const nextSquares = squares.slice();\n if (xIsNext) {\n nextSquares[i] = 'X';\n } else {\n nextSquares[i] = 'O';\n }\n onPlay(nextSquares);\n }\n const winner = calculateWinner(squares);\n let status;\n if (winner) {\n status = 'Winner: ' + winner;\n } else {\n status = 'Next player: ' + (xIsNext ? 'X' : 'O');\n }\n return /*#__PURE__*/_jsxDEV(_Fragment, {\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"status\",\n children: status\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 35,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"board-row\",\n children: [/*#__PURE__*/_jsxDEV(Square, {\n value: squares[0],\n onSquareClick: () => handleClick(0)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 37,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(Square, {\n value: squares[1],\n onSquareClick: () => handleClick(1)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 38,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(Square, {\n value: squares[2],\n onSquareClick: () => handleClick(2)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 39,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 36,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"board-row\",\n children: [/*#__PURE__*/_jsxDEV(Square, {\n value: squares[3],\n onSquareClick: () => handleClick(3)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 42,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(Square, {\n value: squares[4],\n onSquareClick: () => handleClick(4)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 43,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(Square, {\n value: squares[5],\n onSquareClick: () => handleClick(5)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 44,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 41,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"board-row\",\n children: [/*#__PURE__*/_jsxDEV(Square, {\n value: squares[6],\n onSquareClick: () => handleClick(6)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 47,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(Square, {\n value: squares[7],\n onSquareClick: () => handleClick(7)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 48,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(Square, {\n value: squares[8],\n onSquareClick: () => handleClick(8)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 49,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 46,\n columnNumber: 7\n }, this)]\n }, void 0, true);\n}\n_c2 = Board;\nexport default function Game() {\n _s();\n const [history, setHistory] = useState([Array(9).fill(null)]);\n const [currentMove, setCurrentMove] = useState(0);\n const xIsNext = currentMove % 2 === 0;\n const currentSquares = history[currentMove];\n function handlePlay(nextSquares) {\n const nextHistory = [...history.slice(0, currentMove + 1), nextSquares];\n setHistory(nextHistory);\n setCurrentMove(nextHistory.length - 1);\n }\n function jumpTo(nextMove) {\n setCurrentMove(nextMove);\n }\n const moves = history.map((squares, move) => {\n let description;\n if (move > 0) {\n description = 'Go to move #' + move;\n } else {\n description = 'Go to game start';\n }\n return /*#__PURE__*/_jsxDEV(\"li\", {\n children: /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => jumpTo(move),\n children: description\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 80,\n columnNumber: 9\n }, this)\n }, move, false, {\n fileName: _jsxFileName,\n lineNumber: 79,\n columnNumber: 7\n }, this);\n });\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"game\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"game-board\",\n children: /*#__PURE__*/_jsxDEV(Board, {\n xIsNext: xIsNext,\n squares: currentSquares,\n onPlay: handlePlay\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 88,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 87,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"game-info\",\n children: /*#__PURE__*/_jsxDEV(\"ol\", {\n children: moves\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 91,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 90,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 86,\n columnNumber: 5\n }, this);\n}\n_s(Game, \"xZZdy1/aP1agxyjHn6CL01lXnXc=\");\n_c3 = Game;\nfunction calculateWinner(squares) {\n const lines = [[0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6]];\n for (let i = 0; i < lines.length; i++) {\n const [a, b, c] = lines[i];\n if (squares[a] && squares[a] === squares[b] && squares[a] === squares[c]) {\n return squares[a];\n }\n }\n return null;\n}\nvar _c, _c2, _c3;\n$RefreshReg$(_c, \"Square\");\n$RefreshReg$(_c2, \"Board\");\n$RefreshReg$(_c3, \"Game\");","map":{"version":3,"names":["useState","jsxDEV","_jsxDEV","Fragment","_Fragment","Square","value","onSquareClick","className","onClick","children","fileName","_jsxFileName","lineNumber","columnNumber","_c","Board","xIsNext","squares","onPlay","handleClick","i","calculateWinner","nextSquares","slice","winner","status","_c2","Game","_s","history","setHistory","Array","fill","currentMove","setCurrentMove","currentSquares","handlePlay","nextHistory","length","jumpTo","nextMove","moves","map","move","description","_c3","lines","a","b","c","$RefreshReg$"],"sources":["/home/violet/documents/development/portfolio/public/src/App.js"],"sourcesContent":["import { useState } from 'react';\n\nfunction Square({ value, onSquareClick }) {\n return (\n \n );\n}\n\nfunction Board({ xIsNext, squares, onPlay }) {\n function handleClick(i) {\n if (calculateWinner(squares) || squares[i]) {\n return;\n }\n const nextSquares = squares.slice();\n if (xIsNext) {\n nextSquares[i] = 'X';\n } else {\n nextSquares[i] = 'O';\n }\n onPlay(nextSquares);\n }\n\n const winner = calculateWinner(squares);\n let status;\n if (winner) {\n status = 'Winner: ' + winner;\n } else {\n status = 'Next player: ' + (xIsNext ? 'X' : 'O');\n }\n\n return (\n <>\n