From 8aebf14f343a999c5afea6fbd4264a33c379625c Mon Sep 17 00:00:00 2001 From: meera-datey <99427484+meera-datey@users.noreply.github.com> Date: Sat, 5 Nov 2022 20:42:14 -0700 Subject: [PATCH 001/109] nextjs example program for real time presence. --- .../realtime/nextjs-auth-presence/.gitignore | 36 + .../realtime/nextjs-auth-presence/README.md | 82 + .../nextjs-auth-presence/next.config.js | 7 + .../nextjs-auth-presence/package.json | 28 + .../nextjs-auth-presence/pages/_app.tsx | 39 + .../nextjs-auth-presence/pages/index.tsx | 66 + .../nextjs-auth-presence/pages/login.tsx | 40 + .../nextjs-auth-presence/pages/profile.tsx | 18 + .../nextjs-auth-presence/public/favicon.ico | Bin 0 -> 25931 bytes .../nextjs-auth-presence/public/vercel.svg | 4 + .../nextjs-auth-presence/sample.env.local | 2 + .../styles/Home.module.css | 129 ++ .../nextjs-auth-presence/styles/globals.css | 26 + .../nextjs-auth-presence/tsconfig.json | 20 + .../realtime/nextjs-auth-presence/yarn.lock | 1995 +++++++++++++++++ 15 files changed, 2492 insertions(+) create mode 100644 examples/realtime/nextjs-auth-presence/.gitignore create mode 100644 examples/realtime/nextjs-auth-presence/README.md create mode 100644 examples/realtime/nextjs-auth-presence/next.config.js create mode 100644 examples/realtime/nextjs-auth-presence/package.json create mode 100644 examples/realtime/nextjs-auth-presence/pages/_app.tsx create mode 100644 examples/realtime/nextjs-auth-presence/pages/index.tsx create mode 100644 examples/realtime/nextjs-auth-presence/pages/login.tsx create mode 100644 examples/realtime/nextjs-auth-presence/pages/profile.tsx create mode 100644 examples/realtime/nextjs-auth-presence/public/favicon.ico create mode 100644 examples/realtime/nextjs-auth-presence/public/vercel.svg create mode 100644 examples/realtime/nextjs-auth-presence/sample.env.local create mode 100644 examples/realtime/nextjs-auth-presence/styles/Home.module.css create mode 100644 examples/realtime/nextjs-auth-presence/styles/globals.css create mode 100644 examples/realtime/nextjs-auth-presence/tsconfig.json create mode 100644 examples/realtime/nextjs-auth-presence/yarn.lock diff --git a/examples/realtime/nextjs-auth-presence/.gitignore b/examples/realtime/nextjs-auth-presence/.gitignore new file mode 100644 index 00000000000..c87c9b392c0 --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/realtime/nextjs-auth-presence/README.md b/examples/realtime/nextjs-auth-presence/README.md new file mode 100644 index 00000000000..1dbb16e30e3 --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/README.md @@ -0,0 +1,82 @@ +# Supabase Realtime Presence API Sample Program + +This is an example program for Supabase Realtime Presence APIs. +User get authenticated using Supabase Auth API. Once Logged-in you can see which users are 'present' and viewing the page. + +- Frontend: + - Next.js. + - [Supabase.js 2.0.1 (realtime presence support)](https://supabase.io/docs/library/getting-started) +- Backend: + - [app.supabase.io](https://app.supabase.io/): hosted postgres database with realtime support. + + + +## Getting Started + +### 1. Create new project + +Sign up to Supabase - [https://app.supabase.io](https://app.supabase.io) and create a new project. Wait for your database to start. + +### 2. Run "User Management Starter" Quickstart + +This will create user tables and profile tables for user management. + +### 3. Get the URL and Key + +Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key, you'll need these in the next step. + +The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. + +![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) + + +### 4. Pull this example git repository + + `git clone <> ` + +### 5. Create a .env.local file + +Create a .env.local file and add following environment variables. + + + +`NEXT_PUBLIC_SUPABASE_URL=<> + +NEXT_PUBLIC_SUPABASE_ANON_KEY=<>` + + + +### 5. Now run the development server! +Now run +First, run the development server: + +```bash +npm run dev +# or +yarn dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + + + +## How to Test? + +When you visit http://localhost:3000, you will be redirected to auth login/signup screen. + +Signup if you haven't and then login. + +You will see your email listed on the page. + +Open another browser window. And sign-in as another user. + +As you login from other browser window, you will see list of current users updated. + + +## Deployment +Since this is next.js application, simplest method to deploy this repository is on Vercel. + +## Conclusion/Next Steps + - Need to implement Profile page + - Need to implement ability to upload User Avatars + - Need ability to read user avatar from social media. diff --git a/examples/realtime/nextjs-auth-presence/next.config.js b/examples/realtime/nextjs-auth-presence/next.config.js new file mode 100644 index 00000000000..491e9ba975f --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/next.config.js @@ -0,0 +1,7 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: false, + swcMinify: true, +} + +module.exports = nextConfig diff --git a/examples/realtime/nextjs-auth-presence/package.json b/examples/realtime/nextjs-auth-presence/package.json new file mode 100644 index 00000000000..4a76c6439b9 --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/package.json @@ -0,0 +1,28 @@ +{ + "name": "nextjs-auth-presence", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@supabase/auth-helpers-nextjs": "^0.4.1", + "@supabase/auth-helpers-react": "^0.3.0", + "@supabase/auth-ui-react": "^0.2.2", + "@supabase/supabase-js": "^2.0.1", + "next": "12.3.1", + "react": "18.2.0", + "react-dom": "18.2.0" + }, + "devDependencies": { + "@types/node": "18.11.0", + "@types/react": "18.0.21", + "@types/react-dom": "18.0.6", + "eslint": "8.25.0", + "eslint-config-next": "12.3.1", + "typescript": "4.8.4" + } +} diff --git a/examples/realtime/nextjs-auth-presence/pages/_app.tsx b/examples/realtime/nextjs-auth-presence/pages/_app.tsx new file mode 100644 index 00000000000..2458f4b6351 --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/pages/_app.tsx @@ -0,0 +1,39 @@ +import '../styles/globals.css' +import { useState } from 'react'; +import type { AppProps } from 'next/app' +import { useRouter } from 'next/router'; +import { createBrowserSupabaseClient, Session } from "@supabase/auth-helpers-nextjs"; +import { SessionContextProvider } from "@supabase/auth-helpers-react" + +function MyApp({ Component, pageProps }: AppProps<{ + initialSession: Session; +}>) { + const router = useRouter(); + const [supabaseClient] = useState(() => createBrowserSupabaseClient()); + + supabaseClient.auth.onAuthStateChange((event, session) => { + switch( event) + { case 'SIGNED_IN': + router.push('/'); + return; + case 'SIGNED_OUT': + router.push('/login'); + return; + } + }) + + return ( + + + + + + + + ); +} + +export default MyApp diff --git a/examples/realtime/nextjs-auth-presence/pages/index.tsx b/examples/realtime/nextjs-auth-presence/pages/index.tsx new file mode 100644 index 00000000000..142b209e171 --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/pages/index.tsx @@ -0,0 +1,66 @@ +import type { NextPage } from 'next' +import { useUser, useSupabaseClient } from '@supabase/auth-helpers-react' + +import { useEffect, useState } from 'react' + +import { createBrowserSupabaseClient } from '@supabase/auth-helpers-nextjs' +import { withPageAuth } from '@supabase/auth-helpers-nextjs' +import { RealtimePresenceState } from '@supabase/supabase-js' + +const HomePage: NextPage = () => { + const supabaseClient = useSupabaseClient() + const this_user = useUser() + const [userState, setUserState] = useState({}) + //const channel = useRef(); + + useEffect(() => { + console.log('user : ', this_user); + + + const channel = supabaseClient.channel('online-users', { + config: { + presence: { + key: this_user?.email ? this_user?.email : 'Unknown', + }, + }, + }) + + channel.on('presence', { event: 'sync' }, () => { + const presentState = channel.presenceState() + + console.log(' inside presence ', presentState) + + setUserState({...presentState}); + + }) + + channel.on('presence', { event: 'join' }, ({ newPresences }) => { + console.log('New users have joined: ', newPresences) + }) + + channel.subscribe( + async (status) => { + if (status === 'SUBSCRIBED') { + const status = await channel.track({ + user_name: this_user?.email ? this_user?.email : 'Unknown', + }) + console.log(status) + } + } + ) + }, []) + return ( + <> + + +

List of Currenly Logged in Users:

+ {Object.keys(userState).map((key) => ( +

Hi {key}

+ ))} + + ) +} + +export const getServerSideProps = withPageAuth({ redirectTo: '/login' }) + +export default HomePage diff --git a/examples/realtime/nextjs-auth-presence/pages/login.tsx b/examples/realtime/nextjs-auth-presence/pages/login.tsx new file mode 100644 index 00000000000..874f3421b1b --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/pages/login.tsx @@ -0,0 +1,40 @@ +import type { NextPage } from 'next' +import Head from 'next/head' +import Image from 'next/image' +import styles from '../styles/Home.module.css' +import { + useUser, + useSupabaseClient, +} from '@supabase/auth-helpers-react'; +import { Auth, ThemeSupa} from '@supabase/auth-ui-react'; +import Link from 'next/link'; +import { useEffect, useState } from 'react' + +import { createBrowserSupabaseClient } from '@supabase/auth-helpers-nextjs' + +const LoginPage: NextPage = () => { + const supabaseClient = useSupabaseClient(); + const user = useUser(); + + if (!user){ + return ( +
+ +
+ )} + +return ( + <> + +

user:

+
{JSON.stringify(user, null, 2)}
+ +) + return

Hi

+} + +export default LoginPage diff --git a/examples/realtime/nextjs-auth-presence/pages/profile.tsx b/examples/realtime/nextjs-auth-presence/pages/profile.tsx new file mode 100644 index 00000000000..ebdd6b86231 --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/pages/profile.tsx @@ -0,0 +1,18 @@ +// pages/profile.js +import { withPageAuth, User } from '@supabase/auth-helpers-nextjs'; +import Link from 'next/link'; + +export default function Profile({ user }: { user: User }) { + return ( + <> +

+ [Home] | [ + supabaseServerClient] +

