diff --git a/api/characters.js b/api/characters.js
new file mode 100644
index 00000000..83882ed9
--- /dev/null
+++ b/api/characters.js
@@ -0,0 +1,37 @@
+import axios from "./index";
+
+export const fetchCharacters = async (page) => {
+ try {
+ const response = await axios.get(`/character/?page=${page}`);
+ return response?.data;
+ } catch (error) {
+ return {
+ error: true,
+ response: error?.message ?? "Something went wrong",
+ };
+ }
+};
+
+export const fetchFilteredCharacters = async (name) => {
+ try {
+ const response = await axios.get(`/character/?name=${name}`);
+ return response?.data;
+ } catch (error) {
+ return {
+ error: true,
+ response: error?.message ?? "Something went wrong",
+ };
+ }
+};
+
+export const fetchCharacterById = async (id) => {
+ try {
+ const response = await axios.get(`/character/${id}`);
+ return response?.data;
+ } catch (error) {
+ return {
+ error: true,
+ response: error?.message ?? "Something went wrong",
+ };
+ }
+}
diff --git a/api/episodes.js b/api/episodes.js
new file mode 100644
index 00000000..4cb284c8
--- /dev/null
+++ b/api/episodes.js
@@ -0,0 +1,37 @@
+import axios from "./index";
+
+export const fetchEpisodes = async (page) => {
+ try {
+ const response = await axios.get(`/episode/?page=${page}`);
+ return response?.data;
+ } catch (error) {
+ return {
+ error: true,
+ response: error?.message ?? "Something went wrong",
+ };
+ }
+};
+
+export const fetchFilteredEpisodes = async (name) => {
+ try {
+ const response = await axios.get(`/episode/?name=${name}`);
+ return response?.data;
+ } catch (error) {
+ return {
+ error: true,
+ response: error?.message ?? "Something went wrong",
+ };
+ }
+};
+
+export const fetchEpisodeById = async (id) => {
+ try {
+ const response = await axios.get(`/episode/${id}`);
+ return response?.data;
+ } catch (error) {
+ return {
+ error: true,
+ response: error?.message ?? "Something went wrong",
+ };
+ }
+};
diff --git a/api/index.js b/api/index.js
new file mode 100644
index 00000000..d61ec6fa
--- /dev/null
+++ b/api/index.js
@@ -0,0 +1,5 @@
+import axios from "axios";
+
+axios.defaults.baseURL = process.env.baseUrl;
+
+export default axios;
diff --git a/api/joke.js b/api/joke.js
new file mode 100644
index 00000000..0fdfa4c3
--- /dev/null
+++ b/api/joke.js
@@ -0,0 +1,16 @@
+import axios from "axios";
+
+export const fetchJoke = async () => {
+ try {
+ // fetching jokes and blocking nsfw, racist and sexist jokes
+ const response = await axios.get(
+ "https://v2.jokeapi.dev/joke/Any?blacklistFlags=nsfw,racist,sexist"
+ );
+ return response?.data;
+ } catch (error) {
+ return {
+ error: true,
+ response: error?.message ?? "Something went wrong",
+ };
+ }
+};
diff --git a/api/locations.js b/api/locations.js
new file mode 100644
index 00000000..d853ddd8
--- /dev/null
+++ b/api/locations.js
@@ -0,0 +1,37 @@
+import axios from "./index";
+
+export const fetchLocations = async (page) => {
+ try {
+ const response = await axios.get(`/location/?page=${page}`);
+ return response?.data;
+ } catch (error) {
+ return {
+ error: true,
+ response: error?.message ?? "Something went wrong",
+ };
+ }
+};
+
+export const fetchFilteredLocations = async (name) => {
+ try {
+ const response = await axios.get(`/location/?name=${name}`);
+ return response?.data;
+ } catch (error) {
+ return {
+ error: true,
+ response: error?.message ?? "Something went wrong",
+ };
+ }
+};
+
+export const fetchLocationById = async (id) => {
+ try {
+ const response = await axios.get(`/location/${id}`);
+ return response?.data;
+ } catch (error) {
+ return {
+ error: true,
+ response: error?.message ?? "Something went wrong",
+ };
+ }
+}
\ No newline at end of file
diff --git a/components/CustomButton/index.js b/components/CustomButton/index.js
new file mode 100644
index 00000000..25368291
--- /dev/null
+++ b/components/CustomButton/index.js
@@ -0,0 +1,12 @@
+import React from "react";
+import { Button } from "./styles";
+
+function CustomButton({ children, action, disabled, theme, size }) {
+ return (
+
+ );
+}
+
+export default CustomButton;
diff --git a/components/CustomButton/styles.js b/components/CustomButton/styles.js
new file mode 100644
index 00000000..ff8e3f42
--- /dev/null
+++ b/components/CustomButton/styles.js
@@ -0,0 +1,28 @@
+import styled from "styled-components";
+
+export const Button = styled.button`
+ padding: 1em 1.5em;
+ border: ${({ theme }) => (theme === "ghost" ? "1px solid #000000" : "none")};
+ border-radius: 8px;
+ font-size: ${({ size }) =>
+ size === "small" ? "0.7rem" : size === "big" ? "1.2rem" : "1rem"};
+ font-weight: 600;
+ cursor: pointer;
+ opacity: ${({ disabled }) => (disabled ? "0.5" : "1")};
+ pointer-events: ${({ disabled }) => (disabled ? "none" : "auto")};
+ background-color: ${({ theme }) =>
+ theme === "ghost"
+ ? "#fff"
+ : theme === "success"
+ ? "#00ff00"
+ : theme === "danger"
+ ? "#e97777"
+ : "#1e90ff"};
+ color: ${({ theme }) => (theme === "ghost" ? "#000000" : "#fff")};
+ transition: all 0.2s ease-in-out;
+
+ &:hover {
+ opacity: 0.8;
+ color: ${({ theme }) => (theme === "ghost" ? "#000000" : "#ffffff")};
+ }
+`;
diff --git a/components/CustomModal/index.js b/components/CustomModal/index.js
new file mode 100644
index 00000000..afe91d3e
--- /dev/null
+++ b/components/CustomModal/index.js
@@ -0,0 +1,16 @@
+import React from "react";
+import { ModalWrapper } from "./styles";
+
+function CustomModal({ children, isVisible }) {
+ return (
+ <>
+ {isVisible && (
+
+ {children}
+
+ )}
+ >
+ );
+}
+
+export default CustomModal;
diff --git a/components/CustomModal/styles.js b/components/CustomModal/styles.js
new file mode 100644
index 00000000..67ca59f3
--- /dev/null
+++ b/components/CustomModal/styles.js
@@ -0,0 +1,38 @@
+import styled, { keyframes } from "styled-components";
+
+const zoomIn = keyframes`
+ from {
+ transform: scale(0);
+ }
+ to {
+ transform: scale(1);
+ }
+`;
+
+export const ModalWrapper = styled.div`
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 100;
+
+ .modal {
+ width: 100%;
+ max-width: 500px;
+ background-color: #fff;
+ border-radius: 5px;
+ padding: 20px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ color: #000000;
+ animation: ${zoomIn} 0.3s ease-in-out;
+ }
+`;
diff --git a/components/Header/index.js b/components/Header/index.js
new file mode 100644
index 00000000..7ec90766
--- /dev/null
+++ b/components/Header/index.js
@@ -0,0 +1,36 @@
+import { useContext } from "react";
+import { HeaderWrapper, SwitchContainer, Slider, Input } from "./styles";
+import { MainWrapper } from "../Wrapper";
+import Image from "next/image";
+import logo from "../../images/logo.png";
+import { useRouter } from "next/router";
+
+const Header = () => {
+ const { darkMode, setDarkMode, isLogged } = useContext(MainWrapper);
+ const router = useRouter();
+
+ return (
+
+ router.push(!isLogged ? "/" : "/dashlist")}
+ >
+
+ Rick and Morty Data
+
+
+ Dark mode: {!darkMode ? "off" : "on"}
+
+ setDarkMode(!darkMode)}
+ />
+
+
+
+
+ );
+};
+
+export default Header;
diff --git a/components/Header/styles.js b/components/Header/styles.js
new file mode 100644
index 00000000..7860cfab
--- /dev/null
+++ b/components/Header/styles.js
@@ -0,0 +1,101 @@
+import styled from "styled-components";
+
+export const HeaderWrapper = styled.div`
+ height: 70px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 0.5em;
+ background: ${({ darkMode }) => (darkMode ? "#393E46" : "#ece8dd")};
+ border-bottom: 1px solid ${({ darkMode }) => (darkMode ? "#ece8dd" : "#8080802c")};
+
+ .title {
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+
+ img {
+ width: 70px;
+ height: 70px;
+
+ @media (max-width: 768px) {
+ width: 50px;
+ height: 50px;
+ }
+ }
+
+ span {
+ font-size: 1.2em;
+ font-weight: 600;
+
+ @media (max-width: 768px) {
+ font-size: 0.7em;
+ }
+ }
+ }
+
+ .darkmode-area {
+ display: flex;
+ align-items: center;
+ span {
+ margin-right: 1em;
+
+ @media (max-width: 768px) {
+ font-size: 0.7em;
+ }
+ }
+ }
+`;
+
+export const SwitchContainer = styled.label`
+ position: relative;
+ display: inline-block;
+ width: 65px;
+ height: 24px;
+`;
+
+export const Slider = styled.span`
+ position: absolute;
+ cursor: pointer;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: #ccc;
+ -webkit-transition: 0.4s;
+ transition: 0.4s;
+ border-radius: 34px;
+
+ &:before {
+ position: absolute;
+ content: "";
+ height: 16px;
+ width: 16px;
+ left: 4px;
+ bottom: 4px;
+ background-color: white;
+ -webkit-transition: 0.4s;
+ transition: 0.4s;
+ border-radius: 50%;
+ }
+`;
+
+export const Input = styled.input`
+ opacity: 0;
+ width: 0;
+ height: 0;
+
+ &:checked + ${Slider} {
+ background-color: #cdf0ea;
+ }
+
+ &:focus + ${Slider} {
+ box-shadow: 0 0 1px #cdf0ea;
+ }
+
+ &:checked + ${Slider}:before {
+ -webkit-transform: translateX(26px);
+ -ms-transform: translateX(26px);
+ transform: translateX(26px);
+ }
+`;
diff --git a/components/Login/Enter.js b/components/Login/Enter.js
new file mode 100644
index 00000000..3eb0e532
--- /dev/null
+++ b/components/Login/Enter.js
@@ -0,0 +1,60 @@
+import React, { useRef, useEffect, useState, useContext } from "react";
+import { FormsWrapper } from "./styles";
+import { useRouter } from "next/router";
+import { FadeTransition } from "../../styles/globalStyled";
+import { MainWrapper } from "../Wrapper";
+import useCustomSnackbar from "../../helpers/useCustomSnackbar";
+import CustomButton from "../CustomButton";
+
+function Enter({ onLoginState }) {
+ const loginRef = useRef();
+ const passwordRef = useRef();
+ const router = useRouter();
+ const [localUserData, setLocalUserData] = useState({});
+ const { setIsLogged } = useContext(MainWrapper);
+ const { openCustomSnackbar } = useCustomSnackbar();
+
+ useEffect(() => {
+ const localUser = JSON.parse(localStorage.getItem("userData"));
+ if (localUser) {
+ setLocalUserData(localUser);
+ }
+ }, []);
+
+ const loginUser = () => {
+ const { value: login } = loginRef.current;
+ const { value: password } = passwordRef.current;
+
+ if (!login || !password) {
+ openCustomSnackbar("Please fill all the forms!");
+ return;
+ }
+
+ if (login !== localUserData.login || password !== localUserData.password) {
+ openCustomSnackbar("Wrong login or password!");
+ return;
+ }
+
+ setIsLogged(true);
+ openCustomSnackbar("User logged in!");
+ router.push("/dashlist");
+ };
+
+ return (
+
+
+ Log on your account
+
+
+
+ Enter
+ onLoginState("start")}>
+ Return
+
+
+
+
+ );
+}
+
+export default Enter;
diff --git a/components/Login/Register.js b/components/Login/Register.js
new file mode 100644
index 00000000..adf6e5e2
--- /dev/null
+++ b/components/Login/Register.js
@@ -0,0 +1,59 @@
+import React, { useRef } from "react";
+import { FormsWrapper } from "./styles";
+import { FadeTransition } from "../../styles/globalStyled";
+import useCustomSnackbar from "../../helpers/useCustomSnackbar";
+import CustomButton from "../CustomButton";
+
+function Register({ onLoginState }) {
+ const loginRef = useRef();
+ const passwordRef = useRef();
+ const repeatPasswordRef = useRef();
+ const { openCustomSnackbar } = useCustomSnackbar();
+
+ const registerUser = () => {
+ const { value: login } = loginRef.current;
+ const { value: password } = passwordRef.current;
+ const { value: repeatPassword } = repeatPasswordRef.current;
+
+ if (!login || !password || !repeatPassword) {
+ openCustomSnackbar("Please fill all the forms!");
+ return;
+ }
+
+ if (password !== repeatPassword) {
+ openCustomSnackbar("Passwords are not the same!");
+ return;
+ }
+
+ const userData = {
+ login,
+ password,
+ };
+ localStorage.setItem("userData", JSON.stringify(userData));
+ openCustomSnackbar("User successfully registered!");
+ onLoginState("start");
+ };
+
+ return (
+
+
+ Fill all the forms to register
+
+
+
+
+ Register
+ onLoginState("start")}>
+ Return
+
+
+
+
+ );
+}
+
+export default Register;
diff --git a/components/Login/index.js b/components/Login/index.js
new file mode 100644
index 00000000..fbb7abcb
--- /dev/null
+++ b/components/Login/index.js
@@ -0,0 +1,47 @@
+import React, { useState } from "react";
+import { LoginWrapper } from "./styles";
+import Enter from "./Enter";
+import Register from "./Register";
+import { FadeTransition } from "../../styles/globalStyled";
+import CustomButton from "../CustomButton";
+
+function Login() {
+ const [loginView, setLoginView] = useState("start");
+
+ const onData = (data) => {
+ setLoginView(data);
+ };
+
+ return (
+
+
+ {loginView === "start" ? (
+
+ Rick and Morty Data App
+ Search for your favourite character data
+
+ setLoginView("login")}
+ >
+ Login
+
+ setLoginView("register")}
+ theme="ghost"
+ >
+ Register
+
+
+
+ ) : loginView === "register" ? (
+
+ ) : (
+
+ )}
+
+
+
+ );
+}
+
+export default Login;
diff --git a/components/Login/styles.js b/components/Login/styles.js
new file mode 100644
index 00000000..65dade2c
--- /dev/null
+++ b/components/Login/styles.js
@@ -0,0 +1,77 @@
+import styled from "styled-components";
+
+export const LoginWrapper = styled.div`
+ display: flex;
+ justify-content: center;
+ height: 92.9vh;
+ width: 100%;
+
+ div {
+ margin-bottom: 5em;
+ }
+
+ .login-area {
+ height: 100%;
+ width: 65%;
+ padding: 1.3em;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+
+ @media (max-width: 559px) {
+ text-align: center;
+ }
+
+ .login-choice-btn {
+ display: flex;
+ justify-content: center;
+ margin-top: 1.5em;
+ gap: 1em;
+ }
+ }
+
+ .video-area {
+ height: 100%;
+ width: 100%;
+ padding: 1.3em;
+ background: url("https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/8929ac19-120e-4d6a-8b86-c23fbd654d92/das2gen-d2698547-a948-47e1-9a24-98247a9631e1.gif?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7InBhdGgiOiJcL2ZcLzg5MjlhYzE5LTEyMGUtNGQ2YS04Yjg2LWMyM2ZiZDY1NGQ5MlwvZGFzMmdlbi1kMjY5ODU0Ny1hOTQ4LTQ3ZTEtOWEyNC05ODI0N2E5NjMxZTEuZ2lmIn1dXSwiYXVkIjpbInVybjpzZXJ2aWNlOmZpbGUuZG93bmxvYWQiXX0.NPIOSM6ZjLXSMJAQha-Q4Jz3bu6i6EowqYc-gSYvG0s");
+ background-size: cover;
+
+ @media (max-width: 559px) {
+ display: none;
+ }
+ }
+`;
+
+export const FormsWrapper = styled.div`
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin-top: 3em;
+
+ div {
+ display: flex;
+ flex-direction: column;
+ margin-top: 2em;
+
+ input {
+ margin: 0.3em 0;
+ padding: 1em;
+ border-radius: 5px;
+ border: 1px solid #1e90ff;
+ font-size: 1rem;
+ font-weight: 600;
+ color: #1e90ff;
+
+ &:focus {
+ outline: none;
+ }
+ }
+
+ button {
+ margin-top: 1em;
+ }
+ }
+`;
diff --git a/components/MainMenu/CharList/CharDetail/index.js b/components/MainMenu/CharList/CharDetail/index.js
new file mode 100644
index 00000000..b650a718
--- /dev/null
+++ b/components/MainMenu/CharList/CharDetail/index.js
@@ -0,0 +1,117 @@
+/* eslint-disable @next/next/no-img-element */
+import React, { useEffect, useState, useContext } from "react";
+import { fetchCharacterById } from "../../../../api/characters";
+import { DetailWrapper } from "./styles";
+import { FadeTransition } from "../../../../styles/globalStyled";
+import { MainWrapper } from "../../../Wrapper";
+import { getContentFromEndpoints } from "../../../../helpers";
+import { formatDate } from "../../../../helpers";
+
+function CharDetail({ onDetailsReturn }) {
+ const [character, setCharacter] = useState({});
+ const [isError, setIsError] = useState(false);
+ const [isLoading, setIsLoading] = useState(false);
+ const [errorMessage, setErrorMessage] = useState("");
+ const [episodes, setEpisodes] = useState([]);
+ const { characterId, setEpisodeId, setCurrentNavigation } =
+ useContext(MainWrapper);
+
+ const goToEpisodeDetail = (id) => {
+ setEpisodeId(id);
+ setCurrentNavigation("episodes");
+ onDetailsReturn(false);
+ };
+
+ useEffect(() => {
+ const fetchDataById = async () => {
+ setIsLoading(true);
+ const data = await fetchCharacterById(characterId);
+ if (data.error) {
+ setIsError(true);
+ setIsLoading(false);
+ setErrorMessage(
+ `Looks like the server is down, please try again later. (${data.response})`
+ );
+ return;
+ }
+ setCharacter(data);
+ const episodes = data.episode;
+ const episodesUrl = await getContentFromEndpoints(
+ episodes,
+ "episode"
+ );
+ setEpisodes(episodesUrl);
+ setIsLoading(false);
+ };
+ fetchDataById();
+ }, [characterId]);
+
+ return (
+
+
+
+
+ {isError ? (
+
+
{errorMessage}
+
+ ) : (
+ <>
+ {isLoading ? (
+
+
Loading...
+
+ ) : (
+
+
+
{character.name}
+

+
+
+ Status: {character?.status ?? ""}
+
+
+ Species: {character?.species ?? ""}
+
+
+ Type: {character?.type ?? ""}
+
+
+ Gender: {character?.gender ?? ""}
+
+
+ Created: {formatDate(character?.created) ?? ""}
+
+
+ Origin: {character?.origin?.name ?? ""}
+
+
+ Location: {character?.location?.name ?? ""}
+
+
+
+
Featured in the following episodes
+
+ {episodes &&
+ episodes.map((episode, i) => (
+
+ ))}
+
+
+
+
+ )}
+ >
+ )}
+
+ );
+}
+
+export default CharDetail;
diff --git a/components/MainMenu/CharList/CharDetail/styles.js b/components/MainMenu/CharList/CharDetail/styles.js
new file mode 100644
index 00000000..b58d2552
--- /dev/null
+++ b/components/MainMenu/CharList/CharDetail/styles.js
@@ -0,0 +1,106 @@
+import styled from "styled-components";
+
+export const DetailWrapper = styled.div`
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+
+ .return-btn {
+ display: flex;
+ justify-content: flex-start;
+ width: 100%;
+
+ button {
+ background-color: #f5f5f5;
+ border: none;
+ border-radius: 0.5em;
+ padding: 0.5em;
+ font-size: 1rem;
+ font-weight: bold;
+ color: #000;
+
+ &:hover {
+ cursor: pointer;
+ background: #000;
+ color: #fff;
+ }
+ }
+ }
+
+ .before-content {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 90%;
+ font-size: 2rem;
+ }
+
+ .character-card {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin-top: 1em;
+
+ h1 {
+ font-size: 2rem;
+ margin-bottom: 0.5em;
+ }
+
+ img {
+ border-radius: 50%;
+ }
+
+ .character-description {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin-top: 1em;
+ gap: 0.7em;
+
+ p {
+ span {
+ font-weight: bold;
+ }
+ }
+ }
+
+ .episodes {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin-top: 2em;
+
+ .episodes-number-box {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 0.8em;
+ margin-top: 1em;
+ width: 50%;
+
+ button {
+ background-color: #f5f5f5;
+ border: none;
+ border-radius: 0.5em;
+ padding: 0.5em;
+ font-size: 1rem;
+ font-weight: bold;
+ color: #000;
+ cursor: pointer;
+ transition: all 0.2s ease-in-out;
+
+ &:hover {
+ scale: 1.2;
+ }
+ }
+ }
+ }
+ }
+`;
diff --git a/components/MainMenu/CharList/index.js b/components/MainMenu/CharList/index.js
new file mode 100644
index 00000000..56b023e8
--- /dev/null
+++ b/components/MainMenu/CharList/index.js
@@ -0,0 +1,217 @@
+/* eslint-disable @next/next/no-img-element */
+import React, { useEffect, useState, useRef, useCallback } from "react";
+import {
+ fetchCharacters,
+ fetchFilteredCharacters,
+} from "../../../api/characters";
+import { useContext } from "react";
+import {
+ CharListWrapper,
+ Table,
+ TableHead,
+ TableRow,
+ TableHeading,
+ TableData,
+} from "./styles";
+import { MainWrapper } from "../../Wrapper";
+import CharDetail from "./CharDetail";
+import useCustomSnackbar from "../../../helpers/useCustomSnackbar";
+import { pagination } from "../../../helpers";
+import CustomButton from "../../CustomButton";
+import { FadeTransition } from "../../../styles/globalStyled";
+
+function CharList() {
+ const [page, setPage] = useState(1);
+ const [characters, setCharacters] = useState([]);
+ const [isFiltering, setIsFiltering] = useState(false);
+ const filtertRef = useRef();
+ const { openCustomSnackbar } = useCustomSnackbar();
+ const [isError, setIsError] = useState(false);
+ const [isCharSelected, setIsCharSelected] = useState(false);
+ const [errorMessage, setErrorMessage] = useState(
+ "Could not find your character, please try again or reload"
+ );
+ const { currentNavigation, setCharacterId } = useContext(MainWrapper);
+
+ const fetchCharData = useCallback(async () => {
+ const response = await fetchCharacters(page);
+
+ if (response.error) {
+ setIsError(true);
+ console.log(response?.error);
+ return;
+ }
+ if (!response?.results) {
+ setIsError(true);
+ return;
+ }
+
+ setCharacters(response?.results);
+ }, [page]);
+
+ const handlePagination = (target) => {
+ const pageUpdate = pagination(target, page);
+ setPage(pageUpdate);
+ };
+
+ const filterCharacters = async () => {
+ setIsError(false);
+ const filterData = filtertRef.current.value;
+ if (!filterData) {
+ openCustomSnackbar("Fill the search form to filter");
+ return;
+ }
+ const response = await fetchFilteredCharacters(filterData);
+ if (response.error) {
+ setIsError(true);
+ setErrorMessage(
+ "Could not find your character, please try again or reload"
+ );
+ console.log(response?.error);
+ return;
+ }
+ if (!response?.results) {
+ setIsError(true);
+ return;
+ }
+ setCharacters(response?.results);
+ setIsFiltering(true);
+ };
+
+ const clearFilters = () => {
+ filtertRef.current.value = "";
+ setIsFiltering(false);
+ setIsError(false);
+ fetchCharData();
+ };
+
+ const selectChar = (id) => {
+ setIsCharSelected(true);
+ setCharacterId(id);
+ };
+
+ const returnToCharList = (data) => {
+ setIsCharSelected(data);
+ setCharacterId(0);
+ };
+
+ useEffect(() => {
+ fetchCharData();
+ }, [fetchCharData, page]);
+
+ useEffect(() => {
+ const detectNavigation = () => {
+ if (currentNavigation === "characters") {
+ setIsCharSelected(true);
+ }
+ };
+ detectNavigation();
+ }, [currentNavigation]);
+
+ return (
+ <>
+ {isCharSelected ? (
+
+
+
+ ) : (
+
+
+
+
+ Search for your favourite character!
+
+
+
+
+ Search
+
+ {isFiltering && (
+
+ Clear filters
+
+ )}
+
+
+
+ {isError ? (
+
+
{errorMessage}
+ Reload
+
+ ) : (
+
+
+
+
+ Photo
+ Name
+ Species
+ Status
+ Gender
+
+
+
+ {characters.map((char) => (
+
+
+
+

+
+
+
+ {char.name}
+
+ {char.species}
+ {char.status}
+ {char.gender}
+
+
+
+
+ ))}
+
+
+ {!isFiltering && !isError && (
+
+ handlePagination("prev")}
+ className="prev"
+ >
+ Prev
+
+ handlePagination("next")}
+ className="next"
+ >
+ Next
+
+
+ )}
+
+ )}
+
+
+
+ )}
+ >
+ );
+}
+
+export default CharList;
diff --git a/components/MainMenu/CharList/styles.js b/components/MainMenu/CharList/styles.js
new file mode 100644
index 00000000..7c082aa9
--- /dev/null
+++ b/components/MainMenu/CharList/styles.js
@@ -0,0 +1,183 @@
+import styled, { keyframes } from "styled-components";
+
+const fade = keyframes`
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+`;
+
+export const CharListWrapper = styled.div`
+ width: 100%;
+ height: 100%;
+
+ .title-search {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+
+ input {
+ margin-top: 0.4em;
+ padding: 0.3em;
+ border-radius: 5px;
+ border: 1px solid #1e90ff;
+ font-size: 1rem;
+ font-weight: 600;
+ color: #1e90ff;
+
+ &:focus {
+ outline: none;
+ }
+ }
+
+ .search-btns {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 1em;
+ margin-top: 0.4em;
+
+ button {
+ margin-top: 1em;
+ }
+ }
+ }
+
+ .main-box {
+ width: 100%;
+ height: 90%;
+ padding: 0 2em;
+
+ .error-box {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ margin-top: 3em;
+
+ button {
+ margin-top: 1em;
+ }
+ }
+ }
+
+ .table {
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+
+ .table-btns {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 1em;
+ margin: 2em 0;
+ }
+ }
+`;
+
+export const Table = styled.table`
+ width: 70%;
+ border-collapse: collapse;
+ font-family: Arial, sans-serif;
+ margin-top: 3em;
+
+ @media (max-width: 1020px) {
+ width: 95%;
+ }
+`;
+
+export const TableHead = styled.thead`
+ @media (max-width: 600px) {
+ font-size: 0.6rem;
+ }
+`;
+
+export const TableRow = styled.tr`
+ &:nth-child(even) {
+ }
+`;
+
+export const TableHeading = styled.th`
+ padding: 12px;
+ border: 1px solid #ddd;
+ text-align: left;
+ font-weight: bold;
+`;
+
+export const TableData = styled.td`
+ padding: 0.8em;
+ border: 1px solid #ddd;
+ text-align: left;
+ font-size: 1.2rem;
+ width: 160px;
+
+ @media (max-width: 1020px) {
+ padding: 0.2em;
+ font-size: 0.7rem;
+ text-align: center;
+ height: 70px;
+ }
+
+ @media (max-width: 600px) {
+ padding: 0em;
+ font-size: 0.6rem;
+ text-align: center;
+ }
+
+ .picture {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ img {
+ width: 100%;
+ height: 100%;
+ animation: ${fade} 0.5s ease-in-out;
+
+ @media (max-width: 1020px) {
+ width: 50px;
+ height: 50px;
+ }
+
+ @media (max-width: 600px) {
+ width: 35px;
+ height: 35px;
+ }
+ }
+ }
+ button {
+ background: #1e90ff;
+ border: 1px solid #fff;
+ padding: 1em;
+ border-radius: 5px;
+ color: #ffffff;
+ font-weight: 600;
+ font-size: 1rem;
+ cursor: pointer;
+ width: 100%;
+
+ @media (max-width: 1020px) {
+ width: 100%;
+ height: 100%;
+ font-size: 0.8rem;
+ padding: 0;
+ border: none;
+ border-radius: 0;
+ }
+
+ @media (max-width: 600px) {
+ font-size: 0.6rem;
+ }
+
+ &:hover {
+ background: #fff;
+ color: #1e90ff;
+ }
+ }
+`;
diff --git a/components/MainMenu/EpisodeList/EpisodeDetail/index.js b/components/MainMenu/EpisodeList/EpisodeDetail/index.js
new file mode 100644
index 00000000..2388f85b
--- /dev/null
+++ b/components/MainMenu/EpisodeList/EpisodeDetail/index.js
@@ -0,0 +1,120 @@
+/* eslint-disable @next/next/no-img-element */
+import React, { useEffect, useState } from "react";
+import { useContext } from "react";
+import { fetchEpisodeById } from "../../../../api/episodes";
+import { DetailWrapper } from "./styles";
+import { FadeTransition } from "../../../../styles/globalStyled";
+import { MainWrapper } from "../../../Wrapper";
+import { getContentFromEndpoints } from "../../../../helpers";
+import { formatDate } from "../../../../helpers";
+
+function EpisodeDetail({ onDetailsReturn }) {
+ const [character, setCharacter] = useState({});
+ const [isError, setIsError] = useState(false);
+ const [isLoading, setIsLoading] = useState(false);
+ const [errorMessage, setErrorMessage] = useState("");
+ const [charactersPictures, setCharactersPictures] = useState([]);
+ const { setCurrentNavigation, episodeId, setCharacterId } =
+ useContext(MainWrapper);
+
+ const goToCharDetail = (id) => {
+ setCharacterId(id);
+ setCurrentNavigation("characters");
+ onDetailsReturn(false);
+ };
+
+ useEffect(() => {
+ const fetchDataById = async () => {
+ setIsLoading(true);
+ const data = await fetchEpisodeById(episodeId);
+ if (data.error) {
+ setIsError(true);
+ setIsLoading(false);
+ setErrorMessage(
+ `Looks like the server is down, please try again later. (${data.response})`
+ );
+ return;
+ }
+ setCharacter(data);
+ setIsLoading(false);
+
+ const characterUrls = data?.characters;
+ const characterPics = await getContentFromEndpoints(
+ characterUrls,
+ "image"
+ );
+ setCharactersPictures(characterPics);
+ };
+ fetchDataById();
+ }, [episodeId]);
+
+ return (
+
+
+
+
+ {isError ? (
+
+
{errorMessage}
+
+ ) : (
+ <>
+ {isLoading ? (
+
+
Loading...
+
+ ) : (
+
+
+
{character.name}
+
+
+ Air Date: {character?.air_date ?? ""}
+
+
+ Episode: {character?.episode ?? ""}
+
+
+ Created: {formatDate(character?.created) ?? ""}
+
+
+
+
Characters in this episode
+
+ {charactersPictures &&
+ charactersPictures.map((character, i) => (
+
+

{
+ goToCharDetail(character?.id);
+ }}
+ />
+
+ ))}
+ {charactersPictures.length === 0 && (
+
+ There are no registered charactersPictures in this
+ location.
+
+ )}
+
+
+
+
+ )}
+ >
+ )}
+
+ );
+}
+
+export default EpisodeDetail;
diff --git a/components/MainMenu/EpisodeList/EpisodeDetail/styles.js b/components/MainMenu/EpisodeList/EpisodeDetail/styles.js
new file mode 100644
index 00000000..1af1d0f2
--- /dev/null
+++ b/components/MainMenu/EpisodeList/EpisodeDetail/styles.js
@@ -0,0 +1,102 @@
+import styled from "styled-components";
+
+export const DetailWrapper = styled.div`
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+
+ .return-btn {
+ display: flex;
+ justify-content: flex-start;
+ width: 100%;
+
+ button {
+ background-color: #f5f5f5;
+ border: none;
+ border-radius: 0.5em;
+ padding: 0.5em;
+ font-size: 1rem;
+ font-weight: bold;
+ color: #000;
+
+ &:hover {
+ cursor: pointer;
+ background: #000;
+ color: #fff;
+ }
+ }
+ }
+
+ .before-content {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 90%;
+ font-size: 2rem;
+ }
+
+ .character-card {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin-top: 1em;
+
+ h1 {
+ font-size: 2rem;
+ margin-bottom: 0.5em;
+ }
+
+ .character-description {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin-top: 1em;
+ gap: 0.7em;
+
+ p {
+ span {
+ font-weight: bold;
+ }
+ }
+ }
+
+ .episodes {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin-top: 2em;
+
+ .characters-list-box {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 0.8em;
+ margin-top: 2em;
+ width: 50%;
+
+ img {
+ border-radius: 50%;
+ width: 100px;
+ transition: 0.3s;
+ cursor: pointer;
+
+ &:hover {
+ scale: 1.3;
+ }
+ }
+
+ p {
+ font-size: 1.5rem;
+ text-align: center;
+ }
+ }
+ }
+ }
+`;
diff --git a/components/MainMenu/EpisodeList/index.js b/components/MainMenu/EpisodeList/index.js
new file mode 100644
index 00000000..bee7a451
--- /dev/null
+++ b/components/MainMenu/EpisodeList/index.js
@@ -0,0 +1,206 @@
+/* eslint-disable @next/next/no-img-element */
+import React, {
+ useEffect,
+ useState,
+ useRef,
+ useCallback,
+ useContext,
+} from "react";
+import { fetchEpisodes, fetchFilteredEpisodes } from "../../../api/episodes";
+import {
+ EpisodeListWrapper,
+ Table,
+ TableHead,
+ TableRow,
+ TableHeading,
+ TableData,
+} from "./styles";
+import LocationDetail from "./EpisodeDetail";
+import { MainWrapper } from "../../Wrapper";
+import useCustomSnackbar from "../../../helpers/useCustomSnackbar";
+import { pagination } from "../../../helpers";
+import CustomButton from "../../CustomButton";
+import { FadeTransition } from "../../../styles/globalStyled";
+
+function EpisodeList() {
+ const [page, setPage] = useState(1);
+ const [characters, setCharacters] = useState([]);
+ const [isFiltering, setIsFiltering] = useState(false);
+ const filtertRef = useRef();
+ const { openCustomSnackbar } = useCustomSnackbar();
+ const [isError, setIsError] = useState(false);
+ const [isCharSelected, setIsCharSelected] = useState(false);
+ const [errorMessage, setErrorMessage] = useState(
+ "Could not load episodes, please try again or reload"
+ );
+ const { currentNavigation, setEpisodeId } = useContext(MainWrapper);
+
+ const fetchCharData = useCallback(async () => {
+ const response = await fetchEpisodes(page);
+
+ if (response.error) {
+ setIsError(true);
+ console.log(response?.error);
+ return;
+ }
+ if (!response?.results) {
+ setIsError(true);
+ return;
+ }
+
+ setCharacters(response?.results);
+ }, [page]);
+
+ const handlePagination = (target) => {
+ const pageUpdate = pagination(target, page);
+ setPage(pageUpdate);
+ };
+
+ const filterCharacters = async () => {
+ setIsError(false);
+ const filterData = filtertRef.current.value;
+ if (!filterData) {
+ openCustomSnackbar("Fill the search form to filter");
+ return;
+ }
+ const response = await fetchFilteredEpisodes(filterData);
+ if (response.error) {
+ setIsError(true);
+ setErrorMessage(
+ "Could not find your episode, please try again or reload"
+ );
+ console.log(response.error);
+ return;
+ }
+ if (!response?.results) {
+ setIsError(true);
+ return;
+ }
+ setCharacters(response?.results);
+ setIsFiltering(true);
+ };
+
+ const clearFilters = () => {
+ filtertRef.current.value = "";
+ setIsFiltering(false);
+ setIsError(false);
+ fetchCharData();
+ };
+
+ const selectChar = (id) => {
+ setIsCharSelected(true);
+ setEpisodeId(id);
+ };
+
+ const returnToEpisodeList = (data) => {
+ setIsCharSelected(data);
+ setEpisodeId(0);
+ };
+
+ useEffect(() => {
+ fetchCharData();
+ }, [fetchCharData, page]);
+
+ useEffect(() => {
+ const detectNavigation = () => {
+ if (currentNavigation === "episodes") {
+ setIsCharSelected(true);
+ }
+ };
+ detectNavigation();
+ }, [currentNavigation]);
+
+ return (
+ <>
+ {isCharSelected ? (
+
+
+
+ ) : (
+
+
+
+
+ Search for your favourite episode!
+
+
+
+
+ Search
+
+ {isFiltering && (
+
+ Clear filters
+
+ )}
+
+
+
+ {isError ? (
+
+
{errorMessage}
+ Reload
+
+ ) : (
+
+
+
+
+ Name
+ Air date
+ Episode
+
+
+
+ {characters.map((char) => (
+
+
+ {char.name}
+
+ {char.air_date}
+ {char.episode}
+
+
+
+
+ ))}
+
+
+ {!isFiltering && !isError && (
+
+ handlePagination("prev")}
+ className="prev"
+ >
+ Prev
+
+ handlePagination("next")}
+ className="next"
+ >
+ Next
+
+
+ )}
+
+ )}
+
+
+
+ )}
+ >
+ );
+}
+
+export default EpisodeList;
diff --git a/components/MainMenu/EpisodeList/styles.js b/components/MainMenu/EpisodeList/styles.js
new file mode 100644
index 00000000..4adc0b97
--- /dev/null
+++ b/components/MainMenu/EpisodeList/styles.js
@@ -0,0 +1,179 @@
+import styled, { keyframes } from "styled-components";
+
+const fade = keyframes`
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+`;
+
+export const EpisodeListWrapper = styled.div`
+ width: 100%;
+ height: 100%;
+
+ .title-search {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+
+ input {
+ margin-top: 0.4em;
+ padding: 0.3em;
+ border-radius: 5px;
+ border: 1px solid #1e90ff;
+ font-size: 1rem;
+ font-weight: 600;
+ color: #1e90ff;
+
+ &:focus {
+ outline: none;
+ }
+ }
+
+ .search-btns {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 1em;
+ margin-top: 0.4em;
+ }
+ }
+
+ .main-box {
+ width: 100%;
+ height: 90%;
+ padding: 0 2em;
+
+ .error-box {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ margin-top: 3em;
+
+ button {
+ margin-top: 1em;
+ }
+ }
+ }
+
+ .table {
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+
+ .table-btns {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 1em;
+ margin: 2em 0;
+ }
+ }
+`;
+
+export const Table = styled.table`
+ width: 70%;
+ border-collapse: collapse;
+ font-family: Arial, sans-serif;
+ margin-top: 3em;
+
+ @media (max-width: 1020px) {
+ width: 95%;
+ }
+`;
+
+export const TableHead = styled.thead`
+ @media (max-width: 600px) {
+ font-size: 0.6rem;
+ }
+`;
+
+export const TableRow = styled.tr`
+ &:nth-child(even) {
+ }
+`;
+
+export const TableHeading = styled.th`
+ padding: 12px;
+ border: 1px solid #ddd;
+ text-align: left;
+ font-weight: bold;
+`;
+
+export const TableData = styled.td`
+ padding: 0.8em;
+ border: 1px solid #ddd;
+ text-align: left;
+ font-size: 1.2rem;
+ width: 160px;
+
+ @media (max-width: 1020px) {
+ padding: 0.2em;
+ font-size: 0.7rem;
+ text-align: center;
+ height: 70px;
+ }
+
+ @media (max-width: 600px) {
+ padding: 0em;
+ font-size: 0.6rem;
+ text-align: center;
+ }
+
+ .picture {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ img {
+ width: 100%;
+ height: 100%;
+ animation: ${fade} 0.5s ease-in-out;
+
+ @media (max-width: 1020px) {
+ width: 50px;
+ height: 50px;
+ }
+
+ @media (max-width: 600px) {
+ width: 35px;
+ height: 35px;
+ }
+ }
+ }
+ button {
+ background: #1e90ff;
+ border: 1px solid #fff;
+ padding: 1em;
+ border-radius: 5px;
+ color: #ffffff;
+ font-weight: 600;
+ font-size: 1rem;
+ cursor: pointer;
+ width: 100%;
+
+ @media (max-width: 1020px) {
+ width: 100%;
+ height: 100%;
+ font-size: 0.8rem;
+ padding: 0;
+ border: none;
+ border-radius: 0;
+ }
+
+ @media (max-width: 600px) {
+ font-size: 0.6rem;
+ }
+
+ &:hover {
+ background: #fff;
+ color: #1e90ff;
+ }
+ }
+`;
diff --git a/components/MainMenu/LocationList/LocationDetail/index.js b/components/MainMenu/LocationList/LocationDetail/index.js
new file mode 100644
index 00000000..ae5c229a
--- /dev/null
+++ b/components/MainMenu/LocationList/LocationDetail/index.js
@@ -0,0 +1,116 @@
+/* eslint-disable @next/next/no-img-element */
+import React, { useEffect, useState } from "react";
+import { useContext } from "react";
+import { fetchLocationById } from "../../../../api/locations";
+import { DetailWrapper } from "./styles";
+import { FadeTransition } from "../../../../styles/globalStyled";
+import { MainWrapper } from "../../../Wrapper";
+import { getContentFromEndpoints } from "../../../../helpers";
+import { formatDate } from "../../../../helpers";
+
+function LocationDetail({ onDetailsReturn }) {
+ const [character, setCharacter] = useState({});
+ const [isError, setIsError] = useState(false);
+ const [isLoading, setIsLoading] = useState(false);
+ const [errorMessage, setErrorMessage] = useState("");
+ const [residents, setResidents] = useState([]);
+ const { locationId, setCharacterId, setCurrentNavigation } =
+ useContext(MainWrapper);
+
+ const goToCharDetail = (id) => {
+ onDetailsReturn(false);
+ setCurrentNavigation("characters");
+ setCharacterId(id);
+ };
+
+ useEffect(() => {
+ const fetchDataById = async () => {
+ setIsLoading(true);
+ const data = await fetchLocationById(locationId);
+ if (data.error) {
+ setIsError(true);
+ setIsLoading(false);
+ setErrorMessage(
+ `Looks like the server is down, please try again later. (${data.response})`
+ );
+ return;
+ }
+ setCharacter(data);
+
+ const residentsUrl = data?.residents;
+ const residentsData = await getContentFromEndpoints(
+ residentsUrl,
+ "image"
+ );
+ setResidents(residentsData);
+ setIsLoading(false);
+ };
+ fetchDataById();
+ }, [locationId]);
+
+ return (
+
+
+
+
+ {isError ? (
+
+
{errorMessage}
+
+ ) : (
+ <>
+ {isLoading ? (
+
+
Loading...
+
+ ) : (
+
+
+
{character.name}
+
+
+ Type: {character?.type ?? ""}
+
+
+ Dimension: {character?.dimension ?? ""}
+
+
+ Created: {formatDate(character?.created) ?? ""}
+
+
+
+
Residents
+
+ {residents &&
+ residents.map((resident, i) => (
+
+

{
+ goToCharDetail(resident?.id);
+ }}
+ />
+
+ ))}
+ {residents.length === 0 && (
+
There are no registered residents in this location.
+ )}
+
+
+
+
+ )}
+ >
+ )}
+
+ );
+}
+
+export default LocationDetail;
diff --git a/components/MainMenu/LocationList/LocationDetail/styles.js b/components/MainMenu/LocationList/LocationDetail/styles.js
new file mode 100644
index 00000000..21d633c9
--- /dev/null
+++ b/components/MainMenu/LocationList/LocationDetail/styles.js
@@ -0,0 +1,102 @@
+import styled from "styled-components";
+
+export const DetailWrapper = styled.div`
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+
+ .return-btn {
+ display: flex;
+ justify-content: flex-start;
+ width: 100%;
+
+ button {
+ background-color: #f5f5f5;
+ border: none;
+ border-radius: 0.5em;
+ padding: 0.5em;
+ font-size: 1rem;
+ font-weight: bold;
+ color: #000;
+
+ &:hover {
+ cursor: pointer;
+ background: #000;
+ color: #fff;
+ }
+ }
+ }
+
+ .before-content {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 90%;
+ font-size: 2rem;
+ }
+
+ .character-card {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin-top: 1em;
+
+ h1 {
+ font-size: 2rem;
+ margin-bottom: 0.5em;
+ }
+
+ .character-description {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin-top: 1em;
+ gap: 0.7em;
+
+ p {
+ span {
+ font-weight: bold;
+ }
+ }
+ }
+
+ .episodes {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin-top: 2em;
+
+ .residents-list-box {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 0.8em;
+ margin-top: 2em;
+ width: 50%;
+
+ img {
+ border-radius: 50%;
+ width: 100px;
+ transition: 0.3s;
+ cursor: pointer;
+
+ &:hover {
+ scale: 1.3;
+ }
+ }
+
+ p {
+ font-size: 1.5rem;
+ text-align: center;
+ }
+ }
+ }
+ }
+`;
diff --git a/components/MainMenu/LocationList/index.js b/components/MainMenu/LocationList/index.js
new file mode 100644
index 00000000..ba34b81d
--- /dev/null
+++ b/components/MainMenu/LocationList/index.js
@@ -0,0 +1,196 @@
+/* eslint-disable @next/next/no-img-element */
+import React, {
+ useEffect,
+ useState,
+ useRef,
+ useCallback,
+ useContext,
+} from "react";
+import { fetchLocations, fetchFilteredLocations } from "../../../api/locations";
+import {
+ LocationListWrapper,
+ Table,
+ TableHead,
+ TableRow,
+ TableHeading,
+ TableData,
+} from "./styles";
+import { MainWrapper } from "../../Wrapper";
+import LocationDetail from "./LocationDetail";
+import useCustomSnackbar from "../../../helpers/useCustomSnackbar";
+import { pagination } from "../../../helpers";
+import CustomButton from "../../CustomButton";
+import { FadeTransition } from "../../../styles/globalStyled";
+
+function LocationList() {
+ const [page, setPage] = useState(1);
+ const [characters, setCharacters] = useState([]);
+ const [isFiltering, setIsFiltering] = useState(false);
+ const filtertRef = useRef();
+ const { openCustomSnackbar } = useCustomSnackbar();
+ const [isError, setIsError] = useState(false);
+ const [isCharSelected, setIsCharSelected] = useState(false);
+ const [errorMessage, setErrorMessage] = useState(
+ "Could not load locations, please try again or reload"
+ );
+ const { setLocationId } = useContext(MainWrapper);
+
+ const fetchCharData = useCallback(async () => {
+ const response = await fetchLocations(page);
+
+ if (response.error) {
+ setIsError(true);
+ setErrorMessage(
+ `Looks like the server is down, please try again later. (${response.response})`
+ );
+ return;
+ }
+ if (!response?.results) {
+ setIsError(true);
+ return;
+ }
+
+ setCharacters(response?.results);
+ }, [page]);
+
+ const handlePagination = (target) => {
+ const pageUpdate = pagination(target, page);
+ setPage(pageUpdate);
+ };
+
+ const filterCharacters = async () => {
+ setIsError(false);
+ const filterData = filtertRef.current.value;
+ if (!filterData) {
+ openCustomSnackbar("Fill the search form to filter");
+ return;
+ }
+ const response = await fetchFilteredLocations(filterData);
+ if (response.error) {
+ setIsError(true);
+ setErrorMessage(
+ "Could not find your location, please try again or reload"
+ );
+ return;
+ }
+ if (!response?.results) {
+ setIsError(true);
+ return;
+ }
+ setCharacters(response?.results);
+ setIsFiltering(true);
+ };
+
+ const clearFilters = () => {
+ filtertRef.current.value = "";
+ setIsFiltering(false);
+ setIsError(false);
+ fetchCharData();
+ };
+
+ const selectChar = (id) => {
+ setIsCharSelected(true);
+ setLocationId(id);
+ };
+
+ const returnToLocationList = (data) => {
+ setIsCharSelected(data);
+ setLocationId(0);
+ };
+
+ useEffect(() => {
+ fetchCharData();
+ }, [fetchCharData, page]);
+
+ return (
+ <>
+ {isCharSelected ? (
+
+
+
+ ) : (
+
+
+
+
+ Search for an iconic location!
+
+
+
+
+ Search
+
+ {isFiltering && (
+
+ Clear filters
+
+ )}
+
+
+
+ {isError ? (
+
+
{errorMessage}
+ Reload
+
+ ) : (
+
+
+
+
+ Name
+ Type
+ Dimension
+
+
+
+ {characters.map((char) => (
+
+
+ {char.name}
+
+ {char.type}
+ {char.dimension}
+
+
+
+
+ ))}
+
+
+ {!isFiltering && !isError && (
+
+ handlePagination("prev")}
+ disabled={page === 1}
+ >
+ Prev
+
+ handlePagination("next")}
+ disabled={page === 7}
+ >
+ Next
+
+
+ )}
+
+ )}
+
+
+
+ )}
+ >
+ );
+}
+
+export default LocationList;
diff --git a/components/MainMenu/LocationList/styles.js b/components/MainMenu/LocationList/styles.js
new file mode 100644
index 00000000..ab65090e
--- /dev/null
+++ b/components/MainMenu/LocationList/styles.js
@@ -0,0 +1,179 @@
+import styled, { keyframes } from "styled-components";
+
+const fade = keyframes`
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+`;
+
+export const LocationListWrapper = styled.div`
+ width: 100%;
+ height: 100%;
+
+ .title-search {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+
+ input {
+ margin-top: 0.4em;
+ padding: 0.3em;
+ border-radius: 5px;
+ border: 1px solid #1e90ff;
+ font-size: 1rem;
+ font-weight: 600;
+ color: #1e90ff;
+
+ &:focus {
+ outline: none;
+ }
+ }
+
+ .search-btns {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 1em;
+ margin-top: 1em;
+ }
+ }
+
+ .main-box {
+ width: 100%;
+ height: 90%;
+ padding: 0 2em;
+
+ .error-box {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ margin-top: 3em;
+
+ button {
+ margin-top: 1em;
+ }
+ }
+ }
+
+ .table {
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+
+ .table-btns {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 1em;
+ margin: 2em 0;
+ }
+ }
+`;
+
+export const Table = styled.table`
+ width: 70%;
+ border-collapse: collapse;
+ font-family: Arial, sans-serif;
+ margin-top: 3em;
+
+ @media (max-width: 1020px) {
+ width: 95%;
+ }
+`;
+
+export const TableHead = styled.thead`
+ @media (max-width: 600px) {
+ font-size: 0.6rem;
+ }
+`;
+
+export const TableRow = styled.tr`
+ &:nth-child(even) {
+ }
+`;
+
+export const TableHeading = styled.th`
+ padding: 12px;
+ border: 1px solid #ddd;
+ text-align: left;
+ font-weight: bold;
+`;
+
+export const TableData = styled.td`
+ padding: 0.8em;
+ border: 1px solid #ddd;
+ text-align: left;
+ font-size: 1.2rem;
+ width: 160px;
+
+ @media (max-width: 1020px) {
+ padding: 0.2em;
+ font-size: 0.7rem;
+ text-align: center;
+ height: 70px;
+ }
+
+ @media (max-width: 600px) {
+ padding: 0em;
+ font-size: 0.6rem;
+ text-align: center;
+ }
+
+ .picture {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ img {
+ width: 100%;
+ height: 100%;
+ animation: ${fade} 0.5s ease-in-out;
+
+ @media (max-width: 1020px) {
+ width: 50px;
+ height: 50px;
+ }
+
+ @media (max-width: 600px) {
+ width: 35px;
+ height: 35px;
+ }
+ }
+ }
+ button {
+ background: #1e90ff;
+ border: 1px solid #fff;
+ padding: 1em;
+ border-radius: 5px;
+ color: #ffffff;
+ font-weight: 600;
+ font-size: 1rem;
+ cursor: pointer;
+ width: 100%;
+
+ @media (max-width: 1020px) {
+ width: 100%;
+ height: 100%;
+ font-size: 0.8rem;
+ padding: 0;
+ border: none;
+ border-radius: 0;
+ }
+
+ @media (max-width: 600px) {
+ font-size: 0.6rem;
+ }
+
+ &:hover {
+ background: #fff;
+ color: #1e90ff;
+ }
+ }
+`;
diff --git a/components/MainMenu/index.js b/components/MainMenu/index.js
new file mode 100644
index 00000000..4af297ac
--- /dev/null
+++ b/components/MainMenu/index.js
@@ -0,0 +1,112 @@
+import React, { useContext, useState, useCallback, useEffect } from "react";
+import { MenuWrapper } from "./styles";
+import { MainWrapper } from "../Wrapper";
+import CharList from "./CharList";
+import LocationList from "./LocationList";
+import EpisodeList from "./EpisodeList";
+import { useRouter } from "next/router";
+import CustomButton from "../CustomButton";
+import CustomModal from "../CustomModal";
+
+function MainMenu() {
+ const { darkMode, currentNavigation, setCurrentNavigation, setIsLogged } =
+ useContext(MainWrapper);
+ const [currentMenuView, setCurrentMenuView] = useState("charList");
+ const [isModalVisible, setIsModalVisible] = useState(false);
+ const router = useRouter();
+
+ const handleMenuView = useCallback((view) => {
+ const views = {
+ charList: ,
+ locationList: ,
+ episodeList: ,
+ rickJokes: "/rickjokes",
+ };
+
+ return views[view];
+ }, []);
+
+ const switchMenus = useCallback(
+ (view) => {
+ const changeNav = () => {
+ setCurrentNavigation("");
+ };
+ changeNav();
+ if (view === "rickJokes") {
+ router.push(view.toLowerCase());
+ return;
+ }
+ setCurrentMenuView(view);
+ },
+ [setCurrentNavigation, router]
+ );
+
+ const logOut = () => {
+ setIsLogged(false);
+ router.push("/");
+ }
+
+ useEffect(() => {
+ const autoNavigation = () => {
+ if (currentNavigation === "") return;
+ if (currentNavigation === "characters") {
+ setCurrentMenuView("charList");
+ } else if ("episodes") {
+ setCurrentMenuView("episodeList");
+ } else if ("locations") {
+ setCurrentMenuView("locationList");
+ }
+ };
+ autoNavigation();
+ }, [currentNavigation]);
+
+ return (
+
+
+ Are you sure you want to log out?
+
+ setIsModalVisible(false)}>
+ Cancel
+
+
+ Confirm
+
+
+
+
+
+ switchMenus("charList")}
+ >
+ Characters List
+
+ switchMenus("locationList")}
+ >
+ Locations List
+
+ switchMenus("episodeList")}
+ >
+ Episodes List
+
+ switchMenus("rickJokes")}
+ >
+ Rick tells jokes
+
+
+
setIsModalVisible(true)}>
+ Log out
+
+
+ {handleMenuView(currentMenuView)}
+
+ );
+}
+
+export default MainMenu;
diff --git a/components/MainMenu/styles.js b/components/MainMenu/styles.js
new file mode 100644
index 00000000..35d75009
--- /dev/null
+++ b/components/MainMenu/styles.js
@@ -0,0 +1,68 @@
+import styled from "styled-components";
+
+export const MenuWrapper = styled.div`
+ width: 100%;
+ height: 93vh;
+ display: flex;
+
+ .modal-btns {
+ display: flex;
+ gap: 1em;
+ margin-top: 1em;
+ }
+
+ @media (max-width: 1000px) {
+ flex-direction: column;
+ }
+
+ .side-menu {
+ width: 15%;
+ border-right: 1px solid
+ ${({ darkMode }) => (darkMode ? "#ece8dd" : "#8080802c")};
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ padding: 1em;
+
+ @media (max-width: 1000px) {
+ flex-direction: row;
+ width: 100%;
+ border-right: none;
+ }
+
+ .nav-buttons {
+ display: flex;
+ flex-direction: column;
+ gap: 1em;
+
+ @media (max-width: 1000px) {
+ flex-direction: row;
+ flex-wrap: wrap;
+ gap: 0.5em;
+ }
+ }
+
+ button {
+ @media (max-width: 1000px) {
+ padding: 0.5em;
+ font-size: 0.9rem;
+ }
+
+ @media (max-width: 400px) {
+ padding: 0.3em;
+ font-size: 0.8rem;
+ }
+ }
+ }
+
+ .content {
+ width: 85%;
+ height: 100%;
+ padding: 1em;
+ overflow-y: scroll;
+
+ @media (max-width: 1000px) {
+ width: 100%;
+ }
+ }
+`;
diff --git a/components/RickJokesPage/index.js b/components/RickJokesPage/index.js
new file mode 100644
index 00000000..2ace629b
--- /dev/null
+++ b/components/RickJokesPage/index.js
@@ -0,0 +1,111 @@
+import React, { useState, useCallback, useEffect } from "react";
+import { RickJokesPageContainer } from "./styles";
+import { fetchJoke } from "../../api/joke";
+import rick1 from "../../images/rick-state-1.gif";
+import rick2 from "../../images/rick-state-2.gif";
+import rick3 from "../../images/rick-state-3.gif";
+import rick4 from "../../images/rick-state-4.gif";
+import rick5 from "../../images/rick-state-5.gif";
+import Image from "next/image";
+import { useRouter } from "next/router";
+
+function RickJokesPage() {
+ const [joke, setJoke] = useState({});
+ const [jokeText, setJokeText] = useState("");
+ const [question, setQuestion] = useState("");
+ const [currentRickReaction, setCurrentRickReaction] = useState(rick1);
+ const [isLoading, setIsLoading] = useState(false);
+ const [completedJoke, setCompletedJoke] = useState(false);
+ const [jokeCounter, setJokeCounter] = useState(0);
+ const [confirmLeave, setConfirmLeave] = useState(false);
+ const [leaveBtnText, setLeaveBtnText] = useState("Return to dashlist");
+ const router = useRouter();
+
+ const fetchJokeData = useCallback(async () => {
+ setIsLoading(true);
+ const jokes = await fetchJoke();
+ setJoke(jokes);
+ setIsLoading(false);
+ setCompletedJoke(false);
+ setJokeCounter(jokeCounter + 1);
+ setConfirmLeave(false);
+ setLeaveBtnText("Return to dashlist");
+ }, [jokeCounter]);
+
+ const handleJokes = () => {
+ if (completedJoke) {
+ fetchJokeData();
+ return;
+ }
+ if (joke?.setup) {
+ setJokeText(joke?.delivery);
+ setCurrentRickReaction(rick3);
+ setQuestion("Tell me another joke!");
+ setIsLoading(false);
+ setCompletedJoke(true);
+ console.log("wtst?");
+ return;
+ }
+ fetchJokeData();
+ };
+
+ const returnToDashList = () => {
+ if (confirmLeave) {
+ router.push("/dashlist");
+ return;
+ }
+ setConfirmLeave(true);
+ setLeaveBtnText("Yes, take me to dashlist!");
+ setCurrentRickReaction(rick5);
+ setJokeText(
+ `Are you sure you want to leave? ${
+ jokeCounter > 0
+ ? "Don't you want to hear more jokes?"
+ : "Don't you want to hear some jokes?"
+ }`
+ );
+ };
+
+ useEffect(() => {
+ const handleJokeText = () => {
+ if (joke?.type === "single") {
+ setJokeText(joke?.joke);
+ setCurrentRickReaction(rick3);
+ setQuestion("Tell me another joke!");
+ setCompletedJoke(true);
+ return;
+ }
+ if (joke?.setup && joke?.delivery) {
+ setJokeText(joke?.setup);
+ setCurrentRickReaction(rick2);
+ setQuestion("What's the punchline?");
+ }
+ };
+ handleJokeText();
+ }, [joke]);
+
+ useEffect(() => {
+ if (isLoading) {
+ setCurrentRickReaction(rick4);
+ }
+ }, [isLoading]);
+
+ return (
+
+
+
+
+ {jokeText || "Wanna hear a joke?"}
+
+
+
+
+
+
+
+ );
+}
+
+export default RickJokesPage;
diff --git a/components/RickJokesPage/styles.js b/components/RickJokesPage/styles.js
new file mode 100644
index 00000000..0a8588c4
--- /dev/null
+++ b/components/RickJokesPage/styles.js
@@ -0,0 +1,68 @@
+import styled from "styled-components";
+
+export const RickJokesPageContainer = styled.div`
+ width: 30%;
+ height: 92.9vh;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ margin: 0 auto;
+
+ .rick-reactions-box {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+
+ .rick-message-baloon-box {
+ position: relative;
+ background-color: #fff;
+ border-radius: 10px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin-bottom: 20px;
+ color: black;
+ padding: 1.5em;
+
+ ::after {
+ content: "";
+ position: absolute;
+ top: 100%;
+ left: 50%;
+ margin-left: -10px;
+ width: 0;
+ height: 0;
+ border-left: 10px solid transparent;
+ border-right: 10px solid transparent;
+ border-top: 10px solid #fff;
+ }
+ }
+
+ img {
+ width: 350px;
+ height: 350px;
+ border-radius: 50%;
+ }
+ }
+ button {
+ width: 300px;
+ height: 50px;
+ background-color: #fff;
+ border: 1px solid #000;
+ border-radius: 10px;
+ font-size: 1.2rem;
+ font-weight: 600;
+ cursor: pointer;
+ transition: all 0.1s ease-in-out;
+ margin-top: 1em;
+ opacity: ${({ isLoading }) => (isLoading ? "0.5" : "1")};
+ pointer-events: ${({ isLoading }) => (isLoading ? "none" : "auto")};
+
+ :hover {
+ background-color: #000;
+ color: #fff;
+ }
+ }
+`;
diff --git a/components/Wrapper/index.js b/components/Wrapper/index.js
new file mode 100644
index 00000000..8c336e7b
--- /dev/null
+++ b/components/Wrapper/index.js
@@ -0,0 +1,49 @@
+import React, { createContext, useState } from "react";
+import { DarkWrapper } from "./styles";
+
+export const MainWrapper = createContext({
+ darkMode: false,
+ setDarkMode: () => {},
+ isLogged: false,
+ setIsLogged: () => {},
+ currentNavigation: "",
+ setCurrentNavigation: () => {},
+ characterId: 0,
+ setCharacterId: () => {},
+ locationId: 0,
+ setLocationId: () => {},
+ episodeId: 0,
+ setEpisodeId: () => {},
+});
+
+function Wrapper({ children }) {
+ const [darkMode, setDarkMode] = useState(true);
+ const [isLogged, setIsLogged] = useState(false);
+ const [currentNavigation, setCurrentNavigation] = useState("");
+ const [characterId, setCharacterId] = useState(0);
+ const [locationId, setLocationId] = useState(0);
+ const [episodeId, setEpisodeId] = useState(0);
+
+ return (
+
+ {children}
+
+ );
+}
+
+export default Wrapper;
diff --git a/components/Wrapper/styles.js b/components/Wrapper/styles.js
new file mode 100644
index 00000000..38b82407
--- /dev/null
+++ b/components/Wrapper/styles.js
@@ -0,0 +1,7 @@
+import styled from "styled-components";
+
+export const DarkWrapper = styled.div`
+ background: ${({ darkMode }) => (darkMode ? "#393E46" : "#ece8dd")};
+ color: ${({ darkMode }) => (darkMode ? "#ece8dd" : "#393E46")};
+ transition: all 0.5s ease;
+`;
diff --git a/cypress.config.js b/cypress.config.js
new file mode 100644
index 00000000..3dfee284
--- /dev/null
+++ b/cypress.config.js
@@ -0,0 +1,10 @@
+const { defineConfig } = require("cypress");
+
+module.exports = defineConfig({
+ e2e: {
+ setupNodeEvents(on, config) {
+ // implement node event listeners here
+ baseUrl = "http://localhost:3000";
+ },
+ },
+});
diff --git a/cypress/e2e/DetailsNavigation.cy.js b/cypress/e2e/DetailsNavigation.cy.js
new file mode 100644
index 00000000..1d106ed8
--- /dev/null
+++ b/cypress/e2e/DetailsNavigation.cy.js
@@ -0,0 +1,27 @@
+describe("DetailsNavigation", () => {
+ beforeEach(() => {
+ cy.visit("http://localhost:3000");
+ const userData = {
+ login: "testinguser",
+ password: "12345",
+ };
+ localStorage.setItem("userData", JSON.stringify(userData));
+ cy.get("button:contains('Login')").click();
+ cy.get("button:contains('Return')").click();
+ cy.get("button:contains('Login')").click();
+ cy.get('input[placeholder="Login"]').type("testinguser");
+ cy.get('input[placeholder="Password"]').type("12345");
+ cy.get("button:contains('Enter')").click();
+ });
+
+ it("should be able to navigate from characters to episodes without using the menu navigation", () => {
+ cy.get("[data-testid=table-characters-more-info-1]")
+ .should("exist")
+ .should("have.text", "More info")
+ .click();
+ cy.wait(2000)
+ cy.contains("S01E01").click();
+ cy.wait(2000)
+ cy.get("[data-testid=character-picture-1]").should("be.visible").click();
+ });
+});
diff --git a/cypress/e2e/ListsPage.cy.js b/cypress/e2e/ListsPage.cy.js
new file mode 100644
index 00000000..ba867b05
--- /dev/null
+++ b/cypress/e2e/ListsPage.cy.js
@@ -0,0 +1,71 @@
+describe("ListsPage", () => {
+ beforeEach(() => {
+ cy.visit("http://localhost:3000");
+ const userData = {
+ login: "testinguser",
+ password: "12345",
+ };
+ localStorage.setItem("userData", JSON.stringify(userData));
+ cy.get("button:contains('Login')").click();
+ cy.get("button:contains('Return')").click();
+ cy.get("button:contains('Login')").click();
+ cy.get('input[placeholder="Login"]').type("testinguser");
+ cy.get('input[placeholder="Password"]').type("12345");
+ cy.get("button:contains('Enter')").click();
+ });
+
+ it("should be able to navigate to a list, use pagination and search filter", () => {
+ cy.get("[data-testid=characters-page-title]").should(
+ "have.text",
+ "Search for your favourite character!"
+ );
+ cy.get("[data-testid=character-search-input]")
+ .should("exist")
+ .type("rick sanchez");
+ cy.get("button:contains('Search')").click();
+ cy.get("[data-testid=table-characters-name]").should("contain", "Rick");
+ cy.wait(2000);
+ cy.get("button:contains('Clear filters')").click();
+ cy.get("button:contains('Prev')").should("have.prop", "disabled", true);
+ cy.get("button:contains('Next')").click();
+ cy.wait(2000);
+ cy.get("button:contains('Prev')")
+ .should("have.prop", "disabled", false)
+ .click();
+ cy.wait(2000);
+
+ cy.get("button:contains('Locations List')").should("be.visible").click();
+ cy.get("[data-testid=locations-page-title]").should(
+ "have.text",
+ "Search for an iconic location!"
+ );
+ cy.get("[data-testid=location-search-input]").should("exist").type("earth");
+ cy.get("button:contains('Search')").click();
+ cy.get("[data-testid=table-locations-name]").should("contain", "Earth");
+ cy.wait(2000);
+ cy.get("button:contains('Clear filters')").click();
+ cy.get("button:contains('Prev')").should("have.prop", "disabled", true);
+ cy.get("button:contains('Next')").click();
+ cy.wait(2000);
+ cy.get("button:contains('Prev')")
+ .should("have.prop", "disabled", false)
+ .click();
+
+ cy.get("button:contains('Episodes List')").should("be.visible").click();
+ cy.get("[data-testid=episodes-page-title]").should(
+ "have.text",
+ "Search for your favourite episode!"
+ );
+ cy.get("[data-testid=episode-search-input]").should("exist").type("pilot");
+ cy.get("button:contains('Search')").click();
+ cy.get("[data-testid=table-episodes-name]").should("contain", "Pilot");
+ cy.wait(2000);
+ cy.get("button:contains('Clear filters')").click();
+ cy.get("button:contains('Prev')").should("have.prop", "disabled", true);
+ cy.get("button:contains('Next')").click();
+ cy.wait(2000);
+ cy.get("button:contains('Prev')")
+ .should("have.prop", "disabled", false)
+ .click();
+ });
+});
diff --git a/cypress/e2e/LoginPage.cy.js b/cypress/e2e/LoginPage.cy.js
new file mode 100644
index 00000000..961a16dc
--- /dev/null
+++ b/cypress/e2e/LoginPage.cy.js
@@ -0,0 +1,49 @@
+describe("Login", () => {
+
+ beforeEach(() => {
+ cy.visit("http://localhost:3000");
+ });
+
+ it("should change colors on darkmode switch button", () => {
+ cy.wait(2000);
+ cy.get("[data-testid=darkmode-switch]").click();
+ cy.get("[data-testid=darkmode-text]").should("have.text", "Dark mode: off");
+ cy.get("[data-testid=darkmode-wrapper]").should(
+ "have.css",
+ "background-color",
+ "rgb(236, 232, 221)"
+ );
+
+ cy.wait(2000);
+ cy.get("[data-testid=darkmode-switch]").click();
+ cy.get("[data-testid=darkmode-text]").should("have.text", "Dark mode: on");
+ cy.get("[data-testid=darkmode-wrapper]").should(
+ "have.css",
+ "background-color",
+ "rgb(57, 62, 70)"
+ );
+ });
+
+ it("should be able to register a user and log on the application", () => {
+ cy.get("button:contains('Register')").click();
+ cy.wait(2000);
+ cy.get("button:contains('Return')").click();
+ cy.wait(2000);
+ cy.get("button:contains('Register')").click();
+ cy.get('input[placeholder="Login"]').type("testinguser");
+ cy.get('input[placeholder="Password"]').type("12345");
+ cy.get('input[placeholder="Repeat password"]').type("12345");
+ cy.get("button:contains('Register')").click();
+ cy.contains("User successfully registered!").should("be.visible");
+
+ cy.get("button:contains('Login')").click();
+ cy.wait(2000);
+ cy.get("button:contains('Return')").click();
+ cy.wait(2000);
+ cy.get("button:contains('Login')").click();
+ cy.get('input[placeholder="Login"]').type("testinguser");
+ cy.get('input[placeholder="Password"]').type("12345");
+ cy.get("button:contains('Enter')").click();
+ cy.contains("User logged in!").should("be.visible");
+ });
+});
diff --git a/cypress/e2e/MainManuNavigation.cy.js b/cypress/e2e/MainManuNavigation.cy.js
new file mode 100644
index 00000000..96da9b6c
--- /dev/null
+++ b/cypress/e2e/MainManuNavigation.cy.js
@@ -0,0 +1,38 @@
+describe("MainManuNavigation.cy", () => {
+ beforeEach(() => {
+ cy.visit("http://localhost:3000");
+ const userData = {
+ login: "testinguser",
+ password: "12345",
+ };
+ localStorage.setItem("userData", JSON.stringify(userData));
+ });
+
+ it("should be able to navigate through the lists", () => {
+ cy.get("button:contains('Login')").click();
+ cy.get("button:contains('Return')").click();
+ cy.get("button:contains('Login')").click();
+ cy.get('input[placeholder="Login"]').type("testinguser");
+ cy.get('input[placeholder="Password"]').type("12345");
+ cy.get("button:contains('Enter')").click();
+ cy.get("button:contains('Locations List')").should("be.visible").click();
+ cy.wait(2000);
+ cy.get("button:contains('Episodes List')").should("be.visible").click();
+ cy.wait(2000);
+ cy.get("button:contains('Characters List')").should("be.visible").click();
+ cy.wait(2000);
+ cy.get("button:contains('Rick tells jokes')").should("be.visible").click();
+ cy.wait(2000);
+ cy.get("button:contains('Return to dashlist')").click();
+ cy.wait(2000);
+ cy.get("button:contains('Yes, take me to dashlist')").should("be.visible").click();
+ cy.wait(2000);
+ cy.get("button:contains('Log out')").should("be.visible").click();
+ cy.wait(2000);
+ cy.get("button:contains('Cancel')").should("be.visible").click();
+ cy.wait(2000);
+ cy.get("button:contains('Log out')").should("be.visible").click();
+ cy.wait(2000);
+ cy.get("button:contains('Confirm')").should("be.visible").click();
+ });
+});
diff --git a/cypress/e2e/RickJokes.cy.js b/cypress/e2e/RickJokes.cy.js
new file mode 100644
index 00000000..e13063fb
--- /dev/null
+++ b/cypress/e2e/RickJokes.cy.js
@@ -0,0 +1,53 @@
+describe("RickJokes", () => {
+ beforeEach(() => {
+ cy.visit("http://localhost:3000");
+ const userData = {
+ login: "testinguser",
+ password: "12345",
+ };
+ localStorage.setItem("userData", JSON.stringify(userData));
+ cy.get("button:contains('Login')").click();
+ cy.get("button:contains('Return')").click();
+ cy.get("button:contains('Login')").click();
+ cy.get('input[placeholder="Login"]').type("testinguser");
+ cy.get('input[placeholder="Password"]').type("12345");
+ cy.get("button:contains('Enter')").click();
+ });
+
+ it("should be able to navigate to rickjokes route and read some jokes", () => {
+ cy.get("button:contains('Rick tells jokes')").should("be.visible").click();
+ cy.get("[data-testid=joke-text-box]");
+ cy.get("[data-testid=rick-reactions]").should("be.visible");
+ cy.get("[data-testid=joke-action-btn]")
+ .should("be.visible")
+ .should("contain", "Yeah, tell me a joke!")
+ .click();
+ cy.wait(3000);
+ cy.get("[data-testid=joke-action-btn]").then(($jokeGenerator) => {
+ if ($jokeGenerator.text().includes("What's the punchline?")) {
+ $jokeGenerator.click();
+ cy.wait(5000)
+ cy.get("[data-testid=leave-rickjokes]")
+ .should("be.visible")
+ .should("have.text", "Return to dashlist")
+ .click();
+ cy.wait(3000);
+ cy.get("[data-testid=leave-rickjokes]")
+ .should("be.visible")
+ .should("have.text", "Yes, take me to dashlist!")
+ .click();
+ } else {
+ cy.wait(5000)
+ cy.get("[data-testid=leave-rickjokes]")
+ .should("be.visible")
+ .should("have.text", "Return to dashlist")
+ .click();
+ cy.wait(3000);
+ cy.get("[data-testid=leave-rickjokes]")
+ .should("be.visible")
+ .should("have.text", "Yes, take me to dashlist!")
+ .click();
+ }
+ });
+ });
+});
diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json
new file mode 100644
index 00000000..02e42543
--- /dev/null
+++ b/cypress/fixtures/example.json
@@ -0,0 +1,5 @@
+{
+ "name": "Using fixtures to represent data",
+ "email": "hello@cypress.io",
+ "body": "Fixtures are a great way to mock data for responses to routes"
+}
diff --git a/cypress/support/commands.js b/cypress/support/commands.js
new file mode 100644
index 00000000..66ea16ef
--- /dev/null
+++ b/cypress/support/commands.js
@@ -0,0 +1,25 @@
+// ***********************************************
+// This example commands.js shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+//
+//
+// -- This is a parent command --
+// Cypress.Commands.add('login', (email, password) => { ... })
+//
+//
+// -- This is a child command --
+// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This will overwrite an existing command --
+// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
\ No newline at end of file
diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js
new file mode 100644
index 00000000..0e7290a1
--- /dev/null
+++ b/cypress/support/e2e.js
@@ -0,0 +1,20 @@
+// ***********************************************************
+// This example support/e2e.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands'
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
\ No newline at end of file
diff --git a/helpers/index.js b/helpers/index.js
new file mode 100644
index 00000000..819f0fd5
--- /dev/null
+++ b/helpers/index.js
@@ -0,0 +1,40 @@
+import axios from "axios";
+
+export const pagination = (direction, page) => {
+ switch (direction) {
+ case "prev":
+ return page === 1 ? page : page - 1;
+ case "next":
+ return page + 1;
+ default:
+ return page;
+ }
+}
+
+export const getContentFromEndpoints = async (endpoints, currentName) => {
+ const requests = endpoints.map((endpoint) =>
+ axios.get(endpoint).catch(() => "")
+ );
+ let imageUrls = [];
+ try {
+ const responses = await Promise.all(requests);
+ responses.forEach((response) => {
+ if (response !== "") {
+ const imagesList = {
+ id: response?.data?.id,
+ content: response?.data?.[currentName],
+ };
+ imageUrls.push(imagesList);
+ }
+ });
+ } catch (error) {
+ console.log(error);
+ }
+ return imageUrls;
+}
+
+export const formatDate = (target) => {
+ const date = new Date(target);
+ const options = { month: "2-digit", day: "2-digit", year: "numeric" };
+ return date.toLocaleDateString("en-US", options);
+};
\ No newline at end of file
diff --git a/helpers/useCustomSnackbar.js b/helpers/useCustomSnackbar.js
new file mode 100644
index 00000000..bfdbf9aa
--- /dev/null
+++ b/helpers/useCustomSnackbar.js
@@ -0,0 +1,29 @@
+import { useSnackbar } from "react-simple-snackbar";
+
+function useCustomSnackbar() {
+ const options = {
+ position: "top-center",
+ style: {
+ backgroundColor: "midnightblue",
+ border: "2px solid lightgreen",
+ color: "lightblue",
+ fontFamily: "Menlo, monospace",
+ fontSize: "20px",
+ textAlign: "center",
+ },
+ closeStyle: {
+ color: "lightcoral",
+ fontSize: "16px",
+ },
+ };
+
+ const [openSnackbar] = useSnackbar(options);
+
+ function openCustomSnackbar(message) {
+ openSnackbar(message);
+ }
+
+ return { openCustomSnackbar };
+}
+
+export default useCustomSnackbar;
diff --git a/images/logo.png b/images/logo.png
new file mode 100644
index 00000000..aab1cb22
Binary files /dev/null and b/images/logo.png differ
diff --git a/images/rick-state-1.gif b/images/rick-state-1.gif
new file mode 100644
index 00000000..29fa494b
Binary files /dev/null and b/images/rick-state-1.gif differ
diff --git a/images/rick-state-2.gif b/images/rick-state-2.gif
new file mode 100644
index 00000000..96c86321
Binary files /dev/null and b/images/rick-state-2.gif differ
diff --git a/images/rick-state-3.gif b/images/rick-state-3.gif
new file mode 100644
index 00000000..7f111f1d
Binary files /dev/null and b/images/rick-state-3.gif differ
diff --git a/images/rick-state-4.gif b/images/rick-state-4.gif
new file mode 100644
index 00000000..60068d65
Binary files /dev/null and b/images/rick-state-4.gif differ
diff --git a/images/rick-state-5.gif b/images/rick-state-5.gif
new file mode 100644
index 00000000..efe2927d
Binary files /dev/null and b/images/rick-state-5.gif differ
diff --git a/next.config.js b/next.config.js
index ae887958..366eb948 100644
--- a/next.config.js
+++ b/next.config.js
@@ -2,6 +2,12 @@
const nextConfig = {
reactStrictMode: true,
swcMinify: true,
+ compiler: {
+ styledComponents: true,
+ },
+ env: {
+ baseUrl: "https://rickandmortyapi.com/api"
+ }
}
module.exports = nextConfig
diff --git a/package.json b/package.json
index d6d970b0..dbce0ee1 100644
--- a/package.json
+++ b/package.json
@@ -9,12 +9,19 @@
"lint": "next lint"
},
"dependencies": {
+ "axios": "^1.2.2",
"next": "13.0.6",
"react": "18.2.0",
- "react-dom": "18.2.0"
+ "react-dom": "18.2.0",
+ "react-simple-snackbar": "^1.1.11",
+ "styled-components": "^5.3.6"
},
"devDependencies": {
+ "cypress": "^12.3.0",
"eslint": "8.29.0",
"eslint-config-next": "13.0.6"
+ },
+ "resolutions": {
+ "styled-components": "^5"
}
}
diff --git a/pages/_app.js b/pages/_app.js
index 23d1ca6c..8bde9cea 100644
--- a/pages/_app.js
+++ b/pages/_app.js
@@ -1,6 +1,29 @@
-
+import "../styles/global.css";
+import Head from "next/head";
+import Header from "../components/Header/index";
+import Wrapper from "../components/Wrapper";
+import SnackbarProvider from "react-simple-snackbar";
+import { useRouter } from "next/router";
+
function MyApp({ Component, pageProps }) {
- return
+ const router = useRouter();
+ const { route } = router;
+ const routeName = route.replace(/[^a-zA-Z ]/g, "");
+ const routeNameCapitalized = "| " + routeName.charAt(0).toUpperCase() + routeName.slice(1);
+
+ return (
+ <>
+
+ Rick and Morty Data {route !== "/" ? routeNameCapitalized : ""}
+
+
+
+
+
+
+
+ >
+ );
}
-export default MyApp
+export default MyApp;
diff --git a/pages/dashlist.js b/pages/dashlist.js
new file mode 100644
index 00000000..9bb1e197
--- /dev/null
+++ b/pages/dashlist.js
@@ -0,0 +1,19 @@
+import React, { useContext, useEffect } from "react";
+import MainMenu from "../components/MainMenu";
+import { MainWrapper } from "../components/Wrapper";
+import { useRouter } from "next/router";
+
+function Charlist() {
+ const router = useRouter();
+ const { isLogged } = useContext(MainWrapper);
+
+ useEffect(() => {
+ if (!isLogged) {
+ router.push("/");
+ }
+ }, [isLogged, router]);
+
+ return ;
+}
+
+export default Charlist;
diff --git a/pages/index.js b/pages/index.js
index f80b4ce2..90b53efc 100644
--- a/pages/index.js
+++ b/pages/index.js
@@ -1,8 +1,5 @@
+import Login from "../components/Login";
export default function Home() {
- return (
-
-
Hello, World!
-
- )
+ return ;
}
diff --git a/pages/rickjokes.js b/pages/rickjokes.js
new file mode 100644
index 00000000..84c48808
--- /dev/null
+++ b/pages/rickjokes.js
@@ -0,0 +1,19 @@
+import React, { useContext, useEffect } from "react";
+import RickJokesPage from "../components/RickJokesPage";
+import { MainWrapper } from "../components/Wrapper";
+import { useRouter } from "next/router";
+
+function RickJokes() {
+ const router = useRouter();
+ const { isLogged } = useContext(MainWrapper);
+
+ useEffect(() => {
+ if (!isLogged) {
+ router.push("/");
+ }
+ }, [isLogged, router]);
+
+ return ;
+}
+
+export default RickJokes;
diff --git a/styles/global.css b/styles/global.css
new file mode 100644
index 00000000..1a8616aa
--- /dev/null
+++ b/styles/global.css
@@ -0,0 +1,12 @@
+@import url('https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
+
+* {
+ font-family: 'Rubik', sans-serif;
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+a {
+ text-decoration: none;
+}
\ No newline at end of file
diff --git a/styles/globalStyled.js b/styles/globalStyled.js
new file mode 100644
index 00000000..e5e1d708
--- /dev/null
+++ b/styles/globalStyled.js
@@ -0,0 +1,14 @@
+import styled, { keyframes } from "styled-components";
+
+const fade = keyframes`
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+`;
+
+export const FadeTransition = styled.div`
+ animation: ${fade} 0.5s ease;
+`;
diff --git a/yarn.lock b/yarn.lock
index 904d3d1c..8d3abed2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,87 @@
# yarn lockfile v1
+"@babel/code-frame@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
+ integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
+ dependencies:
+ "@babel/highlight" "^7.18.6"
+
+"@babel/generator@^7.20.7":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a"
+ integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==
+ dependencies:
+ "@babel/types" "^7.20.7"
+ "@jridgewell/gen-mapping" "^0.3.2"
+ jsesc "^2.5.1"
+
+"@babel/helper-annotate-as-pure@^7.16.0":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
+ integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-environment-visitor@^7.18.9":
+ version "7.18.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
+ integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
+
+"@babel/helper-function-name@^7.19.0":
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c"
+ integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==
+ dependencies:
+ "@babel/template" "^7.18.10"
+ "@babel/types" "^7.19.0"
+
+"@babel/helper-hoist-variables@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678"
+ integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.0":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
+ integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-split-export-declaration@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
+ integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-string-parser@^7.19.4":
+ version "7.19.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
+ integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
+
+"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
+ version "7.19.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
+ integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
+
+"@babel/highlight@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
+ integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.18.6"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.20.7":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b"
+ integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==
+
"@babel/runtime-corejs3@^7.10.2":
version "7.20.6"
resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.20.6.tgz#63dae945963539ab0ad578efbf3eff271e7067ae"
@@ -17,6 +98,106 @@
dependencies:
regenerator-runtime "^0.13.11"
+"@babel/runtime@^7.13.10", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd"
+ integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==
+ dependencies:
+ regenerator-runtime "^0.13.11"
+
+"@babel/template@^7.18.10":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8"
+ integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==
+ dependencies:
+ "@babel/code-frame" "^7.18.6"
+ "@babel/parser" "^7.20.7"
+ "@babel/types" "^7.20.7"
+
+"@babel/traverse@^7.4.5":
+ version "7.20.12"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.12.tgz#7f0f787b3a67ca4475adef1f56cb94f6abd4a4b5"
+ integrity sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==
+ dependencies:
+ "@babel/code-frame" "^7.18.6"
+ "@babel/generator" "^7.20.7"
+ "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/helper-function-name" "^7.19.0"
+ "@babel/helper-hoist-variables" "^7.18.6"
+ "@babel/helper-split-export-declaration" "^7.18.6"
+ "@babel/parser" "^7.20.7"
+ "@babel/types" "^7.20.7"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
+"@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.7":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f"
+ integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==
+ dependencies:
+ "@babel/helper-string-parser" "^7.19.4"
+ "@babel/helper-validator-identifier" "^7.19.1"
+ to-fast-properties "^2.0.0"
+
+"@colors/colors@1.5.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
+ integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
+
+"@cypress/request@^2.88.10":
+ version "2.88.11"
+ resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.11.tgz#5a4c7399bc2d7e7ed56e92ce5acb620c8b187047"
+ integrity sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ http-signature "~1.3.6"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ performance-now "^2.1.0"
+ qs "~6.10.3"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.5.0"
+ tunnel-agent "^0.6.0"
+ uuid "^8.3.2"
+
+"@cypress/xvfb@^1.2.4":
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a"
+ integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==
+ dependencies:
+ debug "^3.1.0"
+ lodash.once "^4.1.1"
+
+"@emotion/is-prop-valid@^1.1.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83"
+ integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==
+ dependencies:
+ "@emotion/memoize" "^0.8.0"
+
+"@emotion/memoize@^0.8.0":
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f"
+ integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==
+
+"@emotion/stylis@^0.8.4":
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
+ integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
+
+"@emotion/unitless@^0.7.4":
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
+ integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+
"@eslint/eslintrc@^1.3.3":
version "1.3.3"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95"
@@ -51,6 +232,38 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+"@jridgewell/gen-mapping@^0.3.2":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
+ integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
+ dependencies:
+ "@jridgewell/set-array" "^1.0.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
+ integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
+
+"@jridgewell/set-array@^1.0.1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+ integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+
+"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10":
+ version "1.4.14"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
+ integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
+
+"@jridgewell/trace-mapping@^0.3.9":
+ version "0.3.17"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
+ integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
+ dependencies:
+ "@jridgewell/resolve-uri" "3.1.0"
+ "@jridgewell/sourcemap-codec" "1.4.14"
+
"@next/env@13.0.6":
version "13.0.6"
resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.6.tgz#3fcab11ffbe95bff127827d9f7f3139bc5e6adff"
@@ -178,6 +391,33 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+"@types/node@*":
+ version "18.11.18"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f"
+ integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==
+
+"@types/node@^14.14.31":
+ version "14.18.36"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.36.tgz#c414052cb9d43fab67d679d5f3c641be911f5835"
+ integrity sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==
+
+"@types/sinonjs__fake-timers@8.1.1":
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3"
+ integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==
+
+"@types/sizzle@^2.3.2":
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef"
+ integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==
+
+"@types/yauzl@^2.9.1":
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
+ integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
+ dependencies:
+ "@types/node" "*"
+
"@typescript-eslint/parser@^5.42.0":
version "5.46.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.46.1.tgz#1fc8e7102c1141eb64276c3b89d70da8c0ba5699"
@@ -232,6 +472,14 @@ acorn@^8.8.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73"
integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
ajv@^6.10.0, ajv@^6.12.4:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
@@ -242,18 +490,42 @@ ajv@^6.10.0, ajv@^6.12.4:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
+ansi-colors@^4.1.1:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
+ integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
+
+ansi-escapes@^4.3.0:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+ integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+ dependencies:
+ type-fest "^0.21.3"
+
ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-ansi-styles@^4.1.0:
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
dependencies:
color-convert "^2.0.1"
+arch@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11"
+ integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==
+
argparse@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
@@ -314,26 +586,115 @@ array.prototype.tosorted@^1.1.1:
es-shim-unscopables "^1.0.0"
get-intrinsic "^1.1.3"
+asn1@~0.2.3:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
+ integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
+
ast-types-flow@^0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async@^3.2.0:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
+ integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==
+
+aws4@^1.8.0:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3"
+ integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==
+
axe-core@^4.4.3:
version "4.6.0"
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.0.tgz#1d07514866fa51262734b3357932fcf86961383a"
integrity sha512-L3ZNbXPTxMrl0+qTXAzn9FBRvk5XdO56K8CvcCKtlxv44Aw2w2NCclGuvCWxHPw1Riiq3ncP/sxFYj2nUqdoTw==
+axios@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.2.tgz#72681724c6e6a43a9fea860fc558127dbe32f9f1"
+ integrity sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==
+ dependencies:
+ follow-redirects "^1.15.0"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
axobject-query@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
+"babel-plugin-styled-components@>= 1.12.0":
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz#c81ef34b713f9da2b7d3f5550df0d1e19e798086"
+ integrity sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.16.0"
+ "@babel/helper-module-imports" "^7.16.0"
+ babel-plugin-syntax-jsx "^6.18.0"
+ lodash "^4.17.11"
+ picomatch "^2.3.0"
+
+babel-plugin-syntax-jsx@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+ integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==
+
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==
+ dependencies:
+ tweetnacl "^0.14.3"
+
+blob-util@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb"
+ integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==
+
+bluebird@^3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -349,6 +710,24 @@ braces@^3.0.2:
dependencies:
fill-range "^7.0.1"
+buffer-crc32@~0.2.3:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+ integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
+
+buffer@^5.6.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
+cachedir@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8"
+ integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==
+
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -362,12 +741,31 @@ callsites@^3.0.0:
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+camelize@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3"
+ integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==
+
caniuse-lite@^1.0.30001406:
version "1.0.30001439"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz#ab7371faeb4adff4b74dad1718a6fd122e45d9cb"
integrity sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==
-chalk@^4.0.0:
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
+
+chalk@^2.0.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0, chalk@^4.1.0:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -375,11 +773,57 @@ chalk@^4.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+check-more-types@^2.24.0:
+ version "2.24.0"
+ resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600"
+ integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==
+
+ci-info@^3.2.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.1.tgz#708a6cdae38915d597afdf3b145f2f8e1ff55f3f"
+ integrity sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-table3@~0.6.1:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2"
+ integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==
+ dependencies:
+ string-width "^4.2.0"
+ optionalDependencies:
+ "@colors/colors" "1.5.0"
+
+cli-truncate@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
+ integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
+ dependencies:
+ slice-ansi "^3.0.0"
+ string-width "^4.2.0"
+
client-only@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
color-convert@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
@@ -387,11 +831,38 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+colorette@^2.0.16:
+ version "2.0.19"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
+ integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==
+
+combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
+ integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
+
+common-tags@^1.8.0:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
+ integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -402,7 +873,12 @@ core-js-pure@^3.25.1:
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.26.1.tgz#653f4d7130c427820dcecd3168b594e8bb095a33"
integrity sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==
-cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+core-util-is@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
+
+cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -411,11 +887,90 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
+css-color-keywords@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
+ integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==
+
+css-to-react-native@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756"
+ integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==
+ dependencies:
+ camelize "^1.0.0"
+ css-color-keywords "^1.0.0"
+ postcss-value-parser "^4.0.2"
+
+csstype@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
+ integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
+
+cypress@^12.3.0:
+ version "12.3.0"
+ resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.3.0.tgz#ae3fb0540aef4b5eab1ef2bcd0760caf2992b8bf"
+ integrity sha512-ZQNebibi6NBt51TRxRMYKeFvIiQZ01t50HSy7z/JMgRVqBUey3cdjog5MYEbzG6Ktti5ckDt1tfcC47lmFwXkw==
+ dependencies:
+ "@cypress/request" "^2.88.10"
+ "@cypress/xvfb" "^1.2.4"
+ "@types/node" "^14.14.31"
+ "@types/sinonjs__fake-timers" "8.1.1"
+ "@types/sizzle" "^2.3.2"
+ arch "^2.2.0"
+ blob-util "^2.0.2"
+ bluebird "^3.7.2"
+ buffer "^5.6.0"
+ cachedir "^2.3.0"
+ chalk "^4.1.0"
+ check-more-types "^2.24.0"
+ cli-cursor "^3.1.0"
+ cli-table3 "~0.6.1"
+ commander "^5.1.0"
+ common-tags "^1.8.0"
+ dayjs "^1.10.4"
+ debug "^4.3.2"
+ enquirer "^2.3.6"
+ eventemitter2 "6.4.7"
+ execa "4.1.0"
+ executable "^4.1.1"
+ extract-zip "2.0.1"
+ figures "^3.2.0"
+ fs-extra "^9.1.0"
+ getos "^3.2.1"
+ is-ci "^3.0.0"
+ is-installed-globally "~0.4.0"
+ lazy-ass "^1.6.0"
+ listr2 "^3.8.3"
+ lodash "^4.17.21"
+ log-symbols "^4.0.0"
+ minimist "^1.2.6"
+ ospath "^1.2.2"
+ pretty-bytes "^5.6.0"
+ proxy-from-env "1.0.0"
+ request-progress "^3.0.0"
+ semver "^7.3.2"
+ supports-color "^8.1.1"
+ tmp "~0.2.1"
+ untildify "^4.0.0"
+ yauzl "^2.10.0"
+
damerau-levenshtein@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==
+ dependencies:
+ assert-plus "^1.0.0"
+
+dayjs@^1.10.4:
+ version "1.11.7"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2"
+ integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==
+
debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -423,14 +978,14 @@ debug@^2.6.9:
dependencies:
ms "2.0.0"
-debug@^3.2.7:
+debug@^3.1.0, debug@^3.2.7:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
-debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
+debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -455,6 +1010,11 @@ define-properties@^1.1.3, define-properties@^1.1.4:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@@ -476,11 +1036,39 @@ doctrine@^3.0.0:
dependencies:
esutils "^2.0.2"
+dom-helpers@^5.0.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
+ integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
+ dependencies:
+ "@babel/runtime" "^7.8.7"
+ csstype "^3.0.2"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
emoji-regex@^9.2.2:
version "9.2.2"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
enhanced-resolve@^5.10.0:
version "5.12.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634"
@@ -489,6 +1077,13 @@ enhanced-resolve@^5.10.0:
graceful-fs "^4.2.4"
tapable "^2.2.0"
+enquirer@^2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
+ integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
+ dependencies:
+ ansi-colors "^4.1.1"
+
es-abstract@^1.19.0, es-abstract@^1.20.4:
version "1.20.5"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.5.tgz#e6dc99177be37cacda5988e692c3fa8b218e95d2"
@@ -536,6 +1131,11 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
@@ -751,6 +1351,59 @@ esutils@^2.0.2:
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+eventemitter2@6.4.7:
+ version "6.4.7"
+ resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d"
+ integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==
+
+execa@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a"
+ integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+executable@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c"
+ integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==
+ dependencies:
+ pify "^2.2.0"
+
+extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+extract-zip@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
+ integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
+ dependencies:
+ debug "^4.1.1"
+ get-stream "^5.1.0"
+ yauzl "^2.10.0"
+ optionalDependencies:
+ "@types/yauzl" "^2.9.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==
+
+extsprintf@^1.2.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
+ integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@@ -784,6 +1437,20 @@ fastq@^1.6.0:
dependencies:
reusify "^1.0.4"
+fd-slicer@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+ integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
+ dependencies:
+ pend "~1.2.0"
+
+figures@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+ integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
file-entry-cache@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
@@ -819,6 +1486,44 @@ flatted@^3.1.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
+follow-redirects@^1.15.0:
+ version "1.15.2"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
+ integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
+
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+fs-extra@^9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+ integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -853,6 +1558,13 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@
has "^1.0.3"
has-symbols "^1.0.3"
+get-stream@^5.0.0, get-stream@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
get-symbol-description@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
@@ -866,6 +1578,20 @@ get-tsconfig@^4.2.0:
resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.2.0.tgz#ff368dd7104dab47bf923404eb93838245c66543"
integrity sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==
+getos@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5"
+ integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==
+ dependencies:
+ async "^3.2.0"
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==
+ dependencies:
+ assert-plus "^1.0.0"
+
glob-parent@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -904,6 +1630,18 @@ glob@^7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-dirs@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485"
+ integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==
+ dependencies:
+ ini "2.0.0"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
globals@^13.15.0:
version "13.19.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8"
@@ -951,7 +1689,7 @@ gopd@^1.0.1:
dependencies:
get-intrinsic "^1.1.3"
-graceful-fs@^4.2.4:
+graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
version "4.2.10"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
@@ -966,6 +1704,11 @@ has-bigints@^1.0.1, has-bigints@^1.0.2:
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
has-flag@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
@@ -997,6 +1740,32 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
+hoist-non-react-statics@^3.0.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
+http-signature@~1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9"
+ integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^2.0.2"
+ sshpk "^1.14.1"
+
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
+ieee754@^1.1.13:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
ignore@^5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c"
@@ -1015,6 +1784,11 @@ imurmurhash@^0.1.4:
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -1028,6 +1802,11 @@ inherits@2:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+ini@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
+ integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
+
internal-slot@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
@@ -1057,6 +1836,13 @@ is-callable@^1.1.4, is-callable@^1.2.7:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+is-ci@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867"
+ integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==
+ dependencies:
+ ci-info "^3.2.0"
+
is-core-module@^2.10.0, is-core-module@^2.8.1, is-core-module@^2.9.0:
version "2.11.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
@@ -1081,6 +1867,11 @@ is-extglob@^2.1.1:
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
@@ -1088,6 +1879,14 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
dependencies:
is-extglob "^2.1.1"
+is-installed-globally@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"
+ integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==
+ dependencies:
+ global-dirs "^3.0.0"
+ is-path-inside "^3.0.2"
+
is-negative-zero@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
@@ -1105,7 +1904,7 @@ is-number@^7.0.0:
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-is-path-inside@^3.0.3:
+is-path-inside@^3.0.2, is-path-inside@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
@@ -1125,6 +1924,11 @@ is-shared-array-buffer@^1.0.2:
dependencies:
call-bind "^1.0.2"
+is-stream@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+ integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
is-string@^1.0.5, is-string@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
@@ -1139,6 +1943,16 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
dependencies:
has-symbols "^1.0.2"
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
+
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
is-weakref@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
@@ -1158,12 +1972,17 @@ isexe@^2.0.0:
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==
+
js-sdsl@^4.1.4:
version "4.2.0"
resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0"
integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==
-"js-tokens@^3.0.0 || ^4.0.0":
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
@@ -1175,16 +1994,36 @@ js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
json-schema-traverse@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+json-schema@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
+ integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
+
json-stable-stringify-without-jsonify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
+
json5@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
@@ -1192,6 +2031,25 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsprim@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d"
+ integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.4.0"
+ verror "1.10.0"
+
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2:
version "3.3.3"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea"
@@ -1212,6 +2070,11 @@ language-tags@^1.0.5:
dependencies:
language-subtag-registry "^0.3.20"
+lazy-ass@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513"
+ integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==
+
levn@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
@@ -1220,6 +2083,20 @@ levn@^0.4.1:
prelude-ls "^1.2.1"
type-check "~0.4.0"
+listr2@^3.8.3:
+ version "3.14.0"
+ resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e"
+ integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==
+ dependencies:
+ cli-truncate "^2.1.0"
+ colorette "^2.0.16"
+ log-update "^4.0.0"
+ p-map "^4.0.0"
+ rfdc "^1.3.0"
+ rxjs "^7.5.1"
+ through "^2.3.8"
+ wrap-ansi "^7.0.0"
+
locate-path@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
@@ -1232,6 +2109,34 @@ lodash.merge@^4.6.2:
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+lodash.once@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
+ integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==
+
+lodash@^4.17.11, lodash@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log-symbols@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+ dependencies:
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
+
+log-update@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
+ integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
+ dependencies:
+ ansi-escapes "^4.3.0"
+ cli-cursor "^3.1.0"
+ slice-ansi "^4.0.0"
+ wrap-ansi "^6.2.0"
+
loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@@ -1246,6 +2151,11 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
merge2@^1.3.0, merge2@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
@@ -1259,6 +2169,23 @@ micromatch@^4.0.4:
braces "^3.0.2"
picomatch "^2.3.1"
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12, mime-types@~2.1.19:
+ version "2.1.35"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
@@ -1321,6 +2248,13 @@ next@13.0.6:
"@next/swc-win32-ia32-msvc" "13.0.6"
"@next/swc-win32-x64-msvc" "13.0.6"
+npm-run-path@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@@ -1381,13 +2315,20 @@ object.values@^1.1.5, object.values@^1.1.6:
define-properties "^1.1.4"
es-abstract "^1.20.4"
-once@^1.3.0:
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
dependencies:
wrappy "1"
+onetime@^5.1.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
open@^8.4.0:
version "8.4.0"
resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8"
@@ -1409,6 +2350,11 @@ optionator@^0.9.1:
type-check "^0.4.0"
word-wrap "^1.2.3"
+ospath@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b"
+ integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==
+
p-limit@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
@@ -1423,6 +2369,13 @@ p-locate@^5.0.0:
dependencies:
p-limit "^3.0.2"
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
parent-module@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
@@ -1440,7 +2393,7 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-path-key@^3.1.0:
+path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
@@ -1455,16 +2408,36 @@ path-type@^4.0.0:
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+ integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
+
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
-picomatch@^2.3.1:
+picomatch@^2.3.0, picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+pify@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+postcss-value-parser@^4.0.2:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
postcss@8.4.14:
version "8.4.14"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
@@ -1479,7 +2452,12 @@ prelude-ls@^1.2.1:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
-prop-types@^15.8.1:
+pretty-bytes@^5.6.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
+ integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
+
+prop-types@^15.6.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -1488,11 +2466,46 @@ prop-types@^15.8.1:
object-assign "^4.1.1"
react-is "^16.13.1"
+proxy-from-env@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
+ integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==
+
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+psl@^1.1.28:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
+ integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
punycode@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+punycode@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.2.0.tgz#2092cc57cd2582c38e4e7e8bb869dc8d3148bc74"
+ integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==
+
+qs@~6.10.3:
+ version "6.10.5"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.5.tgz#974715920a80ff6a262264acd2c7e6c2a53282b4"
+ integrity sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ==
+ dependencies:
+ side-channel "^1.0.4"
+
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
@@ -1506,11 +2519,29 @@ react-dom@18.2.0:
loose-envify "^1.1.0"
scheduler "^0.23.0"
-react-is@^16.13.1:
+react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+react-simple-snackbar@^1.1.11:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/react-simple-snackbar/-/react-simple-snackbar-1.1.11.tgz#e1470f49d04f8e1e941e62f459cca27d1b2167a1"
+ integrity sha512-l+RMkIoqnOXBQaQbirk4yGaEH5Jeynup/AQBGaq7hCPIIraOQi2RFVthZIM4Ms6sFtdSYxQ8emN4/jI30l7gXw==
+ dependencies:
+ "@babel/runtime" "^7.13.10"
+ react-transition-group "^4.4.1"
+
+react-transition-group@^4.4.1:
+ version "4.4.5"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1"
+ integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ dom-helpers "^5.0.1"
+ loose-envify "^1.4.0"
+ prop-types "^15.6.2"
+
react@18.2.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
@@ -1537,6 +2568,13 @@ regexpp@^3.2.0:
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
+request-progress@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe"
+ integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==
+ dependencies:
+ throttleit "^1.0.0"
+
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
@@ -1560,12 +2598,25 @@ resolve@^2.0.0-next.3:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
reusify@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
-rimraf@^3.0.2:
+rfdc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
+ integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
+
+rimraf@^3.0.0, rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
@@ -1579,6 +2630,18 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
+rxjs@^7.5.1:
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4"
+ integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==
+ dependencies:
+ tslib "^2.1.0"
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.2:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
safe-regex-test@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
@@ -1588,6 +2651,11 @@ safe-regex-test@^1.0.0:
get-intrinsic "^1.1.3"
is-regex "^1.1.4"
+safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
scheduler@^0.23.0:
version "0.23.0"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
@@ -1600,13 +2668,18 @@ semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-semver@^7.3.7:
+semver@^7.3.2, semver@^7.3.7:
version "7.3.8"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
dependencies:
lru-cache "^6.0.0"
+shallowequal@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+ integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -1628,6 +2701,11 @@ side-channel@^1.0.4:
get-intrinsic "^1.0.2"
object-inspect "^1.9.0"
+signal-exit@^3.0.2:
+ version "3.0.7"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+ integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
slash@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
@@ -1638,11 +2716,53 @@ slash@^4.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+slice-ansi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
+ integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+slice-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
+ integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+sshpk@^1.14.1:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5"
+ integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
string.prototype.matchall@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3"
@@ -1675,7 +2795,7 @@ string.prototype.trimstart@^1.0.6:
define-properties "^1.1.4"
es-abstract "^1.20.4"
-strip-ansi@^6.0.1:
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -1687,11 +2807,32 @@ strip-bom@^3.0.0:
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+styled-components@^5, styled-components@^5.3.6:
+ version "5.3.6"
+ resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.6.tgz#27753c8c27c650bee9358e343fc927966bfd00d1"
+ integrity sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/traverse" "^7.4.5"
+ "@emotion/is-prop-valid" "^1.1.0"
+ "@emotion/stylis" "^0.8.4"
+ "@emotion/unitless" "^0.7.4"
+ babel-plugin-styled-components ">= 1.12.0"
+ css-to-react-native "^3.0.0"
+ hoist-non-react-statics "^3.0.0"
+ shallowequal "^1.1.0"
+ supports-color "^5.5.0"
+
styled-jsx@5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.0.tgz#4a5622ab9714bd3fcfaeec292aa555871f057563"
@@ -1699,6 +2840,13 @@ styled-jsx@5.1.0:
dependencies:
client-only "0.0.1"
+supports-color@^5.3.0, supports-color@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
@@ -1706,6 +2854,13 @@ supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
+supports-color@^8.1.1:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
supports-preserve-symlinks-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
@@ -1729,6 +2884,16 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+throttleit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
+ integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==
+
+through@^2.3.8:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
+
tiny-glob@^0.2.9:
version "0.2.9"
resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2"
@@ -1737,6 +2902,18 @@ tiny-glob@^0.2.9:
globalyzer "0.1.0"
globrex "^0.1.2"
+tmp@~0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
+ integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
+ dependencies:
+ rimraf "^3.0.0"
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -1744,6 +2921,14 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
+tough-cookie@~2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
tsconfig-paths@^3.14.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
@@ -1759,7 +2944,7 @@ tslib@^1.8.1:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.4.0:
+tslib@^2.1.0, tslib@^2.4.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
@@ -1771,6 +2956,18 @@ tsutils@^3.21.0:
dependencies:
tslib "^1.8.1"
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==
+
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
@@ -1783,6 +2980,11 @@ type-fest@^0.20.2:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+type-fest@^0.21.3:
+ version "0.21.3"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+ integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
unbox-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
@@ -1793,6 +2995,16 @@ unbox-primitive@^1.0.2:
has-symbols "^1.0.3"
which-boxed-primitive "^1.0.2"
+universalify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+ integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
+untildify@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
+ integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
+
uri-js@^4.2.2:
version "4.4.1"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
@@ -1800,6 +3012,20 @@ uri-js@^4.2.2:
dependencies:
punycode "^2.1.0"
+uuid@^8.3.2:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
which-boxed-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
@@ -1823,6 +3049,24 @@ word-wrap@^1.2.3:
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -1833,6 +3077,14 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+yauzl@^2.10.0:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+ integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
+ dependencies:
+ buffer-crc32 "~0.2.3"
+ fd-slicer "~1.1.0"
+
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"