diff --git a/README.md b/README.md index 97db131..dc8a7f0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ ## SDK Docs: [link](https://docs.puzzle.online/guides/getting_started/) -## Where's Alex Leo Program Docs: [link](https://github.com/puzzlehq/serengeti/blob/main/README.md) +## Treasure Hunt Leo Program Docs: [link](https://github.com/puzzlehq/serengeti/blob/main/README.md) ## Puzzle Wallet Download [link](https://chromewebstore.google.com/detail/puzzle-wallet/fdchdcpieegfofnofhgdombfckhbcokj) ## Puzzle Devtools [link](https://dev.puzzle.online/) diff --git a/index.html b/index.html index a183d4a..9e5fb86 100644 --- a/index.html +++ b/index.html @@ -2,9 +2,12 @@ - + - Where's Alex? + + + + Treasure Hunt
diff --git a/package.json b/package.json index f565656..b1b09ae 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "wheres-alex", + "name": "treasure-hunt", "version": "0.0.0", "type": "module", "scripts": { @@ -7,17 +7,18 @@ "type-check": "tsc --noEmit", "build": "tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" + "preview": "vite preview", + "format": "prettier --write \"**/*.{ts,tsx,js,jsx}\"" }, "dependencies": { - "@puzzlehq/sdk": "0.1.31", + "@puzzlehq/sdk": "0.1.34", "@puzzlehq/types": "^1.0.3", + "class-variance-authority": "^0.7.0", "html5-qrcode": "^2.3.8", "immer": "^10.0.3", "jotai": "^2.5.1", "js-yaml": "^4.1.0", "lodash": "^4.17.21", - "prettier": "^3.0.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.17.0", @@ -27,18 +28,19 @@ "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-modules-polyfill": "^0.1.4", "@rollup/plugin-inject": "^5.0.3", + "@types/js-yaml": "^4.0.5", "@types/lodash": "^4.14.201", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "@vitejs/plugin-react": "^4.0.3", - "@types/js-yaml": "^4.0.5", "autoprefixer": "^10.4.15", "eslint": "^8.45.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", "postcss": "^8.4.29", + "prettier": "^3.0.3", "prettier-plugin-tailwindcss": "^0.5.6", "rollup-plugin-polyfill-node": "^0.11.0", "sdk": "link:@types/puzzlehq/sdk", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 830832b..6ad6b61 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,11 +6,14 @@ settings: dependencies: '@puzzlehq/sdk': - specifier: 0.1.31 - version: 0.1.31(@types/react@18.2.37)(react-dom@18.2.0) + specifier: 0.1.34 + version: 0.1.34(@types/react@18.2.37)(react-dom@18.2.0) '@puzzlehq/types': specifier: ^1.0.3 version: 1.0.3 + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 html5-qrcode: specifier: ^2.3.8 version: 2.3.8 @@ -26,9 +29,6 @@ dependencies: lodash: specifier: ^4.17.21 version: 4.17.21 - prettier: - specifier: ^3.0.3 - version: 3.0.3 react: specifier: ^18.2.0 version: 18.2.0 @@ -88,6 +88,9 @@ devDependencies: postcss: specifier: ^8.4.29 version: 8.4.31 + prettier: + specifier: ^3.0.3 + version: 3.0.3 prettier-plugin-tailwindcss: specifier: ^0.5.6 version: 0.5.7(prettier@3.0.3) @@ -889,13 +892,13 @@ packages: '@parcel/watcher-win32-x64': 2.3.0 dev: false - /@puzzlehq/sdk@0.1.31(@types/react@18.2.37)(react-dom@18.2.0): - resolution: {integrity: sha512-+COLYjRmXKm98J+/ixv8bDiAvdpUHoXlrK05Efz8iDbFALHleeTvcaH7OK5pJUGCFoJ7qBo3oCdP0mo0ZC0O+g==} + /@puzzlehq/sdk@0.1.34(@types/react@18.2.37)(react-dom@18.2.0): + resolution: {integrity: sha512-e7LhxSc+8hoFixXqRKLumeOTtgfw5uJZXX7HwtOBW1XOzS3K8Y7dfVLtDC+a3CJZ6vhM7Gy4KpYllbuModltbw==} dependencies: '@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0) - '@trpc/client': 10.43.6(@trpc/server@10.43.6) - '@trpc/react-query': 10.43.6(@tanstack/react-query@4.36.1)(@trpc/client@10.43.6)(@trpc/server@10.43.6)(react-dom@18.2.0)(react@18.2.0) - '@trpc/server': 10.43.6 + '@trpc/client': 10.44.0(@trpc/server@10.44.0) + '@trpc/react-query': 10.44.0(@tanstack/react-query@4.36.1)(@trpc/client@10.44.0)(@trpc/server@10.44.0)(react-dom@18.2.0)(react@18.2.0) + '@trpc/server': 10.44.0 '@types/debug': 4.1.12 '@walletconnect/modal-sign-html': 2.6.2(@types/react@18.2.37)(react@18.2.0) '@walletconnect/types': 2.10.5 @@ -1104,32 +1107,32 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - /@trpc/client@10.43.6(@trpc/server@10.43.6): - resolution: {integrity: sha512-gQSxCQgPeBn/wqBEScu5Nq9UKqA16e965vWBj+BbdvI4URV72T44/yg0cl/E6xtBgycCVwdzwn7CuZaM8FA/VQ==} + /@trpc/client@10.44.0(@trpc/server@10.44.0): + resolution: {integrity: sha512-6PAL5rXMGTMlsKKGW9aBsij8XFBbLUbOCJ7jNVX3IripGqiQG3b/VJyTsHRWkss/oaz/sZMOn62amhfev1UVfg==} peerDependencies: - '@trpc/server': 10.43.6 + '@trpc/server': 10.44.0 dependencies: - '@trpc/server': 10.43.6 + '@trpc/server': 10.44.0 dev: false - /@trpc/react-query@10.43.6(@tanstack/react-query@4.36.1)(@trpc/client@10.43.6)(@trpc/server@10.43.6)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Twf0/wvcrDwmaJ6OLf0YVNwiv8+gtoSFyKYqe+5lMkFtUYSl+4KGvSqiN9ynbnofHCvuPgjJmjdS8pxYkcWxCw==} + /@trpc/react-query@10.44.0(@tanstack/react-query@4.36.1)(@trpc/client@10.44.0)(@trpc/server@10.44.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-0l9mar1kSamm/sePnHOuhX8v9LFQbgpVJ2U2s/hWnScNexBFzV03SpCjLAkXtiIapw5lkIG0QlveZXu4G86Xnw==} peerDependencies: '@tanstack/react-query': ^4.18.0 - '@trpc/client': 10.43.6 - '@trpc/server': 10.43.6 + '@trpc/client': 10.44.0 + '@trpc/server': 10.44.0 react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: '@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0) - '@trpc/client': 10.43.6(@trpc/server@10.43.6) - '@trpc/server': 10.43.6 + '@trpc/client': 10.44.0(@trpc/server@10.44.0) + '@trpc/server': 10.44.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@trpc/server@10.43.6: - resolution: {integrity: sha512-ziN7UXGAycxe4i3FwJstTe6jzCcKBlPociCrC9XtfPzFpMTf0hNbRQQlFiZjJk23ZGQSVYDjk9RO4yIHt94mJg==} + /@trpc/server@10.44.0: + resolution: {integrity: sha512-QBq/FnjyU6a7CAl9p2dv6kApn2i8MFuPt8uVLyGr0oa2aFv31rHaX0m+ibdsviE/3fOJIC8EUOfMYOJma5uK2w==} engines: {node: '>=18.0.0'} dev: false @@ -1211,8 +1214,8 @@ packages: resolution: {integrity: sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==} dev: true - /@types/trusted-types@2.0.6: - resolution: {integrity: sha512-HYtNooPvUY9WAVRBr4u+4Qa9fYD1ze2IUlAD3HoA6oehn1taGwBx3Oa52U4mTslTS+GAExKpaFu39Y5xUEwfjg==} + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} dev: false /@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2): @@ -1907,12 +1910,18 @@ packages: optionalDependencies: fsevents: 2.3.3 - /citty@0.1.4: - resolution: {integrity: sha512-Q3bK1huLxzQrvj7hImJ7Z1vKYJRPQCDnd0EjXfHMidcjecGOMuLrmuQmtWmFkuKLcMThlGh1yCKG8IEc6VeNXQ==} + /citty@0.1.5: + resolution: {integrity: sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ==} dependencies: consola: 3.2.3 dev: false + /class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + dependencies: + clsx: 2.0.0 + dev: false + /clipboardy@3.0.0: resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1930,6 +1939,11 @@ packages: wrap-ansi: 6.2.0 dev: false + /clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + dev: false + /cluster-key-slot@1.1.2: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} @@ -2459,17 +2473,17 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /h3@1.8.2: - resolution: {integrity: sha512-1Ca0orJJlCaiFY68BvzQtP2lKLk46kcLAxVM8JgYbtm2cUg6IY7pjpYgWMwUvDO9QI30N5JAukOKoT8KD3Q0PQ==} + /h3@1.9.0: + resolution: {integrity: sha512-+F3ZqrNV/CFXXfZ2lXBINHi+rM4Xw3CDC5z2CDK3NMPocjonKipGLLDSkrqY9DOrioZNPTIdDMWfQKm//3X2DA==} dependencies: cookie-es: 1.0.0 defu: 6.1.3 destr: 2.0.2 - iron-webcrypto: 0.10.1 + iron-webcrypto: 1.0.0 radix3: 1.1.0 ufo: 1.3.2 uncrypto: 0.1.3 - unenv: 1.7.4 + unenv: 1.8.0 dev: false /has-flag@3.0.0: @@ -2564,8 +2578,8 @@ packages: - supports-color dev: false - /iron-webcrypto@0.10.1: - resolution: {integrity: sha512-QGOS8MRMnj/UiOa+aMIgfyHcvkhqNUsUxb1XzskENvbo+rEfp6TOwqd1KPuDzXC4OnGHcMSVxDGRoilqB8ViqA==} + /iron-webcrypto@1.0.0: + resolution: {integrity: sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg==} dev: false /is-binary-path@2.1.0: @@ -2715,12 +2729,12 @@ packages: dependencies: '@parcel/watcher': 2.3.0 '@parcel/watcher-wasm': 2.3.0 - citty: 0.1.4 + citty: 0.1.5 clipboardy: 3.0.0 consola: 3.2.3 defu: 6.1.3 get-port-please: 3.1.1 - h3: 1.8.2 + h3: 1.9.0 http-shutdown: 1.2.2 jiti: 1.21.0 mlly: 1.4.2 @@ -2743,7 +2757,7 @@ packages: /lit-html@2.8.0: resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} dependencies: - '@types/trusted-types': 2.0.6 + '@types/trusted-types': 2.0.7 dev: false /lit@2.8.0: @@ -2795,11 +2809,9 @@ packages: js-tokens: 4.0.0 dev: false - /lru-cache@10.0.2: - resolution: {integrity: sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==} + /lru-cache@10.1.0: + resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} engines: {node: 14 || >=16.14} - dependencies: - semver: 7.5.4 dev: false /lru-cache@5.1.1: @@ -2813,6 +2825,7 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 + dev: true /magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} @@ -3252,6 +3265,7 @@ packages: resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} engines: {node: '>=14'} hasBin: true + dev: true /process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} @@ -3487,6 +3501,7 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -3736,8 +3751,8 @@ packages: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} dev: false - /unenv@1.7.4: - resolution: {integrity: sha512-fjYsXYi30It0YCQYqLOcT6fHfMXsBr2hw9XC7ycf8rTG7Xxpe3ZssiqUnD0khrjiZEmkBXWLwm42yCSCH46fMw==} + /unenv@1.8.0: + resolution: {integrity: sha512-uIGbdCWZfhRRmyKj1UioCepQ0jpq638j/Cf0xFTn4zD1nGJ2lSdzYHLzfdXN791oo/0juUiSWW1fBklXMTsuqg==} dependencies: consola: 3.2.3 defu: 6.1.3 @@ -3790,11 +3805,11 @@ packages: anymatch: 3.1.3 chokidar: 3.5.3 destr: 2.0.2 - h3: 1.8.2 + h3: 1.9.0 idb-keyval: 6.2.1 ioredis: 5.3.2 listhen: 1.5.5 - lru-cache: 10.0.2 + lru-cache: 10.1.0 mri: 1.2.0 node-fetch-native: 1.4.1 ofetch: 1.3.3 @@ -3807,7 +3822,7 @@ packages: resolution: {integrity: sha512-wLAMWvxfqyTiBODA1lg3IXHQtjggYLeTK7RnSfqtOXixWJ3bAa2kK/HHmOOg19upteqO3muLvN6O/icbyQY33Q==} hasBin: true dependencies: - citty: 0.1.4 + citty: 0.1.5 consola: 3.2.3 pathe: 1.1.1 dev: false @@ -3971,6 +3986,7 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} diff --git a/public/alex_head.png b/public/alex_head.png deleted file mode 100644 index 8e8e11c..0000000 Binary files a/public/alex_head.png and /dev/null differ diff --git a/public/treasure_open_full.png b/public/treasure_open_full.png new file mode 100644 index 0000000..eb1d9ac Binary files /dev/null and b/public/treasure_open_full.png differ diff --git a/src/App.tsx b/src/App.tsx index 40cf934..20e9d0a 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -3,7 +3,12 @@ import NewGame from './pages/NewGame/index.js'; import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'; import { AppHeader } from './components/Header.js'; import { Welcome } from './pages/Welcome.js'; -import { useAccount, Record, getRecords, useOnSessionEvent } from '@puzzlehq/sdk'; +import { + useAccount, + Record, + getRecords, + useOnSessionEvent, +} from '@puzzlehq/sdk'; import AcceptGame from './pages/AcceptGame/index.js'; import { LoseRoute } from './pages/ClaimPrize/Lose/index.js'; import WinRoute from './pages/ClaimPrize/Win/index.js'; @@ -12,29 +17,45 @@ import Reveal from './pages/FinishGame/_01_Reveal.js'; import { useEffect, useState } from 'react'; import { useGameStore } from './state/store.js'; import { usePieces } from './state/usePieces.js'; +import { atom } from 'jotai'; +import MapImage from './components/MapImage.js'; + +export const mapStepAtom = atom(false); // false for image, true for gif function App() { const { account } = useAccount(); - const [gameRecords, setGameRecords] = useState(undefined); - const [puzzleRecords, setPuzzleRecords] = useState(undefined); - const [utilRecords, setUtilRecords] = useState(undefined); + const [gameRecords, setGameRecords] = useState( + undefined + ); + const [puzzleRecords, setPuzzleRecords] = useState( + undefined + ); + const [utilRecords, setUtilRecords] = useState( + undefined + ); const [setRecords] = useGameStore((state) => [state.setRecords]); const fetchRecords = () => { // fetch gameRecords - getRecords({ filter: { programId: 'wheres_alex.aleo', type: 'unspent' } }).then((response) => { - setGameRecords(response.records ?? []) + getRecords({ + filter: { programId: 'wheres_alex.aleo', type: 'unspent' }, + }).then((response) => { + setGameRecords(response.records ?? []); }); // fetch puzzleRecords - getRecords({ filter: { programId: 'puzzle_pieces_v007.aleo', type: 'unspent' } }).then((response) => { + getRecords({ + filter: { programId: 'puzzle_pieces_v007.aleo', type: 'unspent' }, + }).then((response) => { setPuzzleRecords(response.records ?? []); }); // fetch utilRecords - getRecords({ filter: { programId: 'wheres_alex.aleo', type: 'unspent' } }).then((response) => { + getRecords({ + filter: { programId: 'wheres_alex.aleo', type: 'unspent' }, + }).then((response) => { setUtilRecords(response.records ?? []); }); - } + }; const { refetch: refetchPieces } = usePieces(); @@ -47,40 +68,41 @@ function App() { }); useEffect(() => { - if (gameRecords !== undefined && puzzleRecords !== undefined && utilRecords !== undefined) { + if ( + gameRecords !== undefined && + puzzleRecords !== undefined && + utilRecords !== undefined + ) { setRecords({ gameRecords, puzzleRecords, utilRecords }); } - }, [gameRecords, puzzleRecords, utilRecords]) + }, [gameRecords, puzzleRecords, utilRecords]); useEffect(() => { fetchRecords(); - }, []) + }, []); return ( -
-
- {account && account?.address && ( - - )} +
+
+
} /> - }/> + } /> - }/> - }/> + } /> + } /> - } /> - } /> - : } - /> + } /> + } /> + } /> + } />
+
); } diff --git a/src/assets/alex_behind_wall.png b/src/assets/alex_behind_wall.png deleted file mode 100644 index 79db666..0000000 Binary files a/src/assets/alex_behind_wall.png and /dev/null differ diff --git a/src/assets/alex_head.png b/src/assets/alex_head.png deleted file mode 100644 index 26774c4..0000000 Binary files a/src/assets/alex_head.png and /dev/null differ diff --git a/src/assets/alex_mic_left_tilt.png b/src/assets/alex_mic_left_tilt.png deleted file mode 100644 index 031cbe5..0000000 Binary files a/src/assets/alex_mic_left_tilt.png and /dev/null differ diff --git a/src/assets/alex_mic_right_tilt.png b/src/assets/alex_mic_right_tilt.png deleted file mode 100644 index 6e14729..0000000 Binary files a/src/assets/alex_mic_right_tilt.png and /dev/null differ diff --git a/src/assets/alexbottom.png b/src/assets/alexbottom.png deleted file mode 100644 index e7ba821..0000000 Binary files a/src/assets/alexbottom.png and /dev/null differ diff --git a/src/assets/behind_building.svg b/src/assets/behind_building.svg deleted file mode 100644 index cba4cc8..0000000 --- a/src/assets/behind_building.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/assets/in_weeds.jpg b/src/assets/in_weeds.jpg deleted file mode 100644 index ab94817..0000000 Binary files a/src/assets/in_weeds.jpg and /dev/null differ diff --git a/src/assets/in_weeds_old.png b/src/assets/in_weeds_old.png deleted file mode 100644 index 530d490..0000000 Binary files a/src/assets/in_weeds_old.png and /dev/null differ diff --git a/src/assets/map/map_0.png b/src/assets/map/map_0.png new file mode 100644 index 0000000..30234c3 Binary files /dev/null and b/src/assets/map/map_0.png differ diff --git a/src/assets/map/map_1.png b/src/assets/map/map_1.png new file mode 100644 index 0000000..fa6ad62 Binary files /dev/null and b/src/assets/map/map_1.png differ diff --git a/src/assets/map/map_2.png b/src/assets/map/map_2.png new file mode 100644 index 0000000..2f53c50 Binary files /dev/null and b/src/assets/map/map_2.png differ diff --git a/src/assets/map/map_3.png b/src/assets/map/map_3.png new file mode 100644 index 0000000..3f10401 Binary files /dev/null and b/src/assets/map/map_3.png differ diff --git a/src/assets/map/map_gif.gif b/src/assets/map/map_gif.gif new file mode 100644 index 0000000..ece496b Binary files /dev/null and b/src/assets/map/map_gif.gif differ diff --git a/src/assets/puzzle_tilt_left.png b/src/assets/puzzle_tilt_left.png deleted file mode 100644 index a0f2ac5..0000000 Binary files a/src/assets/puzzle_tilt_left.png and /dev/null differ diff --git a/src/assets/puzzle_tilt_right.png b/src/assets/puzzle_tilt_right.png deleted file mode 100644 index 3f4fe29..0000000 Binary files a/src/assets/puzzle_tilt_right.png and /dev/null differ diff --git a/src/assets/puzzle_upside_down_left.png b/src/assets/puzzle_upside_down_left.png deleted file mode 100644 index 6d70a5c..0000000 Binary files a/src/assets/puzzle_upside_down_left.png and /dev/null differ diff --git a/src/assets/puzzle_upside_down_right.png b/src/assets/puzzle_upside_down_right.png deleted file mode 100644 index b9a362d..0000000 Binary files a/src/assets/puzzle_upside_down_right.png and /dev/null differ diff --git a/src/assets/swaggers.png b/src/assets/swaggers.png new file mode 100644 index 0000000..e881e24 Binary files /dev/null and b/src/assets/swaggers.png differ diff --git a/src/assets/treasure_closed.png b/src/assets/treasure_closed.png new file mode 100644 index 0000000..483f570 Binary files /dev/null and b/src/assets/treasure_closed.png differ diff --git a/src/assets/treasure_map.png b/src/assets/treasure_map.png new file mode 100644 index 0000000..30234c3 Binary files /dev/null and b/src/assets/treasure_map.png differ diff --git a/src/assets/treasure_open_empty.png b/src/assets/treasure_open_empty.png new file mode 100644 index 0000000..09b778e Binary files /dev/null and b/src/assets/treasure_open_empty.png differ diff --git a/src/assets/treasure_open_full.png b/src/assets/treasure_open_full.png new file mode 100644 index 0000000..eb1d9ac Binary files /dev/null and b/src/assets/treasure_open_full.png differ diff --git a/src/components/Banner.tsx b/src/components/Banner.tsx new file mode 100644 index 0000000..446e91f --- /dev/null +++ b/src/components/Banner.tsx @@ -0,0 +1,67 @@ +import Button from './Button'; +import Nav from './Nav'; + +export type BannerProps = { + title: React.ReactNode; + body: React.ReactNode; + step: number; + totalSteps: number; + leftDisabled?: boolean; + rightDisabled?: boolean; + onClickLeft: () => void; + onClickRight: () => void; +}; + +export const Banner = ({ + title, + body, + step, + totalSteps, + leftDisabled = false, + rightDisabled = false, + onClickLeft, + onClickRight, +}: BannerProps) => { + return ( +
+

+ {title} +

+
+ {body} +
+
+ + +
+
+ ); +}; + +export const NakedBanner = ({ + title, + body, +}: { + title: React.ReactNode; + body: React.ReactNode; +}) => { + return ( +
+

+ {title} +

+
+ {body} +
+
+ ); +}; diff --git a/src/components/Button.tsx b/src/components/Button.tsx index 7bdcad3..fccfeb5 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -1,25 +1,47 @@ import * as React from 'react'; -import { theme } from '../theme'; +import { cva, type VariantProps } from 'class-variance-authority'; -export interface ButtonProps extends React.ButtonHTMLAttributes{ - color: 'blue' | 'pink' | 'green' | 'yellow' | 'gray' | 'white' | 'red' | 'transparent'; - size?: 'lg' | 'sm'; - children?: React.ReactNode; -} +const buttonVariants = cva( + 'inline-flex items-center justify-center rounded-full ring-offset-white transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-950 focus-visible:ring-offset-2 disabled:pointer-events-none', + { + variants: { + variant: { + primary: 'bg-primary disabled:opacity-40 font-header text-black', + secondary: 'bg-bg1 border-bg2 border-[5px] disabled:opacity-40', + green: 'bg-primary-green disabled:opacity-40', + red: 'bg-primary-red disabled:opacity-40', + gray: 'bg-bg2 disabled:opacity-40', + transparent: 'bg-transparent disabled:opacity-40', + }, + size: { + md: 'h-10 rounded-full px-3 py-2 text-[24px]', + lg: 'h-22 rounded-full px-8 py-3 text-[36px]', + }, + }, + defaultVariants: { + variant: 'primary', + size: 'lg', + }, + } +); -const Button = ({ className, color = 'green', size = 'lg', ...props }: ButtonProps) => { - const bgColor = 'primary-' + color; +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean; + fullWidth?: boolean; +} +const Button = ({ className, variant, size, ...props }: ButtonProps) => { return ( - ) -} - -export default ChooseAlexLocation; diff --git a/src/components/ChooseTreasureLocation.tsx b/src/components/ChooseTreasureLocation.tsx new file mode 100644 index 0000000..b0eeea7 --- /dev/null +++ b/src/components/ChooseTreasureLocation.tsx @@ -0,0 +1,89 @@ +import treasure_closed from '../assets/treasure_closed.png'; +import { Answer } from '../state/game_states'; + +type HideTreasureProps = { + setAnswer?: (answer: Answer) => void; + answer?: Answer; + hiding: boolean; // are we hiding alex? or finding alex? +}; + +function ChooseTreasureLocation({ + setAnswer, + answer, + hiding, +}: HideTreasureProps) { + return ( +
+
+ setAnswer && setAnswer(Answer.left)} + selected={answer ? answer === Answer.left : undefined} + /> + setAnswer && setAnswer(Answer.right)} + selected={answer ? answer === Answer.right : undefined} + /> +
+ {/*

+ {((): string => { + if (answer === undefined && hiding) { + return 'Choose where to hide the Treasure' + } else if (hiding) { + return `You chose to hide the Treasure on the ${answer}` + } else { + return `You think Treasure is on the ${answer}` + } + })()} +

*/} +
+ ); +} + +type TreasureButtonProps = { + imgSrc: string; + text: string; + selected?: boolean; + onClick: () => void; +}; + +const TreasureButton = ({ + imgSrc, + text, + selected, + onClick, +}: TreasureButtonProps) => { + return ( + + ); +}; + +export default ChooseTreasureLocation; diff --git a/src/components/GameInfo.tsx b/src/components/GameInfo.tsx index 115e743..77402bc 100644 --- a/src/components/GameInfo.tsx +++ b/src/components/GameInfo.tsx @@ -1,19 +1,19 @@ -import alexHeadImg from '../assets/alex_head.png'; - -function GameInfo(props: { multisig: string, eventId: string, newGame: boolean }) { +import treasure from '../assets/treasure_open_full.png'; +function GameInfo(props: { + multisig: string; + eventId: string; + newGame: boolean; +}) { return ( -
+
Alex head -
-

- {props.newGame ? 'GAME BEGUN!' : 'GAME SUBMITTED!'} -

-

+

+

GAME ID: {props.multisig}

diff --git a/src/components/Header.tsx b/src/components/Header.tsx index c3502f8..7d1d2f0 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -1,31 +1,52 @@ import { useDisconnect, shortenAddress, useAccount } from '@puzzlehq/sdk'; +import swaggers from '../assets/swaggers.png'; import Button from './Button'; +import { useAtom } from 'jotai'; +import { acceptGameInputsAtom, acceptGameStepAtom } from '../pages/AcceptGame'; +import { proposeGameInputsAtom, proposeGameStepAtom } from '../pages/NewGame'; +import { useNavigate } from 'react-router-dom'; +import { mapStepAtom } from '../App'; export const AppHeader = () => { const { account } = useAccount(); const { disconnect, loading } = useDisconnect(); + const [_1, setAcceptGameInputs] = useAtom(acceptGameInputsAtom); + const [_2, setAcceptGameStep] = useAtom(acceptGameStepAtom); + const [_3, setProposeGameInputs] = useAtom(proposeGameInputsAtom); + const [_4, setProposeGameStep] = useAtom(proposeGameStepAtom); + const [_5, setMapStep] = useAtom(mapStepAtom); + + const navigate = useNavigate(); return ( -
- {account && account?.address ? ( +
+ {account?.address && ( <> { + navigate('/'); + setMapStep(false); + setAcceptGameStep('1_AcceptGame'); + setProposeGameStep('1_NewGame'); + setAcceptGameInputs({}); + setProposeGameInputs({}); + }} /> - ) : ( -
)}
); diff --git a/src/components/MapImage.tsx b/src/components/MapImage.tsx new file mode 100644 index 0000000..b02b8f5 --- /dev/null +++ b/src/components/MapImage.tsx @@ -0,0 +1,21 @@ +import { useAtom } from 'jotai'; +import { mapStepAtom } from '../App'; +import map_0 from '../assets/map/map_0.png'; +import map_gif from '../assets/map/map_gif.gif'; + +const MapImage = () => { + const [mapState, _] = useAtom(mapStepAtom); + + return ( + Treasure Map + ); +}; + +export default MapImage; diff --git a/src/components/Nav.tsx b/src/components/Nav.tsx index 4b97488..6e2931c 100644 --- a/src/components/Nav.tsx +++ b/src/components/Nav.tsx @@ -1,29 +1,19 @@ type NavProps = { step: number; + totalSteps: number; }; -function Nav({ step }: NavProps) { +function Nav({ step, totalSteps }: NavProps) { return ( -