diff --git a/apps/custom-pages-example/.env b/apps/custom-pages-example/.env new file mode 100644 index 0000000000..76923dccb5 --- /dev/null +++ b/apps/custom-pages-example/.env @@ -0,0 +1,4 @@ +NEXT_PUBLIC_STACK_URL=# enter your stack endpoint here, e.g. http://localhost:8101 +NEXT_PUBLIC_STACK_PROJECT_ID=# enter your stack project id here +NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=# enter your stack publishable client key here +STACK_SECRET_SERVER_KEY=# enter your stack secret server key here diff --git a/apps/custom-pages-example/.eslintrc.js b/apps/custom-pages-example/.eslintrc.js new file mode 100644 index 0000000000..7f1dac1969 --- /dev/null +++ b/apps/custom-pages-example/.eslintrc.js @@ -0,0 +1,21 @@ +module.exports = { + extends: ["../../eslint-configs/defaults.js", "../../eslint-configs/next.js"], + ignorePatterns: ["/*", "!/src"], + rules: { + "@typescript-eslint/no-misused-promises": [0], + "@typescript-eslint/no-floating-promises": [0], + "import/order": [ + 1, + { + groups: [ + "external", + "builtin", + "internal", + "sibling", + "parent", + "index", + ], + }, + ], + }, +}; diff --git a/apps/custom-pages-example/.gitignore b/apps/custom-pages-example/.gitignore new file mode 100644 index 0000000000..547b2773ee --- /dev/null +++ b/apps/custom-pages-example/.gitignore @@ -0,0 +1,7 @@ +node_modules/ +/test-results/ +/playwright-report/ +/playwright/.cache/ +dbschema/edgeql-js + +*.tsbuildinfo diff --git a/apps/custom-pages-example/CHANGELOG.md b/apps/custom-pages-example/CHANGELOG.md new file mode 100644 index 0000000000..ea21193ad3 --- /dev/null +++ b/apps/custom-pages-example/CHANGELOG.md @@ -0,0 +1,250 @@ +# demo-app + +## 1.1.6 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack-shared@2.4.4 + - @stackframe/stack@2.4.6 + +## 1.1.5 + +### Patch Changes + +- CRUD schemas +- Updated dependencies + - @stackframe/stack-shared@2.4.3 + - @stackframe/stack@2.4.5 + +## 1.1.4 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack@2.4.4 + +## 1.1.3 + +### Patch Changes + +- New projects page +- Updated dependencies + - @stackframe/stack-shared@2.4.2 + - @stackframe/stack@2.4.3 + +## 1.1.2 + +### Patch Changes + +- @stackframe package namespace +- Updated dependencies + - @stackframe/stack@2.4.2 + +## 1.1.1 + +### Patch Changes + +- Teams, permissions and RBAC +- Updated dependencies + - @stackframe/stack-shared@2.4.1 + - @stackframe/stack@2.4.1 + +## 1.1.0 + +### Minor Changes + +- Middleware support + +### Patch Changes + +- Updated dependencies + - @stackframe/stack-shared@2.4.0 + - @stackframe/stack@2.4.0 + +## 1.0.24 + +### Patch Changes + +- Bugfixes +- Updated dependencies + - @stackframe/stack-shared@2.3.6 + - @stackframe/stack@2.3.8 + +## 1.0.23 + +### Patch Changes + +- CommonJS support +- Updated dependencies + - @stackframe/stack-shared@2.3.5 + - @stackframe/stack@2.3.7 + +## 1.0.22 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack-shared@2.3.4 + - @stackframe/stack@2.3.6 + +## 1.0.21 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack-shared@2.3.3 + - @stackframe/stack@2.3.5 + +## 1.0.20 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack@2.3.4 + +## 1.0.19 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack-shared@2.3.2 + - @stackframe/stack@2.3.3 + +## 1.0.18 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack-shared@2.3.1 + - @stackframe/stack@2.3.2 + +## 1.0.17 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack@2.3.1 + +## 1.0.16 + +### Patch Changes + +- Various small improvements +- Updated dependencies +- Updated dependencies [96c26a7] + - @stackframe/stack-shared@2.3.0 + - @stackframe/stack@2.3.0 + +## 1.0.15 + +### Patch Changes + +- Updated dependencies [5909ecd] + - @stackframe/stack@2.2.5 + - @stackframe/stack-shared@2.2.2 + +## 1.0.14 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack@2.2.4 + - @stackframe/stack-shared@2.2.1 + +## 1.0.13 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack@2.2.3 + +## 1.0.12 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack@2.2.2 + +## 1.0.11 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack@2.2.1 + +## 1.0.10 + +### Patch Changes + +- Updated dependencies [2995d96] +- Updated dependencies [2995d96] + - @stackframe/stack@2.2.0 + - @stackframe/stack-shared@2.2.0 + +## 1.0.9 + +### Patch Changes + +- Updated dependencies [4f985be] + - @stackframe/stack@2.1.3 + +## 1.0.8 + +### Patch Changes + +- Updated dependencies [2eda71b] + - @stackframe/stack@2.1.2 + +## 1.0.7 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack@2.1.1 + +## 1.0.6 + +### Patch Changes + +- Updated dependencies [9e9907f] + - @stackframe/stack-shared@2.1.0 + - @stackframe/stack@2.1.0 + +## 1.0.5 + +### Patch Changes + +- Updated dependencies [948252f] + - @stackframe/stack-shared@2.0.0 + - @stackframe/stack@2.0.0 + +## 1.0.4 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack@1.2.1 + - @stackframe/stack-shared@1.2.1 + +## 1.0.3 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack@1.2.0 + - @stackframe/stack-shared@1.2.0 + +## 1.0.2 + +### Patch Changes + +- @stackframe/stack@1.1.1 + +## 1.0.1 + +### Patch Changes + +- Updated dependencies + - @stackframe/stack@1.1.0 + - @stackframe/stack-shared@1.1.0 diff --git a/apps/custom-pages-example/LICENSE b/apps/custom-pages-example/LICENSE new file mode 100644 index 0000000000..0ec883d12e --- /dev/null +++ b/apps/custom-pages-example/LICENSE @@ -0,0 +1,7 @@ +Copyright 2024 Stackframe + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/apps/custom-pages-example/next-env.d.ts b/apps/custom-pages-example/next-env.d.ts new file mode 100644 index 0000000000..4f11a03dc6 --- /dev/null +++ b/apps/custom-pages-example/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/apps/custom-pages-example/next.config.js b/apps/custom-pages-example/next.config.js new file mode 100644 index 0000000000..03c0138071 --- /dev/null +++ b/apps/custom-pages-example/next.config.js @@ -0,0 +1,10 @@ +/** @type {import("next").NextConfig} */ +module.exports = { + webpack(config) { + config.experiments = { ...config.experiments, topLevelAwait: true }; + return config; + }, + compiler: { + styledComponents: true, + }, +}; diff --git a/apps/custom-pages-example/package.json b/apps/custom-pages-example/package.json new file mode 100644 index 0000000000..7ea8fcf176 --- /dev/null +++ b/apps/custom-pages-example/package.json @@ -0,0 +1,34 @@ +{ + "name": "@stackframe/custom-pages-example", + "version": "1.1.6", + "description": "", + "private": true, + "scripts": { + "typecheck": "tsc --noEmit", + "clean": "rimraf .next && rimraf node_modules", + "dev": "next dev --port 8107", + "build": "next build", + "start": "next start --port 8107", + "lint": "next lint" + }, + "dependencies": { + "@emotion/react": "^11.11.3", + "@emotion/styled": "^11.11.0", + "@mui/joy": "^5.0.0-beta.30", + "@stackframe/stack": "workspace:*", + "@stackframe/stack-shared": "workspace:*", + "next": "^14.1", + "next-themes": "^0.2.1", + "react": "^18.2", + "react-dom": "^18", + "react-icons": "^5.0.1", + "styled-components": "^6.1.8" + }, + "devDependencies": { + "@types/react": "^18.2.66", + "@types/react-dom": "^18", + "autoprefixer": "^10.4.17", + "postcss": "^8.4.35", + "tailwindcss": "^3.4.1" + } +} diff --git a/apps/custom-pages-example/postcss.config.js b/apps/custom-pages-example/postcss.config.js new file mode 100644 index 0000000000..12a703d900 --- /dev/null +++ b/apps/custom-pages-example/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/apps/custom-pages-example/src/app/favicon.ico b/apps/custom-pages-example/src/app/favicon.ico new file mode 100644 index 0000000000..b2197e1446 Binary files /dev/null and b/apps/custom-pages-example/src/app/favicon.ico differ diff --git a/apps/custom-pages-example/src/app/global.css b/apps/custom-pages-example/src/app/global.css new file mode 100644 index 0000000000..ffa3696972 --- /dev/null +++ b/apps/custom-pages-example/src/app/global.css @@ -0,0 +1,19 @@ +/* @tailwind base; +@tailwind components; +@tailwind utilities; + + +:root { + --background: white; + --foreground: black; +} + +[data-stack-theme='dark'] { + --background: black; + --foreground: white; +} + +body { + background-color: var(--background); + color: var(--foreground); +} */ \ No newline at end of file diff --git a/apps/custom-pages-example/src/app/handler/[...stack]/page.tsx b/apps/custom-pages-example/src/app/handler/[...stack]/page.tsx new file mode 100644 index 0000000000..c64c9efe93 --- /dev/null +++ b/apps/custom-pages-example/src/app/handler/[...stack]/page.tsx @@ -0,0 +1,6 @@ +import { StackHandler } from "@stackframe/stack"; +import { stackServerApp } from "src/stack"; + +export default function Handler(props) { + return ; +} diff --git a/apps/custom-pages-example/src/app/layout.tsx b/apps/custom-pages-example/src/app/layout.tsx new file mode 100644 index 0000000000..859aed4b6a --- /dev/null +++ b/apps/custom-pages-example/src/app/layout.tsx @@ -0,0 +1,31 @@ +import { Metadata } from "next"; +import { StackProvider } from "@stackframe/stack"; +import { stackServerApp } from "src/stack"; +import Provider from "src/components/provider"; +import './global.css'; + +export const metadata: Metadata = { + title: 'Stack Demo', + description: 'Example of using Stack as your authentication system.', +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode, +}) { + return ( + + + + + + {children} + + + + + ); +} diff --git a/apps/custom-pages-example/src/app/loading.tsx b/apps/custom-pages-example/src/app/loading.tsx new file mode 100644 index 0000000000..4349ac3a61 --- /dev/null +++ b/apps/custom-pages-example/src/app/loading.tsx @@ -0,0 +1,3 @@ +export default function Loading() { + return null; +} diff --git a/apps/custom-pages-example/src/app/page-client.tsx b/apps/custom-pages-example/src/app/page-client.tsx new file mode 100644 index 0000000000..fe8b49b21d --- /dev/null +++ b/apps/custom-pages-example/src/app/page-client.tsx @@ -0,0 +1,31 @@ +'use client'; + +import { useRouter } from 'next/navigation'; +import { useStackApp, useUser, Button, Link, Text } from '@stackframe/stack'; + +export default function PageClient() { + const user = useUser(); + const router = useRouter(); + const app = useStackApp(); + + const authButtons = ( +
+
+ + +
+
+ ); + + return ( +
+ {user ? ( +
+ + Sign Out + +
+ ) : authButtons} +
+ ); +} diff --git a/apps/custom-pages-example/src/app/page.tsx b/apps/custom-pages-example/src/app/page.tsx new file mode 100644 index 0000000000..ab06996df0 --- /dev/null +++ b/apps/custom-pages-example/src/app/page.tsx @@ -0,0 +1,5 @@ +import PageClient from './page-client'; + +export default function Page() { + return ; +} diff --git a/apps/custom-pages-example/src/app/signin/page.tsx b/apps/custom-pages-example/src/app/signin/page.tsx new file mode 100644 index 0000000000..eb3d061991 --- /dev/null +++ b/apps/custom-pages-example/src/app/signin/page.tsx @@ -0,0 +1,97 @@ +'use client'; + + +// import { SignIn } from "@stackframe/stack"; + +// export default function DefaultSignIn() { +// return ; +// } + +// -------------------------------------------- + + +// import { useStackApp } from "@stackframe/stack"; + +// export default function CustomOAuthSignIn() { +// const app = useStackApp(); + +// return
+//