+
Hello {user.email}
+
{JSON.stringify(user, null, 2)}
+ + ); +} + +export const getServerSideProps = withPageAuth({ redirectTo: '/' }); \ No newline at end of file diff --git a/examples/realtime/nextjs-auth-presence/public/favicon.ico b/examples/realtime/nextjs-auth-presence/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/examples/realtime/nextjs-auth-presence/public/vercel.svg b/examples/realtime/nextjs-auth-presence/public/vercel.svg new file mode 100644 index 00000000000..fbf0e25a651 --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/public/vercel.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/examples/realtime/nextjs-auth-presence/sample.env.local b/examples/realtime/nextjs-auth-presence/sample.env.local new file mode 100644 index 00000000000..f7cddeb9551 --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/sample.env.local @@ -0,0 +1,2 @@ +NEXT_PUBLIC_SUPABASE_URL='replace-this-with-your-supabase-instance' +NEXT_PUBLIC_SUPABASE_ANON_KEY='replace-this-with-your-supabasedb-anon-key' \ No newline at end of file diff --git a/examples/realtime/nextjs-auth-presence/styles/Home.module.css b/examples/realtime/nextjs-auth-presence/styles/Home.module.css new file mode 100644 index 00000000000..bd50f42ffe6 --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/styles/Home.module.css @@ -0,0 +1,129 @@ +.container { + padding: 0 2rem; +} + +.main { + min-height: 100vh; + padding: 4rem 0; + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.footer { + display: flex; + flex: 1; + padding: 2rem 0; + border-top: 1px solid #eaeaea; + justify-content: center; + align-items: center; +} + +.footer a { + display: flex; + justify-content: center; + align-items: center; + flex-grow: 1; +} + +.title a { + color: #0070f3; + text-decoration: none; +} + +.title a:hover, +.title a:focus, +.title a:active { + text-decoration: underline; +} + +.title { + margin: 0; + line-height: 1.15; + font-size: 4rem; +} + +.title, +.description { + text-align: center; +} + +.description { + margin: 4rem 0; + line-height: 1.5; + font-size: 1.5rem; +} + +.code { + background: #fafafa; + border-radius: 5px; + padding: 0.75rem; + font-size: 1.1rem; + font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, + Bitstream Vera Sans Mono, Courier New, monospace; +} + +.grid { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + max-width: 800px; +} + +.card { + margin: 1rem; + padding: 1.5rem; + text-align: left; + color: inherit; + text-decoration: none; + border: 1px solid #eaeaea; + border-radius: 10px; + transition: color 0.15s ease, border-color 0.15s ease; + max-width: 300px; +} + +.card:hover, +.card:focus, +.card:active { + color: #0070f3; + border-color: #0070f3; +} + +.card h2 { + margin: 0 0 1rem 0; + font-size: 1.5rem; +} + +.card p { + margin: 0; + font-size: 1.25rem; + line-height: 1.5; +} + +.logo { + height: 1em; + margin-left: 0.5rem; +} + +@media (max-width: 600px) { + .grid { + width: 100%; + flex-direction: column; + } +} + +@media (prefers-color-scheme: dark) { + .card, + .footer { + border-color: #222; + } + .code { + background: #111; + } + .logo img { + filter: invert(1); + } +} diff --git a/examples/realtime/nextjs-auth-presence/styles/globals.css b/examples/realtime/nextjs-auth-presence/styles/globals.css new file mode 100644 index 00000000000..4f1842163d2 --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/styles/globals.css @@ -0,0 +1,26 @@ +html, +body { + padding: 0; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, + Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; +} + +a { + color: inherit; + text-decoration: none; +} + +* { + box-sizing: border-box; +} + +@media (prefers-color-scheme: dark) { + html { + color-scheme: dark; + } + body { + color: white; + background: black; + } +} diff --git a/examples/realtime/nextjs-auth-presence/tsconfig.json b/examples/realtime/nextjs-auth-presence/tsconfig.json new file mode 100644 index 00000000000..99710e85787 --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/examples/realtime/nextjs-auth-presence/yarn.lock b/examples/realtime/nextjs-auth-presence/yarn.lock new file mode 100644 index 00000000000..48cad29ec2b --- /dev/null +++ b/examples/realtime/nextjs-auth-presence/yarn.lock @@ -0,0 +1,1995 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/runtime-corejs3@^7.10.2": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz#d0775a49bb5fba77e42cbb7276c9955c7b05af8d" + integrity sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg== + dependencies: + core-js-pure "^3.25.1" + regenerator-runtime "^0.13.10" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.18.9": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" + integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== + dependencies: + regenerator-runtime "^0.13.10" + +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.10.5": + version "0.10.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.7.tgz#6d53769fd0c222767e6452e8ebda825c22e9f0dc" + integrity sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@next/env@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/env/-/env-12.3.1.tgz#18266bd92de3b4aa4037b1927aa59e6f11879260" + integrity sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg== + +"@next/eslint-plugin-next@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.1.tgz#b821f27b0f175954d8d18e5d323fce040ecc79a6" + integrity sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw== + dependencies: + glob "7.1.7" + +"@next/swc-android-arm-eabi@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.1.tgz#b15ce8ad376102a3b8c0f3c017dde050a22bb1a3" + integrity sha512-i+BvKA8tB//srVPPQxIQN5lvfROcfv4OB23/L1nXznP+N/TyKL8lql3l7oo2LNhnH66zWhfoemg3Q4VJZSruzQ== + +"@next/swc-android-arm64@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.3.1.tgz#85d205f568a790a137cb3c3f720d961a2436ac9c" + integrity sha512-CmgU2ZNyBP0rkugOOqLnjl3+eRpXBzB/I2sjwcGZ7/Z6RcUJXK5Evz+N0ucOxqE4cZ3gkTeXtSzRrMK2mGYV8Q== + +"@next/swc-darwin-arm64@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.1.tgz#b105457d6760a7916b27e46c97cb1a40547114ae" + integrity sha512-hT/EBGNcu0ITiuWDYU9ur57Oa4LybD5DOQp4f22T6zLfpoBMfBibPtR8XktXmOyFHrL/6FC2p9ojdLZhWhvBHg== + +"@next/swc-darwin-x64@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.1.tgz#6947b39082271378896b095b6696a7791c6e32b1" + integrity sha512-9S6EVueCVCyGf2vuiLiGEHZCJcPAxglyckTZcEwLdJwozLqN0gtS0Eq0bQlGS3dH49Py/rQYpZ3KVWZ9BUf/WA== + +"@next/swc-freebsd-x64@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.1.tgz#2b6c36a4d84aae8b0ea0e0da9bafc696ae27085a" + integrity sha512-qcuUQkaBZWqzM0F1N4AkAh88lLzzpfE6ImOcI1P6YeyJSsBmpBIV8o70zV+Wxpc26yV9vpzb+e5gCyxNjKJg5Q== + +"@next/swc-linux-arm-gnueabihf@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.1.tgz#6e421c44285cfedac1f4631d5de330dd60b86298" + integrity sha512-diL9MSYrEI5nY2wc/h/DBewEDUzr/DqBjIgHJ3RUNtETAOB3spMNHvJk2XKUDjnQuluLmFMloet9tpEqU2TT9w== + +"@next/swc-linux-arm64-gnu@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.1.tgz#8863f08a81f422f910af126159d2cbb9552ef717" + integrity sha512-o/xB2nztoaC7jnXU3Q36vGgOolJpsGG8ETNjxM1VAPxRwM7FyGCPHOMk1XavG88QZSQf+1r+POBW0tLxQOJ9DQ== + +"@next/swc-linux-arm64-musl@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.1.tgz#0038f07cf0b259d70ae0c80890d826dfc775d9f3" + integrity sha512-2WEasRxJzgAmP43glFNhADpe8zB7kJofhEAVNbDJZANp+H4+wq+/cW1CdDi8DqjkShPEA6/ejJw+xnEyDID2jg== + +"@next/swc-linux-x64-gnu@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.1.tgz#c66468f5e8181ffb096c537f0dbfb589baa6a9c1" + integrity sha512-JWEaMyvNrXuM3dyy9Pp5cFPuSSvG82+yABqsWugjWlvfmnlnx9HOQZY23bFq3cNghy5V/t0iPb6cffzRWylgsA== + +"@next/swc-linux-x64-musl@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.1.tgz#c6269f3e96ac0395bc722ad97ce410ea5101d305" + integrity sha512-xoEWQQ71waWc4BZcOjmatuvPUXKTv6MbIFzpm4LFeCHsg2iwai0ILmNXf81rJR+L1Wb9ifEke2sQpZSPNz1Iyg== + +"@next/swc-win32-arm64-msvc@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.1.tgz#83c639ee969cee36ce247c3abd1d9df97b5ecade" + integrity sha512-hswVFYQYIeGHE2JYaBVtvqmBQ1CppplQbZJS/JgrVI3x2CurNhEkmds/yqvDONfwfbttTtH4+q9Dzf/WVl3Opw== + +"@next/swc-win32-ia32-msvc@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.1.tgz#52995748b92aa8ad053440301bc2c0d9fbcf27c2" + integrity sha512-Kny5JBehkTbKPmqulr5i+iKntO5YMP+bVM8Hf8UAmjSMVo3wehyLVc9IZkNmcbxi+vwETnQvJaT5ynYBkJ9dWA== + +"@next/swc-win32-x64-msvc@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.1.tgz#27d71a95247a9eaee03d47adee7e3bd594514136" + integrity sha512-W1ijvzzg+kPEX6LAc+50EYYSEo0FVu7dmTE+t+DM4iOLqgGHoW9uYSz9wCVdkXOEEMP9xhXfGpcSxsfDucyPkA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@rushstack/eslint-patch@^1.1.3": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" + integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== + +"@stitches/core@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@stitches/core/-/core-1.2.8.tgz#dce3b8fdc764fbc6dbea30c83b73bfb52cf96173" + integrity sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg== + +"@stitches/react@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@stitches/react/-/react-1.2.8.tgz#954f8008be8d9c65c4e58efa0937f32388ce3a38" + integrity sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA== + +"@supabase/auth-helpers-nextjs@^0.4.1": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@supabase/auth-helpers-nextjs/-/auth-helpers-nextjs-0.4.5.tgz#1028eb10eb380467da9064c40c9e2414abd9473b" + integrity sha512-LNn7FX2/Bm/nBQVfRlG9zVoueikbxIz20yFfR391XPQVjL4xppPgMC+f8j0rm2CT4PCf9gfQanyqlStbMd+Tzw== + dependencies: + "@supabase/auth-helpers-shared" "0.2.2" + +"@supabase/auth-helpers-react@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@supabase/auth-helpers-react/-/auth-helpers-react-0.3.1.tgz#815493a294662c56b83c7dd51692dacd24329342" + integrity sha512-g3SFv08Dz9FapNif/ZY1b7qKGlMJDyTLSayHBz3kb3FuYxg7aLWgQtydDhm5AGbc0XtvpIBuhGTIOVevwpdosA== + +"@supabase/auth-helpers-shared@0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@supabase/auth-helpers-shared/-/auth-helpers-shared-0.2.2.tgz#b004b3c95421da1971f7b5d6d5908b16aba164d3" + integrity sha512-p/8Suuw8IaKNDak0ZtO4jrKqEzRgTWevHcoL4WEoIKgGG4a2PPMhLsDTaZmfHMBJMIoyFIz4rZt9zkjMvpt7cw== + +"@supabase/auth-ui-react@^0.2.2": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@supabase/auth-ui-react/-/auth-ui-react-0.2.5.tgz#fb48a86e8d35f624c4217d679a7820dd3052d6bc" + integrity sha512-YJ0iurSF44/UUg9ZQvgMI0ZEV76tYHoSdRXhmIWMmXH+s08MGu/4cxIKyAjjmeOQ2k1E0t2DfITJZS1jeNis7g== + dependencies: + "@stitches/core" "^1.2.8" + "@stitches/react" "^1.2.8" + just-merge "^3.1.1" + prop-types "^15.7.2" + optionalDependencies: + fsevents "^2.3.2" + +"@supabase/functions-js@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@supabase/functions-js/-/functions-js-2.0.0.tgz#4ba0c9e6dff031e17666bef6779c48eff290a8a0" + integrity sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg== + dependencies: + cross-fetch "^3.1.5" + +"@supabase/gotrue-js@^2.2.2": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@supabase/gotrue-js/-/gotrue-js-2.2.3.tgz#8a0a7c882b68657ea9dfceb15de96346b9d1d033" + integrity sha512-2pw29sk2Fv/6CHFd72bIGTUNxI3UsyaEvjdpvgvvFtX7DmVBZPuotmQaZ56/V0sKREBdglt+bwIjOece1lmDCw== + dependencies: + cross-fetch "^3.1.5" + +"@supabase/postgrest-js@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz#c820eb51a7c98543de6617f5b782757771f8f6db" + integrity sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA== + dependencies: + cross-fetch "^3.1.5" + +"@supabase/realtime-js@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@supabase/realtime-js/-/realtime-js-2.1.0.tgz#699ac012bc1c721cd6446ad93226085be348e998" + integrity sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw== + dependencies: + "@types/phoenix" "^1.5.4" + websocket "^1.0.34" + +"@supabase/storage-js@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@supabase/storage-js/-/storage-js-2.0.0.tgz#9fceefa31e16b13525b44f886135cf1a5f320389" + integrity sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA== + dependencies: + cross-fetch "^3.1.5" + +"@supabase/supabase-js@^2.0.1": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@supabase/supabase-js/-/supabase-js-2.0.5.tgz#0a49b80a5225929e9b8572bccabd931c6ab3b866" + integrity sha512-zewk3U8wSe2UlKqzUk7iNxeMZzgDa5kjosSG4SKuAizIv+xzS+c2EZsYnNtc2byGjah4QT1dw3t91k2E+j+Akg== + dependencies: + "@supabase/functions-js" "^2.0.0" + "@supabase/gotrue-js" "^2.2.2" + "@supabase/postgrest-js" "^1.1.0" + "@supabase/realtime-js" "^2.1.0" + "@supabase/storage-js" "^2.0.0" + cross-fetch "^3.1.5" + +"@swc/helpers@0.4.11": + version "0.4.11" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.11.tgz#db23a376761b3d31c26502122f349a21b592c8de" + integrity sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw== + dependencies: + tslib "^2.4.0" + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/node@18.11.0": + version "18.11.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.0.tgz#f38c7139247a1d619f6cc6f27b072606af7c289d" + integrity sha512-IOXCvVRToe7e0ny7HpT/X9Rb2RYtElG1a+VshjwT00HxrM2dWBApHQoqsI6WiY7Q03vdf2bCrIGzVrkF/5t10w== + +"@types/phoenix@^1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/phoenix/-/phoenix-1.5.4.tgz#c08a1da6d7b4e365f6a1fe1ff9aada55f5356d24" + integrity sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/react-dom@18.0.6": + version "18.0.6" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1" + integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "18.0.25" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.25.tgz#8b1dcd7e56fe7315535a4af25435e0bb55c8ae44" + integrity sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/react@18.0.21": + version "18.0.21" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.21.tgz#b8209e9626bb00a34c76f55482697edd2b43cc67" + integrity sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@typescript-eslint/parser@^5.21.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.42.0.tgz#be0ffbe279e1320e3d15e2ef0ad19262f59e9240" + integrity sha512-Ixh9qrOTDRctFg3yIwrLkgf33AHyEIn6lhyf5cCfwwiGtkWhNpVKlEZApi3inGQR/barWnY7qY8FbGKBO7p3JA== + dependencies: + "@typescript-eslint/scope-manager" "5.42.0" + "@typescript-eslint/types" "5.42.0" + "@typescript-eslint/typescript-estree" "5.42.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.42.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.42.0.tgz#e1f2bb26d3b2a508421ee2e3ceea5396b192f5ef" + integrity sha512-l5/3IBHLH0Bv04y+H+zlcLiEMEMjWGaCX6WyHE5Uk2YkSGAMlgdUPsT/ywTSKgu9D1dmmKMYgYZijObfA39Wow== + dependencies: + "@typescript-eslint/types" "5.42.0" + "@typescript-eslint/visitor-keys" "5.42.0" + +"@typescript-eslint/types@5.42.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.42.0.tgz#5aeff9b5eced48f27d5b8139339bf1ef805bad7a" + integrity sha512-t4lzO9ZOAUcHY6bXQYRuu+3SSYdD9TS8ooApZft4WARt4/f2Cj/YpvbTe8A4GuhT4bNW72goDMOy7SW71mZwGw== + +"@typescript-eslint/typescript-estree@5.42.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.0.tgz#2592d24bb5f89bf54a63384ff3494870f95b3fd8" + integrity sha512-2O3vSq794x3kZGtV7i4SCWZWCwjEtkWfVqX4m5fbUBomOsEOyd6OAD1qU2lbvV5S8tgy/luJnOYluNyYVeOTTg== + dependencies: + "@typescript-eslint/types" "5.42.0" + "@typescript-eslint/visitor-keys" "5.42.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@5.42.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.0.tgz#ee8d62d486f41cfe646632fab790fbf0c1db5bb0" + integrity sha512-QHbu5Hf/2lOEOwy+IUw0GoSCuAzByTAWWrOTKzTzsotiUnWFpuKnXcAhC9YztAf2EElQ0VvIK+pHJUPkM0q7jg== + dependencies: + "@typescript-eslint/types" "5.42.0" + eslint-visitor-keys "^3.3.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +array-includes@^3.1.4, array-includes@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.2.5: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +axe-core@^4.4.3: + version "4.5.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.5.1.tgz#04d561c11b6d76d096d34e9d14ba2c294fb20cdc" + integrity sha512-1exVbW0X1O/HSr/WMwnaweyqcWOgZgLiVxdLG34pvSQk4NlYQr9OUy0JLwuhFfuVNQzzqgH57eYzkFBCb3bIsQ== + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +bufferutil@^4.0.1: + version "4.0.7" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" + integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + dependencies: + node-gyp-build "^4.3.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001406: + version "1.0.30001430" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001430.tgz#638a8ae00b5a8a97e66ff43733b2701f81b101fa" + integrity sha512-IB1BXTZKPDVPM7cnV4iaKaHxckvdr/3xtctB3f7Hmenx3qYBhGtTZ//7EllK66aKXW98Lx0+7Yr0kxBtIt3tzg== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +core-js-pure@^3.25.1: + version "3.26.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.26.0.tgz#7ad8a5dd7d910756f3124374b50026e23265ca9a" + integrity sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA== + +cross-fetch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csstype@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +debug@^2.2.0, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.5, es-abstract@^1.20.4: + version "1.20.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-next@12.3.1: + version "12.3.1" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.3.1.tgz#5d4eb0b7903cea81fd0d5106601d3afb0a453ff4" + integrity sha512-EN/xwKPU6jz1G0Qi6Bd/BqMnHLyRAL0VsaQaWA7F3KkjAgZHi4f1uL1JKGWNxdQpHTW/sdGONBd0bzxUka/DJg== + dependencies: + "@next/eslint-plugin-next" "12.3.1" + "@rushstack/eslint-patch" "^1.1.3" + "@typescript-eslint/parser" "^5.21.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^2.7.1" + eslint-plugin-import "^2.26.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.31.7" + eslint-plugin-react-hooks "^4.5.0" + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-import-resolver-typescript@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751" + integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ== + dependencies: + debug "^4.3.4" + glob "^7.2.0" + is-glob "^4.0.3" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-module-utils@^2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== + dependencies: + "@babel/runtime" "^7.18.9" + aria-query "^4.2.2" + array-includes "^3.1.5" + ast-types-flow "^0.0.7" + axe-core "^4.4.3" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.2" + language-tags "^1.0.5" + minimatch "^3.1.2" + semver "^6.3.0" + +eslint-plugin-react-hooks@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.31.7: + version "7.31.10" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz#6782c2c7fe91c09e715d536067644bbb9491419a" + integrity sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA== + dependencies: + array-includes "^3.1.5" + array.prototype.flatmap "^1.3.0" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.1" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.7" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@8.25.0: + version "8.25.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.25.0.tgz#00eb962f50962165d0c4ee3327708315eaa8058b" + integrity sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.10.5" + "@humanwhocodes/module-importer" "^1.0.1" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" + integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +ext@^1.1.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3, glob@^7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-sdsl@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.5.tgz#1ff1645e6b4d1b028cd3f862db88c9d887f26e2a" + integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.3" + +just-merge@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/just-merge/-/just-merge-3.1.1.tgz#822bdf414a82bc0b05c0631a2961c9137be18adb" + integrity sha512-q0VS9owVgV9BcD2cy+E8MB8sIYpqmGAhoAGHH2PHtGwkC0CoITB8FJPMTg38GDO20cuaEGsR8SxCb+kf+g3G2Q== + +language-subtag-registry@~0.3.2: + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + dependencies: + language-subtag-registry "~0.3.2" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +next@12.3.1: + version "12.3.1" + resolved "https://registry.yarnpkg.com/next/-/next-12.3.1.tgz#127b825ad2207faf869b33393ec8c75fe61e50f1" + integrity sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw== + dependencies: + "@next/env" "12.3.1" + "@swc/helpers" "0.4.11" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.0.7" + use-sync-external-store "1.2.0" + optionalDependencies: + "@next/swc-android-arm-eabi" "12.3.1" + "@next/swc-android-arm64" "12.3.1" + "@next/swc-darwin-arm64" "12.3.1" + "@next/swc-darwin-x64" "12.3.1" + "@next/swc-freebsd-x64" "12.3.1" + "@next/swc-linux-arm-gnueabihf" "12.3.1" + "@next/swc-linux-arm64-gnu" "12.3.1" + "@next/swc-linux-arm64-musl" "12.3.1" + "@next/swc-linux-x64-gnu" "12.3.1" + "@next/swc-linux-x64-musl" "12.3.1" + "@next/swc-win32-arm64-msvc" "12.3.1" + "@next/swc-win32-ia32-msvc" "12.3.1" + "@next/swc-win32-x64-msvc" "12.3.1" + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" + integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.3, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.fromentries@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.hasown@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" + integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.19.5" + +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prop-types@^15.7.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-dom@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +regenerator-runtime@^0.13.10: + version "0.13.10" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz#ed07b19616bcbec5da6274ebc75ae95634bfc2ee" + integrity sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw== + +regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.20.0, resolve@^1.22.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.3: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +string.prototype.matchall@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.1" + side-channel "^1.0.4" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +styled-jsx@5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.7.tgz#be44afc53771b983769ac654d355ca8d019dff48" + integrity sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@4.8.4: + version "4.8.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" + integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +utf-8-validate@^5.0.2: + version "5.0.10" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== + dependencies: + node-gyp-build "^4.3.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +websocket@^1.0.34: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From fd553cc0400e2c55707d6d65398e436a1db8e979 Mon Sep 17 00:00:00 2001 From: meera-datey <99427484+meera-datey@users.noreply.github.com> Date: Sat, 5 Nov 2022 21:03:57 -0700 Subject: [PATCH 002/109] Readme updated. --- examples/realtime/nextjs-auth-presence/README.md | 11 ++++++----- .../realtime/nextjs-auth-presence/pages/index.tsx | 2 -- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/examples/realtime/nextjs-auth-presence/README.md b/examples/realtime/nextjs-auth-presence/README.md index 1dbb16e30e3..5ee9ad1e426 100644 --- a/examples/realtime/nextjs-auth-presence/README.md +++ b/examples/realtime/nextjs-auth-presence/README.md @@ -9,7 +9,8 @@ User get authenticated using Supabase Auth API. Once Logged-in you can see which - Backend: - [app.supabase.io](https://app.supabase.io/): hosted postgres database with realtime support. - +## Real time Presence APIs used. +This program shows usage of channel presence API calls such as , channel.on('presence', ...), channel.subscribe function usage. ## Getting Started @@ -38,11 +39,11 @@ The `anon` key is your client-side API key. It allows "anonymous access" to your Create a .env.local file and add following environment variables. + ``` + NEXT_PUBLIC_SUPABASE_URL=<> - -`NEXT_PUBLIC_SUPABASE_URL=<> - -NEXT_PUBLIC_SUPABASE_ANON_KEY=<>` +NEXT_PUBLIC_SUPABASE_ANON_KEY=<> +``` diff --git a/examples/realtime/nextjs-auth-presence/pages/index.tsx b/examples/realtime/nextjs-auth-presence/pages/index.tsx index 142b209e171..e14b8306f7f 100644 --- a/examples/realtime/nextjs-auth-presence/pages/index.tsx +++ b/examples/realtime/nextjs-auth-presence/pages/index.tsx @@ -3,7 +3,6 @@ import { useUser, useSupabaseClient } from '@supabase/auth-helpers-react' import { useEffect, useState } from 'react' -import { createBrowserSupabaseClient } from '@supabase/auth-helpers-nextjs' import { withPageAuth } from '@supabase/auth-helpers-nextjs' import { RealtimePresenceState } from '@supabase/supabase-js' @@ -11,7 +10,6 @@ const HomePage: NextPage = () => { const supabaseClient = useSupabaseClient() const this_user = useUser() const [userState, setUserState] = useState({}) - //const channel = useRef(); useEffect(() => { console.log('user : ', this_user); From ae2caf50e22d0623a2fd0a411d7deae38f733273 Mon Sep 17 00:00:00 2001 From: meera-datey <99427484+meera-datey@users.noreply.github.com> Date: Sat, 31 Dec 2022 16:38:21 -0500 Subject: [PATCH 003/109] Prettified and added useEffect for onAuthStateChange --- .../realtime/nextjs-auth-presence/README.md | 7 +-- .../nextjs-auth-presence/package.json | 3 +- .../nextjs-auth-presence/pages/_app.tsx | 47 ++++++++-------- .../nextjs-auth-presence/pages/index.tsx | 12 ++--- .../nextjs-auth-presence/pages/login.tsx | 50 +++++++++--------- .../nextjs-auth-presence/pages/profile.tsx | 11 ++-- .../supabase_anon_key.jpg | Bin 0 -> 51223 bytes 7 files changed, 65 insertions(+), 65 deletions(-) create mode 100644 examples/realtime/nextjs-auth-presence/supabase_anon_key.jpg diff --git a/examples/realtime/nextjs-auth-presence/README.md b/examples/realtime/nextjs-auth-presence/README.md index 5ee9ad1e426..7949860a68a 100644 --- a/examples/realtime/nextjs-auth-presence/README.md +++ b/examples/realtime/nextjs-auth-presence/README.md @@ -28,7 +28,8 @@ Go to the Project Settings (the cog icon), open the API tab, and find your API U The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. -![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) +![Supabase Anon Key](supabase_anon_key.jpg?raw=true "Supabase Anon Key") + ### 4. Pull this example git repository @@ -39,8 +40,8 @@ The `anon` key is your client-side API key. It allows "anonymous access" to your Create a .env.local file and add following environment variables. - ``` - NEXT_PUBLIC_SUPABASE_URL=<> +``` +NEXT_PUBLIC_SUPABASE_URL=<> NEXT_PUBLIC_SUPABASE_ANON_KEY=<> ``` diff --git a/examples/realtime/nextjs-auth-presence/package.json b/examples/realtime/nextjs-auth-presence/package.json index 4a76c6439b9..0f63cf9d4cb 100644 --- a/examples/realtime/nextjs-auth-presence/package.json +++ b/examples/realtime/nextjs-auth-presence/package.json @@ -6,7 +6,8 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "format": "prettier --write \"pages/**/*.{js,jsx,ts,tsx,css,md,json}\"" }, "dependencies": { "@supabase/auth-helpers-nextjs": "^0.4.1", diff --git a/examples/realtime/nextjs-auth-presence/pages/_app.tsx b/examples/realtime/nextjs-auth-presence/pages/_app.tsx index 2458f4b6351..a940a7c6d40 100644 --- a/examples/realtime/nextjs-auth-presence/pages/_app.tsx +++ b/examples/realtime/nextjs-auth-presence/pages/_app.tsx @@ -1,39 +1,44 @@ import '../styles/globals.css' -import { useState } from 'react'; +import { useState, useEffect } from 'react' import type { AppProps } from 'next/app' -import { useRouter } from 'next/router'; -import { createBrowserSupabaseClient, Session } from "@supabase/auth-helpers-nextjs"; -import { SessionContextProvider } from "@supabase/auth-helpers-react" +import { useRouter } from 'next/router' +import { createBrowserSupabaseClient, Session } from '@supabase/auth-helpers-nextjs' +import { SessionContextProvider } from '@supabase/auth-helpers-react' -function MyApp({ Component, pageProps }: AppProps<{ - initialSession: Session; +function MyApp({ + Component, + pageProps, +}: AppProps<{ + initialSession: Session }>) { - const router = useRouter(); - const [supabaseClient] = useState(() => createBrowserSupabaseClient()); + const router = useRouter() + const [supabaseClient] = useState(() => createBrowserSupabaseClient()) - supabaseClient.auth.onAuthStateChange((event, session) => { - switch( event) - { case 'SIGNED_IN': - router.push('/'); - return; + useEffect(() => { + const { + data: { subscription }, + } = supabaseClient.auth.onAuthStateChange((event, session) => { + switch (event) { + case 'SIGNED_IN': + router.push('/') + return case 'SIGNED_OUT': - router.push('/login'); - return; + router.push('/login') + return } - }) + }); + return subscription.unsubscribe; + + }, []); return ( - - - - - ); + ) } export default MyApp diff --git a/examples/realtime/nextjs-auth-presence/pages/index.tsx b/examples/realtime/nextjs-auth-presence/pages/index.tsx index e14b8306f7f..03006bd1bc5 100644 --- a/examples/realtime/nextjs-auth-presence/pages/index.tsx +++ b/examples/realtime/nextjs-auth-presence/pages/index.tsx @@ -12,9 +12,8 @@ const HomePage: NextPage = () => { const [userState, setUserState] = useState({}) useEffect(() => { - console.log('user : ', this_user); + console.log('user : ', this_user) - const channel = supabaseClient.channel('online-users', { config: { presence: { @@ -28,24 +27,21 @@ const HomePage: NextPage = () => { console.log(' inside presence ', presentState) - setUserState({...presentState}); - + setUserState({ ...presentState }) }) channel.on('presence', { event: 'join' }, ({ newPresences }) => { console.log('New users have joined: ', newPresences) }) - channel.subscribe( - async (status) => { + channel.subscribe(async (status) => { if (status === 'SUBSCRIBED') { const status = await channel.track({ user_name: this_user?.email ? this_user?.email : 'Unknown', }) console.log(status) } - } - ) + }) }, []) return ( <> diff --git a/examples/realtime/nextjs-auth-presence/pages/login.tsx b/examples/realtime/nextjs-auth-presence/pages/login.tsx index 874f3421b1b..b570b97c2a6 100644 --- a/examples/realtime/nextjs-auth-presence/pages/login.tsx +++ b/examples/realtime/nextjs-auth-presence/pages/login.tsx @@ -2,38 +2,36 @@ import type { NextPage } from 'next' import Head from 'next/head' import Image from 'next/image' import styles from '../styles/Home.module.css' -import { - useUser, - useSupabaseClient, -} from '@supabase/auth-helpers-react'; -import { Auth, ThemeSupa} from '@supabase/auth-ui-react'; -import Link from 'next/link'; +import { useUser, useSupabaseClient } from '@supabase/auth-helpers-react' +import { Auth, ThemeSupa } from '@supabase/auth-ui-react' +import Link from 'next/link' import { useEffect, useState } from 'react' import { createBrowserSupabaseClient } from '@supabase/auth-helpers-nextjs' const LoginPage: NextPage = () => { - const supabaseClient = useSupabaseClient(); - const user = useUser(); - - if (!user){ - return ( -
- -
- )} + const supabaseClient = useSupabaseClient() + const user = useUser() -return ( - <> - -

user:

-
{JSON.stringify(user, null, 2)}
- -) + if (!user) { + return ( +
+ +
+ ) + } + + return ( + <> + +

user:

+
{JSON.stringify(user, null, 2)}
+ + ) return

