├── .gitignore ├── README.md ├── app ├── all │ └── trending │ │ └── page │ │ └── [pageid] │ │ └── page.js ├── favicon.ico ├── globals.css ├── layout.js ├── movie │ ├── [id] │ │ └── page.js │ ├── page.js │ └── popular │ │ └── page │ │ └── [pageid] │ │ └── page.js ├── not-found.js ├── page.js ├── search │ └── page.js └── series │ ├── [id] │ ├── page.js │ └── season │ │ └── [seasonid] │ │ ├── [epid] │ │ └── page.js │ │ └── page.js │ ├── page.js │ └── trending │ └── page │ └── [pageid] │ └── page.js ├── components ├── display │ ├── EpisodeCard.js │ ├── EpisodeDisplay.js │ ├── HomeCard.js │ ├── HomeDisplay.js │ ├── ImageCard.js │ ├── MovieCards.js │ ├── MovieDisplay.js │ ├── SearchDisplay.js │ ├── SeasonCard.js │ ├── SeasonDisplay.js │ ├── TvCards.js │ └── TvDisplay.js ├── filter │ ├── Filter.js │ └── HomeFilter.js ├── footer │ └── Footer.js ├── info │ ├── EpisodeDetails.js │ ├── EpisodeInfo.js │ ├── MovieDetails.js │ ├── MovieInfo.js │ ├── SeasonDetails.js │ ├── SeasonInfo.js │ ├── TvDetails.js │ └── TvInfo.js ├── navbar │ ├── Header.js │ └── Logo.js ├── pagination │ ├── HomePagination.js │ ├── MoviePagination.js │ ├── NextEpisode.js │ └── TvPagination.js ├── searchbar │ └── SearchBar.js └── title │ ├── MoviesTitle.js │ ├── SearchTitle.js │ ├── Title.js │ └── TvTitle.js ├── jsconfig.json ├── next.config.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── public ├── episodeImg.jpg ├── movieCard.jpg ├── next.svg └── vercel.svg └── tailwind.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env*.local 29 | 30 | # vercel 31 | .vercel 32 | .env 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Welcome to CineWorld! The World of Cinema. 2 | CineWorld is a movie and tv shows streaming website created using TMDB API in React-Next JS Framework and Tailwind CSS. 3 | 4 | ## Overview 5 | 6 | Cineworld is a dynamic and immersive movie streaming website that brings you an extensive collection of films from various genres. Powered by React, Next.js, and Tailwind CSS, Cineworld offers an unparalleled user experience, providing movie enthusiasts with a seamless and entertaining journey through the world of cinema. 7 | 8 | ##Screenshots 9 | 10 | ![Screenshot 2023-07-13 230452](https://github.com/alanvarghesepaul22/CINEWORLD-NextJS/assets/86376232/965879a8-9604-4b77-a83c-026f594a2e21) 11 | 12 | ![Screenshot 2023-07-21 211717](https://github.com/alanvarghesepaul22/CINEWORLD-NextJS/assets/86376232/fae66266-2242-4311-9f53-8258c644b030) 13 | 14 | ## Responsive Design 15 | 16 | ![Untitled-1](https://github.com/alanvarghesepaul22/CINEWORLD-NextJS/assets/86376232/a7bee4e3-59bd-4f64-8e47-d8d821f4425d) 17 | 18 | 19 | ## Key Features 20 | 21 | - **Vast Movie Collection**: Explore a diverse selection of movies and tv shows, ranging from classics to the latest releases, all conveniently accessible in one place. 22 | 23 | - **User-friendly Interface**: Enjoy a sleek and intuitive design that ensures a smooth and enjoyable browsing experience. 24 | 25 | - **Data-driven Content**: Cineworld utilizes the TMDB API to provide up-to-date movie information, including posters, summaries, and ratings. 26 | 27 | - **Responsive Design**: Access Cineworld from any device, as the website is fully responsive and optimized for mobile, tablet, and desktop. 28 | 29 | - **Fast Loading**: Built with Next.js 13, Cineworld boasts lightning-fast loading times, reducing waiting times for an optimal user experience. 30 | 31 | ## Installation and Setup 32 | 33 | 1. Clone the repository to your local machine: 34 | 35 | ```bash 36 | git clone https://github.com/alanvarghesepaul22/CINEWORLD-NextJS.git 37 | cd CINEWORLD-NextJS 38 | ``` 39 | 40 | 2. Install the dependencies: 41 | 42 | ```bash 43 | npm install 44 | ``` 45 | 46 | 3. Create a `.env.local` file in the root directory and add your TMDB API key: 47 | 48 | ```plaintext 49 | API_KEY=your_tmdb_api_key 50 | ``` 51 | 52 | 4. Run the development server: 53 | 54 | ```bash 55 | npm run dev 56 | ``` 57 | 58 | 5. Open your browser and navigate to `http://localhost:3000` to access Cineworld. 59 | 60 | ## Tech Stack 61 | 62 | - React 63 | - Next.js 13 64 | - Tailwind CSS 65 | 66 | ## Deployment 67 | 68 | Cineworld is deployed using [Vercel](https://vercel.com/). Any changes pushed to the `main` branch will trigger an automatic deployment. 69 | 70 | ## Contributing 71 | 72 | We welcome contributions from the open-source community! If you find a bug, have a feature request, or want to contribute in any way, please feel free to submit a pull request. 73 | 74 | ## Acknowledgments 75 | 76 | - Our gratitude to [TMDB](https://www.themoviedb.org/) for providing the incredible API that powers Cineworld. 77 | 78 | - A big thank you to the developers of React, Next.js, and Tailwind CSS for creating these fantastic frameworks that made this project possible. 79 | 80 | --- 81 | 82 | We hope you enjoy exploring Cineworld as much as we enjoyed creating it! Your feedback and support mean the world to us. Feel free to reach out with any questions or suggestions. 83 | 84 | Happy movie streaming! 🍿🎥 85 | -------------------------------------------------------------------------------- /app/all/trending/page/[pageid]/page.js: -------------------------------------------------------------------------------- 1 | import HomeDisplay from "@/components/display/HomeDisplay"; 2 | import HomeFilter from "@/components/filter/HomeFilter"; 3 | import SearchBar from "@/components/searchbar/SearchBar"; 4 | import Title from "@/components/title/Title"; 5 | 6 | export async function getData(pageid) { 7 | const apiKey = process.env.API_KEY; 8 | if (pageid < 1) { 9 | pageid = 1; 10 | } 11 | const res = await fetch( 12 | // `https://api.themoviedb.org/3/movie/popular?api_key=${apiKey}&language=en-US&page=${pageid}` 13 | `https://api.themoviedb.org/3/trending/all/day?api_key=${apiKey}&page=${pageid}` 14 | ); 15 | let result = await res.json(); 16 | let data = result.results; 17 | 18 | if (!res.ok) { 19 | throw new Error("Failed to Fetch data"); 20 | } 21 | return { data, pageid }; 22 | } 23 | 24 | const AllTrending = async ({ params }) => { 25 | let { data, pageid } = await getData(params.pageid); 26 | return ( 27 |
28 | 29 | {/* <SearchBar /> 30 | <HomeFilter /> */} 31 | <HomeDisplay movies={data} pageid={pageid} /> 32 | </div> 33 | ); 34 | }; 35 | export default AllTrending; 36 | -------------------------------------------------------------------------------- /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanvarghesepaul22/CINEWORLD-NextJS/6a95acfcbdd237b1fdaf9b08f2949692b5677d33/app/favicon.ico -------------------------------------------------------------------------------- /app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | 6 | body { 7 | background-image: linear-gradient(to top, #141414 0%, rgb(8, 8, 8) 100%); 8 | /* background-image: linear-gradient(to bottom, #09203f 0%, #242222 100%); */ 9 | } 10 | -------------------------------------------------------------------------------- /app/layout.js: -------------------------------------------------------------------------------- 1 | import Header from '@/components/navbar/Header' 2 | import './globals.css' 3 | import { Inter } from 'next/font/google' 4 | import Footer from '@/components/footer/Footer' 5 | 6 | const inter = Inter({ subsets: ['latin'] }) 7 | 8 | export const metadata = { 9 | title: 'CineWorld', 10 | description: 'A World of Cinema', 11 | } 12 | 13 | export default function RootLayout({ children }) { 14 | return ( 15 | <html lang="en"> 16 | <body className={inter.className}> 17 | <Header/> 18 | <div className='mt-32'> 19 | {children} 20 | </div> 21 | 22 | <Footer/> 23 | </body> 24 | </html> 25 | ) 26 | } 27 | -------------------------------------------------------------------------------- /app/movie/[id]/page.js: -------------------------------------------------------------------------------- 1 | import MovieInfo from "@/components/info/MovieInfo"; 2 | 3 | export async function getData(id) { 4 | const apiKey = process.env.API_KEY; 5 | const res = await fetch( 6 | `https://api.themoviedb.org/3/movie/${id}?api_key=${apiKey}` 7 | ); 8 | let data = await res.json(); 9 | let genreArr = []; 10 | 11 | data.genres.map((element) => { 12 | genreArr.push(element.name); 13 | }); 14 | 15 | if (!res.ok) { 16 | throw new Error("Failed to Fetch data"); 17 | } 18 | 19 | return { data, genreArr, id }; 20 | } 21 | const MovieDetail = async ({ params }) => { 22 | let {data, genreArr, id} = await getData(params.id); 23 | return ( 24 | <> 25 | <MovieInfo MovieDetail={data} genreArr={genreArr} id={id} /> 26 | </> 27 | ); 28 | }; 29 | 30 | export default MovieDetail; 31 | -------------------------------------------------------------------------------- /app/movie/page.js: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import MovieDisplay from "@/components/display/MovieDisplay"; 3 | import SearchDisplay from "@/components/display/SearchDisplay"; 4 | import HomeFilter from "@/components/filter/HomeFilter"; 5 | import SearchBar from "@/components/searchbar/SearchBar"; 6 | import MoviesTitle from "@/components/title/MoviesTitle"; 7 | import React, { useEffect, useState } from "react"; 8 | import { useDebounce } from "use-debounce"; 9 | const apiKey = process.env.API_KEY; 10 | async function getData() { 11 | const apiKey = process.env.API_KEY; 12 | const resp = await fetch( 13 | `https://api.themoviedb.org/3/movie/popular?api_key=${apiKey}&page=1` 14 | ); 15 | 16 | if (!resp.ok) { 17 | throw new Error("Failed to fetch data"); 18 | } 19 | const data = await resp.json(); 20 | let res = data.results; 21 | return res; 22 | } 23 | 24 | const Movies = async () => { 25 | const moviedata = await getData(); 26 | 27 | return ( 28 | <div className=" h-auto"> 29 | <MoviesTitle /> 30 | {/* <SearchBar /> 31 | <HomeFilter /> */} 32 | <MovieDisplay movies={moviedata} /> 33 | </div> 34 | ); 35 | }; 36 | 37 | export default Movies; 38 | -------------------------------------------------------------------------------- /app/movie/popular/page/[pageid]/page.js: -------------------------------------------------------------------------------- 1 | import MovieDisplay from "@/components/display/MovieDisplay"; 2 | import HomeFilter from "@/components/filter/HomeFilter"; 3 | import SearchBar from "@/components/searchbar/SearchBar"; 4 | import MoviesTitle from "@/components/title/MoviesTitle"; 5 | 6 | export async function getData(pageid) { 7 | const apiKey = process.env.API_KEY; 8 | if(pageid<1){ 9 | pageid=1 10 | } 11 | const res = await fetch( 12 | `https://api.themoviedb.org/3/movie/popular?api_key=${apiKey}&page=${pageid}` 13 | ); 14 | let result = await res.json(); 15 | let data=result.results 16 | 17 | if (!res.ok) { 18 | throw new Error("Failed to Fetch data"); 19 | } 20 | return { data, pageid }; 21 | } 22 | 23 | const PopularPage = async ({ params }) => { 24 | let { data, pageid } = await getData(params.pageid); 25 | return ( 26 | <div className=" h-auto"> 27 | <MoviesTitle /> 28 | {/* <SearchBar /> 29 | <HomeFilter /> */} 30 | <MovieDisplay movies={data} pageid={pageid} /> 31 | </div> 32 | ); 33 | }; 34 | export default PopularPage; 35 | -------------------------------------------------------------------------------- /app/not-found.js: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import React from "react"; 3 | 4 | const PageNotFound = () => { 5 | return ( 6 | <div className="flex items-center justify-center h-screen -mt-28"> 7 | <div className="max-w-lg px-8 py-12"> 8 | <h1 className="text-5xl font-bold text-white mb-4">404</h1> 9 | <p className="text-gray-300 text-xl mb-6"> 10 | Oops! The page you're looking for does not exist. 11 | </p> 12 | <Link 13 | href="/" 14 | className="bg-primary hover:bg-light-primary text-black font-bold py-1 px-2 rounded inline-block" 15 | > 16 | Go Home 17 | </Link> 18 | </div> 19 | </div> 20 | ); 21 | }; 22 | 23 | export default PageNotFound; 24 | -------------------------------------------------------------------------------- /app/page.js: -------------------------------------------------------------------------------- 1 | import HomeDisplay from "@/components/display/HomeDisplay"; 2 | import HomeFilter from "@/components/filter/HomeFilter"; 3 | import SearchBar from "@/components/searchbar/SearchBar"; 4 | import Title from "@/components/title/Title"; 5 | 6 | async function getData() { 7 | const apiKey = process.env.API_KEY; 8 | const resp = await fetch( 9 | // `https://api.themoviedb.org/3/movie/popular?api_key=${apiKey}&language=en-US&page=1` 10 | `https://api.themoviedb.org/3/trending/all/day?api_key=${apiKey}&page=1` 11 | ); 12 | 13 | if (!resp.ok) { 14 | throw new Error("Failed to fetch data"); 15 | } 16 | const data = await resp.json(); 17 | let res = data.results; 18 | return res; 19 | } 20 | 21 | export default async function Home() { 22 | const data = await getData(); 23 | return ( 24 | <div className=" h-auto"> 25 | <Title /> 26 | {/* <SearchBar /> 27 | <HomeFilter /> */} 28 | <HomeDisplay movies={data} /> 29 | </div> 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /app/search/page.js: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import SearchDisplay from "@/components/display/SearchDisplay"; 3 | import HomeFilter from "@/components/filter/HomeFilter"; 4 | import SearchBar from "@/components/searchbar/SearchBar"; 5 | import SearchTitle from "@/components/title/SearchTitle"; 6 | import React, { useEffect, useState } from "react"; 7 | const apiKey = process.env.API_KEY; 8 | import { useDebounce } from "use-debounce"; 9 | 10 | const Search = () => { 11 | const [data, setData] = useState([]); 12 | const [typedValue, setTypedValue] = useState(""); 13 | 14 | // This is triggered when search button is clicked 15 | const handleSearch = (searchValue) => { 16 | const getData = async () => { 17 | if (searchValue !== "") { 18 | const res = await fetch( 19 | `https://api.themoviedb.org/3/search/multi?api_key=${apiKey}&language=en-US&query=${searchValue}` 20 | ); 21 | const result = await res.json(); 22 | let data = result.results; 23 | setData(data); 24 | } 25 | }; 26 | getData(); 27 | }; 28 | 29 | // This is triggered when user starts typing in search bar 30 | const handleTyping = (typedValue) => { 31 | setTypedValue(typedValue); 32 | }; 33 | 34 | const [value] = useDebounce(typedValue, 1000); 35 | 36 | useEffect(() => { 37 | const getData = async () => { 38 | if (typedValue !== "") { 39 | const res = await fetch( 40 | `https://api.themoviedb.org/3/search/multi?api_key=${apiKey}&query=${value}` 41 | ); 42 | const result = await res.json(); 43 | let data = result.results; 44 | setData(data); 45 | } 46 | }; 47 | getData(); 48 | }, [value]); 49 | 50 | return ( 51 | <div className=" h-full"> 52 | <SearchTitle /> 53 | <SearchBar onSearch={handleSearch} onTyping={handleTyping} /> 54 | {/* <HomeFilter /> */} 55 | <SearchDisplay movies={data} /> 56 | </div> 57 | ); 58 | }; 59 | 60 | export default Search; 61 | -------------------------------------------------------------------------------- /app/series/[id]/page.js: -------------------------------------------------------------------------------- 1 | import TvInfo from "@/components/info/TvInfo"; 2 | 3 | export async function getData(id) { 4 | const apiKey = process.env.API_KEY; 5 | const res = await fetch( 6 | `https://api.themoviedb.org/3/tv/${id}?api_key=${apiKey}` 7 | ); 8 | let data = await res.json(); 9 | let genreArr = []; 10 | 11 | data.genres.map((element) => { 12 | genreArr.push(element.name); 13 | }); 14 | 15 | if (!res.ok) { 16 | throw new Error("Failed to Fetch data"); 17 | } 18 | 19 | return { data, genreArr, id }; 20 | } 21 | const TvDetail = async ({ params }) => { 22 | let { data, genreArr, id } = await getData(params.id); 23 | return ( 24 | <> 25 | <TvInfo TvDetail={data} genreArr={genreArr} id={id} /> 26 | </> 27 | ); 28 | }; 29 | 30 | export default TvDetail; 31 | -------------------------------------------------------------------------------- /app/series/[id]/season/[seasonid]/[epid]/page.js: -------------------------------------------------------------------------------- 1 | import EpisodeInfo from "@/components/info/EpisodeInfo"; 2 | import React from "react"; 3 | 4 | async function getData(id, seasonid, epid) { 5 | const apiKey = process.env.API_KEY; 6 | const res = await fetch( 7 | `https://api.themoviedb.org/3/tv/${id}/season/${seasonid}/episode/${epid}?api_key=${apiKey}` 8 | ); 9 | 10 | const SeasonResp = await fetch( 11 | `https://api.themoviedb.org/3/tv/${id}/season/${seasonid}?api_key=${apiKey}` 12 | ); 13 | 14 | const SeriesResp = await fetch( 15 | `https://api.themoviedb.org/3/tv/${id}?api_key=${apiKey}` 16 | ); 17 | 18 | if (!SeriesResp.ok ||!res.ok ||!SeasonResp.ok) { 19 | throw new Error("Failed to fetch data"); 20 | } 21 | const SeriesData = await SeriesResp.json(); 22 | const SeasonData = await SeasonResp.json(); 23 | const data = await res.json(); 24 | 25 | return { data, id, SeasonData, SeriesData }; 26 | } 27 | 28 | const EpisodeDetailsPage = async ({ params }) => { 29 | let { data, id, SeasonData,SeriesData } = await getData( 30 | params.id, 31 | params.seasonid, 32 | params.epid 33 | ); 34 | return ( 35 | <EpisodeInfo episodeDetails={data} seriesId={id} seasonData={SeasonData} seriesData={SeriesData} /> 36 | ); 37 | }; 38 | 39 | export default EpisodeDetailsPage; 40 | -------------------------------------------------------------------------------- /app/series/[id]/season/[seasonid]/page.js: -------------------------------------------------------------------------------- 1 | import SeasonInfo from "@/components/info/SeasonInfo"; 2 | import React from "react"; 3 | 4 | async function getData(id, seasonid) { 5 | const apiKey = process.env.API_KEY; 6 | 7 | const resp = await fetch( 8 | `https://api.themoviedb.org/3/tv/${id}/season/${seasonid}?api_key=${apiKey}` 9 | ); 10 | 11 | if (!resp.ok) { 12 | throw new Error("Failed to fetch data"); 13 | } 14 | const data = await resp.json(); 15 | 16 | return { data, id }; 17 | } 18 | 19 | const SeasonsDetailsPage = async ({ params }) => { 20 | let { data, id } = await getData(params.id, params.seasonid); 21 | return <SeasonInfo SeasonInfos={data} id={id} />; 22 | }; 23 | 24 | export default SeasonsDetailsPage; 25 | -------------------------------------------------------------------------------- /app/series/page.js: -------------------------------------------------------------------------------- 1 | import TvDisplay from "@/components/display/TvDisplay"; 2 | import HomeFilter from "@/components/filter/HomeFilter"; 3 | import SearchBar from "@/components/searchbar/SearchBar"; 4 | import TvTitle from "@/components/title/TvTitle"; 5 | import React from "react"; 6 | 7 | async function getData() { 8 | const apiKey = process.env.API_KEY; 9 | const resp = await fetch( 10 | `https://api.themoviedb.org/3/trending/tv/day?api_key=${apiKey}&page=1` 11 | ); 12 | 13 | if (!resp.ok) { 14 | throw new Error("Failed to fetch data"); 15 | } 16 | const data = await resp.json(); 17 | let res = data.results; 18 | return res; 19 | } 20 | 21 | const Series = async () => { 22 | const data = await getData(); 23 | return ( 24 | <> 25 | <div className=" h-auto"> 26 | <TvTitle /> 27 | {/* <SearchBar /> 28 | <HomeFilter /> */} 29 | <TvDisplay series={data} /> 30 | </div> 31 | </> 32 | ); 33 | }; 34 | 35 | export default Series; 36 | -------------------------------------------------------------------------------- /app/series/trending/page/[pageid]/page.js: -------------------------------------------------------------------------------- 1 | import TvDisplay from "@/components/display/TvDisplay"; 2 | import HomeFilter from "@/components/filter/HomeFilter"; 3 | import SearchBar from "@/components/searchbar/SearchBar"; 4 | import TvTitle from "@/components/title/TvTitle"; 5 | 6 | export async function getData(pageid) { 7 | const apiKey = process.env.API_KEY; 8 | if (pageid < 1) { 9 | pageid = 1; 10 | } 11 | const res = await fetch( 12 | `https://api.themoviedb.org/3/trending/tv/day?api_key=${apiKey}&page=${pageid}` 13 | ); 14 | let result = await res.json(); 15 | let data = result.results; 16 | 17 | if (!res.ok) { 18 | throw new Error("Failed to Fetch data"); 19 | } 20 | return { data, pageid }; 21 | } 22 | 23 | const TrendingPage = async ({ params }) => { 24 | let { data, pageid } = await getData(params.pageid); 25 | return ( 26 | <div className=" h-auto"> 27 | <TvTitle /> 28 | {/* <SearchBar /> 29 | <HomeFilter /> */} 30 | <TvDisplay series={data} pageid={pageid} /> 31 | </div> 32 | ); 33 | }; 34 | export default TrendingPage; 35 | -------------------------------------------------------------------------------- /components/display/EpisodeCard.js: -------------------------------------------------------------------------------- 1 | import Image from "next/image"; 2 | import Link from "next/link"; 3 | import React from "react"; 4 | 5 | const EpisodeCard = (props) => { 6 | let { episodeinfo, seriesId } = props; 7 | let still_path = `https://image.tmdb.org/t/p/w342/${episodeinfo.still_path}`; 8 | if (episodeinfo.still_path == null) { 9 | still_path = "https://i.imgur.com/HIYYPtZ.png"; 10 | } 11 | return ( 12 | <div className="flex flex-col w-72 h-auto bg-grey m-3 "> 13 | <div className="hover:opacity-75"> 14 | <Link 15 | href="/series/[id]/season/[seasonid]/[epid]" 16 | as={`/series/${seriesId}/season/${episodeinfo.season_number}/${episodeinfo.episode_number}`} 17 | title={episodeinfo.name} 18 | > 19 | <Image 20 | src={still_path} 21 | alt={episodeinfo.name} 22 | className="rounded w-full h-full" 23 | width={288} 24 | height={176} 25 | unoptimized 26 | /> 27 | </Link> 28 | </div> 29 | <p className="my-2 text-center text-white text-sm font-light"> 30 | <span className="text-primary font-semibold"> 31 | S{episodeinfo.season_number} E{episodeinfo.episode_number}: 32 | </span>{" "} 33 | {episodeinfo.name} 34 | </p> 35 | </div> 36 | ); 37 | }; 38 | 39 | export default EpisodeCard; 40 | -------------------------------------------------------------------------------- /components/display/EpisodeDisplay.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import EpisodeCard from "./EpisodeCard"; 3 | 4 | const EpisodeDisplay = (props) => { 5 | let { EpisodeInfos, seriesId } = props; 6 | return ( 7 | <> 8 | <h1 className="text-white text-xl sm:text-2xl text-center my-2"> 9 | All Episodes 10 | </h1> 11 | <div className="w-full flex justify-center mt-3 mb-6"> 12 | <span className="w-4/5 bg-grey h-0.5"></span> 13 | </div> 14 | <div className="flex flex-wrap justify-center py-1 px-5"> 15 | {EpisodeInfos.map((episode, index) => { 16 | return ( 17 | <EpisodeCard 18 | key={index} 19 | episodeinfo={episode} 20 | seriesId={seriesId} 21 | /> 22 | ); 23 | })} 24 | </div> 25 | </> 26 | ); 27 | }; 28 | 29 | export default EpisodeDisplay; 30 | -------------------------------------------------------------------------------- /components/display/HomeCard.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Image from "next/image"; 3 | import Link from "next/link"; 4 | 5 | const HomeCards = (props) => { 6 | const { MovieCard } = props; 7 | let hrefVal = ""; 8 | let asVal = ""; 9 | let titleVal; 10 | if (MovieCard.media_type == "tv") { 11 | hrefVal = "/series/[id]"; 12 | asVal = `/series/${MovieCard.id}`; 13 | titleVal = MovieCard.name; 14 | } else { 15 | hrefVal = "/movie/[id]"; 16 | asVal = `/movie/${MovieCard.id}`; 17 | titleVal = MovieCard.title; 18 | } 19 | let poster_path = `https://image.tmdb.org/t/p/w342/${MovieCard.poster_path}`; 20 | if (MovieCard.poster_path == null) { 21 | poster_path = "https://i.imgur.com/wjVuAGb.png"; 22 | } 23 | return ( 24 | <div className="w-64 h-96 sm:w-52 sm:h-72 bg-grey m-3 hover:opacity-75 shadow-md"> 25 | <Link key={MovieCard.id} href={hrefVal} as={asVal} title={titleVal}> 26 | <Image 27 | src={poster_path} 28 | alt={titleVal} 29 | className="rounded w-full h-full" 30 | width={208} 31 | height={288} 32 | unoptimized 33 | /> 34 | </Link> 35 | </div> 36 | ); 37 | }; 38 | 39 | export default HomeCards; 40 | -------------------------------------------------------------------------------- /components/display/HomeDisplay.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import HomePagination from "../pagination/HomePagination"; 3 | import HomeCards from "./HomeCard"; 4 | 5 | const HomeDisplay = (props) => { 6 | let { movies, pageid } = props; 7 | return ( 8 | <> 9 | <div className="flex flex-wrap justify-center py-10 px-5"> 10 | {movies.map((movie) => { 11 | return <HomeCards key={movie.id} MovieCard={movie} />; 12 | })} 13 | </div> 14 | <HomePagination pageid={pageid} /> 15 | </> 16 | ); 17 | }; 18 | 19 | export default HomeDisplay; 20 | -------------------------------------------------------------------------------- /components/display/ImageCard.js: -------------------------------------------------------------------------------- 1 | import Image from "next/image"; 2 | import React from "react"; 3 | 4 | const ImageCard = (props) => { 5 | let { MovieDetail } = props; 6 | let poster_path = `https://image.tmdb.org/t/p/w342/${MovieDetail.poster_path}`; 7 | if (MovieDetail.poster_path == null) { 8 | poster_path = "https://i.imgur.com/wjVuAGb.png"; 9 | } 10 | return ( 11 | <div className="w-52 h-72 bg-grey m-3"> 12 | <Image 13 | src={poster_path} 14 | alt={MovieDetail.title || MovieDetail.name} 15 | className="rounded w-full h-full" 16 | width={208} 17 | height={288} 18 | unoptimized 19 | /> 20 | </div> 21 | ); 22 | }; 23 | 24 | export default ImageCard; 25 | -------------------------------------------------------------------------------- /components/display/MovieCards.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Image from "next/image"; 3 | import Link from "next/link"; 4 | 5 | const MovieCards = (props) => { 6 | const { MovieCard } = props; 7 | let poster_path = `https://image.tmdb.org/t/p/w342/${MovieCard.poster_path}`; 8 | if (MovieCard.poster_path == null) { 9 | poster_path = "https://i.imgur.com/wjVuAGb.png"; 10 | } 11 | return ( 12 | <div className="w-64 h-96 sm:w-52 sm:h-72 bg-grey m-3 hover:opacity-75 shadow-md"> 13 | <Link 14 | key={MovieCard.id} 15 | href="/movie/[id]" 16 | as={`/movie/${MovieCard.id}`} 17 | title={MovieCard.title} 18 | > 19 | <Image 20 | src={poster_path} 21 | alt={MovieCard.title} 22 | className="rounded w-full h-full" 23 | width={208} 24 | height={288} 25 | unoptimized 26 | /> 27 | </Link> 28 | </div> 29 | ); 30 | }; 31 | 32 | export default MovieCards; 33 | -------------------------------------------------------------------------------- /components/display/MovieDisplay.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import MovieCards from "./MovieCards"; 3 | import MoviePagination from "../pagination/MoviePagination"; 4 | 5 | const MovieDisplay = (props) => { 6 | let { movies,pageid } = props; 7 | 8 | return ( 9 | <> 10 | <div className="flex flex-wrap justify-center py-10 px-5"> 11 | { movies.map((movie) => { 12 | return <MovieCards key={movie.id} MovieCard={movie} />; 13 | })} 14 | </div> 15 | <MoviePagination pageid={pageid} /> 16 | </> 17 | ); 18 | }; 19 | 20 | export default MovieDisplay; 21 | -------------------------------------------------------------------------------- /components/display/SearchDisplay.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import HomeCards from "./HomeCard"; 3 | 4 | const SearchDisplay = (props) => { 5 | let { movies } = props; 6 | return ( 7 | <> 8 | <div className="flex flex-wrap justify-center py-10 px-5 min-h-screen"> 9 | {movies.map((movie) => { 10 | return <HomeCards key={movie.id} MovieCard={movie} />; 11 | })} 12 | </div> 13 | </> 14 | ); 15 | }; 16 | 17 | export default SearchDisplay; 18 | -------------------------------------------------------------------------------- /components/display/SeasonCard.js: -------------------------------------------------------------------------------- 1 | import Image from "next/image"; 2 | import Link from "next/link"; 3 | import React from "react"; 4 | 5 | const SeasonCard = (props) => { 6 | let { SeasonDetails, SeriesId } = props; 7 | let poster_path = `https://image.tmdb.org/t/p/w342/${SeasonDetails.poster_path}`; 8 | if (SeasonDetails.poster_path == null) { 9 | poster_path = "https://i.imgur.com/wjVuAGb.png"; 10 | } 11 | return ( 12 | <div className="flex flex-col items-center "> 13 | <div className="w-56 h-80 sm:w-52 sm:h-72 bg-grey m-3 hover:opacity-75 shadow-md"> 14 | <Link href="/series/[id]/season/[seasonid]" as={`/series/${SeriesId}/season/${SeasonDetails.season_number}`} title={SeasonDetails.name}> 15 | <Image 16 | src={poster_path} 17 | alt={SeasonDetails.name} 18 | className="rounded w-full h-full" 19 | width={208} 20 | height={288} 21 | unoptimized 22 | /> 23 | </Link> 24 | </div> 25 | <p className="text-center text-white text-lg font-semibold mb-5"> 26 | {SeasonDetails.name} 27 | </p> 28 | </div> 29 | ); 30 | }; 31 | 32 | export default SeasonCard; 33 | -------------------------------------------------------------------------------- /components/display/SeasonDisplay.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import SeasonCard from "./SeasonCard"; 3 | 4 | const SeasonDisplay = (props) => { 5 | let { SeasonCards, TvDetails } = props; 6 | return ( 7 | <> 8 | <h1 className="text-white text-xl sm:text-2xl text-center my-2"> 9 | All Seasons 10 | </h1> 11 | <div className="w-full flex justify-center mt-3 mb-6"> 12 | <span className="w-4/5 bg-grey h-0.5"></span> 13 | </div> 14 | 15 | <div className="flex flex-wrap justify-center py-1 px-5"> 16 | {SeasonCards.map((season, index) => { 17 | return ( 18 | <SeasonCard 19 | key={index} 20 | SeasonDetails={season} 21 | SeriesId={TvDetails.id} 22 | /> 23 | ); 24 | })} 25 | </div> 26 | </> 27 | ); 28 | }; 29 | 30 | export default SeasonDisplay; 31 | -------------------------------------------------------------------------------- /components/display/TvCards.js: -------------------------------------------------------------------------------- 1 | import Image from "next/image"; 2 | import Link from "next/link"; 3 | import React from "react"; 4 | 5 | const TvCards = (props) => { 6 | let { TvCard } = props; 7 | let poster_path = `https://image.tmdb.org/t/p/w342/${TvCard.poster_path}`; 8 | if (TvCard.poster_path == null) { 9 | poster_path = "https://i.imgur.com/wjVuAGb.png"; 10 | } 11 | return ( 12 | <div className="w-64 h-96 sm:w-52 sm:h-72 bg-grey m-3 hover:opacity-75 shadow-md"> 13 | <Link 14 | key={TvCard.id} 15 | href="/series/[id]" 16 | as={`/series/${TvCard.id}`} 17 | title={TvCard.name} 18 | > 19 | <Image 20 | src={poster_path} 21 | alt={TvCard.name} 22 | className="rounded w-full h-full" 23 | width={208} 24 | height={288} 25 | unoptimized 26 | /> 27 | </Link> 28 | </div> 29 | ); 30 | }; 31 | 32 | export default TvCards; 33 | -------------------------------------------------------------------------------- /components/display/TvDisplay.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import TvCards from "./TvCards"; 3 | import TvPagination from "../pagination/TvPagination"; 4 | 5 | const TvDisplay = (props) => { 6 | let { series, pageid} = props; 7 | return ( 8 | <> 9 | <div className="flex flex-wrap justify-center py-10 px-5"> 10 | { 11 | series.map((serie)=>{ 12 | return <TvCards key={serie.id} TvCard={serie} /> 13 | }) 14 | } 15 | </div> 16 | <TvPagination pageid={pageid} /> 17 | </> 18 | ); 19 | }; 20 | 21 | export default TvDisplay; 22 | -------------------------------------------------------------------------------- /components/filter/Filter.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Filter = () => { 4 | return ( 5 | <div className="m-3"> 6 | <select 7 | name="" 8 | id="" 9 | className="text-sm w-36 bg-transparent text-primary outline-none px-5 py-1 border-2 border-primary rounded-full" 10 | > 11 | <option value=""> 12 | Genre 13 | </option> 14 | <option value="">Action</option> 15 | <option value="">Adventure</option> 16 | <option value="">Thriller</option> 17 | <option value="">Comedy</option> 18 | </select> 19 | </div> 20 | ); 21 | }; 22 | 23 | export default Filter; 24 | -------------------------------------------------------------------------------- /components/filter/HomeFilter.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Filter from "./Filter"; 3 | 4 | 5 | const HomeFilter = () => { 6 | return ( 7 | <div className=" flex justify-center mt-5"> 8 | <div className="flex"> 9 | <Filter/> 10 | <Filter/> 11 | <Filter/> 12 | </div> 13 | </div> 14 | ); 15 | }; 16 | 17 | export default HomeFilter; 18 | -------------------------------------------------------------------------------- /components/footer/Footer.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Link from "next/link"; 3 | import { AiFillGithub } from "react-icons/ai"; 4 | 5 | const Footer = () => { 6 | return ( 7 | <div className=" bg-grey px-5 py-0 flex items-center justify-between mt-10"> 8 | <Link href="/"> 9 | <div className=""> 10 | <p 11 | className="border-light-white border text-xs sm:text-sm md:text-base 12 | w-28 md:w-32 py-1 my-5 text-light-white font-semibold 13 | text-center rounded-md" 14 | > 15 | CINEWORLD 16 | </p> 17 | </div> 18 | </Link> 19 | <p className="text-center text-light-white text-sm sm:text-base "> 20 | Cineworld © {new Date().getFullYear()}{" "} 21 | </p> 22 | 23 | <Link 24 | href="https://github.com/alanvarghesepaul22/CINEWORLD-NextJS" 25 | target="_blank" 26 | > 27 | <AiFillGithub className="text-3xl text-light-white mr-4 hover:text-gray-500" /> 28 | </Link> 29 | </div> 30 | ); 31 | }; 32 | 33 | export default Footer; 34 | -------------------------------------------------------------------------------- /components/info/EpisodeDetails.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | function formatDate(dateString) { 4 | const dateParts = dateString.split("-"); 5 | const year = parseInt(dateParts[0]); 6 | const month = parseInt(dateParts[1]) - 1; // Months are zero-indexed 7 | const day = parseInt(dateParts[2]); 8 | 9 | const date = new Date(year, month, day); 10 | 11 | const monthName = date.toLocaleString("default", { month: "long" }); 12 | const formattedDate = day + " " + monthName + " " + year; 13 | 14 | return formattedDate; 15 | } 16 | 17 | const EpisodeDetails = (props) => { 18 | let { episodeDetails } = props; 19 | let formattedDate = ""; 20 | if (episodeDetails.air_date != null) { 21 | formattedDate = formatDate(episodeDetails.air_date); 22 | } 23 | 24 | return ( 25 | <div className="text-white text-left w-4/5"> 26 | <h1 className="text-2xl sm:text-3xl text-center"> 27 | <span className="text-primary"> 28 | S{episodeDetails.season_number}E{episodeDetails.episode_number} 29 | </span>{" "} 30 | : {episodeDetails.name} 31 | </h1> 32 | 33 | <div className="flex w-full flex-wrap justify-center font-light text-slate-300 text-sm sm:text-base mt-3"> 34 | <p className="px-5">{formattedDate}</p> 35 | <p className="px-5">{episodeDetails.runtime} mins.</p> 36 | </div> 37 | 38 | <p className="text-light-white mt-5 text-justify text-base sm:text-lg"> 39 | {episodeDetails.overview} 40 | </p> 41 | </div> 42 | ); 43 | }; 44 | 45 | export default EpisodeDetails; 46 | -------------------------------------------------------------------------------- /components/info/EpisodeInfo.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import EpisodeDetails from "./EpisodeDetails"; 3 | import NextEpisode from "../pagination/NextEpisode"; 4 | 5 | const EpisodeInfo = (props) => { 6 | let { episodeDetails, seriesId, seasonData, seriesData } = props; 7 | let TotalEpisodes = seasonData.episodes.length; 8 | let TotalSeasons = seriesData.number_of_seasons; 9 | return ( 10 | <div> 11 | <div className="flex flex-row place-content-center items-center mb-10 mt-5"> 12 | <EpisodeDetails episodeDetails={episodeDetails} /> 13 | </div> 14 | <div className="pt-2 pb-8 flex justify-center"> 15 | <iframe 16 | className="w-4/5 aspect-video sm: pr-4 pl-4" 17 | src={`https://v2.vidsrc.me/embed/${seriesId}/${episodeDetails.season_number}-${episodeDetails.episode_number}`} 18 | frameBorder={`0`} 19 | allowFullScreen={true} 20 | ></iframe> 21 | {/* working */} 22 | {/* https://vidsrc.to/embed/tv/${seriesId}/${episodeDetails.season_number}/${episodeDetails.episode_number} */} 23 | {/* https://v2.vidsrc.me/embed/${seriesId}/${episodeDetails.season_number}-${episodeDetails.episode_number} */} 24 | {/* not working */} 25 | {/* https://olgply.xyz/${seriesId}/${episodeDetails.season_number}/${episodeDetails.episode_number} */} 26 | {/* src={`https://autoembed.to/tv/tmdb/${seriesId}-${episodeDetails.season_number}-${episodeDetails.episode_number}`} */} 27 | </div> 28 | <div className="flex w-full items-center justify-center"> 29 | <NextEpisode 30 | seriesId={seriesId} 31 | episodeDetails={episodeDetails} 32 | totalEpisodes={TotalEpisodes} 33 | totalSeasons={TotalSeasons} 34 | /> 35 | </div> 36 | </div> 37 | ); 38 | }; 39 | 40 | export default EpisodeInfo; 41 | -------------------------------------------------------------------------------- /components/info/MovieDetails.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { AiTwotoneStar } from "react-icons/ai"; 3 | 4 | const MovieDetails = (props) => { 5 | let { MovieDetail, genreArr } = props; 6 | return ( 7 | <div className="text-white flex flex-col items-center sm:items-start w-full sm:w-3/5 ml-0 sm:ml-4 px-7 sm:px-5"> 8 | <p className="bg-light-primary w-fit text-black px-2 font-bold text-sm rounded-sm mb-2"> 9 | MOVIE 10 | </p> 11 | 12 | <h1 className="text-2xl sm:text-3xl text-center sm:text-left"> 13 | {MovieDetail.title} 14 | </h1> 15 | 16 | <div className="flex flex-wrap justify-center mt-4 w-fit text-sm sm:text-base"> 17 | <div className="flex space-x-5"> 18 | <span>{MovieDetail.release_date.substr(0, 4)}</span> 19 | <span>{MovieDetail.runtime} mins.</span> 20 | <div className="flex items-center"> 21 | <AiTwotoneStar className="text-primary mr-1" /> 22 | <span>{MovieDetail.vote_average.toFixed(1)}</span> 23 | </div> 24 | </div> 25 | </div> 26 | 27 | <div className="flex flex-wrap justify-center sm:justify-start w-fit my-3 space-x-3 text-sm sm:text-base"> 28 | {genreArr.map((item, index) => { 29 | return ( 30 | <p 31 | key={index} 32 | className="text-light-primary border border-light-primary px-3 rounded-full w-fit my-1" 33 | > 34 | {item} 35 | </p> 36 | ); 37 | })} 38 | </div> 39 | <p className="text-light-white mt-5 text-justify text-base sm:text-lg">{MovieDetail.overview}</p> 40 | </div> 41 | ); 42 | }; 43 | 44 | export default MovieDetails; 45 | -------------------------------------------------------------------------------- /components/info/MovieInfo.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ImageCard from "../display/ImageCard"; 3 | import MovieDetails from "./MovieDetails"; 4 | 5 | const MovieInfo = (props) => { 6 | let { MovieDetail, genreArr, id } = props; 7 | return ( 8 | <div> 9 | <div className="flex flex-row flex-wrap place-content-center items-center mb-10 mt-5"> 10 | <ImageCard MovieDetail={MovieDetail} /> 11 | <MovieDetails MovieDetail={MovieDetail} genreArr={genreArr} /> 12 | </div> 13 | <div className="pt-2 pb-8 flex justify-center"> 14 | <iframe 15 | className="w-4/5 aspect-video" 16 | src={"https://v2.vidsrc.me/embed/" + id} 17 | title="YouTube video player" 18 | frameborder="0" 19 | allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" 20 | allowFullScreen={true} 21 | ></iframe> 22 | {/* working */} 23 | {/* https://v2.vidsrc.me/embed/ */} 24 | {/* https://vidsrc.to/embed/movie/ */} 25 | 26 | {/* not working */} 27 | {/* https://olgply.xyz/ */} 28 | {/* src={"https://autoembed.to/movie/tmdb/" + id} */} 29 | </div> 30 | </div> 31 | ); 32 | }; 33 | 34 | export default MovieInfo; 35 | -------------------------------------------------------------------------------- /components/info/SeasonDetails.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const SeasonDetails = (props) => { 4 | let { SeasonInfos } = props; 5 | let episodes = SeasonInfos.episodes; 6 | return ( 7 | <div className="text-white flex flex-col items-center sm:items-start w-full sm:w-3/5 ml-0 sm:ml-4 px-7 sm:px-5"> 8 | <h1 className="text-2xl sm:text-3xl text-center sm:text-left"> 9 | {SeasonInfos.name} 10 | </h1> 11 | 12 | <div className="flex flex-wrap justify-center mt-4 w-fit text-sm sm:text-base"> 13 | <div className="flex space-x-5"> 14 | <span>{SeasonInfos.air_date.substr(0, 4)}</span> 15 | <span>{episodes.length} Episodes</span> 16 | </div> 17 | </div> 18 | 19 | <p className="text-light-white mt-5 text-justify text-base sm:text-lg">{SeasonInfos.overview}</p> 20 | </div> 21 | ); 22 | }; 23 | 24 | export default SeasonDetails; 25 | -------------------------------------------------------------------------------- /components/info/SeasonInfo.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ImageCard from "../display/ImageCard"; 3 | import SeasonDetails from "./SeasonDetails"; 4 | import EpisodeDisplay from "../display/EpisodeDisplay"; 5 | 6 | const SeasonInfo = (props) => { 7 | let {SeasonInfos,id}=props; 8 | let episodes = SeasonInfos.episodes; 9 | return ( 10 | <div> 11 | <div className="flex flex-row flex-wrap place-content-center items-center mb-10 mt-5"> 12 | <ImageCard MovieDetail={SeasonInfos} /> 13 | <SeasonDetails SeasonInfos={SeasonInfos} /> 14 | </div> 15 | 16 | <div> 17 | <EpisodeDisplay EpisodeInfos={episodes} seriesId={id} /> 18 | </div> 19 | </div> 20 | ); 21 | }; 22 | 23 | export default SeasonInfo; 24 | -------------------------------------------------------------------------------- /components/info/TvDetails.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { AiTwotoneStar } from "react-icons/ai"; 3 | 4 | const TvDetails = (props) => { 5 | let { TvDetail, genreArr, SeasonNums, EpisodeNums } = props; 6 | 7 | return ( 8 | <div className="text-white flex flex-col items-center sm:items-start w-full sm:w-3/5 ml-0 sm:ml-4 px-7 sm:px-5"> 9 | <p className="w-fit bg-light-primary text-black px-2 font-bold text-sm rounded-sm mb-2"> 10 | TV 11 | </p> 12 | 13 | <h1 className="text-2xl sm:text-3xl text-center sm:text-left"> 14 | {TvDetail.name} 15 | </h1> 16 | 17 | <div className="flex flex-wrap justify-center mt-4 w-fit text-sm sm:text-base"> 18 | <div className="flex space-x-5"> 19 | <span>{TvDetail.first_air_date.substr(0, 4)}</span> 20 | <span>{SeasonNums} Seasons</span> 21 | </div> 22 | <div className="flex space-x-5 mx-4"> 23 | <span>{EpisodeNums} Episodes</span> 24 | <div className="flex items-center"> 25 | <AiTwotoneStar className="text-primary mr-1" /> 26 | <span>{TvDetail.vote_average.toFixed(1)}</span> 27 | </div> 28 | </div> 29 | </div> 30 | <div className="flex flex-wrap justify-center sm:justify-start w-fit my-3 space-x-3 text-sm sm:text-base"> 31 | {genreArr.map((item, index) => { 32 | return ( 33 | <p 34 | key={index} 35 | className="text-light-primary border border-light-primary px-3 rounded-full w-fit my-1" 36 | > 37 | {item} 38 | </p> 39 | ); 40 | })} 41 | </div> 42 | <p className="text-light-white mt-5 text-justify text-base sm:text-lg"> 43 | {TvDetail.overview} 44 | </p> 45 | </div> 46 | ); 47 | }; 48 | 49 | export default TvDetails; 50 | -------------------------------------------------------------------------------- /components/info/TvInfo.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ImageCard from "../display/ImageCard"; 3 | import TvDetails from "./TvDetails"; 4 | import SeasonDisplay from "../display/SeasonDisplay"; 5 | 6 | const TvInfo = (props) => { 7 | let {TvDetail,genreArr,id}=props 8 | let seasons=TvDetail.seasons 9 | 10 | return ( 11 | <div> 12 | <div className="flex flex-row flex-wrap place-content-center items-center mb-10 mt-5"> 13 | <ImageCard MovieDetail={TvDetail} /> 14 | <TvDetails TvDetail={TvDetail} genreArr={genreArr} SeasonNums={TvDetail.number_of_seasons} EpisodeNums={TvDetail.number_of_episodes} /> 15 | </div> 16 | 17 | <div> 18 | <SeasonDisplay key={TvDetail.id} SeasonCards={seasons} TvDetails={TvDetail}/> 19 | </div> 20 | </div> 21 | ); 22 | }; 23 | 24 | export default TvInfo; 25 | -------------------------------------------------------------------------------- /components/navbar/Header.js: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import Link from "next/link"; 3 | import React, { useState } from "react"; 4 | import { BiSearch } from "react-icons/bi"; 5 | import Logo from "./Logo"; 6 | 7 | const Header = () => { 8 | const [isOpen, setIsOpen] = useState(false); 9 | 10 | const toggleNavbar = () => { 11 | setIsOpen(!isOpen); 12 | }; 13 | 14 | return ( 15 | <> 16 | <nav className=" w-full fixed top-0 z-[100] bg-navbg shadow-sm shadow-slate-50/5 md:shadow-none"> 17 | <div className="max-w-7xl flex items-center justify-between mx-auto px-4 sm:px-6 lg:px-8"> 18 | {/* logo */} 19 | <Logo /> 20 | 21 | {/* links */} 22 | 23 | <div className="hidden md:block"> 24 | <ul className="list-none flex text-white space-x-10 text-lg "> 25 | <li className="hover:text-primary"> 26 | <Link href="/">Home</Link> 27 | </li> 28 | <li className="hover:text-primary"> 29 | <Link href="/movie">Movies</Link> 30 | </li> 31 | <li className="hover:text-primary"> 32 | <Link href="/series">Series</Link> 33 | </li> 34 | </ul> 35 | </div> 36 | 37 | <div className="flex items-center"> 38 | {/* searchbar */} 39 | <div className="mr-5 md:mr-0 sm:mr-10 "> 40 | <Link href="/search"> 41 | <BiSearch className="text-xl text-white cursor-pointer hover:text-primary" /> 42 | </Link> 43 | </div> 44 | 45 | {/* hamburger button */} 46 | 47 | <div className="-mr-2 flex md:hidden"> 48 | <button 49 | onClick={toggleNavbar} 50 | type="button" 51 | className="inline-flex items-center justify-center p-2 text-white hover:text-light-white focus:outline-none" 52 | > 53 | <span className="sr-only">Menu</span> 54 | {!isOpen ? ( 55 | <svg 56 | className="block h-6 w-6" 57 | xmlns="http://www.w3.org/2000/svg" 58 | fill="none" 59 | viewBox="0 0 24 24" 60 | stroke="currentColor" 61 | aria-hidden="true" 62 | > 63 | <path 64 | strokeLinecap="round" 65 | strokeLinejoin="round" 66 | strokeWidth={2} 67 | d="M4 6h16M4 12h16M4 18h16" 68 | /> 69 | </svg> 70 | ) : ( 71 | <svg 72 | className="block h-6 w-6" 73 | xmlns="http://www.w3.org/2000/svg" 74 | fill="none" 75 | viewBox="0 0 24 24" 76 | stroke="currentColor" 77 | aria-hidden="true" 78 | > 79 | <path 80 | strokeLinecap="round" 81 | strokeLinejoin="round" 82 | strokeWidth={2} 83 | d="M6 18L18 6M6 6l12 12" 84 | /> 85 | </svg> 86 | )} 87 | </button> 88 | </div> 89 | </div> 90 | </div> 91 | 92 | {isOpen && ( 93 | <div className="md:hidden "> 94 | <div> 95 | <ul className="list-none text-white space-y-4 mx-5 mb-3 text-base"> 96 | <li className="py-2 px-5 rounded hover:text-primary hover:bg-grey transition-all border-b border-grey"> 97 | <Link href="/">Home</Link> 98 | </li> 99 | <li className="py-2 px-5 rounded hover:text-primary hover:bg-grey transition-all border-b border-grey"> 100 | <Link href="/movie">Movies</Link> 101 | </li> 102 | <li className="py-2 px-5 rounded hover:text-primary hover:bg-grey transition-all"> 103 | <Link href="/series">Series</Link> 104 | </li> 105 | </ul> 106 | </div> 107 | </div> 108 | )} 109 | </nav> 110 | </> 111 | ); 112 | }; 113 | 114 | export default Header; 115 | -------------------------------------------------------------------------------- /components/navbar/Logo.js: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import React from "react"; 3 | 4 | const Logo = () => { 5 | return ( 6 | <Link 7 | href="/" 8 | className="flex justify-center items-center w-28 md:w-32 text-sm 9 | md:text-base my-5 font-extrabold text-center" 10 | > 11 | <div className="bg-primary py-1 px-2 border border-primary "> 12 | <p>CINE</p> 13 | </div> 14 | <div className="border border-primary py-1 text-primary px-2 "> 15 | <p>WORLD</p> 16 | </div> 17 | </Link> 18 | ); 19 | }; 20 | 21 | export default Logo; 22 | -------------------------------------------------------------------------------- /components/pagination/HomePagination.js: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import React from "react"; 3 | 4 | const HomePagination = (props) => { 5 | let { pageid } = props; 6 | let pagenum = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 7 | if (isNaN(pageid) == true) { 8 | pageid = 1; 9 | } 10 | return ( 11 | <div className="flex justify-center items-center list-none flex-wrap"> 12 | <li className="mb-10 md:mb-0"> 13 | <Link 14 | href="/all/trending/page/[pageid]" 15 | as={`/all/trending/page/${Number(pageid) - 1}`} 16 | className="bg-grey p-3 mx-2 text-light-white rounded-md stroke-2 hover:opacity-70 hover:text-white" 17 | > 18 | {`<`} 19 | </Link> 20 | </li> 21 | 22 | {pagenum && 23 | pagenum.map((element, index) => { 24 | return ( 25 | <li key={index} className="mb-10 md:mb-0"> 26 | <Link 27 | href="/all/trending/page/[pageid]" 28 | as={`/all/trending/page/${element}`} 29 | className="bg-grey p-3 mx-2 text-light-white rounded-md stroke-2 hover:opacity-70 hover:text-white" 30 | > 31 | {`${element}`} 32 | </Link> 33 | </li> 34 | ); 35 | })} 36 | 37 | <li className="mb-10 md:mb-0"> 38 | <Link 39 | href="/all/trending/page/[pageid]" 40 | as={`/all/trending/page/${Number(pageid) + 1}`} 41 | className="bg-grey p-3 mx-2 text-light-white rounded-md stroke-2 hover:opacity-70 hover:text-white" 42 | > 43 | {`>`} 44 | </Link> 45 | </li> 46 | </div> 47 | ); 48 | }; 49 | 50 | export default HomePagination; 51 | -------------------------------------------------------------------------------- /components/pagination/MoviePagination.js: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import React from "react"; 3 | 4 | const MoviePagination = (props) => { 5 | let { pageid } = props; 6 | let pagenum = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 7 | if (isNaN(pageid) == true) { 8 | pageid = 1; 9 | } 10 | return ( 11 | <div className="flex justify-center items-center list-none flex-wrap"> 12 | <li className="mb-10 md:mb-0"> 13 | <Link 14 | href="/movie/popular/page/[pageid]" 15 | as={`/movie/popular/page/${Number(pageid) - 1}`} 16 | className="bg-grey p-3 mx-2 text-light-white rounded-md stroke-2 hover:opacity-70 hover:text-white" 17 | > 18 | {`<`} 19 | </Link> 20 | </li> 21 | 22 | {pagenum && 23 | pagenum.map((element, index) => { 24 | return ( 25 | <li key={index} className="mb-10 md:mb-0"> 26 | <Link 27 | href="/movie/popular/page/[pageid]" 28 | as={`/movie/popular/page/${element}`} 29 | className="bg-grey p-3 mx-2 text-light-white rounded-md stroke-2 hover:opacity-70 hover:text-white" 30 | > 31 | {`${element}`} 32 | </Link> 33 | </li> 34 | ); 35 | })} 36 | 37 | <li className="mb-10 md:mb-0"> 38 | <Link 39 | href="/movie/popular/page/[pageid]" 40 | as={`/movie/popular/page/${Number(pageid) + 1}`} 41 | className="bg-grey p-3 mx-2 text-light-white rounded-md stroke-2 hover:opacity-70 hover:text-white" 42 | > 43 | {`>`} 44 | </Link> 45 | </li> 46 | </div> 47 | ); 48 | }; 49 | 50 | export default MoviePagination; 51 | -------------------------------------------------------------------------------- /components/pagination/NextEpisode.js: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import React from "react"; 3 | import { BiSkipPrevious, BiSkipNext } from "react-icons/bi"; 4 | 5 | const NextEpisode = (props) => { 6 | let { episodeDetails, totalEpisodes, seriesId, totalSeasons } = props; 7 | return ( 8 | <div className="flex w-full md:w-2/3 items-center justify-between px-10"> 9 | <PrevEpisodeBtn episodeDetails={episodeDetails} seriesId={seriesId} /> 10 | <NextEpisodeBtn 11 | episodeDetails={episodeDetails} 12 | totalEpisodes={totalEpisodes} 13 | seriesId={seriesId} 14 | totalSeasons={totalSeasons} 15 | /> 16 | </div> 17 | ); 18 | }; 19 | 20 | export default NextEpisode; 21 | 22 | function NextEpisodeBtn(props) { 23 | let { episodeDetails, totalEpisodes, seriesId, totalSeasons } = props; 24 | return ( 25 | <> 26 | {Number(episodeDetails.episode_number) == totalEpisodes ? ( 27 | <Link 28 | href={`/series/[id]/season/[seasonid]`} 29 | as={`/series/${seriesId}/season/${ 30 | Number(episodeDetails.season_number) + 1 <= totalSeasons 31 | ? Number(episodeDetails.season_number) + 1 32 | : Number(episodeDetails.season_number) 33 | }`} 34 | className={`${ 35 | Number(episodeDetails.season_number) == totalSeasons 36 | ? `pointer-events-none bg-grey text-gray-400/25` 37 | : `bg-grey hover:bg-grey/75 text-primary/90` 38 | } transition-all px-3 py-1 flex items-center justify-center rounded font-semibold text-xs md:text-sm gap-1`} 39 | > 40 | <p>Next Season</p> 41 | <BiSkipNext className="text-lg md:text-2xl" /> 42 | </Link> 43 | ) : ( 44 | <Link 45 | href={`/series/[id]/season/[seasonid]/[epid]`} 46 | as={`/series/${seriesId}/season/${episodeDetails.season_number}/${ 47 | Number(episodeDetails.episode_number) + 1 <= totalEpisodes 48 | ? Number(episodeDetails.episode_number) + 1 49 | : Number(episodeDetails.episode_number) 50 | }`} 51 | className={`${ 52 | Number(episodeDetails.episode_number) == totalEpisodes 53 | ? `pointer-events-none bg-grey text-gray-400/25` 54 | : `bg-grey hover:bg-grey/75 text-primary/90` 55 | } transition-all px-3 py-1 flex items-center justify-center rounded font-semibold text-xs md:text-sm gap-1`} 56 | > 57 | <p>Next Episode</p> 58 | <BiSkipNext className="text-lg md:text-2xl" /> 59 | </Link> 60 | )} 61 | </> 62 | ); 63 | } 64 | 65 | function PrevEpisodeBtn(props) { 66 | let { episodeDetails, seriesId } = props; 67 | return ( 68 | <> 69 | {Number(episodeDetails.episode_number) == 1 ? ( 70 | <Link 71 | href={`/series/[id]/season/[seasonid]`} 72 | as={`/series/${seriesId}/season/${ 73 | Number(episodeDetails.season_number) - 1 < 1 74 | ? Number(episodeDetails.season_number) 75 | : Number(episodeDetails.season_number) - 1 76 | }`} 77 | className={`${ 78 | Number(episodeDetails.season_number) == 1 79 | ? `pointer-events-none bg-grey text-gray-400/25` 80 | : `bg-grey hover:bg-grey/75 text-primary/90` 81 | } transition-all px-3 py-1 flex items-center justify-center rounded font-semibold text-xs md:text-sm gap-1`} 82 | > 83 | <BiSkipPrevious className="text-lg md:text-2xl" /> 84 | <p>Prev Season</p> 85 | </Link> 86 | ) : ( 87 | <Link 88 | href={`/series/[id]/season/[seasonid]/[epid]`} 89 | as={`/series/${seriesId}/season/${episodeDetails.season_number}/${ 90 | Number(episodeDetails.episode_number) - 1 < 1 91 | ? Number(episodeDetails.episode_number) 92 | : Number(episodeDetails.episode_number) - 1 93 | }`} 94 | className={`${ 95 | Number(episodeDetails.episode_number) == 1 96 | ? `pointer-events-none bg-grey text-gray-400/25` 97 | : `bg-grey hover:bg-grey/75 text-primary/90` 98 | } transition-all px-3 py-1 flex items-center justify-center rounded font-semibold text-xs md:text-sm gap-1`} 99 | > 100 | <BiSkipPrevious className="text-lg md:text-2xl" /> 101 | <p>Prev Episode</p> 102 | </Link> 103 | )} 104 | </> 105 | ); 106 | } 107 | -------------------------------------------------------------------------------- /components/pagination/TvPagination.js: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import React from "react"; 3 | 4 | const TvPagination = (props) => { 5 | let { pageid } = props; 6 | let pagenum = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 7 | if (isNaN(pageid) == true) { 8 | pageid = 1; 9 | } 10 | return ( 11 | <div className="flex justify-center items-center list-none flex-wrap"> 12 | <li className="mb-10 md:mb-0"> 13 | <Link 14 | href="/series/trending/page/[pageid]" 15 | as={`/series/trending/page/${Number(pageid) - 1}`} 16 | className="bg-grey p-3 mx-2 text-light-white rounded-md stroke-2 hover:opacity-70 hover:text-white" 17 | > 18 | {`<`} 19 | </Link> 20 | </li> 21 | 22 | {pagenum && 23 | pagenum.map((element, index) => { 24 | return ( 25 | <li key={index} className="mb-10 md:mb-0"> 26 | <Link 27 | href="/series/trending/page/[pageid]" 28 | as={`/series/trending/page/${element}`} 29 | className="bg-grey p-3 mx-2 text-light-white rounded-md stroke-2 hover:opacity-70 hover:text-white" 30 | > 31 | {`${element}`} 32 | </Link> 33 | </li> 34 | ); 35 | })} 36 | 37 | <li className="mb-10 md:mb-0"> 38 | <Link 39 | href="/series/trending/page/[pageid]" 40 | as={`/series/trending/page/${Number(pageid) + 1}`} 41 | className="bg-grey p-3 mx-2 text-light-white rounded-md stroke-2 hover:opacity-70 hover:text-white" 42 | > 43 | {`>`} 44 | </Link> 45 | </li> 46 | </div> 47 | ); 48 | }; 49 | 50 | export default TvPagination; 51 | -------------------------------------------------------------------------------- /components/searchbar/SearchBar.js: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import React, { useEffect, useRef, useState } from "react"; 3 | import { BiSearch } from "react-icons/bi"; 4 | 5 | const SearchBar = ({ onSearch, onTyping }) => { 6 | const searchBarRef = useRef(null); 7 | const [searchValue, setSearchValue] = useState(""); 8 | 9 | const handleSearch = () => { 10 | onSearch(searchValue); 11 | }; 12 | 13 | const handleTyping = (e) => { 14 | e.preventDefault(); 15 | setSearchValue(e.target.value); 16 | onTyping(searchValue); 17 | }; 18 | 19 | 20 | useEffect(() => { 21 | searchBarRef?.current?.focus?.(); 22 | }, []) 23 | 24 | return ( 25 | <> 26 | <div className="flex place-content-center mt-10 mx-10"> 27 | <label htmlFor="search" className="sr-only"> 28 | Search 29 | </label> 30 | <input 31 | value={searchValue} 32 | type="text" 33 | name="search" 34 | id="search" 35 | placeholder="Search...." 36 | className="text-light-white outline-none rounded-l-md bg-grey py-3 px-5 w-96" 37 | onChange={handleTyping} 38 | autoComplete="off" 39 | ref={searchBarRef} 40 | /> 41 | <div 42 | aria-label="Search" 43 | className="py-3 px-5 bg-primary rounded-r-md border-none" 44 | onClick={handleSearch} 45 | > 46 | <BiSearch className="text-2xl text-bg-black cursor-pointer stroke-0" /> 47 | </div> 48 | </div> 49 | </> 50 | ); 51 | }; 52 | 53 | export default SearchBar; 54 | -------------------------------------------------------------------------------- /components/title/MoviesTitle.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const MoviesTitle = () => { 4 | return ( 5 | <div className=" flex place-content-center mt-5 mx-5"> 6 | <h1 className="w-full md:w-1/2 lg:w-1/3 text-white text-xl sm:text-2xl md:text-3xl text-center font-semibold"> 7 | All 8 | <span className="text-primary"> Movies</span> 9 | </h1> 10 | </div> 11 | ); 12 | }; 13 | 14 | export default MoviesTitle; 15 | -------------------------------------------------------------------------------- /components/title/SearchTitle.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const SearchTitle = () => { 4 | return ( 5 | <div className=" flex place-content-center mt-5 mx-5"> 6 | <h1 className="w-full md:w-1/2 lg:w-1/3 text-white text-xl sm:text-2xl md:text-3xl text-center font-semibold"> 7 | Explore, Discover, and 8 | <span className="text-primary"> Watch</span> 9 | </h1> 10 | </div> 11 | ); 12 | }; 13 | 14 | export default SearchTitle; 15 | -------------------------------------------------------------------------------- /components/title/Title.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Title = () => { 4 | return ( 5 | <div className="flex place-content-center mt-5 mx-5"> 6 | <h1 className="w-full md:w-1/2 lg:w-1/3 text-white text-xl sm:text-2xl md:text-3xl text-center font-semibold"> 7 | <span className="text-primary">Cine</span>matic adventures await, start{" "} 8 | <span className="text-primary">stream</span>ing now 9 | </h1> 10 | </div> 11 | ); 12 | }; 13 | 14 | export default Title; 15 | -------------------------------------------------------------------------------- /components/title/TvTitle.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const TvTitle = () => { 4 | return ( 5 | <div className=" flex place-content-center mt-5 mx-5"> 6 | <h1 className="w-full md:w-1/2 lg:w-1/3 text-white text-xl sm:text-2xl md:text-3xl text-center font-semibold"> 7 | TV Shows &<span className="text-primary"> Series</span> 8 | </h1> 9 | </div> 10 | ); 11 | }; 12 | 13 | export default TvTitle; 14 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "@/*": ["./*"] 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | images: { 4 | domains: ['image.tmdb.org', 'imgur.com', 'arc.io', 'i.imgur.com'], 5 | }, 6 | env: { 7 | API_KEY: process.env.API_KEY, 8 | }, 9 | } 10 | 11 | module.exports = nextConfig 12 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cineworld-nextjs", 3 | "version": "0.1.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "cineworld-nextjs", 9 | "version": "0.1.0", 10 | "dependencies": { 11 | "autoprefixer": "10.4.14", 12 | "dotenv": "^16.3.1", 13 | "next": "13.4.7", 14 | "postcss": "8.4.24", 15 | "react": "18.2.0", 16 | "react-dom": "18.2.0", 17 | "react-icons": "^4.10.1", 18 | "tailwindcss": "3.3.2", 19 | "use-debounce": "^9.0.4" 20 | }, 21 | "devDependencies": { 22 | "@swc/cli": "^0.3.5", 23 | "@swc/core": "^1.3.107" 24 | } 25 | }, 26 | "node_modules/@alloc/quick-lru": { 27 | "version": "5.2.0", 28 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 29 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 30 | "engines": { 31 | "node": ">=10" 32 | }, 33 | "funding": { 34 | "url": "https://github.com/sponsors/sindresorhus" 35 | } 36 | }, 37 | "node_modules/@jridgewell/gen-mapping": { 38 | "version": "0.3.3", 39 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 40 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 41 | "dependencies": { 42 | "@jridgewell/set-array": "^1.0.1", 43 | "@jridgewell/sourcemap-codec": "^1.4.10", 44 | "@jridgewell/trace-mapping": "^0.3.9" 45 | }, 46 | "engines": { 47 | "node": ">=6.0.0" 48 | } 49 | }, 50 | "node_modules/@jridgewell/resolve-uri": { 51 | "version": "3.1.0", 52 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 53 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 54 | "engines": { 55 | "node": ">=6.0.0" 56 | } 57 | }, 58 | "node_modules/@jridgewell/set-array": { 59 | "version": "1.1.2", 60 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 61 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 62 | "engines": { 63 | "node": ">=6.0.0" 64 | } 65 | }, 66 | "node_modules/@jridgewell/sourcemap-codec": { 67 | "version": "1.4.15", 68 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 69 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" 70 | }, 71 | "node_modules/@jridgewell/trace-mapping": { 72 | "version": "0.3.18", 73 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", 74 | "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", 75 | "dependencies": { 76 | "@jridgewell/resolve-uri": "3.1.0", 77 | "@jridgewell/sourcemap-codec": "1.4.14" 78 | } 79 | }, 80 | "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { 81 | "version": "1.4.14", 82 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 83 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" 84 | }, 85 | "node_modules/@mole-inc/bin-wrapper": { 86 | "version": "8.0.1", 87 | "resolved": "https://registry.npmjs.org/@mole-inc/bin-wrapper/-/bin-wrapper-8.0.1.tgz", 88 | "integrity": "sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==", 89 | "dev": true, 90 | "dependencies": { 91 | "bin-check": "^4.1.0", 92 | "bin-version-check": "^5.0.0", 93 | "content-disposition": "^0.5.4", 94 | "ext-name": "^5.0.0", 95 | "file-type": "^17.1.6", 96 | "filenamify": "^5.0.2", 97 | "got": "^11.8.5", 98 | "os-filter-obj": "^2.0.0" 99 | }, 100 | "engines": { 101 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 102 | } 103 | }, 104 | "node_modules/@next/env": { 105 | "version": "13.4.7", 106 | "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.7.tgz", 107 | "integrity": "sha512-ZlbiFulnwiFsW9UV1ku1OvX/oyIPLtMk9p/nnvDSwI0s7vSoZdRtxXNsaO+ZXrLv/pMbXVGq4lL8TbY9iuGmVw==" 108 | }, 109 | "node_modules/@next/swc-darwin-arm64": { 110 | "version": "13.4.7", 111 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.7.tgz", 112 | "integrity": "sha512-VZTxPv1b59KGiv/pZHTO5Gbsdeoxcj2rU2cqJu03btMhHpn3vwzEK0gUSVC/XW96aeGO67X+cMahhwHzef24/w==", 113 | "cpu": [ 114 | "arm64" 115 | ], 116 | "optional": true, 117 | "os": [ 118 | "darwin" 119 | ], 120 | "engines": { 121 | "node": ">= 10" 122 | } 123 | }, 124 | "node_modules/@next/swc-darwin-x64": { 125 | "version": "13.4.7", 126 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.7.tgz", 127 | "integrity": "sha512-gO2bw+2Ymmga+QYujjvDz9955xvYGrWofmxTq7m70b9pDPvl7aDFABJOZ2a8SRCuSNB5mXU8eTOmVVwyp/nAew==", 128 | "cpu": [ 129 | "x64" 130 | ], 131 | "optional": true, 132 | "os": [ 133 | "darwin" 134 | ], 135 | "engines": { 136 | "node": ">= 10" 137 | } 138 | }, 139 | "node_modules/@next/swc-linux-arm64-gnu": { 140 | "version": "13.4.7", 141 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.7.tgz", 142 | "integrity": "sha512-6cqp3vf1eHxjIDhEOc7Mh/s8z1cwc/l5B6ZNkOofmZVyu1zsbEM5Hmx64s12Rd9AYgGoiCz4OJ4M/oRnkE16/Q==", 143 | "cpu": [ 144 | "arm64" 145 | ], 146 | "optional": true, 147 | "os": [ 148 | "linux" 149 | ], 150 | "engines": { 151 | "node": ">= 10" 152 | } 153 | }, 154 | "node_modules/@next/swc-linux-arm64-musl": { 155 | "version": "13.4.7", 156 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.7.tgz", 157 | "integrity": "sha512-T1kD2FWOEy5WPidOn1si0rYmWORNch4a/NR52Ghyp4q7KyxOCuiOfZzyhVC5tsLIBDH3+cNdB5DkD9afpNDaOw==", 158 | "cpu": [ 159 | "arm64" 160 | ], 161 | "optional": true, 162 | "os": [ 163 | "linux" 164 | ], 165 | "engines": { 166 | "node": ">= 10" 167 | } 168 | }, 169 | "node_modules/@next/swc-linux-x64-gnu": { 170 | "version": "13.4.7", 171 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.7.tgz", 172 | "integrity": "sha512-zaEC+iEiAHNdhl6fuwl0H0shnTzQoAoJiDYBUze8QTntE/GNPfTYpYboxF5LRYIjBwETUatvE0T64W6SKDipvg==", 173 | "cpu": [ 174 | "x64" 175 | ], 176 | "optional": true, 177 | "os": [ 178 | "linux" 179 | ], 180 | "engines": { 181 | "node": ">= 10" 182 | } 183 | }, 184 | "node_modules/@next/swc-linux-x64-musl": { 185 | "version": "13.4.7", 186 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.7.tgz", 187 | "integrity": "sha512-X6r12F8d8SKAtYJqLZBBMIwEqcTRvUdVm+xIq+l6pJqlgT2tNsLLf2i5Cl88xSsIytBICGsCNNHd+siD2fbWBA==", 188 | "cpu": [ 189 | "x64" 190 | ], 191 | "optional": true, 192 | "os": [ 193 | "linux" 194 | ], 195 | "engines": { 196 | "node": ">= 10" 197 | } 198 | }, 199 | "node_modules/@next/swc-win32-arm64-msvc": { 200 | "version": "13.4.7", 201 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.7.tgz", 202 | "integrity": "sha512-NPnmnV+vEIxnu6SUvjnuaWRglZzw4ox5n/MQTxeUhb5iwVWFedolPFebMNwgrWu4AELwvTdGtWjqof53AiWHcw==", 203 | "cpu": [ 204 | "arm64" 205 | ], 206 | "optional": true, 207 | "os": [ 208 | "win32" 209 | ], 210 | "engines": { 211 | "node": ">= 10" 212 | } 213 | }, 214 | "node_modules/@next/swc-win32-ia32-msvc": { 215 | "version": "13.4.7", 216 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.7.tgz", 217 | "integrity": "sha512-6Hxijm6/a8XqLQpOOf/XuwWRhcuc/g4rBB2oxjgCMuV9Xlr2bLs5+lXyh8w9YbAUMYR3iC9mgOlXbHa79elmXw==", 218 | "cpu": [ 219 | "ia32" 220 | ], 221 | "optional": true, 222 | "os": [ 223 | "win32" 224 | ], 225 | "engines": { 226 | "node": ">= 10" 227 | } 228 | }, 229 | "node_modules/@next/swc-win32-x64-msvc": { 230 | "version": "13.4.7", 231 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.7.tgz", 232 | "integrity": "sha512-sW9Yt36Db1nXJL+mTr2Wo0y+VkPWeYhygvcHj1FF0srVtV+VoDjxleKtny21QHaG05zdeZnw2fCtf2+dEqgwqA==", 233 | "cpu": [ 234 | "x64" 235 | ], 236 | "optional": true, 237 | "os": [ 238 | "win32" 239 | ], 240 | "engines": { 241 | "node": ">= 10" 242 | } 243 | }, 244 | "node_modules/@nodelib/fs.scandir": { 245 | "version": "2.1.5", 246 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 247 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 248 | "dependencies": { 249 | "@nodelib/fs.stat": "2.0.5", 250 | "run-parallel": "^1.1.9" 251 | }, 252 | "engines": { 253 | "node": ">= 8" 254 | } 255 | }, 256 | "node_modules/@nodelib/fs.stat": { 257 | "version": "2.0.5", 258 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 259 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 260 | "engines": { 261 | "node": ">= 8" 262 | } 263 | }, 264 | "node_modules/@nodelib/fs.walk": { 265 | "version": "1.2.8", 266 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 267 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 268 | "dependencies": { 269 | "@nodelib/fs.scandir": "2.1.5", 270 | "fastq": "^1.6.0" 271 | }, 272 | "engines": { 273 | "node": ">= 8" 274 | } 275 | }, 276 | "node_modules/@sindresorhus/is": { 277 | "version": "4.6.0", 278 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 279 | "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", 280 | "dev": true, 281 | "engines": { 282 | "node": ">=10" 283 | }, 284 | "funding": { 285 | "url": "https://github.com/sindresorhus/is?sponsor=1" 286 | } 287 | }, 288 | "node_modules/@swc/cli": { 289 | "version": "0.3.5", 290 | "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.3.5.tgz", 291 | "integrity": "sha512-YWt6J7KrbGxvtuktFzsXibr0Npi/VhTdtA+rVkRty0A1KfQD18o2Tt9JMRlKTpH40ZMFygJf/Up6FxCFdFjV5g==", 292 | "dev": true, 293 | "dependencies": { 294 | "@mole-inc/bin-wrapper": "^8.0.1", 295 | "commander": "^7.1.0", 296 | "fast-glob": "^3.2.5", 297 | "minimatch": "^9.0.3", 298 | "piscina": "^4.3.0", 299 | "semver": "^7.3.8", 300 | "slash": "3.0.0", 301 | "source-map": "^0.7.3" 302 | }, 303 | "bin": { 304 | "spack": "bin/spack.js", 305 | "swc": "bin/swc.js", 306 | "swcx": "bin/swcx.js" 307 | }, 308 | "engines": { 309 | "node": ">= 16.14.0" 310 | }, 311 | "peerDependencies": { 312 | "@swc/core": "^1.2.66", 313 | "chokidar": "^3.5.1" 314 | }, 315 | "peerDependenciesMeta": { 316 | "chokidar": { 317 | "optional": true 318 | } 319 | } 320 | }, 321 | "node_modules/@swc/cli/node_modules/brace-expansion": { 322 | "version": "2.0.1", 323 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 324 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 325 | "dev": true, 326 | "dependencies": { 327 | "balanced-match": "^1.0.0" 328 | } 329 | }, 330 | "node_modules/@swc/cli/node_modules/commander": { 331 | "version": "7.2.0", 332 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", 333 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", 334 | "dev": true, 335 | "engines": { 336 | "node": ">= 10" 337 | } 338 | }, 339 | "node_modules/@swc/cli/node_modules/minimatch": { 340 | "version": "9.0.3", 341 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", 342 | "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", 343 | "dev": true, 344 | "dependencies": { 345 | "brace-expansion": "^2.0.1" 346 | }, 347 | "engines": { 348 | "node": ">=16 || 14 >=14.17" 349 | }, 350 | "funding": { 351 | "url": "https://github.com/sponsors/isaacs" 352 | } 353 | }, 354 | "node_modules/@swc/core": { 355 | "version": "1.3.107", 356 | "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.107.tgz", 357 | "integrity": "sha512-zKhqDyFcTsyLIYK1iEmavljZnf4CCor5pF52UzLAz4B6Nu/4GLU+2LQVAf+oRHjusG39PTPjd2AlRT3f3QWfsQ==", 358 | "dev": true, 359 | "hasInstallScript": true, 360 | "dependencies": { 361 | "@swc/counter": "^0.1.1", 362 | "@swc/types": "^0.1.5" 363 | }, 364 | "engines": { 365 | "node": ">=10" 366 | }, 367 | "funding": { 368 | "type": "opencollective", 369 | "url": "https://opencollective.com/swc" 370 | }, 371 | "optionalDependencies": { 372 | "@swc/core-darwin-arm64": "1.3.107", 373 | "@swc/core-darwin-x64": "1.3.107", 374 | "@swc/core-linux-arm-gnueabihf": "1.3.107", 375 | "@swc/core-linux-arm64-gnu": "1.3.107", 376 | "@swc/core-linux-arm64-musl": "1.3.107", 377 | "@swc/core-linux-x64-gnu": "1.3.107", 378 | "@swc/core-linux-x64-musl": "1.3.107", 379 | "@swc/core-win32-arm64-msvc": "1.3.107", 380 | "@swc/core-win32-ia32-msvc": "1.3.107", 381 | "@swc/core-win32-x64-msvc": "1.3.107" 382 | }, 383 | "peerDependencies": { 384 | "@swc/helpers": "^0.5.0" 385 | }, 386 | "peerDependenciesMeta": { 387 | "@swc/helpers": { 388 | "optional": true 389 | } 390 | } 391 | }, 392 | "node_modules/@swc/core-darwin-arm64": { 393 | "version": "1.3.107", 394 | "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.107.tgz", 395 | "integrity": "sha512-47tD/5vSXWxPd0j/ZllyQUg4bqalbQTsmqSw0J4dDdS82MWqCAwUErUrAZPRjBkjNQ6Kmrf5rpCWaGTtPw+ngw==", 396 | "cpu": [ 397 | "arm64" 398 | ], 399 | "dev": true, 400 | "optional": true, 401 | "os": [ 402 | "darwin" 403 | ], 404 | "engines": { 405 | "node": ">=10" 406 | } 407 | }, 408 | "node_modules/@swc/core-darwin-x64": { 409 | "version": "1.3.107", 410 | "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.107.tgz", 411 | "integrity": "sha512-hwiLJ2ulNkBGAh1m1eTfeY1417OAYbRGcb/iGsJ+LuVLvKAhU/itzsl535CvcwAlt2LayeCFfcI8gdeOLeZa9A==", 412 | "cpu": [ 413 | "x64" 414 | ], 415 | "dev": true, 416 | "optional": true, 417 | "os": [ 418 | "darwin" 419 | ], 420 | "engines": { 421 | "node": ">=10" 422 | } 423 | }, 424 | "node_modules/@swc/core-linux-arm-gnueabihf": { 425 | "version": "1.3.107", 426 | "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.107.tgz", 427 | "integrity": "sha512-I2wzcC0KXqh0OwymCmYwNRgZ9nxX7DWnOOStJXV3pS0uB83TXAkmqd7wvMBuIl9qu4Hfomi9aDM7IlEEn9tumQ==", 428 | "cpu": [ 429 | "arm" 430 | ], 431 | "dev": true, 432 | "optional": true, 433 | "os": [ 434 | "linux" 435 | ], 436 | "engines": { 437 | "node": ">=10" 438 | } 439 | }, 440 | "node_modules/@swc/core-linux-arm64-gnu": { 441 | "version": "1.3.107", 442 | "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.107.tgz", 443 | "integrity": "sha512-HWgnn7JORYlOYnGsdunpSF8A+BCZKPLzLtEUA27/M/ZuANcMZabKL9Zurt7XQXq888uJFAt98Gy+59PU90aHKg==", 444 | "cpu": [ 445 | "arm64" 446 | ], 447 | "dev": true, 448 | "optional": true, 449 | "os": [ 450 | "linux" 451 | ], 452 | "engines": { 453 | "node": ">=10" 454 | } 455 | }, 456 | "node_modules/@swc/core-linux-arm64-musl": { 457 | "version": "1.3.107", 458 | "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.107.tgz", 459 | "integrity": "sha512-vfPF74cWfAm8hyhS8yvYI94ucMHIo8xIYU+oFOW9uvDlGQRgnUf/6DEVbLyt/3yfX5723Ln57U8uiMALbX5Pyw==", 460 | "cpu": [ 461 | "arm64" 462 | ], 463 | "dev": true, 464 | "optional": true, 465 | "os": [ 466 | "linux" 467 | ], 468 | "engines": { 469 | "node": ">=10" 470 | } 471 | }, 472 | "node_modules/@swc/core-linux-x64-gnu": { 473 | "version": "1.3.107", 474 | "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.107.tgz", 475 | "integrity": "sha512-uBVNhIg0ip8rH9OnOsCARUFZ3Mq3tbPHxtmWk9uAa5u8jQwGWeBx5+nTHpDOVd3YxKb6+5xDEI/edeeLpha/9g==", 476 | "cpu": [ 477 | "x64" 478 | ], 479 | "dev": true, 480 | "optional": true, 481 | "os": [ 482 | "linux" 483 | ], 484 | "engines": { 485 | "node": ">=10" 486 | } 487 | }, 488 | "node_modules/@swc/core-linux-x64-musl": { 489 | "version": "1.3.107", 490 | "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.107.tgz", 491 | "integrity": "sha512-mvACkUvzSIB12q1H5JtabWATbk3AG+pQgXEN95AmEX2ZA5gbP9+B+mijsg7Sd/3tboHr7ZHLz/q3SHTvdFJrEw==", 492 | "cpu": [ 493 | "x64" 494 | ], 495 | "dev": true, 496 | "optional": true, 497 | "os": [ 498 | "linux" 499 | ], 500 | "engines": { 501 | "node": ">=10" 502 | } 503 | }, 504 | "node_modules/@swc/core-win32-arm64-msvc": { 505 | "version": "1.3.107", 506 | "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.107.tgz", 507 | "integrity": "sha512-J3P14Ngy/1qtapzbguEH41kY109t6DFxfbK4Ntz9dOWNuVY3o9/RTB841ctnJk0ZHEG+BjfCJjsD2n8H5HcaOA==", 508 | "cpu": [ 509 | "arm64" 510 | ], 511 | "dev": true, 512 | "optional": true, 513 | "os": [ 514 | "win32" 515 | ], 516 | "engines": { 517 | "node": ">=10" 518 | } 519 | }, 520 | "node_modules/@swc/core-win32-ia32-msvc": { 521 | "version": "1.3.107", 522 | "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.107.tgz", 523 | "integrity": "sha512-ZBUtgyjTHlz8TPJh7kfwwwFma+ktr6OccB1oXC8fMSopD0AxVnQasgun3l3099wIsAB9eEsJDQ/3lDkOLs1gBA==", 524 | "cpu": [ 525 | "ia32" 526 | ], 527 | "dev": true, 528 | "optional": true, 529 | "os": [ 530 | "win32" 531 | ], 532 | "engines": { 533 | "node": ">=10" 534 | } 535 | }, 536 | "node_modules/@swc/core-win32-x64-msvc": { 537 | "version": "1.3.107", 538 | "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.107.tgz", 539 | "integrity": "sha512-Eyzo2XRqWOxqhE1gk9h7LWmUf4Bp4Xn2Ttb0ayAXFp6YSTxQIThXcT9kipXZqcpxcmDwoq8iWbbf2P8XL743EA==", 540 | "cpu": [ 541 | "x64" 542 | ], 543 | "dev": true, 544 | "optional": true, 545 | "os": [ 546 | "win32" 547 | ], 548 | "engines": { 549 | "node": ">=10" 550 | } 551 | }, 552 | "node_modules/@swc/counter": { 553 | "version": "0.1.2", 554 | "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", 555 | "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", 556 | "dev": true 557 | }, 558 | "node_modules/@swc/helpers": { 559 | "version": "0.5.1", 560 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", 561 | "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", 562 | "dependencies": { 563 | "tslib": "^2.4.0" 564 | } 565 | }, 566 | "node_modules/@swc/types": { 567 | "version": "0.1.5", 568 | "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", 569 | "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", 570 | "dev": true 571 | }, 572 | "node_modules/@szmarczak/http-timer": { 573 | "version": "4.0.6", 574 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", 575 | "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", 576 | "dev": true, 577 | "dependencies": { 578 | "defer-to-connect": "^2.0.0" 579 | }, 580 | "engines": { 581 | "node": ">=10" 582 | } 583 | }, 584 | "node_modules/@tokenizer/token": { 585 | "version": "0.3.0", 586 | "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", 587 | "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", 588 | "dev": true 589 | }, 590 | "node_modules/@types/cacheable-request": { 591 | "version": "6.0.3", 592 | "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", 593 | "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", 594 | "dev": true, 595 | "dependencies": { 596 | "@types/http-cache-semantics": "*", 597 | "@types/keyv": "^3.1.4", 598 | "@types/node": "*", 599 | "@types/responselike": "^1.0.0" 600 | } 601 | }, 602 | "node_modules/@types/http-cache-semantics": { 603 | "version": "4.0.4", 604 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", 605 | "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", 606 | "dev": true 607 | }, 608 | "node_modules/@types/keyv": { 609 | "version": "3.1.4", 610 | "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", 611 | "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", 612 | "dev": true, 613 | "dependencies": { 614 | "@types/node": "*" 615 | } 616 | }, 617 | "node_modules/@types/node": { 618 | "version": "20.11.14", 619 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.14.tgz", 620 | "integrity": "sha512-w3yWCcwULefjP9DmDDsgUskrMoOy5Z8MiwKHr1FvqGPtx7CvJzQvxD7eKpxNtklQxLruxSXWddyeRtyud0RcXQ==", 621 | "dev": true, 622 | "dependencies": { 623 | "undici-types": "~5.26.4" 624 | } 625 | }, 626 | "node_modules/@types/responselike": { 627 | "version": "1.0.3", 628 | "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", 629 | "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", 630 | "dev": true, 631 | "dependencies": { 632 | "@types/node": "*" 633 | } 634 | }, 635 | "node_modules/any-promise": { 636 | "version": "1.3.0", 637 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 638 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" 639 | }, 640 | "node_modules/anymatch": { 641 | "version": "3.1.3", 642 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 643 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 644 | "dependencies": { 645 | "normalize-path": "^3.0.0", 646 | "picomatch": "^2.0.4" 647 | }, 648 | "engines": { 649 | "node": ">= 8" 650 | } 651 | }, 652 | "node_modules/arch": { 653 | "version": "2.2.0", 654 | "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", 655 | "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", 656 | "dev": true, 657 | "funding": [ 658 | { 659 | "type": "github", 660 | "url": "https://github.com/sponsors/feross" 661 | }, 662 | { 663 | "type": "patreon", 664 | "url": "https://www.patreon.com/feross" 665 | }, 666 | { 667 | "type": "consulting", 668 | "url": "https://feross.org/support" 669 | } 670 | ] 671 | }, 672 | "node_modules/arg": { 673 | "version": "5.0.2", 674 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 675 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" 676 | }, 677 | "node_modules/autoprefixer": { 678 | "version": "10.4.14", 679 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", 680 | "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", 681 | "funding": [ 682 | { 683 | "type": "opencollective", 684 | "url": "https://opencollective.com/postcss/" 685 | }, 686 | { 687 | "type": "tidelift", 688 | "url": "https://tidelift.com/funding/github/npm/autoprefixer" 689 | } 690 | ], 691 | "dependencies": { 692 | "browserslist": "^4.21.5", 693 | "caniuse-lite": "^1.0.30001464", 694 | "fraction.js": "^4.2.0", 695 | "normalize-range": "^0.1.2", 696 | "picocolors": "^1.0.0", 697 | "postcss-value-parser": "^4.2.0" 698 | }, 699 | "bin": { 700 | "autoprefixer": "bin/autoprefixer" 701 | }, 702 | "engines": { 703 | "node": "^10 || ^12 || >=14" 704 | }, 705 | "peerDependencies": { 706 | "postcss": "^8.1.0" 707 | } 708 | }, 709 | "node_modules/balanced-match": { 710 | "version": "1.0.2", 711 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 712 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 713 | }, 714 | "node_modules/bin-check": { 715 | "version": "4.1.0", 716 | "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", 717 | "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", 718 | "dev": true, 719 | "dependencies": { 720 | "execa": "^0.7.0", 721 | "executable": "^4.1.0" 722 | }, 723 | "engines": { 724 | "node": ">=4" 725 | } 726 | }, 727 | "node_modules/bin-version": { 728 | "version": "6.0.0", 729 | "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz", 730 | "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==", 731 | "dev": true, 732 | "dependencies": { 733 | "execa": "^5.0.0", 734 | "find-versions": "^5.0.0" 735 | }, 736 | "engines": { 737 | "node": ">=12" 738 | }, 739 | "funding": { 740 | "url": "https://github.com/sponsors/sindresorhus" 741 | } 742 | }, 743 | "node_modules/bin-version-check": { 744 | "version": "5.1.0", 745 | "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.1.0.tgz", 746 | "integrity": "sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==", 747 | "dev": true, 748 | "dependencies": { 749 | "bin-version": "^6.0.0", 750 | "semver": "^7.5.3", 751 | "semver-truncate": "^3.0.0" 752 | }, 753 | "engines": { 754 | "node": ">=12" 755 | }, 756 | "funding": { 757 | "url": "https://github.com/sponsors/sindresorhus" 758 | } 759 | }, 760 | "node_modules/bin-version/node_modules/cross-spawn": { 761 | "version": "7.0.3", 762 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 763 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 764 | "dev": true, 765 | "dependencies": { 766 | "path-key": "^3.1.0", 767 | "shebang-command": "^2.0.0", 768 | "which": "^2.0.1" 769 | }, 770 | "engines": { 771 | "node": ">= 8" 772 | } 773 | }, 774 | "node_modules/bin-version/node_modules/execa": { 775 | "version": "5.1.1", 776 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 777 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 778 | "dev": true, 779 | "dependencies": { 780 | "cross-spawn": "^7.0.3", 781 | "get-stream": "^6.0.0", 782 | "human-signals": "^2.1.0", 783 | "is-stream": "^2.0.0", 784 | "merge-stream": "^2.0.0", 785 | "npm-run-path": "^4.0.1", 786 | "onetime": "^5.1.2", 787 | "signal-exit": "^3.0.3", 788 | "strip-final-newline": "^2.0.0" 789 | }, 790 | "engines": { 791 | "node": ">=10" 792 | }, 793 | "funding": { 794 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 795 | } 796 | }, 797 | "node_modules/bin-version/node_modules/get-stream": { 798 | "version": "6.0.1", 799 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 800 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 801 | "dev": true, 802 | "engines": { 803 | "node": ">=10" 804 | }, 805 | "funding": { 806 | "url": "https://github.com/sponsors/sindresorhus" 807 | } 808 | }, 809 | "node_modules/bin-version/node_modules/is-stream": { 810 | "version": "2.0.1", 811 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 812 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 813 | "dev": true, 814 | "engines": { 815 | "node": ">=8" 816 | }, 817 | "funding": { 818 | "url": "https://github.com/sponsors/sindresorhus" 819 | } 820 | }, 821 | "node_modules/bin-version/node_modules/npm-run-path": { 822 | "version": "4.0.1", 823 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 824 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 825 | "dev": true, 826 | "dependencies": { 827 | "path-key": "^3.0.0" 828 | }, 829 | "engines": { 830 | "node": ">=8" 831 | } 832 | }, 833 | "node_modules/bin-version/node_modules/path-key": { 834 | "version": "3.1.1", 835 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 836 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 837 | "dev": true, 838 | "engines": { 839 | "node": ">=8" 840 | } 841 | }, 842 | "node_modules/bin-version/node_modules/shebang-command": { 843 | "version": "2.0.0", 844 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 845 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 846 | "dev": true, 847 | "dependencies": { 848 | "shebang-regex": "^3.0.0" 849 | }, 850 | "engines": { 851 | "node": ">=8" 852 | } 853 | }, 854 | "node_modules/bin-version/node_modules/shebang-regex": { 855 | "version": "3.0.0", 856 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 857 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 858 | "dev": true, 859 | "engines": { 860 | "node": ">=8" 861 | } 862 | }, 863 | "node_modules/bin-version/node_modules/which": { 864 | "version": "2.0.2", 865 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 866 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 867 | "dev": true, 868 | "dependencies": { 869 | "isexe": "^2.0.0" 870 | }, 871 | "bin": { 872 | "node-which": "bin/node-which" 873 | }, 874 | "engines": { 875 | "node": ">= 8" 876 | } 877 | }, 878 | "node_modules/binary-extensions": { 879 | "version": "2.2.0", 880 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 881 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 882 | "engines": { 883 | "node": ">=8" 884 | } 885 | }, 886 | "node_modules/brace-expansion": { 887 | "version": "1.1.11", 888 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 889 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 890 | "dependencies": { 891 | "balanced-match": "^1.0.0", 892 | "concat-map": "0.0.1" 893 | } 894 | }, 895 | "node_modules/braces": { 896 | "version": "3.0.2", 897 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 898 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 899 | "dependencies": { 900 | "fill-range": "^7.0.1" 901 | }, 902 | "engines": { 903 | "node": ">=8" 904 | } 905 | }, 906 | "node_modules/browserslist": { 907 | "version": "4.21.9", 908 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", 909 | "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", 910 | "funding": [ 911 | { 912 | "type": "opencollective", 913 | "url": "https://opencollective.com/browserslist" 914 | }, 915 | { 916 | "type": "tidelift", 917 | "url": "https://tidelift.com/funding/github/npm/browserslist" 918 | }, 919 | { 920 | "type": "github", 921 | "url": "https://github.com/sponsors/ai" 922 | } 923 | ], 924 | "dependencies": { 925 | "caniuse-lite": "^1.0.30001503", 926 | "electron-to-chromium": "^1.4.431", 927 | "node-releases": "^2.0.12", 928 | "update-browserslist-db": "^1.0.11" 929 | }, 930 | "bin": { 931 | "browserslist": "cli.js" 932 | }, 933 | "engines": { 934 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 935 | } 936 | }, 937 | "node_modules/busboy": { 938 | "version": "1.6.0", 939 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 940 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 941 | "dependencies": { 942 | "streamsearch": "^1.1.0" 943 | }, 944 | "engines": { 945 | "node": ">=10.16.0" 946 | } 947 | }, 948 | "node_modules/cacheable-lookup": { 949 | "version": "5.0.4", 950 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", 951 | "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", 952 | "dev": true, 953 | "engines": { 954 | "node": ">=10.6.0" 955 | } 956 | }, 957 | "node_modules/cacheable-request": { 958 | "version": "7.0.4", 959 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", 960 | "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", 961 | "dev": true, 962 | "dependencies": { 963 | "clone-response": "^1.0.2", 964 | "get-stream": "^5.1.0", 965 | "http-cache-semantics": "^4.0.0", 966 | "keyv": "^4.0.0", 967 | "lowercase-keys": "^2.0.0", 968 | "normalize-url": "^6.0.1", 969 | "responselike": "^2.0.0" 970 | }, 971 | "engines": { 972 | "node": ">=8" 973 | } 974 | }, 975 | "node_modules/cacheable-request/node_modules/get-stream": { 976 | "version": "5.2.0", 977 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 978 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 979 | "dev": true, 980 | "dependencies": { 981 | "pump": "^3.0.0" 982 | }, 983 | "engines": { 984 | "node": ">=8" 985 | }, 986 | "funding": { 987 | "url": "https://github.com/sponsors/sindresorhus" 988 | } 989 | }, 990 | "node_modules/camelcase-css": { 991 | "version": "2.0.1", 992 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 993 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 994 | "engines": { 995 | "node": ">= 6" 996 | } 997 | }, 998 | "node_modules/caniuse-lite": { 999 | "version": "1.0.30001507", 1000 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz", 1001 | "integrity": "sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A==", 1002 | "funding": [ 1003 | { 1004 | "type": "opencollective", 1005 | "url": "https://opencollective.com/browserslist" 1006 | }, 1007 | { 1008 | "type": "tidelift", 1009 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1010 | }, 1011 | { 1012 | "type": "github", 1013 | "url": "https://github.com/sponsors/ai" 1014 | } 1015 | ] 1016 | }, 1017 | "node_modules/chokidar": { 1018 | "version": "3.5.3", 1019 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1020 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1021 | "funding": [ 1022 | { 1023 | "type": "individual", 1024 | "url": "https://paulmillr.com/funding/" 1025 | } 1026 | ], 1027 | "dependencies": { 1028 | "anymatch": "~3.1.2", 1029 | "braces": "~3.0.2", 1030 | "glob-parent": "~5.1.2", 1031 | "is-binary-path": "~2.1.0", 1032 | "is-glob": "~4.0.1", 1033 | "normalize-path": "~3.0.0", 1034 | "readdirp": "~3.6.0" 1035 | }, 1036 | "engines": { 1037 | "node": ">= 8.10.0" 1038 | }, 1039 | "optionalDependencies": { 1040 | "fsevents": "~2.3.2" 1041 | } 1042 | }, 1043 | "node_modules/chokidar/node_modules/glob-parent": { 1044 | "version": "5.1.2", 1045 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1046 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1047 | "dependencies": { 1048 | "is-glob": "^4.0.1" 1049 | }, 1050 | "engines": { 1051 | "node": ">= 6" 1052 | } 1053 | }, 1054 | "node_modules/client-only": { 1055 | "version": "0.0.1", 1056 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", 1057 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" 1058 | }, 1059 | "node_modules/clone-response": { 1060 | "version": "1.0.3", 1061 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 1062 | "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 1063 | "dev": true, 1064 | "dependencies": { 1065 | "mimic-response": "^1.0.0" 1066 | }, 1067 | "funding": { 1068 | "url": "https://github.com/sponsors/sindresorhus" 1069 | } 1070 | }, 1071 | "node_modules/commander": { 1072 | "version": "4.1.1", 1073 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 1074 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 1075 | "engines": { 1076 | "node": ">= 6" 1077 | } 1078 | }, 1079 | "node_modules/concat-map": { 1080 | "version": "0.0.1", 1081 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1082 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 1083 | }, 1084 | "node_modules/content-disposition": { 1085 | "version": "0.5.4", 1086 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 1087 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 1088 | "dev": true, 1089 | "dependencies": { 1090 | "safe-buffer": "5.2.1" 1091 | }, 1092 | "engines": { 1093 | "node": ">= 0.6" 1094 | } 1095 | }, 1096 | "node_modules/cross-spawn": { 1097 | "version": "5.1.0", 1098 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 1099 | "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", 1100 | "dev": true, 1101 | "dependencies": { 1102 | "lru-cache": "^4.0.1", 1103 | "shebang-command": "^1.2.0", 1104 | "which": "^1.2.9" 1105 | } 1106 | }, 1107 | "node_modules/cssesc": { 1108 | "version": "3.0.0", 1109 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1110 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1111 | "bin": { 1112 | "cssesc": "bin/cssesc" 1113 | }, 1114 | "engines": { 1115 | "node": ">=4" 1116 | } 1117 | }, 1118 | "node_modules/decompress-response": { 1119 | "version": "6.0.0", 1120 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 1121 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 1122 | "dev": true, 1123 | "dependencies": { 1124 | "mimic-response": "^3.1.0" 1125 | }, 1126 | "engines": { 1127 | "node": ">=10" 1128 | }, 1129 | "funding": { 1130 | "url": "https://github.com/sponsors/sindresorhus" 1131 | } 1132 | }, 1133 | "node_modules/decompress-response/node_modules/mimic-response": { 1134 | "version": "3.1.0", 1135 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 1136 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 1137 | "dev": true, 1138 | "engines": { 1139 | "node": ">=10" 1140 | }, 1141 | "funding": { 1142 | "url": "https://github.com/sponsors/sindresorhus" 1143 | } 1144 | }, 1145 | "node_modules/defer-to-connect": { 1146 | "version": "2.0.1", 1147 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", 1148 | "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", 1149 | "dev": true, 1150 | "engines": { 1151 | "node": ">=10" 1152 | } 1153 | }, 1154 | "node_modules/didyoumean": { 1155 | "version": "1.2.2", 1156 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 1157 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" 1158 | }, 1159 | "node_modules/dlv": { 1160 | "version": "1.1.3", 1161 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 1162 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" 1163 | }, 1164 | "node_modules/dotenv": { 1165 | "version": "16.3.1", 1166 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", 1167 | "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", 1168 | "engines": { 1169 | "node": ">=12" 1170 | }, 1171 | "funding": { 1172 | "url": "https://github.com/motdotla/dotenv?sponsor=1" 1173 | } 1174 | }, 1175 | "node_modules/electron-to-chromium": { 1176 | "version": "1.4.440", 1177 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz", 1178 | "integrity": "sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw==" 1179 | }, 1180 | "node_modules/end-of-stream": { 1181 | "version": "1.4.4", 1182 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1183 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1184 | "dev": true, 1185 | "dependencies": { 1186 | "once": "^1.4.0" 1187 | } 1188 | }, 1189 | "node_modules/escalade": { 1190 | "version": "3.1.1", 1191 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1192 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1193 | "engines": { 1194 | "node": ">=6" 1195 | } 1196 | }, 1197 | "node_modules/escape-string-regexp": { 1198 | "version": "5.0.0", 1199 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 1200 | "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 1201 | "dev": true, 1202 | "engines": { 1203 | "node": ">=12" 1204 | }, 1205 | "funding": { 1206 | "url": "https://github.com/sponsors/sindresorhus" 1207 | } 1208 | }, 1209 | "node_modules/execa": { 1210 | "version": "0.7.0", 1211 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", 1212 | "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", 1213 | "dev": true, 1214 | "dependencies": { 1215 | "cross-spawn": "^5.0.1", 1216 | "get-stream": "^3.0.0", 1217 | "is-stream": "^1.1.0", 1218 | "npm-run-path": "^2.0.0", 1219 | "p-finally": "^1.0.0", 1220 | "signal-exit": "^3.0.0", 1221 | "strip-eof": "^1.0.0" 1222 | }, 1223 | "engines": { 1224 | "node": ">=4" 1225 | } 1226 | }, 1227 | "node_modules/executable": { 1228 | "version": "4.1.1", 1229 | "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", 1230 | "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", 1231 | "dev": true, 1232 | "dependencies": { 1233 | "pify": "^2.2.0" 1234 | }, 1235 | "engines": { 1236 | "node": ">=4" 1237 | } 1238 | }, 1239 | "node_modules/ext-list": { 1240 | "version": "2.2.2", 1241 | "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", 1242 | "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", 1243 | "dev": true, 1244 | "dependencies": { 1245 | "mime-db": "^1.28.0" 1246 | }, 1247 | "engines": { 1248 | "node": ">=0.10.0" 1249 | } 1250 | }, 1251 | "node_modules/ext-name": { 1252 | "version": "5.0.0", 1253 | "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", 1254 | "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", 1255 | "dev": true, 1256 | "dependencies": { 1257 | "ext-list": "^2.0.0", 1258 | "sort-keys-length": "^1.0.0" 1259 | }, 1260 | "engines": { 1261 | "node": ">=4" 1262 | } 1263 | }, 1264 | "node_modules/fast-glob": { 1265 | "version": "3.2.12", 1266 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 1267 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 1268 | "dependencies": { 1269 | "@nodelib/fs.stat": "^2.0.2", 1270 | "@nodelib/fs.walk": "^1.2.3", 1271 | "glob-parent": "^5.1.2", 1272 | "merge2": "^1.3.0", 1273 | "micromatch": "^4.0.4" 1274 | }, 1275 | "engines": { 1276 | "node": ">=8.6.0" 1277 | } 1278 | }, 1279 | "node_modules/fast-glob/node_modules/glob-parent": { 1280 | "version": "5.1.2", 1281 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1282 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1283 | "dependencies": { 1284 | "is-glob": "^4.0.1" 1285 | }, 1286 | "engines": { 1287 | "node": ">= 6" 1288 | } 1289 | }, 1290 | "node_modules/fastq": { 1291 | "version": "1.15.0", 1292 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1293 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1294 | "dependencies": { 1295 | "reusify": "^1.0.4" 1296 | } 1297 | }, 1298 | "node_modules/file-type": { 1299 | "version": "17.1.6", 1300 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-17.1.6.tgz", 1301 | "integrity": "sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==", 1302 | "dev": true, 1303 | "dependencies": { 1304 | "readable-web-to-node-stream": "^3.0.2", 1305 | "strtok3": "^7.0.0-alpha.9", 1306 | "token-types": "^5.0.0-alpha.2" 1307 | }, 1308 | "engines": { 1309 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1310 | }, 1311 | "funding": { 1312 | "url": "https://github.com/sindresorhus/file-type?sponsor=1" 1313 | } 1314 | }, 1315 | "node_modules/filename-reserved-regex": { 1316 | "version": "3.0.0", 1317 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", 1318 | "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", 1319 | "dev": true, 1320 | "engines": { 1321 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1322 | }, 1323 | "funding": { 1324 | "url": "https://github.com/sponsors/sindresorhus" 1325 | } 1326 | }, 1327 | "node_modules/filenamify": { 1328 | "version": "5.1.1", 1329 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz", 1330 | "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==", 1331 | "dev": true, 1332 | "dependencies": { 1333 | "filename-reserved-regex": "^3.0.0", 1334 | "strip-outer": "^2.0.0", 1335 | "trim-repeated": "^2.0.0" 1336 | }, 1337 | "engines": { 1338 | "node": ">=12.20" 1339 | }, 1340 | "funding": { 1341 | "url": "https://github.com/sponsors/sindresorhus" 1342 | } 1343 | }, 1344 | "node_modules/fill-range": { 1345 | "version": "7.0.1", 1346 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1347 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1348 | "dependencies": { 1349 | "to-regex-range": "^5.0.1" 1350 | }, 1351 | "engines": { 1352 | "node": ">=8" 1353 | } 1354 | }, 1355 | "node_modules/find-versions": { 1356 | "version": "5.1.0", 1357 | "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", 1358 | "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", 1359 | "dev": true, 1360 | "dependencies": { 1361 | "semver-regex": "^4.0.5" 1362 | }, 1363 | "engines": { 1364 | "node": ">=12" 1365 | }, 1366 | "funding": { 1367 | "url": "https://github.com/sponsors/sindresorhus" 1368 | } 1369 | }, 1370 | "node_modules/fraction.js": { 1371 | "version": "4.2.0", 1372 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", 1373 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", 1374 | "engines": { 1375 | "node": "*" 1376 | }, 1377 | "funding": { 1378 | "type": "patreon", 1379 | "url": "https://www.patreon.com/infusion" 1380 | } 1381 | }, 1382 | "node_modules/fs.realpath": { 1383 | "version": "1.0.0", 1384 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1385 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 1386 | }, 1387 | "node_modules/fsevents": { 1388 | "version": "2.3.2", 1389 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1390 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1391 | "hasInstallScript": true, 1392 | "optional": true, 1393 | "os": [ 1394 | "darwin" 1395 | ], 1396 | "engines": { 1397 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1398 | } 1399 | }, 1400 | "node_modules/function-bind": { 1401 | "version": "1.1.1", 1402 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1403 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1404 | }, 1405 | "node_modules/get-stream": { 1406 | "version": "3.0.0", 1407 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 1408 | "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", 1409 | "dev": true, 1410 | "engines": { 1411 | "node": ">=4" 1412 | } 1413 | }, 1414 | "node_modules/glob": { 1415 | "version": "7.1.6", 1416 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 1417 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 1418 | "dependencies": { 1419 | "fs.realpath": "^1.0.0", 1420 | "inflight": "^1.0.4", 1421 | "inherits": "2", 1422 | "minimatch": "^3.0.4", 1423 | "once": "^1.3.0", 1424 | "path-is-absolute": "^1.0.0" 1425 | }, 1426 | "engines": { 1427 | "node": "*" 1428 | }, 1429 | "funding": { 1430 | "url": "https://github.com/sponsors/isaacs" 1431 | } 1432 | }, 1433 | "node_modules/glob-parent": { 1434 | "version": "6.0.2", 1435 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1436 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1437 | "dependencies": { 1438 | "is-glob": "^4.0.3" 1439 | }, 1440 | "engines": { 1441 | "node": ">=10.13.0" 1442 | } 1443 | }, 1444 | "node_modules/glob-to-regexp": { 1445 | "version": "0.4.1", 1446 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1447 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" 1448 | }, 1449 | "node_modules/got": { 1450 | "version": "11.8.6", 1451 | "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", 1452 | "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", 1453 | "dev": true, 1454 | "dependencies": { 1455 | "@sindresorhus/is": "^4.0.0", 1456 | "@szmarczak/http-timer": "^4.0.5", 1457 | "@types/cacheable-request": "^6.0.1", 1458 | "@types/responselike": "^1.0.0", 1459 | "cacheable-lookup": "^5.0.3", 1460 | "cacheable-request": "^7.0.2", 1461 | "decompress-response": "^6.0.0", 1462 | "http2-wrapper": "^1.0.0-beta.5.2", 1463 | "lowercase-keys": "^2.0.0", 1464 | "p-cancelable": "^2.0.0", 1465 | "responselike": "^2.0.0" 1466 | }, 1467 | "engines": { 1468 | "node": ">=10.19.0" 1469 | }, 1470 | "funding": { 1471 | "url": "https://github.com/sindresorhus/got?sponsor=1" 1472 | } 1473 | }, 1474 | "node_modules/graceful-fs": { 1475 | "version": "4.2.11", 1476 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1477 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 1478 | }, 1479 | "node_modules/has": { 1480 | "version": "1.0.3", 1481 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1482 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1483 | "dependencies": { 1484 | "function-bind": "^1.1.1" 1485 | }, 1486 | "engines": { 1487 | "node": ">= 0.4.0" 1488 | } 1489 | }, 1490 | "node_modules/http-cache-semantics": { 1491 | "version": "4.1.1", 1492 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", 1493 | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", 1494 | "dev": true 1495 | }, 1496 | "node_modules/http2-wrapper": { 1497 | "version": "1.0.3", 1498 | "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", 1499 | "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", 1500 | "dev": true, 1501 | "dependencies": { 1502 | "quick-lru": "^5.1.1", 1503 | "resolve-alpn": "^1.0.0" 1504 | }, 1505 | "engines": { 1506 | "node": ">=10.19.0" 1507 | } 1508 | }, 1509 | "node_modules/human-signals": { 1510 | "version": "2.1.0", 1511 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 1512 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 1513 | "dev": true, 1514 | "engines": { 1515 | "node": ">=10.17.0" 1516 | } 1517 | }, 1518 | "node_modules/ieee754": { 1519 | "version": "1.2.1", 1520 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1521 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1522 | "dev": true, 1523 | "funding": [ 1524 | { 1525 | "type": "github", 1526 | "url": "https://github.com/sponsors/feross" 1527 | }, 1528 | { 1529 | "type": "patreon", 1530 | "url": "https://www.patreon.com/feross" 1531 | }, 1532 | { 1533 | "type": "consulting", 1534 | "url": "https://feross.org/support" 1535 | } 1536 | ] 1537 | }, 1538 | "node_modules/inflight": { 1539 | "version": "1.0.6", 1540 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1541 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1542 | "dependencies": { 1543 | "once": "^1.3.0", 1544 | "wrappy": "1" 1545 | } 1546 | }, 1547 | "node_modules/inherits": { 1548 | "version": "2.0.4", 1549 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1550 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1551 | }, 1552 | "node_modules/is-binary-path": { 1553 | "version": "2.1.0", 1554 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1555 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1556 | "dependencies": { 1557 | "binary-extensions": "^2.0.0" 1558 | }, 1559 | "engines": { 1560 | "node": ">=8" 1561 | } 1562 | }, 1563 | "node_modules/is-core-module": { 1564 | "version": "2.12.1", 1565 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", 1566 | "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", 1567 | "dependencies": { 1568 | "has": "^1.0.3" 1569 | }, 1570 | "funding": { 1571 | "url": "https://github.com/sponsors/ljharb" 1572 | } 1573 | }, 1574 | "node_modules/is-extglob": { 1575 | "version": "2.1.1", 1576 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1577 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1578 | "engines": { 1579 | "node": ">=0.10.0" 1580 | } 1581 | }, 1582 | "node_modules/is-glob": { 1583 | "version": "4.0.3", 1584 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1585 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1586 | "dependencies": { 1587 | "is-extglob": "^2.1.1" 1588 | }, 1589 | "engines": { 1590 | "node": ">=0.10.0" 1591 | } 1592 | }, 1593 | "node_modules/is-number": { 1594 | "version": "7.0.0", 1595 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1596 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1597 | "engines": { 1598 | "node": ">=0.12.0" 1599 | } 1600 | }, 1601 | "node_modules/is-plain-obj": { 1602 | "version": "1.1.0", 1603 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 1604 | "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", 1605 | "dev": true, 1606 | "engines": { 1607 | "node": ">=0.10.0" 1608 | } 1609 | }, 1610 | "node_modules/is-stream": { 1611 | "version": "1.1.0", 1612 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 1613 | "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", 1614 | "dev": true, 1615 | "engines": { 1616 | "node": ">=0.10.0" 1617 | } 1618 | }, 1619 | "node_modules/isexe": { 1620 | "version": "2.0.0", 1621 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1622 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1623 | "dev": true 1624 | }, 1625 | "node_modules/jiti": { 1626 | "version": "1.18.2", 1627 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", 1628 | "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", 1629 | "bin": { 1630 | "jiti": "bin/jiti.js" 1631 | } 1632 | }, 1633 | "node_modules/js-tokens": { 1634 | "version": "4.0.0", 1635 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1636 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1637 | }, 1638 | "node_modules/json-buffer": { 1639 | "version": "3.0.1", 1640 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 1641 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 1642 | "dev": true 1643 | }, 1644 | "node_modules/keyv": { 1645 | "version": "4.5.4", 1646 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 1647 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 1648 | "dev": true, 1649 | "dependencies": { 1650 | "json-buffer": "3.0.1" 1651 | } 1652 | }, 1653 | "node_modules/lilconfig": { 1654 | "version": "2.1.0", 1655 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", 1656 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 1657 | "engines": { 1658 | "node": ">=10" 1659 | } 1660 | }, 1661 | "node_modules/lines-and-columns": { 1662 | "version": "1.2.4", 1663 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1664 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" 1665 | }, 1666 | "node_modules/loose-envify": { 1667 | "version": "1.4.0", 1668 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1669 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1670 | "dependencies": { 1671 | "js-tokens": "^3.0.0 || ^4.0.0" 1672 | }, 1673 | "bin": { 1674 | "loose-envify": "cli.js" 1675 | } 1676 | }, 1677 | "node_modules/lowercase-keys": { 1678 | "version": "2.0.0", 1679 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 1680 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 1681 | "dev": true, 1682 | "engines": { 1683 | "node": ">=8" 1684 | } 1685 | }, 1686 | "node_modules/lru-cache": { 1687 | "version": "4.1.5", 1688 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 1689 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 1690 | "dev": true, 1691 | "dependencies": { 1692 | "pseudomap": "^1.0.2", 1693 | "yallist": "^2.1.2" 1694 | } 1695 | }, 1696 | "node_modules/merge-stream": { 1697 | "version": "2.0.0", 1698 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1699 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1700 | "dev": true 1701 | }, 1702 | "node_modules/merge2": { 1703 | "version": "1.4.1", 1704 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1705 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1706 | "engines": { 1707 | "node": ">= 8" 1708 | } 1709 | }, 1710 | "node_modules/micromatch": { 1711 | "version": "4.0.5", 1712 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1713 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1714 | "dependencies": { 1715 | "braces": "^3.0.2", 1716 | "picomatch": "^2.3.1" 1717 | }, 1718 | "engines": { 1719 | "node": ">=8.6" 1720 | } 1721 | }, 1722 | "node_modules/mime-db": { 1723 | "version": "1.52.0", 1724 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1725 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1726 | "dev": true, 1727 | "engines": { 1728 | "node": ">= 0.6" 1729 | } 1730 | }, 1731 | "node_modules/mimic-fn": { 1732 | "version": "2.1.0", 1733 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1734 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1735 | "dev": true, 1736 | "engines": { 1737 | "node": ">=6" 1738 | } 1739 | }, 1740 | "node_modules/mimic-response": { 1741 | "version": "1.0.1", 1742 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1743 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1744 | "dev": true, 1745 | "engines": { 1746 | "node": ">=4" 1747 | } 1748 | }, 1749 | "node_modules/minimatch": { 1750 | "version": "3.1.2", 1751 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1752 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1753 | "dependencies": { 1754 | "brace-expansion": "^1.1.7" 1755 | }, 1756 | "engines": { 1757 | "node": "*" 1758 | } 1759 | }, 1760 | "node_modules/mz": { 1761 | "version": "2.7.0", 1762 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 1763 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 1764 | "dependencies": { 1765 | "any-promise": "^1.0.0", 1766 | "object-assign": "^4.0.1", 1767 | "thenify-all": "^1.0.0" 1768 | } 1769 | }, 1770 | "node_modules/nanoid": { 1771 | "version": "3.3.6", 1772 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 1773 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 1774 | "funding": [ 1775 | { 1776 | "type": "github", 1777 | "url": "https://github.com/sponsors/ai" 1778 | } 1779 | ], 1780 | "bin": { 1781 | "nanoid": "bin/nanoid.cjs" 1782 | }, 1783 | "engines": { 1784 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1785 | } 1786 | }, 1787 | "node_modules/next": { 1788 | "version": "13.4.7", 1789 | "resolved": "https://registry.npmjs.org/next/-/next-13.4.7.tgz", 1790 | "integrity": "sha512-M8z3k9VmG51SRT6v5uDKdJXcAqLzP3C+vaKfLIAM0Mhx1um1G7MDnO63+m52qPdZfrTFzMZNzfsgvm3ghuVHIQ==", 1791 | "dependencies": { 1792 | "@next/env": "13.4.7", 1793 | "@swc/helpers": "0.5.1", 1794 | "busboy": "1.6.0", 1795 | "caniuse-lite": "^1.0.30001406", 1796 | "postcss": "8.4.14", 1797 | "styled-jsx": "5.1.1", 1798 | "watchpack": "2.4.0", 1799 | "zod": "3.21.4" 1800 | }, 1801 | "bin": { 1802 | "next": "dist/bin/next" 1803 | }, 1804 | "engines": { 1805 | "node": ">=16.8.0" 1806 | }, 1807 | "optionalDependencies": { 1808 | "@next/swc-darwin-arm64": "13.4.7", 1809 | "@next/swc-darwin-x64": "13.4.7", 1810 | "@next/swc-linux-arm64-gnu": "13.4.7", 1811 | "@next/swc-linux-arm64-musl": "13.4.7", 1812 | "@next/swc-linux-x64-gnu": "13.4.7", 1813 | "@next/swc-linux-x64-musl": "13.4.7", 1814 | "@next/swc-win32-arm64-msvc": "13.4.7", 1815 | "@next/swc-win32-ia32-msvc": "13.4.7", 1816 | "@next/swc-win32-x64-msvc": "13.4.7" 1817 | }, 1818 | "peerDependencies": { 1819 | "@opentelemetry/api": "^1.1.0", 1820 | "fibers": ">= 3.1.0", 1821 | "react": "^18.2.0", 1822 | "react-dom": "^18.2.0", 1823 | "sass": "^1.3.0" 1824 | }, 1825 | "peerDependenciesMeta": { 1826 | "@opentelemetry/api": { 1827 | "optional": true 1828 | }, 1829 | "fibers": { 1830 | "optional": true 1831 | }, 1832 | "sass": { 1833 | "optional": true 1834 | } 1835 | } 1836 | }, 1837 | "node_modules/next/node_modules/postcss": { 1838 | "version": "8.4.14", 1839 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 1840 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 1841 | "funding": [ 1842 | { 1843 | "type": "opencollective", 1844 | "url": "https://opencollective.com/postcss/" 1845 | }, 1846 | { 1847 | "type": "tidelift", 1848 | "url": "https://tidelift.com/funding/github/npm/postcss" 1849 | } 1850 | ], 1851 | "dependencies": { 1852 | "nanoid": "^3.3.4", 1853 | "picocolors": "^1.0.0", 1854 | "source-map-js": "^1.0.2" 1855 | }, 1856 | "engines": { 1857 | "node": "^10 || ^12 || >=14" 1858 | } 1859 | }, 1860 | "node_modules/nice-napi": { 1861 | "version": "1.0.2", 1862 | "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", 1863 | "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", 1864 | "dev": true, 1865 | "hasInstallScript": true, 1866 | "optional": true, 1867 | "os": [ 1868 | "!win32" 1869 | ], 1870 | "dependencies": { 1871 | "node-addon-api": "^3.0.0", 1872 | "node-gyp-build": "^4.2.2" 1873 | } 1874 | }, 1875 | "node_modules/node-addon-api": { 1876 | "version": "3.2.1", 1877 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", 1878 | "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", 1879 | "dev": true, 1880 | "optional": true 1881 | }, 1882 | "node_modules/node-gyp-build": { 1883 | "version": "4.8.0", 1884 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", 1885 | "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", 1886 | "dev": true, 1887 | "optional": true, 1888 | "bin": { 1889 | "node-gyp-build": "bin.js", 1890 | "node-gyp-build-optional": "optional.js", 1891 | "node-gyp-build-test": "build-test.js" 1892 | } 1893 | }, 1894 | "node_modules/node-releases": { 1895 | "version": "2.0.12", 1896 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", 1897 | "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" 1898 | }, 1899 | "node_modules/normalize-path": { 1900 | "version": "3.0.0", 1901 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1902 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1903 | "engines": { 1904 | "node": ">=0.10.0" 1905 | } 1906 | }, 1907 | "node_modules/normalize-range": { 1908 | "version": "0.1.2", 1909 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 1910 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 1911 | "engines": { 1912 | "node": ">=0.10.0" 1913 | } 1914 | }, 1915 | "node_modules/normalize-url": { 1916 | "version": "6.1.0", 1917 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", 1918 | "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", 1919 | "dev": true, 1920 | "engines": { 1921 | "node": ">=10" 1922 | }, 1923 | "funding": { 1924 | "url": "https://github.com/sponsors/sindresorhus" 1925 | } 1926 | }, 1927 | "node_modules/npm-run-path": { 1928 | "version": "2.0.2", 1929 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 1930 | "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", 1931 | "dev": true, 1932 | "dependencies": { 1933 | "path-key": "^2.0.0" 1934 | }, 1935 | "engines": { 1936 | "node": ">=4" 1937 | } 1938 | }, 1939 | "node_modules/object-assign": { 1940 | "version": "4.1.1", 1941 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1942 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1943 | "engines": { 1944 | "node": ">=0.10.0" 1945 | } 1946 | }, 1947 | "node_modules/object-hash": { 1948 | "version": "3.0.0", 1949 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 1950 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 1951 | "engines": { 1952 | "node": ">= 6" 1953 | } 1954 | }, 1955 | "node_modules/once": { 1956 | "version": "1.4.0", 1957 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1958 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1959 | "dependencies": { 1960 | "wrappy": "1" 1961 | } 1962 | }, 1963 | "node_modules/onetime": { 1964 | "version": "5.1.2", 1965 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1966 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1967 | "dev": true, 1968 | "dependencies": { 1969 | "mimic-fn": "^2.1.0" 1970 | }, 1971 | "engines": { 1972 | "node": ">=6" 1973 | }, 1974 | "funding": { 1975 | "url": "https://github.com/sponsors/sindresorhus" 1976 | } 1977 | }, 1978 | "node_modules/os-filter-obj": { 1979 | "version": "2.0.0", 1980 | "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", 1981 | "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", 1982 | "dev": true, 1983 | "dependencies": { 1984 | "arch": "^2.1.0" 1985 | }, 1986 | "engines": { 1987 | "node": ">=4" 1988 | } 1989 | }, 1990 | "node_modules/p-cancelable": { 1991 | "version": "2.1.1", 1992 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", 1993 | "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", 1994 | "dev": true, 1995 | "engines": { 1996 | "node": ">=8" 1997 | } 1998 | }, 1999 | "node_modules/p-finally": { 2000 | "version": "1.0.0", 2001 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 2002 | "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", 2003 | "dev": true, 2004 | "engines": { 2005 | "node": ">=4" 2006 | } 2007 | }, 2008 | "node_modules/path-is-absolute": { 2009 | "version": "1.0.1", 2010 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2011 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2012 | "engines": { 2013 | "node": ">=0.10.0" 2014 | } 2015 | }, 2016 | "node_modules/path-key": { 2017 | "version": "2.0.1", 2018 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 2019 | "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", 2020 | "dev": true, 2021 | "engines": { 2022 | "node": ">=4" 2023 | } 2024 | }, 2025 | "node_modules/path-parse": { 2026 | "version": "1.0.7", 2027 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2028 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 2029 | }, 2030 | "node_modules/peek-readable": { 2031 | "version": "5.0.0", 2032 | "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", 2033 | "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", 2034 | "dev": true, 2035 | "engines": { 2036 | "node": ">=14.16" 2037 | }, 2038 | "funding": { 2039 | "type": "github", 2040 | "url": "https://github.com/sponsors/Borewit" 2041 | } 2042 | }, 2043 | "node_modules/picocolors": { 2044 | "version": "1.0.0", 2045 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2046 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 2047 | }, 2048 | "node_modules/picomatch": { 2049 | "version": "2.3.1", 2050 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2051 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2052 | "engines": { 2053 | "node": ">=8.6" 2054 | }, 2055 | "funding": { 2056 | "url": "https://github.com/sponsors/jonschlinkert" 2057 | } 2058 | }, 2059 | "node_modules/pify": { 2060 | "version": "2.3.0", 2061 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2062 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 2063 | "engines": { 2064 | "node": ">=0.10.0" 2065 | } 2066 | }, 2067 | "node_modules/pirates": { 2068 | "version": "4.0.6", 2069 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 2070 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 2071 | "engines": { 2072 | "node": ">= 6" 2073 | } 2074 | }, 2075 | "node_modules/piscina": { 2076 | "version": "4.3.1", 2077 | "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.3.1.tgz", 2078 | "integrity": "sha512-MBj0QYm3hJQ/C/wIXTN1OCYC8uQ4BBJ4LVele2P4ZwVQAH04vkk8E1SpDbuemLAL1dZorbuOob9rYqJeWCcCRg==", 2079 | "dev": true, 2080 | "optionalDependencies": { 2081 | "nice-napi": "^1.0.2" 2082 | } 2083 | }, 2084 | "node_modules/postcss": { 2085 | "version": "8.4.24", 2086 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", 2087 | "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", 2088 | "funding": [ 2089 | { 2090 | "type": "opencollective", 2091 | "url": "https://opencollective.com/postcss/" 2092 | }, 2093 | { 2094 | "type": "tidelift", 2095 | "url": "https://tidelift.com/funding/github/npm/postcss" 2096 | }, 2097 | { 2098 | "type": "github", 2099 | "url": "https://github.com/sponsors/ai" 2100 | } 2101 | ], 2102 | "dependencies": { 2103 | "nanoid": "^3.3.6", 2104 | "picocolors": "^1.0.0", 2105 | "source-map-js": "^1.0.2" 2106 | }, 2107 | "engines": { 2108 | "node": "^10 || ^12 || >=14" 2109 | } 2110 | }, 2111 | "node_modules/postcss-import": { 2112 | "version": "15.1.0", 2113 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 2114 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 2115 | "dependencies": { 2116 | "postcss-value-parser": "^4.0.0", 2117 | "read-cache": "^1.0.0", 2118 | "resolve": "^1.1.7" 2119 | }, 2120 | "engines": { 2121 | "node": ">=14.0.0" 2122 | }, 2123 | "peerDependencies": { 2124 | "postcss": "^8.0.0" 2125 | } 2126 | }, 2127 | "node_modules/postcss-js": { 2128 | "version": "4.0.1", 2129 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 2130 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 2131 | "dependencies": { 2132 | "camelcase-css": "^2.0.1" 2133 | }, 2134 | "engines": { 2135 | "node": "^12 || ^14 || >= 16" 2136 | }, 2137 | "funding": { 2138 | "type": "opencollective", 2139 | "url": "https://opencollective.com/postcss/" 2140 | }, 2141 | "peerDependencies": { 2142 | "postcss": "^8.4.21" 2143 | } 2144 | }, 2145 | "node_modules/postcss-load-config": { 2146 | "version": "4.0.1", 2147 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", 2148 | "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", 2149 | "dependencies": { 2150 | "lilconfig": "^2.0.5", 2151 | "yaml": "^2.1.1" 2152 | }, 2153 | "engines": { 2154 | "node": ">= 14" 2155 | }, 2156 | "funding": { 2157 | "type": "opencollective", 2158 | "url": "https://opencollective.com/postcss/" 2159 | }, 2160 | "peerDependencies": { 2161 | "postcss": ">=8.0.9", 2162 | "ts-node": ">=9.0.0" 2163 | }, 2164 | "peerDependenciesMeta": { 2165 | "postcss": { 2166 | "optional": true 2167 | }, 2168 | "ts-node": { 2169 | "optional": true 2170 | } 2171 | } 2172 | }, 2173 | "node_modules/postcss-nested": { 2174 | "version": "6.0.1", 2175 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", 2176 | "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", 2177 | "dependencies": { 2178 | "postcss-selector-parser": "^6.0.11" 2179 | }, 2180 | "engines": { 2181 | "node": ">=12.0" 2182 | }, 2183 | "funding": { 2184 | "type": "opencollective", 2185 | "url": "https://opencollective.com/postcss/" 2186 | }, 2187 | "peerDependencies": { 2188 | "postcss": "^8.2.14" 2189 | } 2190 | }, 2191 | "node_modules/postcss-selector-parser": { 2192 | "version": "6.0.13", 2193 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", 2194 | "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", 2195 | "dependencies": { 2196 | "cssesc": "^3.0.0", 2197 | "util-deprecate": "^1.0.2" 2198 | }, 2199 | "engines": { 2200 | "node": ">=4" 2201 | } 2202 | }, 2203 | "node_modules/postcss-value-parser": { 2204 | "version": "4.2.0", 2205 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 2206 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" 2207 | }, 2208 | "node_modules/pseudomap": { 2209 | "version": "1.0.2", 2210 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 2211 | "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", 2212 | "dev": true 2213 | }, 2214 | "node_modules/pump": { 2215 | "version": "3.0.0", 2216 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2217 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2218 | "dev": true, 2219 | "dependencies": { 2220 | "end-of-stream": "^1.1.0", 2221 | "once": "^1.3.1" 2222 | } 2223 | }, 2224 | "node_modules/queue-microtask": { 2225 | "version": "1.2.3", 2226 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2227 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2228 | "funding": [ 2229 | { 2230 | "type": "github", 2231 | "url": "https://github.com/sponsors/feross" 2232 | }, 2233 | { 2234 | "type": "patreon", 2235 | "url": "https://www.patreon.com/feross" 2236 | }, 2237 | { 2238 | "type": "consulting", 2239 | "url": "https://feross.org/support" 2240 | } 2241 | ] 2242 | }, 2243 | "node_modules/quick-lru": { 2244 | "version": "5.1.1", 2245 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 2246 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 2247 | "dev": true, 2248 | "engines": { 2249 | "node": ">=10" 2250 | }, 2251 | "funding": { 2252 | "url": "https://github.com/sponsors/sindresorhus" 2253 | } 2254 | }, 2255 | "node_modules/react": { 2256 | "version": "18.2.0", 2257 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 2258 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 2259 | "dependencies": { 2260 | "loose-envify": "^1.1.0" 2261 | }, 2262 | "engines": { 2263 | "node": ">=0.10.0" 2264 | } 2265 | }, 2266 | "node_modules/react-dom": { 2267 | "version": "18.2.0", 2268 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 2269 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 2270 | "dependencies": { 2271 | "loose-envify": "^1.1.0", 2272 | "scheduler": "^0.23.0" 2273 | }, 2274 | "peerDependencies": { 2275 | "react": "^18.2.0" 2276 | } 2277 | }, 2278 | "node_modules/react-icons": { 2279 | "version": "4.10.1", 2280 | "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz", 2281 | "integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==", 2282 | "peerDependencies": { 2283 | "react": "*" 2284 | } 2285 | }, 2286 | "node_modules/read-cache": { 2287 | "version": "1.0.0", 2288 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 2289 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 2290 | "dependencies": { 2291 | "pify": "^2.3.0" 2292 | } 2293 | }, 2294 | "node_modules/readable-stream": { 2295 | "version": "3.6.2", 2296 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 2297 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 2298 | "dev": true, 2299 | "dependencies": { 2300 | "inherits": "^2.0.3", 2301 | "string_decoder": "^1.1.1", 2302 | "util-deprecate": "^1.0.1" 2303 | }, 2304 | "engines": { 2305 | "node": ">= 6" 2306 | } 2307 | }, 2308 | "node_modules/readable-web-to-node-stream": { 2309 | "version": "3.0.2", 2310 | "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", 2311 | "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", 2312 | "dev": true, 2313 | "dependencies": { 2314 | "readable-stream": "^3.6.0" 2315 | }, 2316 | "engines": { 2317 | "node": ">=8" 2318 | }, 2319 | "funding": { 2320 | "type": "github", 2321 | "url": "https://github.com/sponsors/Borewit" 2322 | } 2323 | }, 2324 | "node_modules/readdirp": { 2325 | "version": "3.6.0", 2326 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2327 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2328 | "dependencies": { 2329 | "picomatch": "^2.2.1" 2330 | }, 2331 | "engines": { 2332 | "node": ">=8.10.0" 2333 | } 2334 | }, 2335 | "node_modules/resolve": { 2336 | "version": "1.22.2", 2337 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", 2338 | "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", 2339 | "dependencies": { 2340 | "is-core-module": "^2.11.0", 2341 | "path-parse": "^1.0.7", 2342 | "supports-preserve-symlinks-flag": "^1.0.0" 2343 | }, 2344 | "bin": { 2345 | "resolve": "bin/resolve" 2346 | }, 2347 | "funding": { 2348 | "url": "https://github.com/sponsors/ljharb" 2349 | } 2350 | }, 2351 | "node_modules/resolve-alpn": { 2352 | "version": "1.2.1", 2353 | "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", 2354 | "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", 2355 | "dev": true 2356 | }, 2357 | "node_modules/responselike": { 2358 | "version": "2.0.1", 2359 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", 2360 | "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", 2361 | "dev": true, 2362 | "dependencies": { 2363 | "lowercase-keys": "^2.0.0" 2364 | }, 2365 | "funding": { 2366 | "url": "https://github.com/sponsors/sindresorhus" 2367 | } 2368 | }, 2369 | "node_modules/reusify": { 2370 | "version": "1.0.4", 2371 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2372 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2373 | "engines": { 2374 | "iojs": ">=1.0.0", 2375 | "node": ">=0.10.0" 2376 | } 2377 | }, 2378 | "node_modules/run-parallel": { 2379 | "version": "1.2.0", 2380 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2381 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2382 | "funding": [ 2383 | { 2384 | "type": "github", 2385 | "url": "https://github.com/sponsors/feross" 2386 | }, 2387 | { 2388 | "type": "patreon", 2389 | "url": "https://www.patreon.com/feross" 2390 | }, 2391 | { 2392 | "type": "consulting", 2393 | "url": "https://feross.org/support" 2394 | } 2395 | ], 2396 | "dependencies": { 2397 | "queue-microtask": "^1.2.2" 2398 | } 2399 | }, 2400 | "node_modules/safe-buffer": { 2401 | "version": "5.2.1", 2402 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2403 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2404 | "dev": true, 2405 | "funding": [ 2406 | { 2407 | "type": "github", 2408 | "url": "https://github.com/sponsors/feross" 2409 | }, 2410 | { 2411 | "type": "patreon", 2412 | "url": "https://www.patreon.com/feross" 2413 | }, 2414 | { 2415 | "type": "consulting", 2416 | "url": "https://feross.org/support" 2417 | } 2418 | ] 2419 | }, 2420 | "node_modules/scheduler": { 2421 | "version": "0.23.0", 2422 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 2423 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 2424 | "dependencies": { 2425 | "loose-envify": "^1.1.0" 2426 | } 2427 | }, 2428 | "node_modules/semver": { 2429 | "version": "7.5.4", 2430 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 2431 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 2432 | "dev": true, 2433 | "dependencies": { 2434 | "lru-cache": "^6.0.0" 2435 | }, 2436 | "bin": { 2437 | "semver": "bin/semver.js" 2438 | }, 2439 | "engines": { 2440 | "node": ">=10" 2441 | } 2442 | }, 2443 | "node_modules/semver-regex": { 2444 | "version": "4.0.5", 2445 | "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", 2446 | "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", 2447 | "dev": true, 2448 | "engines": { 2449 | "node": ">=12" 2450 | }, 2451 | "funding": { 2452 | "url": "https://github.com/sponsors/sindresorhus" 2453 | } 2454 | }, 2455 | "node_modules/semver-truncate": { 2456 | "version": "3.0.0", 2457 | "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-3.0.0.tgz", 2458 | "integrity": "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==", 2459 | "dev": true, 2460 | "dependencies": { 2461 | "semver": "^7.3.5" 2462 | }, 2463 | "engines": { 2464 | "node": ">=12" 2465 | }, 2466 | "funding": { 2467 | "url": "https://github.com/sponsors/sindresorhus" 2468 | } 2469 | }, 2470 | "node_modules/semver/node_modules/lru-cache": { 2471 | "version": "6.0.0", 2472 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2473 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2474 | "dev": true, 2475 | "dependencies": { 2476 | "yallist": "^4.0.0" 2477 | }, 2478 | "engines": { 2479 | "node": ">=10" 2480 | } 2481 | }, 2482 | "node_modules/semver/node_modules/yallist": { 2483 | "version": "4.0.0", 2484 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2485 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2486 | "dev": true 2487 | }, 2488 | "node_modules/shebang-command": { 2489 | "version": "1.2.0", 2490 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2491 | "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", 2492 | "dev": true, 2493 | "dependencies": { 2494 | "shebang-regex": "^1.0.0" 2495 | }, 2496 | "engines": { 2497 | "node": ">=0.10.0" 2498 | } 2499 | }, 2500 | "node_modules/shebang-regex": { 2501 | "version": "1.0.0", 2502 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2503 | "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", 2504 | "dev": true, 2505 | "engines": { 2506 | "node": ">=0.10.0" 2507 | } 2508 | }, 2509 | "node_modules/signal-exit": { 2510 | "version": "3.0.7", 2511 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2512 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2513 | "dev": true 2514 | }, 2515 | "node_modules/slash": { 2516 | "version": "3.0.0", 2517 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 2518 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 2519 | "dev": true, 2520 | "engines": { 2521 | "node": ">=8" 2522 | } 2523 | }, 2524 | "node_modules/sort-keys": { 2525 | "version": "1.1.2", 2526 | "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", 2527 | "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", 2528 | "dev": true, 2529 | "dependencies": { 2530 | "is-plain-obj": "^1.0.0" 2531 | }, 2532 | "engines": { 2533 | "node": ">=0.10.0" 2534 | } 2535 | }, 2536 | "node_modules/sort-keys-length": { 2537 | "version": "1.0.1", 2538 | "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", 2539 | "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", 2540 | "dev": true, 2541 | "dependencies": { 2542 | "sort-keys": "^1.0.0" 2543 | }, 2544 | "engines": { 2545 | "node": ">=0.10.0" 2546 | } 2547 | }, 2548 | "node_modules/source-map": { 2549 | "version": "0.7.4", 2550 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", 2551 | "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", 2552 | "dev": true, 2553 | "engines": { 2554 | "node": ">= 8" 2555 | } 2556 | }, 2557 | "node_modules/source-map-js": { 2558 | "version": "1.0.2", 2559 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 2560 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 2561 | "engines": { 2562 | "node": ">=0.10.0" 2563 | } 2564 | }, 2565 | "node_modules/streamsearch": { 2566 | "version": "1.1.0", 2567 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 2568 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 2569 | "engines": { 2570 | "node": ">=10.0.0" 2571 | } 2572 | }, 2573 | "node_modules/string_decoder": { 2574 | "version": "1.3.0", 2575 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 2576 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 2577 | "dev": true, 2578 | "dependencies": { 2579 | "safe-buffer": "~5.2.0" 2580 | } 2581 | }, 2582 | "node_modules/strip-eof": { 2583 | "version": "1.0.0", 2584 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 2585 | "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", 2586 | "dev": true, 2587 | "engines": { 2588 | "node": ">=0.10.0" 2589 | } 2590 | }, 2591 | "node_modules/strip-final-newline": { 2592 | "version": "2.0.0", 2593 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 2594 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 2595 | "dev": true, 2596 | "engines": { 2597 | "node": ">=6" 2598 | } 2599 | }, 2600 | "node_modules/strip-outer": { 2601 | "version": "2.0.0", 2602 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz", 2603 | "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==", 2604 | "dev": true, 2605 | "engines": { 2606 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2607 | }, 2608 | "funding": { 2609 | "url": "https://github.com/sponsors/sindresorhus" 2610 | } 2611 | }, 2612 | "node_modules/strtok3": { 2613 | "version": "7.0.0", 2614 | "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", 2615 | "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", 2616 | "dev": true, 2617 | "dependencies": { 2618 | "@tokenizer/token": "^0.3.0", 2619 | "peek-readable": "^5.0.0" 2620 | }, 2621 | "engines": { 2622 | "node": ">=14.16" 2623 | }, 2624 | "funding": { 2625 | "type": "github", 2626 | "url": "https://github.com/sponsors/Borewit" 2627 | } 2628 | }, 2629 | "node_modules/styled-jsx": { 2630 | "version": "5.1.1", 2631 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", 2632 | "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", 2633 | "dependencies": { 2634 | "client-only": "0.0.1" 2635 | }, 2636 | "engines": { 2637 | "node": ">= 12.0.0" 2638 | }, 2639 | "peerDependencies": { 2640 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" 2641 | }, 2642 | "peerDependenciesMeta": { 2643 | "@babel/core": { 2644 | "optional": true 2645 | }, 2646 | "babel-plugin-macros": { 2647 | "optional": true 2648 | } 2649 | } 2650 | }, 2651 | "node_modules/sucrase": { 2652 | "version": "3.32.0", 2653 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", 2654 | "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", 2655 | "dependencies": { 2656 | "@jridgewell/gen-mapping": "^0.3.2", 2657 | "commander": "^4.0.0", 2658 | "glob": "7.1.6", 2659 | "lines-and-columns": "^1.1.6", 2660 | "mz": "^2.7.0", 2661 | "pirates": "^4.0.1", 2662 | "ts-interface-checker": "^0.1.9" 2663 | }, 2664 | "bin": { 2665 | "sucrase": "bin/sucrase", 2666 | "sucrase-node": "bin/sucrase-node" 2667 | }, 2668 | "engines": { 2669 | "node": ">=8" 2670 | } 2671 | }, 2672 | "node_modules/supports-preserve-symlinks-flag": { 2673 | "version": "1.0.0", 2674 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2675 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2676 | "engines": { 2677 | "node": ">= 0.4" 2678 | }, 2679 | "funding": { 2680 | "url": "https://github.com/sponsors/ljharb" 2681 | } 2682 | }, 2683 | "node_modules/tailwindcss": { 2684 | "version": "3.3.2", 2685 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", 2686 | "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", 2687 | "dependencies": { 2688 | "@alloc/quick-lru": "^5.2.0", 2689 | "arg": "^5.0.2", 2690 | "chokidar": "^3.5.3", 2691 | "didyoumean": "^1.2.2", 2692 | "dlv": "^1.1.3", 2693 | "fast-glob": "^3.2.12", 2694 | "glob-parent": "^6.0.2", 2695 | "is-glob": "^4.0.3", 2696 | "jiti": "^1.18.2", 2697 | "lilconfig": "^2.1.0", 2698 | "micromatch": "^4.0.5", 2699 | "normalize-path": "^3.0.0", 2700 | "object-hash": "^3.0.0", 2701 | "picocolors": "^1.0.0", 2702 | "postcss": "^8.4.23", 2703 | "postcss-import": "^15.1.0", 2704 | "postcss-js": "^4.0.1", 2705 | "postcss-load-config": "^4.0.1", 2706 | "postcss-nested": "^6.0.1", 2707 | "postcss-selector-parser": "^6.0.11", 2708 | "postcss-value-parser": "^4.2.0", 2709 | "resolve": "^1.22.2", 2710 | "sucrase": "^3.32.0" 2711 | }, 2712 | "bin": { 2713 | "tailwind": "lib/cli.js", 2714 | "tailwindcss": "lib/cli.js" 2715 | }, 2716 | "engines": { 2717 | "node": ">=14.0.0" 2718 | } 2719 | }, 2720 | "node_modules/thenify": { 2721 | "version": "3.3.1", 2722 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 2723 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 2724 | "dependencies": { 2725 | "any-promise": "^1.0.0" 2726 | } 2727 | }, 2728 | "node_modules/thenify-all": { 2729 | "version": "1.6.0", 2730 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 2731 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 2732 | "dependencies": { 2733 | "thenify": ">= 3.1.0 < 4" 2734 | }, 2735 | "engines": { 2736 | "node": ">=0.8" 2737 | } 2738 | }, 2739 | "node_modules/to-regex-range": { 2740 | "version": "5.0.1", 2741 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2742 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2743 | "dependencies": { 2744 | "is-number": "^7.0.0" 2745 | }, 2746 | "engines": { 2747 | "node": ">=8.0" 2748 | } 2749 | }, 2750 | "node_modules/token-types": { 2751 | "version": "5.0.1", 2752 | "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", 2753 | "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", 2754 | "dev": true, 2755 | "dependencies": { 2756 | "@tokenizer/token": "^0.3.0", 2757 | "ieee754": "^1.2.1" 2758 | }, 2759 | "engines": { 2760 | "node": ">=14.16" 2761 | }, 2762 | "funding": { 2763 | "type": "github", 2764 | "url": "https://github.com/sponsors/Borewit" 2765 | } 2766 | }, 2767 | "node_modules/trim-repeated": { 2768 | "version": "2.0.0", 2769 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz", 2770 | "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==", 2771 | "dev": true, 2772 | "dependencies": { 2773 | "escape-string-regexp": "^5.0.0" 2774 | }, 2775 | "engines": { 2776 | "node": ">=12" 2777 | } 2778 | }, 2779 | "node_modules/ts-interface-checker": { 2780 | "version": "0.1.13", 2781 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 2782 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" 2783 | }, 2784 | "node_modules/tslib": { 2785 | "version": "2.5.3", 2786 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", 2787 | "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" 2788 | }, 2789 | "node_modules/undici-types": { 2790 | "version": "5.26.5", 2791 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 2792 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 2793 | "dev": true 2794 | }, 2795 | "node_modules/update-browserslist-db": { 2796 | "version": "1.0.11", 2797 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", 2798 | "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", 2799 | "funding": [ 2800 | { 2801 | "type": "opencollective", 2802 | "url": "https://opencollective.com/browserslist" 2803 | }, 2804 | { 2805 | "type": "tidelift", 2806 | "url": "https://tidelift.com/funding/github/npm/browserslist" 2807 | }, 2808 | { 2809 | "type": "github", 2810 | "url": "https://github.com/sponsors/ai" 2811 | } 2812 | ], 2813 | "dependencies": { 2814 | "escalade": "^3.1.1", 2815 | "picocolors": "^1.0.0" 2816 | }, 2817 | "bin": { 2818 | "update-browserslist-db": "cli.js" 2819 | }, 2820 | "peerDependencies": { 2821 | "browserslist": ">= 4.21.0" 2822 | } 2823 | }, 2824 | "node_modules/use-debounce": { 2825 | "version": "9.0.4", 2826 | "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-9.0.4.tgz", 2827 | "integrity": "sha512-6X8H/mikbrt0XE8e+JXRtZ8yYVvKkdYRfmIhWZYsP8rcNs9hk3APV8Ua2mFkKRLcJKVdnX2/Vwrmg2GWKUQEaQ==", 2828 | "engines": { 2829 | "node": ">= 10.0.0" 2830 | }, 2831 | "peerDependencies": { 2832 | "react": ">=16.8.0" 2833 | } 2834 | }, 2835 | "node_modules/util-deprecate": { 2836 | "version": "1.0.2", 2837 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2838 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 2839 | }, 2840 | "node_modules/watchpack": { 2841 | "version": "2.4.0", 2842 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", 2843 | "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", 2844 | "dependencies": { 2845 | "glob-to-regexp": "^0.4.1", 2846 | "graceful-fs": "^4.1.2" 2847 | }, 2848 | "engines": { 2849 | "node": ">=10.13.0" 2850 | } 2851 | }, 2852 | "node_modules/which": { 2853 | "version": "1.3.1", 2854 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2855 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2856 | "dev": true, 2857 | "dependencies": { 2858 | "isexe": "^2.0.0" 2859 | }, 2860 | "bin": { 2861 | "which": "bin/which" 2862 | } 2863 | }, 2864 | "node_modules/wrappy": { 2865 | "version": "1.0.2", 2866 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2867 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 2868 | }, 2869 | "node_modules/yallist": { 2870 | "version": "2.1.2", 2871 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 2872 | "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", 2873 | "dev": true 2874 | }, 2875 | "node_modules/yaml": { 2876 | "version": "2.3.1", 2877 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", 2878 | "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", 2879 | "engines": { 2880 | "node": ">= 14" 2881 | } 2882 | }, 2883 | "node_modules/zod": { 2884 | "version": "3.21.4", 2885 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", 2886 | "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", 2887 | "funding": { 2888 | "url": "https://github.com/sponsors/colinhacks" 2889 | } 2890 | } 2891 | } 2892 | } 2893 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cineworld-nextjs", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "autoprefixer": "10.4.14", 13 | "dotenv": "^16.3.1", 14 | "next": "13.4.7", 15 | "postcss": "8.4.24", 16 | "react": "18.2.0", 17 | "react-dom": "18.2.0", 18 | "react-icons": "^4.10.1", 19 | "tailwindcss": "3.3.2", 20 | "use-debounce": "^9.0.4" 21 | }, 22 | "devDependencies": { 23 | "@swc/cli": "^0.3.5", 24 | "@swc/core": "^1.3.107" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/episodeImg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanvarghesepaul22/CINEWORLD-NextJS/6a95acfcbdd237b1fdaf9b08f2949692b5677d33/public/episodeImg.jpg -------------------------------------------------------------------------------- /public/movieCard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanvarghesepaul22/CINEWORLD-NextJS/6a95acfcbdd237b1fdaf9b08f2949692b5677d33/public/movieCard.jpg -------------------------------------------------------------------------------- /public/next.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg> -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 283 64"><path fill="black" d="M141 16c-11 0-19 7-19 18s9 18 20 18c7 0 13-3 16-7l-7-5c-2 3-6 4-9 4-5 0-9-3-10-7h28v-3c0-11-8-18-19-18zm-9 15c1-4 4-7 9-7s8 3 9 7h-18zm117-15c-11 0-19 7-19 18s9 18 20 18c6 0 12-3 16-7l-8-5c-2 3-5 4-8 4-5 0-9-3-11-7h28l1-3c0-11-8-18-19-18zm-10 15c2-4 5-7 10-7s8 3 9 7h-19zm-39 3c0 6 4 10 10 10 4 0 7-2 9-5l8 5c-3 5-9 8-17 8-11 0-19-7-19-18s8-18 19-18c8 0 14 3 17 8l-8 5c-2-3-5-5-9-5-6 0-10 4-10 10zm83-29v46h-9V5h9zM37 0l37 64H0L37 0zm92 5-27 48L74 5h10l18 30 17-30h10zm59 12v10l-3-1c-6 0-10 4-10 10v15h-9V17h9v9c0-5 6-9 13-9z"/></svg> -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | "./pages/**/*.{js,ts,jsx,tsx,mdx}", 5 | "./components/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./app/**/*.{js,ts,jsx,tsx,mdx}", 7 | ], 8 | theme: { 9 | extend: { 10 | backgroundImage: { 11 | "gradient-radial": "radial-gradient(var(--tw-gradient-stops))", 12 | "gradient-conic": 13 | "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))", 14 | }, 15 | colors: { 16 | "bg-black": "#0E0E0E", 17 | primary: "#FDE402", 18 | "light-primary": "#A69C40", 19 | white: "#ffffff", 20 | grey: "#1D1B1B", 21 | "light-white": "#6D6B6B", 22 | "navbg":"rgb(8, 8, 8)" 23 | }, 24 | }, 25 | }, 26 | plugins: [], 27 | }; 28 | --------------------------------------------------------------------------------