My Custom Sign In page

+// +//
; +// } + +// -------------------------------------------- + +// import { useStackApp } from "@stackframe/stack"; +// import { useState } from "react"; + +// export default function CustomCredentialSignIn() { +// const [email, setEmail] = useState(''); +// const [password, setPassword] = useState(''); +// const [error, setError] = useState(''); +// const app = useStackApp(); + +// const onSubmit = async () => { +// if (!password) { +// setError('Please enter your password'); +// return; +// } +// // this will redirect to app.urls.afterSignIn if successful, you can customize it in the StackServerApp constructor +// const errorCode = await app.signInWithCredential({ email, password }); +// // It is better to handle each error code separately, but we will just show the error code directly for simplicity here +// if (errorCode) { +// setError(errorCode.message); +// } +// }; + +// return ( +//
{ e.preventDefault(); onSubmit(); } }> +// {error} +// setEmail(e.target.value)} /> +// setPassword(e.target.value)} /> +// +//
+// ); +// } + +// -------------------------------------------- + + +import { useStackApp } from "@stackframe/stack"; +import { useState } from "react"; + +export default function CustomCredentialSignIn() { + const [email, setEmail] = useState(''); + const [error, setError] = useState(''); + const [message, setMessage] = useState(''); + const app = useStackApp(); + + const onSubmit = async () => { + // this will redirect to app.urls.afterSignIn if successful, you can customize it in the StackServerApp constructor + const errorCode = await app.sendMagicLinkEmail(email); + // It is better to handle each error code separately, but we will just show the error code directly for simplicity here + if (errorCode) { + setError(errorCode.message); + } else { + setMessage('Magic link sent! Please check your email.'); + } + }; + + return ( +
{ e.preventDefault(); onSubmit(); } }> + {error} + {message ? +
{message}
: + <> + setEmail(e.target.value)} /> + + } +
+ ); +} \ No newline at end of file diff --git a/apps/custom-pages-example/src/app/signup/page.tsx b/apps/custom-pages-example/src/app/signup/page.tsx new file mode 100644 index 0000000000..d519d495ea --- /dev/null +++ b/apps/custom-pages-example/src/app/signup/page.tsx @@ -0,0 +1,43 @@ +'use client'; + + +// import { SignUp } from "@stackframe/stack"; + +// export default function DefaultSignUp() { +// return ; +// } + +// -------------------------------------------- + + +import { useStackApp } from "@stackframe/stack"; +import { useState } from "react"; + +export default function CustomCredentialSignUp() { + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [error, setError] = useState(''); + const app = useStackApp(); + + const onSubmit = async () => { + if (!password) { + setError('Please enter your password'); + return; + } + // this will redirect to app.urls.afterSignUp if successful, you can customize it in the StackServerApp constructor + const errorCode = await app.signUpWithCredential({ email, password }); + // It is better to handle each error code separately, but we will just show the error code directly for simplicity here + if (errorCode) { + setError(errorCode.message); + } + }; + + return ( +
{ e.preventDefault(); onSubmit(); } }> + {error} + setEmail(e.target.value)} /> + setPassword(e.target.value)} /> + +
+ ); +} \ No newline at end of file diff --git a/apps/custom-pages-example/src/components/provider.tsx b/apps/custom-pages-example/src/components/provider.tsx new file mode 100644 index 0000000000..21d5444a2d --- /dev/null +++ b/apps/custom-pages-example/src/components/provider.tsx @@ -0,0 +1,10 @@ +'use client';; +import { StackTheme } from "@stackframe/stack"; + +export default function Provider({ children }) { + return ( + + {children} + + ); +} \ No newline at end of file diff --git a/apps/custom-pages-example/src/stack.tsx b/apps/custom-pages-example/src/stack.tsx new file mode 100644 index 0000000000..e5279bcd4a --- /dev/null +++ b/apps/custom-pages-example/src/stack.tsx @@ -0,0 +1,11 @@ +import "server-only"; + +import { StackServerApp } from "@stackframe/stack"; + +export const stackServerApp = new StackServerApp({ + tokenStore: "nextjs-cookie", + urls: { + signIn: "/signin", + signUp: "/signup", + } +}); diff --git a/apps/custom-pages-example/tailwind.config.js b/apps/custom-pages-example/tailwind.config.js new file mode 100644 index 0000000000..902463811b --- /dev/null +++ b/apps/custom-pages-example/tailwind.config.js @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./src/**/*.{js,ts,jsx,tsx,mdx}"], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/custom-pages-example/tsconfig.json b/apps/custom-pages-example/tsconfig.json new file mode 100644 index 0000000000..71d2573b5a --- /dev/null +++ b/apps/custom-pages-example/tsconfig.json @@ -0,0 +1,42 @@ +{ + "compiler": { + "styledComponents": true, + }, + "compilerOptions": { + "target": "esnext", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "noErrorTruncation": true, + "module": "esnext", + "moduleResolution": "Bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "incremental": true, + "jsx": "preserve", + "baseUrl": ".", + "plugins": [ + { + "name": "next" + } + ], + "strictNullChecks": true, + "skipLibCheck": true + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/docs/docs/01-getting-started/01-why-stack.md b/docs/docs/01-getting-started/01-why-stack.md new file mode 100644 index 0000000000..c995c5f91d --- /dev/null +++ b/docs/docs/01-getting-started/01-why-stack.md @@ -0,0 +1,59 @@ +--- +--- + +# Why Stack? + +You might wonder: "With so many authentication libraries available, why create Stack?" + +The answer is straightforward: **They all suck at developer experience**. + +As developers, we don't want to be bothered by decisions about using JWT or session tokens, handling token refreshes, or managing user data synchronization with frontend states. **Auth should be a 5 minutes job**, not 5 days. Our focus should be on building the core product. + +Stack abstract all these complexities away by deeply integrate into the frontend and backend framework. It offers a simple and intuitive interface, while remains highly flexible, customizable, and powerful. + +Here is an example. To use the current user, simply call: + +```tsx +export function MyComponent() { + const user = useUser(); + return
{user ? `Hi, ${user.displayName}` : 'You are not logged in'}
; +} +``` + +That's it! You don't need to worry about fetching the user, storing the user data, handling loading states, or refreshing user data. Stack manages all of that for you. + +You can also add a button to change the user's name: + +```tsx + +``` +The user data will be updated in both the frontend and backend automatically. The updated user data will also reflect in `MyComponent` as well. + +You also get pages and components for authentication flow out-of-the-box. This for example the sign-in page is what you get without writing a single line of code: + +![Stack sign up page](../imgs/signup-page.png) + +If you prefer a fully customized UI, you can use our low-level functions like `signInWithOAuth` or `signInWithCredential` to build your own sign-in page: + +```tsx +export default function CustomOAuthSignIn() { + const app = useStackApp(); + return
+ +
; +} +``` + +To manage everything efficiently, there is a powerful admin dashboard: + +![Stack dashboard](../imgs/dashboard.png) + +Best of all, Stack is **100% open-source**. + +This is just a glimpse of what Stack can do. Stack also handles many other tasks like backend integration, data storage, emails, teams, permissions, and more, which you will learn later in the documentation. + +If this sounds interesting, let's get started with setting up Stack in your project! \ No newline at end of file diff --git a/docs/docs/01-getting-started/01-setup.md b/docs/docs/01-getting-started/02-setup.md similarity index 79% rename from docs/docs/01-getting-started/01-setup.md rename to docs/docs/01-getting-started/02-setup.md index c3226adec2..fdd74df264 100644 --- a/docs/docs/01-getting-started/01-setup.md +++ b/docs/docs/01-getting-started/02-setup.md @@ -1,9 +1,12 @@ --- --- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + # Installation & Setup -## Setup wizard (recommended) +## Setup To get started with Stack, you need to create a [Next.js](https://nextjs.org/docs) project with the App router. If you are starting from scratch, run the following: @@ -12,7 +15,13 @@ npx create-next-app@latest --app stack-example cd stack-example ``` -To add Stack to a newly created or an existing project, you can run Stack's installation wizard with the following command: +You can choose between two ways to install Stack: the setup wizard or manual installation. We recommend using the setup wizard first as it is very easy. However, if you have a non-standard project structure or the setup wizard doesn't work for you, you can follow the manual installation guide. + + + + + +To setup stack, you can run Stack's installation wizard with the following command: ```sh npx @stackframe/init-stack@latest @@ -26,11 +35,9 @@ NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY= STACK_SECRET_SERVER_KEY= ``` -After that, you'll be able to see the Stack sign-up page at [https://your-website.example.com/handler/signup](http://localhost:3000/handler/signup). - -## Manual installation + -If the setup wizard doesn't work due to an unsupported project structure, you can also install Stack manually. + First, install Stack with npm, yarn, or pnpm: @@ -59,7 +66,7 @@ npm install @stackframe/stack This will read the environment variables automatically and create a server app that you can later use to access Stack from your Next.js server. - Check out the [`StackServerApp` documentation](/docs/api-documentation/app) to learn more about its other options. + Check out the [`StackServerApp` documentation](../03-api-documentation/03-app.md) to learn more about its other options. 3. Create a new file in `app/handler/[...stack]/page.tsx` and paste the following code: @@ -107,8 +114,10 @@ npm install @stackframe/stack ; } ``` + + -6. That's it! Stack is now configured in your Next.js project. If you start your Next.js app with `npm run dev` and navigate to [http://localhost:3000/handler/signup](http://localhost:3000/handler/signup), you will see the Stack sign-up page! +That's it! Stack is now configured in your Next.js project. If you start your Next.js app with `npm run dev` and navigate to [http://localhost:3000/handler/signup](http://localhost:3000/handler/signup), you will see the Stack sign-up page! ![Stack sign up page](../imgs/signup-page.png) @@ -117,6 +126,7 @@ npm install @stackframe/stack ![Stack account settings page](../imgs/account-settings-page.png) + ## Next steps -Next, we will show you how to get user information, protect a page, and modify the user profile. +Next, we will show you how to get user information, protect a page, and store/retrieve user information in code. diff --git a/docs/docs/01-getting-started/02-users.md b/docs/docs/01-getting-started/03-users.md similarity index 73% rename from docs/docs/01-getting-started/02-users.md rename to docs/docs/01-getting-started/03-users.md index 007e5c70fd..58bcdc51e9 100644 --- a/docs/docs/01-getting-started/02-users.md +++ b/docs/docs/01-getting-started/03-users.md @@ -7,7 +7,7 @@ import TabItem from '@theme/TabItem'; # Users & Protected Pages -In [the last guide](/docs/getting-started/setup), we created `StackServerApp` and `StackProvider`. In this section, we will show you how to utilize them for accessing and modifying the current user information on Server Components and Client Components, respectively. +In [the last guide](./02-setup.md), we created `StackServerApp` and `StackProvider`. In this section, we will show you how to utilize them for accessing and modifying the current user information on Server Components and Client Components, respectively. ## Client Components @@ -19,7 +19,7 @@ import { useStackApp } from "@stackframe/stack"; export function MyComponent() { const app = useStackApp(); - const user = app.useUser(); + const user = app.useUser(); // or just import useUser and use it directly return
{user ? `Hello, ${user.displayName ?? "anon"}` : 'You are not logged in'}
; } @@ -128,13 +128,11 @@ Stack automatically creates a user profile on sign-up. Let's create a page that const app = useStackApp(); return (
-

