diff --git a/package-lock.json b/package-lock.json index 4ef3a42..51646e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tictactoe-vite", - "version": "1.0.0", + "version": "v0.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tictactoe-vite", - "version": "1.0.0", + "version": "v0.2.0", "dependencies": { "@emotion/react": "latest", "@emotion/styled": "latest", @@ -14,6 +14,7 @@ "@mui/icons-material": "latest", "@mui/material": "latest", "axios": "latest", + "framer-motion": "latest", "markdown-to-jsx": "latest", "marked": "latest", "react": "latest", @@ -2064,6 +2065,33 @@ "node": ">= 6" } }, + "node_modules/framer-motion": { + "version": "12.23.24", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.24.tgz", + "integrity": "sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.23", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -3263,6 +3291,21 @@ "node": ">= 0.6" } }, + "node_modules/motion-dom": { + "version": "12.23.23", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz", + "integrity": "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3761,6 +3804,12 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/unified": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", diff --git a/package.json b/package.json index a3f130d..e4221d9 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "remark-gfm": "latest", "marked": "latest", "axios": "latest", - "@heroiclabs/nakama-js": "^2.8.0" + "@heroiclabs/nakama-js": "^2.8.0", + "framer-motion": "latest" }, "devDependencies": { "@vitejs/plugin-react": "latest", diff --git a/src/tictactoe/Player.tsx b/src/tictactoe/Player.tsx index 149b307..64880f1 100644 --- a/src/tictactoe/Player.tsx +++ b/src/tictactoe/Player.tsx @@ -1,4 +1,5 @@ import React, { useEffect, useState } from "react"; +import { motion, AnimatePresence } from "framer-motion"; import Leaderboard from "./Leaderboard"; import { useNakama } from "./providers/NakamaProvider"; @@ -45,38 +46,167 @@ export default function Player({ return (