From e08fad2d69228db421d27f27b941e45325f8f8e5 Mon Sep 17 00:00:00 2001 From: qhgill Date: Sun, 9 Nov 2025 21:10:56 -0800 Subject: [PATCH 1/9] start context --- front-end/components/FlipBook.jsx | 9 ++++++-- front-end/context/SearchContext.js | 15 +++++++++++++ front-end/package-lock.json | 15 ++++++++++++- front-end/pages/_app.js | 5 ++++- front-end/pages/index.js | 35 +++++++++++++++++++++++++++--- 5 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 front-end/context/SearchContext.js diff --git a/front-end/components/FlipBook.jsx b/front-end/components/FlipBook.jsx index 9a03fa8..751f2fe 100644 --- a/front-end/components/FlipBook.jsx +++ b/front-end/components/FlipBook.jsx @@ -7,6 +7,7 @@ import SearchAndCompare from "./SearchandCompare"; import MatchSelector from "./MatchSelector"; import MatchTimeline from "./MatchTimeline"; import matchesData from "../data/matches.json"; +import { useContextResults } from "@/context/SearchContext"; const FlipBook = () => { @@ -17,6 +18,7 @@ const FlipBook = () => { const [onFirstPage, setOnFirstPage] = useState(true); const [onLastPage, setOnLastPage] = useState(false); const [isTurning, setIsTurning] = useState(false); + const searchResult = useContextResults(); // Match Timeline state + Match Selector const [matches, setMatches] = useState([]); @@ -75,7 +77,10 @@ const FlipBook = () => { }, []); // Create page structure once and store it in a ref - const pageStructure = useMemo(() => [ + const pageStructure = useMemo(() => { + //if(!searchResult) return null; + + return [ { cover: "book_cover.jpg", frontCover: true, id: 0 }, { front: "test.txt", back: "test.txt", id: 1 }, { @@ -128,7 +133,7 @@ const FlipBook = () => { }, { front: "test.txt", back: "test.txt", id: 10 }, { cover: "green-cover.jpg", id: 11 }, - ], []); // Empty dependency array - only create once + ]}, []); // Empty dependency array - only create once // Initialize pages only once useEffect(() => { diff --git a/front-end/context/SearchContext.js b/front-end/context/SearchContext.js new file mode 100644 index 0000000..d6fe0cf --- /dev/null +++ b/front-end/context/SearchContext.js @@ -0,0 +1,15 @@ +"use client"; +import { createContext, useContext, useState } from "react"; + +const SearchContext = createContext(); + +export function SearchContextProvider({ children }) { + const [searchResult, setSearchResult] = useState(null); + return ( + + {children} + + ); +} + +export const useContextResults = () => useContext(SearchContext); diff --git a/front-end/package-lock.json b/front-end/package-lock.json index f90334d..8efe489 100644 --- a/front-end/package-lock.json +++ b/front-end/package-lock.json @@ -689,6 +689,7 @@ "integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.3", "@typescript-eslint/types": "8.46.3", @@ -1226,6 +1227,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1655,6 +1657,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", @@ -2434,6 +2437,7 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -2603,6 +2607,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -3984,6 +3989,7 @@ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "dev": true, "license": "MIT", + "peer": true, "bin": { "jiti": "bin/jiti.js" } @@ -4787,6 +4793,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -4946,6 +4953,7 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -5089,6 +5097,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -5101,6 +5110,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -5121,6 +5131,7 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", + "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -5193,7 +5204,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -6118,6 +6130,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, diff --git a/front-end/pages/_app.js b/front-end/pages/_app.js index 00eca57..c3682bf 100644 --- a/front-end/pages/_app.js +++ b/front-end/pages/_app.js @@ -7,12 +7,15 @@ import "@/styles/classroom.css"; import "@/styles/FlipBook.css"; import "@/styles/FlipPage.css"; import "@/styles/Summary.css"; +import { SearchContextProvider } from "@/context/SearchContext"; export default function App({ Component, pageProps }) { return ( <>
- + + +
); diff --git a/front-end/pages/index.js b/front-end/pages/index.js index 577582e..c4cad18 100644 --- a/front-end/pages/index.js +++ b/front-end/pages/index.js @@ -1,4 +1,6 @@ import React, { useState } from "react"; +import { useRouter } from "next/router"; +import { useContextResults } from "@/context/SearchContext"; import Link from "next/link"; export default function Home() { @@ -7,6 +9,35 @@ export default function Home() { const handleChange = (event) => { setInputValue(event.target.value); }; + const { setSearchResult } = useContextResults(); + const router = useRouter(); + const handleSearch = async () => { + router.push("/FlipBook"); + + try { + const endpoint = "https://v4ft9564pb.execute-api.us-west-2.amazonaws.com/player/process"; + const body = { + "game_name": "ShadowLeaf", + "tagline": "8005", + "num_games": 1 + }; + console.log("fetching...") + const res = await fetch(endpoint, { + method: "POST", + body, + }); + + if (!res.ok) { + throw new Error(`AWS API request failed: ${res.status} ${res.statusText}`); + } + + const data = await res.json(); + setSearchResult(data); + } catch (err) { + console.error("Error fetching search results:", err); + setSearchResult({ error: "Failed to load search results." }); + } + }; return (
@@ -25,11 +56,9 @@ export default function Home() { placeholder="Enter text here" className="flex-1 rounded-lg border p-2 text-dark" /> - - -

Current input: {inputValue}

From 63a20312400b7d9b917a282b54f0d810fe07dc8a Mon Sep 17 00:00:00 2001 From: qhgill Date: Sun, 9 Nov 2025 22:05:04 -0800 Subject: [PATCH 2/9] timeline api working --- front-end/components/FlipBook.jsx | 29 ++++++++++++++++++----------- front-end/pages/index.js | 5 ++++- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/front-end/components/FlipBook.jsx b/front-end/components/FlipBook.jsx index 751f2fe..b9c0ef9 100644 --- a/front-end/components/FlipBook.jsx +++ b/front-end/components/FlipBook.jsx @@ -6,7 +6,6 @@ import Social from "./Social"; import SearchAndCompare from "./SearchandCompare"; import MatchSelector from "./MatchSelector"; import MatchTimeline from "./MatchTimeline"; -import matchesData from "../data/matches.json"; import { useContextResults } from "@/context/SearchContext"; @@ -18,7 +17,7 @@ const FlipBook = () => { const [onFirstPage, setOnFirstPage] = useState(true); const [onLastPage, setOnLastPage] = useState(false); const [isTurning, setIsTurning] = useState(false); - const searchResult = useContextResults(); + const { searchResult } = useContextResults(); // Match Timeline state + Match Selector const [matches, setMatches] = useState([]); @@ -54,16 +53,17 @@ const FlipBook = () => { const pageRefs = useRef([]); const isInitialized = useRef(false); - // Load matches data on component mount useEffect(() => { - if (matchesData && matchesData.timeline_data) { - setMatches(matchesData.timeline_data); - // Set first match as selected by default - if (matchesData.timeline_data.length > 0) { - setSelectedMatchId(matchesData.timeline_data[0].match_id); - } + if (!searchResult) return; + + if (searchResult.timeline_data) { + setMatches(searchResult.timeline_data); + setSelectedMatchId(searchResult.timeline_data[0]?.match_id || null); + } else { + console.warn("No timeline data found in search result:", searchResult); } - }, []); + }, [searchResult]); + // Get the currently selected match - use useMemo to prevent unnecessary recalculations const selectedMatch = useMemo(() => @@ -78,7 +78,6 @@ const FlipBook = () => { // Create page structure once and store it in a ref const pageStructure = useMemo(() => { - //if(!searchResult) return null; return [ { cover: "book_cover.jpg", frontCover: true, id: 0 }, @@ -241,6 +240,14 @@ const FlipBook = () => { return newPage; }, [player1Stats, player2Stats, matches, selectedMatchId, selectedMatch, handleMatchSelect, handlePlayer2Found]); + if(!searchResult){ + return ( +
+ LOADING... +
+ ) + } + return (
diff --git a/front-end/pages/index.js b/front-end/pages/index.js index c4cad18..32579fa 100644 --- a/front-end/pages/index.js +++ b/front-end/pages/index.js @@ -24,7 +24,10 @@ export default function Home() { console.log("fetching...") const res = await fetch(endpoint, { method: "POST", - body, + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(body), }); if (!res.ok) { From 51ea1db9a910abe0ae262a1a13f1c3b4cd03e8b3 Mon Sep 17 00:00:00 2001 From: qhgill Date: Sun, 9 Nov 2025 22:46:24 -0800 Subject: [PATCH 3/9] added player stats --- front-end/components/FlipBook.jsx | 18 ++++---- front-end/context/FriendContext.js | 15 ++++++ front-end/context/PlayerContext.js | 15 ++++++ front-end/context/SearchContext.js | 15 ------ front-end/context/TimelineContext.js | 15 ++++++ front-end/pages/_app.js | 11 +++-- front-end/pages/index.js | 69 ++++++++++++++++++---------- 7 files changed, 107 insertions(+), 51 deletions(-) create mode 100644 front-end/context/FriendContext.js create mode 100644 front-end/context/PlayerContext.js delete mode 100644 front-end/context/SearchContext.js create mode 100644 front-end/context/TimelineContext.js diff --git a/front-end/components/FlipBook.jsx b/front-end/components/FlipBook.jsx index b9c0ef9..1cad047 100644 --- a/front-end/components/FlipBook.jsx +++ b/front-end/components/FlipBook.jsx @@ -6,7 +6,7 @@ import Social from "./Social"; import SearchAndCompare from "./SearchandCompare"; import MatchSelector from "./MatchSelector"; import MatchTimeline from "./MatchTimeline"; -import { useContextResults } from "@/context/SearchContext"; +import { useTimelineContext } from "@/context/TimelineContext"; const FlipBook = () => { @@ -17,7 +17,7 @@ const FlipBook = () => { const [onFirstPage, setOnFirstPage] = useState(true); const [onLastPage, setOnLastPage] = useState(false); const [isTurning, setIsTurning] = useState(false); - const { searchResult } = useContextResults(); + const { timelineResult } = useTimelineContext(); // Match Timeline state + Match Selector const [matches, setMatches] = useState([]); @@ -54,15 +54,15 @@ const FlipBook = () => { const isInitialized = useRef(false); useEffect(() => { - if (!searchResult) return; + if (!timelineResult) return; - if (searchResult.timeline_data) { - setMatches(searchResult.timeline_data); - setSelectedMatchId(searchResult.timeline_data[0]?.match_id || null); + if (timelineResult.timeline_data) { + setMatches(timelineResult.timeline_data); + setSelectedMatchId(timelineResult.timeline_data[0]?.match_id || null); } else { - console.warn("No timeline data found in search result:", searchResult); + console.warn("No timeline data found in search result:", timelineResult); } - }, [searchResult]); + }, [timelineResult]); // Get the currently selected match - use useMemo to prevent unnecessary recalculations @@ -240,7 +240,7 @@ const FlipBook = () => { return newPage; }, [player1Stats, player2Stats, matches, selectedMatchId, selectedMatch, handleMatchSelect, handlePlayer2Found]); - if(!searchResult){ + if(!timelineResult){ return (
LOADING... diff --git a/front-end/context/FriendContext.js b/front-end/context/FriendContext.js new file mode 100644 index 0000000..4178f3e --- /dev/null +++ b/front-end/context/FriendContext.js @@ -0,0 +1,15 @@ +"use client"; +import { createContext, useContext, useState } from "react"; + +const FriendContext = createContext(); + +export function FriendContextProvider({ children }) { + const [friendResult, setFriendResult] = useState(null); + return ( + + {children} + + ); +} + +export const useFriendContext = () => useContext(FriendContext); diff --git a/front-end/context/PlayerContext.js b/front-end/context/PlayerContext.js new file mode 100644 index 0000000..a374991 --- /dev/null +++ b/front-end/context/PlayerContext.js @@ -0,0 +1,15 @@ +"use client"; +import { createContext, useContext, useState } from "react"; + +const PlayerContext = createContext(); + +export function PlayerContextProvider({ children }) { + const [playerResult, setPlayerResult] = useState(null); + return ( + + {children} + + ); +} + +export const usePlayerContext = () => useContext(PlayerContext); diff --git a/front-end/context/SearchContext.js b/front-end/context/SearchContext.js deleted file mode 100644 index d6fe0cf..0000000 --- a/front-end/context/SearchContext.js +++ /dev/null @@ -1,15 +0,0 @@ -"use client"; -import { createContext, useContext, useState } from "react"; - -const SearchContext = createContext(); - -export function SearchContextProvider({ children }) { - const [searchResult, setSearchResult] = useState(null); - return ( - - {children} - - ); -} - -export const useContextResults = () => useContext(SearchContext); diff --git a/front-end/context/TimelineContext.js b/front-end/context/TimelineContext.js new file mode 100644 index 0000000..20ae048 --- /dev/null +++ b/front-end/context/TimelineContext.js @@ -0,0 +1,15 @@ +"use client"; +import { createContext, useContext, useState } from "react"; + +const TimelineContext = createContext(); + +export function TimelineContextProvider({ children }) { + const [timelineResult, setTimelineResult] = useState(null); + return ( + + {children} + + ); +} + +export const useTimelineContext = () => useContext(TimelineContext); diff --git a/front-end/pages/_app.js b/front-end/pages/_app.js index c3682bf..badfcf8 100644 --- a/front-end/pages/_app.js +++ b/front-end/pages/_app.js @@ -7,15 +7,18 @@ import "@/styles/classroom.css"; import "@/styles/FlipBook.css"; import "@/styles/FlipPage.css"; import "@/styles/Summary.css"; -import { SearchContextProvider } from "@/context/SearchContext"; +import { TimelineContextProvider } from "@/context/TimelineContext"; +import { PlayerContextProvider } from "@/context/PlayerContext"; export default function App({ Component, pageProps }) { return ( <>
- - - + + + + +
); diff --git a/front-end/pages/index.js b/front-end/pages/index.js index 32579fa..b6b81b1 100644 --- a/front-end/pages/index.js +++ b/front-end/pages/index.js @@ -1,7 +1,7 @@ import React, { useState } from "react"; import { useRouter } from "next/router"; -import { useContextResults } from "@/context/SearchContext"; -import Link from "next/link"; +import { useTimelineContext } from "@/context/TimelineContext"; +import { usePlayerContext } from "@/context/PlayerContext"; export default function Home() { const [inputValue, setInputValue] = useState(""); @@ -9,36 +9,59 @@ export default function Home() { const handleChange = (event) => { setInputValue(event.target.value); }; - const { setSearchResult } = useContextResults(); + const { setTimelineResult } = useTimelineContext(); + const { setPlayerResult } = usePlayerContext(); const router = useRouter(); const handleSearch = async () => { router.push("/FlipBook"); + const timelineEndpoint = "https://v4ft9564pb.execute-api.us-west-2.amazonaws.com/player/process"; + const profileEndpoint = "https://n891ddrkmg.execute-api.us-west-2.amazonaws.com/classify-player"; + + const timelinebody = { + game_name: "ShadowLeaf", + tagline: "8005", + num_games: 1 + }; + + const profilebody = { + username: "ShadowLeaf", + tag: "8005", + match_count: 10 + } + try { - const endpoint = "https://v4ft9564pb.execute-api.us-west-2.amazonaws.com/player/process"; - const body = { - "game_name": "ShadowLeaf", - "tagline": "8005", - "num_games": 1 - }; - console.log("fetching...") - const res = await fetch(endpoint, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(body), - }); + console.log("Fetching data from both APIs..."); - if (!res.ok) { - throw new Error(`AWS API request failed: ${res.status} ${res.statusText}`); + const [timelineRes, profileRes] = await Promise.all([ + fetch(timelineEndpoint, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(timelinebody), + }), + fetch(profileEndpoint, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(profilebody), + }) + ]); + + if (!timelineRes.ok || !profileRes.ok) { + throw new Error(`API request failed: ${timelineRes.status} / ${profileRes.status}`); } - const data = await res.json(); - setSearchResult(data); + const [timelineData, profileData] = await Promise.all([ + timelineRes.json(), + profileRes.json(), + ]); + + setTimelineResult(timelineData); + setPlayerResult(profileData); + } catch (err) { - console.error("Error fetching search results:", err); - setSearchResult({ error: "Failed to load search results." }); + console.error("Error fetching API data:", err); + setTimelineResult({ error: "Failed to load timeline." }); + setPlayerResult({ error: "Failed to load profile." }); } }; From bdfaf017730bc8c235c1d03f4b95e1cc90a0eff8 Mon Sep 17 00:00:00 2001 From: Sean Liem Date: Mon, 10 Nov 2025 01:05:35 -0800 Subject: [PATCH 4/9] Regions added to SummaryBack + Champion images --- front-end/components/SummaryBack.jsx | 21 +++++++++++++++--- front-end/public/images/champions/aatrox.avif | Bin 0 -> 18651 bytes front-end/public/images/champions/ahri.avif | Bin 0 -> 23739 bytes front-end/public/images/champions/akali.avif | Bin 0 -> 21736 bytes front-end/public/images/champions/akshan.avif | Bin 0 -> 23420 bytes .../public/images/champions/alistar.avif | Bin 0 -> 21888 bytes .../public/images/champions/ambessa.avif | Bin 0 -> 17023 bytes front-end/public/images/champions/amumu.avif | Bin 0 -> 28357 bytes front-end/public/images/champions/anivia.avif | Bin 0 -> 38596 bytes front-end/public/images/champions/annie.avif | Bin 0 -> 24950 bytes .../public/images/champions/aphelios.avif | Bin 0 -> 86574 bytes front-end/public/images/champions/ashe.avif | Bin 0 -> 25058 bytes .../public/images/champions/aurelionsol.avif | Bin 0 -> 34080 bytes front-end/public/images/champions/aurora.avif | Bin 0 -> 25041 bytes front-end/public/images/champions/bard.avif | Bin 0 -> 17734 bytes .../public/images/champions/belveth.avif | Bin 0 -> 21467 bytes .../public/images/champions/blitzcrank.avif | Bin 0 -> 34986 bytes front-end/public/images/champions/brand.avif | Bin 0 -> 31780 bytes front-end/public/images/champions/braum.avif | Bin 0 -> 25551 bytes front-end/public/images/champions/briar.avif | Bin 0 -> 25613 bytes .../public/images/champions/caitlyn.avif | Bin 0 -> 31712 bytes .../public/images/champions/camille.avif | Bin 0 -> 15576 bytes .../public/images/champions/chogath.avif | Bin 0 -> 27518 bytes front-end/public/images/champions/corki.avif | Bin 0 -> 26635 bytes front-end/public/images/champions/darius.avif | Bin 0 -> 26783 bytes front-end/public/images/champions/diana.avif | Bin 0 -> 18641 bytes front-end/public/images/champions/draven.avif | Bin 0 -> 16356 bytes .../public/images/champions/drmundo.avif | Bin 0 -> 25077 bytes front-end/public/images/champions/ekko.avif | Bin 0 -> 21030 bytes front-end/public/images/champions/elise.avif | Bin 0 -> 21318 bytes .../public/images/champions/evelynn.avif | Bin 0 -> 22997 bytes front-end/public/images/champions/ezreal.avif | Bin 0 -> 30557 bytes .../public/images/champions/fiddlesticks.avif | Bin 0 -> 28521 bytes front-end/public/images/champions/fiora.avif | Bin 0 -> 24322 bytes front-end/public/images/champions/fizz.avif | Bin 0 -> 29122 bytes front-end/public/images/champions/galio.avif | Bin 0 -> 33065 bytes .../public/images/champions/gangplank.avif | Bin 0 -> 34588 bytes front-end/public/images/champions/garen.avif | Bin 0 -> 31522 bytes front-end/public/images/champions/gnar.avif | Bin 0 -> 18419 bytes front-end/public/images/champions/gragas.avif | Bin 0 -> 18956 bytes front-end/public/images/champions/graves.avif | Bin 0 -> 33022 bytes front-end/public/images/champions/gwen.avif | Bin 0 -> 19187 bytes .../public/images/champions/hecarim.avif | Bin 0 -> 32520 bytes .../public/images/champions/heimerdinger.avif | Bin 0 -> 42323 bytes front-end/public/images/champions/hwei.avif | Bin 0 -> 22845 bytes front-end/public/images/champions/illaoi.avif | Bin 0 -> 29601 bytes front-end/public/images/champions/irelia.avif | Bin 0 -> 25382 bytes front-end/public/images/champions/ivern.avif | Bin 0 -> 22198 bytes front-end/public/images/champions/janna.avif | Bin 0 -> 25274 bytes .../public/images/champions/jarvan4.avif | Bin 0 -> 36445 bytes front-end/public/images/champions/jax.avif | Bin 0 -> 19379 bytes front-end/public/images/champions/jayce.avif | Bin 0 -> 19815 bytes front-end/public/images/champions/jhin.avif | Bin 0 -> 23692 bytes front-end/public/images/champions/jinx.avif | Bin 0 -> 25928 bytes front-end/public/images/champions/kaisa.avif | Bin 0 -> 20300 bytes .../public/images/champions/kalista.avif | Bin 0 -> 22292 bytes front-end/public/images/champions/karma.avif | Bin 0 -> 24484 bytes .../public/images/champions/karthus.avif | Bin 0 -> 19193 bytes .../public/images/champions/kassadin.avif | Bin 0 -> 32489 bytes .../public/images/champions/katarina.avif | Bin 0 -> 33489 bytes front-end/public/images/champions/kayle.avif | Bin 0 -> 34350 bytes front-end/public/images/champions/kayn.avif | Bin 0 -> 15627 bytes front-end/public/images/champions/kennen.avif | Bin 0 -> 21829 bytes front-end/public/images/champions/khazix.avif | Bin 0 -> 24792 bytes .../public/images/champions/kindred.avif | Bin 0 -> 19857 bytes front-end/public/images/champions/kled.avif | Bin 0 -> 23490 bytes front-end/public/images/champions/kogmaw.avif | Bin 0 -> 18406 bytes front-end/public/images/champions/ksante.avif | Bin 0 -> 23238 bytes .../public/images/champions/leblanc.avif | Bin 0 -> 24064 bytes front-end/public/images/champions/leesin.avif | Bin 0 -> 17097 bytes front-end/public/images/champions/leona.avif | Bin 0 -> 26164 bytes front-end/public/images/champions/lillia.avif | Bin 0 -> 67746 bytes .../public/images/champions/lissandra.avif | Bin 0 -> 19994 bytes front-end/public/images/champions/lucian.avif | Bin 0 -> 15816 bytes front-end/public/images/champions/lulu.avif | Bin 0 -> 31958 bytes front-end/public/images/champions/lux.avif | Bin 0 -> 34480 bytes .../public/images/champions/malzahar.avif | Bin 0 -> 37054 bytes front-end/public/images/champions/maokai.avif | Bin 0 -> 24155 bytes .../public/images/champions/maplhite.avif | Bin 0 -> 26930 bytes .../public/images/champions/masteryi.avif | Bin 0 -> 27126 bytes front-end/public/images/champions/mel.avif | Bin 0 -> 19646 bytes front-end/public/images/champions/milio.avif | Bin 0 -> 35014 bytes .../public/images/champions/missfortune.avif | Bin 0 -> 30092 bytes .../public/images/champions/mordekaiser.avif | Bin 0 -> 12998 bytes .../public/images/champions/morgana.avif | Bin 0 -> 21264 bytes .../public/images/champions/naafiri.avif | Bin 0 -> 22340 bytes front-end/public/images/champions/nami.avif | Bin 0 -> 33304 bytes .../public/images/champions/nautilius.avif | Bin 0 -> 26173 bytes front-end/public/images/champions/neeko.avif | Bin 0 -> 34901 bytes .../public/images/champions/nidalee.avif | Bin 0 -> 19195 bytes front-end/public/images/champions/nilah.avif | Bin 0 -> 35271 bytes .../public/images/champions/nocturne.avif | Bin 0 -> 14781 bytes .../public/images/champions/nunuwillump.avif | Bin 0 -> 30391 bytes front-end/public/images/champions/olaf.avif | Bin 0 -> 29239 bytes .../public/images/champions/orianna.avif | Bin 0 -> 27183 bytes front-end/public/images/champions/ornn.avif | Bin 0 -> 26888 bytes .../public/images/champions/pantheon.avif | Bin 0 -> 23270 bytes front-end/public/images/champions/poppy.avif | Bin 0 -> 31072 bytes front-end/public/images/champions/pyke.avif | Bin 0 -> 36016 bytes front-end/public/images/champions/qiyana.avif | Bin 0 -> 27326 bytes front-end/public/images/champions/quinn.avif | Bin 0 -> 24268 bytes front-end/public/images/champions/rakan.avif | Bin 0 -> 18046 bytes front-end/public/images/champions/rammus.avif | Bin 0 -> 22568 bytes front-end/public/images/champions/reksai.avif | Bin 0 -> 21797 bytes front-end/public/images/champions/rell.avif | Bin 0 -> 22055 bytes .../public/images/champions/renataglasc.avif | Bin 0 -> 24627 bytes .../public/images/champions/renekton.avif | Bin 0 -> 34375 bytes front-end/public/images/champions/rengar.avif | Bin 0 -> 29926 bytes front-end/public/images/champions/riven.avif | Bin 0 -> 27471 bytes front-end/public/images/champions/rumble.avif | Bin 0 -> 28041 bytes front-end/public/images/champions/ryze.avif | Bin 0 -> 21662 bytes front-end/public/images/champions/samira.avif | Bin 0 -> 36487 bytes .../public/images/champions/sejuani.avif | Bin 0 -> 31809 bytes front-end/public/images/champions/senna.avif | Bin 0 -> 19439 bytes .../public/images/champions/seraphine.avif | Bin 0 -> 104727 bytes front-end/public/images/champions/sett.avif | Bin 0 -> 38138 bytes front-end/public/images/champions/shaco.avif | Bin 0 -> 18049 bytes front-end/public/images/champions/shen.avif | Bin 0 -> 27610 bytes .../public/images/champions/shyvana.avif | Bin 0 -> 36587 bytes front-end/public/images/champions/singed.avif | Bin 0 -> 28638 bytes front-end/public/images/champions/sion.avif | Bin 0 -> 20375 bytes .../public/images/champions/skarner.avif | Bin 0 -> 20276 bytes .../public/images/champions/smolder.avif | Bin 0 -> 25711 bytes front-end/public/images/champions/sona.avif | Bin 0 -> 30925 bytes front-end/public/images/champions/soraka.avif | Bin 0 -> 29291 bytes front-end/public/images/champions/swain.avif | Bin 0 -> 17801 bytes front-end/public/images/champions/sylas.avif | Bin 0 -> 23918 bytes front-end/public/images/champions/syndra.avif | Bin 0 -> 19466 bytes .../public/images/champions/tahmkench.avif | Bin 0 -> 16925 bytes front-end/public/images/champions/talon.avif | Bin 0 -> 25202 bytes front-end/public/images/champions/taric.avif | Bin 0 -> 24515 bytes front-end/public/images/champions/teemo.avif | Bin 0 -> 35959 bytes front-end/public/images/champions/thresh.avif | Bin 0 -> 28928 bytes .../public/images/champions/tristana.avif | Bin 0 -> 20689 bytes .../public/images/champions/trundle.avif | Bin 0 -> 23687 bytes .../public/images/champions/tryndamere.avif | Bin 0 -> 36319 bytes .../public/images/champions/twistedfate.avif | Bin 0 -> 16393 bytes front-end/public/images/champions/twitcj.avif | Bin 0 -> 22476 bytes front-end/public/images/champions/udyr.avif | Bin 0 -> 22819 bytes front-end/public/images/champions/urgot.avif | Bin 0 -> 18108 bytes front-end/public/images/champions/varus.avif | Bin 0 -> 26761 bytes front-end/public/images/champions/vayne.avif | Bin 0 -> 35012 bytes front-end/public/images/champions/veigar.avif | Bin 0 -> 32617 bytes front-end/public/images/champions/velkoz.avif | Bin 0 -> 20705 bytes front-end/public/images/champions/vex.avif | Bin 0 -> 24129 bytes front-end/public/images/champions/vi.avif | Bin 0 -> 49458 bytes front-end/public/images/champions/viego.avif | Bin 0 -> 30354 bytes front-end/public/images/champions/viktor.avif | Bin 0 -> 27259 bytes .../public/images/champions/vladamir.avif | Bin 0 -> 29795 bytes .../public/images/champions/volibear.avif | Bin 0 -> 66643 bytes .../public/images/champions/warwick.avif | Bin 0 -> 27844 bytes front-end/public/images/champions/wukong.avif | Bin 0 -> 33851 bytes front-end/public/images/champions/xayah.avif | Bin 0 -> 18433 bytes front-end/public/images/champions/xerath.avif | Bin 0 -> 43614 bytes .../public/images/champions/xinzhao.avif | Bin 0 -> 21485 bytes front-end/public/images/champions/yasuo.avif | Bin 0 -> 36512 bytes front-end/public/images/champions/yone.avif | Bin 0 -> 56221 bytes front-end/public/images/champions/yorick.avif | Bin 0 -> 22032 bytes front-end/public/images/champions/yunara.avif | Bin 0 -> 35934 bytes front-end/public/images/champions/yuumi.avif | Bin 0 -> 28524 bytes front-end/public/images/champions/zac.avif | Bin 0 -> 16670 bytes front-end/public/images/champions/zed.avif | Bin 0 -> 28220 bytes front-end/public/images/champions/zeri.avif | Bin 0 -> 31455 bytes front-end/public/images/champions/ziggs.avif | Bin 0 -> 20855 bytes front-end/public/images/champions/zilean.avif | Bin 0 -> 32429 bytes front-end/public/images/champions/zoe.avif | Bin 0 -> 31621 bytes front-end/public/images/champions/zyra.avif | Bin 0 -> 24355 bytes .../images/{ => regions}/zaun_crest_icon.png | Bin 168 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 front-end/public/images/champions/aatrox.avif create mode 100644 front-end/public/images/champions/ahri.avif create mode 100644 front-end/public/images/champions/akali.avif create mode 100644 front-end/public/images/champions/akshan.avif create mode 100644 front-end/public/images/champions/alistar.avif create mode 100644 front-end/public/images/champions/ambessa.avif create mode 100644 front-end/public/images/champions/amumu.avif create mode 100644 front-end/public/images/champions/anivia.avif create mode 100644 front-end/public/images/champions/annie.avif create mode 100644 front-end/public/images/champions/aphelios.avif create mode 100644 front-end/public/images/champions/ashe.avif create mode 100644 front-end/public/images/champions/aurelionsol.avif create mode 100644 front-end/public/images/champions/aurora.avif create mode 100644 front-end/public/images/champions/bard.avif create mode 100644 front-end/public/images/champions/belveth.avif create mode 100644 front-end/public/images/champions/blitzcrank.avif create mode 100644 front-end/public/images/champions/brand.avif create mode 100644 front-end/public/images/champions/braum.avif create mode 100644 front-end/public/images/champions/briar.avif create mode 100644 front-end/public/images/champions/caitlyn.avif create mode 100644 front-end/public/images/champions/camille.avif create mode 100644 front-end/public/images/champions/chogath.avif create mode 100644 front-end/public/images/champions/corki.avif create mode 100644 front-end/public/images/champions/darius.avif create mode 100644 front-end/public/images/champions/diana.avif create mode 100644 front-end/public/images/champions/draven.avif create mode 100644 front-end/public/images/champions/drmundo.avif create mode 100644 front-end/public/images/champions/ekko.avif create mode 100644 front-end/public/images/champions/elise.avif create mode 100644 front-end/public/images/champions/evelynn.avif create mode 100644 front-end/public/images/champions/ezreal.avif create mode 100644 front-end/public/images/champions/fiddlesticks.avif create mode 100644 front-end/public/images/champions/fiora.avif create mode 100644 front-end/public/images/champions/fizz.avif create mode 100644 front-end/public/images/champions/galio.avif create mode 100644 front-end/public/images/champions/gangplank.avif create mode 100644 front-end/public/images/champions/garen.avif create mode 100644 front-end/public/images/champions/gnar.avif create mode 100644 front-end/public/images/champions/gragas.avif create mode 100644 front-end/public/images/champions/graves.avif create mode 100644 front-end/public/images/champions/gwen.avif create mode 100644 front-end/public/images/champions/hecarim.avif create mode 100644 front-end/public/images/champions/heimerdinger.avif create mode 100644 front-end/public/images/champions/hwei.avif create mode 100644 front-end/public/images/champions/illaoi.avif create mode 100644 front-end/public/images/champions/irelia.avif create mode 100644 front-end/public/images/champions/ivern.avif create mode 100644 front-end/public/images/champions/janna.avif create mode 100644 front-end/public/images/champions/jarvan4.avif create mode 100644 front-end/public/images/champions/jax.avif create mode 100644 front-end/public/images/champions/jayce.avif create mode 100644 front-end/public/images/champions/jhin.avif create mode 100644 front-end/public/images/champions/jinx.avif create mode 100644 front-end/public/images/champions/kaisa.avif create mode 100644 front-end/public/images/champions/kalista.avif create mode 100644 front-end/public/images/champions/karma.avif create mode 100644 front-end/public/images/champions/karthus.avif create mode 100644 front-end/public/images/champions/kassadin.avif create mode 100644 front-end/public/images/champions/katarina.avif create mode 100644 front-end/public/images/champions/kayle.avif create mode 100644 front-end/public/images/champions/kayn.avif create mode 100644 front-end/public/images/champions/kennen.avif create mode 100644 front-end/public/images/champions/khazix.avif create mode 100644 front-end/public/images/champions/kindred.avif create mode 100644 front-end/public/images/champions/kled.avif create mode 100644 front-end/public/images/champions/kogmaw.avif create mode 100644 front-end/public/images/champions/ksante.avif create mode 100644 front-end/public/images/champions/leblanc.avif create mode 100644 front-end/public/images/champions/leesin.avif create mode 100644 front-end/public/images/champions/leona.avif create mode 100644 front-end/public/images/champions/lillia.avif create mode 100644 front-end/public/images/champions/lissandra.avif create mode 100644 front-end/public/images/champions/lucian.avif create mode 100644 front-end/public/images/champions/lulu.avif create mode 100644 front-end/public/images/champions/lux.avif create mode 100644 front-end/public/images/champions/malzahar.avif create mode 100644 front-end/public/images/champions/maokai.avif create mode 100644 front-end/public/images/champions/maplhite.avif create mode 100644 front-end/public/images/champions/masteryi.avif create mode 100644 front-end/public/images/champions/mel.avif create mode 100644 front-end/public/images/champions/milio.avif create mode 100644 front-end/public/images/champions/missfortune.avif create mode 100644 front-end/public/images/champions/mordekaiser.avif create mode 100644 front-end/public/images/champions/morgana.avif create mode 100644 front-end/public/images/champions/naafiri.avif create mode 100644 front-end/public/images/champions/nami.avif create mode 100644 front-end/public/images/champions/nautilius.avif create mode 100644 front-end/public/images/champions/neeko.avif create mode 100644 front-end/public/images/champions/nidalee.avif create mode 100644 front-end/public/images/champions/nilah.avif create mode 100644 front-end/public/images/champions/nocturne.avif create mode 100644 front-end/public/images/champions/nunuwillump.avif create mode 100644 front-end/public/images/champions/olaf.avif create mode 100644 front-end/public/images/champions/orianna.avif create mode 100644 front-end/public/images/champions/ornn.avif create mode 100644 front-end/public/images/champions/pantheon.avif create mode 100644 front-end/public/images/champions/poppy.avif create mode 100644 front-end/public/images/champions/pyke.avif create mode 100644 front-end/public/images/champions/qiyana.avif create mode 100644 front-end/public/images/champions/quinn.avif create mode 100644 front-end/public/images/champions/rakan.avif create mode 100644 front-end/public/images/champions/rammus.avif create mode 100644 front-end/public/images/champions/reksai.avif create mode 100644 front-end/public/images/champions/rell.avif create mode 100644 front-end/public/images/champions/renataglasc.avif create mode 100644 front-end/public/images/champions/renekton.avif create mode 100644 front-end/public/images/champions/rengar.avif create mode 100644 front-end/public/images/champions/riven.avif create mode 100644 front-end/public/images/champions/rumble.avif create mode 100644 front-end/public/images/champions/ryze.avif create mode 100644 front-end/public/images/champions/samira.avif create mode 100644 front-end/public/images/champions/sejuani.avif create mode 100644 front-end/public/images/champions/senna.avif create mode 100644 front-end/public/images/champions/seraphine.avif create mode 100644 front-end/public/images/champions/sett.avif create mode 100644 front-end/public/images/champions/shaco.avif create mode 100644 front-end/public/images/champions/shen.avif create mode 100644 front-end/public/images/champions/shyvana.avif create mode 100644 front-end/public/images/champions/singed.avif create mode 100644 front-end/public/images/champions/sion.avif create mode 100644 front-end/public/images/champions/skarner.avif create mode 100644 front-end/public/images/champions/smolder.avif create mode 100644 front-end/public/images/champions/sona.avif create mode 100644 front-end/public/images/champions/soraka.avif create mode 100644 front-end/public/images/champions/swain.avif create mode 100644 front-end/public/images/champions/sylas.avif create mode 100644 front-end/public/images/champions/syndra.avif create mode 100644 front-end/public/images/champions/tahmkench.avif create mode 100644 front-end/public/images/champions/talon.avif create mode 100644 front-end/public/images/champions/taric.avif create mode 100644 front-end/public/images/champions/teemo.avif create mode 100644 front-end/public/images/champions/thresh.avif create mode 100644 front-end/public/images/champions/tristana.avif create mode 100644 front-end/public/images/champions/trundle.avif create mode 100644 front-end/public/images/champions/tryndamere.avif create mode 100644 front-end/public/images/champions/twistedfate.avif create mode 100644 front-end/public/images/champions/twitcj.avif create mode 100644 front-end/public/images/champions/udyr.avif create mode 100644 front-end/public/images/champions/urgot.avif create mode 100644 front-end/public/images/champions/varus.avif create mode 100644 front-end/public/images/champions/vayne.avif create mode 100644 front-end/public/images/champions/veigar.avif create mode 100644 front-end/public/images/champions/velkoz.avif create mode 100644 front-end/public/images/champions/vex.avif create mode 100644 front-end/public/images/champions/vi.avif create mode 100644 front-end/public/images/champions/viego.avif create mode 100644 front-end/public/images/champions/viktor.avif create mode 100644 front-end/public/images/champions/vladamir.avif create mode 100644 front-end/public/images/champions/volibear.avif create mode 100644 front-end/public/images/champions/warwick.avif create mode 100644 front-end/public/images/champions/wukong.avif create mode 100644 front-end/public/images/champions/xayah.avif create mode 100644 front-end/public/images/champions/xerath.avif create mode 100644 front-end/public/images/champions/xinzhao.avif create mode 100644 front-end/public/images/champions/yasuo.avif create mode 100644 front-end/public/images/champions/yone.avif create mode 100644 front-end/public/images/champions/yorick.avif create mode 100644 front-end/public/images/champions/yunara.avif create mode 100644 front-end/public/images/champions/yuumi.avif create mode 100644 front-end/public/images/champions/zac.avif create mode 100644 front-end/public/images/champions/zed.avif create mode 100644 front-end/public/images/champions/zeri.avif create mode 100644 front-end/public/images/champions/ziggs.avif create mode 100644 front-end/public/images/champions/zilean.avif create mode 100644 front-end/public/images/champions/zoe.avif create mode 100644 front-end/public/images/champions/zyra.avif rename front-end/public/images/{ => regions}/zaun_crest_icon.png (100%) diff --git a/front-end/components/SummaryBack.jsx b/front-end/components/SummaryBack.jsx index 14bfd29..561ad8e 100644 --- a/front-end/components/SummaryBack.jsx +++ b/front-end/components/SummaryBack.jsx @@ -10,11 +10,27 @@ const SummaryBack = ({ data }) => { const traitRefs = useRef([]); const descriptions = { - "Late-Game": "Shines in the late stages of battle once resources are built.", + "Late-Game": `Shines in the late stages of ${data.region} battle once resources are built.`, "Scaling": "Grows stronger over time with continuous development.", "Empire-Building": "Focuses on expansion and strategic dominance.", }; + const Regions = { + //"Bilgewater" : `Citizens from Bilgewater have a high affinity for gold and are prone to make risky, daring plays on their lonesome. They value efficient gold generation per minute and are more willing to take tower dives if they think it can swing the tides in their favor. Based on your stats, you make an average of ${gpm} gold per minute. You’ve also gotten roughly ${avg_solo_kills} solo kills per game as well as an average of ${avg_kills_near_tower} kills near enemy tower. These impressive stats prove that you are a bonafide Bilgerat, ready to plunder the enemy team’s economy.`, + //"Noxus" : `Noxians are known for their bloodlust and are eager to show off their strength to any unfortunate opponents that happen to stand in their way. Not only do they live for the thrill of battle, but they also take great pleasure in asserting their dominance as quickly and brutally as possible. According to your average damage per minute, ${dpm}, as well as your exemplary average early gold advantage, ${ega}, you are a perfect fit for the Noxian archetype.`, + //"Bandle_City" : `Everyone in Bandle City knows that the scout’s code is one of the most important rulebooks to follow for any aspiring Bandle scout. Bandle scouts are known for their vigilance and their dedication to never be detected. The average Bandle scout never backs down from a fight and always comes prepared for anything. Scouts usually have a high vision score, high KDA and can always find a way to outplay when outnumbered. Your average KDA, ${avg_kda}, and vision score, ${vs}, are exceptionally high. Your average kills when outnumbered, ${avg_outnumbered_kills}, are exceptionally high which demonstrates that you are ready to become a Bandle scout.`, + //"Demacia" : `Long ago, many Demacian soldiers believed that as long as they stood together, firm in their beliefs, they would never capitulate to the enemy. This same belief still holds true today, as the Demacian empire still stands tall, firm in their belief that what they do is right. Demacians are known for working together to destroy their enemies while making sure to keep their allies safe. Your average kill participation, ${kp}, and your teamfight damage, ${tfdmg}, are exceptionally high, but your average shielding on allies, ${soa}, proves that you know your teammates come first.`, + //"Ionia" : `When Noxus invaded the first lands, everything changed for the people of Ionia. Families were split apart, temples were destroyed, and peace was nowhere to be found. The scars from Noxus linger on Ionia’s once peaceful lands, and now Ionians are ready for anything. To be an Ionian, you must be sharp and quick-witted if you want to stay alive. Ionians typically have exceptional cs and kill participation while also maintaining a high KDA. They are also known to be one with the land around them, meaning that they on average achieve a stellar vision score. Your KDA, {kda}, as well as your kill participation ${kp}, cs ${cs} and vision score ${vs}, prove that you are an honorary Ionian native.`, + //"Ixtal" : `In the jungles of Ixtal, the hunt is what is considered to be the most sacred tradition held by the natives. The hunt brings in food, pays for shelter, and can save lives. Hunting the monsters in Ixtal can provide several benefits, such as honing your skills, immense amounts of meat, and special boons. A good jungler translates very easily into being an excellent hunter. Getting a high amount of dragon and herald kills per game means that you are a valuable asset to your team’s probability of success. Your high objective damage, ${objdmg}, paired with high dragon and herald kills, ${dkills}, ${hkills}, exhibits how hard of a jungle carry you can be.`, + //"Piltover" : `Piltover prides itself on its constant need for innovation, always improving upon each iteration to produce wondrous results. There’s always a hidden cost that’s required to continue improving, which is why every up-and-coming inventor needs a sponsor or a wealthy background. In order to keep your place as an honorary Piltovian, your gold per minute must be high enough to satisfy the needs of your research and production costs. Since your cs per minute, ${cs}, and your cs consistency, ${cs_c}, are always exceptionally high, your gold per minute, ${gpm}, goes beyond the average Piltovian salary. The city of progress can make several technological advancements thanks to your immense wealth and consistent profits.`, + //"Shadow_Isles" : `The Blessed Isles were once a place of refuge where people could go experience tranquility and safety while having the luxury of healing their wounds by taking a dip in the sacred waters. Everything changed, however, when a magical calamity befell the isles, turning them into the Shadow Isles. The isles that were once known for harboring life and prosperity now only hold death and despair for those who enter. However, not all has been lost, for there are those that reside in the Shadow Isles that want to restore them to their former glory. To be able to become a part of the few who can survive the Shadow Isles, an exceptional mastery of healing those around you accompanied by a will to stay alive is required. Your average lifespan per game, ${life}, outlasts even the safest of players, while your healing, ${heals}, is unmatched. You definitely have what it takes to return the Shadow Isles to their former glory.`, + "Shurima": `To most, Shurima seems like a harsh desert wasteland with nothing of value left in it after its once great empire fell. For those who are patient and are willing to look beneath the sand, Shurima harbors an indescribable amount of wealth and power. This power to become ascended can only be tapped into by a certain few who prove themselves to be worthy after a substantial amount of time. Based on your high average cs per game, {cs}, and your exceptional gold generation per minute, {gpm}, your playstyle makes you the perfect candidate to become a Shuriman ascended.`, + //"Targon" : `Anyone who scaled Mount Targon knows that the journey is treacherous and filled with adversity, but those who reach the top have the chance to be touched by celestial beings imbuing them with unimaginable power. To climb this mountain alone, however, is a death sentence; this climb encourages people to seek out unlikely allies to forge strong bonds that can soldier through the mountain's harsh conditions. Teamwork alone isn’t the only thing that’s needed; a summoner’s individual support skills like warding, healing, and shielding are necessary for the uncertain path ahead. Your average vision score per game, ${v_score}, demonstrates a perceptive and cautious player. Your average healing and shielding, ${heals}, ${shields}, on teammates is massive. This all but seals the deal that you are more than capable of making it to the top of Mount Targon.`, + //"Freljord" : `The Freljord is a combination of harsh mountain ranges and cold, bitter wind that can rattle the bones of even the toughest of Runeterrans. Iceborn, the special few that are native to this land, have adapted to these tough conditions and have managed to thrive in this icy area. Iceborn have retained skills such as having insanely long crowd control chains while being an unscalable wall to anyone who dares challenge them. Your stats show that you apply an exceptionally long amount of crowd control, ${cc}, to your enemies. You also have an exceptional will to survive which is shown through how long you’ve survived, ${time_alive}, during each game. You are a true Iceborn.`, + //"Void" : `The Void. A pit that houses a variety of unspeakable horrors from beyond Runeterra that are hungry to consume anything that lives. Almost nothing survives once they enter the Void, the only exception being the Voidborne. All of the Voidborne deal insane amounts of damage, obliterating anything weaker than them in their path, which allows them to survive the harsh conditions of the Void. A high average damage per minute accompanied with a high amount of solo kills and teamfight damage. Your high average damage per minute, ${dpm}, identifies you as a fearsome enemy that can tear through the enemy frontline. Your teamfight damage, ${tfd}, and your solo kills, ${sk}, per game prove that you are an unstoppable force alone and with your team.`, + //"Zaun" : `The underbelly of Piltover, Zaun, is a place where dreams of progress go to die and a quiet desperation to survive replaces it. The streets of Zaun make it difficult to traverse if you aren’t already a resilient cutthroat. There’s plenty of opportunities to be kidnapped, mugged or straight up killed in cold blood. The good people of Zaun have adapted to this lifestyle, putting their life on the line in order to eliminate as many of their enemies as possible. Zaunites typically have a high number of deaths but manage to take down at least one or more enemy players with them. Your average deaths, ${death_con}, are quite high, however, you manage to take down around ${avg_outnumbered_kills} champions before you fall. The average amount of assassinations you perform on enemy champions are roughly ${avg_pick_kills} which means your map awareness is exemplary.` + }; + useEffect(() => { const handleClickOutside = () => { setActiveTrait(null); @@ -53,7 +69,7 @@ const SummaryBack = ({ data }) => { height={32} /> -

Shurima is a region known for its incredible power built over dynasties.

+

{Regions[data.region]}

{/* Profile traits with popups */} @@ -61,7 +77,6 @@ const SummaryBack = ({ data }) => {

Profile

- {/* Stats Display - Identical to Social */}

diff --git a/front-end/pages/index.js b/front-end/pages/index.js index deb1a52..a45a1de 100644 --- a/front-end/pages/index.js +++ b/front-end/pages/index.js @@ -58,6 +58,10 @@ export default function Home() {

- +
); diff --git a/front-end/styles/button.css b/front-end/styles/button.css index 6b6dc1b..ab72f4d 100644 --- a/front-end/styles/button.css +++ b/front-end/styles/button.css @@ -1,7 +1,5 @@ .magical-button { - position: absolute; - right: 18%; - bottom: 13%; + position: relative; padding: 12px 28px; font-size: 18px; font-weight: 600;