Home

{user ? (

Welcome, {user.displayName}

Your e-mail: {user.primaryEmail}

-

Your e-mail verification status: {user.primaryEmailVerified.toString()}

) : ( @@ -159,13 +157,11 @@ Stack automatically creates a user profile on sign-up. Let's create a page that const user = await stackApp.getUser(); return (
-

Home

{user ? (

Welcome, {user.displayName}

Your e-mail: {user.primaryEmail}

-

Your e-mail verification status: {user.primaryEmailVerified.toString()}

Sign Out

) : ( @@ -187,3 +183,61 @@ Note the `UserButton` is a component that you normally put in the top right corn ![UserButton](../imgs/user-button.png) You will now be able to see the new profile page on [http://localhost:3000/profile](http://localhost:3000/profile). + +To see more examples of how to use the `User` object, check out the [User API documentation](../03-api-documentation/01-user.md). + +## Custom User Information + +You can update the user's information by calling `user.update()` with the new data. The user data from the `userUser()` hook is automatically will also be updated automatically. Here is an example: + +```tsx +'user client'; +import { useUser } from "@stackframe/stack"; + +export default function UpdateUser() { + const user = useUser(); + return ; +} +``` + +You can store custom data in the `clientMetadata` field. Note that this data is visible on the client side and should not contain any sensitive information. + +```tsx +await user.update({ + clientMetadata: { + mailingAddress: "123 Main St", + }, +}); +``` + +You can then get the `clientMetadata` field from the `User` object: + +```tsx +const user = useUser(); +console.log(user.clientMetadata); +``` + +If you want to store sensitive information that is only visible on the server side, you can use the `serverMetadata` field. This data will not be sent accessible on the client side. So you also have to use the `getUser()` on the `StackServerApp` to access this data. + +```tsx +// server side only +import { stackApp } from "@/lib/stack"; +const user = await stackApp.getUser(); +await user.update({ + serverMetadata: { + secretInfo: "This is a secret", + }, +}); +``` + +You can also access them from the `User` object: + +```tsx +// server side only +import { stackApp } from "@/lib/stack"; +const user = await stackApp.getUser(); +console.log(user.serverMetadata); +``` + diff --git a/docs/docs/01-getting-started/03-teams.md b/docs/docs/01-getting-started/04-teams.md similarity index 100% rename from docs/docs/01-getting-started/03-teams.md rename to docs/docs/01-getting-started/04-teams.md diff --git a/docs/docs/02-customization/01-overview.md b/docs/docs/02-customization/01-overview.md index d6f56d8983..d981baf96f 100644 --- a/docs/docs/02-customization/01-overview.md +++ b/docs/docs/02-customization/01-overview.md @@ -9,11 +9,11 @@ title: Overview Stack offers comprehensive customization options for its user interface, available across three levels: -- [**Custom Color Scheme**](/docs/customization/custom-colors): For those looking to quickly align the interface with their brand while minimizing customization efforts, changing the color scheme is an efficient option. +- [**Custom Color Scheme**](./02-custom-colors.md): For those looking to quickly align the interface with their brand while minimizing customization efforts, changing the color scheme is an efficient option. -- [**Custom Component**](/docs/customization/custom-components): Stack features a uniquely designed UI system that enables the replacement of any low-level components with alternatives of your choosing. This includes integration with various UI libraries such as MUI, Chakra, or any custom stayled components. You can opt for quick modifications by replacing prominent components like buttons and input fields, or undertake comprehensive UI customization by replacing all components. +- [**Custom Component**](./03-custom-components.md): Stack features a uniquely designed UI system that enables the replacement of any low-level components with alternatives of your choosing. This includes integration with various UI libraries such as MUI, Chakra, or any custom stayled components. You can opt for quick modifications by replacing prominent components like buttons and input fields, or undertake comprehensive UI customization by replacing all components. -- [**Custom Pages**](/docs/customization/custom-pages): For complete control over the UI, including alterations to the overall layout or the logic flow of pages, you can design your own pages. This can be done using Stack components or those from your preferred library, supported by our low-level functions to facilitate logic operations and server communication. +- [**Custom Pages**](./04-custom-pages.md): For complete control over the UI, including alterations to the overall layout or the logic flow of pages, you can design your own pages. This can be done using Stack components or those from your preferred library, supported by our low-level functions to facilitate logic operations and server communication. These customization levels operate independently, allowing any combination of adjustments. For instance, you might customize the buttons and input fields while retaining the default design for other components, and adapt a custom color scheme as a fallback for the look of the other components. diff --git a/docs/docs/02-customization/03-custom-components.md b/docs/docs/02-customization/03-custom-components.md index 91be8f044c..02f2f8eb02 100644 --- a/docs/docs/02-customization/03-custom-components.md +++ b/docs/docs/02-customization/03-custom-components.md @@ -12,7 +12,7 @@ We currently already implemented support for MUI Joy, so you can use it directly ## Customizing Components -Here is an example of how you can customize the button component. For demonstration purposes, we will keep the styling minimal. We will create a new button component. You can use the `useDesign` hook to get the color scheme (see more in [Custom Colors](/docs/customization/custom-colors)). You can also ignore the color scheme if you have a different way to handle colors. +Here is an example of how you can customize the button component. For demonstration purposes, we will keep the styling minimal. We will create a new button component. You can use the `useDesign` hook to get the color scheme (see more in [Custom Colors](./02-custom-colors.md)). You can also ignore the color scheme if you have a different way to handle colors. ```jsx 'use client'; diff --git a/docs/docs/02-customization/04-custom-pages.md b/docs/docs/02-customization/04-custom-pages.md index a8445870c2..1ef447ad57 100644 --- a/docs/docs/02-customization/04-custom-pages.md +++ b/docs/docs/02-customization/04-custom-pages.md @@ -4,7 +4,7 @@ sidebar_position: 1 # Custom Pages -By default, `StackHandler` creates all pages you need. You can customize the [colors](/docs/customization/custom-colors) and [components](/docs/customization/custom-components) here. However, if you'd like full control of the layout and logic flow, you can always use our built-in components to build your own pages or use even star from strach using low-level functions. +By default, `StackHandler` creates all pages you need. You can customize the [colors](./02-custom-colors.md) and [components](./03-custom-components.md) here. However, if you'd like full control of the layout and logic flow, you can always use our built-in components to build your own pages or use even star from strach using low-level functions. ## Simple Example @@ -78,4 +78,4 @@ As above, visit the `/signin` page to see your newly created custom OAuth page. ## Next steps -Take a look at the [customization examples](/docs/category/page-examples) to see how to build custom pages for sign in, sign up, reset password, and more. +Take a look at the [customization examples](./05-page-examples/_category_.json) to see how to build custom pages for sign in, sign up, reset password, and more. diff --git a/docs/docs/02-customization/05-page-examples/01-signin.md b/docs/docs/02-customization/05-page-examples/01-signin.md index bf33a248c4..85f6d0beb3 100644 --- a/docs/docs/02-customization/05-page-examples/01-signin.md +++ b/docs/docs/02-customization/05-page-examples/01-signin.md @@ -8,11 +8,12 @@ sidebar_position: 1 ```tsx 'use client'; -import { useStackApp, SignIn } from "@stackframe/stack"; +import { SignIn } from "@stackframe/stack"; export default function DefaultSignIn() { - const app = useStackApp(); - + // optionally redirect to some other page if the user is already signed in + // const user = useUser(); + // if (user) { redirect to some other page } return ; } ``` @@ -24,8 +25,6 @@ You can also use `useUser` at the beginning of the sign in page to check if weth `CredentialSignIn`: A component that contains a form for signing in with email and password. -`PasswordField`: password input field with show/hide password button. - `OAuthGroup`: A list of available OAuth provider signin buttons components. The available provider list is fetched from the server. `OAuthButton`: A single OAuth sign in button. @@ -70,21 +69,60 @@ export default function CustomCredentialSignIn() { setError('Please enter your password'); return; } - // this will rediret to app.urls.afterSignIn if successful, you can customize it in the StackServerApp constructor + // this will redirect to app.urls.afterSignIn if successful, you can customize it in the StackServerApp constructor const errorCode = await app.signInWithCredential({ email, password }); // It is better to handle each error code separately, but we will just show the error code directly for simplicity here if (errorCode) { - setError(errorCode); + setError(errorCode.message); } }; return ( -
+
{ e.preventDefault(); onSubmit(); } }> {error} setEmail(e.target.value)} /> setPassword(e.target.value)} /> - -
+ + ); } ``` + +## Custom Magic Link Sign In + +```tsx +'use client'; + +import { useStackApp } from "@stackframe/stack"; +import { useState } from "react"; + +export default function CustomCredentialSignIn() { + const [email, setEmail] = useState(''); + const [error, setError] = useState(''); + const [message, setMessage] = useState(''); + const app = useStackApp(); + + const onSubmit = async () => { + // this will redirect to app.urls.afterSignIn if successful, you can customize it in the StackServerApp constructor + const errorCode = await app.sendMagicLinkEmail(email); + // It is better to handle each error code separately, but we will just show the error code directly for simplicity here + if (errorCode) { + setError(errorCode.message); + } else { + setMessage('Magic link sent! Please check your email.'); + } + }; + + return ( +
{ e.preventDefault(); onSubmit(); } }> + {error} + {message ? +
{message}
: + <> + setEmail(e.target.value)} /> + + } +
+ ); +} +``` \ No newline at end of file diff --git a/docs/docs/02-customization/05-page-examples/02-signup.md b/docs/docs/02-customization/05-page-examples/02-signup.md index 450faac42f..8bda43f12e 100644 --- a/docs/docs/02-customization/05-page-examples/02-signup.md +++ b/docs/docs/02-customization/05-page-examples/02-signup.md @@ -8,12 +8,13 @@ sidebar_position: 1 ```tsx 'use client'; -import { useStackApp, SignUp } from "@stackframe/stack"; +import { SignUp } from "@stackframe/stack"; export default function DefaultSignUp() { - const app = useStackApp(); - - return ; + // optionally redirect to some other page if the user is already signed in + // const user = useUser(); + // if (user) { redirect to some other page } + return ; } ``` @@ -23,29 +24,52 @@ You can also use `useUser` at the beginning of the sign in page to check if weth `CredentialSignUp`: A component that contains a form for signing in with email and password. -`PasswordField`: password input field with show/hide password button. - `OAuthGroup`: A list of available OAuth provider sign-up buttons components. The available provider list is fetched from the server. `OAuthButton`: A single OAuth sign-up button. ## Custom OAuth Sign Up +OAuth sign-in and sign-up shares the same function. Check out the [Sign In example](/docs/customization/page-examples/signin#custom-oauth-sign-in) for more information. + +## Custom Credential Sign Up + ```tsx 'use client'; + import { useStackApp } from "@stackframe/stack"; +import { useState } from "react"; -export default function CustomOAuthSignUp() { +export default function CustomCredentialSignUp() { + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [error, setError] = useState(''); const app = useStackApp(); - return
-

My Custom Sign Up page

- -
; + const onSubmit = async () => { + if (!password) { + setError('Please enter your password'); + return; + } + // this will redirect to app.urls.afterSignUp if successful, you can customize it in the StackServerApp constructor + const errorCode = await app.signUpWithCredential({ email, password }); + // It is better to handle each error code separately, but we will just show the error code directly for simplicity here + if (errorCode) { + setError(errorCode.message); + } + }; + + return ( +
{ e.preventDefault(); onSubmit(); } }> + {error} + setEmail(e.target.value)} /> + setPassword(e.target.value)} /> + +
+ ); } -``` \ No newline at end of file +``` + +## Custom Magic Link Sign Up + +Magic link sign-in and sign-up shares the same function. Check out the [Sign In example](/docs/customization/page-examples/signin#custom-magic-link-sign-in) for more information. \ No newline at end of file diff --git a/docs/docs/03-api-documentation/02-user.md b/docs/docs/03-api-documentation/01-user.md similarity index 100% rename from docs/docs/03-api-documentation/02-user.md rename to docs/docs/03-api-documentation/01-user.md diff --git a/docs/docs/03-api-documentation/04-use-user.md b/docs/docs/03-api-documentation/02-use-user.md similarity index 93% rename from docs/docs/03-api-documentation/04-use-user.md rename to docs/docs/03-api-documentation/02-use-user.md index 2cb0d930a9..27464b4865 100644 --- a/docs/docs/03-api-documentation/04-use-user.md +++ b/docs/docs/03-api-documentation/02-use-user.md @@ -7,7 +7,7 @@ sidebar_position: 1 `useUser` is a hook that returns the user object if the user is authenticated; otherwise, it returns `null` by default. However, if you pass in `{ or: "redirect" }` or `{ or: "throw" }` as an option, it will redirect to the login page or throw an error respectively when the user is not authenticated. -If you want to learn more about the `User` object, check out the [User](./02-user.md) documentation. +If you want to learn more about the `User` object, check out the [User](./01-user.md) documentation. ## Default Usage @@ -35,7 +35,7 @@ function MyComponent() { } ``` -The same hook can also be used to protect a page. (You might also want to check out the server-side version [here](/docs/getting-started/users)) +The same hook can also be used to protect a page. (You might also want to check out the server-side version [here](../01-getting-started/03-users.md)) ```jsx import { useUser } from "@stackframe/stack"; diff --git a/docs/docs/03-api-documentation/01-app.md b/docs/docs/03-api-documentation/03-app.md similarity index 95% rename from docs/docs/03-api-documentation/01-app.md rename to docs/docs/03-api-documentation/03-app.md index d7e9057c30..ce08cc2578 100644 --- a/docs/docs/03-api-documentation/01-app.md +++ b/docs/docs/03-api-documentation/03-app.md @@ -12,7 +12,7 @@ sidebar_position: 1 ## Initialization -We showed in the [setup guide](/docs/getting-started/setup) that you can create a `StackServerApp` in a file like `lib/stack.ts` like this: +We showed in the [setup guide](../01-getting-started/02-setup.md) that you can create a `StackServerApp` in a file like `lib/stack.ts` like this: ```tsx import "server-only"; diff --git a/docs/docs/03-api-documentation/03-use-stack-app.md b/docs/docs/03-api-documentation/04-use-stack-app.md similarity index 94% rename from docs/docs/03-api-documentation/03-use-stack-app.md rename to docs/docs/03-api-documentation/04-use-stack-app.md index ddfa5f4262..802c71e735 100644 --- a/docs/docs/03-api-documentation/03-use-stack-app.md +++ b/docs/docs/03-api-documentation/04-use-stack-app.md @@ -5,7 +5,7 @@ sidebar_position: 1 # useStackApp -The `useStackApp` hook returns the `StackClientApp` object that you can use to interact with the Stack API. If you want to learn more about the `StackClientApp` object, check out the [App](./01-app.md) documentation. +The `useStackApp` hook returns the `StackClientApp` object that you can use to interact with the Stack API. If you want to learn more about the `StackClientApp` object, check out the [App](./03-app.md) documentation. Example: diff --git a/docs/docs/imgs/dashboard.png b/docs/docs/imgs/dashboard.png new file mode 100644 index 0000000000..ed19e1e073 Binary files /dev/null and b/docs/docs/imgs/dashboard.png differ diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index a78d644873..9b0a2528a6 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -1,18 +1,18 @@ -html[data-stack-theme='dark'] { +html[data-theme='dark'] { --ifm-background-color: #030712; --ifm-background-surface-color: #030712; } .navbar { - border-bottom: 1px solid #151515; + border-bottom: 1px solid rgb(26, 26, 26); } .menu { - border-right: 1px solid #151515; + border-right: 1px solid rgb(26, 26, 26); } .table-of-contents { - border-left: 1px solid #151515; + border-left: 1px solid rgb(26, 26, 26); } .navbar__logo img { diff --git a/packages/stack-shared/src/interface/clientInterface.ts b/packages/stack-shared/src/interface/clientInterface.ts index df6f4ab76a..3936577e58 100644 --- a/packages/stack-shared/src/interface/clientInterface.ts +++ b/packages/stack-shared/src/interface/clientInterface.ts @@ -598,7 +598,7 @@ export class StackClientInterface { password: string, emailVerificationRedirectUrl: string, tokenStore: TokenStore, - ): Promise { + ): Promise { const res = await this.sendClientRequestAndCatchKnownError( "/auth/signup", { @@ -613,7 +613,7 @@ export class StackClientInterface { }), }, tokenStore, - [KnownErrors.UserEmailAlreadyExists] + [KnownErrors.UserEmailAlreadyExists, KnownErrors.PasswordRequirementsNotMet] ); if (res.status === "error") { diff --git a/packages/stack/src/components-core/loading-indicator.tsx b/packages/stack/src/components-core/loading-indicator.tsx index 6423aef9f8..cf8d2b2179 100644 --- a/packages/stack/src/components-core/loading-indicator.tsx +++ b/packages/stack/src/components-core/loading-indicator.tsx @@ -6,8 +6,8 @@ const l7 = keyframes` 66% { background-size: calc(100%/3) 100%, calc(100%/3) 100%, calc(100%/3) 0%; } `; -const LoadingIndicator = styled.div<{ color: { light: string, dark: string }, size?: number }>` - width: ${props => props.size || 36}px; +const StyledLoadingIndicator = styled.div<{ $color: { light: string, dark: string }, $size?: number }>` + width: ${props => props.$size || 36}px; aspect-ratio: 4; background: var(--_g) 0% 50%, @@ -16,10 +16,13 @@ const LoadingIndicator = styled.div<{ color: { light: string, dark: string }, si background-size: calc(100%/3) 100%; animation: ${l7} 1s infinite linear; - --_g: no-repeat radial-gradient(circle closest-side, ${props => props.color.light} 90%, #0000); + --_g: no-repeat radial-gradient(circle closest-side, ${props => props.$color.light} 90%, #0000); html[data-stack-theme='dark'] & { - --_g: no-repeat radial-gradient(circle closest-side, ${props => props.color.dark} 90%, #0000); + --_g: no-repeat radial-gradient(circle closest-side, ${props => props.$color.dark} 90%, #0000); } `; -export default LoadingIndicator; \ No newline at end of file + +export default function LoadingIndicator(props: { size?: number, color: { light: string, dark: string } }) { + return ; +} \ No newline at end of file diff --git a/packages/stack/src/lib/stack-app.ts b/packages/stack/src/lib/stack-app.ts index 441924c012..f29eaaefe9 100644 --- a/packages/stack/src/lib/stack-app.ts +++ b/packages/stack/src/lib/stack-app.ts @@ -693,7 +693,7 @@ class _StackClientAppImpl{ + }): Promise { this._ensurePersistentTokenStore(); const tokenStore = getTokenStore(this._tokenStoreOptions); const emailVerificationRedirectUrl = constructRedirectUrl(this.urls.emailVerification); @@ -1632,7 +1632,7 @@ export type StackClientApp, signInWithCredential(options: { email: string, password: string }): Promise, - signUpWithCredential(options: { email: string, password: string }): Promise, + signUpWithCredential(options: { email: string, password: string }): Promise, callOAuthCallback(): Promise, sendForgotPasswordEmail(email: string): Promise, sendMagicLinkEmail(email: string): Promise, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d1ea317440..94a282ff05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -116,6 +116,58 @@ importers: specifier: ^5 version: 5.3.3 + apps/custom-pages-example: + dependencies: + '@emotion/react': + specifier: ^11.11.3 + version: 11.11.3(@types/react@18.3.2)(react@18.3.1) + '@emotion/styled': + specifier: ^11.11.0 + version: 11.11.0(@emotion/react@11.11.3)(@types/react@18.3.2)(react@18.3.1) + '@mui/joy': + specifier: ^5.0.0-beta.30 + version: 5.0.0-beta.30(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@stackframe/stack': + specifier: workspace:* + version: link:../../packages/stack + '@stackframe/stack-shared': + specifier: workspace:* + version: link:../../packages/stack-shared + next: + specifier: ^14.1 + version: 14.2.3(@babel/core@7.24.0)(react-dom@18.3.1)(react@18.3.1) + next-themes: + specifier: ^0.2.1 + version: 0.2.1(next@14.2.3)(react-dom@18.3.1)(react@18.3.1) + react: + specifier: ^18.2 + version: 18.3.1 + react-dom: + specifier: ^18 + version: 18.3.1(react@18.3.1) + react-icons: + specifier: ^5.0.1 + version: 5.0.1(react@18.3.1) + styled-components: + specifier: ^6.1.8 + version: 6.1.8(react-dom@18.3.1)(react@18.3.1) + devDependencies: + '@types/react': + specifier: ^18.2.66 + version: 18.3.2 + '@types/react-dom': + specifier: ^18 + version: 18.2.18 + autoprefixer: + specifier: ^10.4.17 + version: 10.4.17(postcss@8.4.38) + postcss: + specifier: ^8.4.35 + version: 8.4.38 + tailwindcss: + specifier: ^3.4.1 + version: 3.4.1 + apps/demo: dependencies: '@emotion/react': @@ -2602,7 +2654,7 @@ packages: '@docusaurus/react-loadable': 5.5.2(react@18.2.0) '@docusaurus/types': 3.1.1(esbuild@0.19.11)(react-dom@18.2.0)(react@18.2.0) '@types/history': 4.7.11 - '@types/react': 18.2.66 + '@types/react': 18.3.2 '@types/react-router-config': 5.0.11 '@types/react-router-dom': 5.3.3 react: 18.2.0 @@ -3030,7 +3082,7 @@ packages: '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1)(esbuild@0.19.11) '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1) '@types/history': 4.7.11 - '@types/react': 18.2.66 + '@types/react': 18.3.2 '@types/react-router-config': 5.0.11 clsx: 2.1.0 parse-numeric-range: 1.3.0 @@ -3123,7 +3175,7 @@ packages: dependencies: '@mdx-js/mdx': 3.0.0 '@types/history': 4.7.11 - '@types/react': 18.2.66 + '@types/react': 18.3.2 commander: 5.1.0 joi: 17.12.2 react: 18.2.0 @@ -3217,7 +3269,7 @@ packages: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: '@babel/helper-module-imports': 7.22.15 - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.5 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/serialize': 1.1.3 @@ -3288,6 +3340,27 @@ packages: react: 18.2.0 dev: false + /@emotion/react@11.11.3(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + '@types/react': 18.3.2 + hoist-non-react-statics: 3.3.2 + react: 18.3.1 + dev: false + /@emotion/serialize@1.1.3: resolution: {integrity: sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==} dependencies: @@ -3323,6 +3396,27 @@ packages: react: 18.2.0 dev: false + /@emotion/styled@11.11.0(@emotion/react@11.11.3)(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@emotion/babel-plugin': 11.11.0 + '@emotion/is-prop-valid': 1.2.1 + '@emotion/react': 11.11.3(@types/react@18.3.2)(react@18.3.1) + '@emotion/serialize': 1.1.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) + '@emotion/utils': 1.2.1 + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + /@emotion/unitless@0.8.0: resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} dev: false @@ -3339,6 +3433,14 @@ packages: react: 18.2.0 dev: false + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.3.1): + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.3.1 + dev: false + /@emotion/utils@1.2.1: resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} dev: false @@ -3804,6 +3906,17 @@ packages: react-dom: 18.3.1(react@18.2.0) dev: false + /@floating-ui/react-dom@2.0.8(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 1.6.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@floating-ui/utils@0.2.1: resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} dev: false @@ -4240,18 +4353,41 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.5 '@floating-ui/react-dom': 2.0.8(react-dom@18.3.1)(react@18.2.0) - '@mui/types': 7.2.13(@types/react@18.2.66) + '@mui/types': 7.2.14(@types/react@18.2.66) '@mui/utils': 5.15.13(@types/react@18.2.66)(react@18.2.0) '@popperjs/core': 2.11.8 '@types/react': 18.2.66 - clsx: 2.1.0 + clsx: 2.1.1 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.3.1(react@18.2.0) dev: false + /@mui/base@5.0.0-beta.38(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-AsjD6Y1X5A1qndxz8xCcR8LDqv31aiwlgWMPxFAX/kCKiIGKlK65yMeVZ62iQr/6LBz+9hSKLiD1i4TZdAHKcQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@floating-ui/react-dom': 2.0.8(react-dom@18.3.1)(react@18.3.1) + '@mui/types': 7.2.14(@types/react@18.3.2) + '@mui/utils': 5.15.13(@types/react@18.3.2)(react@18.3.1) + '@popperjs/core': 2.11.8 + '@types/react': 18.3.2 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@mui/core-downloads-tracker@5.15.12: resolution: {integrity: sha512-brRO+tMFLpGyjEYHrX97bzqeF6jZmKpqqe1rY0LyIHAwP6xRVzh++zSecOQorDOCaZJg4XkGT9xfD+RWOWxZBA==} dev: false @@ -4288,6 +4424,38 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@mui/joy@5.0.0-beta.30(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-m8f/sYarTohCqZOy3i1q/MYNmAshoccoRbOrWQ7+At1ReaJPz2D2LUYzYjJxxaK7sOjhDtY9etK7WfsrJhqGLA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@emotion/react': 11.11.3(@types/react@18.3.2)(react@18.3.1) + '@emotion/styled': 11.11.0(@emotion/react@11.11.3)(@types/react@18.3.2)(react@18.3.1) + '@mui/base': 5.0.0-beta.38(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@mui/core-downloads-tracker': 5.15.12 + '@mui/system': 5.15.13(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.3.2)(react@18.3.1) + '@mui/types': 7.2.14(@types/react@18.3.2) + '@mui/utils': 5.15.13(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@mui/joy@5.0.0-beta.30(@types/react@18.2.66)(react-dom@18.3.1)(react@18.2.0): resolution: {integrity: sha512-m8f/sYarTohCqZOy3i1q/MYNmAshoccoRbOrWQ7+At1ReaJPz2D2LUYzYjJxxaK7sOjhDtY9etK7WfsrJhqGLA==} engines: {node: '>=12.0.0'} @@ -4305,14 +4473,14 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.5 '@mui/base': 5.0.0-beta.38(@types/react@18.2.66)(react-dom@18.3.1)(react@18.2.0) '@mui/core-downloads-tracker': 5.15.12 - '@mui/system': 5.15.13(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.66)(react@18.2.0) - '@mui/types': 7.2.13(@types/react@18.2.66) + '@mui/system': 5.15.13(@types/react@18.2.66)(react@18.2.0) + '@mui/types': 7.2.14(@types/react@18.2.66) '@mui/utils': 5.15.13(@types/react@18.2.66)(react@18.2.0) '@types/react': 18.2.66 - clsx: 2.1.0 + clsx: 2.1.1 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.3.1(react@18.2.0) @@ -4335,6 +4503,23 @@ packages: react: 18.2.0 dev: false + /@mui/private-theming@5.15.13(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-j5Z2pRi6talCunIRIzpQERSaHwLd5EPdHMwIKDVCszro1RAzRZl7WmH68IMCgQmJMeglr+FalqNuq048qptGAg==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@mui/utils': 5.15.13(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + prop-types: 15.8.1 + react: 18.3.1 + dev: false + /@mui/styled-engine@5.15.11(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0): resolution: {integrity: sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w==} engines: {node: '>=12.0.0'} @@ -4357,6 +4542,28 @@ packages: react: 18.2.0 dev: false + /@mui/styled-engine@5.15.11(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.3.1): + resolution: {integrity: sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@emotion/cache': 11.11.0 + '@emotion/react': 11.11.3(@types/react@18.3.2)(react@18.3.1) + '@emotion/styled': 11.11.0(@emotion/react@11.11.3)(@types/react@18.3.2)(react@18.3.1) + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.3.1 + dev: false + /@mui/system@5.15.13(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.66)(react@18.2.0): resolution: {integrity: sha512-eHaX3sniZXNWkxX0lmcLxROhQ5La0HkOuF7zxbSdAoHUOk07gboQYmF6hSJ/VBFx/GLanIw67FMTn88vc8niLg==} engines: {node: '>=12.0.0'} @@ -4387,6 +4594,64 @@ packages: react: 18.2.0 dev: false + /@mui/system@5.15.13(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-eHaX3sniZXNWkxX0lmcLxROhQ5La0HkOuF7zxbSdAoHUOk07gboQYmF6hSJ/VBFx/GLanIw67FMTn88vc8niLg==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@emotion/react': 11.11.3(@types/react@18.3.2)(react@18.3.1) + '@emotion/styled': 11.11.0(@emotion/react@11.11.3)(@types/react@18.3.2)(react@18.3.1) + '@mui/private-theming': 5.15.13(@types/react@18.3.2)(react@18.3.1) + '@mui/styled-engine': 5.15.11(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.3.1) + '@mui/types': 7.2.14(@types/react@18.3.2) + '@mui/utils': 5.15.13(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.3.1 + dev: false + + /@mui/system@5.15.13(@types/react@18.2.66)(react@18.2.0): + resolution: {integrity: sha512-eHaX3sniZXNWkxX0lmcLxROhQ5La0HkOuF7zxbSdAoHUOk07gboQYmF6hSJ/VBFx/GLanIw67FMTn88vc8niLg==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@mui/private-theming': 5.15.13(@types/react@18.2.66)(react@18.2.0) + '@mui/styled-engine': 5.15.11(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@mui/types': 7.2.14(@types/react@18.2.66) + '@mui/utils': 5.15.13(@types/react@18.2.66)(react@18.2.0) + '@types/react': 18.2.66 + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + /@mui/types@7.2.13(@types/react@18.2.66): resolution: {integrity: sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==} peerDependencies: @@ -4409,6 +4674,17 @@ packages: '@types/react': 18.2.66 dev: false + /@mui/types@7.2.14(@types/react@18.3.2): + resolution: {integrity: sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.2 + dev: false + /@mui/utils@5.15.13(@types/react@18.2.66)(react@18.2.0): resolution: {integrity: sha512-qNlR9FLEhORC4zVZ3fzF48213EhP/92N71AcFbhHN73lPJjAbq9lUv+71P7uEdRHdrrOlm8+1zE8/OBy6MUqdg==} engines: {node: '>=12.0.0'} @@ -4427,8 +4703,26 @@ packages: react-is: 18.2.0 dev: false - /@next/bundle-analyzer@14.1.0: - resolution: {integrity: sha512-RJWjnlMp/1WSW0ahAdawV22WgJiC6BVaFS5Xfhw6gP7NJEX3cAJjh4JqSHKGr8GnLNRaFCVTQdDPoX84E421BA==} + /@mui/utils@5.15.13(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-qNlR9FLEhORC4zVZ3fzF48213EhP/92N71AcFbhHN73lPJjAbq9lUv+71P7uEdRHdrrOlm8+1zE8/OBy6MUqdg==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@types/prop-types': 15.7.11 + '@types/react': 18.3.2 + prop-types: 15.8.1 + react: 18.3.1 + react-is: 18.2.0 + dev: false + + /@next/bundle-analyzer@14.1.0: + resolution: {integrity: sha512-RJWjnlMp/1WSW0ahAdawV22WgJiC6BVaFS5Xfhw6gP7NJEX3cAJjh4JqSHKGr8GnLNRaFCVTQdDPoX84E421BA==} dependencies: webpack-bundle-analyzer: 4.10.1 transitivePeerDependencies: @@ -4921,6 +5215,27 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.2 + '@types/react-dom': 18.2.18 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@radix-ui/react-arrow@1.0.3(@types/react@18.2.66)(react-dom@18.3.1)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: @@ -5065,6 +5380,34 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + '@types/react-dom': 18.2.18 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@radix-ui/react-collapsible@1.0.3(@types/react@18.2.66)(react-dom@18.3.1)(react@18.2.0): resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} peerDependencies: @@ -5116,6 +5459,30 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + '@types/react-dom': 18.2.18 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@radix-ui/react-collection@1.0.3(@types/react@18.2.66)(react-dom@18.3.1)(react@18.2.0): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: @@ -5153,6 +5520,20 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + /@radix-ui/react-context-menu@2.1.5(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-R5XaDj06Xul1KGb+WP8qiOh7tKJNz2durpLBXAGZjSVtctcRFCuEvy2gtMwRJGePwQQE5nV77gs4FwRi8T+r2g==} peerDependencies: @@ -5193,6 +5574,20 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-context@1.0.1(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} peerDependencies: @@ -5241,7 +5636,21 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-direction@1.0.1(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: '@types/react': '*' @@ -5256,14 +5665,14 @@ packages: dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.66)(react@18.2.0) - '@types/react': 18.2.66 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): @@ -5382,7 +5791,21 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: '@types/react': '*' @@ -5396,13 +5819,13 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@types/react': 18.2.66 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): @@ -5502,6 +5925,21 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-id@1.0.1(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + /@radix-ui/react-label@2.0.2(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} peerDependencies: @@ -5682,7 +6120,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-popover@1.0.6(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popover@1.0.6(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-cZ4defGpkZ0qTRtlIBzJLSzL6ht7ofhhW4i1+pkemjV1IKXm0wgCRnee154qlV6r9Ttunmh2TNZhMfV2bavUyA==} peerDependencies: '@types/react': '*' @@ -5695,26 +6133,26 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@types/react': 18.2.66 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 '@types/react-dom': 18.2.18 aria-hidden: 1.2.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.2.66)(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.2)(react@18.3.1) dev: false /@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): @@ -5786,7 +6224,7 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.66)(react@18.2.0) dev: false - /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: '@types/react': '*' @@ -5800,20 +6238,20 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@floating-ui/react-dom': 2.0.8(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.2)(react@18.3.1) '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.66 + '@types/react': 18.3.2 '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): @@ -5875,7 +6313,7 @@ packages: react-dom: 18.3.1(react@18.2.0) dev: false - /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} peerDependencies: '@types/react': '*' @@ -5889,11 +6327,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.66 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.2 '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): @@ -5959,6 +6397,28 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + '@types/react-dom': 18.2.18 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@radix-ui/react-presence@1.0.1(@types/react@18.2.66)(react-dom@18.3.1)(react@18.2.0): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: @@ -6001,6 +6461,27 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + '@types/react-dom': 18.2.18 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@radix-ui/react-primitive@1.0.3(@types/react@18.2.66)(react-dom@18.3.1)(react@18.2.0): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: @@ -6102,6 +6583,35 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + '@types/react-dom': 18.2.18 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@radix-ui/react-roving-focus@1.0.4(@types/react@18.2.66)(react-dom@18.3.1)(react@18.2.0): resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: @@ -6287,17 +6797,32 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-switch@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} + /@radix-ui/react-slot@1.0.2(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' - '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true - '@types/react-dom': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + + /@radix-ui/react-switch@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': optional: true dependencies: '@babel/runtime': 7.24.5 @@ -6401,7 +6926,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} peerDependencies: '@types/react': '*' @@ -6414,18 +6939,18 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@types/react': 18.2.66 + '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): @@ -6451,7 +6976,30 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-tooltip@1.0.6(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + '@types/react-dom': 18.2.18 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-tooltip@1.0.6(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-DmNFOiwEc2UDigsYj6clJENma58OelxD24O4IODoZ+3sQc3Zb+L8w1EP+y9laTuKCLAysPw4fD6/v0j4KNV8rg==} peerDependencies: '@types/react': '*' @@ -6464,23 +7012,23 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.66 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.2 '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): @@ -6529,6 +7077,20 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.66)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: @@ -6544,6 +7106,21 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.66)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: @@ -6559,6 +7136,21 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.66)(react@18.2.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: @@ -6573,6 +7165,20 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.66)(react@18.2.0): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: @@ -6602,6 +7208,21 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-use-rect@1.0.1(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/rect': 1.0.1 + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + /@radix-ui/react-use-size@1.0.1(@types/react@18.2.66)(react@18.2.0): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: @@ -6617,6 +7238,21 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-use-size@1.0.1(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@types/react': 18.3.2 + react: 18.3.1 + dev: false + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: @@ -6638,6 +7274,27 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.2 + '@types/react-dom': 18.2.18 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: @@ -6652,6 +7309,14 @@ packages: react: 18.2.0 dev: false + /@react-email/body@0.0.7(react@18.3.1): + resolution: {integrity: sha512-vjJ5P1MUNWV0KNivaEWA6MGj/I3c764qQJMsKjCHlW6mkFJ4SXbm2OlQFtKAb++Bj8LDqBlnE6oW77bWcMc0NA==} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@react-email/button@0.0.13(react@18.2.0): resolution: {integrity: sha512-e/y8u2odJ8fF83B+wvL2FXzVcbQSUh2Cn2JH2Ez4L6AuPELsh8s2JYo081IDsXc16IyFiYpObn0blOt7s/qp8g==} engines: {node: '>=18.0.0'} @@ -6661,13 +7326,13 @@ packages: react: 18.2.0 dev: false - /@react-email/button@0.0.14(react@18.2.0): + /@react-email/button@0.0.14(react@18.3.1): resolution: {integrity: sha512-SMk40moGcAvkHIALX4XercQlK0PNeeEIam6OXHw68ea9WtzzqVwiK4pzLY0iiMI9B4xWHcaS2lCPf3cKbQBf1Q==} engines: {node: '>=18.0.0'} peerDependencies: react: 18.2.0 dependencies: - react: 18.2.0 + react: 18.3.1 dev: false /@react-email/code-block@0.0.2(react@18.2.0): @@ -6680,14 +7345,14 @@ packages: react: 18.2.0 dev: false - /@react-email/code-block@0.0.3(react@18.2.0): + /@react-email/code-block@0.0.3(react@18.3.1): resolution: {integrity: sha512-nxhl7WjjM2cOYtl0boBZfSObTrUCz2LbarcMyHkTVAsA9rbjbtWAQF7jmlefXJusk3Uol5l2c8hTh2lHLlHTRQ==} engines: {node: '>=18.0.0'} peerDependencies: react: 18.2.0 dependencies: prismjs: 1.29.0 - react: 18.2.0 + react: 18.3.1 dev: false /@react-email/code-inline@0.0.1(react@18.2.0): @@ -6699,6 +7364,15 @@ packages: react: 18.2.0 dev: false + /@react-email/code-inline@0.0.1(react@18.3.1): + resolution: {integrity: sha512-SeZKTB9Q4+TUafzeUm/8tGK3dFgywUHb1od/BrAiJCo/im65aT+oJfggJLjK2jCdSsus8odcK2kReeM3/FCNTQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@react-email/column@0.0.9(react@18.2.0): resolution: {integrity: sha512-1ekqNBgmbS6m97/sUFOnVvQtLYljUWamw8Y44VId95v6SjiJ4ca+hMcdOteHWBH67xkRofEOWTvqDRea5SBV8w==} engines: {node: '>=18.0.0'} @@ -6708,6 +7382,15 @@ packages: react: 18.2.0 dev: false + /@react-email/column@0.0.9(react@18.3.1): + resolution: {integrity: sha512-1ekqNBgmbS6m97/sUFOnVvQtLYljUWamw8Y44VId95v6SjiJ4ca+hMcdOteHWBH67xkRofEOWTvqDRea5SBV8w==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@react-email/components@0.0.14(@types/react@18.2.66)(react@18.2.0): resolution: {integrity: sha512-t/sNj0R9Mx9Sx5degPQcSBeWotNs7eUwiv72KN8v6fxaf87XlnMo0CPcKI/1by2DHZr5S0258ZQOO7vEFrbcLw==} engines: {node: '>=18.0.0'} @@ -6738,33 +7421,33 @@ packages: - '@types/react' dev: false - /@react-email/components@0.0.15(@types/react@18.2.66)(react-email@2.1.0)(react@18.2.0): + /@react-email/components@0.0.15(@types/react@18.3.2)(react-email@2.1.0)(react@18.3.1): resolution: {integrity: sha512-jXfKiuyi94JBYfPVptEUwF57nRCvhEZIfyl2LqbL53fKsMrGlcjlN921iNnx1z41GAJOqZ8LPogeix3Iid23zw==} engines: {node: '>=18.0.0'} peerDependencies: react: 18.2.0 dependencies: - '@react-email/body': 0.0.7(react@18.2.0) - '@react-email/button': 0.0.14(react@18.2.0) - '@react-email/code-block': 0.0.3(react@18.2.0) - '@react-email/code-inline': 0.0.1(react@18.2.0) - '@react-email/column': 0.0.9(react@18.2.0) - '@react-email/container': 0.0.11(react@18.2.0) - '@react-email/font': 0.0.5(react@18.2.0) - '@react-email/head': 0.0.7(react@18.2.0) - '@react-email/heading': 0.0.11(@types/react@18.2.66)(react@18.2.0) - '@react-email/hr': 0.0.7(react@18.2.0) - '@react-email/html': 0.0.7(react@18.2.0) - '@react-email/img': 0.0.7(react@18.2.0) - '@react-email/link': 0.0.7(react@18.2.0) - '@react-email/markdown': 0.0.8(react-email@2.1.0)(react@18.2.0) - '@react-email/preview': 0.0.8(react@18.2.0) + '@react-email/body': 0.0.7(react@18.3.1) + '@react-email/button': 0.0.14(react@18.3.1) + '@react-email/code-block': 0.0.3(react@18.3.1) + '@react-email/code-inline': 0.0.1(react@18.3.1) + '@react-email/column': 0.0.9(react@18.3.1) + '@react-email/container': 0.0.11(react@18.3.1) + '@react-email/font': 0.0.5(react@18.3.1) + '@react-email/head': 0.0.7(react@18.3.1) + '@react-email/heading': 0.0.11(@types/react@18.3.2)(react@18.3.1) + '@react-email/hr': 0.0.7(react@18.3.1) + '@react-email/html': 0.0.7(react@18.3.1) + '@react-email/img': 0.0.7(react@18.3.1) + '@react-email/link': 0.0.7(react@18.3.1) + '@react-email/markdown': 0.0.8(react-email@2.1.0)(react@18.3.1) + '@react-email/preview': 0.0.8(react@18.3.1) '@react-email/render': 0.0.12 - '@react-email/row': 0.0.7(react@18.2.0) - '@react-email/section': 0.0.11(react@18.2.0) - '@react-email/tailwind': 0.0.14(react@18.2.0) - '@react-email/text': 0.0.7(react@18.2.0) - react: 18.2.0 + '@react-email/row': 0.0.7(react@18.3.1) + '@react-email/section': 0.0.11(react@18.3.1) + '@react-email/tailwind': 0.0.14(react@18.3.1) + '@react-email/text': 0.0.7(react@18.3.1) + react: 18.3.1 transitivePeerDependencies: - '@types/react' - react-email @@ -6779,6 +7462,15 @@ packages: react: 18.2.0 dev: false + /@react-email/container@0.0.11(react@18.3.1): + resolution: {integrity: sha512-jzl/EHs0ClXIRFamfH+NR/cqv4GsJJscqRhdYtnWYuRAsWpKBM1muycrrPqIVhWvWi6sFHInWTt07jX+bDc3SQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@react-email/font@0.0.5(react@18.2.0): resolution: {integrity: sha512-if/qKYmH3rJ2egQJoKbV8SfKCPavu+ikUq/naT/UkCr8Q0lkk309tRA0x7fXG/WeIrmcipjMzFRGTm2TxTecDw==} peerDependencies: @@ -6787,6 +7479,14 @@ packages: react: 18.2.0 dev: false + /@react-email/font@0.0.5(react@18.3.1): + resolution: {integrity: sha512-if/qKYmH3rJ2egQJoKbV8SfKCPavu+ikUq/naT/UkCr8Q0lkk309tRA0x7fXG/WeIrmcipjMzFRGTm2TxTecDw==} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@react-email/head@0.0.7(react@18.2.0): resolution: {integrity: sha512-IcXL4jc0H1qzAXJCD9ajcRFBQdbUHkjKJyiUeogpaYSVZSq6cVDWQuGaI23TA9k+pI2TFeQimogUFb3Kgeeudw==} engines: {node: '>=18.0.0'} @@ -6796,6 +7496,15 @@ packages: react: 18.2.0 dev: false + /@react-email/head@0.0.7(react@18.3.1): + resolution: {integrity: sha512-IcXL4jc0H1qzAXJCD9ajcRFBQdbUHkjKJyiUeogpaYSVZSq6cVDWQuGaI23TA9k+pI2TFeQimogUFb3Kgeeudw==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@react-email/heading@0.0.11(@types/react@18.2.66)(react@18.2.0): resolution: {integrity: sha512-EF5ZtRCxhHPw3m+8iibKKg0RAvAeHj1AP68sjU7s6+J+kvRgllr/E972Wi5Y8UvcIGossCvpX1WrSMDzeB4puA==} engines: {node: '>=18.0.0'} @@ -6808,6 +7517,18 @@ packages: - '@types/react' dev: false + /@react-email/heading@0.0.11(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-EF5ZtRCxhHPw3m+8iibKKg0RAvAeHj1AP68sjU7s6+J+kvRgllr/E972Wi5Y8UvcIGossCvpX1WrSMDzeB4puA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) + react: 18.3.1 + transitivePeerDependencies: + - '@types/react' + dev: false + /@react-email/hr@0.0.7(react@18.2.0): resolution: {integrity: sha512-8suK0M/deXHt0DBSeKhSC4bnCBCBm37xk6KJh9M0/FIKlvdltQBem52YUiuqVl1XLB87Y6v6tvspn3SZ9fuxEA==} engines: {node: '>=18.0.0'} @@ -6817,6 +7538,15 @@ packages: react: 18.2.0 dev: false + /@react-email/hr@0.0.7(react@18.3.1): + resolution: {integrity: sha512-8suK0M/deXHt0DBSeKhSC4bnCBCBm37xk6KJh9M0/FIKlvdltQBem52YUiuqVl1XLB87Y6v6tvspn3SZ9fuxEA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@react-email/html@0.0.7(react@18.2.0): resolution: {integrity: sha512-oy7OoRtoOKApVI/5Lz1OZptMKmMYJu9Xn6+lOmdBQchAuSdQtWJqxhrSj/iI/mm8HZWo6MZEQ6SFpfOuf8/P6Q==} engines: {node: '>=18.0.0'} @@ -6826,6 +7556,15 @@ packages: react: 18.2.0 dev: false + /@react-email/html@0.0.7(react@18.3.1): + resolution: {integrity: sha512-oy7OoRtoOKApVI/5Lz1OZptMKmMYJu9Xn6+lOmdBQchAuSdQtWJqxhrSj/iI/mm8HZWo6MZEQ6SFpfOuf8/P6Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@react-email/img@0.0.7(react@18.2.0): resolution: {integrity: sha512-up9tM2/dJ24u/CFjcvioKbyGuPw1yeJg605QA7VkrygEhd0CoQEjjgumfugpJ+VJgIt4ZjT9xMVCK5QWTIWoaA==} engines: {node: '>=18.0.0'} @@ -6835,6 +7574,15 @@ packages: react: 18.2.0 dev: false + /@react-email/img@0.0.7(react@18.3.1): + resolution: {integrity: sha512-up9tM2/dJ24u/CFjcvioKbyGuPw1yeJg605QA7VkrygEhd0CoQEjjgumfugpJ+VJgIt4ZjT9xMVCK5QWTIWoaA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@react-email/link@0.0.7(react@18.2.0): resolution: {integrity: sha512-hXPChT3ZMyKnUSA60BLEMD2maEgyB2A37yg5bASbLMrXmsExHi6/IS1h2XiUPLDK4KqH5KFaFxi2cdNo1JOKwA==} engines: {node: '>=18.0.0'} @@ -6844,25 +7592,43 @@ packages: react: 18.2.0 dev: false - /@react-email/markdown@0.0.8(react-email@2.1.0)(react@18.2.0): - resolution: {integrity: sha512-x/2iTWskE0XoM13Rx80ckwbWaWdS6koYvxW6PHkOJ/k88NPnDIm+TaYvvg2DYSFJAUI0gK/LmIwenbebgNDS+w==} + /@react-email/link@0.0.7(react@18.3.1): + resolution: {integrity: sha512-hXPChT3ZMyKnUSA60BLEMD2maEgyB2A37yg5bASbLMrXmsExHi6/IS1h2XiUPLDK4KqH5KFaFxi2cdNo1JOKwA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + + /@react-email/markdown@0.0.8(react-email@2.1.0)(react@18.3.1): + resolution: {integrity: sha512-x/2iTWskE0XoM13Rx80ckwbWaWdS6koYvxW6PHkOJ/k88NPnDIm+TaYvvg2DYSFJAUI0gK/LmIwenbebgNDS+w==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + md-to-react-email: 4.1.0(react-email@2.1.0)(react@18.3.1) + react: 18.3.1 + transitivePeerDependencies: + - react-email + dev: false + + /@react-email/preview@0.0.8(react@18.2.0): + resolution: {integrity: sha512-Jm0KUYBZQd2w0s2QRMQy0zfHdo3Ns+9bYSE1OybjknlvhANirjuZw9E5KfWgdzO7PyrRtB1OBOQD8//Obc4uIQ==} engines: {node: '>=18.0.0'} peerDependencies: react: 18.2.0 dependencies: - md-to-react-email: 4.1.0(react-email@2.1.0)(react@18.2.0) react: 18.2.0 - transitivePeerDependencies: - - react-email dev: false - /@react-email/preview@0.0.8(react@18.2.0): + /@react-email/preview@0.0.8(react@18.3.1): resolution: {integrity: sha512-Jm0KUYBZQd2w0s2QRMQy0zfHdo3Ns+9bYSE1OybjknlvhANirjuZw9E5KfWgdzO7PyrRtB1OBOQD8//Obc4uIQ==} engines: {node: '>=18.0.0'} peerDependencies: react: 18.2.0 dependencies: - react: 18.2.0 + react: 18.3.1 dev: false /@react-email/render@0.0.12: @@ -6884,6 +7650,15 @@ packages: react: 18.2.0 dev: false + /@react-email/row@0.0.7(react@18.3.1): + resolution: {integrity: sha512-h7pwrLVGk5CIx7Ai/oPxBgCCAGY7BEpCUQ7FCzi4+eThcs5IdjSwDPefLEkwaFS8KZc56UNwTAH92kNq5B7blg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@react-email/section@0.0.11(react@18.2.0): resolution: {integrity: sha512-3bZ/DuvX1julATI7oqYza6pOtWZgLJDBaa62LFFEvYjisyN+k6lrP2KOucPsDKu2DOkUzlQgK0FOm6VQJX+C0w==} engines: {node: '>=18.0.0'} @@ -6893,6 +7668,15 @@ packages: react: 18.2.0 dev: false + /@react-email/section@0.0.11(react@18.3.1): + resolution: {integrity: sha512-3bZ/DuvX1julATI7oqYza6pOtWZgLJDBaa62LFFEvYjisyN+k6lrP2KOucPsDKu2DOkUzlQgK0FOm6VQJX+C0w==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@react-email/tailwind@0.0.14(react@18.2.0): resolution: {integrity: sha512-SRRcm08zxrAR5XozaW0X+GAJlTJITakZe0UXBiFZDlSDBLwFMxjaGuQwccqNF0LxDnxmduxYB71mzEAqecgTZg==} engines: {node: '>=18.0.0'} @@ -6902,6 +7686,15 @@ packages: react: 18.2.0 dev: false + /@react-email/tailwind@0.0.14(react@18.3.1): + resolution: {integrity: sha512-SRRcm08zxrAR5XozaW0X+GAJlTJITakZe0UXBiFZDlSDBLwFMxjaGuQwccqNF0LxDnxmduxYB71mzEAqecgTZg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@react-email/text@0.0.7(react@18.2.0): resolution: {integrity: sha512-eHCx0mdllGcgK9X7wiLKjNZCBRfxRVNjD3NNYRmOc3Icbl8M9JHriJIfxBuGCmGg2UAORK5P3KmaLQ8b99/pbA==} engines: {node: '>=18.0.0'} @@ -6911,6 +7704,15 @@ packages: react: 18.2.0 dev: false + /@react-email/text@0.0.7(react@18.3.1): + resolution: {integrity: sha512-eHCx0mdllGcgK9X7wiLKjNZCBRfxRVNjD3NNYRmOc3Icbl8M9JHriJIfxBuGCmGg2UAORK5P3KmaLQ8b99/pbA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 18.2.0 + dependencies: + react: 18.3.1 + dev: false + /@rollup/plugin-commonjs@24.0.0(rollup@2.78.0): resolution: {integrity: sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g==} engines: {node: '>=14.0.0'} @@ -8082,21 +8884,21 @@ packages: resolution: {integrity: sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.66 + '@types/react': 18.3.2 '@types/react-router': 5.1.20 /@types/react-router-dom@5.3.3: resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.66 + '@types/react': 18.3.2 '@types/react-router': 5.1.20 /@types/react-router@5.1.20: resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.66 + '@types/react': 18.3.2 /@types/react@18.2.66: resolution: {integrity: sha512-OYTmMI4UigXeFMF/j4uv0lBBEbongSgptPrHBxqME44h9+yNov+oL6Z3ocJKo0WyXR84sQUNeyIp9MRfckvZpg==} @@ -11876,7 +12678,7 @@ packages: /fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - /framer-motion@10.17.4(react-dom@18.2.0)(react@18.2.0): + /framer-motion@10.17.4(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-CYBSs6cWfzcasAX8aofgKFZootmkQtR4qxbfTOksBLny/lbUfkGbQAFOS3qnl6Uau1N9y8tUpI7mVIrHgkFjLQ==} peerDependencies: react: ^18.0.0 @@ -11887,8 +12689,8 @@ packages: react-dom: optional: true dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) tslib: 2.6.2 optionalDependencies: '@emotion/is-prop-valid': 0.8.8 @@ -13751,14 +14553,14 @@ packages: hasBin: true dev: false - /md-to-react-email@4.1.0(react-email@2.1.0)(react@18.2.0): + /md-to-react-email@4.1.0(react-email@2.1.0)(react@18.3.1): resolution: {integrity: sha512-aQvj4dCuy0wmBVvSB377qTErlpjN5Pl61+5v+B8Z76KoxOgKhbzvK3qnO94eOsuGSWwI+9n4zb3xD3/MypxM4w==} peerDependencies: react: 18.x react-email: '>1.9.3' dependencies: marked: 7.0.4 - react: 18.2.0 + react: 18.3.1 react-email: 2.1.0(@babel/core@7.24.0)(eslint@8.30.0) dev: false @@ -14653,6 +15455,18 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /next-themes@0.2.1(next@14.2.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} + peerDependencies: + next: '*' + react: '*' + react-dom: '*' + dependencies: + next: 14.2.3(@babel/core@7.24.0)(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /next@14.1.0(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==} engines: {node: '>=18.17.0'} @@ -14731,6 +15545,45 @@ packages: - babel-plugin-macros dev: false + /next@14.1.0(@babel/core@7.24.0)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + sass: + optional: true + dependencies: + '@next/env': 14.1.0 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001587 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.24.0)(react@18.3.1) + optionalDependencies: + '@next/swc-darwin-arm64': 14.1.0 + '@next/swc-darwin-x64': 14.1.0 + '@next/swc-linux-arm64-gnu': 14.1.0 + '@next/swc-linux-arm64-musl': 14.1.0 + '@next/swc-linux-x64-gnu': 14.1.0 + '@next/swc-linux-x64-musl': 14.1.0 + '@next/swc-win32-arm64-msvc': 14.1.0 + '@next/swc-win32-ia32-msvc': 14.1.0 + '@next/swc-win32-x64-msvc': 14.1.0 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + /next@14.2.3(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==} engines: {node: '>=18.17.0'} @@ -14815,6 +15668,48 @@ packages: - babel-plugin-macros dev: false + /next@14.2.3(@babel/core@7.24.0)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + sass: + optional: true + dependencies: + '@next/env': 14.2.3 + '@swc/helpers': 0.5.5 + busboy: 1.6.0 + caniuse-lite: 1.0.30001587 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.24.0)(react@18.3.1) + optionalDependencies: + '@next/swc-darwin-arm64': 14.2.3 + '@next/swc-darwin-x64': 14.2.3 + '@next/swc-linux-arm64-gnu': 14.2.3 + '@next/swc-linux-arm64-musl': 14.2.3 + '@next/swc-linux-x64-gnu': 14.2.3 + '@next/swc-linux-x64-musl': 14.2.3 + '@next/swc-win32-arm64-msvc': 14.2.3 + '@next/swc-win32-ia32-msvc': 14.2.3 + '@next/swc-win32-x64-msvc': 14.2.3 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + /next@14.3.0-canary.38(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-gk15ft5fdKtMcgw22d4X8HDtj3SqG7iORLqQFC/wAQAldVHi7CPHPZ05rSu4ajmHjFzkY9HXdNcUu7c6DN7PnQ==} engines: {node: '>=18.17.0'} @@ -16098,14 +16993,14 @@ packages: engines: {node: '>=4'} dev: false - /prism-react-renderer@2.1.0(react@18.2.0): + /prism-react-renderer@2.1.0(react@18.3.1): resolution: {integrity: sha512-I5cvXHjA1PVGbGm1MsWCpvBCRrYyxEri0MC7/JbfIfYfcXAxHyO5PaUjs3A8H5GW6kJcLhTHxxMaOZZpRZD2iQ==} peerDependencies: react: '>=16.0.0' dependencies: '@types/prismjs': 1.26.3 clsx: 1.2.1 - react: 18.2.0 + react: 18.3.1 dev: false /prism-react-renderer@2.3.1(react@18.2.0): @@ -16361,15 +17256,15 @@ packages: hasBin: true dependencies: '@radix-ui/colors': 1.0.1 - '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-popover': 1.0.6(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-tooltip': 1.0.6(@types/react-dom@18.2.18)(@types/react@18.2.66)(react-dom@18.2.0)(react@18.2.0) - '@react-email/components': 0.0.15(@types/react@18.2.66)(react-email@2.1.0)(react@18.2.0) + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popover': 1.0.6(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-tooltip': 1.0.6(@types/react-dom@18.2.18)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@react-email/components': 0.0.15(@types/react@18.3.2)(react-email@2.1.0)(react@18.3.1) '@react-email/render': 0.0.12 '@swc/core': 1.3.101 - '@types/react': 18.2.66 + '@types/react': 18.3.2 '@types/react-dom': 18.2.18 '@types/webpack': 5.28.5(@swc/core@1.3.101)(esbuild@0.19.11) autoprefixer: 10.4.14(postcss@8.4.35) @@ -16381,21 +17276,21 @@ packages: esbuild: 0.19.11 eslint-config-prettier: 9.0.0(eslint@8.30.0) eslint-config-turbo: 1.10.12(eslint@8.30.0) - framer-motion: 10.17.4(react-dom@18.2.0)(react@18.2.0) + framer-motion: 10.17.4(react-dom@18.3.1)(react@18.3.1) glob: 10.3.4 log-symbols: 4.1.0 mime-types: 2.1.35 - next: 14.1.0(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.0(@babel/core@7.24.0)(react-dom@18.3.1)(react@18.3.1) normalize-path: 3.0.0 ora: 5.4.1 postcss: 8.4.35 - prism-react-renderer: 2.1.0(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + prism-react-renderer: 2.1.0(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) shelljs: 0.8.5 socket.io: 4.7.3 socket.io-client: 4.7.3 - sonner: 1.3.1(react-dom@18.2.0)(react@18.2.0) + sonner: 1.3.1(react-dom@18.3.1)(react@18.3.1) source-map-js: 1.0.2 stacktrace-parser: 0.1.10 tailwind-merge: 2.2.0 @@ -16467,6 +17362,14 @@ packages: react: 18.2.0 dev: false + /react-icons@5.0.1(react@18.3.1): + resolution: {integrity: sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw==} + peerDependencies: + react: '*' + dependencies: + react: 18.3.1 + dev: false + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -16477,10 +17380,6 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - /react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - dev: false - /react-json-view-lite@1.2.1(react@18.2.0): resolution: {integrity: sha512-Itc0g86fytOmKZoIoJyGgvNqohWSbh3NXIKNgH6W6FT9PC1ck4xas1tT3Rr/b3UlFXyA9Jjaw9QSXdZy2JwGMQ==} engines: {node: '>=14'} @@ -16524,6 +17423,23 @@ packages: tslib: 2.6.2 dev: false + /react-remove-scroll-bar@2.3.5(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw==} + engines: {node: '>=10'} + deprecated: please update to the following version as this contains a bug (https://github.com/theKashey/react-remove-scroll-bar/issues/57) + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.2 + react: 18.3.1 + react-style-singleton: 2.2.1(@types/react@18.3.2)(react@18.3.1) + tslib: 2.6.2 + dev: false + /react-remove-scroll@2.5.5(@types/react@18.2.66)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} @@ -16543,6 +17459,25 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.66)(react@18.2.0) dev: false + /react-remove-scroll@2.5.5(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.2 + react: 18.3.1 + react-remove-scroll-bar: 2.3.5(@types/react@18.3.2)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.2)(react@18.3.1) + tslib: 2.6.2 + use-callback-ref: 1.3.1(@types/react@18.3.2)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.2)(react@18.3.1) + dev: false + /react-resizable-panels@2.0.19(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-v3E41kfKSuCPIvJVb4nL4mIZjjKIn/gh6YqZF/gDfQDolv/8XnhJBek4EiV2gOr3hhc5A3kOGOayk3DhanpaQw==} peerDependencies: @@ -16613,6 +17548,23 @@ packages: tslib: 2.6.2 dev: false + /react-style-singleton@2.2.1(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.2 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.3.1 + tslib: 2.6.2 + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -17598,14 +18550,14 @@ packages: websocket-driver: 0.7.4 dev: false - /sonner@1.3.1(react-dom@18.2.0)(react@18.2.0): + /sonner@1.3.1(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-+rOAO56b2eI3q5BtgljERSn2umRk63KFIvgb2ohbZ5X+Eb5u+a/7/0ZgswYqgBMg8dyl7n6OXd9KasA8QF9ToA==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false /sort-css-media-queries@2.1.0: @@ -17990,6 +18942,24 @@ packages: react: 18.2.0 dev: false + /styled-jsx@5.1.1(@babel/core@7.24.0)(react@18.3.1): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + '@babel/core': 7.24.0 + client-only: 0.0.1 + react: 18.3.1 + dev: false + /stylehacks@5.1.1(postcss@8.4.38): resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} engines: {node: ^10 || ^12 || >=14.0} @@ -18102,7 +19072,7 @@ packages: /tailwind-merge@2.2.0: resolution: {integrity: sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.5 dev: false /tailwind-merge@2.3.0: @@ -18968,6 +19938,21 @@ packages: tslib: 2.6.2 dev: false + /use-callback-ref@1.3.1(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.2 + react: 18.3.1 + tslib: 2.6.2 + dev: false + /use-sidecar@1.1.2(@types/react@18.2.66)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} @@ -18984,6 +19969,22 @@ packages: tslib: 2.6.2 dev: false + /use-sidecar@1.1.2(@types/react@18.3.2)(react@18.3.1): + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.2 + detect-node-es: 1.1.0 + react: 18.3.1 + tslib: 2.6.2 + dev: false + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}