Hi

} diff --git a/examples/realtime/nextjs-auth-presence/pages/profile.tsx b/examples/realtime/nextjs-auth-presence/pages/profile.tsx index ebdd6b86231..60a6e7ee420 100644 --- a/examples/realtime/nextjs-auth-presence/pages/profile.tsx +++ b/examples/realtime/nextjs-auth-presence/pages/profile.tsx @@ -1,18 +1,17 @@ // pages/profile.js -import { withPageAuth, User } from '@supabase/auth-helpers-nextjs'; -import Link from 'next/link'; +import { withPageAuth, User } from '@supabase/auth-helpers-nextjs' +import Link from 'next/link' export default function Profile({ user }: { user: User }) { return ( <>

- [Home] | [ - supabaseServerClient] + [Home] | [supabaseServerClient]

Hello {user.email}
{JSON.stringify(user, null, 2)}
- ); + ) } -export const getServerSideProps = withPageAuth({ redirectTo: '/' }); \ No newline at end of file +export const getServerSideProps = withPageAuth({ redirectTo: '/' }) diff --git a/examples/realtime/nextjs-auth-presence/supabase_anon_key.jpg b/examples/realtime/nextjs-auth-presence/supabase_anon_key.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17b3cbd5f93fce9b4a38131b6c1ed7695df2b33c GIT binary patch literal 51223 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 b;lD=Uf5!+U{({=9Uwyj%FKIye&GY{YkQsHa literal 0 HcmV?d00001 From 96642425bbcd21b3954acfda14cbba0fd908e6cb Mon Sep 17 00:00:00 2001 From: dannykng Date: Thu, 12 Jan 2023 11:49:59 -0800 Subject: [PATCH 004/109] Move docs --- apps/docs/pages/guides/{ => database}/api.mdx | 0 apps/docs/pages/guides/{ => database}/api/generating-types.mdx | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename apps/docs/pages/guides/{ => database}/api.mdx (100%) rename apps/docs/pages/guides/{ => database}/api/generating-types.mdx (100%) diff --git a/apps/docs/pages/guides/api.mdx b/apps/docs/pages/guides/database/api.mdx similarity index 100% rename from apps/docs/pages/guides/api.mdx rename to apps/docs/pages/guides/database/api.mdx diff --git a/apps/docs/pages/guides/api/generating-types.mdx b/apps/docs/pages/guides/database/api/generating-types.mdx similarity index 100% rename from apps/docs/pages/guides/api/generating-types.mdx rename to apps/docs/pages/guides/database/api/generating-types.mdx From b41031c0c33f551e3d6eeeba0aae8448fa1a7b8a Mon Sep 17 00:00:00 2001 From: dannykng Date: Thu, 12 Jan 2023 11:53:10 -0800 Subject: [PATCH 005/109] Update links --- README.md | 6 +-- apps/docs/components/MDX/quickstart_intro.mdx | 2 +- .../Navigation/Navigation.constants.ts | 4 +- .../NavigationMenu.constants.ts | 4 +- .../javascript/v1/generating-types.mdx | 2 +- .../database/connecting-to-postgres.mdx | 8 ++-- apps/docs/pages/guides/database/tables.mdx | 2 +- .../pages/guides/functions/best-practices.mdx | 2 +- .../pages/guides/getting-started/features.mdx | 4 +- .../tutorials/with-redwoodjs.mdx | 2 +- .../guides/integrations/integrations.mdx | 4 +- apps/docs/pages/guides/platform.mdx | 2 +- apps/docs/pages/guides/platform/logs.mdx | 2 +- apps/docs/public/sitemap.xml | 4 +- .../_alternatives/supabase-vs-firebase.mdx | 2 +- .../supabase-vs-heroku-postgres.mdx | 5 +- .../_blog/2021-10-28-supabase-series-a.mdx | 2 +- .../2021-11-05-supabase-beta-october-2021.mdx | 2 +- apps/www/_blog/2021-12-03-pg-graphql.mdx | 47 ++++++++----------- .../_blog/2022-03-30-supabase-enterprise.mdx | 2 +- .../2022-03-31-supabase-edge-functions.mdx | 2 +- ...1-02-supabase-beta-update-october-2022.mdx | 10 ++-- .../2022-12-16-launch-week-6-wrap-up.mdx | 2 +- apps/www/pages/launch-week/index.tsx | 2 +- i18n/README.bg.md | 6 +-- i18n/README.bn.md | 6 +-- i18n/README.fi.md | 6 +-- i18n/README.hi.md | 6 +-- i18n/README.jp.md | 6 +-- i18n/README.ko.md | 6 +-- i18n/README.pt-br.md | 6 +-- i18n/README.sr.md | 6 +-- i18n/README.ta.md | 6 +-- i18n/README.vi-vn.md | 6 +-- i18n/README.zh-cn.md | 6 +-- spec/examples/examples.yml | 2 +- spec/supabase_dart_v0.yml | 2 +- spec/supabase_dart_v1.yml | 2 +- spec/supabase_js_v1.yml | 2 +- spec/supabase_js_v2.yml | 2 +- .../Home/NewProjectPanel/NewProjectPanel.tsx | 2 +- .../layouts/AccountLayout/AccountLayout.tsx | 2 +- .../layouts/DocsLayout/DocsLayout.utils.tsx | 2 +- .../Docs/Pages/Tables/Introduction.tsx | 8 ++-- 44 files changed, 104 insertions(+), 110 deletions(-) diff --git a/README.md b/README.md index 304eceed468..f4c8b99e41f 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ - [x] Hosted Postgres Database. [Docs](https://supabase.com/docs/guides/database) - [x] Authentication and Authorization. [Docs](https://supabase.com/docs/guides/auth) - [x] Auto-generated APIs. - - [x] REST. [Docs](https://supabase.com/docs/guides/api#rest-api) - - [x] Realtime subscriptions. [Docs](https://supabase.com/docs/guides/api#realtime-api) - - [x] GraphQL (Beta). [Docs](https://supabase.com/docs/guides/api#graphql-api) + - [x] REST. [Docs](https://supabase.com/docs/guides/database/api#rest-api) + - [x] Realtime subscriptions. [Docs](https://supabase.com/docs/guides/database/api#realtime-api) + - [x] GraphQL (Beta). [Docs](https://supabase.com/docs/guides/database/api#graphql-api) - [x] Functions. - [x] Database Functions. [Docs](https://supabase.com/docs/guides/database/functions) - [x] Edge Functions [Docs](https://supabase.com/docs/guides/functions) diff --git a/apps/docs/components/MDX/quickstart_intro.mdx b/apps/docs/components/MDX/quickstart_intro.mdx index 59e0e01da5c..f0e62650870 100644 --- a/apps/docs/components/MDX/quickstart_intro.mdx +++ b/apps/docs/components/MDX/quickstart_intro.mdx @@ -4,6 +4,6 @@ This example provides the steps to build a basic user management app. It include - Supabase [Auth](/docs/guides/auth): users can sign in with magic links (no passwords, only email). - Supabase [Storage](/docs/guides/storage): users can upload a photo. - [Row Level Security](/docs/guides/auth#row-level-security): data is protected so that individuals can only access their own data. -- Instant [APIs](/docs/guides/api): APIs will be automatically generated when you create your database tables. +- Instant [APIs](/docs/guides/database/api): APIs will be automatically generated when you create your database tables. By the end of this guide you'll have an app which allows users to login and update some basic profile details: diff --git a/apps/docs/components/Navigation/Navigation.constants.ts b/apps/docs/components/Navigation/Navigation.constants.ts index b0d769e6ea3..ab1a7dce36e 100644 --- a/apps/docs/components/Navigation/Navigation.constants.ts +++ b/apps/docs/components/Navigation/Navigation.constants.ts @@ -178,8 +178,8 @@ export const menuItems: NavMenu = { name: 'Serverless APIs', url: undefined, items: [ - { name: 'Overview', url: '/guides/api', items: [] }, - { name: 'Generating Types', url: '/guides/api/generating-types', items: [] }, + { name: 'Overview', url: '/guides/database/api', items: [] }, + { name: 'Generating Types', url: '/guides/database/api/generating-types', items: [] }, ], }, { diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 7abe1bea978..2e7b12d4aef 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -365,8 +365,8 @@ export const database = { name: 'Serverless APIs', url: undefined, items: [ - { name: 'Overview', url: '/guides/api', items: [] }, - { name: 'Generating Types', url: '/guides/api/generating-types', items: [] }, + { name: 'Overview', url: '/guides/database/api', items: [] }, + { name: 'Generating Types', url: '/guides/database/api/generating-types', items: [] }, ], }, { diff --git a/apps/docs/docs/reference/javascript/v1/generating-types.mdx b/apps/docs/docs/reference/javascript/v1/generating-types.mdx index 033cfdb9165..a46fd7ba70d 100644 --- a/apps/docs/docs/reference/javascript/v1/generating-types.mdx +++ b/apps/docs/docs/reference/javascript/v1/generating-types.mdx @@ -8,7 +8,7 @@ custom_edit_url: https://github.com/supabase/supabase/edit/master/spec/supabase_ import Tabs from '@theme/Tabs' import TabItem from '@theme/TabItem' -Supabase will soon release native type generators that dump your database types for various languages. For now, we support TypeScript [through third-party tools](/docs/guides/api/generating-types). +Supabase will soon release native type generators that dump your database types for various languages. For now, we support TypeScript [through third-party tools](/docs/guides/database/api/generating-types). ## Usage with TypeScript diff --git a/apps/docs/pages/guides/database/connecting-to-postgres.mdx b/apps/docs/pages/guides/database/connecting-to-postgres.mdx index 13bade73e20..4ced4b92084 100644 --- a/apps/docs/pages/guides/database/connecting-to-postgres.mdx +++ b/apps/docs/pages/guides/database/connecting-to-postgres.mdx @@ -28,15 +28,15 @@ You can use these simple questions to determine which connection method to use: ## API -Supabase provides an auto-updating [API](/docs/guides/api). This is the easiest way to get started if you are managing data (fetching, inserting, updating). +Supabase provides an auto-updating [API](/docs/guides/database/api). This is the easiest way to get started if you are managing data (fetching, inserting, updating). ### Interfaces We provides several types of API to suit your preferences and use-case: -- [REST](/docs/guides/api#rest-api): interact with your database through a REST interface. -- [GraphQL](/docs/guides/api#graphql-api): interact with your database through a GraphQL interface. -- [Realtime](/docs/guides/api#realtime-api): listen to database changes over websockets. +- [REST](/docs/guides/database/api#rest-api): interact with your database through a REST interface. +- [GraphQL](/docs/guides/database/api#graphql-api): interact with your database through a GraphQL interface. +- [Realtime](/docs/guides/database/api#realtime-api): listen to database changes over websockets. You cannot manage the database schema via the API (for security reasons). To do that you can use the dashboard or connect directly to your database. diff --git a/apps/docs/pages/guides/database/tables.mdx b/apps/docs/pages/guides/database/tables.mdx index 3a8caa24c19..60931dcf285 100644 --- a/apps/docs/pages/guides/database/tables.mdx +++ b/apps/docs/pages/guides/database/tables.mdx @@ -166,7 +166,7 @@ create table movies ( ## Loading data -There are several ways to load data in Supabase. You can load data directly into the database or using the [APIs](../../guides/api). +There are several ways to load data in Supabase. You can load data directly into the database or using the [APIs](../../guides/database/api). Use the "Bulk Loading" instructions if you are loading large data sets. ### Basic data loading diff --git a/apps/docs/pages/guides/functions/best-practices.mdx b/apps/docs/pages/guides/functions/best-practices.mdx index b670cd73a05..99f58fed04d 100644 --- a/apps/docs/pages/guides/functions/best-practices.mdx +++ b/apps/docs/pages/guides/functions/best-practices.mdx @@ -9,7 +9,7 @@ export const meta = { ## Database Functions vs Edge Functions For data-intensive operations we recommend using [Database Functions](/docs/guides/database/functions), which are executed within your database -and can be called remotely using the [REST and GraphQL API](/docs/guides/api). +and can be called remotely using the [REST and GraphQL API](/docs/guides/database/api). For use-cases which require low-latency we recommend [Edge Functions](/docs/guides/functions), which are globally-distributed and can be written in TypeScript. diff --git a/apps/docs/pages/guides/getting-started/features.mdx b/apps/docs/pages/guides/getting-started/features.mdx index c1e1a0dcfc9..cea9680d3c1 100755 --- a/apps/docs/pages/guides/getting-started/features.mdx +++ b/apps/docs/pages/guides/getting-started/features.mdx @@ -84,11 +84,11 @@ Build login and registration pages with custom themes. [Docs](/docs/guides/auth/ ### Auto-generated REST API -RESTful APIs are autogenerated from your database, without a single line of code. [Docs](/docs/guides/api#rest-api-overview). +RESTful APIs are autogenerated from your database, without a single line of code. [Docs](/docs/guides/database/api#rest-api-overview). ### Auto-generated GraphQL API -Fast GraphQL APIs using our custom Postgres GraphQL extension. [Docs](/docs/guides/api#graphql-api-overview). +Fast GraphQL APIs using our custom Postgres GraphQL extension. [Docs](/docs/guides/database/api#graphql-api-overview). ### Realtime Database changes diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx index cae8504a010..c32611a4251 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx @@ -27,7 +27,7 @@ This example provides the steps to build a simple user management app (from scra - Supabase [Database](/docs/guides/database): a Postgres database for storing your user data. - Supabase [Auth](/docs/guides/auth): users can sign in with magic links (no passwords, only email). - Supabase [Storage](/docs/guides/storage): users can upload a photo. -- Instant [APIs](/docs/guides/api): APIs will be automatically generated when you create your database tables. +- Instant [APIs](/docs/guides/database/api): APIs will be automatically generated when you create your database tables. - [Row Level Security](/docs/guides/auth#row-level-security): data is protected so that individuals can only access their own data. By the end of this guide you'll have an app which allows users to login and update some basic profile details: diff --git a/apps/docs/pages/guides/integrations/integrations.mdx b/apps/docs/pages/guides/integrations/integrations.mdx index de7a444ec58..a42b311571d 100644 --- a/apps/docs/pages/guides/integrations/integrations.mdx +++ b/apps/docs/pages/guides/integrations/integrations.mdx @@ -16,8 +16,8 @@ The Supabase Marketplace brings together all the tools you need to extend your S Supabase provides several integration points: - The [Postgres connection](/docs/guides/database/connecting-to-postgres). Anything that works with Postgres also works with Supabase projects. -- The [Project REST API](/docs/guides/api#rest-api) & client libraries. -- The [Project GraphQL API](/docs/guides/api#graphql-api). +- The [Project REST API](/docs/guides/database/api#rest-api) & client libraries. +- The [Project GraphQL API](/docs/guides/database/api#graphql-api). - The [Platform API](/docs/reference/api). ## List your integration diff --git a/apps/docs/pages/guides/platform.mdx b/apps/docs/pages/guides/platform.mdx index 8f734fdcd77..7a38fa2b167 100644 --- a/apps/docs/pages/guides/platform.mdx +++ b/apps/docs/pages/guides/platform.mdx @@ -16,7 +16,7 @@ Visit [app.supabase.com](https://app.supabase.com) and sign in to start creating Each project on Supabase comes with: - A dedicated [Postgres database](/docs/guides/database) -- [Auto-generated APIs](/docs/guides/api) +- [Auto-generated APIs](/docs/guides/database/api) - [Auth and user management](/docs/guides/auth) - [Edge Functions](/docs/guides/functions) - [Realtime API](/docs/guides/realtime) diff --git a/apps/docs/pages/guides/platform/logs.mdx b/apps/docs/pages/guides/platform/logs.mdx index 0754840cd7d..f7d0f4d14be 100644 --- a/apps/docs/pages/guides/platform/logs.mdx +++ b/apps/docs/pages/guides/platform/logs.mdx @@ -29,7 +29,7 @@ Supabase provides a logging interface specific to each product. You can use simp > -[API logs](https://app.supabase.com/project/_/database/api-logs) show all network requests and response for the REST and GraphQL [APIs](../../guides/api). +[API logs](https://app.supabase.com/project/_/database/api-logs) show all network requests and response for the REST and GraphQL [APIs](../../guides/database/api). ![API Logs](/docs/img/guides/platform/logs/logs-api.png) diff --git a/apps/docs/public/sitemap.xml b/apps/docs/public/sitemap.xml index 2e86001d252..76f95fcd07d 100644 --- a/apps/docs/public/sitemap.xml +++ b/apps/docs/public/sitemap.xml @@ -25,7 +25,7 @@ - https://supabase.com/docs/guides/api + https://supabase.com/docs/guides/database/api weekly 0.5 @@ -127,7 +127,7 @@ - https://supabase.com/docs/guides/api/generating-types + https://supabase.com/docs/guides/database/api/generating-types weekly 0.5 diff --git a/apps/www/_alternatives/supabase-vs-firebase.mdx b/apps/www/_alternatives/supabase-vs-firebase.mdx index 0ae182bebcc..ac4f8fd444c 100644 --- a/apps/www/_alternatives/supabase-vs-firebase.mdx +++ b/apps/www/_alternatives/supabase-vs-firebase.mdx @@ -28,7 +28,7 @@ Supabase is an open source firebase alternative, but instead of being built arou At Supabase we’ve always been huge fans of Firebase - so we started adding a few things on top of PostgreSQL in an attempt to reach feature parity, including: -- Auto-generated API - [query your data straight from the client](https://supabase.com/docs/guides/api#rest-api-2). +- Auto-generated API - [query your data straight from the client](https://supabase.com/docs/guides/database/api#rest-api-2). - Realtime - [changes in your data will be streamed directly to your application](https://supabase.com/docs/reference/dart/subscribe). - Auth - [a simple to integrate auth system and SQL based rules engine](https://supabase.com/auth). - Functions - [javascript and typescript functions that deploy out globally](https://supabase.com/edge-functions). diff --git a/apps/www/_alternatives/supabase-vs-heroku-postgres.mdx b/apps/www/_alternatives/supabase-vs-heroku-postgres.mdx index c25b9e4f414..78d2e42dffd 100644 --- a/apps/www/_alternatives/supabase-vs-heroku-postgres.mdx +++ b/apps/www/_alternatives/supabase-vs-heroku-postgres.mdx @@ -12,12 +12,11 @@ toc_depth: 3 Heroku is a cloud application platform that offers managed PostgreSQL as a service. They offer 5 levels of Postgres support from the Hobby Tier up to the Shield Tier, each with different levels of features and pricing. Heroku announced that starting November 28, 2022, they will [stop offering free product plans and will shut down free dynos and data services](https://blog.heroku.com/next-chapter). Since the announcement, developers started migrating their projects to Supabase. - ## What is Supabase? Supabase also offers managed Postgres, the main difference is that with each deployment you also get: -- Auto-generated API - [never write an API again](https://supabase.com/docs/guides/api#rest-api-2) +- Auto-generated API - [never write an API again](https://supabase.com/docs/guides/database/api#rest-api-2) - Realtime - [subscribe to data changes via websockets](https://supabase.com/docs/reference/dart/subscribe) - Auth - [users can log in and out of your application](https://supabase.com/auth) - Functions - [deploy custom logic to the edge](https://supabase.com/edge-functions) @@ -44,7 +43,7 @@ These are some of the key differences between Heroku Postgres and Supabase in te - Supabase is more than just the raw database, it also comes with: - [Connection pooling](https://supabase.com/docs/guides/database/connecting-to-postgres#connection-pool) so that you won’t run out of connections in a serverless environment. - - [Auto-generated APIs](https://supabase.com/docs/guides/api#rest-api-2) based on your schema, so you can communicate with your database directly from the client. + - [Auto-generated APIs](https://supabase.com/docs/guides/database/api#rest-api-2) based on your schema, so you can communicate with your database directly from the client. - [Realtime API](https://supabase.com/docs/reference/dart/subscribe) is useful for when you want to subscribe to changes to your database over websockets. - [Auth API](https://supabase.com/auth) can be used to leverage Postgres’s Row Level Security model, and control access to sensitive data on a per user, or per group level. - [Functions](https://supabase.com/edge-functions) can be deployed out to the edge directly from the Supabase CLI, which means you can run sensitive business logic or transformations in a serverless fashion. diff --git a/apps/www/_blog/2021-10-28-supabase-series-a.mdx b/apps/www/_blog/2021-10-28-supabase-series-a.mdx index 4a5e9a67f48..d25724eb472 100644 --- a/apps/www/_blog/2021-10-28-supabase-series-a.mdx +++ b/apps/www/_blog/2021-10-28-supabase-series-a.mdx @@ -217,7 +217,7 @@ User-facing applications usually require tools beyond just a database and fronte - **File Storage:** for large images and media. Supabase makes all of this easy. Beyond the database we offer [Auth](/docs/guides/auth), -RESTful and Realtime [APIs](/docs/guides/api), a [Storage](/docs/guides/storage) +RESTful and Realtime [APIs](/docs/guides/database/api), a [Storage](/docs/guides/storage) system for large files, and a bunch of other tools - all wrapped up into a simple-to-use Dashboard. ![Supabase Dashboard](/images/blog/series-a/dashboard.png) diff --git a/apps/www/_blog/2021-11-05-supabase-beta-october-2021.mdx b/apps/www/_blog/2021-11-05-supabase-beta-october-2021.mdx index 41c6b0df8de..7ae87740a6a 100644 --- a/apps/www/_blog/2021-11-05-supabase-beta-october-2021.mdx +++ b/apps/www/_blog/2021-11-05-supabase-beta-october-2021.mdx @@ -88,7 +88,7 @@ Learn about all the exciting features of Auth within Supabase. [Docs](https://su ### API Features -Learn more about the power of PostgREST for RESTful APIs. [Docs](https://supabase.com/docs/guides/api#restful-api). +Learn more about the power of PostgREST for RESTful APIs. [Docs](https://supabase.com/docs/guides/database/api#restful-api). -### GitHub - -Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-ts-user-management). + + If you get stuck while working through this guide, refer to the [full example on + GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-ts-user-management). + @@ -718,17 +717,15 @@ return ( ) ``` -## Next steps - At this stage you have a fully functional application! -- See the complete [example on GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-ts-user-management) and deploy it to Vercel. -- Explore the [pre-built Auth UI for React](/docs/guides/auth/auth-helpers/auth-ui). -- Explore the [Auth Helpers for Next.js](/docs/guides/auth/auth-helpers/nextjs). -- Explore the [Supabase Cache Helpers](https://github.com/psteinroe/supabase-cache-helpers). -- See the [Next.js Subscription Payments Starter](https://github.com/vercel/nextjs-subscription-payments) template on GitHub. -- Got a question? [Ask here](https://github.com/supabase/supabase/discussions). -- Sign in: [app.supabase.com](https://app.supabase.com) +## See also + +- See the complete [example on GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-ts-user-management) and deploy it to Vercel +- Explore the [pre-built Auth UI for React](/docs/guides/auth/auth-helpers/auth-ui) +- Explore the [Auth Helpers for Next.js](/docs/guides/auth/auth-helpers/nextjs) +- Explore the [Supabase Cache Helpers](https://github.com/psteinroe/supabase-cache-helpers) +- See the [Next.js Subscription Payments Starter](https://github.com/vercel/nextjs-subscription-payments) template on GitHub export const Page = ({ children }) => diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx index b4f5af0a1a3..b70aaa4cf41 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx @@ -1,19 +1,18 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { - id: 'with-nuxt-3', - title: 'Quickstart: Nuxt 3', + title: 'Build a User Management App with Nuxt 3', description: 'Learn how to use Supabase in your Nuxt 3 App.', - sidebar_label: 'Nuxt 3', } ![Supabase User Management example](/docs/img/user-management-demo.png) -### Github - -Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/nuxt3-user-management). + + If you get stuck while working through this guide, refer to the [full example on + GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nuxt3-user-management). + @@ -418,14 +417,7 @@ And then we can add the widget to the Account page: ``` -That is it! You should now be able to upload a profile photo to Supabase Storage. - -## Next steps - -At this stage you have a fully functional application! - -- Got a question? [Ask here](https://github.com/supabase/supabase/discussions). -- Sign in: [app.supabase.com](https://app.supabase.com) +That is it! You should now be able to upload a profile photo to Supabase Storage and you have a fully functional application. export const Page = ({ children }) => diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx index 7d1418b7146..57fc2def7bf 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx @@ -1,19 +1,18 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { - id: 'with-react', - title: 'Quickstart: React', + title: 'Build a User Management App with React', description: 'Learn how to use Supabase in your React App.', - sidebar_label: 'React', } ![Supabase User Management example](/docs/img/user-management-demo.png) -### GitHub - -Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/react-user-management). + + If you get stuck while working through this guide, refer to the [full example on + GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/react-user-management). + @@ -397,13 +396,8 @@ return ( ) ``` -## Next steps - At this stage you have a fully functional application! -- Got a question? [Ask here](https://github.com/supabase/supabase/discussions). -- Sign in: [app.supabase.com](https://app.supabase.com) - export const Page = ({ children }) => export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx index cae8504a010..de65c198f93 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx @@ -1,49 +1,19 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { - id: 'with-redwoodjs', - title: 'Quickstart: RedwoodJS', + title: 'Build a User Management App with RedwoodJS', description: 'Learn how to use Supabase in your RedwoodJS App.', - sidebar_label: 'RedwoodJS', } -## Intro - -For the sake of consistency with the other framework Quickstart examples, we'll build a RedwoodJS a little differently than normal. - -We **_won't use_** Prisma to connect to the Supabase Postgres database or [Prisma migrations](https://redwoodjs.com/docs/cli-commands#prisma-migrate) as one typically might in a Redwood app. -Instead, we'll rely on the Supabase client to do some of the work on the **web** side and use the client again on the **API** side to do data fetching as well. - -That means you will want to refrain from running any `yarn rw prisma migrate` commands and also double check your build commands on deployment to ensure Prisma won't reset your database. - - - -TLDR; Prisma currently doesn't support cross-schema foreign keys, so introspecting the schema fails due to how your Supabase `public` schema references the `auth.users`. - - - -This example provides the steps to build a simple user management app (from scratch!) using Supabase and [RedwoodJS](https://redwoodjs.com/docs/introduction). It includes: - -- Supabase [Database](/docs/guides/database): a Postgres database for storing your user data. -- Supabase [Auth](/docs/guides/auth): users can sign in with magic links (no passwords, only email). -- Supabase [Storage](/docs/guides/storage): users can upload a photo. -- Instant [APIs](/docs/guides/api): APIs will be automatically generated when you create your database tables. -- [Row Level Security](/docs/guides/auth#row-level-security): data is protected so that individuals can only access their own data. - -By the end of this guide you'll have an app which allows users to login and update some basic profile details: + ![Supabase User Management example](/docs/img/user-management-demo.png) - -Note: For RedwoodJS apps, port will be 8910 - + If you get stuck while working through this guide, refer to the [full example on + GitHub](https://github.com/redwoodjs/redwoodjs-supabase-quickstart). -### GitHub - -If you get stuck at any point, take a look at [this repo](https://github.com/redwoodjs/redwoodjs-supabase-quickstart). - {/* ## Video demo */} {/* Coming soon. */} @@ -84,128 +54,14 @@ The **`web side`** is built with React. Redwood's router makes it simple to map Pages may contain a "Layout" component to wrap content. They also contain "Cells" and regular React components. Cells allow you to declaratively manage the lifecycle of a component that fetches and displays data. - - -For the sake of consistency with the other framework Quickstart examples, we'll build a RedwoodJS a little differently than normal. +For the sake of consistency with the other framework tutorials, we'll build this app a little differently than normal. We **_won't use_** Prisma to connect to the Supabase Postgres database or [Prisma migrations](https://redwoodjs.com/docs/cli-commands#prisma-migrate) as one typically might in a Redwood app. Instead, we'll rely on the Supabase client to do some of the work on the **`web`** side and use the client again on the **`api`** side to do data fetching as well. - +That means you will want to refrain from running any `yarn rw prisma migrate` commands and also double check your build commands on deployment to ensure Prisma won't reset your database. Prisma currently doesn't support cross-schema foreign keys, so introspecting the schema fails due +to how your Supabase `public` schema references the `auth.users`. -## Project set up - -Before we start building we're going to set up our Database and API. This is as simple as starting a new Project in Supabase -and then creating a "schema" inside the database. - - - -When setting up Supabase, you'll interact with your project dashboard. However, most of the RedwoodJS setup steps will interact with the [Redwood CLI](https://redwoodjs.com/docs/cli-commands) to generate routes, pages, components, and more. -So be sure to have a terminal at the ready and in your project directory. - - - -### Create a project - -1. Go to [app.supabase.com](https://app.supabase.com). -1. Click on "New Project". -1. Enter your project details. -1. Wait for the new database to launch. - -### Set up the database schema - -Now we are going to set up the database schema. We can use the "User Management Starter" quickstart in the SQL Editor, -or you can just copy/paste the SQL from below and run it yourself. - - - - -1. Go to the [SQL Editor](https://app.supabase.com/project/_/sql) page in the Dashboard. -2. Click **User Management Starter**. -3. Click **Run**. - - - - - - -```sql --- Create a table for public "profiles" -create table profiles ( - id uuid references auth.users not null, - updated_at timestamp with time zone, - username text unique, - avatar_url text, - website text, - - primary key (id), - unique(username), - constraint username_length check (char_length(username) >= 3) -); - -alter table profiles enable row level security; - -create policy "Public profiles are viewable by everyone." - on profiles for select - using ( true ); - -create policy "Users can insert their own profile." - on profiles for insert - with check ( auth.uid() = id ); - -create policy "Users can update own profile." - on profiles for update - using ( auth.uid() = id ); - --- Set up Realtime! -begin; - drop publication if exists supabase_realtime; - create publication supabase_realtime; -commit; -alter publication supabase_realtime add table profiles; - --- Set up Storage! -insert into storage.buckets (id, name) -values ('avatars', 'avatars'); - -create policy "Avatar images are publicly accessible." - on storage.objects for select - using ( bucket_id = 'avatars' ); - -create policy "Anyone can upload an avatar." - on storage.objects for insert - with check ( bucket_id = 'avatars' ); - -``` - - - - -#### Important Note about Prisma and Migrations - - - -Because this Quick Start does not use Prisma to manage the database schema, seed it, or run migrations, you **need** to take extra care when running some of the typical Redwood CLI commands. - - - -### Get the API Keys - -Now that you've created some database tables, you are ready to insert data using the auto-generated API. -We just need to get the URL as well as the `anon`, `service_role` and `JWT_SECRET` keys from the API settings. - -1. Go to the [API Settings](https://app.supabase.com/project/_/settings/api) page in the Dashboard. -2. Find your API `URL`, `anon`, and `service_role` keys on this page. - - + ## Building the App @@ -281,7 +137,7 @@ And finally, you will also need to save **just** the `web side` environment vari ```bash title=redwood.toml [web] - title = "Supabase Redwood Quickstart" + title = "Supabase Redwood Tutorial" port = 8910 apiProxyPath = "/.redwood/functions" includeEnvironmentVariables = ["SUPABASE_URL", "SUPABASE_KEY"] @@ -333,9 +189,7 @@ yarn rw dev ``` - -Note: You can also use the alias `rw` for `redwood`, as in `yarn rw` to run Redwood CLI commands - + `rw` is an alias for `redwood`, as in `yarn rw` to run Redwood CLI commands. You should see a "Welcome to RedwoodJS" page and a message about not having any pages yet. @@ -355,7 +209,7 @@ yarn rw generate page home / -Note: the slash `/` is important here as it creates a root level route. +The `/` is important here as it creates a root level route. @@ -591,14 +445,10 @@ const Account = () => { export default Account ``` - - -Note: You'll see the use of `useAuth()` several times in the quickstart. Redwood's `useAuth` hook provides convenient ways to access +You'll see the use of `useAuth()` several times. Redwood's `useAuth` hook provides convenient ways to access logIn, logOut, currentUser, and access the `supabase` authenticate client. We'll use it to get an instance of the supabase client to interact with your API. - - ### Update Home Page Now that we have all the components in place, let's update your `HomePage` page to use them: @@ -771,12 +621,10 @@ return ( ) ``` -## Next steps - At this stage you have a fully functional application! -- Got a question? [Ask here](https://github.com/supabase/supabase/discussions). -- Sign in: [app.supabase.com](https://app.supabase.com) +## See also + - Learn more about [RedwoodJS](https://redwoodjs.com) - Visit the [RedwoodJS Discourse Community](https://community.redwoodjs.com) diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-solidjs.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-solidjs.mdx index 7de71d63910..614d72826b5 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-solidjs.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-solidjs.mdx @@ -1,19 +1,18 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { - id: 'with-solidjs', - title: 'Quickstart: SolidJS', + title: 'Build a User Management App with SolidJS', description: 'Learn how to use Supabase in your SolidJS App.', - sidebar_label: 'SolidJS', } ![Supabase User Management example](/docs/img/user-management-demo.png) -### GitHub - -Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/solid-user-management). + + If you get stuck while working through this guide, refer to the [full example on + GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/solid-user-management). + @@ -415,13 +414,8 @@ return ( ) ``` -## Next steps - At this stage you have a fully functional application! -- Got a question? [Ask here](https://github.com/supabase/supabase/discussions). -- Sign in: [app.supabase.com](https://app.supabase.com) - export const Page = ({ children }) => export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-svelte.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-svelte.mdx index 69cdea17b87..69fcb78928c 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-svelte.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-svelte.mdx @@ -1,19 +1,18 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { - id: 'with-svelte', - title: 'Quickstart: Svelte', + title: 'Build a User Management App with Svelte', description: 'Learn how to use Supabase in your Svelte App.', - sidebar_label: 'Svelte', } ![Supabase User Management example](/docs/img/user-management-demo.png) -### GitHub - -Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/svelte-user-management). + + If you get stuck while working through this guide, refer to the [full example on + GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/svelte-user-management). + @@ -368,13 +367,8 @@ And then we can add the widget to the Account page: ``` -## Next steps - At this stage you have a fully functional application! -- Got a question? [Ask here](https://github.com/supabase/supabase/discussions). -- Sign in: [app.supabase.com](https://app.supabase.com) - export const Page = ({ children }) => export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx index bbac06e6019..fdad12022bb 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx @@ -1,19 +1,18 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { - id: 'with-sveltekit', - title: 'Quickstart: SvelteKit', + title: 'Build a User Management App wtih SvelteKit', description: 'Learn how to use Supabase in your SvelteKit App.', - sidebar_label: 'SvelteKit', } ![Supabase User Management example](/docs/img/user-management-demo.png) -### GitHub - -Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/sveltekit-user-management). + + If you get stuck while working through this guide, refer to the [full example on + GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/sveltekit-user-management). + @@ -434,13 +433,8 @@ And then we can add the widget to the Account page: ``` -## Next steps - At this stage you have a fully functional application! -- Got a question? [Ask here](https://github.com/supabase/supabase/discussions). -- Sign in: [app.supabase.com](https://app.supabase.com) - export const Page = ({ children }) => export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx index a1ec84a8c92..48923b48f81 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx @@ -1,19 +1,18 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { - id: 'with-vue-3', - title: 'Quickstart: Vue 3', + title: 'Build a User Management App with Vue 3', description: 'Learn how to use Supabase in your Vue 3 App.', - sidebar_label: 'Vue 3', } ![Supabase User Management example](/docs/img/user-management-demo.png) -### GitHub - -Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/vue3-user-management). + + If you get stuck while working through this guide, refer to the [full example on + GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/vue3-user-management). + @@ -379,13 +378,8 @@ And then we can add the widget to the Account page: ``` -## Next steps - At this stage you have a fully functional application! -- Got a question? [Ask here](https://github.com/supabase/supabase/discussions). -- Sign in: [app.supabase.com](https://app.supabase.com) - export const Page = ({ children }) => export default Page From 44afd20619e91b48c92b06ed51853d5a6a7ec4e2 Mon Sep 17 00:00:00 2001 From: dannykng Date: Fri, 20 Jan 2023 16:19:17 -0800 Subject: [PATCH 009/109] Update intro and project setup --- apps/docs/components/MDX/project_setup.mdx | 32 ++++++------------- apps/docs/components/MDX/quickstart_intro.mdx | 12 +++---- 2 files changed, 14 insertions(+), 30 deletions(-) diff --git a/apps/docs/components/MDX/project_setup.mdx b/apps/docs/components/MDX/project_setup.mdx index 9efe03df58e..2003a3a2220 100644 --- a/apps/docs/components/MDX/project_setup.mdx +++ b/apps/docs/components/MDX/project_setup.mdx @@ -2,22 +2,19 @@ import UserManagementSQLTemplate from './user_management_quickstart_sql_template import { Tabs } from 'ui' export const TabPanel = Tabs.Panel -# Project set up +## Project setup -Before we start building we're going to set up our Database and API. This is as simple as starting a new Project in Supabase -and then creating a "schema" inside the database. +Before we start building we're going to set up our Database and API. This is as simple as starting a new Project in Supabase and then creating a "schema" inside the database. -## Create a project +### Create a project -1. Go to [app.supabase.com](https://app.supabase.com). -1. Click on "New Project". +1. [Create a new project](https://app.supabase.com) in the Supabase Dashboard. 1. Enter your project details. 1. Wait for the new database to launch. -## Set up the database schema +### Set up the database schema -Now we are going to set up the database schema. We can use the "User Management Starter" quickstart in the SQL Editor, -or you can just copy/paste the SQL from below and run it yourself. +Now we are going to set up the database schema. We can use the "User Management Starter" quickstart in the SQL Editor, or you can just copy/paste the SQL from below and run it yourself. - - - @@ -43,15 +36,10 @@ or you can just copy/paste the SQL from below and run it yourself. -## Get the API Keys +### Get the API Keys Now that you've created some database tables, you are ready to insert data using the auto-generated API. -We just need to get the URL and `anon` key from the API settings. +We just need to get the Project URL and `anon` key from the API settings. -1. Go to the [Settings](https://app.supabase.com/project/_/settings) page in the Dashboard. -2. Click **API** in the sidebar. -3. Find your API `URL`, `anon`, and `service_role` keys on this page. - - +1. Go to the [API Settings](https://app.supabase.com/project/_/settings/api) page in the Dashboard. +1. Find your Project `URL`, `anon`, and `service_role` keys on this page. diff --git a/apps/docs/components/MDX/quickstart_intro.mdx b/apps/docs/components/MDX/quickstart_intro.mdx index 59e0e01da5c..d20d9f32ece 100644 --- a/apps/docs/components/MDX/quickstart_intro.mdx +++ b/apps/docs/components/MDX/quickstart_intro.mdx @@ -1,9 +1,5 @@ -This example provides the steps to build a basic user management app. It includes: +This tutorial demonstrates how to build a basic user management app. The app authenticates and identifies the user, stores their profile information in the database, and allows the user to log in, update their profile details, and upload a profile photo. The app uses: -- Supabase [Database](/docs/guides/database): a Postgres database for storing your user data. -- Supabase [Auth](/docs/guides/auth): users can sign in with magic links (no passwords, only email). -- Supabase [Storage](/docs/guides/storage): users can upload a photo. -- [Row Level Security](/docs/guides/auth#row-level-security): data is protected so that individuals can only access their own data. -- Instant [APIs](/docs/guides/api): APIs will be automatically generated when you create your database tables. - -By the end of this guide you'll have an app which allows users to login and update some basic profile details: +- [Supabase Database](/docs/guides/database) - a Postgres database for storing your user data and [Row Level Security](/docs/guides/auth#row-level-security) so data is protected and users can only access their own information. +- [Supabase Auth](/docs/guides/auth) - users log in through magic links sent to their email (without having to set up passwords). +- [Supabase Storage](/docs/guides/storage) - users can upload a profile photo. From b82b0186b96debd708d199f005fdc311d3d65526 Mon Sep 17 00:00:00 2001 From: dannykng Date: Fri, 20 Jan 2023 16:19:34 -0800 Subject: [PATCH 010/109] Update nav menu titles --- .../Navigation/NavigationMenu/NavigationMenu.constants.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 40ceb4f47e2..165ae49064e 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -45,7 +45,7 @@ export const gettingstarted = { { name: 'Framework Quickstarts', items: [ - { name: 'ReactJS', url: '/guides/getting-started/quickstarts/reactjs', items: [] }, + { name: 'React', url: '/guides/getting-started/quickstarts/reactjs', items: [] }, { name: 'NextJS', url: '/guides/getting-started/quickstarts/nextjs', items: [] }, { name: 'Flutter', url: '/guides/getting-started/quickstarts/flutter', items: [] }, ], @@ -54,7 +54,7 @@ export const gettingstarted = { name: 'Web app tutorials', items: [ { - name: 'Next.js', + name: 'NextJS', url: '/guides/getting-started/tutorials/with-nextjs', items: [], }, From 1fcc1e2ad2c8c17681ed841b6acc0465cb647878 Mon Sep 17 00:00:00 2001 From: dannykng Date: Fri, 20 Jan 2023 17:12:53 -0800 Subject: [PATCH 011/109] Update Getting Started landing page --- apps/docs/pages/guides/getting-started.mdx | 61 +++++++++++++++++++++- apps/docs/pages/index.mdx | 2 +- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/apps/docs/pages/guides/getting-started.mdx b/apps/docs/pages/guides/getting-started.mdx index 535ee897ec6..820eae29e0c 100644 --- a/apps/docs/pages/guides/getting-started.mdx +++ b/apps/docs/pages/guides/getting-started.mdx @@ -36,7 +36,23 @@ export const meta = { -### Tutorials +### Framework Quickstarts + +

+ {quickstarts.map((item) => { + return ( + + + + {item.description} + + + + ) + })} +
+ +### Web App Tutorials
{webapps.map((item) => { @@ -52,6 +68,46 @@ export const meta = { })}
+### Mobile Tutorials + +
+ {mobile.map((item) => { + return ( + + + + {item.description} + + + + ) + })} +
+ +export const quickstarts = [ + { + title: 'React', + href: '/guides/getting-started/quickstarts/reactjs', + description: + 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a React app.', + icon: '/docs/img/icons/react-icon', + }, + { + title: 'NextJS', + href: '/guides/getting-started/quickstarts/nextjs', + description: + 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a NextJS app.', + icon: '/docs/img/icons/nextjs-icon', + }, + { + title: 'Flutter', + href: '/guides/getting-started/quickstarts/flutter', + description: + 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a Flutter app.', + icon: '/docs/img/icons/flutter-icon', + }, +] + export const webapps = [ { title: 'NextJS', @@ -109,6 +165,9 @@ export const webapps = [ 'Learn how to build a user management app with SvelteKit and Supabase Database, Auth, and Storage functionality.', icon: '/docs/img/icons/svelte-icon', }, +] + +export const mobile = [ { title: 'Flutter', href: '/guides/getting-started/tutorials/with-flutter', diff --git a/apps/docs/pages/index.mdx b/apps/docs/pages/index.mdx index 5de1c11462e..96a24c7f756 100644 --- a/apps/docs/pages/index.mdx +++ b/apps/docs/pages/index.mdx @@ -110,7 +110,7 @@ export const meta = { md:items-center md:gap-3 ">

Ready to make a fully working app?

-

Follow the step-by-step tutorials.

+

Follow the step-by-step tutorials.

From e620c6efb0dae4c36aef822e30d4e885006c952a Mon Sep 17 00:00:00 2001 From: Roger! <38413630+icarusgk@users.noreply.github.com> Date: Wed, 25 Jan 2023 15:43:01 -0600 Subject: [PATCH 012/109] replace: 'html' with 'vue' on code snippet blocks --- .../guides/getting-started/tutorials/with-nuxt-3.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx index b4f5af0a1a3..74e65e21252 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx @@ -66,7 +66,7 @@ export default defineNuxtConfig({ Let's set up a Vue component to manage logins and sign ups. We'll use Magic Links, so users can sign in with their email without using passwords. -```html title=/components/Auth.vue +```vue title=/components/Auth.vue