├── .env.template ├── .gitignore ├── .npmrc ├── .prettierrc ├── README.md ├── app ├── @modal │ ├── (.)movie │ │ └── [id] │ │ │ └── page.tsx │ └── default.tsx ├── api │ └── og │ │ └── route.tsx ├── default.tsx ├── layout.tsx ├── loader.tsx ├── movie │ └── [id] │ │ └── page.tsx └── page.tsx ├── components ├── hero.tsx ├── logo.tsx ├── modal.tsx ├── movie-details.tsx ├── movies-list.tsx ├── rating-feedback-emoji.tsx ├── ratings.tsx ├── search-result.tsx ├── search.tsx ├── tooltip.tsx └── top-nav.tsx ├── lib ├── db.server.ts ├── globals.css ├── rating-action.ts ├── schemas.ts └── xata.codegen.ts ├── next.config.mjs ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public ├── favicon.ico ├── placeholder.jpg ├── xata-logo-primary@2x.png ├── xatafly-colored.svg ├── xatafly-white.svg ├── xatafly.svg ├── xmdb-hero@2x.png └── xmdb-og.png ├── schema.json ├── scripts ├── one-click.mjs └── seed.mjs ├── tailwind.config.js └── tsconfig.json /.env.template: -------------------------------------------------------------------------------- 1 | XATA_API_KEY=XATA_API_KEY 2 | XATA_BRANCH=main 3 | VERCEL_URL=http://localhost:3000 -------------------------------------------------------------------------------- /.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 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | !.env.template 31 | 32 | # vercel 33 | .vercel 34 | 35 | # typescript 36 | *.tsbuildinfo 37 | next-env.d.ts 38 | 39 | .vscode 40 | 41 | 42 | ## workaround for turbopack 43 | dist.css 44 | .env 45 | .xata/ 46 | .xatarc -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | # force pnpm v8 default 2 | auto-install-peers=true -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "semi": false 4 | } 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | Xata and XMDB logo 3 | 4 | 5 | [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fxataio%2Fxmdb&integration-ids=oac_IDpMECDuYqBvAtu3wXXMQe0J&install-command=pnpm%20one-click) 6 | 7 | ## Features ⚡️ 8 | 9 | - [Typo-Tolerant Full-Text Search](https://xata.io/docs/api-guide/search). 10 | - [Aggregations](https://xata.io/docs/sdk/aggregate). 11 | - [Type-Safe SDK/ORM](https://github.com/xataio/client-ts/blob/main/packages/client/README.md) (schema-based types generation). 12 | - Next.js App Directory with React Server Components. 13 | - Intercepting Route 14 | - Parallel Route 15 | 16 | ## Stack ⚙️ 17 | 18 | | Package | Reason | 19 | | ----------- | ----------------------------- | 20 | | Zod | Schema validation | 21 | | Xata Client | ORM | 22 | | TailwindCSS | Styles | 23 | | vercel/OG | OG image generation | 24 | | React-Icons | SVG Icons as React components | 25 | 26 | ## Environment Setup 🧱 27 | 28 | To have your own local instance of this app, you will need 2 API keys, and your deployment URL. 29 | 30 | - [`XATA_API_TOKEN`](https://xata.io/docs/concepts/api-keys): to connect your own Xata workspace. 31 | - `VERCEL_URL`: popullated by Vercel, on your local environment it’s your local server url (`https://localhost:3000` by default). 32 | 33 | Once you have those keys, you can create a `.env.local` as shown in `.env.template`. 34 | 35 | ## Link to Xata 🦋 36 | 37 | You can run the `xata init` command with some default configuration: 38 | 39 | ```sh 40 | pnpm xata:link 41 | ``` 42 | 43 | By the end you should have the `XATA_API_TOKEN` in your `.env.local` and a `.xatarc` file created. 44 | 45 | ## Database Seed 🌱 46 | 47 | Once you have a working link with the workspace, you can run: 48 | 49 | ```sh 50 | pnpm xata:seed 51 | ``` 52 | 53 | This task will add **100 rows of mocked data** to get you started with a working app. 54 | 55 | ## Run Locally 🧑‍✈️ 56 | 57 | Once you project is linked and database has data, you can start the development server. 58 | 59 | ```sh 60 | pnpm dev 61 | ``` 62 | 63 | By default, server will run on [localhost:3000](http://localhost:3000). 64 | 65 | --- 66 | 67 | 68 | Xata's logo 69 | 70 | -------------------------------------------------------------------------------- /app/@modal/(.)movie/[id]/page.tsx: -------------------------------------------------------------------------------- 1 | import { notFound } from 'next/navigation' 2 | import Modal from '~/components/modal' 3 | import { MovieDetails } from '~/components/movie-details' 4 | 5 | type MovieDetailsProps = { 6 | params: { 7 | id: string 8 | } 9 | } 10 | 11 | export default function Details({ 12 | params: { id: movieId }, 13 | }: MovieDetailsProps) { 14 | if (!movieId) return notFound() 15 | return ( 16 | 17 | {/** @ts-expect-error Async Server Component */} 18 | 19 | 20 | ) 21 | } 22 | -------------------------------------------------------------------------------- /app/@modal/default.tsx: -------------------------------------------------------------------------------- 1 | export default function Default() { 2 | return null 3 | } 4 | -------------------------------------------------------------------------------- /app/api/og/route.tsx: -------------------------------------------------------------------------------- 1 | import { ImageResponse } from 'next/og' 2 | 3 | export async function GET(req: Request) { 4 | try { 5 | const { searchParams } = new URL(req.url) 6 | 7 | // ?title= 8 | const hasTitle = searchParams.has('title') 9 | const title = hasTitle 10 | ? searchParams.get('title')?.slice(0, 100) 11 | : 'Xata Movie Database' 12 | 13 | // ?image=<image-url> 14 | const image = hasTitle ? searchParams.get('image')?.slice(0, 100) : null 15 | 16 | return new ImageResponse( 17 | ( 18 | <div 19 | style={{ 20 | backgroundColor: 'black', 21 | backgroundSize: '150px 150px', 22 | height: '100%', 23 | width: '100%', 24 | display: 'flex', 25 | textAlign: 'center', 26 | alignItems: 'center', 27 | justifyContent: 'center', 28 | flexDirection: 'column', 29 | flexWrap: 'nowrap', 30 | }} 31 | > 32 | {image ? ( 33 | <div 34 | style={{ 35 | display: 'flex', 36 | alignItems: 'center', 37 | flexDirection: 'column', 38 | justifyContent: 'space-between', 39 | justifyItems: 'center', 40 | }} 41 | > 42 | <img 43 | src={image} 44 | style={{ 45 | width: '250px', 46 | borderRadius: '10px', 47 | }} 48 | /> 49 | </div> 50 | ) : null} 51 | <div 52 | style={{ 53 | fontSize: 60, 54 | fontStyle: 'normal', 55 | letterSpacing: '-0.025em', 56 | color: 'white', 57 | marginTop: 30, 58 | padding: '0 120px', 59 | lineHeight: 1.4, 60 | whiteSpace: 'pre-wrap', 61 | }} 62 | > 63 | {title} 64 | </div> 65 | </div> 66 | ), 67 | { 68 | width: 1200, 69 | height: 630, 70 | } 71 | ) 72 | } catch (e: any) { 73 | console.log(e.message) 74 | return new Response(`Failed to generate the image`, { 75 | status: 500, 76 | }) 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /app/default.tsx: -------------------------------------------------------------------------------- 1 | export default function Default() { 2 | return null 3 | } 4 | -------------------------------------------------------------------------------- /app/layout.tsx: -------------------------------------------------------------------------------- 1 | import { type ReactNode } from 'react' 2 | import Image from 'next/image' 3 | import { TopNav } from '~/components/top-nav' 4 | import xataflyWhite from '~/public/xatafly-white.svg' 5 | import '~/lib/globals.css' 6 | 7 | import { type Metadata } from 'next' 8 | 9 | const image = `/xmdb-og.png` as const 10 | const title = 'XMDB: Xata Movie Database' 11 | const description = 12 | 'Xata Movie Database (XMDB) was built with Xata using Next.js and TypeScript to showcase Xata can be used by large databases (over 9 million records).' 13 | 14 | export const metadata: Metadata = { 15 | icons: { 16 | icon: '/favicon.ico', 17 | }, 18 | title: title, 19 | description: description, 20 | openGraph: { 21 | images: [image], 22 | title: title, 23 | description: description, 24 | type: 'website', 25 | }, 26 | twitter: { 27 | images: [image], 28 | title: title, 29 | description: description, 30 | card: 'summary_large_image', 31 | }, 32 | } 33 | 34 | type RootLayoutProps = Record<'children' | 'modal', ReactNode> 35 | 36 | function RootLayout({ children, modal }: RootLayoutProps) { 37 | return ( 38 | <html lang="en"> 39 | <body className="grid grid-rows-[auto,1fr,auto] min-h-screen bg-gradient-to-b from-slate-950 to-slate-900 text-white"> 40 | <TopNav /> 41 | 42 | <main className="container mx-auto">{children}</main> 43 | {modal} 44 | <footer className="flex items-center justify-center gap-2 py-12"> 45 | <span>Powered by</span> 46 | <a 47 | className="inline-block" 48 | href="https://xata.io" 49 | rel="noopener noreferrer" 50 | target="_blank" 51 | > 52 | <Image src={xataflyWhite} alt="Xata Logo" className="w-6" /> 53 | </a> 54 | </footer> 55 | </body> 56 | </html> 57 | ) 58 | } 59 | 60 | export default RootLayout 61 | -------------------------------------------------------------------------------- /app/loader.tsx: -------------------------------------------------------------------------------- 1 | export default function Loader() { 2 | return ( 3 | <aside className="pt-40"> 4 | <div className="border-neutral-800 p-10 border-2 max-w-prose mx-auto rounded-lg animate-pulse grid grid-cols-[auto,1fr] place-items-center"> 5 | <svg 6 | xmlns="http://www.w3.org/2000/svg" 7 | fill="none" 8 | viewBox="0 0 24 24" 9 | strokeWidth={1.5} 10 | stroke="currentColor" 11 | className="w-24 h-24 text-pink-400" 12 | > 13 | <path 14 | strokeLinecap="round" 15 | strokeLinejoin="round" 16 | d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" 17 | /> 18 | </svg> 19 | 20 | <ul className="text-3xl text-neutral-500"> 21 | <li>Fetching records.</li> 22 | <li>Sorting records.</li> 23 | <li>Rendering records.</li> 24 | </ul> 25 | </div> 26 | </aside> 27 | ) 28 | } 29 | -------------------------------------------------------------------------------- /app/movie/[id]/page.tsx: -------------------------------------------------------------------------------- 1 | import { Hero } from '~/components/hero' 2 | import { fetchDefaultTitles, getMovie } from '~/lib/db.server' 3 | import { Metadata } from 'next' 4 | import { MovieDetails } from '~/components/movie-details' 5 | 6 | export async function generateMetadata({ 7 | params, 8 | }: { 9 | params: { id: string } 10 | }): Promise<Metadata> { 11 | const { id } = params 12 | const movie = await getMovie(id) 13 | const title = `${movie?.primaryTitle} - XMDB` 14 | const description = 15 | movie?.summary || `Page for title: ${movie?.primaryTitle} on XMDB` 16 | 17 | const image = `${process.env.VERCEL_URL}/api/og?title=${encodeURI( 18 | title 19 | )}&image=${movie?.coverUrl && encodeURI(movie?.coverUrl)}` 20 | 21 | return { 22 | title, 23 | description, 24 | openGraph: { 25 | title, 26 | description, 27 | images: [image], 28 | }, 29 | twitter: { 30 | title, 31 | description, 32 | images: [image], 33 | }, 34 | } 35 | } 36 | 37 | export default async function Movie({ params }: { params: { id: string } }) { 38 | return ( 39 | <main> 40 | <Hero searchTerm={''} /> 41 | {/** @ts-expect-error Server Component */} 42 | <MovieDetails id={params.id} /> 43 | </main> 44 | ) 45 | } 46 | 47 | // Pre-Render the default 20 homepage results' pages 48 | export async function generateStaticParams() { 49 | const { titles } = await fetchDefaultTitles() 50 | 51 | return titles.map((title) => ({ 52 | id: title.id, 53 | })) 54 | } 55 | -------------------------------------------------------------------------------- /app/page.tsx: -------------------------------------------------------------------------------- 1 | import { Suspense } from 'react' 2 | import Loader from './loader' 3 | import { getTotalTitles } from '~/lib/db.server' 4 | import { SearchResult } from '../components/search-result' 5 | import { Hero } from '~/components/hero' 6 | 7 | const Home = async ({ 8 | searchParams, 9 | }: { 10 | searchParams: { search?: string } 11 | }) => { 12 | const { totalTitles = '0' } = await getTotalTitles() 13 | 14 | return ( 15 | <main> 16 | <Hero searchTerm={searchParams.search} totalTitles={totalTitles} /> 17 | <Suspense fallback={<Loader />}> 18 | {/** @ts-expect-error Server Component */} 19 | <SearchResult searchTerm={searchParams.search} /> 20 | </Suspense> 21 | </main> 22 | ) 23 | } 24 | 25 | export default Home 26 | -------------------------------------------------------------------------------- /components/hero.tsx: -------------------------------------------------------------------------------- 1 | import { Search } from './search' 2 | 3 | type HeroProps = { searchTerm?: string; totalTitles?: string } 4 | 5 | export const Hero = ({ searchTerm, totalTitles }: HeroProps) => ( 6 | <div className="container px-4 py-8 mx-auto text-center lg:py-16 lg:px-12 "> 7 | <h1 className="p-4 text-3xl font-bold text-center text-transparent md:text-5xl lg:text-6xl from-pink-100 via-slate-100 to-pink-100 bg-gradient-to-r bg-clip-text"> 8 | Your gateway to movie exploration 9 | </h1> 10 | 11 | {totalTitles ? ( 12 | <p className="mb-8 text-lg font-normal text-gray-400 lg:text-xl sm:px-16 xl:px-48"> 13 | Search on: {totalTitles} titles 14 | </p> 15 | ) : null} 16 | 17 | <Search term={searchTerm} /> 18 | </div> 19 | ) 20 | -------------------------------------------------------------------------------- /components/logo.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link' 2 | import { RiMovie2Line as MovieRoll } from 'react-icons/ri' 3 | 4 | export function Xmdb() { 5 | return ( 6 | <Link 7 | href="/" 8 | className="inline-flex items-center justify-center h-10 gap-1 px-2 text-white bg-pink-600 rounded-lg hover:scale-110 transition-transform" 9 | > 10 | <h1 className="sr-only">Xata Movie Database</h1> 11 | <MovieRoll aria-hidden className="text-2xl" /> 12 | <span>XMDB</span> 13 | </Link> 14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /components/modal.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | /** 3 | * Adapted from NextGram 4 | * https://github.com/vercel-labs/nextgram/blob/main/components/modal/index.js 5 | */ 6 | import { useCallback, useRef, useEffect, MouseEvent } from 'react' 7 | import { useRouter } from 'next/navigation' 8 | import { RiCloseLine as CloseIcon } from 'react-icons/ri' 9 | import { motion, AnimatePresence } from 'framer-motion' 10 | 11 | export default function Modal({ children }: { children: React.ReactNode }) { 12 | const overlay = useRef(null) 13 | const wrapper = useRef(null) 14 | const router = useRouter() 15 | 16 | const onDismiss = useCallback(() => { 17 | router.back() 18 | }, [router]) 19 | 20 | const onClick = useCallback( 21 | (e: MouseEvent<HTMLDivElement>) => { 22 | if (e.target === overlay.current || e.target === wrapper.current) { 23 | if (onDismiss) onDismiss() 24 | } 25 | }, 26 | [onDismiss, overlay, wrapper] 27 | ) 28 | 29 | const onKeyDown = useCallback( 30 | (e: KeyboardEvent) => { 31 | if (e.key === 'Escape') onDismiss() 32 | }, 33 | [onDismiss] 34 | ) 35 | 36 | useEffect(() => { 37 | document.addEventListener('keydown', onKeyDown) 38 | document.body.style.overflow = 'hidden' 39 | 40 | return () => { 41 | document.removeEventListener('keydown', onKeyDown) 42 | document.body.style.overflow = 'auto' 43 | } 44 | }, [onKeyDown]) 45 | 46 | const dropIn = { 47 | hidden: { 48 | opacity: 0, 49 | top: '45%', 50 | left: '50%', 51 | x: '-50%', 52 | y: '-50%', 53 | scale: 0.8, 54 | }, 55 | visible: { 56 | opacity: 1, 57 | top: '50%', 58 | left: '50%', 59 | x: '-50%', 60 | y: '-50%', 61 | scale: 1, 62 | transition: { 63 | duration: 1, 64 | type: 'spring', 65 | }, 66 | }, 67 | exit: { 68 | opacity: 0, 69 | top: '55%', 70 | left: '50%', 71 | x: '-50%', 72 | y: '-50%', 73 | scale: 0.8, 74 | }, 75 | } 76 | 77 | return ( 78 | <div 79 | ref={overlay} 80 | className="fixed top-0 left-0 right-0 z-10 w-screen h-screen moveUp md:py-6 backdrop-blur-sm" 81 | onClick={onClick} 82 | > 83 | <AnimatePresence> 84 | <motion.div 85 | onClick={(e) => e.stopPropagation()} 86 | variants={dropIn} 87 | initial="hidden" 88 | animate="visible" 89 | exit="exit" 90 | ref={wrapper} 91 | className="fixed z-20 w-full max-w-4xl max-h-screen overflow-y-auto rounded-lg bg-slate-900 sm:w-full md:w-10/12 lg:w-1/2 overscroll-contain" 92 | > 93 | <button 94 | onClick={onDismiss} 95 | className="absolute z-10 text-2xl text-white cursor-pointer top-4 right-4 focus:text-pink-400 focus:scale-110 focus:outline-0" 96 | > 97 | <CloseIcon /> 98 | </button> 99 | {children} 100 | </motion.div> 101 | </AnimatePresence> 102 | </div> 103 | ) 104 | } 105 | -------------------------------------------------------------------------------- /components/movie-details.tsx: -------------------------------------------------------------------------------- 1 | import { notFound } from 'next/navigation' 2 | import { getMovie } from '~/lib/db.server' 3 | import { Rating } from './ratings' 4 | 5 | export async function MovieDetails({ id }: { id: string }) { 6 | const movie = await getMovie(id) 7 | 8 | if (movie === null) return notFound() 9 | 10 | const { 11 | coverUrl = '', 12 | primaryTitle, 13 | summary, 14 | startYear, 15 | genres, 16 | runtimeMinutes, 17 | averageRating, 18 | numVotes, 19 | } = movie 20 | 21 | return ( 22 | <div className="relative grid"> 23 | <article className="grid max-w-5xl gap-8 p-8 mx-auto lg:grid lg:grid-cols-2"> 24 | <section className="grid pt-4 place-items-center"> 25 | {coverUrl?.startsWith('http') && !coverUrl?.endsWith('null') ? ( 26 | <picture> 27 | <source srcSet={coverUrl} type="image/webp" /> 28 | <img 29 | src={coverUrl} 30 | alt={`Poster for "${primaryTitle}"`} 31 | className="rounded-lg " 32 | /> 33 | </picture> 34 | ) : ( 35 | <picture> 36 | <img 37 | src="/placeholder.jpg" 38 | alt="Placeholder image" 39 | className="absolute inset-0 w-full transform -translate-y-4" 40 | /> 41 | </picture> 42 | )} 43 | </section> 44 | <section> 45 | <h1 className="pt-4 mb-4 text-3xl text-white">{primaryTitle}</h1> 46 | 47 | {genres && genres.length > 0 && ( 48 | <ul className="flex gap-2 mb-4"> 49 | {genres?.map((genre) => ( 50 | <li 51 | key={id + genre} 52 | className="px-2 py-1 text-xs border rounded-lg" 53 | > 54 | {genre} 55 | </li> 56 | ))} 57 | </ul> 58 | )} 59 | 60 | <div className="flex justify-between"> 61 | <div> 62 | {averageRating ? ( 63 | <span> 64 | <Rating value={averageRating} title={id} />{' '} 65 | <small>({numVotes?.toLocaleString('en-Us')} votes)</small> 66 | </span> 67 | ) : null} 68 | </div> 69 | 70 | <div> 71 | {startYear && ( 72 | <time className="block " dateTime={String(startYear)}> 73 | {startYear} 74 | </time> 75 | )} 76 | </div> 77 | </div> 78 | <p className="pt-4 mx-auto max-w-prose">{summary}</p> 79 | <p className="pt-4 text-gray-400"> 80 | Duration: {runtimeMinutes} minutes. 81 | </p> 82 | </section> 83 | </article> 84 | </div> 85 | ) 86 | } 87 | -------------------------------------------------------------------------------- /components/movies-list.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link' 2 | import { Titles } from '~/lib/xata.codegen' 3 | 4 | const MovieCard = ({ data }: { data: Titles }) => { 5 | const { primaryTitle, genres, coverUrl, summary, averageRating, id } = data 6 | 7 | return ( 8 | <Link href={`/movie/${id}`} className="block outline-none"> 9 | <li className="flex w-full h-full max-w-sm mx-auto overflow-hidden transition duration-500 ease-in-out shadow-lg bg-slate-950 rounded-xl hover:-translate-y-2 hover:shadow-2xl relative text-white after:absolute after:inset-0 after:bg-gradient-to-t after:from-black after:via-slate-900 after:to-transparent focus-within:outline focus-within:outline-pink-600"> 10 | <div className="relative z-10 px-6 pb-10 group"> 11 | <header className="flex flex-col inner pb-6"> 12 | <h2 className="text-2xl min-h-[4rem] font-bold text-white flex flex-col justify-center pt-40 pb-4"> 13 | {primaryTitle} 14 | </h2> 15 | 16 | <ul className="inline-flex gap-2 pt-3 mb-0 text-sm text-white"> 17 | {genres?.map((genre) => ( 18 | <li 19 | key={id + genre} 20 | className="px-2 py-1 text-xs border rounded-lg" 21 | > 22 | {genre} 23 | </li> 24 | ))} 25 | </ul> 26 | </header> 27 | {summary && ( 28 | <p className="pt-2 pb-6 text-sm text-slate-100"> 29 | {summary.length > 260 ? summary.substring(0, 250) + '…' : summary} 30 | </p> 31 | )} 32 | </div> 33 | 34 | {coverUrl?.startsWith('http') && !coverUrl?.endsWith('null') ? ( 35 | <picture> 36 | <source srcSet={coverUrl} type="image/webp" /> 37 | <img 38 | src={coverUrl} 39 | alt={`Poster for "${primaryTitle}"`} 40 | className="absolute inset-0 w-full transform -translate-y-4 grayscale-[0.7]" 41 | /> 42 | </picture> 43 | ) : ( 44 | <picture> 45 | <img 46 | src="/placeholder.jpg" 47 | alt="Placeholder image" 48 | className="absolute inset-0 w-full transform -translate-y-4" 49 | /> 50 | </picture> 51 | )} 52 | </li> 53 | </Link> 54 | ) 55 | } 56 | 57 | export const MoviesList = async ({ titles }: { titles: Titles[] }) => { 58 | return ( 59 | <ul className="container grid gap-8 px-4 mx-auto xl:grid-cols-4 lg:grid-cols-3 lg:px-12 md:grid-cols-2"> 60 | {titles.map((movie) => ( 61 | <MovieCard key={movie.id} data={movie} /> 62 | ))} 63 | </ul> 64 | ) 65 | } 66 | -------------------------------------------------------------------------------- /components/rating-feedback-emoji.tsx: -------------------------------------------------------------------------------- 1 | import { motion } from 'framer-motion' 2 | 3 | const emojisVariants = (yPosition: number) => { 4 | return { 5 | hidden: { translateY: -yPosition, opacity: 0 }, 6 | visible: { 7 | translateY: [0, -yPosition, -(yPosition * 2)], 8 | opacity: [0, 1, 0], 9 | transition: { duration: 2 }, 10 | }, 11 | } 12 | } 13 | 14 | export const RatingFeedbackEmoji = ({ 15 | animate, 16 | yPosition, 17 | emoji, 18 | xPosition, 19 | }: { 20 | animate: boolean 21 | yPosition: number 22 | emoji: string 23 | xPosition: 'left' | 'right' | 'center' 24 | }) => { 25 | let xPositionObj = {} 26 | 27 | if (xPosition === 'left') { 28 | xPositionObj = { right: '0' } 29 | } else if (xPosition === 'right') { 30 | xPositionObj = { left: '0' } 31 | } else if (xPosition === 'center') { 32 | xPositionObj = { left: '50%', transform: 'translateX(-50%)' } 33 | } 34 | 35 | return ( 36 | <motion.div 37 | style={{ 38 | position: 'absolute', 39 | ...xPositionObj, 40 | }} 41 | animate={animate ? 'visible' : 'hidden'} 42 | variants={emojisVariants(yPosition)} 43 | initial="hidden" 44 | > 45 | {emoji} 46 | </motion.div> 47 | ) 48 | } 49 | -------------------------------------------------------------------------------- /components/ratings.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import { useEffect, useState, useTransition } from 'react' 4 | import { FaStarHalf, FaStar } from 'react-icons/fa' 5 | import { rate } from '~/lib/rating-action' 6 | import { motion } from 'framer-motion' 7 | import { RatingFeedbackEmoji } from './rating-feedback-emoji' 8 | import { Tooltip } from './tooltip' 9 | 10 | function getRemainingValue(evaluation: number, dec: number = 0) { 11 | if (evaluation >= 5) return 0 12 | 13 | if (dec >= 0.4) { 14 | // first star is a half star 15 | return 4 - evaluation 16 | } 17 | 18 | return 5 - evaluation 19 | } 20 | 21 | function getVoteValue( 22 | currentRating: number, 23 | hasHalf: boolean, 24 | remainingIndex: number 25 | ) { 26 | if (hasHalf) { 27 | // remaining index is base 0 28 | // + 1 for the half point 29 | return currentRating + remainingIndex + 2 30 | } else { 31 | return currentRating + remainingIndex + 1 32 | } 33 | } 34 | 35 | export const Rating = ({ value, title }: { value: number; title: string }) => { 36 | const ratingValue = value / 2 37 | const decimalPoints = Number((ratingValue % 1).toFixed(1)) 38 | const shouldShowDecimal = decimalPoints >= 0.4 39 | const evaluation = Array(Math.floor(ratingValue)).fill(undefined) 40 | const remaining = Array( 41 | getRemainingValue(evaluation.length, decimalPoints) 42 | ).fill(undefined) 43 | 44 | const [isPending, startTransition] = useTransition() 45 | const [isVoting, toggleIsVoting] = useState(false) 46 | const [votedRate, setVotedRate] = useState<number>() 47 | 48 | useEffect(() => { 49 | if (isPending) { 50 | toggleIsVoting(true) 51 | } 52 | 53 | setTimeout(() => { 54 | toggleIsVoting(false) 55 | }, 4000) 56 | }, [isPending]) 57 | 58 | const hoverStarColor = isVoting ? '' : 'hover:text-pink-500' 59 | const starColor = isVoting ? 'text-slate-600' : 'text-pink-500' 60 | 61 | return ( 62 | <form 63 | className="relative" 64 | action={(data) => 65 | startTransition(() => { 66 | const userRate = Number(data.get('vote') ?? 0) 67 | setVotedRate(userRate) 68 | rate(data) 69 | }) 70 | } 71 | > 72 | <input type="hidden" name="title" value={title} /> 73 | 74 | <div className="relative inline-flex"> 75 | {isVoting && votedRate && ( 76 | <> 77 | <RatingFeedbackEmoji 78 | animate={votedRate ? true : false} 79 | yPosition={50} 80 | xPosition="left" 81 | emoji="🥰" 82 | /> 83 | 84 | <RatingFeedbackEmoji 85 | animate={votedRate ? true : false} 86 | yPosition={60} 87 | xPosition="center" 88 | emoji="🙏" 89 | /> 90 | 91 | <RatingFeedbackEmoji 92 | animate={votedRate ? true : false} 93 | yPosition={56} 94 | xPosition="right" 95 | emoji="🔥" 96 | /> 97 | 98 | <Tooltip animate={votedRate ? true : false} votedRate={votedRate} /> 99 | </> 100 | )} 101 | <ul 102 | aria-label={`Rating is ${ratingValue}`} 103 | className={`flex gap-1 text-sm ${starColor}`} 104 | title={String(ratingValue)} 105 | > 106 | {evaluation.map((_, idx) => ( 107 | <li key={idx + 'rating'} className="cursor-pointer"> 108 | <button 109 | type="submit" 110 | name="vote" 111 | value={idx + 1} 112 | disabled={isVoting} 113 | > 114 | <FaStar /> 115 | </button> 116 | </li> 117 | ))} 118 | 119 | {shouldShowDecimal ? ( 120 | <li key="decimal-rating"> 121 | <button 122 | type="submit" 123 | name="vote" 124 | value={evaluation.length + 1} 125 | disabled={isVoting} 126 | style={{ position: 'relative' }} 127 | > 128 | <FaStar 129 | className={`text-transparent ${hoverStarColor} z-10 relative`} 130 | strokeWidth="5" 131 | stroke="white" 132 | strokeOpacity={1} 133 | /> 134 | <FaStarHalf className="absolute top-0 left-0" /> 135 | </button> 136 | </li> 137 | ) : null} 138 | {Array.isArray(remaining) && 139 | remaining.map((_, idx) => { 140 | return ( 141 | <li key={idx + 'remaining'}> 142 | <button 143 | type="submit" 144 | name="vote" 145 | value={getVoteValue( 146 | evaluation.length, 147 | shouldShowDecimal, 148 | idx 149 | )} 150 | disabled={isVoting} 151 | > 152 | <FaStar 153 | className={`text-transparent ${hoverStarColor} z-10 relative`} 154 | strokeWidth="5" 155 | stroke="white" 156 | strokeOpacity={1} 157 | /> 158 | </button> 159 | </li> 160 | ) 161 | })} 162 | </ul> 163 | </div> 164 | </form> 165 | ) 166 | } 167 | -------------------------------------------------------------------------------- /components/search-result.tsx: -------------------------------------------------------------------------------- 1 | import { MoviesList } from '~/components/movies-list' 2 | import { getMovies } from '~/lib/db.server' 3 | 4 | export const SearchResult = async ({ 5 | searchTerm = '', 6 | }: { 7 | searchTerm?: string 8 | }) => { 9 | const { titles = [] } = await getMovies(searchTerm) 10 | 11 | return ( 12 | <> 13 | {titles.length < 1 ? ( 14 | <article className="grid place-items-center"> 15 | <p>The Case of Missing Data</p> 16 | </article> 17 | ) : ( 18 | <article> 19 | {/** @ts-expect-error Server Component */} 20 | <MoviesList titles={titles} /> 21 | </article> 22 | )} 23 | </> 24 | ) 25 | } 26 | -------------------------------------------------------------------------------- /components/search.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | import { useRouter } from 'next/navigation' 3 | 4 | export const Search = ({ term }: { term?: string }) => { 5 | const { push } = useRouter() 6 | return ( 7 | <form 8 | onSubmit={(evt) => { 9 | evt.preventDefault() 10 | const searchTerm = new FormData(evt.currentTarget).get('searchField') 11 | push(`/?search=${searchTerm}`) 12 | }} 13 | > 14 | <div className="relative max-w-4xl mx-auto"> 15 | <MagnifyingGlass 16 | className="absolute top-4 left-4 w-5 h-5 text-gray-400 pointer-events-none" 17 | aria-hidden 18 | /> 19 | <input 20 | type="search" 21 | name="searchField" 22 | defaultValue={typeof term === 'string' ? decodeURI(term) : ''} 23 | autoComplete="off" 24 | className="block w-full p-4 pl-10 text-sm text-white placeholder-gray-400 border rounded-2xl border-slate-700 bg-slate-900 focus:border-pink-500 outline-pink-600" 25 | required 26 | /> 27 | <button 28 | type="submit" 29 | className="text-white absolute right-2.5 bottom-2.5 focus:ring-4 focus:outline-none font-medium rounded-xl text-sm px-4 py-2 bg-pink-600 hover:bg-pink-700 focus:ring-pink-800" 30 | > 31 | Search 32 | </button> 33 | </div> 34 | </form> 35 | ) 36 | } 37 | 38 | function MagnifyingGlass({ className, ...props }: { className?: string }) { 39 | return ( 40 | <svg 41 | className={className} 42 | fill="none" 43 | stroke="currentColor" 44 | viewBox="0 0 24 24" 45 | xmlns="http://www.w3.org/2000/svg" 46 | {...props} 47 | > 48 | <path 49 | strokeLinecap="round" 50 | strokeLinejoin="round" 51 | strokeWidth="2" 52 | d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" 53 | /> 54 | </svg> 55 | ) 56 | } 57 | -------------------------------------------------------------------------------- /components/tooltip.tsx: -------------------------------------------------------------------------------- 1 | import { motion } from 'framer-motion' 2 | 3 | const tooltipYposition = 16 4 | 5 | const tooltipVariants = { 6 | hidden: { translateY: -tooltipYposition, opacity: 0 }, 7 | visible: { 8 | translateY: [0, -(tooltipYposition * 2), -(tooltipYposition * 3)], 9 | opacity: [0, 1, 0], 10 | transition: { duration: 4 }, 11 | }, 12 | } 13 | 14 | export const Tooltip = ({ 15 | animate, 16 | votedRate, 17 | }: { 18 | animate: boolean 19 | votedRate: number 20 | }) => { 21 | return ( 22 | <motion.div 23 | animate={animate ? 'visible' : 'hidden'} 24 | variants={tooltipVariants} 25 | id="tooltip-light" 26 | role="tooltip" 27 | className="absolute left-0 min-w-20 px-2 py-1 text-xs font-medium text-white -translate-y-1/2 bg-pink-500 rounded-lg shadow-sm whitespace-nowrap" 28 | > 29 | <p>You rated: {votedRate}</p> 30 | </motion.div> 31 | ) 32 | } 33 | -------------------------------------------------------------------------------- /components/top-nav.tsx: -------------------------------------------------------------------------------- 1 | import Image from 'next/image' 2 | import xataflyWhite from '~/public/xatafly-white.svg' 3 | import { SiGithub as Github, SiDiscord as Discord } from 'react-icons/si' 4 | import { Xmdb } from './logo' 5 | 6 | export const TopNav = () => ( 7 | <nav className="container flex items-center justify-between w-full px-4 py-4 mx-auto lg:px-12"> 8 | <Xmdb /> 9 | 10 | <ul className="flex items-center gap-4 text-sm font-medium text-white"> 11 | <li className="hidden lg:block"> 12 | <a href="https://xata.io" rel="noopener noreferrer"> 13 | <Image 14 | src={xataflyWhite} 15 | alt="Xata logo" 16 | className="w-6 transition-transform hover:scale-125 focus:scale-125" 17 | /> 18 | </a> 19 | </li> 20 | 21 | <li> 22 | <a href="https://github.com/xataio/xmdb/" rel="noopener noreferrer"> 23 | <Github className="text-2xl transition-transform focus:scale-125 hover:scale-125" /> 24 | </a> 25 | </li> 26 | 27 | <li> 28 | <a href="https://xata.io/discord" rel="noopener noreferrer"> 29 | <Discord className="text-2xl transition-transform focus:scale-125 hover:scale-125" /> 30 | </a> 31 | </li> 32 | </ul> 33 | </nav> 34 | ) 35 | -------------------------------------------------------------------------------- /lib/db.server.ts: -------------------------------------------------------------------------------- 1 | import 'server-only' 2 | import { getXataClient, TitlesRecord } from '~/lib/xata.codegen' 3 | import { gte, le } from '@xata.io/client' 4 | import { movie, movieList, OMDBschema } from './schemas' 5 | 6 | const xata = getXataClient() 7 | 8 | export const getMovie = async (id: TitlesRecord['id']) => { 9 | const title = await xata.db.titles.read(id) 10 | 11 | if (title === null) { 12 | console.error(`there is no movie with ${id}`) 13 | return null 14 | } 15 | 16 | return movie.parse(title) 17 | } 18 | 19 | export const getFunFacts = async () => { 20 | const { aggs } = await xata.db.titles.aggregate({ 21 | totalCount: { 22 | count: '*', 23 | }, 24 | sumVotes: { 25 | sum: { 26 | column: 'numVotes', 27 | }, 28 | }, 29 | ratingsAbove6: { 30 | count: { 31 | filter: { 32 | averageRating: { $gt: 6 }, 33 | }, 34 | }, 35 | }, 36 | rate6: { 37 | count: { 38 | filter: { 39 | averageRating: 6, 40 | }, 41 | }, 42 | }, 43 | ratingsBelow6: { 44 | count: { 45 | filter: { 46 | averageRating: { $lt: 6 }, 47 | }, 48 | }, 49 | }, 50 | }) 51 | 52 | return { 53 | totalTitles: aggs.totalCount.toLocaleString('en-US'), 54 | totalVotes: (aggs.sumVotes ?? 0).toLocaleString('en-US'), 55 | high: aggs.ratingsAbove6.toLocaleString('en-US'), 56 | low: aggs.ratingsBelow6.toLocaleString('en-US'), 57 | mid: aggs.rate6.toLocaleString('en-US'), 58 | } 59 | } 60 | export const getTotalTitles = async () => { 61 | const { aggs } = await xata.db.titles.aggregate({ 62 | totalCount: { 63 | count: '*', 64 | }, 65 | }) 66 | 67 | return { 68 | totalTitles: aggs.totalCount.toLocaleString('en-US'), 69 | } 70 | } 71 | 72 | export const fetchDefaultTitles = async () => { 73 | const { records: titles } = await xata.db.titles 74 | .filter({ 75 | $exists: 'startYear', 76 | titleType: 'movie', 77 | isAdult: false, 78 | }) 79 | .filter({ 80 | startYear: le(new Date().getFullYear()), 81 | averageRating: gte(7), // only movies with high average rating 82 | numVotes: gte(200000), // only movies with a bunch of votes 83 | }) 84 | .sort('startYear', 'desc') 85 | .getPaginated({ 86 | pagination: { 87 | size: 20, 88 | }, 89 | }) 90 | 91 | return { 92 | titles: movieList.parse(titles.filter(({ summary }) => summary !== 'N/A')), 93 | } 94 | } 95 | 96 | export const searchMovies = async (term: string) => { 97 | const { records } = await xata.db.titles.search(term, { 98 | fuzziness: term.length > 8 ? 2 : 0, 99 | prefix: 'phrase', 100 | 101 | filter: { 102 | titleType: 'movie', 103 | startYear: le(new Date().getFullYear()), 104 | }, 105 | boosters: [ 106 | { 107 | valueBooster: { column: 'primaryTitle', factor: 5, value: term }, 108 | }, 109 | { 110 | numericBooster: { column: 'numVotes', factor: 0.00001 }, 111 | }, 112 | { 113 | numericBooster: { column: 'averageRating', factor: 10 }, 114 | }, 115 | { 116 | numericBooster: { column: 'startYear', factor: 1 }, 117 | }, 118 | ], 119 | }) 120 | 121 | return { 122 | titles: movieList.parse( 123 | records.filter(({ summary }) => summary && summary !== 'N/A') 124 | ), 125 | } 126 | } 127 | 128 | export const getMovies = async (term: string) => { 129 | return term.length > 0 ? await searchMovies(term) : await fetchDefaultTitles() 130 | } 131 | 132 | export const voteRating = async (vote: number, title: string) => { 133 | // UI is base 5, rating DB is base 10 134 | const voteRating = vote * 2 135 | const { averageRating, numVotes } = movie.parse( 136 | await xata.db.titles.filter('id', title).getFirst() 137 | ) 138 | 139 | if (typeof averageRating !== 'number' || typeof numVotes !== 'number') { 140 | await xata.db.titles.update({ 141 | id: title, 142 | averageRating: voteRating, 143 | numVotes: 1, 144 | }) 145 | } else { 146 | const currentSum = averageRating * numVotes 147 | const totalVotes = numVotes + 1 148 | const newRate = (currentSum + voteRating) / totalVotes 149 | await xata.db.titles.update({ 150 | id: title, 151 | averageRating: newRate, 152 | numVotes: totalVotes, 153 | }) 154 | } 155 | 156 | return 157 | } 158 | -------------------------------------------------------------------------------- /lib/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer components { 6 | .rating-star { 7 | text-shadow: 0 0 theme(colors.pink.500); 8 | @apply text-transparent; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/rating-action.ts: -------------------------------------------------------------------------------- 1 | 'use server' 2 | 3 | import { voteRating } from './db.server' 4 | 5 | export async function rate(form: FormData) { 6 | const { title, vote } = Object.fromEntries(form.entries()) 7 | await voteRating(Number(vote), title as string) 8 | } 9 | -------------------------------------------------------------------------------- /lib/schemas.ts: -------------------------------------------------------------------------------- 1 | import { z } from 'zod' 2 | 3 | export const OMDBschema = z.object({ 4 | Poster: z.string().nullish(), 5 | Plot: z.string().nullish(), 6 | }) 7 | 8 | export const movie = z.object({ 9 | id: z.string(), 10 | isAdult: z.boolean().default(true), 11 | numVotes: z.number().nullish(), 12 | titleType: z.string().nullish(), 13 | primaryTitle: z.string().nullish(), 14 | originalTitle: z.string().nullish(), 15 | startYear: z.number().nullish(), 16 | endYear: z.number().nullish(), 17 | runtimeMinutes: z.number().nullish(), 18 | averageRating: z.number().nullish(), 19 | coverUrl: z.string().nullish(), 20 | summary: z.string().default('to be defined'), 21 | genres: z.array(z.string()).default([]), 22 | }) 23 | 24 | export const movieList = z.array(movie) 25 | 26 | export type OMDBdata = z.infer<typeof OMDBschema> 27 | -------------------------------------------------------------------------------- /lib/xata.codegen.ts: -------------------------------------------------------------------------------- 1 | // Generated by Xata Codegen 0.28.3. Please do not edit. 2 | import { buildClient } from "@xata.io/client"; 3 | import type { 4 | BaseClientOptions, 5 | SchemaInference, 6 | XataRecord, 7 | } from "@xata.io/client"; 8 | 9 | const tables = [ 10 | { 11 | name: "titles", 12 | columns: [ 13 | { name: "titleType", type: "string" }, 14 | { name: "primaryTitle", type: "string" }, 15 | { name: "originalTitle", type: "string" }, 16 | { name: "isAdult", type: "bool" }, 17 | { name: "startYear", type: "int" }, 18 | { name: "endYear", type: "int" }, 19 | { name: "runtimeMinutes", type: "float" }, 20 | { name: "genres", type: "multiple" }, 21 | { name: "numVotes", type: "int" }, 22 | { name: "averageRating", type: "float" }, 23 | { name: "coverUrl", type: "string" }, 24 | { name: "summary", type: "text" }, 25 | ], 26 | }, 27 | ] as const; 28 | 29 | export type SchemaTables = typeof tables; 30 | export type InferredTypes = SchemaInference<SchemaTables>; 31 | 32 | export type Titles = InferredTypes["titles"]; 33 | export type TitlesRecord = Titles & XataRecord; 34 | 35 | export type DatabaseSchema = { 36 | titles: TitlesRecord; 37 | }; 38 | 39 | const DatabaseClient = buildClient(); 40 | 41 | const defaultOptions = { 42 | databaseURL: "https://sample-databases-v0sn1n.eu-west-1.xata.sh/db/imdb", 43 | }; 44 | 45 | export class XataClient extends DatabaseClient<DatabaseSchema> { 46 | constructor(options?: BaseClientOptions) { 47 | super({ ...defaultOptions, ...options }, tables); 48 | } 49 | } 50 | 51 | let instance: XataClient | undefined = undefined; 52 | 53 | export const getXataClient = () => { 54 | if (instance) return instance; 55 | 56 | instance = new XataClient(); 57 | return instance; 58 | }; 59 | -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | swcMinify: true, 5 | } 6 | 7 | export default nextConfig 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sample-imdb", 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 | "xata:codegen": "pnpm -s dlx @xata.io/cli@latest codegen --output=lib/xata.codegen.ts", 11 | "xata:seed": "node scripts/seed.mjs", 12 | "xata:link": "pnpm -s dlx @xata.io/cli@latest init --schema=schema.json --codegen=lib/xata.codegen.ts", 13 | "one-click": "pnpm install && node scripts/one-click.mjs && node scripts/seed.mjs" 14 | }, 15 | "dependencies": { 16 | "@faker-js/faker": "^7.6.0", 17 | "@vercel/og": "^0.5.0", 18 | "@xata.io/client": "^0.28.3", 19 | "dotenv": "^16.0.3", 20 | "framer-motion": "^10.12.16", 21 | "next": "latest", 22 | "react": "latest", 23 | "react-dom": "latest", 24 | "react-icons": "^4.7.1", 25 | "server-only": "^0.0.1", 26 | "zod": "^3.20.2" 27 | }, 28 | "devDependencies": { 29 | "@types/node": "18.16.1", 30 | "@types/react": "18.2.0", 31 | "@types/react-dom": "18.2.1", 32 | "autoprefixer": "^10.4.12", 33 | "eslint": "8.39.0", 34 | "eslint-config-next": "13.3.1", 35 | "postcss": "^8.4.21", 36 | "prettier": "^2.8.8", 37 | "tailwindcss": "^3.3.2", 38 | "typescript": "5.1.3" 39 | }, 40 | "packageManager": "pnpm@8.6.6" 41 | } 42 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@faker-js/faker': 9 | specifier: ^7.6.0 10 | version: 7.6.0 11 | '@vercel/og': 12 | specifier: ^0.5.0 13 | version: 0.5.0 14 | '@xata.io/client': 15 | specifier: ^0.28.3 16 | version: 0.28.3(typescript@5.1.3) 17 | dotenv: 18 | specifier: ^16.0.3 19 | version: 16.0.3 20 | framer-motion: 21 | specifier: ^10.12.16 22 | version: 10.12.16(react-dom@18.2.0)(react@18.2.0) 23 | next: 24 | specifier: latest 25 | version: 14.0.4(react-dom@18.2.0)(react@18.2.0) 26 | react: 27 | specifier: latest 28 | version: 18.2.0 29 | react-dom: 30 | specifier: latest 31 | version: 18.2.0(react@18.2.0) 32 | react-icons: 33 | specifier: ^4.7.1 34 | version: 4.7.1(react@18.2.0) 35 | server-only: 36 | specifier: ^0.0.1 37 | version: 0.0.1 38 | zod: 39 | specifier: ^3.20.2 40 | version: 3.20.2 41 | 42 | devDependencies: 43 | '@types/node': 44 | specifier: 18.16.1 45 | version: 18.16.1 46 | '@types/react': 47 | specifier: 18.2.0 48 | version: 18.2.0 49 | '@types/react-dom': 50 | specifier: 18.2.1 51 | version: 18.2.1 52 | autoprefixer: 53 | specifier: ^10.4.12 54 | version: 10.4.12(postcss@8.4.21) 55 | eslint: 56 | specifier: 8.39.0 57 | version: 8.39.0 58 | eslint-config-next: 59 | specifier: 13.3.1 60 | version: 13.3.1(eslint@8.39.0)(typescript@5.1.3) 61 | postcss: 62 | specifier: ^8.4.21 63 | version: 8.4.21 64 | prettier: 65 | specifier: ^2.8.8 66 | version: 2.8.8 67 | tailwindcss: 68 | specifier: ^3.3.2 69 | version: 3.3.2 70 | typescript: 71 | specifier: 5.1.3 72 | version: 5.1.3 73 | 74 | packages: 75 | 76 | /@alloc/quick-lru@5.2.0: 77 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 78 | engines: {node: '>=10'} 79 | dev: true 80 | 81 | /@babel/runtime@7.22.5: 82 | resolution: {integrity: sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==} 83 | engines: {node: '>=6.9.0'} 84 | dependencies: 85 | regenerator-runtime: 0.13.11 86 | dev: true 87 | 88 | /@emotion/is-prop-valid@0.8.8: 89 | resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} 90 | requiresBuild: true 91 | dependencies: 92 | '@emotion/memoize': 0.7.4 93 | dev: false 94 | optional: true 95 | 96 | /@emotion/memoize@0.7.4: 97 | resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} 98 | requiresBuild: true 99 | dev: false 100 | optional: true 101 | 102 | /@eslint-community/eslint-utils@4.4.0(eslint@8.39.0): 103 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 104 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 105 | peerDependencies: 106 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 107 | dependencies: 108 | eslint: 8.39.0 109 | eslint-visitor-keys: 3.4.1 110 | dev: true 111 | 112 | /@eslint-community/regexpp@4.5.1: 113 | resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} 114 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 115 | dev: true 116 | 117 | /@eslint/eslintrc@2.0.3: 118 | resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} 119 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 120 | dependencies: 121 | ajv: 6.12.6 122 | debug: 4.3.4 123 | espree: 9.5.2 124 | globals: 13.20.0 125 | ignore: 5.2.4 126 | import-fresh: 3.3.0 127 | js-yaml: 4.1.0 128 | minimatch: 3.1.2 129 | strip-json-comments: 3.1.1 130 | transitivePeerDependencies: 131 | - supports-color 132 | dev: true 133 | 134 | /@eslint/js@8.39.0: 135 | resolution: {integrity: sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==} 136 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 137 | dev: true 138 | 139 | /@faker-js/faker@7.6.0: 140 | resolution: {integrity: sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==} 141 | engines: {node: '>=14.0.0', npm: '>=6.0.0'} 142 | dev: false 143 | 144 | /@humanwhocodes/config-array@0.11.10: 145 | resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} 146 | engines: {node: '>=10.10.0'} 147 | dependencies: 148 | '@humanwhocodes/object-schema': 1.2.1 149 | debug: 4.3.4 150 | minimatch: 3.1.2 151 | transitivePeerDependencies: 152 | - supports-color 153 | dev: true 154 | 155 | /@humanwhocodes/module-importer@1.0.1: 156 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 157 | engines: {node: '>=12.22'} 158 | dev: true 159 | 160 | /@humanwhocodes/object-schema@1.2.1: 161 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 162 | dev: true 163 | 164 | /@jridgewell/gen-mapping@0.3.3: 165 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 166 | engines: {node: '>=6.0.0'} 167 | dependencies: 168 | '@jridgewell/set-array': 1.1.2 169 | '@jridgewell/sourcemap-codec': 1.4.15 170 | '@jridgewell/trace-mapping': 0.3.18 171 | dev: true 172 | 173 | /@jridgewell/resolve-uri@3.1.0: 174 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 175 | engines: {node: '>=6.0.0'} 176 | dev: true 177 | 178 | /@jridgewell/set-array@1.1.2: 179 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 180 | engines: {node: '>=6.0.0'} 181 | dev: true 182 | 183 | /@jridgewell/sourcemap-codec@1.4.14: 184 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 185 | dev: true 186 | 187 | /@jridgewell/sourcemap-codec@1.4.15: 188 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 189 | dev: true 190 | 191 | /@jridgewell/trace-mapping@0.3.18: 192 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} 193 | dependencies: 194 | '@jridgewell/resolve-uri': 3.1.0 195 | '@jridgewell/sourcemap-codec': 1.4.14 196 | dev: true 197 | 198 | /@next/env@14.0.4: 199 | resolution: {integrity: sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==} 200 | dev: false 201 | 202 | /@next/eslint-plugin-next@13.3.1: 203 | resolution: {integrity: sha512-Hpd74UrYGF+bq9bBSRDXRsRfaWkPpcwjhvachy3sr/R/5fY6feC0T0s047pUthyqcaeNsqKOY1nUGQQJNm4WyA==} 204 | dependencies: 205 | glob: 7.1.7 206 | dev: true 207 | 208 | /@next/swc-darwin-arm64@14.0.4: 209 | resolution: {integrity: sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==} 210 | engines: {node: '>= 10'} 211 | cpu: [arm64] 212 | os: [darwin] 213 | requiresBuild: true 214 | dev: false 215 | optional: true 216 | 217 | /@next/swc-darwin-x64@14.0.4: 218 | resolution: {integrity: sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==} 219 | engines: {node: '>= 10'} 220 | cpu: [x64] 221 | os: [darwin] 222 | requiresBuild: true 223 | dev: false 224 | optional: true 225 | 226 | /@next/swc-linux-arm64-gnu@14.0.4: 227 | resolution: {integrity: sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==} 228 | engines: {node: '>= 10'} 229 | cpu: [arm64] 230 | os: [linux] 231 | requiresBuild: true 232 | dev: false 233 | optional: true 234 | 235 | /@next/swc-linux-arm64-musl@14.0.4: 236 | resolution: {integrity: sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==} 237 | engines: {node: '>= 10'} 238 | cpu: [arm64] 239 | os: [linux] 240 | requiresBuild: true 241 | dev: false 242 | optional: true 243 | 244 | /@next/swc-linux-x64-gnu@14.0.4: 245 | resolution: {integrity: sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==} 246 | engines: {node: '>= 10'} 247 | cpu: [x64] 248 | os: [linux] 249 | requiresBuild: true 250 | dev: false 251 | optional: true 252 | 253 | /@next/swc-linux-x64-musl@14.0.4: 254 | resolution: {integrity: sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==} 255 | engines: {node: '>= 10'} 256 | cpu: [x64] 257 | os: [linux] 258 | requiresBuild: true 259 | dev: false 260 | optional: true 261 | 262 | /@next/swc-win32-arm64-msvc@14.0.4: 263 | resolution: {integrity: sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==} 264 | engines: {node: '>= 10'} 265 | cpu: [arm64] 266 | os: [win32] 267 | requiresBuild: true 268 | dev: false 269 | optional: true 270 | 271 | /@next/swc-win32-ia32-msvc@14.0.4: 272 | resolution: {integrity: sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==} 273 | engines: {node: '>= 10'} 274 | cpu: [ia32] 275 | os: [win32] 276 | requiresBuild: true 277 | dev: false 278 | optional: true 279 | 280 | /@next/swc-win32-x64-msvc@14.0.4: 281 | resolution: {integrity: sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==} 282 | engines: {node: '>= 10'} 283 | cpu: [x64] 284 | os: [win32] 285 | requiresBuild: true 286 | dev: false 287 | optional: true 288 | 289 | /@nodelib/fs.scandir@2.1.5: 290 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 291 | engines: {node: '>= 8'} 292 | dependencies: 293 | '@nodelib/fs.stat': 2.0.5 294 | run-parallel: 1.2.0 295 | dev: true 296 | 297 | /@nodelib/fs.stat@2.0.5: 298 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 299 | engines: {node: '>= 8'} 300 | dev: true 301 | 302 | /@nodelib/fs.walk@1.2.8: 303 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 304 | engines: {node: '>= 8'} 305 | dependencies: 306 | '@nodelib/fs.scandir': 2.1.5 307 | fastq: 1.15.0 308 | dev: true 309 | 310 | /@pkgr/utils@2.4.1: 311 | resolution: {integrity: sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==} 312 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 313 | dependencies: 314 | cross-spawn: 7.0.3 315 | fast-glob: 3.2.12 316 | is-glob: 4.0.3 317 | open: 9.1.0 318 | picocolors: 1.0.0 319 | tslib: 2.6.2 320 | dev: true 321 | 322 | /@resvg/resvg-wasm@2.4.1: 323 | resolution: {integrity: sha512-yi6R0HyHtsoWTRA06Col4WoDs7SvlXU3DLMNP2bdAgs7HK18dTEVl1weXgxRzi8gwLteGUbIg29zulxIB3GSdg==} 324 | engines: {node: '>= 10'} 325 | dev: false 326 | 327 | /@rushstack/eslint-patch@1.3.2: 328 | resolution: {integrity: sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==} 329 | dev: true 330 | 331 | /@shuding/opentype.js@1.4.0-beta.0: 332 | resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==} 333 | engines: {node: '>= 8.0.0'} 334 | hasBin: true 335 | dependencies: 336 | fflate: 0.7.4 337 | string.prototype.codepointat: 0.2.1 338 | dev: false 339 | 340 | /@swc/helpers@0.5.2: 341 | resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} 342 | dependencies: 343 | tslib: 2.6.2 344 | dev: false 345 | 346 | /@types/json5@0.0.29: 347 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 348 | dev: true 349 | 350 | /@types/node@18.16.1: 351 | resolution: {integrity: sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==} 352 | dev: true 353 | 354 | /@types/prop-types@15.7.5: 355 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 356 | dev: true 357 | 358 | /@types/react-dom@18.2.1: 359 | resolution: {integrity: sha512-8QZEV9+Kwy7tXFmjJrp3XUKQSs9LTnE0KnoUb0YCguWBiNW0Yfb2iBMYZ08WPg35IR6P3Z0s00B15SwZnO26+w==} 360 | dependencies: 361 | '@types/react': 18.2.0 362 | dev: true 363 | 364 | /@types/react@18.2.0: 365 | resolution: {integrity: sha512-0FLj93y5USLHdnhIhABk83rm8XEGA7kH3cr+YUlvxoUGp1xNt/DINUMvqPxLyOQMzLmZe8i4RTHbvb8MC7NmrA==} 366 | dependencies: 367 | '@types/prop-types': 15.7.5 368 | '@types/scheduler': 0.16.3 369 | csstype: 3.1.2 370 | dev: true 371 | 372 | /@types/scheduler@0.16.3: 373 | resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} 374 | dev: true 375 | 376 | /@typescript-eslint/parser@5.59.11(eslint@8.39.0)(typescript@5.1.3): 377 | resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} 378 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 379 | peerDependencies: 380 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 381 | typescript: '*' 382 | peerDependenciesMeta: 383 | typescript: 384 | optional: true 385 | dependencies: 386 | '@typescript-eslint/scope-manager': 5.59.11 387 | '@typescript-eslint/types': 5.59.11 388 | '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.3) 389 | debug: 4.3.4 390 | eslint: 8.39.0 391 | typescript: 5.1.3 392 | transitivePeerDependencies: 393 | - supports-color 394 | dev: true 395 | 396 | /@typescript-eslint/scope-manager@5.59.11: 397 | resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} 398 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 399 | dependencies: 400 | '@typescript-eslint/types': 5.59.11 401 | '@typescript-eslint/visitor-keys': 5.59.11 402 | dev: true 403 | 404 | /@typescript-eslint/types@5.59.11: 405 | resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} 406 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 407 | dev: true 408 | 409 | /@typescript-eslint/typescript-estree@5.59.11(typescript@5.1.3): 410 | resolution: {integrity: sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==} 411 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 412 | peerDependencies: 413 | typescript: '*' 414 | peerDependenciesMeta: 415 | typescript: 416 | optional: true 417 | dependencies: 418 | '@typescript-eslint/types': 5.59.11 419 | '@typescript-eslint/visitor-keys': 5.59.11 420 | debug: 4.3.4 421 | globby: 11.1.0 422 | is-glob: 4.0.3 423 | semver: 7.5.2 424 | tsutils: 3.21.0(typescript@5.1.3) 425 | typescript: 5.1.3 426 | transitivePeerDependencies: 427 | - supports-color 428 | dev: true 429 | 430 | /@typescript-eslint/visitor-keys@5.59.11: 431 | resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} 432 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 433 | dependencies: 434 | '@typescript-eslint/types': 5.59.11 435 | eslint-visitor-keys: 3.4.1 436 | dev: true 437 | 438 | /@vercel/og@0.5.0: 439 | resolution: {integrity: sha512-NrHyWFj7fLixXPjgCXlyX90VdbiIfP6IBcyimiFGgwpnmyRgLiYTvrnPIKI/JP49VF9bnYHFfVqzMupeyCamuQ==} 440 | engines: {node: '>=16'} 441 | dependencies: 442 | '@resvg/resvg-wasm': 2.4.1 443 | satori: 0.4.4 444 | yoga-wasm-web: 0.3.3 445 | dev: false 446 | 447 | /@xata.io/client@0.28.3(typescript@5.1.3): 448 | resolution: {integrity: sha512-aaXct/xWiYqHyFx2srMCnFDGrKvDA5fa6NEkFGzTHXQdYTai5hTQXcraPHxVHGlPUV3dapQWsguR4YJQugDpqQ==} 449 | peerDependencies: 450 | typescript: '>=4.5' 451 | dependencies: 452 | typescript: 5.1.3 453 | dev: false 454 | 455 | /acorn-jsx@5.3.2(acorn@8.9.0): 456 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 457 | peerDependencies: 458 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 459 | dependencies: 460 | acorn: 8.9.0 461 | dev: true 462 | 463 | /acorn@8.9.0: 464 | resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} 465 | engines: {node: '>=0.4.0'} 466 | hasBin: true 467 | dev: true 468 | 469 | /ajv@6.12.6: 470 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 471 | dependencies: 472 | fast-deep-equal: 3.1.3 473 | fast-json-stable-stringify: 2.1.0 474 | json-schema-traverse: 0.4.1 475 | uri-js: 4.4.1 476 | dev: true 477 | 478 | /ansi-regex@5.0.1: 479 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 480 | engines: {node: '>=8'} 481 | dev: true 482 | 483 | /ansi-styles@4.3.0: 484 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 485 | engines: {node: '>=8'} 486 | dependencies: 487 | color-convert: 2.0.1 488 | dev: true 489 | 490 | /any-promise@1.3.0: 491 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 492 | dev: true 493 | 494 | /anymatch@3.1.3: 495 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 496 | engines: {node: '>= 8'} 497 | dependencies: 498 | normalize-path: 3.0.0 499 | picomatch: 2.3.1 500 | dev: true 501 | 502 | /arg@5.0.2: 503 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 504 | dev: true 505 | 506 | /argparse@2.0.1: 507 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 508 | dev: true 509 | 510 | /aria-query@5.2.1: 511 | resolution: {integrity: sha512-7uFg4b+lETFgdaJyETnILsXgnnzVnkHcgRbwbPwevm5x/LmUlt3MjczMRe1zg824iBgXZNRPTBftNYyRSKLp2g==} 512 | dependencies: 513 | dequal: 2.0.3 514 | dev: true 515 | 516 | /array-buffer-byte-length@1.0.0: 517 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 518 | dependencies: 519 | call-bind: 1.0.2 520 | is-array-buffer: 3.0.2 521 | dev: true 522 | 523 | /array-includes@3.1.6: 524 | resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} 525 | engines: {node: '>= 0.4'} 526 | dependencies: 527 | call-bind: 1.0.2 528 | define-properties: 1.2.0 529 | es-abstract: 1.21.2 530 | get-intrinsic: 1.2.1 531 | is-string: 1.0.7 532 | dev: true 533 | 534 | /array-union@2.1.0: 535 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 536 | engines: {node: '>=8'} 537 | dev: true 538 | 539 | /array.prototype.flat@1.3.1: 540 | resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} 541 | engines: {node: '>= 0.4'} 542 | dependencies: 543 | call-bind: 1.0.2 544 | define-properties: 1.2.0 545 | es-abstract: 1.21.2 546 | es-shim-unscopables: 1.0.0 547 | dev: true 548 | 549 | /array.prototype.flatmap@1.3.1: 550 | resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} 551 | engines: {node: '>= 0.4'} 552 | dependencies: 553 | call-bind: 1.0.2 554 | define-properties: 1.2.0 555 | es-abstract: 1.21.2 556 | es-shim-unscopables: 1.0.0 557 | dev: true 558 | 559 | /array.prototype.tosorted@1.1.1: 560 | resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} 561 | dependencies: 562 | call-bind: 1.0.2 563 | define-properties: 1.2.0 564 | es-abstract: 1.21.2 565 | es-shim-unscopables: 1.0.0 566 | get-intrinsic: 1.2.1 567 | dev: true 568 | 569 | /ast-types-flow@0.0.7: 570 | resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} 571 | dev: true 572 | 573 | /autoprefixer@10.4.12(postcss@8.4.21): 574 | resolution: {integrity: sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==} 575 | engines: {node: ^10 || ^12 || >=14} 576 | hasBin: true 577 | peerDependencies: 578 | postcss: ^8.1.0 579 | dependencies: 580 | browserslist: 4.21.9 581 | caniuse-lite: 1.0.30001504 582 | fraction.js: 4.2.0 583 | normalize-range: 0.1.2 584 | picocolors: 1.0.0 585 | postcss: 8.4.21 586 | postcss-value-parser: 4.2.0 587 | dev: true 588 | 589 | /available-typed-arrays@1.0.5: 590 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 591 | engines: {node: '>= 0.4'} 592 | dev: true 593 | 594 | /axe-core@4.7.2: 595 | resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} 596 | engines: {node: '>=4'} 597 | dev: true 598 | 599 | /axobject-query@3.2.1: 600 | resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} 601 | dependencies: 602 | dequal: 2.0.3 603 | dev: true 604 | 605 | /balanced-match@1.0.2: 606 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 607 | dev: true 608 | 609 | /base64-js@0.0.8: 610 | resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} 611 | engines: {node: '>= 0.4'} 612 | dev: false 613 | 614 | /big-integer@1.6.51: 615 | resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} 616 | engines: {node: '>=0.6'} 617 | dev: true 618 | 619 | /binary-extensions@2.2.0: 620 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 621 | engines: {node: '>=8'} 622 | dev: true 623 | 624 | /bplist-parser@0.2.0: 625 | resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} 626 | engines: {node: '>= 5.10.0'} 627 | dependencies: 628 | big-integer: 1.6.51 629 | dev: true 630 | 631 | /brace-expansion@1.1.11: 632 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 633 | dependencies: 634 | balanced-match: 1.0.2 635 | concat-map: 0.0.1 636 | dev: true 637 | 638 | /braces@3.0.2: 639 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 640 | engines: {node: '>=8'} 641 | dependencies: 642 | fill-range: 7.0.1 643 | dev: true 644 | 645 | /browserslist@4.21.9: 646 | resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} 647 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 648 | hasBin: true 649 | dependencies: 650 | caniuse-lite: 1.0.30001504 651 | electron-to-chromium: 1.4.433 652 | node-releases: 2.0.12 653 | update-browserslist-db: 1.0.11(browserslist@4.21.9) 654 | dev: true 655 | 656 | /bundle-name@3.0.0: 657 | resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} 658 | engines: {node: '>=12'} 659 | dependencies: 660 | run-applescript: 5.0.0 661 | dev: true 662 | 663 | /busboy@1.6.0: 664 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 665 | engines: {node: '>=10.16.0'} 666 | dependencies: 667 | streamsearch: 1.1.0 668 | dev: false 669 | 670 | /call-bind@1.0.2: 671 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 672 | dependencies: 673 | function-bind: 1.1.1 674 | get-intrinsic: 1.2.1 675 | dev: true 676 | 677 | /callsites@3.1.0: 678 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 679 | engines: {node: '>=6'} 680 | dev: true 681 | 682 | /camelcase-css@2.0.1: 683 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 684 | engines: {node: '>= 6'} 685 | dev: true 686 | 687 | /camelize@1.0.1: 688 | resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} 689 | dev: false 690 | 691 | /caniuse-lite@1.0.30001504: 692 | resolution: {integrity: sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==} 693 | dev: true 694 | 695 | /caniuse-lite@1.0.30001576: 696 | resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} 697 | dev: false 698 | 699 | /chalk@4.1.2: 700 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 701 | engines: {node: '>=10'} 702 | dependencies: 703 | ansi-styles: 4.3.0 704 | supports-color: 7.2.0 705 | dev: true 706 | 707 | /chokidar@3.5.3: 708 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 709 | engines: {node: '>= 8.10.0'} 710 | dependencies: 711 | anymatch: 3.1.3 712 | braces: 3.0.2 713 | glob-parent: 5.1.2 714 | is-binary-path: 2.1.0 715 | is-glob: 4.0.3 716 | normalize-path: 3.0.0 717 | readdirp: 3.6.0 718 | optionalDependencies: 719 | fsevents: 2.3.3 720 | dev: true 721 | 722 | /client-only@0.0.1: 723 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 724 | dev: false 725 | 726 | /color-convert@2.0.1: 727 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 728 | engines: {node: '>=7.0.0'} 729 | dependencies: 730 | color-name: 1.1.4 731 | dev: true 732 | 733 | /color-name@1.1.4: 734 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 735 | dev: true 736 | 737 | /commander@4.1.1: 738 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 739 | engines: {node: '>= 6'} 740 | dev: true 741 | 742 | /concat-map@0.0.1: 743 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 744 | dev: true 745 | 746 | /cross-spawn@7.0.3: 747 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 748 | engines: {node: '>= 8'} 749 | dependencies: 750 | path-key: 3.1.1 751 | shebang-command: 2.0.0 752 | which: 2.0.2 753 | dev: true 754 | 755 | /css-background-parser@0.1.0: 756 | resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==} 757 | dev: false 758 | 759 | /css-box-shadow@1.0.0-3: 760 | resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==} 761 | dev: false 762 | 763 | /css-color-keywords@1.0.0: 764 | resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} 765 | engines: {node: '>=4'} 766 | dev: false 767 | 768 | /css-to-react-native@3.2.0: 769 | resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} 770 | dependencies: 771 | camelize: 1.0.1 772 | css-color-keywords: 1.0.0 773 | postcss-value-parser: 4.2.0 774 | dev: false 775 | 776 | /cssesc@3.0.0: 777 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 778 | engines: {node: '>=4'} 779 | hasBin: true 780 | dev: true 781 | 782 | /csstype@3.1.2: 783 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} 784 | dev: true 785 | 786 | /damerau-levenshtein@1.0.8: 787 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} 788 | dev: true 789 | 790 | /debug@3.2.7: 791 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 792 | peerDependencies: 793 | supports-color: '*' 794 | peerDependenciesMeta: 795 | supports-color: 796 | optional: true 797 | dependencies: 798 | ms: 2.1.3 799 | dev: true 800 | 801 | /debug@4.3.4: 802 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 803 | engines: {node: '>=6.0'} 804 | peerDependencies: 805 | supports-color: '*' 806 | peerDependenciesMeta: 807 | supports-color: 808 | optional: true 809 | dependencies: 810 | ms: 2.1.2 811 | dev: true 812 | 813 | /deep-is@0.1.4: 814 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 815 | dev: true 816 | 817 | /default-browser-id@3.0.0: 818 | resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} 819 | engines: {node: '>=12'} 820 | dependencies: 821 | bplist-parser: 0.2.0 822 | untildify: 4.0.0 823 | dev: true 824 | 825 | /default-browser@4.0.0: 826 | resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} 827 | engines: {node: '>=14.16'} 828 | dependencies: 829 | bundle-name: 3.0.0 830 | default-browser-id: 3.0.0 831 | execa: 7.1.1 832 | titleize: 3.0.0 833 | dev: true 834 | 835 | /define-lazy-prop@3.0.0: 836 | resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} 837 | engines: {node: '>=12'} 838 | dev: true 839 | 840 | /define-properties@1.2.0: 841 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} 842 | engines: {node: '>= 0.4'} 843 | dependencies: 844 | has-property-descriptors: 1.0.0 845 | object-keys: 1.1.1 846 | dev: true 847 | 848 | /dequal@2.0.3: 849 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 850 | engines: {node: '>=6'} 851 | dev: true 852 | 853 | /didyoumean@1.2.2: 854 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 855 | dev: true 856 | 857 | /dir-glob@3.0.1: 858 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 859 | engines: {node: '>=8'} 860 | dependencies: 861 | path-type: 4.0.0 862 | dev: true 863 | 864 | /dlv@1.1.3: 865 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 866 | dev: true 867 | 868 | /doctrine@2.1.0: 869 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 870 | engines: {node: '>=0.10.0'} 871 | dependencies: 872 | esutils: 2.0.3 873 | dev: true 874 | 875 | /doctrine@3.0.0: 876 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 877 | engines: {node: '>=6.0.0'} 878 | dependencies: 879 | esutils: 2.0.3 880 | dev: true 881 | 882 | /dotenv@16.0.3: 883 | resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} 884 | engines: {node: '>=12'} 885 | dev: false 886 | 887 | /electron-to-chromium@1.4.433: 888 | resolution: {integrity: sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==} 889 | dev: true 890 | 891 | /emoji-regex@10.2.1: 892 | resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} 893 | dev: false 894 | 895 | /emoji-regex@9.2.2: 896 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 897 | dev: true 898 | 899 | /enhanced-resolve@5.15.0: 900 | resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} 901 | engines: {node: '>=10.13.0'} 902 | dependencies: 903 | graceful-fs: 4.2.11 904 | tapable: 2.2.1 905 | dev: true 906 | 907 | /es-abstract@1.21.2: 908 | resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} 909 | engines: {node: '>= 0.4'} 910 | dependencies: 911 | array-buffer-byte-length: 1.0.0 912 | available-typed-arrays: 1.0.5 913 | call-bind: 1.0.2 914 | es-set-tostringtag: 2.0.1 915 | es-to-primitive: 1.2.1 916 | function.prototype.name: 1.1.5 917 | get-intrinsic: 1.2.1 918 | get-symbol-description: 1.0.0 919 | globalthis: 1.0.3 920 | gopd: 1.0.1 921 | has: 1.0.3 922 | has-property-descriptors: 1.0.0 923 | has-proto: 1.0.1 924 | has-symbols: 1.0.3 925 | internal-slot: 1.0.5 926 | is-array-buffer: 3.0.2 927 | is-callable: 1.2.7 928 | is-negative-zero: 2.0.2 929 | is-regex: 1.1.4 930 | is-shared-array-buffer: 1.0.2 931 | is-string: 1.0.7 932 | is-typed-array: 1.1.10 933 | is-weakref: 1.0.2 934 | object-inspect: 1.12.3 935 | object-keys: 1.1.1 936 | object.assign: 4.1.4 937 | regexp.prototype.flags: 1.5.0 938 | safe-regex-test: 1.0.0 939 | string.prototype.trim: 1.2.7 940 | string.prototype.trimend: 1.0.6 941 | string.prototype.trimstart: 1.0.6 942 | typed-array-length: 1.0.4 943 | unbox-primitive: 1.0.2 944 | which-typed-array: 1.1.9 945 | dev: true 946 | 947 | /es-set-tostringtag@2.0.1: 948 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 949 | engines: {node: '>= 0.4'} 950 | dependencies: 951 | get-intrinsic: 1.2.1 952 | has: 1.0.3 953 | has-tostringtag: 1.0.0 954 | dev: true 955 | 956 | /es-shim-unscopables@1.0.0: 957 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 958 | dependencies: 959 | has: 1.0.3 960 | dev: true 961 | 962 | /es-to-primitive@1.2.1: 963 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 964 | engines: {node: '>= 0.4'} 965 | dependencies: 966 | is-callable: 1.2.7 967 | is-date-object: 1.0.5 968 | is-symbol: 1.0.4 969 | dev: true 970 | 971 | /escalade@3.1.1: 972 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 973 | engines: {node: '>=6'} 974 | dev: true 975 | 976 | /escape-string-regexp@4.0.0: 977 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 978 | engines: {node: '>=10'} 979 | dev: true 980 | 981 | /eslint-config-next@13.3.1(eslint@8.39.0)(typescript@5.1.3): 982 | resolution: {integrity: sha512-DieA5djybeE3Q0IqnDXihmhgRSp44x1ywWBBpVRA9pSx+m5Icj8hFclx7ffXlAvb9MMLN6cgj/hqJ4lka/QmvA==} 983 | peerDependencies: 984 | eslint: ^7.23.0 || ^8.0.0 985 | typescript: '>=3.3.1' 986 | peerDependenciesMeta: 987 | typescript: 988 | optional: true 989 | dependencies: 990 | '@next/eslint-plugin-next': 13.3.1 991 | '@rushstack/eslint-patch': 1.3.2 992 | '@typescript-eslint/parser': 5.59.11(eslint@8.39.0)(typescript@5.1.3) 993 | eslint: 8.39.0 994 | eslint-import-resolver-node: 0.3.7 995 | eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0) 996 | eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) 997 | eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) 998 | eslint-plugin-react: 7.32.2(eslint@8.39.0) 999 | eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) 1000 | typescript: 5.1.3 1001 | transitivePeerDependencies: 1002 | - eslint-import-resolver-webpack 1003 | - supports-color 1004 | dev: true 1005 | 1006 | /eslint-import-resolver-node@0.3.7: 1007 | resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} 1008 | dependencies: 1009 | debug: 3.2.7 1010 | is-core-module: 2.12.1 1011 | resolve: 1.22.2 1012 | transitivePeerDependencies: 1013 | - supports-color 1014 | dev: true 1015 | 1016 | /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0): 1017 | resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} 1018 | engines: {node: ^14.18.0 || >=16.0.0} 1019 | peerDependencies: 1020 | eslint: '*' 1021 | eslint-plugin-import: '*' 1022 | dependencies: 1023 | debug: 4.3.4 1024 | enhanced-resolve: 5.15.0 1025 | eslint: 8.39.0 1026 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) 1027 | eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) 1028 | get-tsconfig: 4.6.0 1029 | globby: 13.2.0 1030 | is-core-module: 2.12.1 1031 | is-glob: 4.0.3 1032 | synckit: 0.8.5 1033 | transitivePeerDependencies: 1034 | - '@typescript-eslint/parser' 1035 | - eslint-import-resolver-node 1036 | - eslint-import-resolver-webpack 1037 | - supports-color 1038 | dev: true 1039 | 1040 | /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0): 1041 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} 1042 | engines: {node: '>=4'} 1043 | peerDependencies: 1044 | '@typescript-eslint/parser': '*' 1045 | eslint: '*' 1046 | eslint-import-resolver-node: '*' 1047 | eslint-import-resolver-typescript: '*' 1048 | eslint-import-resolver-webpack: '*' 1049 | peerDependenciesMeta: 1050 | '@typescript-eslint/parser': 1051 | optional: true 1052 | eslint: 1053 | optional: true 1054 | eslint-import-resolver-node: 1055 | optional: true 1056 | eslint-import-resolver-typescript: 1057 | optional: true 1058 | eslint-import-resolver-webpack: 1059 | optional: true 1060 | dependencies: 1061 | '@typescript-eslint/parser': 5.59.11(eslint@8.39.0)(typescript@5.1.3) 1062 | debug: 3.2.7 1063 | eslint: 8.39.0 1064 | eslint-import-resolver-node: 0.3.7 1065 | eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0) 1066 | transitivePeerDependencies: 1067 | - supports-color 1068 | dev: true 1069 | 1070 | /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0): 1071 | resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} 1072 | engines: {node: '>=4'} 1073 | peerDependencies: 1074 | '@typescript-eslint/parser': '*' 1075 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 1076 | peerDependenciesMeta: 1077 | '@typescript-eslint/parser': 1078 | optional: true 1079 | dependencies: 1080 | '@typescript-eslint/parser': 5.59.11(eslint@8.39.0)(typescript@5.1.3) 1081 | array-includes: 3.1.6 1082 | array.prototype.flat: 1.3.1 1083 | array.prototype.flatmap: 1.3.1 1084 | debug: 3.2.7 1085 | doctrine: 2.1.0 1086 | eslint: 8.39.0 1087 | eslint-import-resolver-node: 0.3.7 1088 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) 1089 | has: 1.0.3 1090 | is-core-module: 2.12.1 1091 | is-glob: 4.0.3 1092 | minimatch: 3.1.2 1093 | object.values: 1.1.6 1094 | resolve: 1.22.2 1095 | semver: 6.3.0 1096 | tsconfig-paths: 3.14.2 1097 | transitivePeerDependencies: 1098 | - eslint-import-resolver-typescript 1099 | - eslint-import-resolver-webpack 1100 | - supports-color 1101 | dev: true 1102 | 1103 | /eslint-plugin-jsx-a11y@6.7.1(eslint@8.39.0): 1104 | resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} 1105 | engines: {node: '>=4.0'} 1106 | peerDependencies: 1107 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 1108 | dependencies: 1109 | '@babel/runtime': 7.22.5 1110 | aria-query: 5.2.1 1111 | array-includes: 3.1.6 1112 | array.prototype.flatmap: 1.3.1 1113 | ast-types-flow: 0.0.7 1114 | axe-core: 4.7.2 1115 | axobject-query: 3.2.1 1116 | damerau-levenshtein: 1.0.8 1117 | emoji-regex: 9.2.2 1118 | eslint: 8.39.0 1119 | has: 1.0.3 1120 | jsx-ast-utils: 3.3.3 1121 | language-tags: 1.0.5 1122 | minimatch: 3.1.2 1123 | object.entries: 1.1.6 1124 | object.fromentries: 2.0.6 1125 | semver: 6.3.0 1126 | dev: true 1127 | 1128 | /eslint-plugin-react-hooks@4.6.0(eslint@8.39.0): 1129 | resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} 1130 | engines: {node: '>=10'} 1131 | peerDependencies: 1132 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 1133 | dependencies: 1134 | eslint: 8.39.0 1135 | dev: true 1136 | 1137 | /eslint-plugin-react@7.32.2(eslint@8.39.0): 1138 | resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} 1139 | engines: {node: '>=4'} 1140 | peerDependencies: 1141 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 1142 | dependencies: 1143 | array-includes: 3.1.6 1144 | array.prototype.flatmap: 1.3.1 1145 | array.prototype.tosorted: 1.1.1 1146 | doctrine: 2.1.0 1147 | eslint: 8.39.0 1148 | estraverse: 5.3.0 1149 | jsx-ast-utils: 3.3.3 1150 | minimatch: 3.1.2 1151 | object.entries: 1.1.6 1152 | object.fromentries: 2.0.6 1153 | object.hasown: 1.1.2 1154 | object.values: 1.1.6 1155 | prop-types: 15.8.1 1156 | resolve: 2.0.0-next.4 1157 | semver: 6.3.0 1158 | string.prototype.matchall: 4.0.8 1159 | dev: true 1160 | 1161 | /eslint-scope@7.2.0: 1162 | resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} 1163 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1164 | dependencies: 1165 | esrecurse: 4.3.0 1166 | estraverse: 5.3.0 1167 | dev: true 1168 | 1169 | /eslint-visitor-keys@3.4.1: 1170 | resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} 1171 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1172 | dev: true 1173 | 1174 | /eslint@8.39.0: 1175 | resolution: {integrity: sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==} 1176 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1177 | hasBin: true 1178 | dependencies: 1179 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) 1180 | '@eslint-community/regexpp': 4.5.1 1181 | '@eslint/eslintrc': 2.0.3 1182 | '@eslint/js': 8.39.0 1183 | '@humanwhocodes/config-array': 0.11.10 1184 | '@humanwhocodes/module-importer': 1.0.1 1185 | '@nodelib/fs.walk': 1.2.8 1186 | ajv: 6.12.6 1187 | chalk: 4.1.2 1188 | cross-spawn: 7.0.3 1189 | debug: 4.3.4 1190 | doctrine: 3.0.0 1191 | escape-string-regexp: 4.0.0 1192 | eslint-scope: 7.2.0 1193 | eslint-visitor-keys: 3.4.1 1194 | espree: 9.5.2 1195 | esquery: 1.5.0 1196 | esutils: 2.0.3 1197 | fast-deep-equal: 3.1.3 1198 | file-entry-cache: 6.0.1 1199 | find-up: 5.0.0 1200 | glob-parent: 6.0.2 1201 | globals: 13.20.0 1202 | grapheme-splitter: 1.0.4 1203 | ignore: 5.2.4 1204 | import-fresh: 3.3.0 1205 | imurmurhash: 0.1.4 1206 | is-glob: 4.0.3 1207 | is-path-inside: 3.0.3 1208 | js-sdsl: 4.4.1 1209 | js-yaml: 4.1.0 1210 | json-stable-stringify-without-jsonify: 1.0.1 1211 | levn: 0.4.1 1212 | lodash.merge: 4.6.2 1213 | minimatch: 3.1.2 1214 | natural-compare: 1.4.0 1215 | optionator: 0.9.1 1216 | strip-ansi: 6.0.1 1217 | strip-json-comments: 3.1.1 1218 | text-table: 0.2.0 1219 | transitivePeerDependencies: 1220 | - supports-color 1221 | dev: true 1222 | 1223 | /espree@9.5.2: 1224 | resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} 1225 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1226 | dependencies: 1227 | acorn: 8.9.0 1228 | acorn-jsx: 5.3.2(acorn@8.9.0) 1229 | eslint-visitor-keys: 3.4.1 1230 | dev: true 1231 | 1232 | /esquery@1.5.0: 1233 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1234 | engines: {node: '>=0.10'} 1235 | dependencies: 1236 | estraverse: 5.3.0 1237 | dev: true 1238 | 1239 | /esrecurse@4.3.0: 1240 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1241 | engines: {node: '>=4.0'} 1242 | dependencies: 1243 | estraverse: 5.3.0 1244 | dev: true 1245 | 1246 | /estraverse@5.3.0: 1247 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1248 | engines: {node: '>=4.0'} 1249 | dev: true 1250 | 1251 | /esutils@2.0.3: 1252 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1253 | engines: {node: '>=0.10.0'} 1254 | dev: true 1255 | 1256 | /execa@5.1.1: 1257 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1258 | engines: {node: '>=10'} 1259 | dependencies: 1260 | cross-spawn: 7.0.3 1261 | get-stream: 6.0.1 1262 | human-signals: 2.1.0 1263 | is-stream: 2.0.1 1264 | merge-stream: 2.0.0 1265 | npm-run-path: 4.0.1 1266 | onetime: 5.1.2 1267 | signal-exit: 3.0.7 1268 | strip-final-newline: 2.0.0 1269 | dev: true 1270 | 1271 | /execa@7.1.1: 1272 | resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} 1273 | engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} 1274 | dependencies: 1275 | cross-spawn: 7.0.3 1276 | get-stream: 6.0.1 1277 | human-signals: 4.3.1 1278 | is-stream: 3.0.0 1279 | merge-stream: 2.0.0 1280 | npm-run-path: 5.1.0 1281 | onetime: 6.0.0 1282 | signal-exit: 3.0.7 1283 | strip-final-newline: 3.0.0 1284 | dev: true 1285 | 1286 | /fast-deep-equal@3.1.3: 1287 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1288 | dev: true 1289 | 1290 | /fast-glob@3.2.12: 1291 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 1292 | engines: {node: '>=8.6.0'} 1293 | dependencies: 1294 | '@nodelib/fs.stat': 2.0.5 1295 | '@nodelib/fs.walk': 1.2.8 1296 | glob-parent: 5.1.2 1297 | merge2: 1.4.1 1298 | micromatch: 4.0.5 1299 | dev: true 1300 | 1301 | /fast-json-stable-stringify@2.1.0: 1302 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1303 | dev: true 1304 | 1305 | /fast-levenshtein@2.0.6: 1306 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1307 | dev: true 1308 | 1309 | /fastq@1.15.0: 1310 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1311 | dependencies: 1312 | reusify: 1.0.4 1313 | dev: true 1314 | 1315 | /fflate@0.7.4: 1316 | resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} 1317 | dev: false 1318 | 1319 | /file-entry-cache@6.0.1: 1320 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1321 | engines: {node: ^10.12.0 || >=12.0.0} 1322 | dependencies: 1323 | flat-cache: 3.0.4 1324 | dev: true 1325 | 1326 | /fill-range@7.0.1: 1327 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1328 | engines: {node: '>=8'} 1329 | dependencies: 1330 | to-regex-range: 5.0.1 1331 | dev: true 1332 | 1333 | /find-up@5.0.0: 1334 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1335 | engines: {node: '>=10'} 1336 | dependencies: 1337 | locate-path: 6.0.0 1338 | path-exists: 4.0.0 1339 | dev: true 1340 | 1341 | /flat-cache@3.0.4: 1342 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1343 | engines: {node: ^10.12.0 || >=12.0.0} 1344 | dependencies: 1345 | flatted: 3.2.7 1346 | rimraf: 3.0.2 1347 | dev: true 1348 | 1349 | /flatted@3.2.7: 1350 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1351 | dev: true 1352 | 1353 | /for-each@0.3.3: 1354 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1355 | dependencies: 1356 | is-callable: 1.2.7 1357 | dev: true 1358 | 1359 | /fraction.js@4.2.0: 1360 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} 1361 | dev: true 1362 | 1363 | /framer-motion@10.12.16(react-dom@18.2.0)(react@18.2.0): 1364 | resolution: {integrity: sha512-w/SfWEIWJkYSgRHYBmln7EhcNo31ao8Xexol8lGXf1pR/tlnBtf1HcxoUmEiEh6pacB4/geku5ami53AAQWHMQ==} 1365 | peerDependencies: 1366 | react: ^18.0.0 1367 | react-dom: ^18.0.0 1368 | peerDependenciesMeta: 1369 | react: 1370 | optional: true 1371 | react-dom: 1372 | optional: true 1373 | dependencies: 1374 | react: 18.2.0 1375 | react-dom: 18.2.0(react@18.2.0) 1376 | tslib: 2.5.3 1377 | optionalDependencies: 1378 | '@emotion/is-prop-valid': 0.8.8 1379 | dev: false 1380 | 1381 | /fs.realpath@1.0.0: 1382 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1383 | dev: true 1384 | 1385 | /fsevents@2.3.3: 1386 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1387 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1388 | os: [darwin] 1389 | requiresBuild: true 1390 | dev: true 1391 | optional: true 1392 | 1393 | /function-bind@1.1.1: 1394 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1395 | dev: true 1396 | 1397 | /function.prototype.name@1.1.5: 1398 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} 1399 | engines: {node: '>= 0.4'} 1400 | dependencies: 1401 | call-bind: 1.0.2 1402 | define-properties: 1.2.0 1403 | es-abstract: 1.21.2 1404 | functions-have-names: 1.2.3 1405 | dev: true 1406 | 1407 | /functions-have-names@1.2.3: 1408 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1409 | dev: true 1410 | 1411 | /get-intrinsic@1.2.1: 1412 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} 1413 | dependencies: 1414 | function-bind: 1.1.1 1415 | has: 1.0.3 1416 | has-proto: 1.0.1 1417 | has-symbols: 1.0.3 1418 | dev: true 1419 | 1420 | /get-stream@6.0.1: 1421 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1422 | engines: {node: '>=10'} 1423 | dev: true 1424 | 1425 | /get-symbol-description@1.0.0: 1426 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1427 | engines: {node: '>= 0.4'} 1428 | dependencies: 1429 | call-bind: 1.0.2 1430 | get-intrinsic: 1.2.1 1431 | dev: true 1432 | 1433 | /get-tsconfig@4.6.0: 1434 | resolution: {integrity: sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg==} 1435 | dependencies: 1436 | resolve-pkg-maps: 1.0.0 1437 | dev: true 1438 | 1439 | /glob-parent@5.1.2: 1440 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1441 | engines: {node: '>= 6'} 1442 | dependencies: 1443 | is-glob: 4.0.3 1444 | dev: true 1445 | 1446 | /glob-parent@6.0.2: 1447 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1448 | engines: {node: '>=10.13.0'} 1449 | dependencies: 1450 | is-glob: 4.0.3 1451 | dev: true 1452 | 1453 | /glob-to-regexp@0.4.1: 1454 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 1455 | dev: false 1456 | 1457 | /glob@7.1.6: 1458 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 1459 | dependencies: 1460 | fs.realpath: 1.0.0 1461 | inflight: 1.0.6 1462 | inherits: 2.0.4 1463 | minimatch: 3.1.2 1464 | once: 1.4.0 1465 | path-is-absolute: 1.0.1 1466 | dev: true 1467 | 1468 | /glob@7.1.7: 1469 | resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} 1470 | dependencies: 1471 | fs.realpath: 1.0.0 1472 | inflight: 1.0.6 1473 | inherits: 2.0.4 1474 | minimatch: 3.1.2 1475 | once: 1.4.0 1476 | path-is-absolute: 1.0.1 1477 | dev: true 1478 | 1479 | /glob@7.2.3: 1480 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1481 | dependencies: 1482 | fs.realpath: 1.0.0 1483 | inflight: 1.0.6 1484 | inherits: 2.0.4 1485 | minimatch: 3.1.2 1486 | once: 1.4.0 1487 | path-is-absolute: 1.0.1 1488 | dev: true 1489 | 1490 | /globals@13.20.0: 1491 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 1492 | engines: {node: '>=8'} 1493 | dependencies: 1494 | type-fest: 0.20.2 1495 | dev: true 1496 | 1497 | /globalthis@1.0.3: 1498 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1499 | engines: {node: '>= 0.4'} 1500 | dependencies: 1501 | define-properties: 1.2.0 1502 | dev: true 1503 | 1504 | /globby@11.1.0: 1505 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1506 | engines: {node: '>=10'} 1507 | dependencies: 1508 | array-union: 2.1.0 1509 | dir-glob: 3.0.1 1510 | fast-glob: 3.2.12 1511 | ignore: 5.2.4 1512 | merge2: 1.4.1 1513 | slash: 3.0.0 1514 | dev: true 1515 | 1516 | /globby@13.2.0: 1517 | resolution: {integrity: sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==} 1518 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1519 | dependencies: 1520 | dir-glob: 3.0.1 1521 | fast-glob: 3.2.12 1522 | ignore: 5.2.4 1523 | merge2: 1.4.1 1524 | slash: 4.0.0 1525 | dev: true 1526 | 1527 | /gopd@1.0.1: 1528 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1529 | dependencies: 1530 | get-intrinsic: 1.2.1 1531 | dev: true 1532 | 1533 | /graceful-fs@4.2.11: 1534 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1535 | 1536 | /grapheme-splitter@1.0.4: 1537 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1538 | dev: true 1539 | 1540 | /has-bigints@1.0.2: 1541 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1542 | dev: true 1543 | 1544 | /has-flag@4.0.0: 1545 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1546 | engines: {node: '>=8'} 1547 | dev: true 1548 | 1549 | /has-property-descriptors@1.0.0: 1550 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1551 | dependencies: 1552 | get-intrinsic: 1.2.1 1553 | dev: true 1554 | 1555 | /has-proto@1.0.1: 1556 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1557 | engines: {node: '>= 0.4'} 1558 | dev: true 1559 | 1560 | /has-symbols@1.0.3: 1561 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1562 | engines: {node: '>= 0.4'} 1563 | dev: true 1564 | 1565 | /has-tostringtag@1.0.0: 1566 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1567 | engines: {node: '>= 0.4'} 1568 | dependencies: 1569 | has-symbols: 1.0.3 1570 | dev: true 1571 | 1572 | /has@1.0.3: 1573 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1574 | engines: {node: '>= 0.4.0'} 1575 | dependencies: 1576 | function-bind: 1.1.1 1577 | dev: true 1578 | 1579 | /human-signals@2.1.0: 1580 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1581 | engines: {node: '>=10.17.0'} 1582 | dev: true 1583 | 1584 | /human-signals@4.3.1: 1585 | resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} 1586 | engines: {node: '>=14.18.0'} 1587 | dev: true 1588 | 1589 | /ignore@5.2.4: 1590 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1591 | engines: {node: '>= 4'} 1592 | dev: true 1593 | 1594 | /import-fresh@3.3.0: 1595 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1596 | engines: {node: '>=6'} 1597 | dependencies: 1598 | parent-module: 1.0.1 1599 | resolve-from: 4.0.0 1600 | dev: true 1601 | 1602 | /imurmurhash@0.1.4: 1603 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1604 | engines: {node: '>=0.8.19'} 1605 | dev: true 1606 | 1607 | /inflight@1.0.6: 1608 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1609 | dependencies: 1610 | once: 1.4.0 1611 | wrappy: 1.0.2 1612 | dev: true 1613 | 1614 | /inherits@2.0.4: 1615 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1616 | dev: true 1617 | 1618 | /internal-slot@1.0.5: 1619 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} 1620 | engines: {node: '>= 0.4'} 1621 | dependencies: 1622 | get-intrinsic: 1.2.1 1623 | has: 1.0.3 1624 | side-channel: 1.0.4 1625 | dev: true 1626 | 1627 | /is-array-buffer@3.0.2: 1628 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 1629 | dependencies: 1630 | call-bind: 1.0.2 1631 | get-intrinsic: 1.2.1 1632 | is-typed-array: 1.1.10 1633 | dev: true 1634 | 1635 | /is-bigint@1.0.4: 1636 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1637 | dependencies: 1638 | has-bigints: 1.0.2 1639 | dev: true 1640 | 1641 | /is-binary-path@2.1.0: 1642 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1643 | engines: {node: '>=8'} 1644 | dependencies: 1645 | binary-extensions: 2.2.0 1646 | dev: true 1647 | 1648 | /is-boolean-object@1.1.2: 1649 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1650 | engines: {node: '>= 0.4'} 1651 | dependencies: 1652 | call-bind: 1.0.2 1653 | has-tostringtag: 1.0.0 1654 | dev: true 1655 | 1656 | /is-callable@1.2.7: 1657 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1658 | engines: {node: '>= 0.4'} 1659 | dev: true 1660 | 1661 | /is-core-module@2.12.1: 1662 | resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} 1663 | dependencies: 1664 | has: 1.0.3 1665 | dev: true 1666 | 1667 | /is-date-object@1.0.5: 1668 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1669 | engines: {node: '>= 0.4'} 1670 | dependencies: 1671 | has-tostringtag: 1.0.0 1672 | dev: true 1673 | 1674 | /is-docker@2.2.1: 1675 | resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} 1676 | engines: {node: '>=8'} 1677 | hasBin: true 1678 | dev: true 1679 | 1680 | /is-docker@3.0.0: 1681 | resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} 1682 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1683 | hasBin: true 1684 | dev: true 1685 | 1686 | /is-extglob@2.1.1: 1687 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1688 | engines: {node: '>=0.10.0'} 1689 | dev: true 1690 | 1691 | /is-glob@4.0.3: 1692 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1693 | engines: {node: '>=0.10.0'} 1694 | dependencies: 1695 | is-extglob: 2.1.1 1696 | dev: true 1697 | 1698 | /is-inside-container@1.0.0: 1699 | resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} 1700 | engines: {node: '>=14.16'} 1701 | hasBin: true 1702 | dependencies: 1703 | is-docker: 3.0.0 1704 | dev: true 1705 | 1706 | /is-negative-zero@2.0.2: 1707 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1708 | engines: {node: '>= 0.4'} 1709 | dev: true 1710 | 1711 | /is-number-object@1.0.7: 1712 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1713 | engines: {node: '>= 0.4'} 1714 | dependencies: 1715 | has-tostringtag: 1.0.0 1716 | dev: true 1717 | 1718 | /is-number@7.0.0: 1719 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1720 | engines: {node: '>=0.12.0'} 1721 | dev: true 1722 | 1723 | /is-path-inside@3.0.3: 1724 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1725 | engines: {node: '>=8'} 1726 | dev: true 1727 | 1728 | /is-regex@1.1.4: 1729 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1730 | engines: {node: '>= 0.4'} 1731 | dependencies: 1732 | call-bind: 1.0.2 1733 | has-tostringtag: 1.0.0 1734 | dev: true 1735 | 1736 | /is-shared-array-buffer@1.0.2: 1737 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1738 | dependencies: 1739 | call-bind: 1.0.2 1740 | dev: true 1741 | 1742 | /is-stream@2.0.1: 1743 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1744 | engines: {node: '>=8'} 1745 | dev: true 1746 | 1747 | /is-stream@3.0.0: 1748 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1749 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1750 | dev: true 1751 | 1752 | /is-string@1.0.7: 1753 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1754 | engines: {node: '>= 0.4'} 1755 | dependencies: 1756 | has-tostringtag: 1.0.0 1757 | dev: true 1758 | 1759 | /is-symbol@1.0.4: 1760 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1761 | engines: {node: '>= 0.4'} 1762 | dependencies: 1763 | has-symbols: 1.0.3 1764 | dev: true 1765 | 1766 | /is-typed-array@1.1.10: 1767 | resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} 1768 | engines: {node: '>= 0.4'} 1769 | dependencies: 1770 | available-typed-arrays: 1.0.5 1771 | call-bind: 1.0.2 1772 | for-each: 0.3.3 1773 | gopd: 1.0.1 1774 | has-tostringtag: 1.0.0 1775 | dev: true 1776 | 1777 | /is-weakref@1.0.2: 1778 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1779 | dependencies: 1780 | call-bind: 1.0.2 1781 | dev: true 1782 | 1783 | /is-wsl@2.2.0: 1784 | resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} 1785 | engines: {node: '>=8'} 1786 | dependencies: 1787 | is-docker: 2.2.1 1788 | dev: true 1789 | 1790 | /isexe@2.0.0: 1791 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1792 | dev: true 1793 | 1794 | /jiti@1.18.2: 1795 | resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} 1796 | hasBin: true 1797 | dev: true 1798 | 1799 | /js-sdsl@4.4.1: 1800 | resolution: {integrity: sha512-6Gsx8R0RucyePbWqPssR8DyfuXmLBooYN5cZFZKjHGnQuaf7pEzhtpceagJxVu4LqhYY5EYA7nko3FmeHZ1KbA==} 1801 | dev: true 1802 | 1803 | /js-tokens@4.0.0: 1804 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1805 | 1806 | /js-yaml@4.1.0: 1807 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1808 | hasBin: true 1809 | dependencies: 1810 | argparse: 2.0.1 1811 | dev: true 1812 | 1813 | /json-schema-traverse@0.4.1: 1814 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1815 | dev: true 1816 | 1817 | /json-stable-stringify-without-jsonify@1.0.1: 1818 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1819 | dev: true 1820 | 1821 | /json5@1.0.2: 1822 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1823 | hasBin: true 1824 | dependencies: 1825 | minimist: 1.2.8 1826 | dev: true 1827 | 1828 | /jsx-ast-utils@3.3.3: 1829 | resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} 1830 | engines: {node: '>=4.0'} 1831 | dependencies: 1832 | array-includes: 3.1.6 1833 | object.assign: 4.1.4 1834 | dev: true 1835 | 1836 | /language-subtag-registry@0.3.22: 1837 | resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} 1838 | dev: true 1839 | 1840 | /language-tags@1.0.5: 1841 | resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} 1842 | dependencies: 1843 | language-subtag-registry: 0.3.22 1844 | dev: true 1845 | 1846 | /levn@0.4.1: 1847 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1848 | engines: {node: '>= 0.8.0'} 1849 | dependencies: 1850 | prelude-ls: 1.2.1 1851 | type-check: 0.4.0 1852 | dev: true 1853 | 1854 | /lilconfig@2.1.0: 1855 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1856 | engines: {node: '>=10'} 1857 | dev: true 1858 | 1859 | /linebreak@1.1.0: 1860 | resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==} 1861 | dependencies: 1862 | base64-js: 0.0.8 1863 | unicode-trie: 2.0.0 1864 | dev: false 1865 | 1866 | /lines-and-columns@1.2.4: 1867 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1868 | dev: true 1869 | 1870 | /locate-path@6.0.0: 1871 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1872 | engines: {node: '>=10'} 1873 | dependencies: 1874 | p-locate: 5.0.0 1875 | dev: true 1876 | 1877 | /lodash.merge@4.6.2: 1878 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1879 | dev: true 1880 | 1881 | /loose-envify@1.4.0: 1882 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1883 | hasBin: true 1884 | dependencies: 1885 | js-tokens: 4.0.0 1886 | 1887 | /lru-cache@6.0.0: 1888 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1889 | engines: {node: '>=10'} 1890 | dependencies: 1891 | yallist: 4.0.0 1892 | dev: true 1893 | 1894 | /merge-stream@2.0.0: 1895 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1896 | dev: true 1897 | 1898 | /merge2@1.4.1: 1899 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1900 | engines: {node: '>= 8'} 1901 | dev: true 1902 | 1903 | /micromatch@4.0.5: 1904 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1905 | engines: {node: '>=8.6'} 1906 | dependencies: 1907 | braces: 3.0.2 1908 | picomatch: 2.3.1 1909 | dev: true 1910 | 1911 | /mimic-fn@2.1.0: 1912 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1913 | engines: {node: '>=6'} 1914 | dev: true 1915 | 1916 | /mimic-fn@4.0.0: 1917 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1918 | engines: {node: '>=12'} 1919 | dev: true 1920 | 1921 | /minimatch@3.1.2: 1922 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1923 | dependencies: 1924 | brace-expansion: 1.1.11 1925 | dev: true 1926 | 1927 | /minimist@1.2.8: 1928 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1929 | dev: true 1930 | 1931 | /ms@2.1.2: 1932 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1933 | dev: true 1934 | 1935 | /ms@2.1.3: 1936 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1937 | dev: true 1938 | 1939 | /mz@2.7.0: 1940 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1941 | dependencies: 1942 | any-promise: 1.3.0 1943 | object-assign: 4.1.1 1944 | thenify-all: 1.6.0 1945 | dev: true 1946 | 1947 | /nanoid@3.3.6: 1948 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 1949 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1950 | hasBin: true 1951 | dev: true 1952 | 1953 | /nanoid@3.3.7: 1954 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1955 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1956 | hasBin: true 1957 | dev: false 1958 | 1959 | /natural-compare@1.4.0: 1960 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1961 | dev: true 1962 | 1963 | /next@14.0.4(react-dom@18.2.0)(react@18.2.0): 1964 | resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} 1965 | engines: {node: '>=18.17.0'} 1966 | hasBin: true 1967 | peerDependencies: 1968 | '@opentelemetry/api': ^1.1.0 1969 | react: ^18.2.0 1970 | react-dom: ^18.2.0 1971 | sass: ^1.3.0 1972 | peerDependenciesMeta: 1973 | '@opentelemetry/api': 1974 | optional: true 1975 | sass: 1976 | optional: true 1977 | dependencies: 1978 | '@next/env': 14.0.4 1979 | '@swc/helpers': 0.5.2 1980 | busboy: 1.6.0 1981 | caniuse-lite: 1.0.30001576 1982 | graceful-fs: 4.2.11 1983 | postcss: 8.4.31 1984 | react: 18.2.0 1985 | react-dom: 18.2.0(react@18.2.0) 1986 | styled-jsx: 5.1.1(react@18.2.0) 1987 | watchpack: 2.4.0 1988 | optionalDependencies: 1989 | '@next/swc-darwin-arm64': 14.0.4 1990 | '@next/swc-darwin-x64': 14.0.4 1991 | '@next/swc-linux-arm64-gnu': 14.0.4 1992 | '@next/swc-linux-arm64-musl': 14.0.4 1993 | '@next/swc-linux-x64-gnu': 14.0.4 1994 | '@next/swc-linux-x64-musl': 14.0.4 1995 | '@next/swc-win32-arm64-msvc': 14.0.4 1996 | '@next/swc-win32-ia32-msvc': 14.0.4 1997 | '@next/swc-win32-x64-msvc': 14.0.4 1998 | transitivePeerDependencies: 1999 | - '@babel/core' 2000 | - babel-plugin-macros 2001 | dev: false 2002 | 2003 | /node-releases@2.0.12: 2004 | resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} 2005 | dev: true 2006 | 2007 | /normalize-path@3.0.0: 2008 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2009 | engines: {node: '>=0.10.0'} 2010 | dev: true 2011 | 2012 | /normalize-range@0.1.2: 2013 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 2014 | engines: {node: '>=0.10.0'} 2015 | dev: true 2016 | 2017 | /npm-run-path@4.0.1: 2018 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 2019 | engines: {node: '>=8'} 2020 | dependencies: 2021 | path-key: 3.1.1 2022 | dev: true 2023 | 2024 | /npm-run-path@5.1.0: 2025 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} 2026 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2027 | dependencies: 2028 | path-key: 4.0.0 2029 | dev: true 2030 | 2031 | /object-assign@4.1.1: 2032 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 2033 | engines: {node: '>=0.10.0'} 2034 | dev: true 2035 | 2036 | /object-hash@3.0.0: 2037 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 2038 | engines: {node: '>= 6'} 2039 | dev: true 2040 | 2041 | /object-inspect@1.12.3: 2042 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 2043 | dev: true 2044 | 2045 | /object-keys@1.1.1: 2046 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 2047 | engines: {node: '>= 0.4'} 2048 | dev: true 2049 | 2050 | /object.assign@4.1.4: 2051 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 2052 | engines: {node: '>= 0.4'} 2053 | dependencies: 2054 | call-bind: 1.0.2 2055 | define-properties: 1.2.0 2056 | has-symbols: 1.0.3 2057 | object-keys: 1.1.1 2058 | dev: true 2059 | 2060 | /object.entries@1.1.6: 2061 | resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} 2062 | engines: {node: '>= 0.4'} 2063 | dependencies: 2064 | call-bind: 1.0.2 2065 | define-properties: 1.2.0 2066 | es-abstract: 1.21.2 2067 | dev: true 2068 | 2069 | /object.fromentries@2.0.6: 2070 | resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} 2071 | engines: {node: '>= 0.4'} 2072 | dependencies: 2073 | call-bind: 1.0.2 2074 | define-properties: 1.2.0 2075 | es-abstract: 1.21.2 2076 | dev: true 2077 | 2078 | /object.hasown@1.1.2: 2079 | resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} 2080 | dependencies: 2081 | define-properties: 1.2.0 2082 | es-abstract: 1.21.2 2083 | dev: true 2084 | 2085 | /object.values@1.1.6: 2086 | resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} 2087 | engines: {node: '>= 0.4'} 2088 | dependencies: 2089 | call-bind: 1.0.2 2090 | define-properties: 1.2.0 2091 | es-abstract: 1.21.2 2092 | dev: true 2093 | 2094 | /once@1.4.0: 2095 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2096 | dependencies: 2097 | wrappy: 1.0.2 2098 | dev: true 2099 | 2100 | /onetime@5.1.2: 2101 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 2102 | engines: {node: '>=6'} 2103 | dependencies: 2104 | mimic-fn: 2.1.0 2105 | dev: true 2106 | 2107 | /onetime@6.0.0: 2108 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 2109 | engines: {node: '>=12'} 2110 | dependencies: 2111 | mimic-fn: 4.0.0 2112 | dev: true 2113 | 2114 | /open@9.1.0: 2115 | resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} 2116 | engines: {node: '>=14.16'} 2117 | dependencies: 2118 | default-browser: 4.0.0 2119 | define-lazy-prop: 3.0.0 2120 | is-inside-container: 1.0.0 2121 | is-wsl: 2.2.0 2122 | dev: true 2123 | 2124 | /optionator@0.9.1: 2125 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 2126 | engines: {node: '>= 0.8.0'} 2127 | dependencies: 2128 | deep-is: 0.1.4 2129 | fast-levenshtein: 2.0.6 2130 | levn: 0.4.1 2131 | prelude-ls: 1.2.1 2132 | type-check: 0.4.0 2133 | word-wrap: 1.2.3 2134 | dev: true 2135 | 2136 | /p-limit@3.1.0: 2137 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2138 | engines: {node: '>=10'} 2139 | dependencies: 2140 | yocto-queue: 0.1.0 2141 | dev: true 2142 | 2143 | /p-locate@5.0.0: 2144 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2145 | engines: {node: '>=10'} 2146 | dependencies: 2147 | p-limit: 3.1.0 2148 | dev: true 2149 | 2150 | /pako@0.2.9: 2151 | resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} 2152 | dev: false 2153 | 2154 | /parent-module@1.0.1: 2155 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2156 | engines: {node: '>=6'} 2157 | dependencies: 2158 | callsites: 3.1.0 2159 | dev: true 2160 | 2161 | /path-exists@4.0.0: 2162 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2163 | engines: {node: '>=8'} 2164 | dev: true 2165 | 2166 | /path-is-absolute@1.0.1: 2167 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2168 | engines: {node: '>=0.10.0'} 2169 | dev: true 2170 | 2171 | /path-key@3.1.1: 2172 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2173 | engines: {node: '>=8'} 2174 | dev: true 2175 | 2176 | /path-key@4.0.0: 2177 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 2178 | engines: {node: '>=12'} 2179 | dev: true 2180 | 2181 | /path-parse@1.0.7: 2182 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2183 | dev: true 2184 | 2185 | /path-type@4.0.0: 2186 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2187 | engines: {node: '>=8'} 2188 | dev: true 2189 | 2190 | /picocolors@1.0.0: 2191 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2192 | 2193 | /picomatch@2.3.1: 2194 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2195 | engines: {node: '>=8.6'} 2196 | dev: true 2197 | 2198 | /pify@2.3.0: 2199 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 2200 | engines: {node: '>=0.10.0'} 2201 | dev: true 2202 | 2203 | /pirates@4.0.5: 2204 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} 2205 | engines: {node: '>= 6'} 2206 | dev: true 2207 | 2208 | /postcss-import@15.1.0(postcss@8.4.24): 2209 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 2210 | engines: {node: '>=14.0.0'} 2211 | peerDependencies: 2212 | postcss: ^8.0.0 2213 | dependencies: 2214 | postcss: 8.4.24 2215 | postcss-value-parser: 4.2.0 2216 | read-cache: 1.0.0 2217 | resolve: 1.22.2 2218 | dev: true 2219 | 2220 | /postcss-js@4.0.1(postcss@8.4.24): 2221 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 2222 | engines: {node: ^12 || ^14 || >= 16} 2223 | peerDependencies: 2224 | postcss: ^8.4.21 2225 | dependencies: 2226 | camelcase-css: 2.0.1 2227 | postcss: 8.4.24 2228 | dev: true 2229 | 2230 | /postcss-load-config@4.0.1(postcss@8.4.24): 2231 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} 2232 | engines: {node: '>= 14'} 2233 | peerDependencies: 2234 | postcss: '>=8.0.9' 2235 | ts-node: '>=9.0.0' 2236 | peerDependenciesMeta: 2237 | postcss: 2238 | optional: true 2239 | ts-node: 2240 | optional: true 2241 | dependencies: 2242 | lilconfig: 2.1.0 2243 | postcss: 8.4.24 2244 | yaml: 2.3.1 2245 | dev: true 2246 | 2247 | /postcss-nested@6.0.1(postcss@8.4.24): 2248 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 2249 | engines: {node: '>=12.0'} 2250 | peerDependencies: 2251 | postcss: ^8.2.14 2252 | dependencies: 2253 | postcss: 8.4.24 2254 | postcss-selector-parser: 6.0.13 2255 | dev: true 2256 | 2257 | /postcss-selector-parser@6.0.13: 2258 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 2259 | engines: {node: '>=4'} 2260 | dependencies: 2261 | cssesc: 3.0.0 2262 | util-deprecate: 1.0.2 2263 | dev: true 2264 | 2265 | /postcss-value-parser@4.2.0: 2266 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 2267 | 2268 | /postcss@8.4.21: 2269 | resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} 2270 | engines: {node: ^10 || ^12 || >=14} 2271 | dependencies: 2272 | nanoid: 3.3.6 2273 | picocolors: 1.0.0 2274 | source-map-js: 1.0.2 2275 | dev: true 2276 | 2277 | /postcss@8.4.24: 2278 | resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} 2279 | engines: {node: ^10 || ^12 || >=14} 2280 | dependencies: 2281 | nanoid: 3.3.6 2282 | picocolors: 1.0.0 2283 | source-map-js: 1.0.2 2284 | dev: true 2285 | 2286 | /postcss@8.4.31: 2287 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 2288 | engines: {node: ^10 || ^12 || >=14} 2289 | dependencies: 2290 | nanoid: 3.3.7 2291 | picocolors: 1.0.0 2292 | source-map-js: 1.0.2 2293 | dev: false 2294 | 2295 | /prelude-ls@1.2.1: 2296 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2297 | engines: {node: '>= 0.8.0'} 2298 | dev: true 2299 | 2300 | /prettier@2.8.8: 2301 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 2302 | engines: {node: '>=10.13.0'} 2303 | hasBin: true 2304 | dev: true 2305 | 2306 | /prop-types@15.8.1: 2307 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 2308 | dependencies: 2309 | loose-envify: 1.4.0 2310 | object-assign: 4.1.1 2311 | react-is: 16.13.1 2312 | dev: true 2313 | 2314 | /punycode@2.3.0: 2315 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2316 | engines: {node: '>=6'} 2317 | dev: true 2318 | 2319 | /queue-microtask@1.2.3: 2320 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2321 | dev: true 2322 | 2323 | /react-dom@18.2.0(react@18.2.0): 2324 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 2325 | peerDependencies: 2326 | react: ^18.2.0 2327 | dependencies: 2328 | loose-envify: 1.4.0 2329 | react: 18.2.0 2330 | scheduler: 0.23.0 2331 | dev: false 2332 | 2333 | /react-icons@4.7.1(react@18.2.0): 2334 | resolution: {integrity: sha512-yHd3oKGMgm7zxo3EA7H2n7vxSoiGmHk5t6Ou4bXsfcgWyhfDKMpyKfhHR6Bjnn63c+YXBLBPUql9H4wPJM6sXw==} 2335 | peerDependencies: 2336 | react: '*' 2337 | dependencies: 2338 | react: 18.2.0 2339 | dev: false 2340 | 2341 | /react-is@16.13.1: 2342 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 2343 | dev: true 2344 | 2345 | /react@18.2.0: 2346 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 2347 | engines: {node: '>=0.10.0'} 2348 | dependencies: 2349 | loose-envify: 1.4.0 2350 | dev: false 2351 | 2352 | /read-cache@1.0.0: 2353 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 2354 | dependencies: 2355 | pify: 2.3.0 2356 | dev: true 2357 | 2358 | /readdirp@3.6.0: 2359 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2360 | engines: {node: '>=8.10.0'} 2361 | dependencies: 2362 | picomatch: 2.3.1 2363 | dev: true 2364 | 2365 | /regenerator-runtime@0.13.11: 2366 | resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} 2367 | dev: true 2368 | 2369 | /regexp.prototype.flags@1.5.0: 2370 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} 2371 | engines: {node: '>= 0.4'} 2372 | dependencies: 2373 | call-bind: 1.0.2 2374 | define-properties: 1.2.0 2375 | functions-have-names: 1.2.3 2376 | dev: true 2377 | 2378 | /resolve-from@4.0.0: 2379 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2380 | engines: {node: '>=4'} 2381 | dev: true 2382 | 2383 | /resolve-pkg-maps@1.0.0: 2384 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 2385 | dev: true 2386 | 2387 | /resolve@1.22.2: 2388 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 2389 | hasBin: true 2390 | dependencies: 2391 | is-core-module: 2.12.1 2392 | path-parse: 1.0.7 2393 | supports-preserve-symlinks-flag: 1.0.0 2394 | dev: true 2395 | 2396 | /resolve@2.0.0-next.4: 2397 | resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} 2398 | hasBin: true 2399 | dependencies: 2400 | is-core-module: 2.12.1 2401 | path-parse: 1.0.7 2402 | supports-preserve-symlinks-flag: 1.0.0 2403 | dev: true 2404 | 2405 | /reusify@1.0.4: 2406 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2407 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2408 | dev: true 2409 | 2410 | /rimraf@3.0.2: 2411 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2412 | hasBin: true 2413 | dependencies: 2414 | glob: 7.2.3 2415 | dev: true 2416 | 2417 | /run-applescript@5.0.0: 2418 | resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} 2419 | engines: {node: '>=12'} 2420 | dependencies: 2421 | execa: 5.1.1 2422 | dev: true 2423 | 2424 | /run-parallel@1.2.0: 2425 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2426 | dependencies: 2427 | queue-microtask: 1.2.3 2428 | dev: true 2429 | 2430 | /safe-regex-test@1.0.0: 2431 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 2432 | dependencies: 2433 | call-bind: 1.0.2 2434 | get-intrinsic: 1.2.1 2435 | is-regex: 1.1.4 2436 | dev: true 2437 | 2438 | /satori@0.4.4: 2439 | resolution: {integrity: sha512-UCgoY7CXibFQmgI4ay4QSWUOca07nI9pY56w8NKrBq+bkGgiMbcPXZWj9bxukyJkEl/cgAICGjjxvwlDF2NYRw==} 2440 | engines: {node: '>=16'} 2441 | dependencies: 2442 | '@shuding/opentype.js': 1.4.0-beta.0 2443 | css-background-parser: 0.1.0 2444 | css-box-shadow: 1.0.0-3 2445 | css-to-react-native: 3.2.0 2446 | emoji-regex: 10.2.1 2447 | linebreak: 1.1.0 2448 | postcss-value-parser: 4.2.0 2449 | yoga-wasm-web: 0.3.3 2450 | dev: false 2451 | 2452 | /scheduler@0.23.0: 2453 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 2454 | dependencies: 2455 | loose-envify: 1.4.0 2456 | dev: false 2457 | 2458 | /semver@6.3.0: 2459 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 2460 | hasBin: true 2461 | dev: true 2462 | 2463 | /semver@7.5.2: 2464 | resolution: {integrity: sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==} 2465 | engines: {node: '>=10'} 2466 | hasBin: true 2467 | dependencies: 2468 | lru-cache: 6.0.0 2469 | dev: true 2470 | 2471 | /server-only@0.0.1: 2472 | resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} 2473 | dev: false 2474 | 2475 | /shebang-command@2.0.0: 2476 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2477 | engines: {node: '>=8'} 2478 | dependencies: 2479 | shebang-regex: 3.0.0 2480 | dev: true 2481 | 2482 | /shebang-regex@3.0.0: 2483 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2484 | engines: {node: '>=8'} 2485 | dev: true 2486 | 2487 | /side-channel@1.0.4: 2488 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 2489 | dependencies: 2490 | call-bind: 1.0.2 2491 | get-intrinsic: 1.2.1 2492 | object-inspect: 1.12.3 2493 | dev: true 2494 | 2495 | /signal-exit@3.0.7: 2496 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2497 | dev: true 2498 | 2499 | /slash@3.0.0: 2500 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2501 | engines: {node: '>=8'} 2502 | dev: true 2503 | 2504 | /slash@4.0.0: 2505 | resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} 2506 | engines: {node: '>=12'} 2507 | dev: true 2508 | 2509 | /source-map-js@1.0.2: 2510 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2511 | engines: {node: '>=0.10.0'} 2512 | 2513 | /streamsearch@1.1.0: 2514 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 2515 | engines: {node: '>=10.0.0'} 2516 | dev: false 2517 | 2518 | /string.prototype.codepointat@0.2.1: 2519 | resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} 2520 | dev: false 2521 | 2522 | /string.prototype.matchall@4.0.8: 2523 | resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} 2524 | dependencies: 2525 | call-bind: 1.0.2 2526 | define-properties: 1.2.0 2527 | es-abstract: 1.21.2 2528 | get-intrinsic: 1.2.1 2529 | has-symbols: 1.0.3 2530 | internal-slot: 1.0.5 2531 | regexp.prototype.flags: 1.5.0 2532 | side-channel: 1.0.4 2533 | dev: true 2534 | 2535 | /string.prototype.trim@1.2.7: 2536 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} 2537 | engines: {node: '>= 0.4'} 2538 | dependencies: 2539 | call-bind: 1.0.2 2540 | define-properties: 1.2.0 2541 | es-abstract: 1.21.2 2542 | dev: true 2543 | 2544 | /string.prototype.trimend@1.0.6: 2545 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} 2546 | dependencies: 2547 | call-bind: 1.0.2 2548 | define-properties: 1.2.0 2549 | es-abstract: 1.21.2 2550 | dev: true 2551 | 2552 | /string.prototype.trimstart@1.0.6: 2553 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} 2554 | dependencies: 2555 | call-bind: 1.0.2 2556 | define-properties: 1.2.0 2557 | es-abstract: 1.21.2 2558 | dev: true 2559 | 2560 | /strip-ansi@6.0.1: 2561 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2562 | engines: {node: '>=8'} 2563 | dependencies: 2564 | ansi-regex: 5.0.1 2565 | dev: true 2566 | 2567 | /strip-bom@3.0.0: 2568 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 2569 | engines: {node: '>=4'} 2570 | dev: true 2571 | 2572 | /strip-final-newline@2.0.0: 2573 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 2574 | engines: {node: '>=6'} 2575 | dev: true 2576 | 2577 | /strip-final-newline@3.0.0: 2578 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 2579 | engines: {node: '>=12'} 2580 | dev: true 2581 | 2582 | /strip-json-comments@3.1.1: 2583 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2584 | engines: {node: '>=8'} 2585 | dev: true 2586 | 2587 | /styled-jsx@5.1.1(react@18.2.0): 2588 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} 2589 | engines: {node: '>= 12.0.0'} 2590 | peerDependencies: 2591 | '@babel/core': '*' 2592 | babel-plugin-macros: '*' 2593 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' 2594 | peerDependenciesMeta: 2595 | '@babel/core': 2596 | optional: true 2597 | babel-plugin-macros: 2598 | optional: true 2599 | dependencies: 2600 | client-only: 0.0.1 2601 | react: 18.2.0 2602 | dev: false 2603 | 2604 | /sucrase@3.32.0: 2605 | resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} 2606 | engines: {node: '>=8'} 2607 | hasBin: true 2608 | dependencies: 2609 | '@jridgewell/gen-mapping': 0.3.3 2610 | commander: 4.1.1 2611 | glob: 7.1.6 2612 | lines-and-columns: 1.2.4 2613 | mz: 2.7.0 2614 | pirates: 4.0.5 2615 | ts-interface-checker: 0.1.13 2616 | dev: true 2617 | 2618 | /supports-color@7.2.0: 2619 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2620 | engines: {node: '>=8'} 2621 | dependencies: 2622 | has-flag: 4.0.0 2623 | dev: true 2624 | 2625 | /supports-preserve-symlinks-flag@1.0.0: 2626 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2627 | engines: {node: '>= 0.4'} 2628 | dev: true 2629 | 2630 | /synckit@0.8.5: 2631 | resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} 2632 | engines: {node: ^14.18.0 || >=16.0.0} 2633 | dependencies: 2634 | '@pkgr/utils': 2.4.1 2635 | tslib: 2.5.3 2636 | dev: true 2637 | 2638 | /tailwindcss@3.3.2: 2639 | resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==} 2640 | engines: {node: '>=14.0.0'} 2641 | hasBin: true 2642 | dependencies: 2643 | '@alloc/quick-lru': 5.2.0 2644 | arg: 5.0.2 2645 | chokidar: 3.5.3 2646 | didyoumean: 1.2.2 2647 | dlv: 1.1.3 2648 | fast-glob: 3.2.12 2649 | glob-parent: 6.0.2 2650 | is-glob: 4.0.3 2651 | jiti: 1.18.2 2652 | lilconfig: 2.1.0 2653 | micromatch: 4.0.5 2654 | normalize-path: 3.0.0 2655 | object-hash: 3.0.0 2656 | picocolors: 1.0.0 2657 | postcss: 8.4.24 2658 | postcss-import: 15.1.0(postcss@8.4.24) 2659 | postcss-js: 4.0.1(postcss@8.4.24) 2660 | postcss-load-config: 4.0.1(postcss@8.4.24) 2661 | postcss-nested: 6.0.1(postcss@8.4.24) 2662 | postcss-selector-parser: 6.0.13 2663 | postcss-value-parser: 4.2.0 2664 | resolve: 1.22.2 2665 | sucrase: 3.32.0 2666 | transitivePeerDependencies: 2667 | - ts-node 2668 | dev: true 2669 | 2670 | /tapable@2.2.1: 2671 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 2672 | engines: {node: '>=6'} 2673 | dev: true 2674 | 2675 | /text-table@0.2.0: 2676 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2677 | dev: true 2678 | 2679 | /thenify-all@1.6.0: 2680 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 2681 | engines: {node: '>=0.8'} 2682 | dependencies: 2683 | thenify: 3.3.1 2684 | dev: true 2685 | 2686 | /thenify@3.3.1: 2687 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2688 | dependencies: 2689 | any-promise: 1.3.0 2690 | dev: true 2691 | 2692 | /tiny-inflate@1.0.3: 2693 | resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} 2694 | dev: false 2695 | 2696 | /titleize@3.0.0: 2697 | resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} 2698 | engines: {node: '>=12'} 2699 | dev: true 2700 | 2701 | /to-regex-range@5.0.1: 2702 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2703 | engines: {node: '>=8.0'} 2704 | dependencies: 2705 | is-number: 7.0.0 2706 | dev: true 2707 | 2708 | /ts-interface-checker@0.1.13: 2709 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2710 | dev: true 2711 | 2712 | /tsconfig-paths@3.14.2: 2713 | resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} 2714 | dependencies: 2715 | '@types/json5': 0.0.29 2716 | json5: 1.0.2 2717 | minimist: 1.2.8 2718 | strip-bom: 3.0.0 2719 | dev: true 2720 | 2721 | /tslib@1.14.1: 2722 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2723 | dev: true 2724 | 2725 | /tslib@2.5.3: 2726 | resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} 2727 | 2728 | /tslib@2.6.2: 2729 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 2730 | 2731 | /tsutils@3.21.0(typescript@5.1.3): 2732 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 2733 | engines: {node: '>= 6'} 2734 | peerDependencies: 2735 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 2736 | dependencies: 2737 | tslib: 1.14.1 2738 | typescript: 5.1.3 2739 | dev: true 2740 | 2741 | /type-check@0.4.0: 2742 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2743 | engines: {node: '>= 0.8.0'} 2744 | dependencies: 2745 | prelude-ls: 1.2.1 2746 | dev: true 2747 | 2748 | /type-fest@0.20.2: 2749 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2750 | engines: {node: '>=10'} 2751 | dev: true 2752 | 2753 | /typed-array-length@1.0.4: 2754 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 2755 | dependencies: 2756 | call-bind: 1.0.2 2757 | for-each: 0.3.3 2758 | is-typed-array: 1.1.10 2759 | dev: true 2760 | 2761 | /typescript@5.1.3: 2762 | resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} 2763 | engines: {node: '>=14.17'} 2764 | hasBin: true 2765 | 2766 | /unbox-primitive@1.0.2: 2767 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 2768 | dependencies: 2769 | call-bind: 1.0.2 2770 | has-bigints: 1.0.2 2771 | has-symbols: 1.0.3 2772 | which-boxed-primitive: 1.0.2 2773 | dev: true 2774 | 2775 | /unicode-trie@2.0.0: 2776 | resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} 2777 | dependencies: 2778 | pako: 0.2.9 2779 | tiny-inflate: 1.0.3 2780 | dev: false 2781 | 2782 | /untildify@4.0.0: 2783 | resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} 2784 | engines: {node: '>=8'} 2785 | dev: true 2786 | 2787 | /update-browserslist-db@1.0.11(browserslist@4.21.9): 2788 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 2789 | hasBin: true 2790 | peerDependencies: 2791 | browserslist: '>= 4.21.0' 2792 | dependencies: 2793 | browserslist: 4.21.9 2794 | escalade: 3.1.1 2795 | picocolors: 1.0.0 2796 | dev: true 2797 | 2798 | /uri-js@4.4.1: 2799 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2800 | dependencies: 2801 | punycode: 2.3.0 2802 | dev: true 2803 | 2804 | /util-deprecate@1.0.2: 2805 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2806 | dev: true 2807 | 2808 | /watchpack@2.4.0: 2809 | resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} 2810 | engines: {node: '>=10.13.0'} 2811 | dependencies: 2812 | glob-to-regexp: 0.4.1 2813 | graceful-fs: 4.2.11 2814 | dev: false 2815 | 2816 | /which-boxed-primitive@1.0.2: 2817 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2818 | dependencies: 2819 | is-bigint: 1.0.4 2820 | is-boolean-object: 1.1.2 2821 | is-number-object: 1.0.7 2822 | is-string: 1.0.7 2823 | is-symbol: 1.0.4 2824 | dev: true 2825 | 2826 | /which-typed-array@1.1.9: 2827 | resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} 2828 | engines: {node: '>= 0.4'} 2829 | dependencies: 2830 | available-typed-arrays: 1.0.5 2831 | call-bind: 1.0.2 2832 | for-each: 0.3.3 2833 | gopd: 1.0.1 2834 | has-tostringtag: 1.0.0 2835 | is-typed-array: 1.1.10 2836 | dev: true 2837 | 2838 | /which@2.0.2: 2839 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2840 | engines: {node: '>= 8'} 2841 | hasBin: true 2842 | dependencies: 2843 | isexe: 2.0.0 2844 | dev: true 2845 | 2846 | /word-wrap@1.2.3: 2847 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 2848 | engines: {node: '>=0.10.0'} 2849 | dev: true 2850 | 2851 | /wrappy@1.0.2: 2852 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2853 | dev: true 2854 | 2855 | /yallist@4.0.0: 2856 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2857 | dev: true 2858 | 2859 | /yaml@2.3.1: 2860 | resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} 2861 | engines: {node: '>= 14'} 2862 | dev: true 2863 | 2864 | /yocto-queue@0.1.0: 2865 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2866 | engines: {node: '>=10'} 2867 | dev: true 2868 | 2869 | /yoga-wasm-web@0.3.3: 2870 | resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} 2871 | dev: false 2872 | 2873 | /zod@3.20.2: 2874 | resolution: {integrity: sha512-1MzNQdAvO+54H+EaK5YpyEy0T+Ejo/7YLHS93G3RnYWh5gaotGHwGeN/ZO687qEDU2y4CdStQYXVHIgrUl5UVQ==} 2875 | dev: false 2876 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xataio/xmdb/b0bc8caba5a5dec825de188b63523e5743b39a8d/public/favicon.ico -------------------------------------------------------------------------------- /public/placeholder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xataio/xmdb/b0bc8caba5a5dec825de188b63523e5743b39a8d/public/placeholder.jpg -------------------------------------------------------------------------------- /public/xata-logo-primary@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xataio/xmdb/b0bc8caba5a5dec825de188b63523e5743b39a8d/public/xata-logo-primary@2x.png -------------------------------------------------------------------------------- /public/xatafly-colored.svg: -------------------------------------------------------------------------------- 1 | <svg width="461" height="467" viewBox="0 0 461 467" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M389.431 465.611C421.673 433.443 443.246 393.222 449.403 353.796C455.56 314.369 445.797 278.966 422.262 255.376L300.691 376.663L389.431 465.611Z" fill="#06D6A0"/> 3 | <path d="M71.5738 466.306C39.331 434.138 17.7582 393.917 11.6011 354.49C5.44395 315.064 15.2069 279.661 38.7422 256.07L160.314 377.358L71.5738 466.306Z" fill="#FFBB00"/> 4 | <path d="M0.673946 122.184C0.727229 167.729 18.8709 211.387 51.1137 243.554L51.1168 243.551L172.673 364.823C204.84 332.58 222.882 288.88 222.829 243.335C222.775 197.79 204.632 154.132 172.389 121.964L172.386 121.967L50.8296 0.695312C18.6622 32.9381 0.620662 76.6388 0.673946 122.184Z" fill="#FF0075"/> 5 | <path d="M460.329 121.488C460.276 167.033 442.132 210.692 409.89 242.859L409.886 242.855L288.33 364.127C256.163 331.884 238.121 288.183 238.175 242.638C238.228 197.094 256.372 153.435 288.614 121.268L288.618 121.271L410.174 0C442.341 32.2428 460.383 75.9435 460.329 121.488Z" fill="#0076FF"/> 6 | </svg> 7 | -------------------------------------------------------------------------------- /public/xatafly-white.svg: -------------------------------------------------------------------------------- 1 | <svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M190 56.5752C189.979 74.3896 182.874 91.466 170.248 104.048L170.246 104.046L125.455 148.681C123.903 150.228 121.381 150.232 119.927 148.593C109.037 136.322 102.985 120.451 103.005 103.962C103.026 86.1473 110.131 69.0708 122.757 56.4889L122.758 56.4904L163.681 15.7113C167.369 12.0357 173.405 12.0094 176.533 16.1714C185.24 27.756 190.017 41.9216 190 56.5752Z" fill="white"/> 3 | <path d="M29.7521 104.32C17.1259 91.738 10.0209 74.6615 10 56.8472C9.98288 42.1935 14.7602 28.028 23.4671 16.4434C26.5953 12.2813 32.6306 12.3077 36.3191 15.9833L77.242 56.7626L77.2432 56.7614C89.8694 69.3433 96.9744 86.4197 96.9953 104.234C97.0146 120.723 90.9631 136.594 80.0732 148.865C78.6188 150.504 76.0972 150.5 74.5452 148.953L29.7534 104.319L29.7521 104.32Z" fill="white"/> 4 | <path d="M168.562 184.187C165.272 188.223 159.253 188.188 155.572 184.503L130.295 159.196C128.744 157.644 128.747 155.127 130.302 153.578L172.284 111.743C173.836 110.197 176.367 110.188 177.736 111.898C185.022 121.003 187.887 133.586 185.721 147.44C183.739 160.12 177.675 173.01 168.562 184.187Z" fill="white"/> 5 | <path d="M44.4284 184.775C40.7479 188.459 34.7289 188.495 31.4382 184.459C22.3258 173.282 16.2616 160.392 14.2791 147.711C12.1131 133.858 14.9781 121.275 22.2645 112.17C23.6335 110.459 26.1647 110.468 27.7167 112.015L69.6987 153.85C71.2533 155.399 71.2563 157.915 69.7053 159.468L44.4284 184.775Z" fill="white"/> 6 | </svg> 7 | -------------------------------------------------------------------------------- /public/xatafly.svg: -------------------------------------------------------------------------------- 1 | <svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M190 56.5752C189.979 74.3896 182.874 91.466 170.248 104.048L170.246 104.046L125.455 148.681C123.903 150.228 121.381 150.232 119.927 148.593C109.037 136.322 102.985 120.451 103.005 103.962C103.026 86.1473 110.131 69.0708 122.757 56.4889L122.758 56.4904L163.681 15.7113C167.369 12.0357 173.405 12.0094 176.533 16.1714C185.24 27.756 190.017 41.9216 190 56.5752Z" fill="url(#paint0_linear_625_1548)"/> 3 | <path d="M29.7521 104.32C17.1259 91.738 10.0209 74.6615 10 56.8472C9.98288 42.1935 14.7602 28.028 23.4671 16.4434C26.5953 12.2813 32.6306 12.3077 36.3191 15.9833L77.242 56.7626L77.2432 56.7614C89.8694 69.3433 96.9744 86.4197 96.9953 104.234C97.0146 120.723 90.9631 136.594 80.0732 148.865C78.6188 150.504 76.0972 150.5 74.5452 148.953L29.7534 104.319L29.7521 104.32Z" fill="url(#paint1_linear_625_1548)"/> 4 | <path d="M168.562 184.187C165.272 188.223 159.253 188.188 155.572 184.503L130.295 159.196C128.744 157.644 128.747 155.127 130.302 153.578L172.284 111.743C173.836 110.197 176.367 110.188 177.736 111.898C185.023 121.003 187.888 133.586 185.722 147.44C183.739 160.12 177.675 173.01 168.562 184.187Z" fill="url(#paint2_linear_625_1548)"/> 5 | <path d="M44.4286 184.775C40.7481 188.459 34.7291 188.495 31.4385 184.459C22.326 173.282 16.2619 160.392 14.2793 147.711C12.1133 133.858 14.9784 121.275 22.2647 112.17C23.6338 110.459 26.1649 110.468 27.717 112.015L69.699 153.85C71.2536 155.399 71.2565 157.915 69.7055 159.468L44.4286 184.775Z" fill="url(#paint3_linear_625_1548)"/> 6 | <defs> 7 | <linearGradient id="paint0_linear_625_1548" x1="100" y1="13" x2="100" y2="151.64" gradientUnits="userSpaceOnUse"> 8 | <stop stop-color="#9F87FF"/> 9 | <stop offset="1" stop-color="#8566FF"/> 10 | </linearGradient> 11 | <linearGradient id="paint1_linear_625_1548" x1="100" y1="13" x2="100" y2="151.64" gradientUnits="userSpaceOnUse"> 12 | <stop stop-color="#9F87FF"/> 13 | <stop offset="1" stop-color="#8566FF"/> 14 | </linearGradient> 15 | <linearGradient id="paint2_linear_625_1548" x1="100" y1="108.956" x2="100" y2="187.375" gradientUnits="userSpaceOnUse"> 16 | <stop stop-color="#DE99F6"/> 17 | <stop offset="1" stop-color="#D669FC"/> 18 | </linearGradient> 19 | <linearGradient id="paint3_linear_625_1548" x1="100" y1="108.956" x2="100" y2="187.375" gradientUnits="userSpaceOnUse"> 20 | <stop stop-color="#DE99F6"/> 21 | <stop offset="1" stop-color="#D669FC"/> 22 | </linearGradient> 23 | </defs> 24 | </svg> 25 | -------------------------------------------------------------------------------- /public/xmdb-hero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xataio/xmdb/b0bc8caba5a5dec825de188b63523e5743b39a8d/public/xmdb-hero@2x.png -------------------------------------------------------------------------------- /public/xmdb-og.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xataio/xmdb/b0bc8caba5a5dec825de188b63523e5743b39a8d/public/xmdb-og.png -------------------------------------------------------------------------------- /schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "tables": [ 3 | { 4 | "name": "titles", 5 | "columns": [ 6 | { 7 | "name": "titleType", 8 | "type": "string" 9 | }, 10 | { 11 | "name": "primaryTitle", 12 | "type": "string" 13 | }, 14 | { 15 | "name": "originalTitle", 16 | "type": "string" 17 | }, 18 | { 19 | "name": "isAdult", 20 | "type": "bool" 21 | }, 22 | { 23 | "name": "startYear", 24 | "type": "int" 25 | }, 26 | { 27 | "name": "endYear", 28 | "type": "int" 29 | }, 30 | { 31 | "name": "runtimeMinutes", 32 | "type": "float" 33 | }, 34 | { 35 | "name": "genres", 36 | "type": "multiple" 37 | }, 38 | { 39 | "name": "numVotes", 40 | "type": "int" 41 | }, 42 | { 43 | "name": "averageRating", 44 | "type": "float" 45 | }, 46 | { 47 | "name": "coverUrl", 48 | "type": "string" 49 | }, 50 | { 51 | "name": "summary", 52 | "type": "text" 53 | } 54 | ] 55 | } 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /scripts/one-click.mjs: -------------------------------------------------------------------------------- 1 | //@ts-check 2 | import { exec } from 'node:child_process' 3 | import dotenv from 'dotenv' 4 | 5 | dotenv.config({ 6 | path: '.env.local', 7 | }) 8 | 9 | try { 10 | console.log(`❯ Link and Setup database at ${process.env.XATA_DATABASE_URL}`) 11 | 12 | exec( 13 | `pnpm -s dlx @xata.io/cli@latest init --schema=schema.json --codegen=lib/xata.codegen.ts --db=${process.env.XATA_DATABASE_URL} --yes --force`, 14 | (_error, stdout, stderr) => { 15 | console.log('❯ Running pnpm dlx') 16 | 17 | if (stderr) { 18 | console.error(`Finished with issues: \n${stderr}`) 19 | return 20 | } 21 | console.log(stdout) 22 | } 23 | ) 24 | } catch { 25 | console.warn('Setup gone wrong.') 26 | } 27 | -------------------------------------------------------------------------------- /scripts/seed.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import { faker } from '@faker-js/faker' 3 | import { buildClient } from '@xata.io/client' 4 | import dotenv from 'dotenv' 5 | 6 | const MOVIE_GENRES = [ 7 | 'action', 8 | 'sci-fi', 9 | 'fantasy', 10 | 'comedy', 11 | 'drama', 12 | 'animation', 13 | ] 14 | 15 | dotenv.config({ 16 | path: '.env.local', 17 | }) 18 | 19 | dotenv.config() // Load the default .env file 20 | 21 | class XataClient extends buildClient() { 22 | /** 23 | * 24 | * @param {{}} options 25 | */ 26 | constructor(options) { 27 | super({ 28 | ...options, 29 | }) 30 | } 31 | } 32 | 33 | const xata = new XataClient({ 34 | databaseURL: process.env.XATA_DATABASE_URL, 35 | apiKey: process.env.XATA_API_KEY, 36 | branch: process.env.XATA_BRANCH || 'main', 37 | }) 38 | 39 | /** 40 | * 41 | * @param {number} rows 42 | */ 43 | function setMockData(rows = 100) { 44 | const titles = [] 45 | 46 | for (let i = 0; i < rows; i++) { 47 | const title = faker.music.songName() 48 | const year = faker.date.past(10).getFullYear() 49 | 50 | titles.push({ 51 | titleType: faker.helpers.arrayElement(['movie', 'short']), 52 | primaryTitle: title, 53 | originalTitle: title, 54 | startYear: year, 55 | endYear: year + 1, 56 | isAdult: faker.datatype.boolean(), 57 | runtimeMinutes: faker.datatype.number({ min: 30, max: 180 }), 58 | genres: faker.helpers.arrayElements(MOVIE_GENRES), 59 | numVotes: faker.datatype.number({ min: 19000, max: 2000000 }), 60 | averageRating: faker.datatype.number({ min: 6, max: 10 }), 61 | coverUrl: faker.image.imageUrl(), 62 | summary: faker.lorem.paragraph(), 63 | }) 64 | } 65 | 66 | return titles 67 | } 68 | 69 | async function isDBpopulated() { 70 | const { aggs } = await xata.db.titles.aggregate({ 71 | totalCount: { 72 | count: '*', 73 | }, 74 | }) 75 | 76 | if (aggs.totalCount > 0) { 77 | return true 78 | } 79 | 80 | return false 81 | } 82 | 83 | export async function seed() { 84 | if (await isDBpopulated()) { 85 | console.warn('Database is not empty. Skip seeding...') 86 | return 87 | } 88 | 89 | const data = setMockData() 90 | 91 | try { 92 | await xata.db.titles.create(data) 93 | 94 | console.log(`🎉 100 records successfully inserted!`) 95 | 96 | return 'success' 97 | } catch (err) { 98 | console.error('Gone wrong: ', err) 99 | } 100 | } 101 | 102 | try { 103 | console.log(`❯ Pushing sample data to: ${process.env.XATA_DATABASE_URL}`) 104 | 105 | seed() 106 | } catch { 107 | console.warn('Seeding gone wrong.') 108 | } 109 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ['./app/**/*.{js,ts,jsx,tsx}', './components/**/*.{ts,tsx}'], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | } 9 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "~/*": ["./*"] 6 | }, 7 | "target": "es5", 8 | "lib": ["dom", "dom.iterable", "esnext"], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "strict": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "noEmit": true, 14 | "esModuleInterop": true, 15 | "module": "esnext", 16 | "moduleResolution": "node", 17 | "resolveJsonModule": true, 18 | "isolatedModules": true, 19 | "jsx": "preserve", 20 | "incremental": true, 21 | "plugins": [ 22 | { 23 | "name": "next" 24 | } 25 | ] 26 | }, 27 | "include": [ 28 | "next-env.d.ts", 29 | "**/*.ts", 30 | "**/*.tsx", 31 | ".next/types/**/*.ts", 32 | "scripts/seed.mjs", 33 | "scripts/one-click.mjs", 34 | "app/@modal/.default.tsx" 35 | ], 36 | "exclude": ["node_modules"] 37 | } 38 | --------------------------------------------------------------------------------