├── .eslintrc.json
├── .gitignore
├── .vscode
└── settings.json
├── README.md
├── next.config.js
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
├── next.svg
└── vercel.svg
├── src
├── app
│ ├── api
│ │ └── hello
│ │ │ └── route.ts
│ ├── favicon.ico
│ ├── globals.css
│ ├── layout.tsx
│ ├── page.tsx
│ └── pokemon
│ │ └── [slug]
│ │ └── page.tsx
├── components
│ ├── animated-value.tsx
│ ├── command-search.tsx
│ ├── icons.tsx
│ ├── loading.tsx
│ ├── main-nav.tsx
│ ├── pokemon
│ │ ├── pokedata-card.tsx
│ │ ├── pokemon-card.tsx
│ │ ├── pokemon-details.tsx
│ │ ├── pokemon-list.tsx
│ │ └── species-info.tsx
│ ├── query-provider.tsx
│ ├── ratio-bar.tsx
│ ├── site-footer.tsx
│ ├── site-header.tsx
│ ├── stats-bar.tsx
│ ├── store
│ │ └── store.ts
│ └── ui
│ │ ├── aspect-ratio.tsx
│ │ ├── badge.tsx
│ │ ├── button.tsx
│ │ ├── card.tsx
│ │ ├── command.tsx
│ │ ├── dialog.tsx
│ │ └── separator.tsx
├── hooks
│ └── use-pokeapi.ts
├── lib
│ ├── data
│ │ └── pokemon-search.ts
│ ├── gsap
│ │ └── index.ts
│ └── utils.ts
└── types.d.ts
├── tailwind.config.js
└── tsconfig.json
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "next/core-web-vitals"
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env*.local
29 |
30 | # vercel
31 | .vercel
32 |
33 | # typescript
34 | *.tsbuildinfo
35 | next-env.d.ts
36 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "typescript.tsdk": "node_modules/typescript/lib",
3 | "typescript.enablePromptUseWorkspaceTsdk": true
4 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # another-pokedex
3 |
4 | ## Introduction
5 | Another pokedex app ... BUT!!! Using new shiny tools 🤩
6 |
7 | yes, this is another pokedex app, but after learning from my previous projects, and the amazing tools that have been coming out, I wanted to revisit an rebuild one of my first web app that introduced me to web development.
8 |
9 | **project features Includes**:
10 |
11 | - Caching
12 | - Animations
13 | - Pagination
14 | - Search
15 |
16 | **TODO**:
17 |
18 |
19 | - Favorites
20 | - PWA
21 |
22 |
23 | **Current Status** : Work In Progress
24 |
25 |
26 | ## Tech Stack
27 |
28 | In this project I utilized:
29 | * Tailwind
30 | * React
31 | * Next-13
32 | * Gsap
33 | * Zustand
34 | * [Tanstack React Query](https://tanstack.com/query/latest/)
35 | * [Shadcn/ui](https://ui.shadcn.com/)
36 |
37 |
38 |
39 |
40 | ## Screenshots
41 |
42 | 
43 |
44 | 
45 |
46 |
47 | ## Roadmap
48 |
49 | - File cleanup and refactoring code
50 |
51 | - Update visuals and graphics
52 |
53 | - Add more interactivity
54 |
55 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | experimental: {
4 | appDir: true,
5 | },
6 | }
7 |
8 | module.exports = nextConfig
9 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "another-pokedex",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@radix-ui/react-aspect-ratio": "^1.0.2",
13 | "@radix-ui/react-dialog": "^1.0.3",
14 | "@radix-ui/react-progress": "^1.0.2",
15 | "@radix-ui/react-separator": "^1.0.2",
16 | "@tanstack/react-query": "^4.29.5",
17 | "@tanstack/react-query-devtools": "^4.29.6",
18 | "@types/node": "18.16.1",
19 | "@types/react": "18.2.0",
20 | "@types/react-dom": "18.2.1",
21 | "autoprefixer": "10.4.14",
22 | "axios": "^1.3.6",
23 | "class-variance-authority": "^0.6.0",
24 | "clsx": "^1.2.1",
25 | "cmdk": "^0.2.0",
26 | "eslint": "8.39.0",
27 | "eslint-config-next": "13.3.1",
28 | "gsap": "^3.11.5",
29 | "lucide-react": "^0.182.0",
30 | "next": "13.3.1",
31 | "postcss": "8.4.23",
32 | "react": "18.2.0",
33 | "react-dom": "18.2.0",
34 | "tailwind-merge": "^1.12.0",
35 | "tailwindcss": "3.3.2",
36 | "tailwindcss-animate": "^1.0.5",
37 | "typescript": "5.0.4",
38 | "zustand": "^4.3.7"
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/app/api/hello/route.ts:
--------------------------------------------------------------------------------
1 | export async function GET(request: Request) {
2 | return new Response('Hello, Next.js!')
3 | }
4 |
--------------------------------------------------------------------------------
/src/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kyuuari/another-pokedex/14022481c688ed738ff0bdb34ae405b760a9784e/src/app/favicon.ico
--------------------------------------------------------------------------------
/src/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer base {
6 | :root {
7 | --background: 0 0% 100%;
8 | --foreground: 222.2 47.4% 11.2%;
9 |
10 | --muted: 210 40% 96.1%;
11 | --muted-foreground: 215.4 16.3% 46.9%;
12 |
13 | --popover: 0 0% 100%;
14 | --popover-foreground: 222.2 47.4% 11.2%;
15 |
16 | --card: 0 0% 100%;
17 | --card-foreground: 222.2 47.4% 11.2%;
18 |
19 | --border: 214.3 31.8% 91.4%;
20 | --input: 214.3 31.8% 91.4%;
21 |
22 | --primary: 222.2 47.4% 11.2%;
23 | --primary-foreground: 210 40% 98%;
24 |
25 | --secondary: 210 40% 96.1%;
26 | --secondary-foreground: 222.2 47.4% 11.2%;
27 |
28 | --accent: 210 40% 96.1%;
29 | --accent-foreground: 222.2 47.4% 11.2%;
30 |
31 | --destructive: 0 100% 50%;
32 | --destructive-foreground: 210 40% 98%;
33 |
34 | --ring: 215 20.2% 65.1%;
35 |
36 | --radius: 0.5rem;
37 | }
38 |
39 | .dark {
40 | --background: 224 71% 4%;
41 | --foreground: 213 31% 91%;
42 |
43 | --muted: 223 47% 11%;
44 | --muted-foreground: 215.4 16.3% 56.9%;
45 |
46 | --popover: 224 71% 4%;
47 | --popover-foreground: 215 20.2% 65.1%;
48 |
49 | --card: 0 0% 100%;
50 | --card-foreground: 222.2 47.4% 11.2%;
51 |
52 | --border: 216 34% 17%;
53 | --input: 216 34% 17%;
54 |
55 | --primary: 210 40% 98%;
56 | --primary-foreground: 222.2 47.4% 1.2%;
57 |
58 | --secondary: 222.2 47.4% 11.2%;
59 | --secondary-foreground: 210 40% 98%;
60 |
61 | --accent: 216 34% 17%;
62 | --accent-foreground: 210 40% 98%;
63 |
64 | --destructive: 0 63% 31%;
65 | --destructive-foreground: 210 40% 98%;
66 |
67 | --ring: 216 34% 17%;
68 |
69 | --radius: 0.5rem;
70 | }
71 | }
72 |
73 | @layer base {
74 | * {
75 | @apply border-border;
76 | }
77 | body {
78 | @apply bg-background text-foreground;
79 | font-feature-settings: "rlig" 1, "calt" 1;
80 | }
81 | }
--------------------------------------------------------------------------------
/src/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import "./globals.css";
2 | import { Inter } from "next/font/google";
3 | import QueryProvider from "@/components/query-provider";
4 | import SiteHeader from "@/components/site-header";
5 | import { SiteFooter } from "@/components/site-footer";
6 |
7 | const inter = Inter({ subsets: ["latin"] });
8 |
9 | export const metadata = {
10 | title: "Another Pokedex",
11 | description: "Yet another pokemon app ... but, it uses new shiny tools 🤩",
12 | };
13 |
14 | export default function RootLayout({
15 | children,
16 | }: {
17 | children: React.ReactNode;
18 | }) {
19 | return (
20 |
21 |
22 |
23 | {children}
24 |
25 |
26 |
27 | );
28 | }
29 |
--------------------------------------------------------------------------------
/src/app/page.tsx:
--------------------------------------------------------------------------------
1 | import PokemonList from "@/components/pokemon/pokemon-list";
2 |
3 | export default function Home() {
4 | return (
5 |
6 |
7 |
8 |
9 |
10 | );
11 | }
12 |
--------------------------------------------------------------------------------
/src/app/pokemon/[slug]/page.tsx:
--------------------------------------------------------------------------------
1 | import PokemonDetails from "@/components/pokemon/pokemon-details";
2 | import { Button } from "@/components/ui/button";
3 | import Link from "next/link";
4 |
5 | export default function Page({ params }: { params: { slug: string } }) {
6 | return (
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | );
18 | }
19 |
--------------------------------------------------------------------------------
/src/components/animated-value.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import { useEffect, useRef } from "react";
3 | import { gsap } from "@/lib/gsap/index";
4 |
5 | type Props = {
6 | value: number;
7 | round?: number;
8 | };
9 |
10 | export const AnimatedValue = ({ value, round }: Props) => {
11 | const valueRef = useRef(null);
12 |
13 | useEffect(() => {
14 | const context = gsap.context(() => {
15 | gsap.effects.counterAnimation(
16 | valueRef.current,
17 | {
18 | end: value,
19 | ease: "linear",
20 | increment: 0.5,
21 | round: round,
22 | // duration: 0.5,
23 | }
24 | // "-=0.02"
25 | );
26 | });
27 |
28 | return () => {
29 | context.revert();
30 | };
31 | }, []);
32 |
33 | return (
34 |
35 | 0.00
36 |
37 | );
38 | };
39 |
--------------------------------------------------------------------------------
/src/components/command-search.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import {
3 | CommandDialog,
4 | CommandEmpty,
5 | CommandGroup,
6 | CommandInput,
7 | CommandItem,
8 | CommandList,
9 | } from "@/components/ui/command";
10 | import { useCallback, useEffect, useState } from "react";
11 | import { PokemonSearchData } from "@/lib/data/pokemon-search";
12 | import { useRouter } from "next/navigation";
13 | import { Button } from "./ui/button";
14 | import { capitalize, cn } from "@/lib/utils";
15 | import { DialogProps } from "@radix-ui/react-dialog";
16 |
17 | export function CommandSearch({ ...props }: DialogProps) {
18 | const pokemonSearch = PokemonSearchData.results;
19 | const router = useRouter();
20 | const [open, setOpen] = useState(false);
21 |
22 | useEffect(() => {
23 | const down = (e: KeyboardEvent) => {
24 | if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
25 | e.preventDefault();
26 | setOpen((open) => !open);
27 | }
28 | };
29 |
30 | document.addEventListener("keydown", down);
31 | return () => document.removeEventListener("keydown", down);
32 | }, []);
33 |
34 | const runCommand = useCallback((command: () => unknown) => {
35 | setOpen(false);
36 | command();
37 | }, []);
38 |
39 | return (
40 | <>
41 |
55 |
56 | No results found.
57 |
58 |
59 |
60 | {pokemonSearch.map((pokemon, index) => (
61 | {
64 | runCommand(() => router.push(`/pokemon/${pokemon.name}`));
65 | }}
66 | >
67 | {capitalize(pokemon.name)}
68 |
69 | ))}
70 |
71 |
72 |
73 | >
74 | );
75 | }
76 |
--------------------------------------------------------------------------------
/src/components/icons.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | AlertTriangle,
3 | ArrowRight,
4 | Check,
5 | ChevronLeft,
6 | ChevronRight,
7 | ClipboardCheck,
8 | Copy,
9 | CreditCard,
10 | File,
11 | FileText,
12 | HelpCircle,
13 | Image,
14 | Instagram,
15 | Laptop,
16 | Loader2,
17 | LucideProps,
18 | Moon,
19 | MoreVertical,
20 | Pizza,
21 | Plus,
22 | Settings,
23 | SunMedium,
24 | Trash,
25 | User,
26 | X,
27 | type Icon as LucideIcon,
28 | } from "lucide-react";
29 |
30 | export type Icon = LucideIcon;
31 |
32 | export const Icons = {
33 | logo: (props: LucideProps) => (
34 |
83 | ),
84 | close: X,
85 | spinner: Loader2,
86 | chevronLeft: ChevronLeft,
87 | chevronRight: ChevronRight,
88 | trash: Trash,
89 | post: FileText,
90 | page: File,
91 | media: Image,
92 | settings: Settings,
93 | billing: CreditCard,
94 | ellipsis: MoreVertical,
95 | add: Plus,
96 | warning: AlertTriangle,
97 | user: User,
98 | arrowRight: ArrowRight,
99 | help: HelpCircle,
100 | pizza: Pizza,
101 | check: Check,
102 | copy: Copy,
103 | copyDone: ClipboardCheck,
104 | sun: SunMedium,
105 | moon: Moon,
106 | laptop: Laptop,
107 | instagram: Instagram,
108 | gitHub: (props: LucideProps) => (
109 |
115 | ),
116 | radix: (props: LucideProps) => (
117 |
128 | ),
129 | aria: (props: LucideProps) => (
130 |
133 | ),
134 | npm: (props: LucideProps) => (
135 |
138 | ),
139 | yarn: (props: LucideProps) => (
140 |
143 | ),
144 | pnpm: (props: LucideProps) => (
145 |
148 | ),
149 | react: (props: LucideProps) => (
150 |
153 | ),
154 | tailwind: (props: LucideProps) => (
155 |
158 | ),
159 | google: (props: LucideProps) => (
160 |
166 | ),
167 | apple: (props: LucideProps) => (
168 |
174 | ),
175 | paypal: (props: LucideProps) => (
176 |
182 | ),
183 | linkedin: (props: LucideProps) => (
184 |
190 | ),
191 | behance: (props: LucideProps) => (
192 |
198 | ),
199 | twitter: (props: LucideProps) => (
200 |
206 | ),
207 | };
208 |
--------------------------------------------------------------------------------
/src/components/loading.tsx:
--------------------------------------------------------------------------------
1 | import { Icons } from "./icons";
2 |
3 | type Props = {};
4 |
5 | export default function loading({}: Props) {
6 | return (
7 |
8 |
9 |
10 |
Loading
11 |
12 |
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/src/components/main-nav.tsx:
--------------------------------------------------------------------------------
1 | import Link from "next/link";
2 | import React from "react";
3 | import { Icons } from "./icons";
4 |
5 | type Props = {};
6 |
7 | export default function MainNav({}: Props) {
8 | return (
9 |
10 |
11 |
12 | {"Pokedex"}
13 |
14 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/src/components/pokemon/pokedata-card.tsx:
--------------------------------------------------------------------------------
1 | import React, { Suspense } from "react";
2 | import { Card, CardContent, CardHeader, CardTitle } from "../ui/card";
3 | import { AnimatedValue } from "../animated-value";
4 | import { StatsBar } from "../stats-bar";
5 | import { PokemonData } from "@/types";
6 | import { capitalize } from "@/lib/utils";
7 | import { Badge } from "../ui/badge";
8 | import { Separator } from "../ui/separator";
9 |
10 | type Props = {
11 | pokemonData: PokemonData;
12 | pokemonImageURL: string;
13 | };
14 |
15 | export default function PokedataCard({ pokemonData, pokemonImageURL }: Props) {
16 | return (
17 |
18 |
19 |
20 |
21 | {capitalize(pokemonData.name)}
22 |
23 |
24 | #{pokemonData.id ?? 0}
25 |
26 |
27 |
28 | {pokemonData.types.map((type, index) => (
29 |
30 | {capitalize(type.type.name)}
31 |
32 | ))}
33 |
34 |
35 | Loading...
}>
36 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
Height
49 |
50 | m
51 |
52 |
53 |
54 |
55 |
Weight
56 |
57 | kg
58 |
59 |
60 |
61 |
62 |
63 | {pokemonData.stats.map((stats, index) => (
64 |
65 |
66 | {capitalize(stats.stat.name)} :{" "}
67 |
68 |
69 |
70 |
71 | ))}
72 |
73 |
74 |
75 | );
76 | }
77 |
--------------------------------------------------------------------------------
/src/components/pokemon/pokemon-card.tsx:
--------------------------------------------------------------------------------
1 | import React, { Suspense } from "react";
2 |
3 | import Link from "next/link";
4 | import { capitalize } from "@/lib/utils";
5 | import { Card, CardContent, CardHeader, CardTitle } from "../ui/card";
6 |
7 | type Props = {
8 | pokemonName: string;
9 | pokemonImgUrl?: string;
10 | };
11 |
12 | export default function PokemonCard({ pokemonName, pokemonImgUrl }: Props) {
13 | return (
14 |
15 |
16 |
17 | {capitalize(pokemonName)}
18 |
19 |
20 | Loading...}>
21 |
26 |
27 |
28 |
29 |
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/src/components/pokemon/pokemon-details.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import PokedataCard from "./pokedata-card";
3 | import SpeciesInfo from "./species-info";
4 | import { Suspense } from "react";
5 | import Loading from "../loading";
6 | import { findPokemonDBImage, useGetPokemon } from "@/hooks/use-pokeapi";
7 | import { isError } from "@tanstack/react-query";
8 |
9 | type Props = {
10 | pokemonName: string;
11 | };
12 |
13 | export default function PokemonDetails({ pokemonName }: Props) {
14 | const { data, isLoading, isError } = useGetPokemon(pokemonName);
15 |
16 | if (isLoading) {
17 | return ;
18 | }
19 |
20 | if (isError) {
21 | return No Data Found
;
22 | }
23 |
24 | return (
25 |
26 | {data && (
27 |
28 |
34 |
35 |
36 | }>
37 |
38 |
39 |
40 |
41 | )}
42 |
43 | );
44 | }
45 |
--------------------------------------------------------------------------------
/src/components/pokemon/pokemon-list.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React, { useEffect, useState } from "react";
3 | import PokemonCard from "./pokemon-card";
4 | import { useGetAllPokemonPage } from "@/hooks/use-pokeapi";
5 | import Loading from "../loading";
6 | import { PokemonData } from "@/types";
7 | import usePaginationStore from "../store/store";
8 | import { Button } from "../ui/button";
9 |
10 | type Props = {};
11 |
12 | export default function PokemonList({}: Props) {
13 | const { currentPage, itemsPerPage, updatePagePosition } =
14 | usePaginationStore();
15 |
16 | const {
17 | isLoading,
18 | data: pokemonPage,
19 | error,
20 | } = useGetAllPokemonPage(itemsPerPage, currentPage);
21 |
22 | const [pokemonList, setPokemonList] = useState([]);
23 |
24 | useEffect(() => {
25 | setPokemonList(pokemonPage ?? []);
26 | }, [pokemonPage]);
27 |
28 | if (isLoading) {
29 | return ;
30 | }
31 |
32 | if (error) {
33 | return Error
;
34 | }
35 |
36 | return (
37 |
38 | {pokemonList.map((pokemon, index) => (
39 |
44 | ))}
45 |
46 |
47 |
50 |
53 |
54 |
55 | );
56 | }
57 |
--------------------------------------------------------------------------------
/src/components/pokemon/species-info.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import { useGetSpeciesInfo } from "@/hooks/use-pokeapi";
3 | import { capitalize } from "@/lib/utils";
4 | import { PokemonData } from "@/types";
5 | import React from "react";
6 | import { RatioBar } from "../ratio-bar";
7 | import { Separator } from "@radix-ui/react-separator";
8 | import Loading from "../loading";
9 |
10 | type Props = {
11 | pokemonData: PokemonData;
12 | };
13 |
14 | export default function SpeciesInfo({ pokemonData }: Props) {
15 | const { data: speciesInfo, isLoading } = useGetSpeciesInfo(
16 | pokemonData.species.url
17 | );
18 | const { flavor_text_entries, color, egg_groups, gender_rate, capture_rate } =
19 | speciesInfo ?? {};
20 |
21 | const enText = flavor_text_entries?.find(
22 | (text) => text.language.name === "en"
23 | )?.flavor_text;
24 | const jpText = flavor_text_entries?.find(
25 | (text) => text.language.name === "ja-Hrkt"
26 | )?.flavor_text;
27 |
28 | const catchRate = Math.round((100 / 255) * speciesInfo?.capture_rate!);
29 |
30 | if (isLoading) {
31 | return ;
32 | }
33 |
34 | return (
35 | <>
36 | {speciesInfo && (
37 |
91 | )}
92 | >
93 | );
94 | }
95 |
--------------------------------------------------------------------------------
/src/components/query-provider.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
3 | // import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
4 | import { ReactNode, useState } from "react";
5 |
6 | export default function QueryProvider({ children }: { children: ReactNode }) {
7 | const [queryClient] = useState(() => new QueryClient());
8 |
9 | return (
10 |
11 | {children}
12 | {/* */}
13 |
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/src/components/ratio-bar.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | type Props = {
4 | value: number;
5 | };
6 |
7 | export const RatioBar = ({ value }: Props) => {
8 | const femaleRate = value;
9 | const genderRatioFemale = 12.5 * femaleRate;
10 | const genderRatioMale = 12.5 * (8 - femaleRate);
11 |
12 | return (
13 | <>
14 | {femaleRate > 0 ? (
15 | {`Female: ${genderRatioFemale}% | Male: ${genderRatioMale}%`}
16 | ) : (
17 | Genderless
18 | )}
19 | >
20 | );
21 | };
22 |
--------------------------------------------------------------------------------
/src/components/site-footer.tsx:
--------------------------------------------------------------------------------
1 | export function SiteFooter() {
2 | return (
3 |
12 | );
13 | }
14 |
--------------------------------------------------------------------------------
/src/components/site-header.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import MainNav from "./main-nav";
3 | import { CommandSearch } from "./command-search";
4 | import { Icons } from "./icons";
5 |
6 | type Props = {};
7 |
8 | export default function SiteHeader({}: Props) {
9 | return (
10 |
38 | );
39 | }
40 |
--------------------------------------------------------------------------------
/src/components/stats-bar.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React, { useEffect, useRef } from "react";
3 | import gsap from "gsap";
4 |
5 | type Props = {
6 | value: number;
7 | };
8 |
9 | export const StatsBar = ({ value }: Props) => {
10 | const barRef = useRef(null!);
11 |
12 | useEffect(() => {
13 | gsap.to(barRef.current, {
14 | width: `${(value / 255) * 100}%`,
15 | duration: 0.7,
16 | ease: `rough({ template: bounce.out, strength: 1, points: 10, taper: out, randomize: true, clamp: false})`,
17 | });
18 | }, [value]);
19 |
20 | return (
21 |
28 | );
29 | };
30 |
--------------------------------------------------------------------------------
/src/components/store/store.ts:
--------------------------------------------------------------------------------
1 | import { create } from "zustand";
2 |
3 | type PaginationStore = {
4 | currentPage: number;
5 | itemsPerPage: number;
6 | setCurrentPage: (pageNumber: number) => void;
7 | setItemsPerPage: (itemsPerPage: number) => void;
8 | updatePagePosition: (pagePositionDelta: number) => void;
9 | };
10 |
11 | const usePaginationStore = create((set) => ({
12 | currentPage: 0,
13 | itemsPerPage: 12,
14 | setCurrentPage: (pageNumber: number) =>
15 | set((state) => ({
16 | ...state,
17 | currentPage: pageNumber < 0 ? 0 : pageNumber,
18 | })),
19 | setItemsPerPage: (itemsPerPage: number) =>
20 | set((state) => ({ ...state, itemsPerPage: itemsPerPage })),
21 | updatePagePosition: (pagePositionDelta: number) =>
22 | set((state) => ({
23 | ...state,
24 | currentPage:
25 | state.currentPage + pagePositionDelta < 0
26 | ? 0
27 | : state.currentPage + pagePositionDelta,
28 | })),
29 | }));
30 |
31 | export default usePaginationStore;
32 |
--------------------------------------------------------------------------------
/src/components/ui/aspect-ratio.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio"
4 |
5 | const AspectRatio = AspectRatioPrimitive.Root
6 |
7 | export { AspectRatio }
8 |
--------------------------------------------------------------------------------
/src/components/ui/badge.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 | import { VariantProps, cva } from "class-variance-authority";
3 |
4 | import { cn } from "@/lib/utils";
5 |
6 | const badgeVariants = cva(
7 | "inline-flex items-center border rounded-full px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
8 | {
9 | variants: {
10 | variant: {
11 | default: "bg-primary border-transparent text-primary-foreground",
12 | secondary:
13 | "bg-secondary hover:bg-secondary/80 border-transparent text-secondary-foreground",
14 | destructive:
15 | "bg-destructive hover:bg-destructive/80 border-transparent text-destructive-foreground",
16 | outline: "text-foreground",
17 | },
18 | type: {
19 | normal: "bg-stone-500 border-transparent text-primary-foreground",
20 | fire: "bg-orange-500 border-transparent text-primary-foreground",
21 | water: "bg-sky-500 border-transparent text-primary-foreground",
22 | grass: "bg-green-600 border-transparent text-primary-foreground",
23 | electric: "bg-yellow-400 border-transparent text-primary-foreground",
24 | ice: "bg-blue-300 border-transparent text-primary-foreground",
25 | fighting: "bg-red-500 border-transparent text-primary-foreground",
26 | poison: "bg-fuchsia-600 border-transparent text-primary-foreground",
27 | ground: "bg-orange-300 border-transparent text-primary-foreground",
28 |
29 | flying: "bg-violet-300 border-transparent text-primary-foreground",
30 | psychic: "bg-pink-600 border-transparent text-primary-foreground",
31 | bug: "bg-lime-500 border-transparent text-primary-foreground",
32 | rock: "bg-stone-600 border-transparent text-primary-foreground",
33 | ghost: "bg-violet-400 border-transparent text-primary-foreground",
34 | dark: "bg-stone-800 border-transparent text-primary-foreground",
35 | dragon: "bg-violet-600 border-transparent text-primary-foreground",
36 | steel: "bg-slate-400 border-transparent text-primary-foreground",
37 | fairy: "bg-pink-300 border-transparent text-primary-foreground",
38 | },
39 | },
40 | defaultVariants: {
41 | variant: "default",
42 | },
43 | }
44 | );
45 |
46 | export interface BadgeProps
47 | extends React.HTMLAttributes,
48 | VariantProps {}
49 |
50 | function Badge({ className, variant, type, ...props }: BadgeProps) {
51 | return (
52 |
56 | );
57 | }
58 |
59 | export { Badge, badgeVariants };
60 |
--------------------------------------------------------------------------------
/src/components/ui/button.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 | import { VariantProps, cva } from "class-variance-authority"
3 |
4 | import { cn } from "@/lib/utils"
5 |
6 | const buttonVariants = cva(
7 | "inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none ring-offset-background",
8 | {
9 | variants: {
10 | variant: {
11 | default: "bg-primary text-primary-foreground hover:bg-primary/90",
12 | destructive:
13 | "bg-destructive text-destructive-foreground hover:bg-destructive/90",
14 | outline:
15 | "border border-input hover:bg-accent hover:text-accent-foreground",
16 | secondary:
17 | "bg-secondary text-secondary-foreground hover:bg-secondary/80",
18 | ghost: "hover:bg-accent hover:text-accent-foreground",
19 | link: "underline-offset-4 hover:underline text-primary",
20 | },
21 | size: {
22 | default: "h-10 py-2 px-4",
23 | sm: "h-9 px-3 rounded-md",
24 | lg: "h-11 px-8 rounded-md",
25 | },
26 | },
27 | defaultVariants: {
28 | variant: "default",
29 | size: "default",
30 | },
31 | }
32 | )
33 |
34 | export interface ButtonProps
35 | extends React.ButtonHTMLAttributes,
36 | VariantProps {}
37 |
38 | const Button = React.forwardRef(
39 | ({ className, variant, size, ...props }, ref) => {
40 | return (
41 |
46 | )
47 | }
48 | )
49 | Button.displayName = "Button"
50 |
51 | export { Button, buttonVariants }
52 |
--------------------------------------------------------------------------------
/src/components/ui/card.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 |
3 | import { cn } from "@/lib/utils"
4 |
5 | const Card = React.forwardRef<
6 | HTMLDivElement,
7 | React.HTMLAttributes
8 | >(({ className, ...props }, ref) => (
9 |
17 | ))
18 | Card.displayName = "Card"
19 |
20 | const CardHeader = React.forwardRef<
21 | HTMLDivElement,
22 | React.HTMLAttributes
23 | >(({ className, ...props }, ref) => (
24 |
29 | ))
30 | CardHeader.displayName = "CardHeader"
31 |
32 | const CardTitle = React.forwardRef<
33 | HTMLParagraphElement,
34 | React.HTMLAttributes
35 | >(({ className, ...props }, ref) => (
36 |
44 | ))
45 | CardTitle.displayName = "CardTitle"
46 |
47 | const CardDescription = React.forwardRef<
48 | HTMLParagraphElement,
49 | React.HTMLAttributes
50 | >(({ className, ...props }, ref) => (
51 |
56 | ))
57 | CardDescription.displayName = "CardDescription"
58 |
59 | const CardContent = React.forwardRef<
60 | HTMLDivElement,
61 | React.HTMLAttributes
62 | >(({ className, ...props }, ref) => (
63 |
64 | ))
65 | CardContent.displayName = "CardContent"
66 |
67 | const CardFooter = React.forwardRef<
68 | HTMLDivElement,
69 | React.HTMLAttributes
70 | >(({ className, ...props }, ref) => (
71 |
76 | ))
77 | CardFooter.displayName = "CardFooter"
78 |
79 | export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
80 |
--------------------------------------------------------------------------------
/src/components/ui/command.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import * as React from "react";
4 | import { DialogProps } from "@radix-ui/react-dialog";
5 | import { Command as CommandPrimitive } from "cmdk";
6 | import { Search } from "lucide-react";
7 |
8 | import { cn } from "@/lib/utils";
9 | import { Dialog, DialogContent } from "@/components/ui/dialog";
10 |
11 | const Command = React.forwardRef<
12 | React.ElementRef,
13 | React.ComponentPropsWithoutRef
14 | >(({ className, ...props }, ref) => (
15 |
23 | ));
24 | Command.displayName = CommandPrimitive.displayName;
25 |
26 | interface CommandDialogProps extends DialogProps {}
27 |
28 | const CommandDialog = ({ children, ...props }: CommandDialogProps) => {
29 | return (
30 |
37 | );
38 | };
39 |
40 | const CommandInput = React.forwardRef<
41 | React.ElementRef,
42 | React.ComponentPropsWithoutRef
43 | >(({ className, ...props }, ref) => (
44 |
45 |
46 |
54 |
55 | ));
56 |
57 | CommandInput.displayName = CommandPrimitive.Input.displayName;
58 |
59 | const CommandList = React.forwardRef<
60 | React.ElementRef,
61 | React.ComponentPropsWithoutRef
62 | >(({ className, ...props }, ref) => (
63 |
68 | ));
69 |
70 | CommandList.displayName = CommandPrimitive.List.displayName;
71 |
72 | const CommandEmpty = React.forwardRef<
73 | React.ElementRef,
74 | React.ComponentPropsWithoutRef
75 | >((props, ref) => (
76 |
81 | ));
82 |
83 | CommandEmpty.displayName = CommandPrimitive.Empty.displayName;
84 |
85 | const CommandGroup = React.forwardRef<
86 | React.ElementRef,
87 | React.ComponentPropsWithoutRef
88 | >(({ className, ...props }, ref) => (
89 |
97 | ));
98 |
99 | CommandGroup.displayName = CommandPrimitive.Group.displayName;
100 |
101 | const CommandSeparator = React.forwardRef<
102 | React.ElementRef,
103 | React.ComponentPropsWithoutRef
104 | >(({ className, ...props }, ref) => (
105 |
110 | ));
111 | CommandSeparator.displayName = CommandPrimitive.Separator.displayName;
112 |
113 | const CommandItem = React.forwardRef<
114 | React.ElementRef,
115 | React.ComponentPropsWithoutRef
116 | >(({ className, ...props }, ref) => (
117 |
125 | ));
126 |
127 | CommandItem.displayName = CommandPrimitive.Item.displayName;
128 |
129 | const CommandShortcut = ({
130 | className,
131 | ...props
132 | }: React.HTMLAttributes) => {
133 | return (
134 |
141 | );
142 | };
143 | CommandShortcut.displayName = "CommandShortcut";
144 |
145 | export {
146 | Command,
147 | CommandDialog,
148 | CommandInput,
149 | CommandList,
150 | CommandEmpty,
151 | CommandGroup,
152 | CommandItem,
153 | CommandShortcut,
154 | CommandSeparator,
155 | };
156 |
--------------------------------------------------------------------------------
/src/components/ui/dialog.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as DialogPrimitive from "@radix-ui/react-dialog"
5 | import { X } from "lucide-react"
6 |
7 | import { cn } from "@/lib/utils"
8 |
9 | const Dialog = DialogPrimitive.Root
10 |
11 | const DialogTrigger = DialogPrimitive.Trigger
12 |
13 | const DialogPortal = ({
14 | className,
15 | children,
16 | ...props
17 | }: DialogPrimitive.DialogPortalProps) => (
18 |
19 |
20 | {children}
21 |
22 |
23 | )
24 | DialogPortal.displayName = DialogPrimitive.Portal.displayName
25 |
26 | const DialogOverlay = React.forwardRef<
27 | React.ElementRef,
28 | React.ComponentPropsWithoutRef
29 | >(({ className, ...props }, ref) => (
30 |
38 | ))
39 | DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
40 |
41 | const DialogContent = React.forwardRef<
42 | React.ElementRef,
43 | React.ComponentPropsWithoutRef
44 | >(({ className, children, ...props }, ref) => (
45 |
46 |
47 |
55 | {children}
56 |
57 |
58 | Close
59 |
60 |
61 |
62 | ))
63 | DialogContent.displayName = DialogPrimitive.Content.displayName
64 |
65 | const DialogHeader = ({
66 | className,
67 | ...props
68 | }: React.HTMLAttributes) => (
69 |
76 | )
77 | DialogHeader.displayName = "DialogHeader"
78 |
79 | const DialogFooter = ({
80 | className,
81 | ...props
82 | }: React.HTMLAttributes) => (
83 |
90 | )
91 | DialogFooter.displayName = "DialogFooter"
92 |
93 | const DialogTitle = React.forwardRef<
94 | React.ElementRef,
95 | React.ComponentPropsWithoutRef
96 | >(({ className, ...props }, ref) => (
97 |
105 | ))
106 | DialogTitle.displayName = DialogPrimitive.Title.displayName
107 |
108 | const DialogDescription = React.forwardRef<
109 | React.ElementRef,
110 | React.ComponentPropsWithoutRef
111 | >(({ className, ...props }, ref) => (
112 |
117 | ))
118 | DialogDescription.displayName = DialogPrimitive.Description.displayName
119 |
120 | export {
121 | Dialog,
122 | DialogTrigger,
123 | DialogContent,
124 | DialogHeader,
125 | DialogFooter,
126 | DialogTitle,
127 | DialogDescription,
128 | }
129 |
--------------------------------------------------------------------------------
/src/components/ui/separator.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as SeparatorPrimitive from "@radix-ui/react-separator"
5 |
6 | import { cn } from "@/lib/utils"
7 |
8 | const Separator = React.forwardRef<
9 | React.ElementRef,
10 | React.ComponentPropsWithoutRef
11 | >(
12 | (
13 | { className, orientation = "horizontal", decorative = true, ...props },
14 | ref
15 | ) => (
16 |
27 | )
28 | )
29 | Separator.displayName = SeparatorPrimitive.Root.displayName
30 |
31 | export { Separator }
32 |
--------------------------------------------------------------------------------
/src/hooks/use-pokeapi.ts:
--------------------------------------------------------------------------------
1 | "use client";
2 | import { PokemonData, PokemonType, SpeciesInfo } from "@/types";
3 | import { useQuery } from "@tanstack/react-query";
4 | import axios from "axios";
5 |
6 | export const useGetPokemon = (pokemonName: string) => {
7 | return useQuery({
8 | queryKey: ["pokemon", pokemonName],
9 | queryFn: async () => {
10 | const { data } = await axios.get(
11 | `https://pokeapi.co/api/v2/pokemon/${pokemonName}`
12 | );
13 | return data as PokemonData;
14 | },
15 | select: (data) => ({
16 | id: data.id,
17 | name: data.name,
18 | types: data.types,
19 | stats: data.stats,
20 | height: data.height,
21 | weight: data.weight,
22 | abilities: data.abilities,
23 | species: data.species,
24 | }),
25 | });
26 | };
27 |
28 | export const useGetPokemonType = (pokemonName: string) => {
29 | return useQuery({
30 | queryKey: ["pokemonType"],
31 | queryFn: async () => {
32 | const { data } = await axios.get(
33 | `https://pokeapi.co/api/v2/pokemon/${pokemonName}`
34 | );
35 | return data.types;
36 | },
37 | });
38 | };
39 |
40 | export const useGetPokemonFromRegion = (region: string) => {
41 | return useQuery({
42 | queryKey: ["allPokemonFromRegion"],
43 | queryFn: async () => {
44 | const { data } = await axios.get(
45 | `https://pokeapi.co/api/v2/pokedex/${region}/?limit=8`
46 | );
47 | return data.pokemon_entries;
48 | },
49 | });
50 | };
51 |
52 | export const useGetAllPokemon = () => {
53 | return useQuery({
54 | queryKey: ["allPokemon"],
55 | queryFn: async () => {
56 | const { data } = await axios.get(
57 | "https://pokeapi.co/api/v2/pokemon/?limit=8"
58 | );
59 | return data.results;
60 | },
61 | });
62 | };
63 |
64 | export const useGetAllPokemonPage = (limit: number, offset: number) => {
65 | return useQuery({
66 | queryKey: ["allPokemon", limit, offset],
67 | queryFn: async () => {
68 | const { data } = await axios.get(
69 | `https://pokeapi.co/api/v2/pokemon/?limit=${limit}&offset=${offset}`
70 | );
71 | return data.results;
72 | },
73 | });
74 | };
75 |
76 | export const useFindPokemonImage = (index: number) => {
77 | return `https://github.com/PokeAPI/sprites/blob/master/sprites/pokemon/${index}.png?raw=true`;
78 | };
79 |
80 | export const findPokemonDBImage = (pokemonName: string) => {
81 | return `https://img.pokemondb.net/artwork/large/${pokemonName}.jpg`;
82 | };
83 |
84 | export const useGetSpeciesInfo = (url: string) => {
85 | return useQuery({
86 | queryKey: ["species", url],
87 | queryFn: async () => {
88 | const { data } = await axios.get(url);
89 | return data as SpeciesInfo;
90 | },
91 | select: (data) =>
92 | ({
93 | gender_rate: data.gender_rate,
94 | capture_rate: data.capture_rate,
95 | hatch_counter: data.hatch_counter,
96 | egg_groups: data.egg_groups,
97 | color: data.color,
98 | flavor_text_entries: data.flavor_text_entries,
99 | form_descriptions: data.form_descriptions,
100 | } || {}),
101 | });
102 | };
103 |
104 | //TODO: wip hook
105 | // export async function fetchData(params: string) {
106 | // const { data: pokemonData, isLoading: isLoadingPokemon } = await getPokemon(
107 | // params
108 | // );
109 | // const { data: speciesInfo, isLoading: isLoadingInfo } = await getSpeciesInfo(
110 | // pokemonData!.species.url
111 | // );
112 | // return { pokemonData, speciesInfo, isLoadingPokemon, isLoadingInfo };
113 | // }
114 |
--------------------------------------------------------------------------------
/src/lib/data/pokemon-search.ts:
--------------------------------------------------------------------------------
1 | export const PokemonSearchData = {
2 | count: 1281,
3 | next: null,
4 | previous: null,
5 | results: [
6 | { name: "bulbasaur", url: "https://pokeapi.co/api/v2/pokemon/1/" },
7 | { name: "ivysaur", url: "https://pokeapi.co/api/v2/pokemon/2/" },
8 | { name: "venusaur", url: "https://pokeapi.co/api/v2/pokemon/3/" },
9 | { name: "charmander", url: "https://pokeapi.co/api/v2/pokemon/4/" },
10 | { name: "charmeleon", url: "https://pokeapi.co/api/v2/pokemon/5/" },
11 | { name: "charizard", url: "https://pokeapi.co/api/v2/pokemon/6/" },
12 | { name: "squirtle", url: "https://pokeapi.co/api/v2/pokemon/7/" },
13 | { name: "wartortle", url: "https://pokeapi.co/api/v2/pokemon/8/" },
14 | { name: "blastoise", url: "https://pokeapi.co/api/v2/pokemon/9/" },
15 | { name: "caterpie", url: "https://pokeapi.co/api/v2/pokemon/10/" },
16 | { name: "metapod", url: "https://pokeapi.co/api/v2/pokemon/11/" },
17 | { name: "butterfree", url: "https://pokeapi.co/api/v2/pokemon/12/" },
18 | { name: "weedle", url: "https://pokeapi.co/api/v2/pokemon/13/" },
19 | { name: "kakuna", url: "https://pokeapi.co/api/v2/pokemon/14/" },
20 | { name: "beedrill", url: "https://pokeapi.co/api/v2/pokemon/15/" },
21 | { name: "pidgey", url: "https://pokeapi.co/api/v2/pokemon/16/" },
22 | { name: "pidgeotto", url: "https://pokeapi.co/api/v2/pokemon/17/" },
23 | { name: "pidgeot", url: "https://pokeapi.co/api/v2/pokemon/18/" },
24 | { name: "rattata", url: "https://pokeapi.co/api/v2/pokemon/19/" },
25 | { name: "raticate", url: "https://pokeapi.co/api/v2/pokemon/20/" },
26 | { name: "spearow", url: "https://pokeapi.co/api/v2/pokemon/21/" },
27 | { name: "fearow", url: "https://pokeapi.co/api/v2/pokemon/22/" },
28 | { name: "ekans", url: "https://pokeapi.co/api/v2/pokemon/23/" },
29 | { name: "arbok", url: "https://pokeapi.co/api/v2/pokemon/24/" },
30 | { name: "pikachu", url: "https://pokeapi.co/api/v2/pokemon/25/" },
31 | { name: "raichu", url: "https://pokeapi.co/api/v2/pokemon/26/" },
32 | { name: "sandshrew", url: "https://pokeapi.co/api/v2/pokemon/27/" },
33 | { name: "sandslash", url: "https://pokeapi.co/api/v2/pokemon/28/" },
34 | { name: "nidoran-f", url: "https://pokeapi.co/api/v2/pokemon/29/" },
35 | { name: "nidorina", url: "https://pokeapi.co/api/v2/pokemon/30/" },
36 | { name: "nidoqueen", url: "https://pokeapi.co/api/v2/pokemon/31/" },
37 | { name: "nidoran-m", url: "https://pokeapi.co/api/v2/pokemon/32/" },
38 | { name: "nidorino", url: "https://pokeapi.co/api/v2/pokemon/33/" },
39 | { name: "nidoking", url: "https://pokeapi.co/api/v2/pokemon/34/" },
40 | { name: "clefairy", url: "https://pokeapi.co/api/v2/pokemon/35/" },
41 | { name: "clefable", url: "https://pokeapi.co/api/v2/pokemon/36/" },
42 | { name: "vulpix", url: "https://pokeapi.co/api/v2/pokemon/37/" },
43 | { name: "ninetales", url: "https://pokeapi.co/api/v2/pokemon/38/" },
44 | { name: "jigglypuff", url: "https://pokeapi.co/api/v2/pokemon/39/" },
45 | { name: "wigglytuff", url: "https://pokeapi.co/api/v2/pokemon/40/" },
46 | { name: "zubat", url: "https://pokeapi.co/api/v2/pokemon/41/" },
47 | { name: "golbat", url: "https://pokeapi.co/api/v2/pokemon/42/" },
48 | { name: "oddish", url: "https://pokeapi.co/api/v2/pokemon/43/" },
49 | { name: "gloom", url: "https://pokeapi.co/api/v2/pokemon/44/" },
50 | { name: "vileplume", url: "https://pokeapi.co/api/v2/pokemon/45/" },
51 | { name: "paras", url: "https://pokeapi.co/api/v2/pokemon/46/" },
52 | { name: "parasect", url: "https://pokeapi.co/api/v2/pokemon/47/" },
53 | { name: "venonat", url: "https://pokeapi.co/api/v2/pokemon/48/" },
54 | { name: "venomoth", url: "https://pokeapi.co/api/v2/pokemon/49/" },
55 | { name: "diglett", url: "https://pokeapi.co/api/v2/pokemon/50/" },
56 | { name: "dugtrio", url: "https://pokeapi.co/api/v2/pokemon/51/" },
57 | { name: "meowth", url: "https://pokeapi.co/api/v2/pokemon/52/" },
58 | { name: "persian", url: "https://pokeapi.co/api/v2/pokemon/53/" },
59 | { name: "psyduck", url: "https://pokeapi.co/api/v2/pokemon/54/" },
60 | { name: "golduck", url: "https://pokeapi.co/api/v2/pokemon/55/" },
61 | { name: "mankey", url: "https://pokeapi.co/api/v2/pokemon/56/" },
62 | { name: "primeape", url: "https://pokeapi.co/api/v2/pokemon/57/" },
63 | { name: "growlithe", url: "https://pokeapi.co/api/v2/pokemon/58/" },
64 | { name: "arcanine", url: "https://pokeapi.co/api/v2/pokemon/59/" },
65 | { name: "poliwag", url: "https://pokeapi.co/api/v2/pokemon/60/" },
66 | { name: "poliwhirl", url: "https://pokeapi.co/api/v2/pokemon/61/" },
67 | { name: "poliwrath", url: "https://pokeapi.co/api/v2/pokemon/62/" },
68 | { name: "abra", url: "https://pokeapi.co/api/v2/pokemon/63/" },
69 | { name: "kadabra", url: "https://pokeapi.co/api/v2/pokemon/64/" },
70 | { name: "alakazam", url: "https://pokeapi.co/api/v2/pokemon/65/" },
71 | { name: "machop", url: "https://pokeapi.co/api/v2/pokemon/66/" },
72 | { name: "machoke", url: "https://pokeapi.co/api/v2/pokemon/67/" },
73 | { name: "machamp", url: "https://pokeapi.co/api/v2/pokemon/68/" },
74 | { name: "bellsprout", url: "https://pokeapi.co/api/v2/pokemon/69/" },
75 | { name: "weepinbell", url: "https://pokeapi.co/api/v2/pokemon/70/" },
76 | { name: "victreebel", url: "https://pokeapi.co/api/v2/pokemon/71/" },
77 | { name: "tentacool", url: "https://pokeapi.co/api/v2/pokemon/72/" },
78 | { name: "tentacruel", url: "https://pokeapi.co/api/v2/pokemon/73/" },
79 | { name: "geodude", url: "https://pokeapi.co/api/v2/pokemon/74/" },
80 | { name: "graveler", url: "https://pokeapi.co/api/v2/pokemon/75/" },
81 | { name: "golem", url: "https://pokeapi.co/api/v2/pokemon/76/" },
82 | { name: "ponyta", url: "https://pokeapi.co/api/v2/pokemon/77/" },
83 | { name: "rapidash", url: "https://pokeapi.co/api/v2/pokemon/78/" },
84 | { name: "slowpoke", url: "https://pokeapi.co/api/v2/pokemon/79/" },
85 | { name: "slowbro", url: "https://pokeapi.co/api/v2/pokemon/80/" },
86 | { name: "magnemite", url: "https://pokeapi.co/api/v2/pokemon/81/" },
87 | { name: "magneton", url: "https://pokeapi.co/api/v2/pokemon/82/" },
88 | { name: "farfetchd", url: "https://pokeapi.co/api/v2/pokemon/83/" },
89 | { name: "doduo", url: "https://pokeapi.co/api/v2/pokemon/84/" },
90 | { name: "dodrio", url: "https://pokeapi.co/api/v2/pokemon/85/" },
91 | { name: "seel", url: "https://pokeapi.co/api/v2/pokemon/86/" },
92 | { name: "dewgong", url: "https://pokeapi.co/api/v2/pokemon/87/" },
93 | { name: "grimer", url: "https://pokeapi.co/api/v2/pokemon/88/" },
94 | { name: "muk", url: "https://pokeapi.co/api/v2/pokemon/89/" },
95 | { name: "shellder", url: "https://pokeapi.co/api/v2/pokemon/90/" },
96 | { name: "cloyster", url: "https://pokeapi.co/api/v2/pokemon/91/" },
97 | { name: "gastly", url: "https://pokeapi.co/api/v2/pokemon/92/" },
98 | { name: "haunter", url: "https://pokeapi.co/api/v2/pokemon/93/" },
99 | { name: "gengar", url: "https://pokeapi.co/api/v2/pokemon/94/" },
100 | { name: "onix", url: "https://pokeapi.co/api/v2/pokemon/95/" },
101 | { name: "drowzee", url: "https://pokeapi.co/api/v2/pokemon/96/" },
102 | { name: "hypno", url: "https://pokeapi.co/api/v2/pokemon/97/" },
103 | { name: "krabby", url: "https://pokeapi.co/api/v2/pokemon/98/" },
104 | { name: "kingler", url: "https://pokeapi.co/api/v2/pokemon/99/" },
105 | { name: "voltorb", url: "https://pokeapi.co/api/v2/pokemon/100/" },
106 | { name: "electrode", url: "https://pokeapi.co/api/v2/pokemon/101/" },
107 | { name: "exeggcute", url: "https://pokeapi.co/api/v2/pokemon/102/" },
108 | { name: "exeggutor", url: "https://pokeapi.co/api/v2/pokemon/103/" },
109 | { name: "cubone", url: "https://pokeapi.co/api/v2/pokemon/104/" },
110 | { name: "marowak", url: "https://pokeapi.co/api/v2/pokemon/105/" },
111 | { name: "hitmonlee", url: "https://pokeapi.co/api/v2/pokemon/106/" },
112 | { name: "hitmonchan", url: "https://pokeapi.co/api/v2/pokemon/107/" },
113 | { name: "lickitung", url: "https://pokeapi.co/api/v2/pokemon/108/" },
114 | { name: "koffing", url: "https://pokeapi.co/api/v2/pokemon/109/" },
115 | { name: "weezing", url: "https://pokeapi.co/api/v2/pokemon/110/" },
116 | { name: "rhyhorn", url: "https://pokeapi.co/api/v2/pokemon/111/" },
117 | { name: "rhydon", url: "https://pokeapi.co/api/v2/pokemon/112/" },
118 | { name: "chansey", url: "https://pokeapi.co/api/v2/pokemon/113/" },
119 | { name: "tangela", url: "https://pokeapi.co/api/v2/pokemon/114/" },
120 | { name: "kangaskhan", url: "https://pokeapi.co/api/v2/pokemon/115/" },
121 | { name: "horsea", url: "https://pokeapi.co/api/v2/pokemon/116/" },
122 | { name: "seadra", url: "https://pokeapi.co/api/v2/pokemon/117/" },
123 | { name: "goldeen", url: "https://pokeapi.co/api/v2/pokemon/118/" },
124 | { name: "seaking", url: "https://pokeapi.co/api/v2/pokemon/119/" },
125 | { name: "staryu", url: "https://pokeapi.co/api/v2/pokemon/120/" },
126 | { name: "starmie", url: "https://pokeapi.co/api/v2/pokemon/121/" },
127 | { name: "mr-mime", url: "https://pokeapi.co/api/v2/pokemon/122/" },
128 | { name: "scyther", url: "https://pokeapi.co/api/v2/pokemon/123/" },
129 | { name: "jynx", url: "https://pokeapi.co/api/v2/pokemon/124/" },
130 | { name: "electabuzz", url: "https://pokeapi.co/api/v2/pokemon/125/" },
131 | { name: "magmar", url: "https://pokeapi.co/api/v2/pokemon/126/" },
132 | { name: "pinsir", url: "https://pokeapi.co/api/v2/pokemon/127/" },
133 | { name: "tauros", url: "https://pokeapi.co/api/v2/pokemon/128/" },
134 | { name: "magikarp", url: "https://pokeapi.co/api/v2/pokemon/129/" },
135 | { name: "gyarados", url: "https://pokeapi.co/api/v2/pokemon/130/" },
136 | { name: "lapras", url: "https://pokeapi.co/api/v2/pokemon/131/" },
137 | { name: "ditto", url: "https://pokeapi.co/api/v2/pokemon/132/" },
138 | { name: "eevee", url: "https://pokeapi.co/api/v2/pokemon/133/" },
139 | { name: "vaporeon", url: "https://pokeapi.co/api/v2/pokemon/134/" },
140 | { name: "jolteon", url: "https://pokeapi.co/api/v2/pokemon/135/" },
141 | { name: "flareon", url: "https://pokeapi.co/api/v2/pokemon/136/" },
142 | { name: "porygon", url: "https://pokeapi.co/api/v2/pokemon/137/" },
143 | { name: "omanyte", url: "https://pokeapi.co/api/v2/pokemon/138/" },
144 | { name: "omastar", url: "https://pokeapi.co/api/v2/pokemon/139/" },
145 | { name: "kabuto", url: "https://pokeapi.co/api/v2/pokemon/140/" },
146 | { name: "kabutops", url: "https://pokeapi.co/api/v2/pokemon/141/" },
147 | { name: "aerodactyl", url: "https://pokeapi.co/api/v2/pokemon/142/" },
148 | { name: "snorlax", url: "https://pokeapi.co/api/v2/pokemon/143/" },
149 | { name: "articuno", url: "https://pokeapi.co/api/v2/pokemon/144/" },
150 | { name: "zapdos", url: "https://pokeapi.co/api/v2/pokemon/145/" },
151 | { name: "moltres", url: "https://pokeapi.co/api/v2/pokemon/146/" },
152 | { name: "dratini", url: "https://pokeapi.co/api/v2/pokemon/147/" },
153 | { name: "dragonair", url: "https://pokeapi.co/api/v2/pokemon/148/" },
154 | { name: "dragonite", url: "https://pokeapi.co/api/v2/pokemon/149/" },
155 | { name: "mewtwo", url: "https://pokeapi.co/api/v2/pokemon/150/" },
156 | { name: "mew", url: "https://pokeapi.co/api/v2/pokemon/151/" },
157 | { name: "chikorita", url: "https://pokeapi.co/api/v2/pokemon/152/" },
158 | { name: "bayleef", url: "https://pokeapi.co/api/v2/pokemon/153/" },
159 | { name: "meganium", url: "https://pokeapi.co/api/v2/pokemon/154/" },
160 | { name: "cyndaquil", url: "https://pokeapi.co/api/v2/pokemon/155/" },
161 | { name: "quilava", url: "https://pokeapi.co/api/v2/pokemon/156/" },
162 | { name: "typhlosion", url: "https://pokeapi.co/api/v2/pokemon/157/" },
163 | { name: "totodile", url: "https://pokeapi.co/api/v2/pokemon/158/" },
164 | { name: "croconaw", url: "https://pokeapi.co/api/v2/pokemon/159/" },
165 | { name: "feraligatr", url: "https://pokeapi.co/api/v2/pokemon/160/" },
166 | { name: "sentret", url: "https://pokeapi.co/api/v2/pokemon/161/" },
167 | { name: "furret", url: "https://pokeapi.co/api/v2/pokemon/162/" },
168 | { name: "hoothoot", url: "https://pokeapi.co/api/v2/pokemon/163/" },
169 | { name: "noctowl", url: "https://pokeapi.co/api/v2/pokemon/164/" },
170 | { name: "ledyba", url: "https://pokeapi.co/api/v2/pokemon/165/" },
171 | { name: "ledian", url: "https://pokeapi.co/api/v2/pokemon/166/" },
172 | { name: "spinarak", url: "https://pokeapi.co/api/v2/pokemon/167/" },
173 | { name: "ariados", url: "https://pokeapi.co/api/v2/pokemon/168/" },
174 | { name: "crobat", url: "https://pokeapi.co/api/v2/pokemon/169/" },
175 | { name: "chinchou", url: "https://pokeapi.co/api/v2/pokemon/170/" },
176 | { name: "lanturn", url: "https://pokeapi.co/api/v2/pokemon/171/" },
177 | { name: "pichu", url: "https://pokeapi.co/api/v2/pokemon/172/" },
178 | { name: "cleffa", url: "https://pokeapi.co/api/v2/pokemon/173/" },
179 | { name: "igglybuff", url: "https://pokeapi.co/api/v2/pokemon/174/" },
180 | { name: "togepi", url: "https://pokeapi.co/api/v2/pokemon/175/" },
181 | { name: "togetic", url: "https://pokeapi.co/api/v2/pokemon/176/" },
182 | { name: "natu", url: "https://pokeapi.co/api/v2/pokemon/177/" },
183 | { name: "xatu", url: "https://pokeapi.co/api/v2/pokemon/178/" },
184 | { name: "mareep", url: "https://pokeapi.co/api/v2/pokemon/179/" },
185 | { name: "flaaffy", url: "https://pokeapi.co/api/v2/pokemon/180/" },
186 | { name: "ampharos", url: "https://pokeapi.co/api/v2/pokemon/181/" },
187 | { name: "bellossom", url: "https://pokeapi.co/api/v2/pokemon/182/" },
188 | { name: "marill", url: "https://pokeapi.co/api/v2/pokemon/183/" },
189 | { name: "azumarill", url: "https://pokeapi.co/api/v2/pokemon/184/" },
190 | { name: "sudowoodo", url: "https://pokeapi.co/api/v2/pokemon/185/" },
191 | { name: "politoed", url: "https://pokeapi.co/api/v2/pokemon/186/" },
192 | { name: "hoppip", url: "https://pokeapi.co/api/v2/pokemon/187/" },
193 | { name: "skiploom", url: "https://pokeapi.co/api/v2/pokemon/188/" },
194 | { name: "jumpluff", url: "https://pokeapi.co/api/v2/pokemon/189/" },
195 | { name: "aipom", url: "https://pokeapi.co/api/v2/pokemon/190/" },
196 | { name: "sunkern", url: "https://pokeapi.co/api/v2/pokemon/191/" },
197 | { name: "sunflora", url: "https://pokeapi.co/api/v2/pokemon/192/" },
198 | { name: "yanma", url: "https://pokeapi.co/api/v2/pokemon/193/" },
199 | { name: "wooper", url: "https://pokeapi.co/api/v2/pokemon/194/" },
200 | { name: "quagsire", url: "https://pokeapi.co/api/v2/pokemon/195/" },
201 | { name: "espeon", url: "https://pokeapi.co/api/v2/pokemon/196/" },
202 | { name: "umbreon", url: "https://pokeapi.co/api/v2/pokemon/197/" },
203 | { name: "murkrow", url: "https://pokeapi.co/api/v2/pokemon/198/" },
204 | { name: "slowking", url: "https://pokeapi.co/api/v2/pokemon/199/" },
205 | { name: "misdreavus", url: "https://pokeapi.co/api/v2/pokemon/200/" },
206 | { name: "unown", url: "https://pokeapi.co/api/v2/pokemon/201/" },
207 | { name: "wobbuffet", url: "https://pokeapi.co/api/v2/pokemon/202/" },
208 | { name: "girafarig", url: "https://pokeapi.co/api/v2/pokemon/203/" },
209 | { name: "pineco", url: "https://pokeapi.co/api/v2/pokemon/204/" },
210 | { name: "forretress", url: "https://pokeapi.co/api/v2/pokemon/205/" },
211 | { name: "dunsparce", url: "https://pokeapi.co/api/v2/pokemon/206/" },
212 | { name: "gligar", url: "https://pokeapi.co/api/v2/pokemon/207/" },
213 | { name: "steelix", url: "https://pokeapi.co/api/v2/pokemon/208/" },
214 | { name: "snubbull", url: "https://pokeapi.co/api/v2/pokemon/209/" },
215 | { name: "granbull", url: "https://pokeapi.co/api/v2/pokemon/210/" },
216 | { name: "qwilfish", url: "https://pokeapi.co/api/v2/pokemon/211/" },
217 | { name: "scizor", url: "https://pokeapi.co/api/v2/pokemon/212/" },
218 | { name: "shuckle", url: "https://pokeapi.co/api/v2/pokemon/213/" },
219 | { name: "heracross", url: "https://pokeapi.co/api/v2/pokemon/214/" },
220 | { name: "sneasel", url: "https://pokeapi.co/api/v2/pokemon/215/" },
221 | { name: "teddiursa", url: "https://pokeapi.co/api/v2/pokemon/216/" },
222 | { name: "ursaring", url: "https://pokeapi.co/api/v2/pokemon/217/" },
223 | { name: "slugma", url: "https://pokeapi.co/api/v2/pokemon/218/" },
224 | { name: "magcargo", url: "https://pokeapi.co/api/v2/pokemon/219/" },
225 | { name: "swinub", url: "https://pokeapi.co/api/v2/pokemon/220/" },
226 | { name: "piloswine", url: "https://pokeapi.co/api/v2/pokemon/221/" },
227 | { name: "corsola", url: "https://pokeapi.co/api/v2/pokemon/222/" },
228 | { name: "remoraid", url: "https://pokeapi.co/api/v2/pokemon/223/" },
229 | { name: "octillery", url: "https://pokeapi.co/api/v2/pokemon/224/" },
230 | { name: "delibird", url: "https://pokeapi.co/api/v2/pokemon/225/" },
231 | { name: "mantine", url: "https://pokeapi.co/api/v2/pokemon/226/" },
232 | { name: "skarmory", url: "https://pokeapi.co/api/v2/pokemon/227/" },
233 | { name: "houndour", url: "https://pokeapi.co/api/v2/pokemon/228/" },
234 | { name: "houndoom", url: "https://pokeapi.co/api/v2/pokemon/229/" },
235 | { name: "kingdra", url: "https://pokeapi.co/api/v2/pokemon/230/" },
236 | { name: "phanpy", url: "https://pokeapi.co/api/v2/pokemon/231/" },
237 | { name: "donphan", url: "https://pokeapi.co/api/v2/pokemon/232/" },
238 | { name: "porygon2", url: "https://pokeapi.co/api/v2/pokemon/233/" },
239 | { name: "stantler", url: "https://pokeapi.co/api/v2/pokemon/234/" },
240 | { name: "smeargle", url: "https://pokeapi.co/api/v2/pokemon/235/" },
241 | { name: "tyrogue", url: "https://pokeapi.co/api/v2/pokemon/236/" },
242 | { name: "hitmontop", url: "https://pokeapi.co/api/v2/pokemon/237/" },
243 | { name: "smoochum", url: "https://pokeapi.co/api/v2/pokemon/238/" },
244 | { name: "elekid", url: "https://pokeapi.co/api/v2/pokemon/239/" },
245 | { name: "magby", url: "https://pokeapi.co/api/v2/pokemon/240/" },
246 | { name: "miltank", url: "https://pokeapi.co/api/v2/pokemon/241/" },
247 | { name: "blissey", url: "https://pokeapi.co/api/v2/pokemon/242/" },
248 | { name: "raikou", url: "https://pokeapi.co/api/v2/pokemon/243/" },
249 | { name: "entei", url: "https://pokeapi.co/api/v2/pokemon/244/" },
250 | { name: "suicune", url: "https://pokeapi.co/api/v2/pokemon/245/" },
251 | { name: "larvitar", url: "https://pokeapi.co/api/v2/pokemon/246/" },
252 | { name: "pupitar", url: "https://pokeapi.co/api/v2/pokemon/247/" },
253 | { name: "tyranitar", url: "https://pokeapi.co/api/v2/pokemon/248/" },
254 | { name: "lugia", url: "https://pokeapi.co/api/v2/pokemon/249/" },
255 | { name: "ho-oh", url: "https://pokeapi.co/api/v2/pokemon/250/" },
256 | { name: "celebi", url: "https://pokeapi.co/api/v2/pokemon/251/" },
257 | { name: "treecko", url: "https://pokeapi.co/api/v2/pokemon/252/" },
258 | { name: "grovyle", url: "https://pokeapi.co/api/v2/pokemon/253/" },
259 | { name: "sceptile", url: "https://pokeapi.co/api/v2/pokemon/254/" },
260 | { name: "torchic", url: "https://pokeapi.co/api/v2/pokemon/255/" },
261 | { name: "combusken", url: "https://pokeapi.co/api/v2/pokemon/256/" },
262 | { name: "blaziken", url: "https://pokeapi.co/api/v2/pokemon/257/" },
263 | { name: "mudkip", url: "https://pokeapi.co/api/v2/pokemon/258/" },
264 | { name: "marshtomp", url: "https://pokeapi.co/api/v2/pokemon/259/" },
265 | { name: "swampert", url: "https://pokeapi.co/api/v2/pokemon/260/" },
266 | { name: "poochyena", url: "https://pokeapi.co/api/v2/pokemon/261/" },
267 | { name: "mightyena", url: "https://pokeapi.co/api/v2/pokemon/262/" },
268 | { name: "zigzagoon", url: "https://pokeapi.co/api/v2/pokemon/263/" },
269 | { name: "linoone", url: "https://pokeapi.co/api/v2/pokemon/264/" },
270 | { name: "wurmple", url: "https://pokeapi.co/api/v2/pokemon/265/" },
271 | { name: "silcoon", url: "https://pokeapi.co/api/v2/pokemon/266/" },
272 | { name: "beautifly", url: "https://pokeapi.co/api/v2/pokemon/267/" },
273 | { name: "cascoon", url: "https://pokeapi.co/api/v2/pokemon/268/" },
274 | { name: "dustox", url: "https://pokeapi.co/api/v2/pokemon/269/" },
275 | { name: "lotad", url: "https://pokeapi.co/api/v2/pokemon/270/" },
276 | { name: "lombre", url: "https://pokeapi.co/api/v2/pokemon/271/" },
277 | { name: "ludicolo", url: "https://pokeapi.co/api/v2/pokemon/272/" },
278 | { name: "seedot", url: "https://pokeapi.co/api/v2/pokemon/273/" },
279 | { name: "nuzleaf", url: "https://pokeapi.co/api/v2/pokemon/274/" },
280 | { name: "shiftry", url: "https://pokeapi.co/api/v2/pokemon/275/" },
281 | { name: "taillow", url: "https://pokeapi.co/api/v2/pokemon/276/" },
282 | { name: "swellow", url: "https://pokeapi.co/api/v2/pokemon/277/" },
283 | { name: "wingull", url: "https://pokeapi.co/api/v2/pokemon/278/" },
284 | { name: "pelipper", url: "https://pokeapi.co/api/v2/pokemon/279/" },
285 | { name: "ralts", url: "https://pokeapi.co/api/v2/pokemon/280/" },
286 | { name: "kirlia", url: "https://pokeapi.co/api/v2/pokemon/281/" },
287 | { name: "gardevoir", url: "https://pokeapi.co/api/v2/pokemon/282/" },
288 | { name: "surskit", url: "https://pokeapi.co/api/v2/pokemon/283/" },
289 | { name: "masquerain", url: "https://pokeapi.co/api/v2/pokemon/284/" },
290 | { name: "shroomish", url: "https://pokeapi.co/api/v2/pokemon/285/" },
291 | { name: "breloom", url: "https://pokeapi.co/api/v2/pokemon/286/" },
292 | { name: "slakoth", url: "https://pokeapi.co/api/v2/pokemon/287/" },
293 | { name: "vigoroth", url: "https://pokeapi.co/api/v2/pokemon/288/" },
294 | { name: "slaking", url: "https://pokeapi.co/api/v2/pokemon/289/" },
295 | { name: "nincada", url: "https://pokeapi.co/api/v2/pokemon/290/" },
296 | { name: "ninjask", url: "https://pokeapi.co/api/v2/pokemon/291/" },
297 | { name: "shedinja", url: "https://pokeapi.co/api/v2/pokemon/292/" },
298 | { name: "whismur", url: "https://pokeapi.co/api/v2/pokemon/293/" },
299 | { name: "loudred", url: "https://pokeapi.co/api/v2/pokemon/294/" },
300 | { name: "exploud", url: "https://pokeapi.co/api/v2/pokemon/295/" },
301 | { name: "makuhita", url: "https://pokeapi.co/api/v2/pokemon/296/" },
302 | { name: "hariyama", url: "https://pokeapi.co/api/v2/pokemon/297/" },
303 | { name: "azurill", url: "https://pokeapi.co/api/v2/pokemon/298/" },
304 | { name: "nosepass", url: "https://pokeapi.co/api/v2/pokemon/299/" },
305 | { name: "skitty", url: "https://pokeapi.co/api/v2/pokemon/300/" },
306 | { name: "delcatty", url: "https://pokeapi.co/api/v2/pokemon/301/" },
307 | { name: "sableye", url: "https://pokeapi.co/api/v2/pokemon/302/" },
308 | { name: "mawile", url: "https://pokeapi.co/api/v2/pokemon/303/" },
309 | { name: "aron", url: "https://pokeapi.co/api/v2/pokemon/304/" },
310 | { name: "lairon", url: "https://pokeapi.co/api/v2/pokemon/305/" },
311 | { name: "aggron", url: "https://pokeapi.co/api/v2/pokemon/306/" },
312 | { name: "meditite", url: "https://pokeapi.co/api/v2/pokemon/307/" },
313 | { name: "medicham", url: "https://pokeapi.co/api/v2/pokemon/308/" },
314 | { name: "electrike", url: "https://pokeapi.co/api/v2/pokemon/309/" },
315 | { name: "manectric", url: "https://pokeapi.co/api/v2/pokemon/310/" },
316 | { name: "plusle", url: "https://pokeapi.co/api/v2/pokemon/311/" },
317 | { name: "minun", url: "https://pokeapi.co/api/v2/pokemon/312/" },
318 | { name: "volbeat", url: "https://pokeapi.co/api/v2/pokemon/313/" },
319 | { name: "illumise", url: "https://pokeapi.co/api/v2/pokemon/314/" },
320 | { name: "roselia", url: "https://pokeapi.co/api/v2/pokemon/315/" },
321 | { name: "gulpin", url: "https://pokeapi.co/api/v2/pokemon/316/" },
322 | { name: "swalot", url: "https://pokeapi.co/api/v2/pokemon/317/" },
323 | { name: "carvanha", url: "https://pokeapi.co/api/v2/pokemon/318/" },
324 | { name: "sharpedo", url: "https://pokeapi.co/api/v2/pokemon/319/" },
325 | { name: "wailmer", url: "https://pokeapi.co/api/v2/pokemon/320/" },
326 | { name: "wailord", url: "https://pokeapi.co/api/v2/pokemon/321/" },
327 | { name: "numel", url: "https://pokeapi.co/api/v2/pokemon/322/" },
328 | { name: "camerupt", url: "https://pokeapi.co/api/v2/pokemon/323/" },
329 | { name: "torkoal", url: "https://pokeapi.co/api/v2/pokemon/324/" },
330 | { name: "spoink", url: "https://pokeapi.co/api/v2/pokemon/325/" },
331 | { name: "grumpig", url: "https://pokeapi.co/api/v2/pokemon/326/" },
332 | { name: "spinda", url: "https://pokeapi.co/api/v2/pokemon/327/" },
333 | { name: "trapinch", url: "https://pokeapi.co/api/v2/pokemon/328/" },
334 | { name: "vibrava", url: "https://pokeapi.co/api/v2/pokemon/329/" },
335 | { name: "flygon", url: "https://pokeapi.co/api/v2/pokemon/330/" },
336 | { name: "cacnea", url: "https://pokeapi.co/api/v2/pokemon/331/" },
337 | { name: "cacturne", url: "https://pokeapi.co/api/v2/pokemon/332/" },
338 | { name: "swablu", url: "https://pokeapi.co/api/v2/pokemon/333/" },
339 | { name: "altaria", url: "https://pokeapi.co/api/v2/pokemon/334/" },
340 | { name: "zangoose", url: "https://pokeapi.co/api/v2/pokemon/335/" },
341 | { name: "seviper", url: "https://pokeapi.co/api/v2/pokemon/336/" },
342 | { name: "lunatone", url: "https://pokeapi.co/api/v2/pokemon/337/" },
343 | { name: "solrock", url: "https://pokeapi.co/api/v2/pokemon/338/" },
344 | { name: "barboach", url: "https://pokeapi.co/api/v2/pokemon/339/" },
345 | { name: "whiscash", url: "https://pokeapi.co/api/v2/pokemon/340/" },
346 | { name: "corphish", url: "https://pokeapi.co/api/v2/pokemon/341/" },
347 | { name: "crawdaunt", url: "https://pokeapi.co/api/v2/pokemon/342/" },
348 | { name: "baltoy", url: "https://pokeapi.co/api/v2/pokemon/343/" },
349 | { name: "claydol", url: "https://pokeapi.co/api/v2/pokemon/344/" },
350 | { name: "lileep", url: "https://pokeapi.co/api/v2/pokemon/345/" },
351 | { name: "cradily", url: "https://pokeapi.co/api/v2/pokemon/346/" },
352 | { name: "anorith", url: "https://pokeapi.co/api/v2/pokemon/347/" },
353 | { name: "armaldo", url: "https://pokeapi.co/api/v2/pokemon/348/" },
354 | { name: "feebas", url: "https://pokeapi.co/api/v2/pokemon/349/" },
355 | { name: "milotic", url: "https://pokeapi.co/api/v2/pokemon/350/" },
356 | { name: "castform", url: "https://pokeapi.co/api/v2/pokemon/351/" },
357 | { name: "kecleon", url: "https://pokeapi.co/api/v2/pokemon/352/" },
358 | { name: "shuppet", url: "https://pokeapi.co/api/v2/pokemon/353/" },
359 | { name: "banette", url: "https://pokeapi.co/api/v2/pokemon/354/" },
360 | { name: "duskull", url: "https://pokeapi.co/api/v2/pokemon/355/" },
361 | { name: "dusclops", url: "https://pokeapi.co/api/v2/pokemon/356/" },
362 | { name: "tropius", url: "https://pokeapi.co/api/v2/pokemon/357/" },
363 | { name: "chimecho", url: "https://pokeapi.co/api/v2/pokemon/358/" },
364 | { name: "absol", url: "https://pokeapi.co/api/v2/pokemon/359/" },
365 | { name: "wynaut", url: "https://pokeapi.co/api/v2/pokemon/360/" },
366 | { name: "snorunt", url: "https://pokeapi.co/api/v2/pokemon/361/" },
367 | { name: "glalie", url: "https://pokeapi.co/api/v2/pokemon/362/" },
368 | { name: "spheal", url: "https://pokeapi.co/api/v2/pokemon/363/" },
369 | { name: "sealeo", url: "https://pokeapi.co/api/v2/pokemon/364/" },
370 | { name: "walrein", url: "https://pokeapi.co/api/v2/pokemon/365/" },
371 | { name: "clamperl", url: "https://pokeapi.co/api/v2/pokemon/366/" },
372 | { name: "huntail", url: "https://pokeapi.co/api/v2/pokemon/367/" },
373 | { name: "gorebyss", url: "https://pokeapi.co/api/v2/pokemon/368/" },
374 | { name: "relicanth", url: "https://pokeapi.co/api/v2/pokemon/369/" },
375 | { name: "luvdisc", url: "https://pokeapi.co/api/v2/pokemon/370/" },
376 | { name: "bagon", url: "https://pokeapi.co/api/v2/pokemon/371/" },
377 | { name: "shelgon", url: "https://pokeapi.co/api/v2/pokemon/372/" },
378 | { name: "salamence", url: "https://pokeapi.co/api/v2/pokemon/373/" },
379 | { name: "beldum", url: "https://pokeapi.co/api/v2/pokemon/374/" },
380 | { name: "metang", url: "https://pokeapi.co/api/v2/pokemon/375/" },
381 | { name: "metagross", url: "https://pokeapi.co/api/v2/pokemon/376/" },
382 | { name: "regirock", url: "https://pokeapi.co/api/v2/pokemon/377/" },
383 | { name: "regice", url: "https://pokeapi.co/api/v2/pokemon/378/" },
384 | { name: "registeel", url: "https://pokeapi.co/api/v2/pokemon/379/" },
385 | { name: "latias", url: "https://pokeapi.co/api/v2/pokemon/380/" },
386 | { name: "latios", url: "https://pokeapi.co/api/v2/pokemon/381/" },
387 | { name: "kyogre", url: "https://pokeapi.co/api/v2/pokemon/382/" },
388 | { name: "groudon", url: "https://pokeapi.co/api/v2/pokemon/383/" },
389 | { name: "rayquaza", url: "https://pokeapi.co/api/v2/pokemon/384/" },
390 | { name: "jirachi", url: "https://pokeapi.co/api/v2/pokemon/385/" },
391 | {
392 | name: "deoxys-normal",
393 | url: "https://pokeapi.co/api/v2/pokemon/386/",
394 | },
395 | { name: "turtwig", url: "https://pokeapi.co/api/v2/pokemon/387/" },
396 | { name: "grotle", url: "https://pokeapi.co/api/v2/pokemon/388/" },
397 | { name: "torterra", url: "https://pokeapi.co/api/v2/pokemon/389/" },
398 | { name: "chimchar", url: "https://pokeapi.co/api/v2/pokemon/390/" },
399 | { name: "monferno", url: "https://pokeapi.co/api/v2/pokemon/391/" },
400 | { name: "infernape", url: "https://pokeapi.co/api/v2/pokemon/392/" },
401 | { name: "piplup", url: "https://pokeapi.co/api/v2/pokemon/393/" },
402 | { name: "prinplup", url: "https://pokeapi.co/api/v2/pokemon/394/" },
403 | { name: "empoleon", url: "https://pokeapi.co/api/v2/pokemon/395/" },
404 | { name: "starly", url: "https://pokeapi.co/api/v2/pokemon/396/" },
405 | { name: "staravia", url: "https://pokeapi.co/api/v2/pokemon/397/" },
406 | { name: "staraptor", url: "https://pokeapi.co/api/v2/pokemon/398/" },
407 | { name: "bidoof", url: "https://pokeapi.co/api/v2/pokemon/399/" },
408 | { name: "bibarel", url: "https://pokeapi.co/api/v2/pokemon/400/" },
409 | { name: "kricketot", url: "https://pokeapi.co/api/v2/pokemon/401/" },
410 | { name: "kricketune", url: "https://pokeapi.co/api/v2/pokemon/402/" },
411 | { name: "shinx", url: "https://pokeapi.co/api/v2/pokemon/403/" },
412 | { name: "luxio", url: "https://pokeapi.co/api/v2/pokemon/404/" },
413 | { name: "luxray", url: "https://pokeapi.co/api/v2/pokemon/405/" },
414 | { name: "budew", url: "https://pokeapi.co/api/v2/pokemon/406/" },
415 | { name: "roserade", url: "https://pokeapi.co/api/v2/pokemon/407/" },
416 | { name: "cranidos", url: "https://pokeapi.co/api/v2/pokemon/408/" },
417 | { name: "rampardos", url: "https://pokeapi.co/api/v2/pokemon/409/" },
418 | { name: "shieldon", url: "https://pokeapi.co/api/v2/pokemon/410/" },
419 | { name: "bastiodon", url: "https://pokeapi.co/api/v2/pokemon/411/" },
420 | { name: "burmy", url: "https://pokeapi.co/api/v2/pokemon/412/" },
421 | {
422 | name: "wormadam-plant",
423 | url: "https://pokeapi.co/api/v2/pokemon/413/",
424 | },
425 | { name: "mothim", url: "https://pokeapi.co/api/v2/pokemon/414/" },
426 | { name: "combee", url: "https://pokeapi.co/api/v2/pokemon/415/" },
427 | { name: "vespiquen", url: "https://pokeapi.co/api/v2/pokemon/416/" },
428 | { name: "pachirisu", url: "https://pokeapi.co/api/v2/pokemon/417/" },
429 | { name: "buizel", url: "https://pokeapi.co/api/v2/pokemon/418/" },
430 | { name: "floatzel", url: "https://pokeapi.co/api/v2/pokemon/419/" },
431 | { name: "cherubi", url: "https://pokeapi.co/api/v2/pokemon/420/" },
432 | { name: "cherrim", url: "https://pokeapi.co/api/v2/pokemon/421/" },
433 | { name: "shellos", url: "https://pokeapi.co/api/v2/pokemon/422/" },
434 | { name: "gastrodon", url: "https://pokeapi.co/api/v2/pokemon/423/" },
435 | { name: "ambipom", url: "https://pokeapi.co/api/v2/pokemon/424/" },
436 | { name: "drifloon", url: "https://pokeapi.co/api/v2/pokemon/425/" },
437 | { name: "drifblim", url: "https://pokeapi.co/api/v2/pokemon/426/" },
438 | { name: "buneary", url: "https://pokeapi.co/api/v2/pokemon/427/" },
439 | { name: "lopunny", url: "https://pokeapi.co/api/v2/pokemon/428/" },
440 | { name: "mismagius", url: "https://pokeapi.co/api/v2/pokemon/429/" },
441 | { name: "honchkrow", url: "https://pokeapi.co/api/v2/pokemon/430/" },
442 | { name: "glameow", url: "https://pokeapi.co/api/v2/pokemon/431/" },
443 | { name: "purugly", url: "https://pokeapi.co/api/v2/pokemon/432/" },
444 | { name: "chingling", url: "https://pokeapi.co/api/v2/pokemon/433/" },
445 | { name: "stunky", url: "https://pokeapi.co/api/v2/pokemon/434/" },
446 | { name: "skuntank", url: "https://pokeapi.co/api/v2/pokemon/435/" },
447 | { name: "bronzor", url: "https://pokeapi.co/api/v2/pokemon/436/" },
448 | { name: "bronzong", url: "https://pokeapi.co/api/v2/pokemon/437/" },
449 | { name: "bonsly", url: "https://pokeapi.co/api/v2/pokemon/438/" },
450 | { name: "mime-jr", url: "https://pokeapi.co/api/v2/pokemon/439/" },
451 | { name: "happiny", url: "https://pokeapi.co/api/v2/pokemon/440/" },
452 | { name: "chatot", url: "https://pokeapi.co/api/v2/pokemon/441/" },
453 | { name: "spiritomb", url: "https://pokeapi.co/api/v2/pokemon/442/" },
454 | { name: "gible", url: "https://pokeapi.co/api/v2/pokemon/443/" },
455 | { name: "gabite", url: "https://pokeapi.co/api/v2/pokemon/444/" },
456 | { name: "garchomp", url: "https://pokeapi.co/api/v2/pokemon/445/" },
457 | { name: "munchlax", url: "https://pokeapi.co/api/v2/pokemon/446/" },
458 | { name: "riolu", url: "https://pokeapi.co/api/v2/pokemon/447/" },
459 | { name: "lucario", url: "https://pokeapi.co/api/v2/pokemon/448/" },
460 | { name: "hippopotas", url: "https://pokeapi.co/api/v2/pokemon/449/" },
461 | { name: "hippowdon", url: "https://pokeapi.co/api/v2/pokemon/450/" },
462 | { name: "skorupi", url: "https://pokeapi.co/api/v2/pokemon/451/" },
463 | { name: "drapion", url: "https://pokeapi.co/api/v2/pokemon/452/" },
464 | { name: "croagunk", url: "https://pokeapi.co/api/v2/pokemon/453/" },
465 | { name: "toxicroak", url: "https://pokeapi.co/api/v2/pokemon/454/" },
466 | { name: "carnivine", url: "https://pokeapi.co/api/v2/pokemon/455/" },
467 | { name: "finneon", url: "https://pokeapi.co/api/v2/pokemon/456/" },
468 | { name: "lumineon", url: "https://pokeapi.co/api/v2/pokemon/457/" },
469 | { name: "mantyke", url: "https://pokeapi.co/api/v2/pokemon/458/" },
470 | { name: "snover", url: "https://pokeapi.co/api/v2/pokemon/459/" },
471 | { name: "abomasnow", url: "https://pokeapi.co/api/v2/pokemon/460/" },
472 | { name: "weavile", url: "https://pokeapi.co/api/v2/pokemon/461/" },
473 | { name: "magnezone", url: "https://pokeapi.co/api/v2/pokemon/462/" },
474 | { name: "lickilicky", url: "https://pokeapi.co/api/v2/pokemon/463/" },
475 | { name: "rhyperior", url: "https://pokeapi.co/api/v2/pokemon/464/" },
476 | { name: "tangrowth", url: "https://pokeapi.co/api/v2/pokemon/465/" },
477 | { name: "electivire", url: "https://pokeapi.co/api/v2/pokemon/466/" },
478 | { name: "magmortar", url: "https://pokeapi.co/api/v2/pokemon/467/" },
479 | { name: "togekiss", url: "https://pokeapi.co/api/v2/pokemon/468/" },
480 | { name: "yanmega", url: "https://pokeapi.co/api/v2/pokemon/469/" },
481 | { name: "leafeon", url: "https://pokeapi.co/api/v2/pokemon/470/" },
482 | { name: "glaceon", url: "https://pokeapi.co/api/v2/pokemon/471/" },
483 | { name: "gliscor", url: "https://pokeapi.co/api/v2/pokemon/472/" },
484 | { name: "mamoswine", url: "https://pokeapi.co/api/v2/pokemon/473/" },
485 | { name: "porygon-z", url: "https://pokeapi.co/api/v2/pokemon/474/" },
486 | { name: "gallade", url: "https://pokeapi.co/api/v2/pokemon/475/" },
487 | { name: "probopass", url: "https://pokeapi.co/api/v2/pokemon/476/" },
488 | { name: "dusknoir", url: "https://pokeapi.co/api/v2/pokemon/477/" },
489 | { name: "froslass", url: "https://pokeapi.co/api/v2/pokemon/478/" },
490 | { name: "rotom", url: "https://pokeapi.co/api/v2/pokemon/479/" },
491 | { name: "uxie", url: "https://pokeapi.co/api/v2/pokemon/480/" },
492 | { name: "mesprit", url: "https://pokeapi.co/api/v2/pokemon/481/" },
493 | { name: "azelf", url: "https://pokeapi.co/api/v2/pokemon/482/" },
494 | { name: "dialga", url: "https://pokeapi.co/api/v2/pokemon/483/" },
495 | { name: "palkia", url: "https://pokeapi.co/api/v2/pokemon/484/" },
496 | { name: "heatran", url: "https://pokeapi.co/api/v2/pokemon/485/" },
497 | { name: "regigigas", url: "https://pokeapi.co/api/v2/pokemon/486/" },
498 | {
499 | name: "giratina-altered",
500 | url: "https://pokeapi.co/api/v2/pokemon/487/",
501 | },
502 | { name: "cresselia", url: "https://pokeapi.co/api/v2/pokemon/488/" },
503 | { name: "phione", url: "https://pokeapi.co/api/v2/pokemon/489/" },
504 | { name: "manaphy", url: "https://pokeapi.co/api/v2/pokemon/490/" },
505 | { name: "darkrai", url: "https://pokeapi.co/api/v2/pokemon/491/" },
506 | { name: "shaymin-land", url: "https://pokeapi.co/api/v2/pokemon/492/" },
507 | { name: "arceus", url: "https://pokeapi.co/api/v2/pokemon/493/" },
508 | { name: "victini", url: "https://pokeapi.co/api/v2/pokemon/494/" },
509 | { name: "snivy", url: "https://pokeapi.co/api/v2/pokemon/495/" },
510 | { name: "servine", url: "https://pokeapi.co/api/v2/pokemon/496/" },
511 | { name: "serperior", url: "https://pokeapi.co/api/v2/pokemon/497/" },
512 | { name: "tepig", url: "https://pokeapi.co/api/v2/pokemon/498/" },
513 | { name: "pignite", url: "https://pokeapi.co/api/v2/pokemon/499/" },
514 | { name: "emboar", url: "https://pokeapi.co/api/v2/pokemon/500/" },
515 | { name: "oshawott", url: "https://pokeapi.co/api/v2/pokemon/501/" },
516 | { name: "dewott", url: "https://pokeapi.co/api/v2/pokemon/502/" },
517 | { name: "samurott", url: "https://pokeapi.co/api/v2/pokemon/503/" },
518 | { name: "patrat", url: "https://pokeapi.co/api/v2/pokemon/504/" },
519 | { name: "watchog", url: "https://pokeapi.co/api/v2/pokemon/505/" },
520 | { name: "lillipup", url: "https://pokeapi.co/api/v2/pokemon/506/" },
521 | { name: "herdier", url: "https://pokeapi.co/api/v2/pokemon/507/" },
522 | { name: "stoutland", url: "https://pokeapi.co/api/v2/pokemon/508/" },
523 | { name: "purrloin", url: "https://pokeapi.co/api/v2/pokemon/509/" },
524 | { name: "liepard", url: "https://pokeapi.co/api/v2/pokemon/510/" },
525 | { name: "pansage", url: "https://pokeapi.co/api/v2/pokemon/511/" },
526 | { name: "simisage", url: "https://pokeapi.co/api/v2/pokemon/512/" },
527 | { name: "pansear", url: "https://pokeapi.co/api/v2/pokemon/513/" },
528 | { name: "simisear", url: "https://pokeapi.co/api/v2/pokemon/514/" },
529 | { name: "panpour", url: "https://pokeapi.co/api/v2/pokemon/515/" },
530 | { name: "simipour", url: "https://pokeapi.co/api/v2/pokemon/516/" },
531 | { name: "munna", url: "https://pokeapi.co/api/v2/pokemon/517/" },
532 | { name: "musharna", url: "https://pokeapi.co/api/v2/pokemon/518/" },
533 | { name: "pidove", url: "https://pokeapi.co/api/v2/pokemon/519/" },
534 | { name: "tranquill", url: "https://pokeapi.co/api/v2/pokemon/520/" },
535 | { name: "unfezant", url: "https://pokeapi.co/api/v2/pokemon/521/" },
536 | { name: "blitzle", url: "https://pokeapi.co/api/v2/pokemon/522/" },
537 | { name: "zebstrika", url: "https://pokeapi.co/api/v2/pokemon/523/" },
538 | { name: "roggenrola", url: "https://pokeapi.co/api/v2/pokemon/524/" },
539 | { name: "boldore", url: "https://pokeapi.co/api/v2/pokemon/525/" },
540 | { name: "gigalith", url: "https://pokeapi.co/api/v2/pokemon/526/" },
541 | { name: "woobat", url: "https://pokeapi.co/api/v2/pokemon/527/" },
542 | { name: "swoobat", url: "https://pokeapi.co/api/v2/pokemon/528/" },
543 | { name: "drilbur", url: "https://pokeapi.co/api/v2/pokemon/529/" },
544 | { name: "excadrill", url: "https://pokeapi.co/api/v2/pokemon/530/" },
545 | { name: "audino", url: "https://pokeapi.co/api/v2/pokemon/531/" },
546 | { name: "timburr", url: "https://pokeapi.co/api/v2/pokemon/532/" },
547 | { name: "gurdurr", url: "https://pokeapi.co/api/v2/pokemon/533/" },
548 | { name: "conkeldurr", url: "https://pokeapi.co/api/v2/pokemon/534/" },
549 | { name: "tympole", url: "https://pokeapi.co/api/v2/pokemon/535/" },
550 | { name: "palpitoad", url: "https://pokeapi.co/api/v2/pokemon/536/" },
551 | { name: "seismitoad", url: "https://pokeapi.co/api/v2/pokemon/537/" },
552 | { name: "throh", url: "https://pokeapi.co/api/v2/pokemon/538/" },
553 | { name: "sawk", url: "https://pokeapi.co/api/v2/pokemon/539/" },
554 | { name: "sewaddle", url: "https://pokeapi.co/api/v2/pokemon/540/" },
555 | { name: "swadloon", url: "https://pokeapi.co/api/v2/pokemon/541/" },
556 | { name: "leavanny", url: "https://pokeapi.co/api/v2/pokemon/542/" },
557 | { name: "venipede", url: "https://pokeapi.co/api/v2/pokemon/543/" },
558 | { name: "whirlipede", url: "https://pokeapi.co/api/v2/pokemon/544/" },
559 | { name: "scolipede", url: "https://pokeapi.co/api/v2/pokemon/545/" },
560 | { name: "cottonee", url: "https://pokeapi.co/api/v2/pokemon/546/" },
561 | { name: "whimsicott", url: "https://pokeapi.co/api/v2/pokemon/547/" },
562 | { name: "petilil", url: "https://pokeapi.co/api/v2/pokemon/548/" },
563 | { name: "lilligant", url: "https://pokeapi.co/api/v2/pokemon/549/" },
564 | {
565 | name: "basculin-red-striped",
566 | url: "https://pokeapi.co/api/v2/pokemon/550/",
567 | },
568 | { name: "sandile", url: "https://pokeapi.co/api/v2/pokemon/551/" },
569 | { name: "krokorok", url: "https://pokeapi.co/api/v2/pokemon/552/" },
570 | { name: "krookodile", url: "https://pokeapi.co/api/v2/pokemon/553/" },
571 | { name: "darumaka", url: "https://pokeapi.co/api/v2/pokemon/554/" },
572 | {
573 | name: "darmanitan-standard",
574 | url: "https://pokeapi.co/api/v2/pokemon/555/",
575 | },
576 | { name: "maractus", url: "https://pokeapi.co/api/v2/pokemon/556/" },
577 | { name: "dwebble", url: "https://pokeapi.co/api/v2/pokemon/557/" },
578 | { name: "crustle", url: "https://pokeapi.co/api/v2/pokemon/558/" },
579 | { name: "scraggy", url: "https://pokeapi.co/api/v2/pokemon/559/" },
580 | { name: "scrafty", url: "https://pokeapi.co/api/v2/pokemon/560/" },
581 | { name: "sigilyph", url: "https://pokeapi.co/api/v2/pokemon/561/" },
582 | { name: "yamask", url: "https://pokeapi.co/api/v2/pokemon/562/" },
583 | { name: "cofagrigus", url: "https://pokeapi.co/api/v2/pokemon/563/" },
584 | { name: "tirtouga", url: "https://pokeapi.co/api/v2/pokemon/564/" },
585 | { name: "carracosta", url: "https://pokeapi.co/api/v2/pokemon/565/" },
586 | { name: "archen", url: "https://pokeapi.co/api/v2/pokemon/566/" },
587 | { name: "archeops", url: "https://pokeapi.co/api/v2/pokemon/567/" },
588 | { name: "trubbish", url: "https://pokeapi.co/api/v2/pokemon/568/" },
589 | { name: "garbodor", url: "https://pokeapi.co/api/v2/pokemon/569/" },
590 | { name: "zorua", url: "https://pokeapi.co/api/v2/pokemon/570/" },
591 | { name: "zoroark", url: "https://pokeapi.co/api/v2/pokemon/571/" },
592 | { name: "minccino", url: "https://pokeapi.co/api/v2/pokemon/572/" },
593 | { name: "cinccino", url: "https://pokeapi.co/api/v2/pokemon/573/" },
594 | { name: "gothita", url: "https://pokeapi.co/api/v2/pokemon/574/" },
595 | { name: "gothorita", url: "https://pokeapi.co/api/v2/pokemon/575/" },
596 | { name: "gothitelle", url: "https://pokeapi.co/api/v2/pokemon/576/" },
597 | { name: "solosis", url: "https://pokeapi.co/api/v2/pokemon/577/" },
598 | { name: "duosion", url: "https://pokeapi.co/api/v2/pokemon/578/" },
599 | { name: "reuniclus", url: "https://pokeapi.co/api/v2/pokemon/579/" },
600 | { name: "ducklett", url: "https://pokeapi.co/api/v2/pokemon/580/" },
601 | { name: "swanna", url: "https://pokeapi.co/api/v2/pokemon/581/" },
602 | { name: "vanillite", url: "https://pokeapi.co/api/v2/pokemon/582/" },
603 | { name: "vanillish", url: "https://pokeapi.co/api/v2/pokemon/583/" },
604 | { name: "vanilluxe", url: "https://pokeapi.co/api/v2/pokemon/584/" },
605 | { name: "deerling", url: "https://pokeapi.co/api/v2/pokemon/585/" },
606 | { name: "sawsbuck", url: "https://pokeapi.co/api/v2/pokemon/586/" },
607 | { name: "emolga", url: "https://pokeapi.co/api/v2/pokemon/587/" },
608 | { name: "karrablast", url: "https://pokeapi.co/api/v2/pokemon/588/" },
609 | { name: "escavalier", url: "https://pokeapi.co/api/v2/pokemon/589/" },
610 | { name: "foongus", url: "https://pokeapi.co/api/v2/pokemon/590/" },
611 | { name: "amoonguss", url: "https://pokeapi.co/api/v2/pokemon/591/" },
612 | { name: "frillish", url: "https://pokeapi.co/api/v2/pokemon/592/" },
613 | { name: "jellicent", url: "https://pokeapi.co/api/v2/pokemon/593/" },
614 | { name: "alomomola", url: "https://pokeapi.co/api/v2/pokemon/594/" },
615 | { name: "joltik", url: "https://pokeapi.co/api/v2/pokemon/595/" },
616 | { name: "galvantula", url: "https://pokeapi.co/api/v2/pokemon/596/" },
617 | { name: "ferroseed", url: "https://pokeapi.co/api/v2/pokemon/597/" },
618 | { name: "ferrothorn", url: "https://pokeapi.co/api/v2/pokemon/598/" },
619 | { name: "klink", url: "https://pokeapi.co/api/v2/pokemon/599/" },
620 | { name: "klang", url: "https://pokeapi.co/api/v2/pokemon/600/" },
621 | { name: "klinklang", url: "https://pokeapi.co/api/v2/pokemon/601/" },
622 | { name: "tynamo", url: "https://pokeapi.co/api/v2/pokemon/602/" },
623 | { name: "eelektrik", url: "https://pokeapi.co/api/v2/pokemon/603/" },
624 | { name: "eelektross", url: "https://pokeapi.co/api/v2/pokemon/604/" },
625 | { name: "elgyem", url: "https://pokeapi.co/api/v2/pokemon/605/" },
626 | { name: "beheeyem", url: "https://pokeapi.co/api/v2/pokemon/606/" },
627 | { name: "litwick", url: "https://pokeapi.co/api/v2/pokemon/607/" },
628 | { name: "lampent", url: "https://pokeapi.co/api/v2/pokemon/608/" },
629 | { name: "chandelure", url: "https://pokeapi.co/api/v2/pokemon/609/" },
630 | { name: "axew", url: "https://pokeapi.co/api/v2/pokemon/610/" },
631 | { name: "fraxure", url: "https://pokeapi.co/api/v2/pokemon/611/" },
632 | { name: "haxorus", url: "https://pokeapi.co/api/v2/pokemon/612/" },
633 | { name: "cubchoo", url: "https://pokeapi.co/api/v2/pokemon/613/" },
634 | { name: "beartic", url: "https://pokeapi.co/api/v2/pokemon/614/" },
635 | { name: "cryogonal", url: "https://pokeapi.co/api/v2/pokemon/615/" },
636 | { name: "shelmet", url: "https://pokeapi.co/api/v2/pokemon/616/" },
637 | { name: "accelgor", url: "https://pokeapi.co/api/v2/pokemon/617/" },
638 | { name: "stunfisk", url: "https://pokeapi.co/api/v2/pokemon/618/" },
639 | { name: "mienfoo", url: "https://pokeapi.co/api/v2/pokemon/619/" },
640 | { name: "mienshao", url: "https://pokeapi.co/api/v2/pokemon/620/" },
641 | { name: "druddigon", url: "https://pokeapi.co/api/v2/pokemon/621/" },
642 | { name: "golett", url: "https://pokeapi.co/api/v2/pokemon/622/" },
643 | { name: "golurk", url: "https://pokeapi.co/api/v2/pokemon/623/" },
644 | { name: "pawniard", url: "https://pokeapi.co/api/v2/pokemon/624/" },
645 | { name: "bisharp", url: "https://pokeapi.co/api/v2/pokemon/625/" },
646 | { name: "bouffalant", url: "https://pokeapi.co/api/v2/pokemon/626/" },
647 | { name: "rufflet", url: "https://pokeapi.co/api/v2/pokemon/627/" },
648 | { name: "braviary", url: "https://pokeapi.co/api/v2/pokemon/628/" },
649 | { name: "vullaby", url: "https://pokeapi.co/api/v2/pokemon/629/" },
650 | { name: "mandibuzz", url: "https://pokeapi.co/api/v2/pokemon/630/" },
651 | { name: "heatmor", url: "https://pokeapi.co/api/v2/pokemon/631/" },
652 | { name: "durant", url: "https://pokeapi.co/api/v2/pokemon/632/" },
653 | { name: "deino", url: "https://pokeapi.co/api/v2/pokemon/633/" },
654 | { name: "zweilous", url: "https://pokeapi.co/api/v2/pokemon/634/" },
655 | { name: "hydreigon", url: "https://pokeapi.co/api/v2/pokemon/635/" },
656 | { name: "larvesta", url: "https://pokeapi.co/api/v2/pokemon/636/" },
657 | { name: "volcarona", url: "https://pokeapi.co/api/v2/pokemon/637/" },
658 | { name: "cobalion", url: "https://pokeapi.co/api/v2/pokemon/638/" },
659 | { name: "terrakion", url: "https://pokeapi.co/api/v2/pokemon/639/" },
660 | { name: "virizion", url: "https://pokeapi.co/api/v2/pokemon/640/" },
661 | {
662 | name: "tornadus-incarnate",
663 | url: "https://pokeapi.co/api/v2/pokemon/641/",
664 | },
665 | {
666 | name: "thundurus-incarnate",
667 | url: "https://pokeapi.co/api/v2/pokemon/642/",
668 | },
669 | { name: "reshiram", url: "https://pokeapi.co/api/v2/pokemon/643/" },
670 | { name: "zekrom", url: "https://pokeapi.co/api/v2/pokemon/644/" },
671 | {
672 | name: "landorus-incarnate",
673 | url: "https://pokeapi.co/api/v2/pokemon/645/",
674 | },
675 | { name: "kyurem", url: "https://pokeapi.co/api/v2/pokemon/646/" },
676 | {
677 | name: "keldeo-ordinary",
678 | url: "https://pokeapi.co/api/v2/pokemon/647/",
679 | },
680 | {
681 | name: "meloetta-aria",
682 | url: "https://pokeapi.co/api/v2/pokemon/648/",
683 | },
684 | { name: "genesect", url: "https://pokeapi.co/api/v2/pokemon/649/" },
685 | { name: "chespin", url: "https://pokeapi.co/api/v2/pokemon/650/" },
686 | { name: "quilladin", url: "https://pokeapi.co/api/v2/pokemon/651/" },
687 | { name: "chesnaught", url: "https://pokeapi.co/api/v2/pokemon/652/" },
688 | { name: "fennekin", url: "https://pokeapi.co/api/v2/pokemon/653/" },
689 | { name: "braixen", url: "https://pokeapi.co/api/v2/pokemon/654/" },
690 | { name: "delphox", url: "https://pokeapi.co/api/v2/pokemon/655/" },
691 | { name: "froakie", url: "https://pokeapi.co/api/v2/pokemon/656/" },
692 | { name: "frogadier", url: "https://pokeapi.co/api/v2/pokemon/657/" },
693 | { name: "greninja", url: "https://pokeapi.co/api/v2/pokemon/658/" },
694 | { name: "bunnelby", url: "https://pokeapi.co/api/v2/pokemon/659/" },
695 | { name: "diggersby", url: "https://pokeapi.co/api/v2/pokemon/660/" },
696 | { name: "fletchling", url: "https://pokeapi.co/api/v2/pokemon/661/" },
697 | { name: "fletchinder", url: "https://pokeapi.co/api/v2/pokemon/662/" },
698 | { name: "talonflame", url: "https://pokeapi.co/api/v2/pokemon/663/" },
699 | { name: "scatterbug", url: "https://pokeapi.co/api/v2/pokemon/664/" },
700 | { name: "spewpa", url: "https://pokeapi.co/api/v2/pokemon/665/" },
701 | { name: "vivillon", url: "https://pokeapi.co/api/v2/pokemon/666/" },
702 | { name: "litleo", url: "https://pokeapi.co/api/v2/pokemon/667/" },
703 | { name: "pyroar", url: "https://pokeapi.co/api/v2/pokemon/668/" },
704 | { name: "flabebe", url: "https://pokeapi.co/api/v2/pokemon/669/" },
705 | { name: "floette", url: "https://pokeapi.co/api/v2/pokemon/670/" },
706 | { name: "florges", url: "https://pokeapi.co/api/v2/pokemon/671/" },
707 | { name: "skiddo", url: "https://pokeapi.co/api/v2/pokemon/672/" },
708 | { name: "gogoat", url: "https://pokeapi.co/api/v2/pokemon/673/" },
709 | { name: "pancham", url: "https://pokeapi.co/api/v2/pokemon/674/" },
710 | { name: "pangoro", url: "https://pokeapi.co/api/v2/pokemon/675/" },
711 | { name: "furfrou", url: "https://pokeapi.co/api/v2/pokemon/676/" },
712 | { name: "espurr", url: "https://pokeapi.co/api/v2/pokemon/677/" },
713 | {
714 | name: "meowstic-male",
715 | url: "https://pokeapi.co/api/v2/pokemon/678/",
716 | },
717 | { name: "honedge", url: "https://pokeapi.co/api/v2/pokemon/679/" },
718 | { name: "doublade", url: "https://pokeapi.co/api/v2/pokemon/680/" },
719 | {
720 | name: "aegislash-shield",
721 | url: "https://pokeapi.co/api/v2/pokemon/681/",
722 | },
723 | { name: "spritzee", url: "https://pokeapi.co/api/v2/pokemon/682/" },
724 | { name: "aromatisse", url: "https://pokeapi.co/api/v2/pokemon/683/" },
725 | { name: "swirlix", url: "https://pokeapi.co/api/v2/pokemon/684/" },
726 | { name: "slurpuff", url: "https://pokeapi.co/api/v2/pokemon/685/" },
727 | { name: "inkay", url: "https://pokeapi.co/api/v2/pokemon/686/" },
728 | { name: "malamar", url: "https://pokeapi.co/api/v2/pokemon/687/" },
729 | { name: "binacle", url: "https://pokeapi.co/api/v2/pokemon/688/" },
730 | { name: "barbaracle", url: "https://pokeapi.co/api/v2/pokemon/689/" },
731 | { name: "skrelp", url: "https://pokeapi.co/api/v2/pokemon/690/" },
732 | { name: "dragalge", url: "https://pokeapi.co/api/v2/pokemon/691/" },
733 | { name: "clauncher", url: "https://pokeapi.co/api/v2/pokemon/692/" },
734 | { name: "clawitzer", url: "https://pokeapi.co/api/v2/pokemon/693/" },
735 | { name: "helioptile", url: "https://pokeapi.co/api/v2/pokemon/694/" },
736 | { name: "heliolisk", url: "https://pokeapi.co/api/v2/pokemon/695/" },
737 | { name: "tyrunt", url: "https://pokeapi.co/api/v2/pokemon/696/" },
738 | { name: "tyrantrum", url: "https://pokeapi.co/api/v2/pokemon/697/" },
739 | { name: "amaura", url: "https://pokeapi.co/api/v2/pokemon/698/" },
740 | { name: "aurorus", url: "https://pokeapi.co/api/v2/pokemon/699/" },
741 | { name: "sylveon", url: "https://pokeapi.co/api/v2/pokemon/700/" },
742 | { name: "hawlucha", url: "https://pokeapi.co/api/v2/pokemon/701/" },
743 | { name: "dedenne", url: "https://pokeapi.co/api/v2/pokemon/702/" },
744 | { name: "carbink", url: "https://pokeapi.co/api/v2/pokemon/703/" },
745 | { name: "goomy", url: "https://pokeapi.co/api/v2/pokemon/704/" },
746 | { name: "sliggoo", url: "https://pokeapi.co/api/v2/pokemon/705/" },
747 | { name: "goodra", url: "https://pokeapi.co/api/v2/pokemon/706/" },
748 | { name: "klefki", url: "https://pokeapi.co/api/v2/pokemon/707/" },
749 | { name: "phantump", url: "https://pokeapi.co/api/v2/pokemon/708/" },
750 | { name: "trevenant", url: "https://pokeapi.co/api/v2/pokemon/709/" },
751 | {
752 | name: "pumpkaboo-average",
753 | url: "https://pokeapi.co/api/v2/pokemon/710/",
754 | },
755 | {
756 | name: "gourgeist-average",
757 | url: "https://pokeapi.co/api/v2/pokemon/711/",
758 | },
759 | { name: "bergmite", url: "https://pokeapi.co/api/v2/pokemon/712/" },
760 | { name: "avalugg", url: "https://pokeapi.co/api/v2/pokemon/713/" },
761 | { name: "noibat", url: "https://pokeapi.co/api/v2/pokemon/714/" },
762 | { name: "noivern", url: "https://pokeapi.co/api/v2/pokemon/715/" },
763 | { name: "xerneas", url: "https://pokeapi.co/api/v2/pokemon/716/" },
764 | { name: "yveltal", url: "https://pokeapi.co/api/v2/pokemon/717/" },
765 | { name: "zygarde-50", url: "https://pokeapi.co/api/v2/pokemon/718/" },
766 | { name: "diancie", url: "https://pokeapi.co/api/v2/pokemon/719/" },
767 | { name: "hoopa", url: "https://pokeapi.co/api/v2/pokemon/720/" },
768 | { name: "volcanion", url: "https://pokeapi.co/api/v2/pokemon/721/" },
769 | { name: "rowlet", url: "https://pokeapi.co/api/v2/pokemon/722/" },
770 | { name: "dartrix", url: "https://pokeapi.co/api/v2/pokemon/723/" },
771 | { name: "decidueye", url: "https://pokeapi.co/api/v2/pokemon/724/" },
772 | { name: "litten", url: "https://pokeapi.co/api/v2/pokemon/725/" },
773 | { name: "torracat", url: "https://pokeapi.co/api/v2/pokemon/726/" },
774 | { name: "incineroar", url: "https://pokeapi.co/api/v2/pokemon/727/" },
775 | { name: "popplio", url: "https://pokeapi.co/api/v2/pokemon/728/" },
776 | { name: "brionne", url: "https://pokeapi.co/api/v2/pokemon/729/" },
777 | { name: "primarina", url: "https://pokeapi.co/api/v2/pokemon/730/" },
778 | { name: "pikipek", url: "https://pokeapi.co/api/v2/pokemon/731/" },
779 | { name: "trumbeak", url: "https://pokeapi.co/api/v2/pokemon/732/" },
780 | { name: "toucannon", url: "https://pokeapi.co/api/v2/pokemon/733/" },
781 | { name: "yungoos", url: "https://pokeapi.co/api/v2/pokemon/734/" },
782 | { name: "gumshoos", url: "https://pokeapi.co/api/v2/pokemon/735/" },
783 | { name: "grubbin", url: "https://pokeapi.co/api/v2/pokemon/736/" },
784 | { name: "charjabug", url: "https://pokeapi.co/api/v2/pokemon/737/" },
785 | { name: "vikavolt", url: "https://pokeapi.co/api/v2/pokemon/738/" },
786 | { name: "crabrawler", url: "https://pokeapi.co/api/v2/pokemon/739/" },
787 | { name: "crabominable", url: "https://pokeapi.co/api/v2/pokemon/740/" },
788 | {
789 | name: "oricorio-baile",
790 | url: "https://pokeapi.co/api/v2/pokemon/741/",
791 | },
792 | { name: "cutiefly", url: "https://pokeapi.co/api/v2/pokemon/742/" },
793 | { name: "ribombee", url: "https://pokeapi.co/api/v2/pokemon/743/" },
794 | { name: "rockruff", url: "https://pokeapi.co/api/v2/pokemon/744/" },
795 | {
796 | name: "lycanroc-midday",
797 | url: "https://pokeapi.co/api/v2/pokemon/745/",
798 | },
799 | {
800 | name: "wishiwashi-solo",
801 | url: "https://pokeapi.co/api/v2/pokemon/746/",
802 | },
803 | { name: "mareanie", url: "https://pokeapi.co/api/v2/pokemon/747/" },
804 | { name: "toxapex", url: "https://pokeapi.co/api/v2/pokemon/748/" },
805 | { name: "mudbray", url: "https://pokeapi.co/api/v2/pokemon/749/" },
806 | { name: "mudsdale", url: "https://pokeapi.co/api/v2/pokemon/750/" },
807 | { name: "dewpider", url: "https://pokeapi.co/api/v2/pokemon/751/" },
808 | { name: "araquanid", url: "https://pokeapi.co/api/v2/pokemon/752/" },
809 | { name: "fomantis", url: "https://pokeapi.co/api/v2/pokemon/753/" },
810 | { name: "lurantis", url: "https://pokeapi.co/api/v2/pokemon/754/" },
811 | { name: "morelull", url: "https://pokeapi.co/api/v2/pokemon/755/" },
812 | { name: "shiinotic", url: "https://pokeapi.co/api/v2/pokemon/756/" },
813 | { name: "salandit", url: "https://pokeapi.co/api/v2/pokemon/757/" },
814 | { name: "salazzle", url: "https://pokeapi.co/api/v2/pokemon/758/" },
815 | { name: "stufful", url: "https://pokeapi.co/api/v2/pokemon/759/" },
816 | { name: "bewear", url: "https://pokeapi.co/api/v2/pokemon/760/" },
817 | { name: "bounsweet", url: "https://pokeapi.co/api/v2/pokemon/761/" },
818 | { name: "steenee", url: "https://pokeapi.co/api/v2/pokemon/762/" },
819 | { name: "tsareena", url: "https://pokeapi.co/api/v2/pokemon/763/" },
820 | { name: "comfey", url: "https://pokeapi.co/api/v2/pokemon/764/" },
821 | { name: "oranguru", url: "https://pokeapi.co/api/v2/pokemon/765/" },
822 | { name: "passimian", url: "https://pokeapi.co/api/v2/pokemon/766/" },
823 | { name: "wimpod", url: "https://pokeapi.co/api/v2/pokemon/767/" },
824 | { name: "golisopod", url: "https://pokeapi.co/api/v2/pokemon/768/" },
825 | { name: "sandygast", url: "https://pokeapi.co/api/v2/pokemon/769/" },
826 | { name: "palossand", url: "https://pokeapi.co/api/v2/pokemon/770/" },
827 | { name: "pyukumuku", url: "https://pokeapi.co/api/v2/pokemon/771/" },
828 | { name: "type-null", url: "https://pokeapi.co/api/v2/pokemon/772/" },
829 | { name: "silvally", url: "https://pokeapi.co/api/v2/pokemon/773/" },
830 | {
831 | name: "minior-red-meteor",
832 | url: "https://pokeapi.co/api/v2/pokemon/774/",
833 | },
834 | { name: "komala", url: "https://pokeapi.co/api/v2/pokemon/775/" },
835 | { name: "turtonator", url: "https://pokeapi.co/api/v2/pokemon/776/" },
836 | { name: "togedemaru", url: "https://pokeapi.co/api/v2/pokemon/777/" },
837 | {
838 | name: "mimikyu-disguised",
839 | url: "https://pokeapi.co/api/v2/pokemon/778/",
840 | },
841 | { name: "bruxish", url: "https://pokeapi.co/api/v2/pokemon/779/" },
842 | { name: "drampa", url: "https://pokeapi.co/api/v2/pokemon/780/" },
843 | { name: "dhelmise", url: "https://pokeapi.co/api/v2/pokemon/781/" },
844 | { name: "jangmo-o", url: "https://pokeapi.co/api/v2/pokemon/782/" },
845 | { name: "hakamo-o", url: "https://pokeapi.co/api/v2/pokemon/783/" },
846 | { name: "kommo-o", url: "https://pokeapi.co/api/v2/pokemon/784/" },
847 | { name: "tapu-koko", url: "https://pokeapi.co/api/v2/pokemon/785/" },
848 | { name: "tapu-lele", url: "https://pokeapi.co/api/v2/pokemon/786/" },
849 | { name: "tapu-bulu", url: "https://pokeapi.co/api/v2/pokemon/787/" },
850 | { name: "tapu-fini", url: "https://pokeapi.co/api/v2/pokemon/788/" },
851 | { name: "cosmog", url: "https://pokeapi.co/api/v2/pokemon/789/" },
852 | { name: "cosmoem", url: "https://pokeapi.co/api/v2/pokemon/790/" },
853 | { name: "solgaleo", url: "https://pokeapi.co/api/v2/pokemon/791/" },
854 | { name: "lunala", url: "https://pokeapi.co/api/v2/pokemon/792/" },
855 | { name: "nihilego", url: "https://pokeapi.co/api/v2/pokemon/793/" },
856 | { name: "buzzwole", url: "https://pokeapi.co/api/v2/pokemon/794/" },
857 | { name: "pheromosa", url: "https://pokeapi.co/api/v2/pokemon/795/" },
858 | { name: "xurkitree", url: "https://pokeapi.co/api/v2/pokemon/796/" },
859 | { name: "celesteela", url: "https://pokeapi.co/api/v2/pokemon/797/" },
860 | { name: "kartana", url: "https://pokeapi.co/api/v2/pokemon/798/" },
861 | { name: "guzzlord", url: "https://pokeapi.co/api/v2/pokemon/799/" },
862 | { name: "necrozma", url: "https://pokeapi.co/api/v2/pokemon/800/" },
863 | { name: "magearna", url: "https://pokeapi.co/api/v2/pokemon/801/" },
864 | { name: "marshadow", url: "https://pokeapi.co/api/v2/pokemon/802/" },
865 | { name: "poipole", url: "https://pokeapi.co/api/v2/pokemon/803/" },
866 | { name: "naganadel", url: "https://pokeapi.co/api/v2/pokemon/804/" },
867 | { name: "stakataka", url: "https://pokeapi.co/api/v2/pokemon/805/" },
868 | { name: "blacephalon", url: "https://pokeapi.co/api/v2/pokemon/806/" },
869 | { name: "zeraora", url: "https://pokeapi.co/api/v2/pokemon/807/" },
870 | { name: "meltan", url: "https://pokeapi.co/api/v2/pokemon/808/" },
871 | { name: "melmetal", url: "https://pokeapi.co/api/v2/pokemon/809/" },
872 | { name: "grookey", url: "https://pokeapi.co/api/v2/pokemon/810/" },
873 | { name: "thwackey", url: "https://pokeapi.co/api/v2/pokemon/811/" },
874 | { name: "rillaboom", url: "https://pokeapi.co/api/v2/pokemon/812/" },
875 | { name: "scorbunny", url: "https://pokeapi.co/api/v2/pokemon/813/" },
876 | { name: "raboot", url: "https://pokeapi.co/api/v2/pokemon/814/" },
877 | { name: "cinderace", url: "https://pokeapi.co/api/v2/pokemon/815/" },
878 | { name: "sobble", url: "https://pokeapi.co/api/v2/pokemon/816/" },
879 | { name: "drizzile", url: "https://pokeapi.co/api/v2/pokemon/817/" },
880 | { name: "inteleon", url: "https://pokeapi.co/api/v2/pokemon/818/" },
881 | { name: "skwovet", url: "https://pokeapi.co/api/v2/pokemon/819/" },
882 | { name: "greedent", url: "https://pokeapi.co/api/v2/pokemon/820/" },
883 | { name: "rookidee", url: "https://pokeapi.co/api/v2/pokemon/821/" },
884 | { name: "corvisquire", url: "https://pokeapi.co/api/v2/pokemon/822/" },
885 | { name: "corviknight", url: "https://pokeapi.co/api/v2/pokemon/823/" },
886 | { name: "blipbug", url: "https://pokeapi.co/api/v2/pokemon/824/" },
887 | { name: "dottler", url: "https://pokeapi.co/api/v2/pokemon/825/" },
888 | { name: "orbeetle", url: "https://pokeapi.co/api/v2/pokemon/826/" },
889 | { name: "nickit", url: "https://pokeapi.co/api/v2/pokemon/827/" },
890 | { name: "thievul", url: "https://pokeapi.co/api/v2/pokemon/828/" },
891 | { name: "gossifleur", url: "https://pokeapi.co/api/v2/pokemon/829/" },
892 | { name: "eldegoss", url: "https://pokeapi.co/api/v2/pokemon/830/" },
893 | { name: "wooloo", url: "https://pokeapi.co/api/v2/pokemon/831/" },
894 | { name: "dubwool", url: "https://pokeapi.co/api/v2/pokemon/832/" },
895 | { name: "chewtle", url: "https://pokeapi.co/api/v2/pokemon/833/" },
896 | { name: "drednaw", url: "https://pokeapi.co/api/v2/pokemon/834/" },
897 | { name: "yamper", url: "https://pokeapi.co/api/v2/pokemon/835/" },
898 | { name: "boltund", url: "https://pokeapi.co/api/v2/pokemon/836/" },
899 | { name: "rolycoly", url: "https://pokeapi.co/api/v2/pokemon/837/" },
900 | { name: "carkol", url: "https://pokeapi.co/api/v2/pokemon/838/" },
901 | { name: "coalossal", url: "https://pokeapi.co/api/v2/pokemon/839/" },
902 | { name: "applin", url: "https://pokeapi.co/api/v2/pokemon/840/" },
903 | { name: "flapple", url: "https://pokeapi.co/api/v2/pokemon/841/" },
904 | { name: "appletun", url: "https://pokeapi.co/api/v2/pokemon/842/" },
905 | { name: "silicobra", url: "https://pokeapi.co/api/v2/pokemon/843/" },
906 | { name: "sandaconda", url: "https://pokeapi.co/api/v2/pokemon/844/" },
907 | { name: "cramorant", url: "https://pokeapi.co/api/v2/pokemon/845/" },
908 | { name: "arrokuda", url: "https://pokeapi.co/api/v2/pokemon/846/" },
909 | { name: "barraskewda", url: "https://pokeapi.co/api/v2/pokemon/847/" },
910 | { name: "toxel", url: "https://pokeapi.co/api/v2/pokemon/848/" },
911 | {
912 | name: "toxtricity-amped",
913 | url: "https://pokeapi.co/api/v2/pokemon/849/",
914 | },
915 | { name: "sizzlipede", url: "https://pokeapi.co/api/v2/pokemon/850/" },
916 | { name: "centiskorch", url: "https://pokeapi.co/api/v2/pokemon/851/" },
917 | { name: "clobbopus", url: "https://pokeapi.co/api/v2/pokemon/852/" },
918 | { name: "grapploct", url: "https://pokeapi.co/api/v2/pokemon/853/" },
919 | { name: "sinistea", url: "https://pokeapi.co/api/v2/pokemon/854/" },
920 | { name: "polteageist", url: "https://pokeapi.co/api/v2/pokemon/855/" },
921 | { name: "hatenna", url: "https://pokeapi.co/api/v2/pokemon/856/" },
922 | { name: "hattrem", url: "https://pokeapi.co/api/v2/pokemon/857/" },
923 | { name: "hatterene", url: "https://pokeapi.co/api/v2/pokemon/858/" },
924 | { name: "impidimp", url: "https://pokeapi.co/api/v2/pokemon/859/" },
925 | { name: "morgrem", url: "https://pokeapi.co/api/v2/pokemon/860/" },
926 | { name: "grimmsnarl", url: "https://pokeapi.co/api/v2/pokemon/861/" },
927 | { name: "obstagoon", url: "https://pokeapi.co/api/v2/pokemon/862/" },
928 | { name: "perrserker", url: "https://pokeapi.co/api/v2/pokemon/863/" },
929 | { name: "cursola", url: "https://pokeapi.co/api/v2/pokemon/864/" },
930 | { name: "sirfetchd", url: "https://pokeapi.co/api/v2/pokemon/865/" },
931 | { name: "mr-rime", url: "https://pokeapi.co/api/v2/pokemon/866/" },
932 | { name: "runerigus", url: "https://pokeapi.co/api/v2/pokemon/867/" },
933 | { name: "milcery", url: "https://pokeapi.co/api/v2/pokemon/868/" },
934 | { name: "alcremie", url: "https://pokeapi.co/api/v2/pokemon/869/" },
935 | { name: "falinks", url: "https://pokeapi.co/api/v2/pokemon/870/" },
936 | { name: "pincurchin", url: "https://pokeapi.co/api/v2/pokemon/871/" },
937 | { name: "snom", url: "https://pokeapi.co/api/v2/pokemon/872/" },
938 | { name: "frosmoth", url: "https://pokeapi.co/api/v2/pokemon/873/" },
939 | { name: "stonjourner", url: "https://pokeapi.co/api/v2/pokemon/874/" },
940 | { name: "eiscue-ice", url: "https://pokeapi.co/api/v2/pokemon/875/" },
941 | {
942 | name: "indeedee-male",
943 | url: "https://pokeapi.co/api/v2/pokemon/876/",
944 | },
945 | {
946 | name: "morpeko-full-belly",
947 | url: "https://pokeapi.co/api/v2/pokemon/877/",
948 | },
949 | { name: "cufant", url: "https://pokeapi.co/api/v2/pokemon/878/" },
950 | { name: "copperajah", url: "https://pokeapi.co/api/v2/pokemon/879/" },
951 | { name: "dracozolt", url: "https://pokeapi.co/api/v2/pokemon/880/" },
952 | { name: "arctozolt", url: "https://pokeapi.co/api/v2/pokemon/881/" },
953 | { name: "dracovish", url: "https://pokeapi.co/api/v2/pokemon/882/" },
954 | { name: "arctovish", url: "https://pokeapi.co/api/v2/pokemon/883/" },
955 | { name: "duraludon", url: "https://pokeapi.co/api/v2/pokemon/884/" },
956 | { name: "dreepy", url: "https://pokeapi.co/api/v2/pokemon/885/" },
957 | { name: "drakloak", url: "https://pokeapi.co/api/v2/pokemon/886/" },
958 | { name: "dragapult", url: "https://pokeapi.co/api/v2/pokemon/887/" },
959 | { name: "zacian", url: "https://pokeapi.co/api/v2/pokemon/888/" },
960 | { name: "zamazenta", url: "https://pokeapi.co/api/v2/pokemon/889/" },
961 | { name: "eternatus", url: "https://pokeapi.co/api/v2/pokemon/890/" },
962 | { name: "kubfu", url: "https://pokeapi.co/api/v2/pokemon/891/" },
963 | {
964 | name: "urshifu-single-strike",
965 | url: "https://pokeapi.co/api/v2/pokemon/892/",
966 | },
967 | { name: "zarude", url: "https://pokeapi.co/api/v2/pokemon/893/" },
968 | { name: "regieleki", url: "https://pokeapi.co/api/v2/pokemon/894/" },
969 | { name: "regidrago", url: "https://pokeapi.co/api/v2/pokemon/895/" },
970 | { name: "glastrier", url: "https://pokeapi.co/api/v2/pokemon/896/" },
971 | { name: "spectrier", url: "https://pokeapi.co/api/v2/pokemon/897/" },
972 | { name: "calyrex", url: "https://pokeapi.co/api/v2/pokemon/898/" },
973 | { name: "wyrdeer", url: "https://pokeapi.co/api/v2/pokemon/899/" },
974 | { name: "kleavor", url: "https://pokeapi.co/api/v2/pokemon/900/" },
975 | { name: "ursaluna", url: "https://pokeapi.co/api/v2/pokemon/901/" },
976 | {
977 | name: "basculegion-male",
978 | url: "https://pokeapi.co/api/v2/pokemon/902/",
979 | },
980 | { name: "sneasler", url: "https://pokeapi.co/api/v2/pokemon/903/" },
981 | { name: "overqwil", url: "https://pokeapi.co/api/v2/pokemon/904/" },
982 | {
983 | name: "enamorus-incarnate",
984 | url: "https://pokeapi.co/api/v2/pokemon/905/",
985 | },
986 | { name: "sprigatito", url: "https://pokeapi.co/api/v2/pokemon/906/" },
987 | { name: "floragato", url: "https://pokeapi.co/api/v2/pokemon/907/" },
988 | { name: "meowscarada", url: "https://pokeapi.co/api/v2/pokemon/908/" },
989 | { name: "fuecoco", url: "https://pokeapi.co/api/v2/pokemon/909/" },
990 | { name: "crocalor", url: "https://pokeapi.co/api/v2/pokemon/910/" },
991 | { name: "skeledirge", url: "https://pokeapi.co/api/v2/pokemon/911/" },
992 | { name: "quaxly", url: "https://pokeapi.co/api/v2/pokemon/912/" },
993 | { name: "quaxwell", url: "https://pokeapi.co/api/v2/pokemon/913/" },
994 | { name: "quaquaval", url: "https://pokeapi.co/api/v2/pokemon/914/" },
995 | { name: "lechonk", url: "https://pokeapi.co/api/v2/pokemon/915/" },
996 | { name: "oinkologne", url: "https://pokeapi.co/api/v2/pokemon/916/" },
997 | { name: "tarountula", url: "https://pokeapi.co/api/v2/pokemon/917/" },
998 | { name: "spidops", url: "https://pokeapi.co/api/v2/pokemon/918/" },
999 | { name: "nymble", url: "https://pokeapi.co/api/v2/pokemon/919/" },
1000 | { name: "lokix", url: "https://pokeapi.co/api/v2/pokemon/920/" },
1001 | { name: "pawmi", url: "https://pokeapi.co/api/v2/pokemon/921/" },
1002 | { name: "pawmo", url: "https://pokeapi.co/api/v2/pokemon/922/" },
1003 | { name: "pawmot", url: "https://pokeapi.co/api/v2/pokemon/923/" },
1004 | { name: "tandemaus", url: "https://pokeapi.co/api/v2/pokemon/924/" },
1005 | { name: "maushold", url: "https://pokeapi.co/api/v2/pokemon/925/" },
1006 | { name: "fidough", url: "https://pokeapi.co/api/v2/pokemon/926/" },
1007 | { name: "dachsbun", url: "https://pokeapi.co/api/v2/pokemon/927/" },
1008 | { name: "smoliv", url: "https://pokeapi.co/api/v2/pokemon/928/" },
1009 | { name: "dolliv", url: "https://pokeapi.co/api/v2/pokemon/929/" },
1010 | { name: "arboliva", url: "https://pokeapi.co/api/v2/pokemon/930/" },
1011 | { name: "squawkabilly", url: "https://pokeapi.co/api/v2/pokemon/931/" },
1012 | { name: "nacli", url: "https://pokeapi.co/api/v2/pokemon/932/" },
1013 | { name: "naclstack", url: "https://pokeapi.co/api/v2/pokemon/933/" },
1014 | { name: "garganacl", url: "https://pokeapi.co/api/v2/pokemon/934/" },
1015 | { name: "charcadet", url: "https://pokeapi.co/api/v2/pokemon/935/" },
1016 | { name: "armarouge", url: "https://pokeapi.co/api/v2/pokemon/936/" },
1017 | { name: "ceruledge", url: "https://pokeapi.co/api/v2/pokemon/937/" },
1018 | { name: "tadbulb", url: "https://pokeapi.co/api/v2/pokemon/938/" },
1019 | { name: "bellibolt", url: "https://pokeapi.co/api/v2/pokemon/939/" },
1020 | { name: "wattrel", url: "https://pokeapi.co/api/v2/pokemon/940/" },
1021 | { name: "kilowattrel", url: "https://pokeapi.co/api/v2/pokemon/941/" },
1022 | { name: "maschiff", url: "https://pokeapi.co/api/v2/pokemon/942/" },
1023 | { name: "mabosstiff", url: "https://pokeapi.co/api/v2/pokemon/943/" },
1024 | { name: "shroodle", url: "https://pokeapi.co/api/v2/pokemon/944/" },
1025 | { name: "grafaiai", url: "https://pokeapi.co/api/v2/pokemon/945/" },
1026 | { name: "bramblin", url: "https://pokeapi.co/api/v2/pokemon/946/" },
1027 | { name: "brambleghast", url: "https://pokeapi.co/api/v2/pokemon/947/" },
1028 | { name: "toedscool", url: "https://pokeapi.co/api/v2/pokemon/948/" },
1029 | { name: "toedscruel", url: "https://pokeapi.co/api/v2/pokemon/949/" },
1030 | { name: "klawf", url: "https://pokeapi.co/api/v2/pokemon/950/" },
1031 | { name: "capsakid", url: "https://pokeapi.co/api/v2/pokemon/951/" },
1032 | { name: "scovillain", url: "https://pokeapi.co/api/v2/pokemon/952/" },
1033 | { name: "rellor", url: "https://pokeapi.co/api/v2/pokemon/953/" },
1034 | { name: "rabsca", url: "https://pokeapi.co/api/v2/pokemon/954/" },
1035 | { name: "flittle", url: "https://pokeapi.co/api/v2/pokemon/955/" },
1036 | { name: "espathra", url: "https://pokeapi.co/api/v2/pokemon/956/" },
1037 | { name: "tinkatink", url: "https://pokeapi.co/api/v2/pokemon/957/" },
1038 | { name: "tinkatuff", url: "https://pokeapi.co/api/v2/pokemon/958/" },
1039 | { name: "tinkaton", url: "https://pokeapi.co/api/v2/pokemon/959/" },
1040 | { name: "wiglett", url: "https://pokeapi.co/api/v2/pokemon/960/" },
1041 | { name: "wugtrio", url: "https://pokeapi.co/api/v2/pokemon/961/" },
1042 | { name: "bombirdier", url: "https://pokeapi.co/api/v2/pokemon/962/" },
1043 | { name: "finizen", url: "https://pokeapi.co/api/v2/pokemon/963/" },
1044 | { name: "palafin", url: "https://pokeapi.co/api/v2/pokemon/964/" },
1045 | { name: "varoom", url: "https://pokeapi.co/api/v2/pokemon/965/" },
1046 | { name: "revavroom", url: "https://pokeapi.co/api/v2/pokemon/966/" },
1047 | { name: "cyclizar", url: "https://pokeapi.co/api/v2/pokemon/967/" },
1048 | { name: "orthworm", url: "https://pokeapi.co/api/v2/pokemon/968/" },
1049 | { name: "glimmet", url: "https://pokeapi.co/api/v2/pokemon/969/" },
1050 | { name: "glimmora", url: "https://pokeapi.co/api/v2/pokemon/970/" },
1051 | { name: "greavard", url: "https://pokeapi.co/api/v2/pokemon/971/" },
1052 | { name: "houndstone", url: "https://pokeapi.co/api/v2/pokemon/972/" },
1053 | { name: "flamigo", url: "https://pokeapi.co/api/v2/pokemon/973/" },
1054 | { name: "cetoddle", url: "https://pokeapi.co/api/v2/pokemon/974/" },
1055 | { name: "cetitan", url: "https://pokeapi.co/api/v2/pokemon/975/" },
1056 | { name: "veluza", url: "https://pokeapi.co/api/v2/pokemon/976/" },
1057 | { name: "dondozo", url: "https://pokeapi.co/api/v2/pokemon/977/" },
1058 | { name: "tatsugiri", url: "https://pokeapi.co/api/v2/pokemon/978/" },
1059 | { name: "annihilape", url: "https://pokeapi.co/api/v2/pokemon/979/" },
1060 | { name: "clodsire", url: "https://pokeapi.co/api/v2/pokemon/980/" },
1061 | { name: "farigiraf", url: "https://pokeapi.co/api/v2/pokemon/981/" },
1062 | { name: "dudunsparce", url: "https://pokeapi.co/api/v2/pokemon/982/" },
1063 | { name: "kingambit", url: "https://pokeapi.co/api/v2/pokemon/983/" },
1064 | { name: "great-tusk", url: "https://pokeapi.co/api/v2/pokemon/984/" },
1065 | { name: "scream-tail", url: "https://pokeapi.co/api/v2/pokemon/985/" },
1066 | { name: "brute-bonnet", url: "https://pokeapi.co/api/v2/pokemon/986/" },
1067 | { name: "flutter-mane", url: "https://pokeapi.co/api/v2/pokemon/987/" },
1068 | { name: "slither-wing", url: "https://pokeapi.co/api/v2/pokemon/988/" },
1069 | { name: "sandy-shocks", url: "https://pokeapi.co/api/v2/pokemon/989/" },
1070 | { name: "iron-treads", url: "https://pokeapi.co/api/v2/pokemon/990/" },
1071 | { name: "iron-bundle", url: "https://pokeapi.co/api/v2/pokemon/991/" },
1072 | { name: "iron-hands", url: "https://pokeapi.co/api/v2/pokemon/992/" },
1073 | { name: "iron-jugulis", url: "https://pokeapi.co/api/v2/pokemon/993/" },
1074 | { name: "iron-moth", url: "https://pokeapi.co/api/v2/pokemon/994/" },
1075 | { name: "iron-thorns", url: "https://pokeapi.co/api/v2/pokemon/995/" },
1076 | { name: "frigibax", url: "https://pokeapi.co/api/v2/pokemon/996/" },
1077 | { name: "arctibax", url: "https://pokeapi.co/api/v2/pokemon/997/" },
1078 | { name: "baxcalibur", url: "https://pokeapi.co/api/v2/pokemon/998/" },
1079 | { name: "gimmighoul", url: "https://pokeapi.co/api/v2/pokemon/999/" },
1080 | { name: "gholdengo", url: "https://pokeapi.co/api/v2/pokemon/1000/" },
1081 | { name: "wo-chien", url: "https://pokeapi.co/api/v2/pokemon/1001/" },
1082 | { name: "chien-pao", url: "https://pokeapi.co/api/v2/pokemon/1002/" },
1083 | { name: "ting-lu", url: "https://pokeapi.co/api/v2/pokemon/1003/" },
1084 | { name: "chi-yu", url: "https://pokeapi.co/api/v2/pokemon/1004/" },
1085 | {
1086 | name: "roaring-moon",
1087 | url: "https://pokeapi.co/api/v2/pokemon/1005/",
1088 | },
1089 | {
1090 | name: "iron-valiant",
1091 | url: "https://pokeapi.co/api/v2/pokemon/1006/",
1092 | },
1093 | { name: "koraidon", url: "https://pokeapi.co/api/v2/pokemon/1007/" },
1094 | { name: "miraidon", url: "https://pokeapi.co/api/v2/pokemon/1008/" },
1095 | {
1096 | name: "walking-wake",
1097 | url: "https://pokeapi.co/api/v2/pokemon/1009/",
1098 | },
1099 | { name: "iron-leaves", url: "https://pokeapi.co/api/v2/pokemon/1010/" },
1100 | {
1101 | name: "deoxys-attack",
1102 | url: "https://pokeapi.co/api/v2/pokemon/10001/",
1103 | },
1104 | {
1105 | name: "deoxys-defense",
1106 | url: "https://pokeapi.co/api/v2/pokemon/10002/",
1107 | },
1108 | {
1109 | name: "deoxys-speed",
1110 | url: "https://pokeapi.co/api/v2/pokemon/10003/",
1111 | },
1112 | {
1113 | name: "wormadam-sandy",
1114 | url: "https://pokeapi.co/api/v2/pokemon/10004/",
1115 | },
1116 | {
1117 | name: "wormadam-trash",
1118 | url: "https://pokeapi.co/api/v2/pokemon/10005/",
1119 | },
1120 | {
1121 | name: "shaymin-sky",
1122 | url: "https://pokeapi.co/api/v2/pokemon/10006/",
1123 | },
1124 | {
1125 | name: "giratina-origin",
1126 | url: "https://pokeapi.co/api/v2/pokemon/10007/",
1127 | },
1128 | { name: "rotom-heat", url: "https://pokeapi.co/api/v2/pokemon/10008/" },
1129 | { name: "rotom-wash", url: "https://pokeapi.co/api/v2/pokemon/10009/" },
1130 | {
1131 | name: "rotom-frost",
1132 | url: "https://pokeapi.co/api/v2/pokemon/10010/",
1133 | },
1134 | { name: "rotom-fan", url: "https://pokeapi.co/api/v2/pokemon/10011/" },
1135 | { name: "rotom-mow", url: "https://pokeapi.co/api/v2/pokemon/10012/" },
1136 | {
1137 | name: "castform-sunny",
1138 | url: "https://pokeapi.co/api/v2/pokemon/10013/",
1139 | },
1140 | {
1141 | name: "castform-rainy",
1142 | url: "https://pokeapi.co/api/v2/pokemon/10014/",
1143 | },
1144 | {
1145 | name: "castform-snowy",
1146 | url: "https://pokeapi.co/api/v2/pokemon/10015/",
1147 | },
1148 | {
1149 | name: "basculin-blue-striped",
1150 | url: "https://pokeapi.co/api/v2/pokemon/10016/",
1151 | },
1152 | {
1153 | name: "darmanitan-zen",
1154 | url: "https://pokeapi.co/api/v2/pokemon/10017/",
1155 | },
1156 | {
1157 | name: "meloetta-pirouette",
1158 | url: "https://pokeapi.co/api/v2/pokemon/10018/",
1159 | },
1160 | {
1161 | name: "tornadus-therian",
1162 | url: "https://pokeapi.co/api/v2/pokemon/10019/",
1163 | },
1164 | {
1165 | name: "thundurus-therian",
1166 | url: "https://pokeapi.co/api/v2/pokemon/10020/",
1167 | },
1168 | {
1169 | name: "landorus-therian",
1170 | url: "https://pokeapi.co/api/v2/pokemon/10021/",
1171 | },
1172 | {
1173 | name: "kyurem-black",
1174 | url: "https://pokeapi.co/api/v2/pokemon/10022/",
1175 | },
1176 | {
1177 | name: "kyurem-white",
1178 | url: "https://pokeapi.co/api/v2/pokemon/10023/",
1179 | },
1180 | {
1181 | name: "keldeo-resolute",
1182 | url: "https://pokeapi.co/api/v2/pokemon/10024/",
1183 | },
1184 | {
1185 | name: "meowstic-female",
1186 | url: "https://pokeapi.co/api/v2/pokemon/10025/",
1187 | },
1188 | {
1189 | name: "aegislash-blade",
1190 | url: "https://pokeapi.co/api/v2/pokemon/10026/",
1191 | },
1192 | {
1193 | name: "pumpkaboo-small",
1194 | url: "https://pokeapi.co/api/v2/pokemon/10027/",
1195 | },
1196 | {
1197 | name: "pumpkaboo-large",
1198 | url: "https://pokeapi.co/api/v2/pokemon/10028/",
1199 | },
1200 | {
1201 | name: "pumpkaboo-super",
1202 | url: "https://pokeapi.co/api/v2/pokemon/10029/",
1203 | },
1204 | {
1205 | name: "gourgeist-small",
1206 | url: "https://pokeapi.co/api/v2/pokemon/10030/",
1207 | },
1208 | {
1209 | name: "gourgeist-large",
1210 | url: "https://pokeapi.co/api/v2/pokemon/10031/",
1211 | },
1212 | {
1213 | name: "gourgeist-super",
1214 | url: "https://pokeapi.co/api/v2/pokemon/10032/",
1215 | },
1216 | {
1217 | name: "venusaur-mega",
1218 | url: "https://pokeapi.co/api/v2/pokemon/10033/",
1219 | },
1220 | {
1221 | name: "charizard-mega-x",
1222 | url: "https://pokeapi.co/api/v2/pokemon/10034/",
1223 | },
1224 | {
1225 | name: "charizard-mega-y",
1226 | url: "https://pokeapi.co/api/v2/pokemon/10035/",
1227 | },
1228 | {
1229 | name: "blastoise-mega",
1230 | url: "https://pokeapi.co/api/v2/pokemon/10036/",
1231 | },
1232 | {
1233 | name: "alakazam-mega",
1234 | url: "https://pokeapi.co/api/v2/pokemon/10037/",
1235 | },
1236 | {
1237 | name: "gengar-mega",
1238 | url: "https://pokeapi.co/api/v2/pokemon/10038/",
1239 | },
1240 | {
1241 | name: "kangaskhan-mega",
1242 | url: "https://pokeapi.co/api/v2/pokemon/10039/",
1243 | },
1244 | {
1245 | name: "pinsir-mega",
1246 | url: "https://pokeapi.co/api/v2/pokemon/10040/",
1247 | },
1248 | {
1249 | name: "gyarados-mega",
1250 | url: "https://pokeapi.co/api/v2/pokemon/10041/",
1251 | },
1252 | {
1253 | name: "aerodactyl-mega",
1254 | url: "https://pokeapi.co/api/v2/pokemon/10042/",
1255 | },
1256 | {
1257 | name: "mewtwo-mega-x",
1258 | url: "https://pokeapi.co/api/v2/pokemon/10043/",
1259 | },
1260 | {
1261 | name: "mewtwo-mega-y",
1262 | url: "https://pokeapi.co/api/v2/pokemon/10044/",
1263 | },
1264 | {
1265 | name: "ampharos-mega",
1266 | url: "https://pokeapi.co/api/v2/pokemon/10045/",
1267 | },
1268 | {
1269 | name: "scizor-mega",
1270 | url: "https://pokeapi.co/api/v2/pokemon/10046/",
1271 | },
1272 | {
1273 | name: "heracross-mega",
1274 | url: "https://pokeapi.co/api/v2/pokemon/10047/",
1275 | },
1276 | {
1277 | name: "houndoom-mega",
1278 | url: "https://pokeapi.co/api/v2/pokemon/10048/",
1279 | },
1280 | {
1281 | name: "tyranitar-mega",
1282 | url: "https://pokeapi.co/api/v2/pokemon/10049/",
1283 | },
1284 | {
1285 | name: "blaziken-mega",
1286 | url: "https://pokeapi.co/api/v2/pokemon/10050/",
1287 | },
1288 | {
1289 | name: "gardevoir-mega",
1290 | url: "https://pokeapi.co/api/v2/pokemon/10051/",
1291 | },
1292 | {
1293 | name: "mawile-mega",
1294 | url: "https://pokeapi.co/api/v2/pokemon/10052/",
1295 | },
1296 | {
1297 | name: "aggron-mega",
1298 | url: "https://pokeapi.co/api/v2/pokemon/10053/",
1299 | },
1300 | {
1301 | name: "medicham-mega",
1302 | url: "https://pokeapi.co/api/v2/pokemon/10054/",
1303 | },
1304 | {
1305 | name: "manectric-mega",
1306 | url: "https://pokeapi.co/api/v2/pokemon/10055/",
1307 | },
1308 | {
1309 | name: "banette-mega",
1310 | url: "https://pokeapi.co/api/v2/pokemon/10056/",
1311 | },
1312 | { name: "absol-mega", url: "https://pokeapi.co/api/v2/pokemon/10057/" },
1313 | {
1314 | name: "garchomp-mega",
1315 | url: "https://pokeapi.co/api/v2/pokemon/10058/",
1316 | },
1317 | {
1318 | name: "lucario-mega",
1319 | url: "https://pokeapi.co/api/v2/pokemon/10059/",
1320 | },
1321 | {
1322 | name: "abomasnow-mega",
1323 | url: "https://pokeapi.co/api/v2/pokemon/10060/",
1324 | },
1325 | {
1326 | name: "floette-eternal",
1327 | url: "https://pokeapi.co/api/v2/pokemon/10061/",
1328 | },
1329 | {
1330 | name: "latias-mega",
1331 | url: "https://pokeapi.co/api/v2/pokemon/10062/",
1332 | },
1333 | {
1334 | name: "latios-mega",
1335 | url: "https://pokeapi.co/api/v2/pokemon/10063/",
1336 | },
1337 | {
1338 | name: "swampert-mega",
1339 | url: "https://pokeapi.co/api/v2/pokemon/10064/",
1340 | },
1341 | {
1342 | name: "sceptile-mega",
1343 | url: "https://pokeapi.co/api/v2/pokemon/10065/",
1344 | },
1345 | {
1346 | name: "sableye-mega",
1347 | url: "https://pokeapi.co/api/v2/pokemon/10066/",
1348 | },
1349 | {
1350 | name: "altaria-mega",
1351 | url: "https://pokeapi.co/api/v2/pokemon/10067/",
1352 | },
1353 | {
1354 | name: "gallade-mega",
1355 | url: "https://pokeapi.co/api/v2/pokemon/10068/",
1356 | },
1357 | {
1358 | name: "audino-mega",
1359 | url: "https://pokeapi.co/api/v2/pokemon/10069/",
1360 | },
1361 | {
1362 | name: "sharpedo-mega",
1363 | url: "https://pokeapi.co/api/v2/pokemon/10070/",
1364 | },
1365 | {
1366 | name: "slowbro-mega",
1367 | url: "https://pokeapi.co/api/v2/pokemon/10071/",
1368 | },
1369 | {
1370 | name: "steelix-mega",
1371 | url: "https://pokeapi.co/api/v2/pokemon/10072/",
1372 | },
1373 | {
1374 | name: "pidgeot-mega",
1375 | url: "https://pokeapi.co/api/v2/pokemon/10073/",
1376 | },
1377 | {
1378 | name: "glalie-mega",
1379 | url: "https://pokeapi.co/api/v2/pokemon/10074/",
1380 | },
1381 | {
1382 | name: "diancie-mega",
1383 | url: "https://pokeapi.co/api/v2/pokemon/10075/",
1384 | },
1385 | {
1386 | name: "metagross-mega",
1387 | url: "https://pokeapi.co/api/v2/pokemon/10076/",
1388 | },
1389 | {
1390 | name: "kyogre-primal",
1391 | url: "https://pokeapi.co/api/v2/pokemon/10077/",
1392 | },
1393 | {
1394 | name: "groudon-primal",
1395 | url: "https://pokeapi.co/api/v2/pokemon/10078/",
1396 | },
1397 | {
1398 | name: "rayquaza-mega",
1399 | url: "https://pokeapi.co/api/v2/pokemon/10079/",
1400 | },
1401 | {
1402 | name: "pikachu-rock-star",
1403 | url: "https://pokeapi.co/api/v2/pokemon/10080/",
1404 | },
1405 | {
1406 | name: "pikachu-belle",
1407 | url: "https://pokeapi.co/api/v2/pokemon/10081/",
1408 | },
1409 | {
1410 | name: "pikachu-pop-star",
1411 | url: "https://pokeapi.co/api/v2/pokemon/10082/",
1412 | },
1413 | {
1414 | name: "pikachu-phd",
1415 | url: "https://pokeapi.co/api/v2/pokemon/10083/",
1416 | },
1417 | {
1418 | name: "pikachu-libre",
1419 | url: "https://pokeapi.co/api/v2/pokemon/10084/",
1420 | },
1421 | {
1422 | name: "pikachu-cosplay",
1423 | url: "https://pokeapi.co/api/v2/pokemon/10085/",
1424 | },
1425 | {
1426 | name: "hoopa-unbound",
1427 | url: "https://pokeapi.co/api/v2/pokemon/10086/",
1428 | },
1429 | {
1430 | name: "camerupt-mega",
1431 | url: "https://pokeapi.co/api/v2/pokemon/10087/",
1432 | },
1433 | {
1434 | name: "lopunny-mega",
1435 | url: "https://pokeapi.co/api/v2/pokemon/10088/",
1436 | },
1437 | {
1438 | name: "salamence-mega",
1439 | url: "https://pokeapi.co/api/v2/pokemon/10089/",
1440 | },
1441 | {
1442 | name: "beedrill-mega",
1443 | url: "https://pokeapi.co/api/v2/pokemon/10090/",
1444 | },
1445 | {
1446 | name: "rattata-alola",
1447 | url: "https://pokeapi.co/api/v2/pokemon/10091/",
1448 | },
1449 | {
1450 | name: "raticate-alola",
1451 | url: "https://pokeapi.co/api/v2/pokemon/10092/",
1452 | },
1453 | {
1454 | name: "raticate-totem-alola",
1455 | url: "https://pokeapi.co/api/v2/pokemon/10093/",
1456 | },
1457 | {
1458 | name: "pikachu-original-cap",
1459 | url: "https://pokeapi.co/api/v2/pokemon/10094/",
1460 | },
1461 | {
1462 | name: "pikachu-hoenn-cap",
1463 | url: "https://pokeapi.co/api/v2/pokemon/10095/",
1464 | },
1465 | {
1466 | name: "pikachu-sinnoh-cap",
1467 | url: "https://pokeapi.co/api/v2/pokemon/10096/",
1468 | },
1469 | {
1470 | name: "pikachu-unova-cap",
1471 | url: "https://pokeapi.co/api/v2/pokemon/10097/",
1472 | },
1473 | {
1474 | name: "pikachu-kalos-cap",
1475 | url: "https://pokeapi.co/api/v2/pokemon/10098/",
1476 | },
1477 | {
1478 | name: "pikachu-alola-cap",
1479 | url: "https://pokeapi.co/api/v2/pokemon/10099/",
1480 | },
1481 | {
1482 | name: "raichu-alola",
1483 | url: "https://pokeapi.co/api/v2/pokemon/10100/",
1484 | },
1485 | {
1486 | name: "sandshrew-alola",
1487 | url: "https://pokeapi.co/api/v2/pokemon/10101/",
1488 | },
1489 | {
1490 | name: "sandslash-alola",
1491 | url: "https://pokeapi.co/api/v2/pokemon/10102/",
1492 | },
1493 | {
1494 | name: "vulpix-alola",
1495 | url: "https://pokeapi.co/api/v2/pokemon/10103/",
1496 | },
1497 | {
1498 | name: "ninetales-alola",
1499 | url: "https://pokeapi.co/api/v2/pokemon/10104/",
1500 | },
1501 | {
1502 | name: "diglett-alola",
1503 | url: "https://pokeapi.co/api/v2/pokemon/10105/",
1504 | },
1505 | {
1506 | name: "dugtrio-alola",
1507 | url: "https://pokeapi.co/api/v2/pokemon/10106/",
1508 | },
1509 | {
1510 | name: "meowth-alola",
1511 | url: "https://pokeapi.co/api/v2/pokemon/10107/",
1512 | },
1513 | {
1514 | name: "persian-alola",
1515 | url: "https://pokeapi.co/api/v2/pokemon/10108/",
1516 | },
1517 | {
1518 | name: "geodude-alola",
1519 | url: "https://pokeapi.co/api/v2/pokemon/10109/",
1520 | },
1521 | {
1522 | name: "graveler-alola",
1523 | url: "https://pokeapi.co/api/v2/pokemon/10110/",
1524 | },
1525 | {
1526 | name: "golem-alola",
1527 | url: "https://pokeapi.co/api/v2/pokemon/10111/",
1528 | },
1529 | {
1530 | name: "grimer-alola",
1531 | url: "https://pokeapi.co/api/v2/pokemon/10112/",
1532 | },
1533 | { name: "muk-alola", url: "https://pokeapi.co/api/v2/pokemon/10113/" },
1534 | {
1535 | name: "exeggutor-alola",
1536 | url: "https://pokeapi.co/api/v2/pokemon/10114/",
1537 | },
1538 | {
1539 | name: "marowak-alola",
1540 | url: "https://pokeapi.co/api/v2/pokemon/10115/",
1541 | },
1542 | {
1543 | name: "greninja-battle-bond",
1544 | url: "https://pokeapi.co/api/v2/pokemon/10116/",
1545 | },
1546 | {
1547 | name: "greninja-ash",
1548 | url: "https://pokeapi.co/api/v2/pokemon/10117/",
1549 | },
1550 | {
1551 | name: "zygarde-10-power-construct",
1552 | url: "https://pokeapi.co/api/v2/pokemon/10118/",
1553 | },
1554 | {
1555 | name: "zygarde-50-power-construct",
1556 | url: "https://pokeapi.co/api/v2/pokemon/10119/",
1557 | },
1558 | {
1559 | name: "zygarde-complete",
1560 | url: "https://pokeapi.co/api/v2/pokemon/10120/",
1561 | },
1562 | {
1563 | name: "gumshoos-totem",
1564 | url: "https://pokeapi.co/api/v2/pokemon/10121/",
1565 | },
1566 | {
1567 | name: "vikavolt-totem",
1568 | url: "https://pokeapi.co/api/v2/pokemon/10122/",
1569 | },
1570 | {
1571 | name: "oricorio-pom-pom",
1572 | url: "https://pokeapi.co/api/v2/pokemon/10123/",
1573 | },
1574 | {
1575 | name: "oricorio-pau",
1576 | url: "https://pokeapi.co/api/v2/pokemon/10124/",
1577 | },
1578 | {
1579 | name: "oricorio-sensu",
1580 | url: "https://pokeapi.co/api/v2/pokemon/10125/",
1581 | },
1582 | {
1583 | name: "lycanroc-midnight",
1584 | url: "https://pokeapi.co/api/v2/pokemon/10126/",
1585 | },
1586 | {
1587 | name: "wishiwashi-school",
1588 | url: "https://pokeapi.co/api/v2/pokemon/10127/",
1589 | },
1590 | {
1591 | name: "lurantis-totem",
1592 | url: "https://pokeapi.co/api/v2/pokemon/10128/",
1593 | },
1594 | {
1595 | name: "salazzle-totem",
1596 | url: "https://pokeapi.co/api/v2/pokemon/10129/",
1597 | },
1598 | {
1599 | name: "minior-orange-meteor",
1600 | url: "https://pokeapi.co/api/v2/pokemon/10130/",
1601 | },
1602 | {
1603 | name: "minior-yellow-meteor",
1604 | url: "https://pokeapi.co/api/v2/pokemon/10131/",
1605 | },
1606 | {
1607 | name: "minior-green-meteor",
1608 | url: "https://pokeapi.co/api/v2/pokemon/10132/",
1609 | },
1610 | {
1611 | name: "minior-blue-meteor",
1612 | url: "https://pokeapi.co/api/v2/pokemon/10133/",
1613 | },
1614 | {
1615 | name: "minior-indigo-meteor",
1616 | url: "https://pokeapi.co/api/v2/pokemon/10134/",
1617 | },
1618 | {
1619 | name: "minior-violet-meteor",
1620 | url: "https://pokeapi.co/api/v2/pokemon/10135/",
1621 | },
1622 | { name: "minior-red", url: "https://pokeapi.co/api/v2/pokemon/10136/" },
1623 | {
1624 | name: "minior-orange",
1625 | url: "https://pokeapi.co/api/v2/pokemon/10137/",
1626 | },
1627 | {
1628 | name: "minior-yellow",
1629 | url: "https://pokeapi.co/api/v2/pokemon/10138/",
1630 | },
1631 | {
1632 | name: "minior-green",
1633 | url: "https://pokeapi.co/api/v2/pokemon/10139/",
1634 | },
1635 | {
1636 | name: "minior-blue",
1637 | url: "https://pokeapi.co/api/v2/pokemon/10140/",
1638 | },
1639 | {
1640 | name: "minior-indigo",
1641 | url: "https://pokeapi.co/api/v2/pokemon/10141/",
1642 | },
1643 | {
1644 | name: "minior-violet",
1645 | url: "https://pokeapi.co/api/v2/pokemon/10142/",
1646 | },
1647 | {
1648 | name: "mimikyu-busted",
1649 | url: "https://pokeapi.co/api/v2/pokemon/10143/",
1650 | },
1651 | {
1652 | name: "mimikyu-totem-disguised",
1653 | url: "https://pokeapi.co/api/v2/pokemon/10144/",
1654 | },
1655 | {
1656 | name: "mimikyu-totem-busted",
1657 | url: "https://pokeapi.co/api/v2/pokemon/10145/",
1658 | },
1659 | {
1660 | name: "kommo-o-totem",
1661 | url: "https://pokeapi.co/api/v2/pokemon/10146/",
1662 | },
1663 | {
1664 | name: "magearna-original",
1665 | url: "https://pokeapi.co/api/v2/pokemon/10147/",
1666 | },
1667 | {
1668 | name: "pikachu-partner-cap",
1669 | url: "https://pokeapi.co/api/v2/pokemon/10148/",
1670 | },
1671 | {
1672 | name: "marowak-totem",
1673 | url: "https://pokeapi.co/api/v2/pokemon/10149/",
1674 | },
1675 | {
1676 | name: "ribombee-totem",
1677 | url: "https://pokeapi.co/api/v2/pokemon/10150/",
1678 | },
1679 | {
1680 | name: "rockruff-own-tempo",
1681 | url: "https://pokeapi.co/api/v2/pokemon/10151/",
1682 | },
1683 | {
1684 | name: "lycanroc-dusk",
1685 | url: "https://pokeapi.co/api/v2/pokemon/10152/",
1686 | },
1687 | {
1688 | name: "araquanid-totem",
1689 | url: "https://pokeapi.co/api/v2/pokemon/10153/",
1690 | },
1691 | {
1692 | name: "togedemaru-totem",
1693 | url: "https://pokeapi.co/api/v2/pokemon/10154/",
1694 | },
1695 | {
1696 | name: "necrozma-dusk",
1697 | url: "https://pokeapi.co/api/v2/pokemon/10155/",
1698 | },
1699 | {
1700 | name: "necrozma-dawn",
1701 | url: "https://pokeapi.co/api/v2/pokemon/10156/",
1702 | },
1703 | {
1704 | name: "necrozma-ultra",
1705 | url: "https://pokeapi.co/api/v2/pokemon/10157/",
1706 | },
1707 | {
1708 | name: "pikachu-starter",
1709 | url: "https://pokeapi.co/api/v2/pokemon/10158/",
1710 | },
1711 | {
1712 | name: "eevee-starter",
1713 | url: "https://pokeapi.co/api/v2/pokemon/10159/",
1714 | },
1715 | {
1716 | name: "pikachu-world-cap",
1717 | url: "https://pokeapi.co/api/v2/pokemon/10160/",
1718 | },
1719 | {
1720 | name: "meowth-galar",
1721 | url: "https://pokeapi.co/api/v2/pokemon/10161/",
1722 | },
1723 | {
1724 | name: "ponyta-galar",
1725 | url: "https://pokeapi.co/api/v2/pokemon/10162/",
1726 | },
1727 | {
1728 | name: "rapidash-galar",
1729 | url: "https://pokeapi.co/api/v2/pokemon/10163/",
1730 | },
1731 | {
1732 | name: "slowpoke-galar",
1733 | url: "https://pokeapi.co/api/v2/pokemon/10164/",
1734 | },
1735 | {
1736 | name: "slowbro-galar",
1737 | url: "https://pokeapi.co/api/v2/pokemon/10165/",
1738 | },
1739 | {
1740 | name: "farfetchd-galar",
1741 | url: "https://pokeapi.co/api/v2/pokemon/10166/",
1742 | },
1743 | {
1744 | name: "weezing-galar",
1745 | url: "https://pokeapi.co/api/v2/pokemon/10167/",
1746 | },
1747 | {
1748 | name: "mr-mime-galar",
1749 | url: "https://pokeapi.co/api/v2/pokemon/10168/",
1750 | },
1751 | {
1752 | name: "articuno-galar",
1753 | url: "https://pokeapi.co/api/v2/pokemon/10169/",
1754 | },
1755 | {
1756 | name: "zapdos-galar",
1757 | url: "https://pokeapi.co/api/v2/pokemon/10170/",
1758 | },
1759 | {
1760 | name: "moltres-galar",
1761 | url: "https://pokeapi.co/api/v2/pokemon/10171/",
1762 | },
1763 | {
1764 | name: "slowking-galar",
1765 | url: "https://pokeapi.co/api/v2/pokemon/10172/",
1766 | },
1767 | {
1768 | name: "corsola-galar",
1769 | url: "https://pokeapi.co/api/v2/pokemon/10173/",
1770 | },
1771 | {
1772 | name: "zigzagoon-galar",
1773 | url: "https://pokeapi.co/api/v2/pokemon/10174/",
1774 | },
1775 | {
1776 | name: "linoone-galar",
1777 | url: "https://pokeapi.co/api/v2/pokemon/10175/",
1778 | },
1779 | {
1780 | name: "darumaka-galar",
1781 | url: "https://pokeapi.co/api/v2/pokemon/10176/",
1782 | },
1783 | {
1784 | name: "darmanitan-galar-standard",
1785 | url: "https://pokeapi.co/api/v2/pokemon/10177/",
1786 | },
1787 | {
1788 | name: "darmanitan-galar-zen",
1789 | url: "https://pokeapi.co/api/v2/pokemon/10178/",
1790 | },
1791 | {
1792 | name: "yamask-galar",
1793 | url: "https://pokeapi.co/api/v2/pokemon/10179/",
1794 | },
1795 | {
1796 | name: "stunfisk-galar",
1797 | url: "https://pokeapi.co/api/v2/pokemon/10180/",
1798 | },
1799 | { name: "zygarde-10", url: "https://pokeapi.co/api/v2/pokemon/10181/" },
1800 | {
1801 | name: "cramorant-gulping",
1802 | url: "https://pokeapi.co/api/v2/pokemon/10182/",
1803 | },
1804 | {
1805 | name: "cramorant-gorging",
1806 | url: "https://pokeapi.co/api/v2/pokemon/10183/",
1807 | },
1808 | {
1809 | name: "toxtricity-low-key",
1810 | url: "https://pokeapi.co/api/v2/pokemon/10184/",
1811 | },
1812 | {
1813 | name: "eiscue-noice",
1814 | url: "https://pokeapi.co/api/v2/pokemon/10185/",
1815 | },
1816 | {
1817 | name: "indeedee-female",
1818 | url: "https://pokeapi.co/api/v2/pokemon/10186/",
1819 | },
1820 | {
1821 | name: "morpeko-hangry",
1822 | url: "https://pokeapi.co/api/v2/pokemon/10187/",
1823 | },
1824 | {
1825 | name: "zacian-crowned",
1826 | url: "https://pokeapi.co/api/v2/pokemon/10188/",
1827 | },
1828 | {
1829 | name: "zamazenta-crowned",
1830 | url: "https://pokeapi.co/api/v2/pokemon/10189/",
1831 | },
1832 | {
1833 | name: "eternatus-eternamax",
1834 | url: "https://pokeapi.co/api/v2/pokemon/10190/",
1835 | },
1836 | {
1837 | name: "urshifu-rapid-strike",
1838 | url: "https://pokeapi.co/api/v2/pokemon/10191/",
1839 | },
1840 | {
1841 | name: "zarude-dada",
1842 | url: "https://pokeapi.co/api/v2/pokemon/10192/",
1843 | },
1844 | {
1845 | name: "calyrex-ice",
1846 | url: "https://pokeapi.co/api/v2/pokemon/10193/",
1847 | },
1848 | {
1849 | name: "calyrex-shadow",
1850 | url: "https://pokeapi.co/api/v2/pokemon/10194/",
1851 | },
1852 | {
1853 | name: "venusaur-gmax",
1854 | url: "https://pokeapi.co/api/v2/pokemon/10195/",
1855 | },
1856 | {
1857 | name: "charizard-gmax",
1858 | url: "https://pokeapi.co/api/v2/pokemon/10196/",
1859 | },
1860 | {
1861 | name: "blastoise-gmax",
1862 | url: "https://pokeapi.co/api/v2/pokemon/10197/",
1863 | },
1864 | {
1865 | name: "butterfree-gmax",
1866 | url: "https://pokeapi.co/api/v2/pokemon/10198/",
1867 | },
1868 | {
1869 | name: "pikachu-gmax",
1870 | url: "https://pokeapi.co/api/v2/pokemon/10199/",
1871 | },
1872 | {
1873 | name: "meowth-gmax",
1874 | url: "https://pokeapi.co/api/v2/pokemon/10200/",
1875 | },
1876 | {
1877 | name: "machamp-gmax",
1878 | url: "https://pokeapi.co/api/v2/pokemon/10201/",
1879 | },
1880 | {
1881 | name: "gengar-gmax",
1882 | url: "https://pokeapi.co/api/v2/pokemon/10202/",
1883 | },
1884 | {
1885 | name: "kingler-gmax",
1886 | url: "https://pokeapi.co/api/v2/pokemon/10203/",
1887 | },
1888 | {
1889 | name: "lapras-gmax",
1890 | url: "https://pokeapi.co/api/v2/pokemon/10204/",
1891 | },
1892 | { name: "eevee-gmax", url: "https://pokeapi.co/api/v2/pokemon/10205/" },
1893 | {
1894 | name: "snorlax-gmax",
1895 | url: "https://pokeapi.co/api/v2/pokemon/10206/",
1896 | },
1897 | {
1898 | name: "garbodor-gmax",
1899 | url: "https://pokeapi.co/api/v2/pokemon/10207/",
1900 | },
1901 | {
1902 | name: "melmetal-gmax",
1903 | url: "https://pokeapi.co/api/v2/pokemon/10208/",
1904 | },
1905 | {
1906 | name: "rillaboom-gmax",
1907 | url: "https://pokeapi.co/api/v2/pokemon/10209/",
1908 | },
1909 | {
1910 | name: "cinderace-gmax",
1911 | url: "https://pokeapi.co/api/v2/pokemon/10210/",
1912 | },
1913 | {
1914 | name: "inteleon-gmax",
1915 | url: "https://pokeapi.co/api/v2/pokemon/10211/",
1916 | },
1917 | {
1918 | name: "corviknight-gmax",
1919 | url: "https://pokeapi.co/api/v2/pokemon/10212/",
1920 | },
1921 | {
1922 | name: "orbeetle-gmax",
1923 | url: "https://pokeapi.co/api/v2/pokemon/10213/",
1924 | },
1925 | {
1926 | name: "drednaw-gmax",
1927 | url: "https://pokeapi.co/api/v2/pokemon/10214/",
1928 | },
1929 | {
1930 | name: "coalossal-gmax",
1931 | url: "https://pokeapi.co/api/v2/pokemon/10215/",
1932 | },
1933 | {
1934 | name: "flapple-gmax",
1935 | url: "https://pokeapi.co/api/v2/pokemon/10216/",
1936 | },
1937 | {
1938 | name: "appletun-gmax",
1939 | url: "https://pokeapi.co/api/v2/pokemon/10217/",
1940 | },
1941 | {
1942 | name: "sandaconda-gmax",
1943 | url: "https://pokeapi.co/api/v2/pokemon/10218/",
1944 | },
1945 | {
1946 | name: "toxtricity-amped-gmax",
1947 | url: "https://pokeapi.co/api/v2/pokemon/10219/",
1948 | },
1949 | {
1950 | name: "centiskorch-gmax",
1951 | url: "https://pokeapi.co/api/v2/pokemon/10220/",
1952 | },
1953 | {
1954 | name: "hatterene-gmax",
1955 | url: "https://pokeapi.co/api/v2/pokemon/10221/",
1956 | },
1957 | {
1958 | name: "grimmsnarl-gmax",
1959 | url: "https://pokeapi.co/api/v2/pokemon/10222/",
1960 | },
1961 | {
1962 | name: "alcremie-gmax",
1963 | url: "https://pokeapi.co/api/v2/pokemon/10223/",
1964 | },
1965 | {
1966 | name: "copperajah-gmax",
1967 | url: "https://pokeapi.co/api/v2/pokemon/10224/",
1968 | },
1969 | {
1970 | name: "duraludon-gmax",
1971 | url: "https://pokeapi.co/api/v2/pokemon/10225/",
1972 | },
1973 | {
1974 | name: "urshifu-single-strike-gmax",
1975 | url: "https://pokeapi.co/api/v2/pokemon/10226/",
1976 | },
1977 | {
1978 | name: "urshifu-rapid-strike-gmax",
1979 | url: "https://pokeapi.co/api/v2/pokemon/10227/",
1980 | },
1981 | {
1982 | name: "toxtricity-low-key-gmax",
1983 | url: "https://pokeapi.co/api/v2/pokemon/10228/",
1984 | },
1985 | {
1986 | name: "growlithe-hisui",
1987 | url: "https://pokeapi.co/api/v2/pokemon/10229/",
1988 | },
1989 | {
1990 | name: "arcanine-hisui",
1991 | url: "https://pokeapi.co/api/v2/pokemon/10230/",
1992 | },
1993 | {
1994 | name: "voltorb-hisui",
1995 | url: "https://pokeapi.co/api/v2/pokemon/10231/",
1996 | },
1997 | {
1998 | name: "electrode-hisui",
1999 | url: "https://pokeapi.co/api/v2/pokemon/10232/",
2000 | },
2001 | {
2002 | name: "typhlosion-hisui",
2003 | url: "https://pokeapi.co/api/v2/pokemon/10233/",
2004 | },
2005 | {
2006 | name: "qwilfish-hisui",
2007 | url: "https://pokeapi.co/api/v2/pokemon/10234/",
2008 | },
2009 | {
2010 | name: "sneasel-hisui",
2011 | url: "https://pokeapi.co/api/v2/pokemon/10235/",
2012 | },
2013 | {
2014 | name: "samurott-hisui",
2015 | url: "https://pokeapi.co/api/v2/pokemon/10236/",
2016 | },
2017 | {
2018 | name: "lilligant-hisui",
2019 | url: "https://pokeapi.co/api/v2/pokemon/10237/",
2020 | },
2021 | {
2022 | name: "zorua-hisui",
2023 | url: "https://pokeapi.co/api/v2/pokemon/10238/",
2024 | },
2025 | {
2026 | name: "zoroark-hisui",
2027 | url: "https://pokeapi.co/api/v2/pokemon/10239/",
2028 | },
2029 | {
2030 | name: "braviary-hisui",
2031 | url: "https://pokeapi.co/api/v2/pokemon/10240/",
2032 | },
2033 | {
2034 | name: "sliggoo-hisui",
2035 | url: "https://pokeapi.co/api/v2/pokemon/10241/",
2036 | },
2037 | {
2038 | name: "goodra-hisui",
2039 | url: "https://pokeapi.co/api/v2/pokemon/10242/",
2040 | },
2041 | {
2042 | name: "avalugg-hisui",
2043 | url: "https://pokeapi.co/api/v2/pokemon/10243/",
2044 | },
2045 | {
2046 | name: "decidueye-hisui",
2047 | url: "https://pokeapi.co/api/v2/pokemon/10244/",
2048 | },
2049 | {
2050 | name: "dialga-origin",
2051 | url: "https://pokeapi.co/api/v2/pokemon/10245/",
2052 | },
2053 | {
2054 | name: "palkia-origin",
2055 | url: "https://pokeapi.co/api/v2/pokemon/10246/",
2056 | },
2057 | {
2058 | name: "basculin-white-striped",
2059 | url: "https://pokeapi.co/api/v2/pokemon/10247/",
2060 | },
2061 | {
2062 | name: "basculegion-female",
2063 | url: "https://pokeapi.co/api/v2/pokemon/10248/",
2064 | },
2065 | {
2066 | name: "enamorus-therian",
2067 | url: "https://pokeapi.co/api/v2/pokemon/10249/",
2068 | },
2069 | {
2070 | name: "tauros-paldea-combat-breed",
2071 | url: "https://pokeapi.co/api/v2/pokemon/10250/",
2072 | },
2073 | {
2074 | name: "tauros-paldea-blaze-breed",
2075 | url: "https://pokeapi.co/api/v2/pokemon/10251/",
2076 | },
2077 | {
2078 | name: "tauros-paldea-aqua-breed",
2079 | url: "https://pokeapi.co/api/v2/pokemon/10252/",
2080 | },
2081 | {
2082 | name: "wooper-paldea",
2083 | url: "https://pokeapi.co/api/v2/pokemon/10253/",
2084 | },
2085 | {
2086 | name: "oinkologne-female",
2087 | url: "https://pokeapi.co/api/v2/pokemon/10254/",
2088 | },
2089 | {
2090 | name: "dudunsparce-three-segment",
2091 | url: "https://pokeapi.co/api/v2/pokemon/10255/",
2092 | },
2093 | {
2094 | name: "palafin-hero",
2095 | url: "https://pokeapi.co/api/v2/pokemon/10256/",
2096 | },
2097 | {
2098 | name: "maushold-family-of-three",
2099 | url: "https://pokeapi.co/api/v2/pokemon/10257/",
2100 | },
2101 | {
2102 | name: "tatsugiri-droopy",
2103 | url: "https://pokeapi.co/api/v2/pokemon/10258/",
2104 | },
2105 | {
2106 | name: "tatsugiri-stretchy",
2107 | url: "https://pokeapi.co/api/v2/pokemon/10259/",
2108 | },
2109 | {
2110 | name: "squawkabilly-blue-plumage",
2111 | url: "https://pokeapi.co/api/v2/pokemon/10260/",
2112 | },
2113 | {
2114 | name: "squawkabilly-yellow-plumage",
2115 | url: "https://pokeapi.co/api/v2/pokemon/10261/",
2116 | },
2117 | {
2118 | name: "squawkabilly-white-plumage",
2119 | url: "https://pokeapi.co/api/v2/pokemon/10262/",
2120 | },
2121 | {
2122 | name: "gimmighoul-roaming",
2123 | url: "https://pokeapi.co/api/v2/pokemon/10263/",
2124 | },
2125 | {
2126 | name: "koraidon-limited-build",
2127 | url: "https://pokeapi.co/api/v2/pokemon/10264/",
2128 | },
2129 | {
2130 | name: "koraidon-sprinting-build",
2131 | url: "https://pokeapi.co/api/v2/pokemon/10265/",
2132 | },
2133 | {
2134 | name: "koraidon-swimming-build",
2135 | url: "https://pokeapi.co/api/v2/pokemon/10266/",
2136 | },
2137 | {
2138 | name: "koraidon-gliding-build",
2139 | url: "https://pokeapi.co/api/v2/pokemon/10267/",
2140 | },
2141 | {
2142 | name: "miraidon-low-power-mode",
2143 | url: "https://pokeapi.co/api/v2/pokemon/10268/",
2144 | },
2145 | {
2146 | name: "miraidon-drive-mode",
2147 | url: "https://pokeapi.co/api/v2/pokemon/10269/",
2148 | },
2149 | {
2150 | name: "miraidon-aquatic-mode",
2151 | url: "https://pokeapi.co/api/v2/pokemon/10270/",
2152 | },
2153 | {
2154 | name: "miraidon-glide-mode",
2155 | url: "https://pokeapi.co/api/v2/pokemon/10271/",
2156 | },
2157 | ],
2158 | };
2159 |
--------------------------------------------------------------------------------
/src/lib/gsap/index.ts:
--------------------------------------------------------------------------------
1 | import gsap from "gsap";
2 |
3 | interface AnimatedValueEffectOptions {
4 | value: number;
5 | }
6 |
7 | interface AnimatedCounterEffectOptions {
8 | duration: number;
9 | end: number;
10 | increment: number;
11 | ease: string;
12 | round: number;
13 | }
14 |
15 |
16 | export const animatedValueEffect = (targets: any, options: AnimatedValueEffectOptions) => {
17 | return gsap.fromTo(
18 | targets,
19 | { innerText: 0.00 },
20 | {
21 | duration: 0.2,
22 | innerText: (options.value * 0.1),
23 | ease: "none",
24 | }
25 | );
26 | };
27 |
28 |
29 | export function counterAnimation(targets: any, config: AnimatedCounterEffectOptions) {
30 | let tl = gsap.timeline()
31 | let num = targets[0].innerText.replace(/\,/g,'')
32 | targets[0].innerText = num
33 |
34 | tl.to(targets, {
35 | duration: config.duration,
36 | innerText: config.end,
37 | modifiers: {
38 | innerText: function(innerText) {
39 | return gsap.utils.snap(config.increment, innerText)
40 | .toFixed(config.round)
41 | .replace(/\B(?=(\d{3})+(?!\d))/g, ",");
42 | }
43 | },
44 | ease: config.ease
45 | }, 0)
46 |
47 | return tl;
48 | }
49 |
50 | gsap.registerEffect({
51 | name: "counterAnimation",
52 | extendTimeline: true,
53 | defaults: {
54 | end: 0,
55 | duration: 0.5,
56 | ease: "power1",
57 | increment: 1,
58 | round: 2,
59 | },
60 | effect: counterAnimation
61 | });
62 |
63 |
64 |
65 |
66 | gsap.registerEffect({
67 | name: "animatedValueEffect",
68 | effect: animatedValueEffect,
69 | extendTimeline: true
70 | });
71 |
72 |
73 | export {gsap}
--------------------------------------------------------------------------------
/src/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { ClassValue, clsx } from "clsx"
2 | import { twMerge } from "tailwind-merge"
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs))
6 | }
7 |
8 | export function capitalize(word : string){
9 | return word[0].toUpperCase()+word.slice(1)
10 | }
11 |
--------------------------------------------------------------------------------
/src/types.d.ts:
--------------------------------------------------------------------------------
1 | export interface PokemonType {
2 | slot: number;
3 | type: {
4 | name: TypeName;
5 | url: string;
6 | };
7 | }
8 |
9 | interface species {
10 | name: string;
11 | url: string;
12 | }
13 |
14 | export interface PokemonData {
15 | id: number;
16 | name: string;
17 | types: PokemonType[];
18 | stats: PokemonStats[];
19 | abilities: PokemonAbility[];
20 | weight: number;
21 | height: number;
22 | species: species;
23 | }
24 |
25 | interface Ability {
26 | name: string;
27 | url: string;
28 | }
29 |
30 | interface PokemonAbility {
31 | ability: Ability;
32 | is_hidden: boolean;
33 | slot: number;
34 | }
35 |
36 | interface egg_groups {
37 | name: string;
38 | url: string;
39 | }
40 |
41 | interface color {
42 | name: string;
43 | url: string;
44 | }
45 |
46 | interface language {
47 | name: string;
48 | url: string;
49 | }
50 |
51 | interface flavor_text_entries {
52 | flavor_text: string;
53 | language: language;
54 | // version: {
55 | // name: string;
56 | // url: string;
57 | // };
58 | }
59 |
60 | interface form_descriptions {
61 | description: string;
62 | // language: {
63 | // name: string;
64 | // url: string;
65 | // };
66 | }
67 |
68 | export interface SpeciesInfo {
69 | // id: number;
70 | // name: string;
71 | // order: number;
72 | gender_rate: number;
73 | capture_rate: number;
74 | // base_happiness: number;
75 | // is_baby: boolean;
76 | // is_legendary: boolean;
77 | // is_mythical: boolean;
78 | hatch_counter: number;
79 | // has_gender_differences: boolean;
80 | // forms_switchable: boolean;
81 | // growth_rate: {
82 | // name: string;
83 | // url: string;
84 | // };
85 | // pokedex_numbers: {
86 | // entry_number: number;
87 | // pokedex: {
88 | // name: string;
89 | // url: string;
90 | // };
91 | // }[];
92 | egg_groups: egg_groups[];
93 | color: color;
94 | // shape: {
95 | // name: string;
96 | // url: string;
97 | // };
98 | // evolves_from_species: {
99 | // name: string;
100 | // url: string;
101 | // } | null;
102 | // evolution_chain: {
103 | // url: string;
104 | // };
105 | // habitat: {
106 | // name: string;
107 | // url: string;
108 | // } | null;
109 | // generation: {
110 | // name: string;
111 | // url: string;
112 | // };
113 | // names: {
114 | // name: string;
115 | // language: {
116 | // name: string;
117 | // url: string;
118 | // };
119 | // }[];
120 | flavor_text_entries: flavor_text_entries[];
121 | form_descriptions: form_descriptions[];
122 | // genera: {
123 | // genus: string;
124 | // language: {
125 | // name: string;
126 | // url: string;
127 | // };
128 | // }[];
129 | // varieties: {
130 | // is_default: boolean;
131 | // pokemon: {
132 | // name: string;
133 | // url: string;
134 | // };
135 | // }[];
136 | }
137 |
138 | type StatName =
139 | | "hp"
140 | | "attack"
141 | | "defense"
142 | | "special-attack"
143 | | "special-defense"
144 | | "speed";
145 |
146 | type TypeName =
147 | | "normal"
148 | | "fire"
149 | | "water"
150 | | "grass"
151 | | "electric"
152 | | "ice"
153 | | "fighting"
154 | | "poison"
155 | | "ground";
156 | "flying" |
157 | "psychic" |
158 | "bug" |
159 | "rock" |
160 | "ghost" |
161 | "dark" |
162 | "dragon" |
163 | "steel" |
164 | "fairy";
165 |
166 | interface Stat {
167 | name: StatName;
168 | url: string;
169 | }
170 |
171 | interface PokemonStats {
172 | base_stat: number;
173 | effort: number;
174 | stat: Stat;
175 | }
176 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | darkMode: ["class"],
4 | content: [
5 | "./pages/**/*.{ts,tsx}",
6 | "./components/**/*.{ts,tsx}",
7 | "./app/**/*.{ts,tsx}",
8 |
9 | "./src/**/*.{js,ts,jsx,tsx,mdx}",
10 | ],
11 | theme: {
12 | container: {
13 | center: true,
14 | padding: "2rem",
15 | screens: {
16 | "2xl": "1400px",
17 | },
18 | },
19 | extend: {
20 | colors: {
21 | border: "hsl(var(--border))",
22 | input: "hsl(var(--input))",
23 | ring: "hsl(var(--ring))",
24 | background: "hsl(var(--background))",
25 | foreground: "hsl(var(--foreground))",
26 | primary: {
27 | DEFAULT: "hsl(var(--primary))",
28 | foreground: "hsl(var(--primary-foreground))",
29 | },
30 | secondary: {
31 | DEFAULT: "hsl(var(--secondary))",
32 | foreground: "hsl(var(--secondary-foreground))",
33 | },
34 | destructive: {
35 | DEFAULT: "hsl(var(--destructive))",
36 | foreground: "hsl(var(--destructive-foreground))",
37 | },
38 | muted: {
39 | DEFAULT: "hsl(var(--muted))",
40 | foreground: "hsl(var(--muted-foreground))",
41 | },
42 | accent: {
43 | DEFAULT: "hsl(var(--accent))",
44 | foreground: "hsl(var(--accent-foreground))",
45 | },
46 | popover: {
47 | DEFAULT: "hsl(var(--popover))",
48 | foreground: "hsl(var(--popover-foreground))",
49 | },
50 | card: {
51 | DEFAULT: "hsl(var(--card))",
52 | foreground: "hsl(var(--card-foreground))",
53 | },
54 | },
55 | borderRadius: {
56 | lg: "var(--radius)",
57 | md: "calc(var(--radius) - 2px)",
58 | sm: "calc(var(--radius) - 4px)",
59 | },
60 | keyframes: {
61 | "accordion-down": {
62 | from: { height: 0 },
63 | to: { height: "var(--radix-accordion-content-height)" },
64 | },
65 | "accordion-up": {
66 | from: { height: "var(--radix-accordion-content-height)" },
67 | to: { height: 0 },
68 | },
69 | },
70 | animation: {
71 | "accordion-down": "accordion-down 0.2s ease-out",
72 | "accordion-up": "accordion-up 0.2s ease-out",
73 | },
74 | },
75 | },
76 | plugins: [require("tailwindcss-animate")],
77 | };
78 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "forceConsistentCasingInFileNames": true,
9 | "noEmit": true,
10 | "esModuleInterop": true,
11 | "module": "esnext",
12 | "moduleResolution": "node",
13 | "resolveJsonModule": true,
14 | "isolatedModules": true,
15 | "jsx": "preserve",
16 | "incremental": true,
17 | "plugins": [
18 | {
19 | "name": "next"
20 | }
21 | ],
22 | "paths": {
23 | "@/*": ["./src/*"]
24 | }
25 | },
26 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
27 | "exclude": ["node_modules"]
28 | }
29 |
--------------------------------------------------------------------------------