diff --git a/.eslintrc.cjs b/.eslintrc.cjs index f86e55c28..ac08b7766 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -14,6 +14,13 @@ module.exports = { root: true, reportUnusedDisableDirectives: true, ignorePatterns: ['next-env.d.ts'], + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:@next/next/recommended', + 'plugin:import/typescript', + 'prettier', + ], overrides: [ // Rules for all files { @@ -56,7 +63,6 @@ module.exports = { 'plugin:react/recommended', 'plugin:react/jsx-runtime', 'plugin:react-hooks/recommended', - 'plugin:@next/next/recommended', ], rules: { 'react/prop-types': 'off', diff --git a/.github/workflows/nextjs_bundle_analysis.yml b/.github/workflows/nextjs_bundle_analysis.yml index 9eb5e8b2e..86c6da2e1 100644 --- a/.github/workflows/nextjs_bundle_analysis.yml +++ b/.github/workflows/nextjs_bundle_analysis.yml @@ -56,6 +56,12 @@ jobs: # # change this if you prefer a more strict cache # key: ${{ runner.os }}-build-${{ env.cache-name }} + - name: Install ESLint + run: pnpm add -D eslint @next/eslint-plugin-next + + - name: Run ESLint + run: pnpm eslint . + - name: Build next.js app # change this if your site requires a custom build command run: ./node_modules/.bin/next build diff --git a/bun.lockb b/bun.lockb index 5ab629cb8..e4f621511 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/components/Author/AuthorProfile.tsx b/components/Author/AuthorProfile.tsx index 8a7a63853..c6420bd72 100644 --- a/components/Author/AuthorProfile.tsx +++ b/components/Author/AuthorProfile.tsx @@ -18,7 +18,8 @@ interface AuthorMetadata { name: string bio: string ogImage: string - socials?: Record // Dynamically match social media platforms + socials?: Record // Dynamically match social media platforms + date: string | number | Date } interface AuthorProfileProps { @@ -28,7 +29,7 @@ interface AuthorProfileProps { const AuthorProfile: React.FC = ({ authorId }) => { const authors = getPagesUnderRoute('/authors') as Array const author = authors.find((a) => a.frontMatter.authorid === authorId)?.frontMatter - const blogPosts = getPagesUnderRoute('/blog') as Array + const blogPosts = getPagesUnderRoute('/blog') as Array // Filter posts by the current authorId const authorPosts = blogPosts.filter((post) => post.frontMatter.authorid === authorId) @@ -104,7 +105,7 @@ const AuthorProfile: React.FC = ({ authorId }) => { console.log('Tag clicked:', tag)} + handleTagClick={(tag: unknown) => console.log('Tag clicked:', tag)} selectedTags={undefined} /> ))} diff --git a/components/FooterMenu.tsx b/components/FooterMenu.tsx index 5659e324d..5c886e1b3 100644 --- a/components/FooterMenu.tsx +++ b/components/FooterMenu.tsx @@ -1,5 +1,14 @@ import Link from 'next/link' -import { SocialIcon } from 'react-social-icons' +import { FloatingDock } from '@/components/ui/floating-dock' +import { + IconBrandGithub, + IconBrandDiscord, + IconBrandLinkedin, + IconBrandTwitter, + IconBrandYoutube, + IconMail, +} from '@tabler/icons-react' +import { useMediaQuery } from 'react-responsive' const menuItems: { heading: string @@ -97,6 +106,41 @@ const menuItems: { ] const FooterMenu = () => { + const isMobile = useMediaQuery({ query: '(max-width: 640px)' }) + + const socialLinks = [ + { + title: 'GitHub', + icon: , + href: 'https://github.librechat.ai/', + }, + { + title: 'Discord', + icon: , + href: 'https://discord.librechat.ai/', + }, + { + title: 'LinkedIn', + icon: , + href: 'https://linkedin.librechat.ai/', + }, + { + title: 'Twitter', + icon: , + href: 'https://x.com/LibreChatAI', + }, + { + title: 'YouTube', + icon: , + href: 'https://www.youtube.com/@LibreChat', + }, + { + title: 'Email', + icon: , + href: 'mailto:contact@librechat.ai', + }, + ] + return (
@@ -116,52 +160,10 @@ const FooterMenu = () => { ))}
© {new Date().getFullYear()} LibreChat
-
- - - - - - -
+ {!isMobile && }
+ {isMobile && }
) } diff --git a/components/Newsletter/SubscribeForm.tsx b/components/Newsletter/SubscribeForm.tsx index 92a6ccfae..035f20aaf 100644 --- a/components/Newsletter/SubscribeForm.tsx +++ b/components/Newsletter/SubscribeForm.tsx @@ -1,6 +1,6 @@ +import validator from 'validator' import React, { useState } from 'react' import toast, { Toaster } from 'react-hot-toast' -import validator from 'validator' import style from './newsletterform.module.css' const isDevelopment = true //TODO diff --git a/components/Newsletter/newsletterform.module.css b/components/Newsletter/newsletterform.module.css index 9548f0e2b..8030af798 100644 --- a/components/Newsletter/newsletterform.module.css +++ b/components/Newsletter/newsletterform.module.css @@ -1,74 +1,74 @@ .container { - text-align: center; + text-align: center; } .form-wrapper { - max-width: 400px; - margin: 0 auto; - border-radius: 10px; - overflow: hidden; - background-color: #f1f1f1; + max-width: 400px; + margin: 0 auto; + border-radius: 10px; + overflow: hidden; + background-color: #f1f1f1; } :global(.dark) .form-wrapper { - background-color: #171717; + background-color: #111111; } .form-title { - padding: 15px; - color:#454545; + padding: 15px; + color: #454545; } :global(.dark) .form-title { - color:#9b9b9b; + color: #9b9b9b; } .form-container { - padding: 20px; + padding: 20px; } .email-input { - padding: 8px; - /* border: 1px solid #3e3e3e; */ - border-radius: 5px; - margin-bottom: 10px; - width: 100%; - background-color: #fff; + padding: 8px; + /* border: 1px solid #3e3e3e; */ + border-radius: 5px; + margin-bottom: 10px; + width: 100%; + background-color: #fff; } .email-input::placeholder { - color: #5a5a5a; + color: #5a5a5a; } .email-input::placeholder { - color: #5a5a5a; + color: #5a5a5a; } :global(.dark) .email-input { - background-color: #29292a; + background-color: #29292a; } .subscribe-button { - padding: 8px 16px; - background: linear-gradient(-45deg, #ffa63d, #ff3d77, #338aff, #3cf0c5); - background-size: 600%; - animation: anime 16s linear infinite; - color: rgba(255, 255, 255, 0.9); - border: none; - border-radius: 5px; - cursor: pointer; - width: 100%; + padding: 8px 16px; + background: linear-gradient(-45deg, #ffa63d, #ff3d77, #338aff, #3cf0c5); + background-size: 600%; + animation: anime 16s linear infinite; + color: rgba(255, 255, 255, 0.9); + border: none; + border-radius: 5px; + cursor: pointer; + width: 100%; } .subscribe-button:hover { - filter: brightness(110%); + filter: brightness(110%); } @keyframes anime { - 0% { - background-position: 0% 50%; - } - 50% { - background-position: 100% 50%; - } - 100% { - background-position: 0% 50%; - } -} \ No newline at end of file + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} diff --git a/components/blog/BlogCard.tsx b/components/blog/BlogCard.tsx index d3beb4d16..4bcfb7370 100644 --- a/components/blog/BlogCard.tsx +++ b/components/blog/BlogCard.tsx @@ -18,7 +18,7 @@ const BlogCard = ({ page, handleTagClick, selectedTags = [] }) => { useEffect(() => { const updateCardWidth = () => { - setCardWidth(document.querySelector('.blog-card').clientWidth) + setCardWidth(document.querySelector('.blog-card')?.clientWidth ?? 0) } window.addEventListener('resize', updateCardWidth) updateCardWidth() diff --git a/components/callouts/style.module.css b/components/callouts/style.module.css index f5ef4b7a8..863530081 100644 --- a/components/callouts/style.module.css +++ b/components/callouts/style.module.css @@ -46,7 +46,7 @@ } :global(.dark) .callout-content { - background-color: #000000cc; /* Separate background color for content */ + background-color: #080808cc; /* Separate background color for content */ color: #fff; } @@ -116,7 +116,7 @@ } :global(.dark) .callout { - --content-background-color: #111111; + --content-background-color: #080808; --default-border-color: #9e9e9e; --default-background-color: #2b2e35; diff --git a/components/home/Features.tsx b/components/home/Features.tsx new file mode 100644 index 000000000..c21eb975d --- /dev/null +++ b/components/home/Features.tsx @@ -0,0 +1,145 @@ +import { ReactNode } from 'react' +import Image, { type StaticImageData } from 'next/image' +import { GitFork, BrainCog, Code, Bot, Search, Image as ImageIcon, Terminal } from 'lucide-react' +import { BentoCard, BentoGrid } from '@/components/magicui/bento-grid' +import CodeInterpreter from './img/code_interpreter.gif' +import { HomeSection } from './components/HomeSection' +import ArtifactsLight from './img/artifacts_light.png' +import ArtifactsDark from './img/artifacts_dark.png' +import AgentsLight from './img/agents_light.png' +import AgentsDark from './img/agents_dark.png' +import { Header } from '../Header' + +const BentoBgImage = ({ + imgLight, + imgDark, + alt, +}: { + imgLight: StaticImageData + imgDark: StaticImageData + alt: string +}) => ( + <> + {alt} + {alt} + +) + +type Feature = { + Icon: React.ComponentType + name: string + description: string + href: string + cta: string + background: ReactNode | null + className: string +} + +const features: Feature[] = [ + { + Icon: Bot, + name: 'Agents', + description: 'Advanced agents with file handling, code interpretation, and API actions', + href: '/docs/features/agents', + cta: 'Meet the Agents!', + background: , + className: 'md:row-start-1 md:row-end-4 md:col-start-2 md:col-end-2', + }, + { + Icon: Terminal, + name: 'Code Interpreter', + description: + 'Execute code in multiple languages securely via API with zero setup - Python, JavaScript, TypeScript, Go, and more', + href: '/docs/features/code_interpreter', + cta: 'Start Coding!', + background: ( + + ), + className: 'md:col-start-1 md:col-end-2 md:row-start-1 md:row-end-3', + }, + { + Icon: BrainCog, + name: 'Models', + description: 'AI model selection including Anthropic, AWS, OpenAI, Azure, and more', + href: '/docs/configuration/pre_configured_ai', + cta: 'Pick Your Brain!', + background: null, + className: 'md:col-start-1 md:col-end-2 md:row-start-3 md:row-end-4', + }, + { + Icon: Code, + name: 'Artifacts', + description: 'Create React, HTML code, and Mermaid diagrams in chat', + href: '/docs/features/artifacts', + cta: 'Craft Some Code!', + background: , + className: 'md:col-start-3 md:col-end-3 md:row-start-1 md:row-end-2', + }, + { + Icon: ImageIcon, + name: 'Multimodal', + description: 'Analyze images and chat with files using various endpoints', + href: '/docs/features', + cta: 'Image This!', + background: null, + className: 'md:col-start-3 md:col-end-3 md:row-start-2 md:row-end-3', + }, + { + Icon: GitFork, + name: 'Fork', + description: + 'Split messages to create multiple conversation threads for better context control', + href: '/docs/features/fork', + cta: 'Fork It Up!', + background: null, + className: 'md:col-start-3 md:col-end-3 md:row-start-3 md:row-end-4', + }, + { + Icon: Search, + name: 'Search', + description: 'Search for messages, files, and code snippets in an instant', + href: '/docs/configuration/meilisearch', + cta: 'Find It Fast!', + background: null, + className: 'md:col-start-3 md:col-end-3 md:row-start-3 md:row-end-4', + }, +] + +export default function Features() { + return ( + +
+ + {features.map((feature) => ( + + ))} + + + ) +} diff --git a/components/home/Footer.tsx b/components/home/Footer.tsx index cdb383598..96db1b957 100644 --- a/components/home/Footer.tsx +++ b/components/home/Footer.tsx @@ -1,4 +1,3 @@ -import RetroGrid from '../magicui/retro-grid' import { HomeSection } from './components/HomeSection' export const Footer = () => ( @@ -9,7 +8,6 @@ export const Footer = () => ( {letter} ))} - ) diff --git a/components/home/Hero.tsx b/components/home/Hero.tsx index 4ceca9441..edb10e3bb 100644 --- a/components/home/Hero.tsx +++ b/components/home/Hero.tsx @@ -1,77 +1,147 @@ +import React from 'react' import Link from 'next/link' -import cn from 'clsx' +import { ContainerScroll } from '@/components/ui/container-scroll-animation' +import { CardBody, CardContainer, CardItem } from '../ui/3d-card' +import { HoverBorderGradient } from '../ui/hover-border-gradient' +import RepoOfTheDay from '@/components/svg/RepoOfTheDay' +import { SparklesCore } from '@/components/ui/sparkles' +import { HomeSection } from './components/HomeSection' +import RossIndex from '@/components/svg/RossIndex' +import DemoImage from './img/demo.png' +import Image from 'next/image' -import styles from './hero.module.css' - -export function Hero() { - const heroMap = { - headlineOne: 'LibreChat', - headlineTwo: 'Every AI for Everyone', - headlineThree: 'The Original, Open-Source AI Chat', - subtitleOne: - 'LibreChat is a free, open source AI chat platform. This Web UI offers vast customization, supporting numerous AI providers, services, and integrations. Serves all AI Conversations in one place with a familiar interface, innovative enhancements, for as many users as you need.', - // subtitleTwo: '', - // subtitleThree: '', - // subtitleFour: '', - cta: 'Get Started', - } +const HERO_TITLE = { + firstPart: 'Unify', + highlight: 'AI', + lastPart: 'Power', +} +const HERO_DESCRIPTION = + ' is the ultimate open-source app for all your AI conversations, fully customizable and compatible with any AI provider — all in one sleek interface' +const DEMO_LINK = 'https://chat.librechat.ai/' +// const GITHUB_LINK = 'https://github.com/danny-avila/librechat' +// const GITHUB_STARS_IMG = +// 'https://img.shields.io/github/stars/danny-avila/librechat?label=librechat&style=social' +const REPO_OF_THE_DAY_LINK = 'https://trendshift.io/repositories/4685' +const ROSS_INDEX_LINK = 'https://runacap.com/ross-index/q1-24/' - return ( -
-
-
-
-
+const HeroTitle = React.memo(() => ( +
+

+ {HERO_TITLE.firstPart}{' '} + + {HERO_TITLE.highlight} +
+
+
+
+
+ {' '} + {HERO_TITLE.lastPart} +

+
+)) + +const HeroDescription = React.memo(() => ( + + + LibreChat + + {HERO_DESCRIPTION} +
+
+ {/* Gradients */} +
+
+
+
+ + {/* Core component */} + + + {/* Radial Gradient to prevent sharp edges */} +
-
-

-

- - - {heroMap.headlineOne} -
- {heroMap.headlineTwo} - {heroMap.headlineThree} - {"est. Jan '23"} -
- - - - - - - -
- -

-

-

- {heroMap.subtitleOne} -
- {/* {heroMap.subtitleTwo} -
- {heroMap.subtitleThree} - {heroMap.subtitleFour} */} -

-
- + + + + + +
+ window.open(DEMO_LINK, '_blank')} + containerClassName="rounded-full" + as="button" + className="dark:bg-black bg-white text-black dark:text-white flex items-center space-x-2" + > + Try demo +
+ {/* + + + + LibreChat Github stars + + + + */} + + + + + + + + + +
+)) + +export function Hero() { + return ( + +
+ + + + + LibreChat UI + +
+
) } diff --git a/components/home/Usage.tsx b/components/home/Usage.tsx new file mode 100644 index 000000000..74b6af4ef --- /dev/null +++ b/components/home/Usage.tsx @@ -0,0 +1,81 @@ +// import Image, { type StaticImageData } from 'next/image' +import { HomeSection } from './components/HomeSection' +// import Link from 'next/link' +import NumberTicker from '@/components/ui/number-ticker' +import DateTicker from '@/components/ui/date-ticker' + +// type User = { +// name: string +// lightImage: StaticImageData +// darkImage: StaticImageData +// href: string +// className?: string +// } +// +// const users: User[] = [ +// { +// name: '', +// lightImage: , +// darkImage: , +// href: '', +// }, +// ] + +const stats = [ + { name: 'GitHub stars', value: 19500 }, + { name: 'Docker pulls', value: 2810000 }, + { name: 'Project started', value: new Date('2023-01-11') }, +] + +export const Usage = () => ( + +
+

Usage statistics

+
+
+
+ {/* {users.map((user) => ( + + {user.name} + {user.name} + + ))} */} +
+
+
+ {stats.map((item) => ( +
+

+ {item.name === 'Project started' && item.value instanceof Date ? ( + + ) : typeof item.value === 'number' ? ( + + ) : ( + item.value.toString() + )} + {'+'} +

+

{item.name}

+
+ ))} +
+
+
+
+) diff --git a/components/home/components/HomeSection.tsx b/components/home/components/HomeSection.tsx index ae0961b5b..ccaae5286 100644 --- a/components/home/components/HomeSection.tsx +++ b/components/home/components/HomeSection.tsx @@ -6,14 +6,7 @@ export const HomeSection = forwardRef< { children: React.ReactNode; className?: string; id?: string } >((props, ref) => { return ( -
+
{props.children}
) diff --git a/components/home/hero.module.css b/components/home/hero.module.css index fcc1de3dc..1ee869473 100644 --- a/components/home/hero.module.css +++ b/components/home/hero.module.css @@ -251,6 +251,7 @@ font-weight: 400; line-height: 1.6; text-align: center; + width: 60%; } .subtitle br { display: none; diff --git a/components/home/img/agents_dark.png b/components/home/img/agents_dark.png new file mode 100644 index 000000000..7f132bac7 Binary files /dev/null and b/components/home/img/agents_dark.png differ diff --git a/components/home/img/agents_light.png b/components/home/img/agents_light.png new file mode 100644 index 000000000..a5547ae25 Binary files /dev/null and b/components/home/img/agents_light.png differ diff --git a/components/home/img/artifacts_dark.png b/components/home/img/artifacts_dark.png new file mode 100644 index 000000000..cc4a80a9d Binary files /dev/null and b/components/home/img/artifacts_dark.png differ diff --git a/components/home/img/artifacts_light.png b/components/home/img/artifacts_light.png new file mode 100644 index 000000000..b402c805b Binary files /dev/null and b/components/home/img/artifacts_light.png differ diff --git a/components/home/img/code_interpreter.gif b/components/home/img/code_interpreter.gif new file mode 100644 index 000000000..517253762 Binary files /dev/null and b/components/home/img/code_interpreter.gif differ diff --git a/components/home/img/demo.png b/components/home/img/demo.png new file mode 100644 index 000000000..3e4c3c9ba Binary files /dev/null and b/components/home/img/demo.png differ diff --git a/components/home/index.tsx b/components/home/index.tsx index 1ea798419..931eaad5d 100644 --- a/components/home/index.tsx +++ b/components/home/index.tsx @@ -1,13 +1,15 @@ +// import NewsletterForm from '@/components/Newsletter/SubscribeForm' +import Features from './Features' +import { Usage } from './Usage' import { Hero } from './Hero' -import Feature from './feature' -import NewsletterForm from '@/components/Newsletter/SubscribeForm' export const Home = () => ( <>
- - + + + {/* */}
) diff --git a/components/magicui/retro-grid.tsx b/components/magicui/retro-grid.tsx deleted file mode 100644 index 3ee25a76c..000000000 --- a/components/magicui/retro-grid.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { cn } from '@/lib/utils' - -export default function RetroGrid({ className }: { className?: string }) { - return ( -
- {/* Grid */} -
-
-
- - {/* Background Gradient */} -
-
- ) -} diff --git a/components/mobileSwitch.tsx b/components/mobileSwitch.tsx index 3ab8230cd..0d27c5e01 100644 --- a/components/mobileSwitch.tsx +++ b/components/mobileSwitch.tsx @@ -3,16 +3,20 @@ import React, { useState, useEffect, useRef } from 'react' // Define the breakpoint const MOBILE_BREAKPOINT = 650 -export default function MobileSwitch(props: { - mobile: React.ElementType - desktop: React.ElementType -}) { +interface MobileSwitchProps { + mobile: React.ComponentType + desktop: React.ComponentType +} + +export default function MobileSwitch({ mobile: Mobile, desktop: Desktop }: MobileSwitchProps) { const [isMobile, setIsMobile] = useState(null) - const objectRef = useRef(null) + const objectRef = useRef(null) useEffect(() => { const handleResize = () => { - setIsMobile(objectRef.current.offsetWidth <= MOBILE_BREAKPOINT) + if (objectRef.current) { + setIsMobile(objectRef.current.offsetWidth <= MOBILE_BREAKPOINT) + } } handleResize() @@ -25,9 +29,5 @@ export default function MobileSwitch(props: { } }, []) - return ( -
- {isMobile === null ? null : isMobile ? <>{props.mobile} : <>{props.desktop}} -
- ) + return
{isMobile === null ? null : isMobile ? : }
} diff --git a/components/svg/RepoOfTheDay.tsx b/components/svg/RepoOfTheDay.tsx new file mode 100644 index 000000000..eea2413cf --- /dev/null +++ b/components/svg/RepoOfTheDay.tsx @@ -0,0 +1,79 @@ +import * as React from 'react' + +function RepoOfTheDay() { + return ( + + + +
GITHUB TRENDING
+
+ + + + +
#1 Repository Of The Day
+
+ +
1
+
+
+ ) +} + +export default RepoOfTheDay diff --git a/components/svg/RossIndex.tsx b/components/svg/RossIndex.tsx new file mode 100644 index 000000000..5db03dffb --- /dev/null +++ b/components/svg/RossIndex.tsx @@ -0,0 +1,186 @@ +import * as React from 'react' + +function RossIndex() { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +export default RossIndex diff --git a/components/ui/3d-card.tsx b/components/ui/3d-card.tsx new file mode 100644 index 000000000..3d445b349 --- /dev/null +++ b/components/ui/3d-card.tsx @@ -0,0 +1,141 @@ +'use client' + +import { cn } from '@/lib/utils' +import React, { createContext, useState, useContext, useRef, useEffect } from 'react' + +const MouseEnterContext = createContext< + [boolean, React.Dispatch>] | undefined +>(undefined) + +export const CardContainer = ({ + children, + className, + containerClassName, +}: { + children?: React.ReactNode + className?: string + containerClassName?: string +}) => { + const containerRef = useRef(null) + const [isMouseEntered, setIsMouseEntered] = useState(false) + + const handleMouseMove = (e: React.MouseEvent) => { + if (!containerRef.current) return + const { left, top, width, height } = containerRef.current.getBoundingClientRect() + const x = (e.clientX - left - width / 2) / 25 + const y = (e.clientY - top - height / 2) / 25 + containerRef.current.style.transform = `rotateY(${x}deg) rotateX(${y}deg)` + } + + const handleMouseEnter = () => { + setIsMouseEntered(true) + if (!containerRef.current) return + } + + const handleMouseLeave = () => { + if (!containerRef.current) return + setIsMouseEntered(false) + containerRef.current.style.transform = `rotateY(0deg) rotateX(0deg)` + } + + return ( + +
+
+ {children} +
+
+
+ ) +} + +export const CardBody = ({ + children, + className, +}: { + children: React.ReactNode + className?: string +}) => { + return ( +
*]:[transform-style:preserve-3d]', + className, + )} + > + {children} +
+ ) +} + +export const CardItem = ({ + as: Tag = 'div', + children, + className, + translateX = 0, + translateY = 0, + translateZ = 0, + rotateX = 0, + rotateY = 0, + rotateZ = 0, + ...rest +}: { + as?: React.ElementType + children: React.ReactNode + className?: string + translateX?: number | string + translateY?: number | string + translateZ?: number | string + rotateX?: number | string + rotateY?: number | string + rotateZ?: number | string + [key: string]: any +}) => { + const ref = useRef(null) + const [isMouseEntered] = useMouseEnter() + + useEffect(() => { + handleAnimations() + }, [isMouseEntered]) + + const handleAnimations = () => { + if (!ref.current) return + if (isMouseEntered) { + ref.current.style.transform = `translateX(${translateX}px) translateY(${translateY}px) translateZ(${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) rotateZ(${rotateZ}deg)` + } else { + ref.current.style.transform = `translateX(0px) translateY(0px) translateZ(0px) rotateX(0deg) rotateY(0deg) rotateZ(0deg)` + } + } + + return ( + + {children} + + ) +} + +// Create a hook to use the context +export const useMouseEnter = () => { + const context = useContext(MouseEnterContext) + if (context === undefined) { + throw new Error('useMouseEnter must be used within a MouseEnterProvider') + } + return context +} diff --git a/components/ui/background-beams-with-collision.tsx b/components/ui/background-beams-with-collision.tsx new file mode 100644 index 000000000..5b5e1e67c --- /dev/null +++ b/components/ui/background-beams-with-collision.tsx @@ -0,0 +1,254 @@ +import { cn } from '@/lib/utils' +import { motion, AnimatePresence } from 'framer-motion' +import React, { useRef, useState, useEffect } from 'react' + +interface BeamOptions { + initialX?: number + translateX?: number + initialY?: number + translateY?: number + rotate?: number + className?: string + duration?: number + delay?: number + repeatDelay?: number +} + +export const BackgroundBeamsWithCollision = ({ + children, + className, +}: { + children: React.ReactNode + className?: string +}) => { + const containerRef = useRef(null) + const parentRef = useRef(null) + + const beams: BeamOptions[] = [ + { + initialX: 10, + translateX: 10, + duration: 7, + repeatDelay: 3, + delay: 2, + }, + { + initialX: 600, + translateX: 600, + duration: 3, + repeatDelay: 3, + delay: 4, + }, + { + initialX: 100, + translateX: 100, + duration: 7, + repeatDelay: 7, + className: 'h-6', + }, + { + initialX: 400, + translateX: 400, + duration: 5, + repeatDelay: 14, + delay: 4, + }, + { + initialX: 800, + translateX: 800, + duration: 11, + repeatDelay: 2, + className: 'h-20', + }, + { + initialX: 1000, + translateX: 1000, + duration: 4, + repeatDelay: 2, + className: 'h-12', + }, + { + initialX: 1200, + translateX: 1200, + duration: 6, + repeatDelay: 4, + delay: 2, + className: 'h-6', + }, + ] + + return ( +
+ {beams.map((beam) => ( + + ))} + + {children} +
+
+ ) +} + +const CollisionMechanism = React.forwardRef< + HTMLDivElement, + { + containerRef: React.RefObject + parentRef: React.RefObject + beamOptions?: BeamOptions + } +>(({ parentRef, containerRef, beamOptions = {} }) => { + const beamRef = useRef(null) + const [collision, setCollision] = useState<{ + detected: boolean + coordinates: { x: number; y: number } | null + }>({ + detected: false, + coordinates: null, + }) + const [beamKey, setBeamKey] = useState(0) + const [cycleCollisionDetected, setCycleCollisionDetected] = useState(false) + + useEffect(() => { + const checkCollision = () => { + if (beamRef.current && containerRef.current && parentRef.current && !cycleCollisionDetected) { + const beamRect = beamRef.current.getBoundingClientRect() + const containerRect = containerRef.current.getBoundingClientRect() + const parentRect = parentRef.current.getBoundingClientRect() + + if (beamRect.bottom >= containerRect.top) { + const relativeX = beamRect.left - parentRect.left + beamRect.width / 2 + const relativeY = beamRect.bottom - parentRect.top + + setCollision({ + detected: true, + coordinates: { + x: relativeX, + y: relativeY, + }, + }) + setCycleCollisionDetected(true) + } + } + } + + const animationInterval = setInterval(checkCollision, 50) + + return () => clearInterval(animationInterval) + }, [cycleCollisionDetected, containerRef]) + + useEffect(() => { + if (collision.detected && collision.coordinates) { + setTimeout(() => { + setCollision({ detected: false, coordinates: null }) + setCycleCollisionDetected(false) + }, 2000) + + setTimeout(() => { + setBeamKey((prevKey: number) => prevKey + 1) + }, 2000) + } + }, [collision]) + + return ( + <> + + + {collision.detected && collision.coordinates && ( + + )} + + + ) +}) + +CollisionMechanism.displayName = 'CollisionMechanism' + +const Explosion = ({ ...props }: React.HTMLProps) => { + const spans = Array.from({ length: 20 }, (_, index) => ({ + id: index, + initialX: 0, + initialY: 0, + directionX: Math.floor(Math.random() * 80 - 40), + directionY: Math.floor(Math.random() * -50 - 10), + })) + + return ( +
+ + {spans.map((span) => ( + + ))} +
+ ) +} diff --git a/components/ui/container-scroll-animation.tsx b/components/ui/container-scroll-animation.tsx new file mode 100644 index 000000000..61f750bdc --- /dev/null +++ b/components/ui/container-scroll-animation.tsx @@ -0,0 +1,61 @@ +import React, { useRef } from 'react' +import { useScroll, useTransform, motion, MotionValue, useSpring } from 'framer-motion' + +export const ContainerScroll = ({ children }: { children: React.ReactNode }) => { + const containerRef = useRef(null) + const { scrollYProgress } = useScroll({ + target: containerRef, + offset: ['start end', 'center start'], + }) + + const translateY = useTransform(scrollYProgress, [0.3, 0.75], [-100, 200]) + const translateYSpring = useSpring(translateY, { stiffness: 600, damping: 80 }) + + const rotate = useTransform(scrollYProgress, [0.3, 0.75], ['40deg', '0deg']) + const rotateSpring = useSpring(rotate, { stiffness: 600, damping: 80 }) + + return ( +
+
+ + {children} + +
+
+ ) +} + +export const Card = ({ + rotate, + scale, + translateY, + children, +}: { + rotate: MotionValue + scale: MotionValue + translateY: MotionValue + children: React.ReactNode +}) => { + return ( + +
+ {children} +
+
+ ) +} diff --git a/components/ui/date-ticker.tsx b/components/ui/date-ticker.tsx new file mode 100644 index 000000000..f27b93d84 --- /dev/null +++ b/components/ui/date-ticker.tsx @@ -0,0 +1,51 @@ +'use client' + +import { useEffect, useRef } from 'react' +import { useInView, useMotionValue, useSpring } from 'framer-motion' +import { cn } from '@/lib/utils' + +export default function DateTicker({ + targetDate, + startDate, + delay = 0, + className, +}: { + targetDate: Date + startDate?: Date + className?: string + delay?: number +}) { + const ref = useRef(null) + const initialDate = startDate || new Date(targetDate.getTime() + 30 * 24 * 60 * 60 * 1000) + const motionValue = useMotionValue(initialDate.getTime()) + const springValue = useSpring(motionValue, { + damping: 100, + stiffness: 100, + }) + const isInView = useInView(ref, { once: true, margin: '0px' }) + + useEffect(() => { + if (isInView) { + setTimeout(() => { + motionValue.set(targetDate.getTime()) + }, delay * 1000) + } + }, [motionValue, isInView, delay, targetDate]) + + useEffect( + () => + springValue.on('change', (latest) => { + if (ref.current) { + const date = new Date(latest) + ref.current.textContent = date.toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric', + }) + } + }), + [springValue], + ) + + return +} diff --git a/components/ui/floating-dock.tsx b/components/ui/floating-dock.tsx new file mode 100644 index 000000000..54b014b2a --- /dev/null +++ b/components/ui/floating-dock.tsx @@ -0,0 +1,157 @@ +import { cn } from '@/lib/utils' +import { + AnimatePresence, + MotionValue, + motion, + useMotionValue, + useSpring, + useTransform, +} from 'framer-motion' +import Link from 'next/link' +import { useRef, useState } from 'react' + +export const FloatingDock = ({ + items, + desktopClassName, + mobileClassName, +}: { + items: { title: string; icon: React.ReactNode; href: string }[] + desktopClassName?: string + mobileClassName?: string +}) => { + return ( + <> + + + + ) +} + +const FloatingDockMobile = ({ + items, + className, +}: { + items: { title: string; icon: React.ReactNode; href: string }[] + className?: string +}) => { + return ( +
+
+ {items.map((item) => ( + +
{item.icon}
+ + ))} +
+
+ ) +} + +const FloatingDockDesktop = ({ + items, + className, +}: { + items: { title: string; icon: React.ReactNode; href: string }[] + className?: string +}) => { + const mouseX = useMotionValue(Infinity) + return ( + mouseX.set(e.pageX)} + onMouseLeave={() => mouseX.set(Infinity)} + className={cn( + 'ml-auto hidden md:flex h-16 gap-4 items-end rounded-2xl bg-transparent px-4 pb-3', + className, + )} + > + {items.map((item) => ( + + ))} + + ) +} + +function IconContainer({ + mouseX, + title, + icon, + href, +}: { + mouseX: MotionValue + title: string + icon: React.ReactNode + href: string +}) { + const ref = useRef(null) + + const distance = useTransform(mouseX, (val) => { + const bounds = ref.current?.getBoundingClientRect() ?? { x: 0, width: 0 } + + return val - bounds.x - bounds.width / 2 + }) + + const widthTransform = useTransform(distance, [-150, 0, 150], [40, 80, 40]) + const heightTransform = useTransform(distance, [-150, 0, 150], [40, 80, 40]) + + const widthTransformIcon = useTransform(distance, [-150, 0, 150], [20, 40, 20]) + const heightTransformIcon = useTransform(distance, [-150, 0, 150], [20, 40, 20]) + + const width = useSpring(widthTransform, { + mass: 0.1, + stiffness: 150, + damping: 12, + }) + const height = useSpring(heightTransform, { + mass: 0.1, + stiffness: 150, + damping: 12, + }) + + const widthIcon = useSpring(widthTransformIcon, { + mass: 0.1, + stiffness: 150, + damping: 12, + }) + const heightIcon = useSpring(heightTransformIcon, { + mass: 0.1, + stiffness: 150, + damping: 12, + }) + + const [hovered, setHovered] = useState(false) + + return ( + + setHovered(true)} + onMouseLeave={() => setHovered(false)} + className="aspect-square rounded-full bg-gray-100 dark:bg-neutral-900 flex items-center justify-center relative" + > + + {hovered && ( + + {title} + + )} + + + {icon} + + + + ) +} diff --git a/components/ui/hover-border-gradient.tsx b/components/ui/hover-border-gradient.tsx new file mode 100644 index 000000000..9de91c65a --- /dev/null +++ b/components/ui/hover-border-gradient.tsx @@ -0,0 +1,89 @@ +import React, { useState, useEffect } from 'react' +import { motion } from 'framer-motion' +import { cn } from '@/lib/utils' + +type Direction = 'TOP' | 'LEFT' | 'BOTTOM' | 'RIGHT' + +export function HoverBorderGradient({ + children, + containerClassName, + className, + as: Tag = 'button', + duration = 1, + clockwise = true, + ...props +}: React.PropsWithChildren< + { + as?: React.ElementType + containerClassName?: string + className?: string + duration?: number + clockwise?: boolean + } & React.HTMLAttributes +>) { + const [hovered, setHovered] = useState(false) + const [direction, setDirection] = useState('TOP') + + const rotateDirection = (currentDirection: Direction): Direction => { + const directions: Direction[] = ['TOP', 'LEFT', 'BOTTOM', 'RIGHT'] + const currentIndex = directions.indexOf(currentDirection) + const nextIndex = clockwise + ? (currentIndex - 1 + directions.length) % directions.length + : (currentIndex + 1) % directions.length + return directions[nextIndex] + } + + const movingMap: Record = { + TOP: 'radial-gradient(20.7% 50% at 50% 0%, hsl(0, 0%, 100%) 0%, rgba(255, 255, 255, 0) 100%)', + LEFT: 'radial-gradient(16.6% 43.1% at 0% 50%, hsl(0, 0%, 100%) 0%, rgba(255, 255, 255, 0) 100%)', + BOTTOM: + 'radial-gradient(20.7% 50% at 50% 100%, hsl(0, 0%, 100%) 0%, rgba(255, 255, 255, 0) 100%)', + RIGHT: + 'radial-gradient(16.2% 41.199999999999996% at 100% 50%, hsl(0, 0%, 100%) 0%, rgba(255, 255, 255, 0) 100%)', + } + + const highlight = + 'radial-gradient(75% 181.15942028985506% at 50% 50%, #3275F8 0%, rgba(255, 255, 255, 0) 100%)' + + useEffect(() => { + if (!hovered) { + const interval = setInterval(() => { + setDirection((prevState: Direction) => rotateDirection(prevState)) + }, duration * 1000) + return () => clearInterval(interval) + } + }, [hovered]) + + return ( + { + setHovered(true) + }} + onMouseLeave={() => setHovered(false)} + className={cn( + 'relative flex rounded-full border content-center bg-black/20 hover:bg-black/10 transition duration-500 dark:bg-white/20 items-center flex-col flex-nowrap gap-10 h-min justify-center overflow-visible p-px decoration-clone w-fit', + containerClassName, + )} + {...props} + > +
+ {children} +
+ +
+ + ) +} diff --git a/components/ui/number-ticker.tsx b/components/ui/number-ticker.tsx new file mode 100644 index 000000000..a7706acc6 --- /dev/null +++ b/components/ui/number-ticker.tsx @@ -0,0 +1,46 @@ +'use client' + +import { useEffect, useRef } from 'react' +import { useInView, useMotionValue, useSpring } from 'framer-motion' + +import { cn } from '@/lib/utils' + +export default function NumberTicker({ + value, + direction = 'up', + delay = 0, + className, +}: { + value: number + direction?: 'up' | 'down' + className?: string + delay?: number +}) { + const ref = useRef(null) + const startValue = direction === 'down' ? value : Math.floor(value * 0.75) + const motionValue = useMotionValue(startValue) + const springValue = useSpring(motionValue, { + damping: 60, + stiffness: 150, + }) + const isInView = useInView(ref, { once: true, margin: '0px' }) + + useEffect(() => { + isInView && + setTimeout(() => { + motionValue.set(direction === 'down' ? Math.floor(value * 0.75) : value) + }, delay * 1000) + }, [motionValue, isInView, delay, value, direction]) + + useEffect( + () => + springValue.on('change', (latest) => { + if (ref.current) { + ref.current.textContent = Intl.NumberFormat('en-US').format(Number(latest.toFixed(0))) + } + }), + [springValue], + ) + + return +} diff --git a/components/ui/sparkles.tsx b/components/ui/sparkles.tsx new file mode 100644 index 000000000..31dd6029a --- /dev/null +++ b/components/ui/sparkles.tsx @@ -0,0 +1,425 @@ +'use client' +import React, { useId, useEffect, useState } from 'react' +import Particles, { initParticlesEngine } from '@tsparticles/react' +import type { Container, SingleOrMultiple } from '@tsparticles/engine' +import { loadSlim } from '@tsparticles/slim' +import { cn } from '@/lib/utils' +import { motion, useAnimation } from 'framer-motion' + +type ParticlesProps = { + id?: string + className?: string + background?: string + particleSize?: number + minSize?: number + maxSize?: number + speed?: number + particleColor?: string + particleDensity?: number +} +export const SparklesCore = (props: ParticlesProps) => { + const { id, className, background, minSize, maxSize, speed, particleColor, particleDensity } = + props + const [init, setInit] = useState(false) + useEffect(() => { + initParticlesEngine(async (engine) => { + await loadSlim(engine) + }).then(() => { + setInit(true) + }) + }, []) + const controls = useAnimation() + + const particlesLoaded = async (container?: Container) => { + if (container) { + controls.start({ + opacity: 1, + transition: { + duration: 1, + }, + }) + } + } + + const generatedId = useId() + return ( + + {init && ( + | undefined, + }, + groups: {}, + move: { + angle: { + offset: 0, + value: 90, + }, + attract: { + distance: 200, + enable: false, + rotate: { + x: 3000, + y: 3000, + }, + }, + center: { + x: 50, + y: 50, + mode: 'percent', + radius: 0, + }, + decay: 0, + distance: {}, + direction: 'none', + drift: 0, + enable: true, + gravity: { + acceleration: 9.81, + enable: false, + inverse: false, + maxSpeed: 50, + }, + path: { + clamp: true, + delay: { + value: 0, + }, + enable: false, + options: {}, + }, + outModes: { + default: 'out', + }, + random: false, + size: false, + speed: { + min: 0.1, + max: 1, + }, + spin: { + acceleration: 0, + enable: false, + }, + straight: false, + trail: { + enable: false, + length: 10, + fill: {}, + }, + vibrate: false, + warp: false, + }, + number: { + density: { + enable: true, + width: 400, + height: 400, + }, + limit: { + mode: 'delete', + value: 0, + }, + value: particleDensity || 120, + }, + opacity: { + value: { + min: 0.1, + max: 1, + }, + animation: { + count: 0, + enable: true, + speed: speed || 4, + decay: 0, + delay: 0, + sync: false, + mode: 'auto', + startValue: 'random', + destroy: 'none', + }, + }, + reduceDuplicates: false, + shadow: { + blur: 0, + color: { + value: '#000', + }, + enable: false, + offset: { + x: 0, + y: 0, + }, + }, + shape: { + close: true, + fill: true, + options: {}, + type: 'circle', + }, + size: { + value: { + min: minSize || 1, + max: maxSize || 3, + }, + animation: { + count: 0, + enable: false, + speed: 5, + decay: 0, + delay: 0, + sync: false, + mode: 'auto', + startValue: 'random', + destroy: 'none', + }, + }, + stroke: { + width: 0, + }, + zIndex: { + value: 0, + opacityRate: 1, + sizeRate: 1, + velocityRate: 1, + }, + destroy: { + bounds: {}, + mode: 'none', + split: { + count: 1, + factor: { + value: 3, + }, + rate: { + value: { + min: 4, + max: 9, + }, + }, + sizeOffset: true, + }, + }, + roll: { + darken: { + enable: false, + value: 0, + }, + enable: false, + enlighten: { + enable: false, + value: 0, + }, + mode: 'vertical', + speed: 25, + }, + tilt: { + value: 0, + animation: { + enable: false, + speed: 0, + decay: 0, + sync: false, + }, + direction: 'clockwise', + enable: false, + }, + twinkle: { + lines: { + enable: false, + frequency: 0.05, + opacity: 1, + }, + particles: { + enable: false, + frequency: 0.05, + opacity: 1, + }, + }, + wobble: { + distance: 5, + enable: false, + speed: { + angle: 50, + move: 10, + }, + }, + life: { + count: 0, + delay: { + value: 0, + sync: false, + }, + duration: { + value: 0, + sync: false, + }, + }, + rotate: { + value: 0, + animation: { + enable: false, + speed: 0, + decay: 0, + sync: false, + }, + direction: 'clockwise', + path: false, + }, + orbit: { + animation: { + count: 0, + enable: false, + speed: 1, + decay: 0, + delay: 0, + sync: false, + }, + enable: false, + opacity: 1, + rotation: { + value: 45, + }, + width: 1, + }, + links: { + blink: false, + color: { + value: '#fff', + }, + consent: false, + distance: 100, + enable: false, + frequency: 1, + opacity: 1, + shadow: { + blur: 5, + color: { + value: '#000', + }, + enable: false, + }, + triangles: { + enable: false, + frequency: 1, + }, + width: 1, + warp: false, + }, + repulse: { + value: 0, + enabled: false, + distance: 1, + duration: 1, + factor: 1, + speed: 1, + }, + }, + detectRetina: true, + }} + /> + )} + + ) +} diff --git a/next.config.mjs b/next.config.mjs index d2e3046a6..d9453e098 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -42,6 +42,15 @@ const nonPermanentRedirects = [ ['/features', '/docs/features'], /* Danny moved these :P */ ['/docs/configuration/librechat_yaml/ai_endpoints/azure', '/docs/configuration/azure'], + ['/docs/user_guides/artifacts', '/docs/features/artifacts'], + ['/docs/user_guides/fork', '/docs/features/fork'], + ['/docs/user_guides/authentication', '/docs/features/authentication'], + ['/docs/user_guides/mod_system', '/docs/features/mod_system'], + ['/docs/user_guides/search', '/docs/features/search'], + ['/docs/user_guides/import_convos', '/docs/features/import_convos'], + ['/docs/user_guides/password_reset', '/docs/features/password_reset'], + ['/docs/user_guides/rag_api', '/docs/features/rag_api'], + ['/docs/user_guides/plugins', '/docs/features/plugins'], // Redirect to overview pages ...[].map((path) => [path, path + '/overview']), ] @@ -64,7 +73,7 @@ const withNextra = nextra({ // next config const nextraConfig = withNextra({ experimental: { - esmExternals: 'loose', // <-- add this + esmExternals: 'loose', serverComponentsExternalPackages: ['mongoose'], scrollRestoration: true, }, diff --git a/package.json b/package.json index 13dc9d033..c6d357b10 100644 --- a/package.json +++ b/package.json @@ -31,17 +31,21 @@ "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.0.4", "@supabase/supabase-js": "^2.43.1", + "@tabler/icons-react": "^3.21.0", "@tanstack/react-table": "^8.16.0", + "@tsparticles/engine": "^3.7.1", + "@tsparticles/react": "^3.0.0", + "@tsparticles/slim": "^3.7.1", "@vercel/analytics": "^1.2.2", "@vercel/og": "^0.6.2", "@vercel/speed-insights": "^1.0.10", - "@vidstack/react": "^0.6.14", + "@vidstack/react": "^0.6.15", "ai": "^3.1.5", - "ajv": "^8.12.0", + "ajv": "^8.13.0", "autoprefixer": "^10.4.19", "axios": "^1.6.8", "class-variance-authority": "^0.7.0", - "clsx": "^2.1.0", + "clsx": "^2.1.1", "eslint-config-next": "14.2.3", "eslint-plugin-unicorn": "^53.0.0", "framer-motion": "^11.1.9", @@ -53,7 +57,7 @@ "lucide-react": "^0.378.0", "mongodb": "^6.6.1", "mongoose": "^8.3.4", - "next": "^14.2.1", + "next": "^14.2.3", "next-auth": "^4.24.7", "next-sitemap": "^4.2.3", "nextra": "3.0.0-alpha.22", @@ -61,13 +65,14 @@ "openai-edge": "^1.2.2", "postcss": "^8.4.38", "posthog-js": "^1.131.4", - "react": "^18.2.0", + "react": "^18.3.1", "react-ace": "^11.0.1", - "react-dom": "^18.2.0", + "react-dom": "^18.3.1", "react-hook-form": "^7.51.4", "react-hot-toast": "^2.4.1", "react-icons": "^5.2.1", "react-markdown": "^9.0.1", + "react-responsive": "^10.0.0", "react-select": "^5.8.0", "react-social-icons": "^6.16.0", "react-syntax-highlighter": "^15.5.0", @@ -75,7 +80,7 @@ "remark-gfm": "^4.0.0", "sharp": "^0.33.3", "styled-components": "^6.1.11", - "tailwind-merge": "^2.2.2", + "tailwind-merge": "^2.3.0", "tailwindcss": "^3.4.3", "tailwindcss-animate": "^1.0.7", "validator": "^13.12.0", @@ -83,10 +88,11 @@ "zod": "^3.23.8" }, "devDependencies": { - "@next/bundle-analyzer": "^14.2.1", + "@next/bundle-analyzer": "^14.2.3", "@types/node": "18.16.0", - "@typescript-eslint/eslint-plugin": "^7.7.0", - "@typescript-eslint/parser": "^7.7.0", + "@types/react": "^18.3.12", + "@typescript-eslint/eslint-plugin": "^7.8.0", + "@typescript-eslint/parser": "^7.8.0", "cross-env": "^7.0.3", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -100,7 +106,7 @@ "typescript": "^5.4.5" }, "optionalDependencies": { - "crisp-sdk-web": "^1.0.21" + "crisp-sdk-web": "^1.0.25" }, "nextBundleAnalysis": { "budget": 358400, diff --git a/pages/_meta.ts b/pages/_meta.ts index eeaa57788..bf38e9cae 100644 --- a/pages/_meta.ts +++ b/pages/_meta.ts @@ -7,6 +7,11 @@ export default { layout: 'raw', }, }, + code_interpreter: { + type: 'page', + title: '✨ Code Interpreter', + href: 'https://code.librechat.ai/pricing', + }, docs: { type: 'page', title: 'Docs', diff --git a/pages/docs/_meta.ts b/pages/docs/_meta.ts index 8ab5cd78b..0e5739723 100644 --- a/pages/docs/_meta.ts +++ b/pages/docs/_meta.ts @@ -1,15 +1,21 @@ export default { index: 'Get Started', quick_start: { - title: 'Quick Start', + title: '⚡ Quick Start', children: { index: 'Quick Start Overview', }, }, - local: 'Local Installation', - remote: 'Remote Hosting', - configuration: 'Configuration', - user_guides: 'User Guides', + features: { + title: '✨ Features', + children: { + index: 'Features Overview', + }, + }, + local: '📦 Local Installation', + remote: '☁️ Remote Hosting', + configuration: '⚙️ Configuration', + user_guides: '📘 User Guides', contributing: { // "title": "Contributing", type: 'separator', diff --git a/pages/docs/configuration/authentication/email.mdx b/pages/docs/configuration/authentication/email.mdx index 19a58d412..883123a31 100644 --- a/pages/docs/configuration/authentication/email.mdx +++ b/pages/docs/configuration/authentication/email.mdx @@ -5,7 +5,7 @@ description: This guide explains how to configure the secure email verification/ # Email verification and Password Reset -For a quick overview, refer to the user guide provided here: [Password Reset](/docs/user_guides/password_reset) +For a quick overview, refer to the user guide provided here: [Password Reset](/docs/features/password_reset) ## General setup diff --git a/pages/docs/configuration/authentication/index.mdx b/pages/docs/configuration/authentication/index.mdx index c2bb5d9d8..0f1141fce 100644 --- a/pages/docs/configuration/authentication/index.mdx +++ b/pages/docs/configuration/authentication/index.mdx @@ -7,7 +7,7 @@ description: This guide explains how to use the user authentication system of Li ## General -For a quick overview, refer to the user guide provided here: [Authentication](/docs/user_guides/authentication) +For a quick overview, refer to the user guide provided here: [Authentication](/docs/features/authentication) Here's an overview of the general configuration. diff --git a/pages/docs/configuration/dotenv.mdx b/pages/docs/configuration/dotenv.mdx index ca1ca3dd7..9451d0fe1 100644 --- a/pages/docs/configuration/dotenv.mdx +++ b/pages/docs/configuration/dotenv.mdx @@ -309,7 +309,7 @@ Note: You can customize the available models, separated by commas, without space ### Plugins Here are some useful resources about plugins: -* [Introduction](/docs/user_guides/plugins) +* [Introduction](/docs/features/plugins) * [Make Your Own](/docs/development/tools_and_plugins) #### General Configuration diff --git a/pages/docs/configuration/librechat_yaml/object_structure/interface.mdx b/pages/docs/configuration/librechat_yaml/object_structure/interface.mdx index 14b6628e7..3aa2d4072 100644 --- a/pages/docs/configuration/librechat_yaml/object_structure/interface.mdx +++ b/pages/docs/configuration/librechat_yaml/object_structure/interface.mdx @@ -16,6 +16,7 @@ These are fields under `interface`: - `prompts` - `bookmarks` - `multiConvo` + - `agents` **Notes:** @@ -47,6 +48,7 @@ interface: prompts: true bookmarks: true multiConvo: true + agents: true ``` ## privacyPolicy @@ -220,4 +222,23 @@ interface: ```yaml filename="interface / multiConvo" interface: multiConvo: true +``` + +## agents + +More info on [Agents](/docs/features/agents) + +**Key:** + + +**Default:** `true` + +**Example:** +```yaml filename="interface / agents" +interface: + agents: true ``` \ No newline at end of file diff --git a/pages/docs/configuration/meilisearch.mdx b/pages/docs/configuration/meilisearch.mdx index 7de5013a1..b2974ac44 100644 --- a/pages/docs/configuration/meilisearch.mdx +++ b/pages/docs/configuration/meilisearch.mdx @@ -4,7 +4,7 @@ description: Setting up MeiliSearch for LibreChat --- # Setting up MeiliSearch for LibreChat -- See: [Search feature in LibreChat](/docs/user_guides/search) for a quick overview. +- See: [Search feature in LibreChat](/docs/features/search) for a quick overview. MeiliSearch is a powerful, open-source search engine that enhances LibreChat's functionality by enabling full-text search, typo tolerance, and instant search results for past conversations. diff --git a/pages/docs/configuration/mod_system.mdx b/pages/docs/configuration/mod_system.mdx index 46928e442..68e58d9b8 100644 --- a/pages/docs/configuration/mod_system.mdx +++ b/pages/docs/configuration/mod_system.mdx @@ -8,7 +8,7 @@ The Automated Moderation System uses a scoring mechanism to track user violation In production, you should have Cloudflare or some other DDoS protection in place to really protect the server from excessive requests, but these changes will largely protect you from the single or several bad actors targeting your deployed instance for proxying. -**For further details, refer to the user guide provided here: [Automated Moderation](/docs/user_guides/mod_system)** +**For further details, refer to the user guide provided here: [Automated Moderation](/docs/features/mod_system)** ## Setup diff --git a/pages/docs/configuration/rag_api.mdx b/pages/docs/configuration/rag_api.mdx index b94ed1037..a7674e192 100644 --- a/pages/docs/configuration/rag_api.mdx +++ b/pages/docs/configuration/rag_api.mdx @@ -5,7 +5,7 @@ description: Configure Retrieval-Augmented Generation (RAG) API for document ind # RAG API Configuration -**For further details about RAG, refer to the user guide provided here: [RAG API Presentation](/docs/user_guides/rag_api)** +**For further details about RAG, refer to the user guide provided here: [RAG API Presentation](/docs/features/rag_api)** --- @@ -17,7 +17,7 @@ It will still be useful to implement usage of the RAG API with the Assistants AP Plugins support is not enabled as the whole "plugin/tool" framework will get a complete rework soon, making tools available to most endpoints (ETA Summer 2024). -**Still confused about RAG?** [Read the RAG API Presentation](/docs/user_guides/rag_api#what-is-rag) explaining the general concept in more detail with a link to a helpful video. +**Still confused about RAG?** [Read the RAG API Presentation](/docs/features/rag_api#what-is-rag) explaining the general concept in more detail with a link to a helpful video. ## Setup diff --git a/pages/docs/features/_meta.ts b/pages/docs/features/_meta.ts new file mode 100644 index 000000000..42206a16d --- /dev/null +++ b/pages/docs/features/_meta.ts @@ -0,0 +1,7 @@ +export default { + index: 'Overview', + agents: 'Agents', + code_interpreter: 'Code Interpreter API', + // local_setup: 'Local Setup', + // custom_endpoints: 'Custom Endpoints', +} diff --git a/pages/docs/features/agents.mdx b/pages/docs/features/agents.mdx new file mode 100644 index 000000000..7cfde71c1 --- /dev/null +++ b/pages/docs/features/agents.mdx @@ -0,0 +1,148 @@ +--- +title: AI Agents - LibreChat's No-Code Agentic Framework +description: Learn how to create, customize, and leverage LibreChat's AI Agents - a powerful framework for building custom AI assistants with any model provider. +--- + +# Agents: Build Custom AI Assistants + +LibreChat's AI Agents feature provides a flexible framework for creating custom AI assistants powered by various model providers. + +This feature is similar to OpenAI's Assistants API and ChatGPT's GPTs, but with broader model support and a no-code implementation, letting you build sophisticated assistants with specialized capabilities. + +## Getting Started + +To create a new agent, select "Agents" from the endpoint menu and open the Agent Builder panel found in the Side Panel. + +![Agents - Endpoints Menu](/images/agents/endpoints_menu.png) + +The creation form includes: + +- **Avatar**: Upload a custom avatar to personalize your agent +- **Name**: Choose a distinctive name for your agent +- **Description**: Optional details about your agent's purpose +- **Instructions**: System instructions that define your agent's behavior +- **Model**: Select from available providers and models + +**Existing agents can be selected from the top dropdown of the Side Panel.** +- **Also by mention with "@" in the chat input.** + +![Agents - Mention](/images/agents/mention.png) + +### Model Configuration + +The model parameters interface allows fine-tuning of your agent's responses: + +- Temperature (0-1 scale for response creativity) +- Max context tokens +- Max output tokens +- Additional provider-specific settings + +## Agent Capabilities + +### Code Interpreter + +When enabled, Code Interpreter allows your agent to: +- Execute code in multiple languages, including: + - Python, JavaScript, TypeScript, Go, C, C++, Java, PHP, Rust, and Fortran +- Process files securely through the LibreChat Code Interpreter API +- Run code without local setup, configuration, or sandbox deployment +- Handle file uploads and downloads seamlessly +- [More info about the Code Interpreter API](/docs/features/code_interpreter) + - **Requires an API Subscription from [code.librechat.ai](https://code.librechat.ai/pricing)** + +### File Search Capabilities + +The File Search feature enables: +- RAG (Retrieval-Augmented Generation) functionality +- Semantic search across uploaded documents +- Context-aware responses based on file contents +- File attachment support at both agent and chat thread levels + +### Tools Integration + +Agents can also be enhanced with various built-in tools: + +- **DALL-E-3**: Image generation from text descriptions +- **Tavily Search**: Advanced search API with diverse data source integration +- **Calculator**: Mathematical calculations +- **Google Search**: Access to web search functionality +- **Stable Diffusion**: Text-to-image generation +- **Azure AI Search**: Information retrieval +- **Traversaal**: A robust search API for LLM Agents +- **Wolfram**: Computational and mathematical capabilities + +More tool integrations are planned, including [Model Context Provider](https://github.com/danny-avila/LibreChat/issues/4876) support. + +## File Management + +Agents support three distinct file upload categories: + +1. **Image Upload**: For visual content processing +2. **File Search Upload**: Documents for RAG capabilities +3. **Code Interpreter Upload**: Files for code processing + +Files can be attached directly to the agent configuration or within individual chat threads. + +## Sharing and Permissions + +### Administrator Controls + +Administrators have access to global permission settings: + +- Enable/disable agent sharing across all users +- Control agent usage permissions +- Manage agent creation rights +- Configure platform-wide settings + +The use of agents for all users can also be disabled via config, [more info](/docs/configuration/librechat_yaml/object_structure/interface). + +### User-Level Sharing + +Individual users can: +- Share their agents with all users (if enabled) +- Control editing permissions for shared agents +- Manage access to their created agents + +*Note: Only original authors and administrators can delete shared agents* + +## Best Practices + +- Provide clear, specific instructions for your agent +- Carefully consider which tools are necessary for your use case +- Organize files appropriately across the three upload categories +- Review permission settings before sharing agents +- Test your agent thoroughly before deploying to other users + +## Recap + +1. Select "Agents" from the endpoint dropdown menu +2. Open the Agent Builder panel +3. Fill out the required agent details +4. Configure desired capabilities (Code Interpreter, File Search) +5. Add necessary tools and files +6. Set sharing permissions if desired +7. Create and start using your agent + +## What's next? + +LibreChat Agents usher in a new era for the app where future pipelines can be streamlined via Agents for specific tasks and workflows across your experience in LibreChat. + +Future updates will include: +- General improvements to the current Agent experience +- Multi-agent orchestration for complex workflows +- Ability to customize agents for various functions: titling (chat thread naming), memory management (user context/history), and prompt enhancement (input assistance/predictions) +- More tools, tool parameters, and [Model Context Provider](https://github.com/danny-avila/LibreChat/issues/4876) support for tools and file resources. + +Furthermore, the update introduces a new paradigm for LibreChat, as its underlying architecture provides a much needed refresh for the app, optimizing both the user experience and overall app performance. + +To highlight one notable optimization, an AI generation of roughly 1000 tokens will transfer about 1 MB of data using traditional endpoints (at the time of writing, any endpoint option besides Agents and AWS Bedrock). + +Using an agent, the same generation will transfer about about 52 kb of data, a 95% reduction in data transfer, which is that much less of a load on the server and the user's device. + +--- + +AI Agents in LibreChat provide a powerful way to create specialized assistants without coding knowledge while maintaining the flexibility to work with your preferred AI models and providers. + +--- + +#LibreChat #AIAssistants #NoCode #OpenSource \ No newline at end of file diff --git a/pages/docs/user_guides/artifacts.mdx b/pages/docs/features/artifacts.mdx similarity index 100% rename from pages/docs/user_guides/artifacts.mdx rename to pages/docs/features/artifacts.mdx diff --git a/pages/docs/user_guides/authentication.mdx b/pages/docs/features/authentication.mdx similarity index 98% rename from pages/docs/user_guides/authentication.mdx rename to pages/docs/features/authentication.mdx index 7b9e6edd4..0ddcdaa3f 100644 --- a/pages/docs/user_guides/authentication.mdx +++ b/pages/docs/features/authentication.mdx @@ -1,5 +1,5 @@ --- -title: Authentication System +title: Authentication description: Quick overview of the user authentication system of LibreChat, which offers secure and easy email and social logins. --- diff --git a/pages/docs/features/code_interpreter.mdx b/pages/docs/features/code_interpreter.mdx new file mode 100644 index 000000000..fc141c087 --- /dev/null +++ b/pages/docs/features/code_interpreter.mdx @@ -0,0 +1,136 @@ +--- +title: Code Interpreter API +description: Execute code securely and manage files seamlessly with LibreChat's Code Interpreter API +--- + +# Code Interpreter API + +## Introduction + +LibreChat's Code Interpreter API provides a secure and hassle-free way to execute code and manage files through a simple API interface. Whether you're using it through LibreChat's Agents or integrating it directly into your applications, the API offers a powerful sandbox environment for running code in multiple programming languages. + + + +## Subscription +**Access to this feature requires an [API subscription, get started here](https://code.librechat.ai/pricing).** + +## Getting Started + +1. Visit [code.librechat.ai](https://code.librechat.ai/pricing) to get your API key +2. Integrate the API into your application or use it through LibreChat +3. Start executing code and generating files securely + +## Key Features + +### Supported Languages + +Execute code in multiple programming languages: +- Python, Node.js (JS/TS), Go, C/C++, Java, PHP, Rust, Fortran + +### Seamless File Handling + +- Upload files for processing +- Download generated outputs +- Secure file management +- Session-based file organization + +### Security & Convenience + +- Secure sandboxed execution environment +- No local setup required +- No server deployment needed +- No configuration management + +## Using the API + +### In LibreChat + +The API has first-class support in LibreChat through two main methods: + +1. **[AI Agents](/docs/features/agents#code-interpreter)**: Enable Code Interpreter in your agent's configuration to allow it to execute code and process files automatically. + +2. **Manual Execution**: Use the "Run Code" button in code blocks within the chat interface, as shown here: + +![Code Interpreter in LibreChat](/images/agents/run_code.png) + +To set up your API key: + +a. Per-user setup: input your API key in LibreChat when prompted (using the above methods) +b. Global setup: use `LIBRECHAT_CODE_API_KEY` environment variable in the .env file of your project (provides access to all users) + +### Direct API Integration + +The Code Interpreter API can be integrated into any application using a simple API key authentication: + +1. Get your API key from [code.librechat.ai](https://code.librechat.ai/pricing) +2. Include the API key in your requests using the `x-api-key` header + +## Core Functionality + +### Code Execution + +- Run code snippets in supported languages +- Receive stdout/stderr output +- Get execution statistics (memory usage, CPU time) +- Handle program arguments +- Access execution status and results + +### File Operations + +- Upload input files +- Download generated outputs +- List available files +- Delete unnecessary files +- Manage file sessions + +### Limitations +- Code cannot access the network +- Only 10 files can be generated per run +- Generated files are limited to 10MB in size +- Max execution time is 15 seconds +- Max memory usage is 250 MB +- Higher limits are planned for premium subscriptions [(Enthusiast, Pro, Enterprise)](https://code.librechat.ai/pricing) + +## Use Cases + +- **Code Testing**: Test code snippets in multiple languages +- **File Processing**: Transform and analyze files programmatically +- **AI Applications**: Execute AI-generated code securely +- **Development Tools**: Build interactive coding environments +- **Objective Logic**: Verify code logic and correctness, improving AI models + +## Why a Paid API? + +While LibreChat remains free and open source under the MIT license, the Code Interpreter API is offered as a paid service for several key reasons: + +1. **Project Sustainability**: Subscribing to an API plan provides direct support to the project's development, even more effectively than [GitHub Sponsors](https://github.com/sponsors/danny-avila). Your subscription helps ensure LibreChat's continued growth and improvement. + +2. **Technical Considerations**: Including code execution capabilities in the core project would add significant complexity and hardware requirements that not all users need. The API service eliminates these concerns while maintaining a lightweight core application. + +3. **Managed Service Benefits**: + - No complex configuration + - Immediate availability + - Regular updates and maintenance + - Professional support + - Secure, sandboxed environment + +4. **Intellectual Property Protection**: The Code Interpreter's architecture represents significant innovation in secure, scalable sandbox technology. While similar solutions exist, they often lack the comprehensive security measures and scalability features that make this implementation unique. Keeping this component as a closed-source API helps protect these innovations and ensures the service maintains its high security and performance standards. + +Even if you only use code execution occasionally, subscribing helps support LibreChat's development while enhancing your experience with professional-grade features. It's a win-win that keeps the core project free while offering optional advanced capabilities for those who need them. + +--- + +## Conclusion + +The Code Interpreter API provides a secure, convenient way to execute code and manage files without the hassle of setting up and maintaining execution environments. Whether you're using it through LibreChat's Agents or integrating it directly into your applications, it offers a robust solution for code execution needs. + +For detailed technical specifications and API reference, please visit our [API Documentation](https://code.librechat.ai/docs). + +#LibreChat #CodeExecution #API #Development \ No newline at end of file diff --git a/pages/docs/user_guides/fork.mdx b/pages/docs/features/fork.mdx similarity index 100% rename from pages/docs/user_guides/fork.mdx rename to pages/docs/features/fork.mdx diff --git a/pages/docs/user_guides/import_convos.mdx b/pages/docs/features/import_convos.mdx similarity index 100% rename from pages/docs/user_guides/import_convos.mdx rename to pages/docs/features/import_convos.mdx diff --git a/pages/docs/features.mdx b/pages/docs/features/index.mdx similarity index 94% rename from pages/docs/features.mdx rename to pages/docs/features/index.mdx index 843534881..698439d7f 100644 --- a/pages/docs/features.mdx +++ b/pages/docs/features/index.mdx @@ -1,6 +1,6 @@ --- -title: Features -description: 'lol' +title: Overview +description: 'Explore the features of LibreChat, including AI model selection, conversation branching, multimodal chat, and more.' --- import LCLogo from '@/components/lcLogo' @@ -16,7 +16,7 @@ import Image from 'next/image' # ✨ Features -### 🪄 **[Artifacts](/docs/user_guides/artifacts)** +### 🪄 **[Artifacts](/docs/features/artifacts)** - **Generative UI:** React, HTML, Mermaid diagrams - Use any model you have setup, and iterate on created outputs @@ -70,7 +70,7 @@ import Image from 'next/image' - **Message Flexibility**: Edit previous messages and resubmit for better responses. - **Conversation Control**: Branch conversations to explore different discussion paths without losing context. -### 🌿 **[Fork Messages & Conversations](/docs/user_guides/fork)** +### 🌿 **[Fork Messages & Conversations](/docs/features/fork)** - **Advanced Context Management**: Split messages to create multiple conversation threads, enhancing control of your conversations' context. @@ -80,7 +80,7 @@ import Image from 'next/image' - 📸 **Claude 3, GPT-4, Gemini Vision, Llava and Assistants**: Upload and analyze images seamlessly with these advanced models. -#### **[File Interaction](/docs/user_guides/rag_api)** +#### **[File Interaction](/docs/features/rag_api)** - 🗃️ **Custom Endpoints, OpenAI, Azure, Anthropic, Google**: Chat with files using various powerful endpoints. @@ -136,11 +136,11 @@ import Image from 'next/image' - **Elevenlabs** - **Local AI** -### 📥 **[Conversation Import](/docs/user_guides/import_convos)** +### 📥 **[Conversation Import](/docs/features/import_convos)** - **Compatibility**: Import existing conversations from platforms like: - **LibreChat** - - **[ChatGPT](/docs/user_guides/import_convos#how-to-import-conversations-from-chat-gpt)** + - **[ChatGPT](/docs/features/import_convos#how-to-import-conversations-from-chat-gpt)** - **Chatbot UI** ### 📤 **Conversation Export** diff --git a/pages/docs/user_guides/mod_system.mdx b/pages/docs/features/mod_system.mdx similarity index 100% rename from pages/docs/user_guides/mod_system.mdx rename to pages/docs/features/mod_system.mdx diff --git a/pages/docs/user_guides/password_reset.mdx b/pages/docs/features/password_reset.mdx similarity index 100% rename from pages/docs/user_guides/password_reset.mdx rename to pages/docs/features/password_reset.mdx diff --git a/pages/docs/user_guides/plugins.mdx b/pages/docs/features/plugins.mdx similarity index 99% rename from pages/docs/user_guides/plugins.mdx rename to pages/docs/features/plugins.mdx index 2b3dbe617..6ca0e3e43 100644 --- a/pages/docs/user_guides/plugins.mdx +++ b/pages/docs/features/plugins.mdx @@ -2,7 +2,7 @@ title: Plugins description: This doc introduces the plugins endpoint, which enables you to use different LLMs and tools with more flexibility and control. You can change your settings and plugins on the fly, and use plugins to access various sources of information and assistance. --- -# Plugins Endpoint +# Plugins (Deprecated) ![intro-1](https://github.com/danny-avila/LibreChat/assets/32828263/7db788a5-2173-4115-b34b-43ea132dae69) diff --git a/pages/docs/user_guides/rag_api.mdx b/pages/docs/features/rag_api.mdx similarity index 100% rename from pages/docs/user_guides/rag_api.mdx rename to pages/docs/features/rag_api.mdx diff --git a/pages/docs/user_guides/search.mdx b/pages/docs/features/search.mdx similarity index 100% rename from pages/docs/user_guides/search.mdx rename to pages/docs/features/search.mdx diff --git a/pages/docs/user_guides/_meta.ts b/pages/docs/user_guides/_meta.ts index 24d88d3e5..62aacc49c 100644 --- a/pages/docs/user_guides/_meta.ts +++ b/pages/docs/user_guides/_meta.ts @@ -1,4 +1,3 @@ export default { index: 'Intro', - artifacts: 'Artifacts', } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c69ec793d..04abd501c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,69 +10,81 @@ importers: dependencies: '@calcom/embed-react': specifier: ^1.5.0 - version: 1.5.0(react-dom@18.3.1)(react@18.3.1) + version: 1.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@glidejs/glide': specifier: ^3.6.0 version: 3.6.0 '@headlessui/react': specifier: ^2.0.3 - version: 2.0.3(react-dom@18.3.1)(react@18.3.1) + version: 2.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@hookform/resolvers': specifier: ^3.3.4 - version: 3.3.4(react-hook-form@7.51.4) + version: 3.3.4(react-hook-form@7.51.4(react@18.3.1)) '@radix-ui/react-accordion': specifier: ^1.1.2 - version: 1.1.2(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-avatar': specifier: ^1.0.4 - version: 1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dialog': specifier: ^1.0.5 - version: 1.0.5(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.5(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.0.6 - version: 2.0.6(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + version: 2.0.6(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-icons': specifier: ^1.3.0 version: 1.3.0(react@18.3.1) '@radix-ui/react-label': specifier: ^2.0.2 - version: 2.0.2(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + version: 2.0.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-select': specifier: ^2.0.0 - version: 2.0.0(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + version: 2.0.0(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.0.3 - version: 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.0.2 - version: 1.0.2(@types/react@18.3.1)(react@18.3.1) + version: 1.0.2(@types/react@18.3.12)(react@18.3.1) '@radix-ui/react-tabs': specifier: ^1.0.4 - version: 1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@supabase/supabase-js': specifier: ^2.43.1 version: 2.43.1 + '@tabler/icons-react': + specifier: ^3.21.0 + version: 3.21.0(react@18.3.1) '@tanstack/react-table': specifier: ^8.16.0 - version: 8.16.0(react-dom@18.3.1)(react@18.3.1) + version: 8.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tsparticles/engine': + specifier: ^3.7.1 + version: 3.7.1 + '@tsparticles/react': + specifier: ^3.0.0 + version: 3.0.0(@tsparticles/engine@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tsparticles/slim': + specifier: ^3.7.1 + version: 3.7.1 '@vercel/analytics': specifier: ^1.2.2 - version: 1.2.2(next@14.2.3)(react@18.3.1) + version: 1.2.2(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@vercel/og': specifier: ^0.6.2 version: 0.6.2 '@vercel/speed-insights': specifier: ^1.0.10 - version: 1.0.10(next@14.2.3)(react@18.3.1)(svelte@4.2.16)(vue@3.4.27) + version: 1.0.10(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(svelte@4.2.16)(vue@3.4.27(typescript@5.4.5)) '@vidstack/react': - specifier: ^0.6.14 - version: 0.6.15(@types/react@18.3.1)(maverick.js@0.37.0)(react@18.3.1)(vidstack@0.6.15) + specifier: ^0.6.15 + version: 0.6.15(@types/react@18.3.12)(maverick.js@0.37.0)(react@18.3.1)(vidstack@0.6.15) ai: specifier: ^3.1.5 - version: 3.1.5(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.16)(vue@3.4.27)(zod@3.23.8) + version: 3.1.5(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.16)(vue@3.4.27(typescript@5.4.5))(zod@3.23.8) ajv: - specifier: ^8.12.0 + specifier: ^8.13.0 version: 8.13.0 autoprefixer: specifier: ^10.4.19 @@ -84,7 +96,7 @@ importers: specifier: ^0.7.0 version: 0.7.0 clsx: - specifier: ^2.1.0 + specifier: ^2.1.1 version: 2.1.1 eslint-config-next: specifier: 14.2.3 @@ -94,10 +106,10 @@ importers: version: 53.0.0(eslint@8.57.0) framer-motion: specifier: ^11.1.9 - version: 11.1.9(react-dom@18.3.1)(react@18.3.1) + version: 11.1.9(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) geist: specifier: ^1.3.0 - version: 1.3.0(next@14.2.3) + version: 1.3.0(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) gpt3-tokenizer: specifier: ^1.1.5 version: 1.1.5 @@ -120,20 +132,20 @@ importers: specifier: ^8.3.4 version: 8.3.4 next: - specifier: ^14.2.1 - version: 14.2.3(react-dom@18.3.1)(react@18.3.1) + specifier: ^14.2.3 + version: 14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-auth: specifier: ^4.24.7 - version: 4.24.7(next@14.2.3)(react-dom@18.3.1)(react@18.3.1) + version: 4.24.7(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-sitemap: specifier: ^4.2.3 - version: 4.2.3(next@14.2.3) + version: 4.2.3(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) nextra: specifier: 3.0.0-alpha.22 - version: 3.0.0-alpha.22(@types/react@18.3.1)(next@14.2.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + version: 3.0.0-alpha.22(@types/react@18.3.12)(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) nextra-theme-docs: specifier: 3.0.0-alpha.22 - version: 3.0.0-alpha.22(next@14.2.3)(nextra@3.0.0-alpha.22)(react-dom@18.3.1)(react@18.3.1) + version: 3.0.0-alpha.22(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.0.0-alpha.22(@types/react@18.3.12)(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) openai-edge: specifier: ^1.2.2 version: 1.2.2 @@ -144,38 +156,41 @@ importers: specifier: ^1.131.4 version: 1.131.4 react: - specifier: ^18.2.0 + specifier: ^18.3.1 version: 18.3.1 react-ace: specifier: ^11.0.1 - version: 11.0.1(react-dom@18.3.1)(react@18.3.1) + version: 11.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: - specifier: ^18.2.0 + specifier: ^18.3.1 version: 18.3.1(react@18.3.1) react-hook-form: specifier: ^7.51.4 version: 7.51.4(react@18.3.1) react-hot-toast: specifier: ^2.4.1 - version: 2.4.1(csstype@3.1.3)(react-dom@18.3.1)(react@18.3.1) + version: 2.4.1(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-icons: specifier: ^5.2.1 version: 5.2.1(react@18.3.1) react-markdown: specifier: ^9.0.1 - version: 9.0.1(@types/react@18.3.1)(react@18.3.1) + version: 9.0.1(@types/react@18.3.12)(react@18.3.1) + react-responsive: + specifier: ^10.0.0 + version: 10.0.0(react@18.3.1) react-select: specifier: ^5.8.0 - version: 5.8.0(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) + version: 5.8.0(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-social-icons: specifier: ^6.16.0 - version: 6.16.0(react-dom@18.3.1)(react@18.3.1) + version: 6.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-syntax-highlighter: specifier: ^15.5.0 version: 15.5.0(react@18.3.1) react-tweet: specifier: ^3.2.1 - version: 3.2.1(react-dom@18.3.1)(react@18.3.1) + version: 3.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remark-gfm: specifier: ^4.0.0 version: 4.0.0 @@ -184,9 +199,9 @@ importers: version: 0.33.3 styled-components: specifier: ^6.1.11 - version: 6.1.11(react-dom@18.3.1)(react@18.3.1) + version: 6.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: - specifier: ^2.2.2 + specifier: ^2.3.0 version: 2.3.0 tailwindcss: specifier: ^3.4.3 @@ -205,20 +220,23 @@ importers: version: 3.23.8 optionalDependencies: crisp-sdk-web: - specifier: ^1.0.21 + specifier: ^1.0.25 version: 1.0.25 devDependencies: '@next/bundle-analyzer': - specifier: ^14.2.1 + specifier: ^14.2.3 version: 14.2.3 '@types/node': specifier: 18.16.0 version: 18.16.0 + '@types/react': + specifier: ^18.3.12 + version: 18.3.12 '@typescript-eslint/eslint-plugin': - specifier: ^7.7.0 - version: 7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5) + specifier: ^7.8.0 + version: 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': - specifier: ^7.7.0 + specifier: ^7.8.0 version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) cross-env: specifier: ^7.0.3 @@ -234,7 +252,7 @@ importers: version: 3.1.5(eslint@8.57.0) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) + version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5) eslint-plugin-react: specifier: ^7.34.1 version: 7.34.1(eslint@8.57.0) @@ -289,16 +307,24 @@ packages: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.5': resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.24.5': resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.5': - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} + '@babel/parser@7.26.1': + resolution: {integrity: sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==} engines: {node: '>=6.0.0'} hasBin: true @@ -310,6 +336,10 @@ packages: resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + engines: {node: '>=6.9.0'} + '@braintree/sanitize-url@6.0.4': resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} @@ -590,6 +620,9 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -1256,6 +1289,14 @@ packages: '@swc/helpers@0.5.5': resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + '@tabler/icons-react@3.21.0': + resolution: {integrity: sha512-Qq0GnZzzccbv/zuMyXAUUPlogNAqx9KsF8cr/ev3bxs+GMObqNEjXv1eZl9GFzxyQTS435siJNU8A1BaIYhX8g==} + peerDependencies: + react: '>= 16' + + '@tabler/icons@3.21.0': + resolution: {integrity: sha512-5+GkkmWCr1wgMor5cOF1/YYflTQdc15y10FUikJ3HW8hDiFjfbuoAHJi17FT1vwsr1sA78rkJMn+fDoOOjnnPA==} + '@tanstack/react-table@8.16.0': resolution: {integrity: sha512-rKRjnt8ostqN2fercRVOIH/dq7MAmOENCMvVlKx6P9Iokhh6woBGnIZEkqsY/vEJf1jN3TqLOb34xQGLVRuhAg==} engines: {node: '>=12'} @@ -1284,6 +1325,121 @@ packages: '@theguild/remark-npm2yarn@0.3.0': resolution: {integrity: sha512-Fofw+9airYgjBd9G6PiHHCrptjyUybQ50JH9/5o9LCH54kggJ7stpCofzHjICB8L7VQbQ1Gwu23P/3CMVY1R4Q==} + '@tsparticles/basic@3.7.1': + resolution: {integrity: sha512-oJMJ3qzYUROYaOEsaFXkVynxT2OTWBXbQ9MNc1bJi/bVc1VOU44VN7X/KmiZjD+w1U+Qalk6BeVvDRwpFshblw==} + + '@tsparticles/engine@3.7.1': + resolution: {integrity: sha512-GYzBgq/oOE9YJdOL1++MoawWmYg4AvVct6CIrJGx84ZRb3U2owYmLsRGabYl0qX1CWWOvUG569043RJmyp/vQA==} + + '@tsparticles/interaction-external-attract@3.7.1': + resolution: {integrity: sha512-cpnMsFJ7ZJNKccpQvskKvSs1ofknByHE6FGqbEb17ij7HqvbECQOCOVKHPFnYipHe14cXor/Cd+nVisRcTASoQ==} + + '@tsparticles/interaction-external-bounce@3.7.1': + resolution: {integrity: sha512-npvU9Qt6WDonjezHqi+hWM44ga2Oh5yXdr8eSoJpvuHZrCP7rIdRSz5XseHouO1bMS9DbXk86sx4qwrhB5w58w==} + + '@tsparticles/interaction-external-bubble@3.7.1': + resolution: {integrity: sha512-WdbYL46lMfuf2g5kfVB1hhhxRBtEXDvnwz8PJwLKurSThL/27bqsqysyXsMzXtLByXUneGhtJTj4D5I5RYdgjA==} + + '@tsparticles/interaction-external-connect@3.7.1': + resolution: {integrity: sha512-hqx0ANIbjLIz/nxmk0LvqANBiNLLmVybbCA7N+xDHtEORvpKjNlKEvMz6Razocl6vRjoHZ/olSwcxIG84dh/cg==} + + '@tsparticles/interaction-external-grab@3.7.1': + resolution: {integrity: sha512-JMYpFW+7YvkpK5MYlt4Ec3Gwb5ZxS7RLVL8IRUSd5yJOw25husPTYg+FQywxrt5WhKe+tPsCAYo+uGIbTTHi9w==} + + '@tsparticles/interaction-external-pause@3.7.1': + resolution: {integrity: sha512-Kkp+7sCe24hawH0XvS1V6UCCuHfMvpLK7oseqSam9Gt4SyGrFvaqIXxkjXhRhn9MysJyKFPBV4/dtBM1HR9p6A==} + + '@tsparticles/interaction-external-push@3.7.1': + resolution: {integrity: sha512-4VoaR5jvXgQdB7irtq4uSZYr5c+D6TBTVEnLVpBfJhUs6jhw6mgN5g7yp5izIYkK0AlcO431MHn8dvJacvRLDw==} + + '@tsparticles/interaction-external-remove@3.7.1': + resolution: {integrity: sha512-FRBW7U7zD5MkO6/b7e8iSMk/UTtRLY2XiIVFZNsKri3Re3yPpvZzzd5tl2YlYGQlg1Xc+K8SJYMQQA3PtgQ/Tg==} + + '@tsparticles/interaction-external-repulse@3.7.1': + resolution: {integrity: sha512-mwM06dVmg2FEvHMQsPOfRBQWACbjf3qnelODkqI9DSVxQ0B8DESP4BYNXyraFGYv00YiPzRv5Xy/uejHdbsQUA==} + + '@tsparticles/interaction-external-slow@3.7.1': + resolution: {integrity: sha512-CfCAs3kUQC3pLOj0dbzn5AolQyBHgjxORLdfnYBhepvFV1BXB+4ytChRfXBzjykBPI6U+rCnw5Fk/vVjAroSFA==} + + '@tsparticles/interaction-particles-attract@3.7.1': + resolution: {integrity: sha512-UABbBORKaiItAT8vR0t4ye2H3VE6/Ah4zcylBlnq0Jd5yDkyP4rnkwhicaY6y4Zlfwyx+0PWdAC4f/ziFAyObg==} + + '@tsparticles/interaction-particles-collisions@3.7.1': + resolution: {integrity: sha512-0GY9++Gn2KXViyeifXWkH7a2UO5+uRwyS1rDeTN8eleyiq2j9zQf4xztZEIft8T0hTetq2rkWxQ92j2kev6NVA==} + + '@tsparticles/interaction-particles-links@3.7.1': + resolution: {integrity: sha512-BxCXAAOBNmEvlyOQzwprryW8YdtMIop2v4kgSCff5MCtDwYWoQIfzaQlWbBAkD9ey6BoF8iMjhBUaY1MnDecTA==} + + '@tsparticles/move-base@3.7.1': + resolution: {integrity: sha512-LPtMHwJHhzwfRIcSAk814fY9NcRiICwaEbapaJSYyP1DwscSXqOWoyAEWwzV9hMgAcPdsED6nGeg8RCXGm58lw==} + + '@tsparticles/move-parallax@3.7.1': + resolution: {integrity: sha512-B40azo6EJyMdI+kmIxpqWDaObPwODTYLDCikzkZ73n5tS6OhFUlkz81Scfo+g1iGTdryKFygUKhVGcG1EFuA5g==} + + '@tsparticles/plugin-easing-quad@3.7.1': + resolution: {integrity: sha512-nSwKCRe6C/noCi3dyZlm1GiQGask0aXdWDuS36b82iwzwQ01cBTXeXR25mLr4fsfMLFfYAZXyBxEMMpw3rkSiw==} + + '@tsparticles/plugin-hex-color@3.7.1': + resolution: {integrity: sha512-7xu3MV8EdNNejjYyEmrq5fCDdYAcqz/9VatLpnwtwR5Q5t2qI0tD4CrcGaFfC/rTAVJacfiJe02UV/hlj03KKA==} + + '@tsparticles/plugin-hsl-color@3.7.1': + resolution: {integrity: sha512-zzAI1CuoCMBJhgeYZ5Rq42nGbPg35ZzIs11eQegjsWG5Msm5QKSj60qPzERnoUcCc4HCKtIWP7rYMz6h3xpoEg==} + + '@tsparticles/plugin-rgb-color@3.7.1': + resolution: {integrity: sha512-taEraTpCYR6jpjflqBL95tN0zFU8JrAChXTt8mxVn7gddxoNMHI/LGymEPRCweLukwV6GQyAGOkeGEdWDPtYTA==} + + '@tsparticles/react@3.0.0': + resolution: {integrity: sha512-hjGEtTT1cwv6BcjL+GcVgH++KYs52bIuQGW3PWv7z3tMa8g0bd6RI/vWSLj7p//NZ3uTjEIeilYIUPBh7Jfq/Q==} + peerDependencies: + '@tsparticles/engine': ^3.0.2 + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@tsparticles/shape-circle@3.7.1': + resolution: {integrity: sha512-kmOWaUuFwuTtcCFYjuyJbdA5qDqWdGsharLalYnIczkLu2c1I8jJo/OmGePKhWn62ocu7mqKMomfElkIcw2AsA==} + + '@tsparticles/shape-emoji@3.7.1': + resolution: {integrity: sha512-mX18c/xhYVljS/r5Xbowzclw+1YwhtWoQFOOfkmjjZppA+RjgcwSKLvH6E20PaH1yVTjBOfSF+3POKpwsULzTg==} + + '@tsparticles/shape-image@3.7.1': + resolution: {integrity: sha512-eDzfkQhqLY6fb9QH2Vo9TGfdJBFFpYnojhxQxc7IdzIwOFMD3JK4B52RVl9oowR+rNE8dNp6P2L+eMAF4yld0g==} + + '@tsparticles/shape-line@3.7.1': + resolution: {integrity: sha512-lMPYApUpg7avxmYPfHHr4dQepZSNn/g0Q1/g2+lnTi8ZtUBiCZ2WMVy9R3GOzyozbnzigLQ6AJRnOpsUZV7H4g==} + + '@tsparticles/shape-polygon@3.7.1': + resolution: {integrity: sha512-5FrRfpYC3qnvV2nXBLE4Q0v+SMNWJO8xgzh6MBFwfptvqH4EOrqc/58eS5x0jlf+evwf9LjPgeGkOTcwaHHcYQ==} + + '@tsparticles/shape-square@3.7.1': + resolution: {integrity: sha512-7VCqbRwinjBZ+Ryme27rOtl+jKrET8qDthqZLrAoj3WONBqyt+R9q6SXAJ9WodqEX68IBvcluqbFY5qDZm8iAQ==} + + '@tsparticles/shape-star@3.7.1': + resolution: {integrity: sha512-3G4oipioyWKLEQYT11Sx3k6AObu3dbv/A5LRqGGTQm5IR6UACa+INwykZYI0a+MdJJMb83E0e4Fn3hlZbi0/8w==} + + '@tsparticles/slim@3.7.1': + resolution: {integrity: sha512-OtJEhud2KleX7OxiG2r/VYriHNIwTpFm3sPFy4EOJzAD0EW7KZoKXGpGn5gwGI1NWeB0jso92yNTrTC2ZTW0qw==} + + '@tsparticles/updater-color@3.7.1': + resolution: {integrity: sha512-QimV3yn17dcdJx7PpTwLtw9BhkQ0q8qFF035OdcZpnynBPAO/hg0zvSMpMGoeuDVFH02wWBy4h2/BYCv6wh6Sw==} + + '@tsparticles/updater-life@3.7.1': + resolution: {integrity: sha512-NY5gUrgO5AsARNC0usP9PKahXf7JCxbP/H1vzTfA0SJw4veANfWTldOvhIlcm2CHVP5P1b827p0hWsBHECwz7A==} + + '@tsparticles/updater-opacity@3.7.1': + resolution: {integrity: sha512-YcyviCooTv7SAKw7sxd84CfJqZ7dYPSdYZzCpedV6TKIObRiwLqXlyLXQGJ3YltghKQSCSolmVy8woWBCDm1qA==} + + '@tsparticles/updater-out-modes@3.7.1': + resolution: {integrity: sha512-Cb5sWquRtUYLSiFpmBjjYKRdpNV52diCo9+qMtK1oVlldDBhUwqO+1TQjdlaA2yl5DURlY9ZfOHXvY+IT7CHCw==} + + '@tsparticles/updater-rotate@3.7.1': + resolution: {integrity: sha512-toVHwl+h6SvtA8dyxSA2kMH2QdDA71vehuAa+HoRqf1y06h5kxyYiMKZFHCqDJ6lFfRPs47MjrC9dD2bDz14MQ==} + + '@tsparticles/updater-size@3.7.1': + resolution: {integrity: sha512-+Y0H0PnDJVIsJ+zHTyubYu1jtRFmVnY1dAv3VCjScIDw6bcpL/ol+HrtHTGIX0WbMyUfjCyALfAoaXi/Wm8VcQ==} + + '@tsparticles/updater-stroke-color@3.7.1': + resolution: {integrity: sha512-VHhQkCNuxjx/Hy7A+g0Yijb24T0+wQ3jNsF/yfrR9dEdZWSBiimZLvV1bilPdAeEtieAJTAZo2VNhcD1snF0iQ==} + '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -1317,6 +1473,9 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/hast@2.3.10': resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} @@ -1371,8 +1530,8 @@ packages: '@types/react-transition-group@4.4.10': resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} - '@types/react@18.3.1': - resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==} + '@types/react@18.3.12': + resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -1646,6 +1805,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + ai@3.1.5: resolution: {integrity: sha512-uE8EfcigIoep4NCqIOWsNUP/alyZ93XtsDsLjiop51y4lEtgJg0GzpbBRfYKaEK1O74HiQ2CmaeOOBlNVBBiIQ==} engines: {node: '>=18'} @@ -1734,6 +1898,10 @@ packages: aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.1: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} @@ -1809,8 +1977,9 @@ packages: axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - axobject-query@4.0.0: - resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} @@ -1880,8 +2049,8 @@ packages: camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - caniuse-lite@1.0.30001615: - resolution: {integrity: sha512-1IpazM5G3r38meiae0bHRnPhz+CBQ3ZLqbQMtrg+AsTPKAXgW38JNsXkyZ+v8waCsDmPq87lmfun5Q2AGysNEQ==} + caniuse-lite@1.0.30001673: + resolution: {integrity: sha512-WTrjUCSMp3LYX0nE12ECkV0a+e6LC85E0Auz75555/qr78Oc8YWhEPNfDd6SHdtlCMSzqtuXY0uyEMNRcsKpKw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2079,6 +2248,9 @@ packages: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} engines: {node: '>=4'} + css-mediaquery@0.1.2: + resolution: {integrity: sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==} + css-to-react-native@3.2.0: resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} @@ -3003,6 +3175,9 @@ packages: engines: {node: '>=18'} hasBin: true + hyphenate-style-name@1.1.0: + resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -3461,8 +3636,8 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} @@ -3471,6 +3646,9 @@ packages: markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + matchmediaquery@0.4.2: + resolution: {integrity: sha512-wrZpoT50ehYOudhDjt/YvUJc6eUzcdFPdmbizfgvswCKNHD1/OBOHYJpHie+HXpu6bSkEGieFMYk6VuutaiRfA==} + mathjax-full@3.2.2: resolution: {integrity: sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==} @@ -4172,6 +4350,9 @@ packages: picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -4242,6 +4423,10 @@ packages: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + posthog-js@1.131.4: resolution: {integrity: sha512-pKa1p6Q9jRU6s+xSluqGifODMncWTXRaeQw7yVet5U+0U56P0srdMO8NpzllIgDjYL9WLgUjDInucOBw5Cl/tA==} @@ -4364,6 +4549,12 @@ packages: '@types/react': optional: true + react-responsive@10.0.0: + resolution: {integrity: sha512-N6/UiRLGQyGUqrarhBZmrSmHi2FXSD++N5VbSKsBBvWfG0ZV7asvUBluSv5lSzdMyEVjzZ6Y8DL4OHABiztDOg==} + engines: {node: '>=14'} + peerDependencies: + react: '>=16.8.0' + react-select@5.8.0: resolution: {integrity: sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==} peerDependencies: @@ -4613,14 +4804,14 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - seroval-plugins@1.0.5: - resolution: {integrity: sha512-8+pDC1vOedPXjKG7oz8o+iiHrtF2WswaMQJ7CKFpccvSYfrzmvKY9zOJWCg+881722wIHfwkdnRmiiDm9ym+zQ==} + seroval-plugins@1.1.1: + resolution: {integrity: sha512-qNSy1+nUj7hsCOon7AO4wdAIo9P0jrzAMp18XhiOzA6/uO5TKtP7ScozVJ8T293oRIvi5wyCHSM4TrJo/c/GJA==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 - seroval@1.0.5: - resolution: {integrity: sha512-TM+Z11tHHvQVQKeNlOUonOWnsNM+2IBwZ4vwoi4j3zKzIpc5IDw8WPwCfcc8F17wy6cBcJGbZbFOR0UCuTZHQA==} + seroval@1.1.1: + resolution: {integrity: sha512-rqEO6FZk8mv7Hyv4UCj3FD3b6Waqft605TLfsCe/BiaylRpyyMC0b+uA5TJKawX3KzMrdi3wsLbCaLplrQmBvQ==} engines: {node: '>=10'} server-only@0.0.1: @@ -4634,6 +4825,9 @@ packages: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} + shallow-equal@3.1.0: + resolution: {integrity: sha512-pfVOw8QZIXpMbhBWvzBISicvToTiM5WBF1EeAUZDDSb5Dt29yl4AYbyywbJFSEsRUMr7gJaxqCdr4L3tQf9wVg==} + shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} @@ -4711,6 +4905,10 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -5451,6 +5649,7 @@ snapshots: eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 + optionalDependencies: zod: 3.23.8 '@ai-sdk/provider@0.0.3': @@ -5475,8 +5674,12 @@ snapshots: '@babel/helper-string-parser@7.24.1': {} + '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-validator-identifier@7.24.5': {} + '@babel/helper-validator-identifier@7.25.9': {} + '@babel/highlight@7.24.5': dependencies: '@babel/helper-validator-identifier': 7.24.5 @@ -5484,9 +5687,9 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.0 - '@babel/parser@7.24.5': + '@babel/parser@7.26.1': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.26.0 '@babel/runtime@7.24.5': dependencies: @@ -5498,11 +5701,16 @@ snapshots: '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 + '@babel/types@7.26.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@braintree/sanitize-url@6.0.4': {} '@calcom/embed-core@1.5.0': {} - '@calcom/embed-react@1.5.0(react-dom@18.3.1)(react@18.3.1)': + '@calcom/embed-react@1.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@calcom/embed-core': 1.5.0 '@calcom/embed-snippet': 1.3.0 @@ -5552,7 +5760,7 @@ snapshots: '@emotion/memoize@0.8.1': {} - '@emotion/react@11.11.4(@types/react@18.3.1)(react@18.3.1)': + '@emotion/react@11.11.4(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@emotion/babel-plugin': 11.11.0 @@ -5561,9 +5769,10 @@ snapshots: '@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.1 hoist-non-react-statics: 3.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 '@emotion/serialize@1.1.4': dependencies: @@ -5631,15 +5840,15 @@ snapshots: '@floating-ui/core': 1.6.1 '@floating-ui/utils': 0.2.2 - '@floating-ui/react-dom@2.0.9(react-dom@18.3.1)(react@18.3.1)': + '@floating-ui/react-dom@2.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/dom': 1.6.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/react@0.26.13(react-dom@18.3.1)(react@18.3.1)': + '@floating-ui/react@0.26.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/react-dom': 2.0.9(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@floating-ui/utils': 0.2.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -5649,23 +5858,23 @@ snapshots: '@glidejs/glide@3.6.0': {} - '@headlessui/react@1.7.19(react-dom@18.3.1)(react@18.3.1)': + '@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/react-virtual': 3.5.0(react-dom@18.3.1)(react@18.3.1) + '@tanstack/react-virtual': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) client-only: 0.0.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@headlessui/react@2.0.3(react-dom@18.3.1)(react@18.3.1)': + '@headlessui/react@2.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/react': 0.26.13(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react': 0.26.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/focus': 3.17.0(react@18.3.1) '@react-aria/interactions': 3.21.2(react@18.3.1) - '@tanstack/react-virtual': 3.5.0(react-dom@18.3.1)(react@18.3.1) + '@tanstack/react-virtual': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@hookform/resolvers@3.3.4(react-hook-form@7.51.4)': + '@hookform/resolvers@3.3.4(react-hook-form@7.51.4(react@18.3.1))': dependencies: react-hook-form: 7.51.4(react@18.3.1) @@ -5782,6 +5991,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -5817,10 +6028,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.0.1(@types/react@18.3.1)(react@18.3.1)': + '@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.1 + '@types/react': 18.3.12 react: 18.3.1 '@mongodb-js/saslprep@1.1.6': @@ -5967,361 +6178,394 @@ snapshots: dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-accordion@1.1.2(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-accordion@1.1.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collapsible': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-collection': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-collapsible': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-arrow@1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-arrow@1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-avatar@1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-avatar@1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-collapsible@1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-collapsible@1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-collection@1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-collection@1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.1 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-context@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-context@1.0.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.1 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-dialog@1.0.5(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dialog@1.0.5(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.12)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.1)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-direction@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-direction@1.0.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.1 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-dismissable-layer@1.0.5(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.0.5(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-dropdown-menu@2.0.6(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dropdown-menu@2.0.6(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-menu': 2.0.6(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-menu': 2.0.6(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.1 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-focus-scope@1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-focus-scope@1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 '@radix-ui/react-icons@1.3.0(react@18.3.1)': dependencies: react: 18.3.1 - '@radix-ui/react-id@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-id@1.0.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-label@2.0.2(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-label@2.0.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-menu@2.0.6(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-menu@2.0.6(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-collection': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.12)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.1)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-popper@1.1.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-popper@1.1.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.0.9(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-arrow': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.12)(react@18.3.1) '@radix-ui/rect': 1.0.1 - '@types/react': 18.3.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-portal@1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-portal@1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-presence@1.0.1(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-presence@1.0.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-primitive@1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-primitive@1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-roving-focus@1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-roving-focus@1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-collection': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-select@2.0.0(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-select@2.0.0(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-collection': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.1)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-separator@1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-separator@1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-slot@1.0.2(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-slot@1.0.2(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-tabs@1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-tabs@1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.1 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.1 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.1 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/rect': 1.0.1 - '@types/react': 18.3.1 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-use-size@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-size@1.0.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - '@radix-ui/react-visually-hidden@1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 '@radix-ui/rect@1.0.1': dependencies: @@ -6439,13 +6683,20 @@ snapshots: '@swc/counter': 0.1.3 tslib: 2.6.2 - '@tanstack/react-table@8.16.0(react-dom@18.3.1)(react@18.3.1)': + '@tabler/icons-react@3.21.0(react@18.3.1)': + dependencies: + '@tabler/icons': 3.21.0 + react: 18.3.1 + + '@tabler/icons@3.21.0': {} + + '@tanstack/react-table@8.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/table-core': 8.16.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/react-virtual@3.5.0(react-dom@18.3.1)(react@18.3.1)': + '@tanstack/react-virtual@3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/virtual-core': 3.5.0 react: 18.3.1 @@ -6468,6 +6719,188 @@ snapshots: npm-to-yarn: 2.2.1 unist-util-visit: 5.0.0 + '@tsparticles/basic@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + '@tsparticles/move-base': 3.7.1 + '@tsparticles/plugin-hex-color': 3.7.1 + '@tsparticles/plugin-hsl-color': 3.7.1 + '@tsparticles/plugin-rgb-color': 3.7.1 + '@tsparticles/shape-circle': 3.7.1 + '@tsparticles/updater-color': 3.7.1 + '@tsparticles/updater-opacity': 3.7.1 + '@tsparticles/updater-out-modes': 3.7.1 + '@tsparticles/updater-size': 3.7.1 + + '@tsparticles/engine@3.7.1': {} + + '@tsparticles/interaction-external-attract@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/interaction-external-bounce@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/interaction-external-bubble@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/interaction-external-connect@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/interaction-external-grab@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/interaction-external-pause@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/interaction-external-push@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/interaction-external-remove@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/interaction-external-repulse@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/interaction-external-slow@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/interaction-particles-attract@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/interaction-particles-collisions@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/interaction-particles-links@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/move-base@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/move-parallax@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/plugin-easing-quad@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/plugin-hex-color@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/plugin-hsl-color@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/plugin-rgb-color@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/react@3.0.0(@tsparticles/engine@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@tsparticles/engine': 3.7.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@tsparticles/shape-circle@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/shape-emoji@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/shape-image@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/shape-line@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/shape-polygon@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/shape-square@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/shape-star@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/slim@3.7.1': + dependencies: + '@tsparticles/basic': 3.7.1 + '@tsparticles/engine': 3.7.1 + '@tsparticles/interaction-external-attract': 3.7.1 + '@tsparticles/interaction-external-bounce': 3.7.1 + '@tsparticles/interaction-external-bubble': 3.7.1 + '@tsparticles/interaction-external-connect': 3.7.1 + '@tsparticles/interaction-external-grab': 3.7.1 + '@tsparticles/interaction-external-pause': 3.7.1 + '@tsparticles/interaction-external-push': 3.7.1 + '@tsparticles/interaction-external-remove': 3.7.1 + '@tsparticles/interaction-external-repulse': 3.7.1 + '@tsparticles/interaction-external-slow': 3.7.1 + '@tsparticles/interaction-particles-attract': 3.7.1 + '@tsparticles/interaction-particles-collisions': 3.7.1 + '@tsparticles/interaction-particles-links': 3.7.1 + '@tsparticles/move-parallax': 3.7.1 + '@tsparticles/plugin-easing-quad': 3.7.1 + '@tsparticles/shape-emoji': 3.7.1 + '@tsparticles/shape-image': 3.7.1 + '@tsparticles/shape-line': 3.7.1 + '@tsparticles/shape-polygon': 3.7.1 + '@tsparticles/shape-square': 3.7.1 + '@tsparticles/shape-star': 3.7.1 + '@tsparticles/updater-life': 3.7.1 + '@tsparticles/updater-rotate': 3.7.1 + '@tsparticles/updater-stroke-color': 3.7.1 + + '@tsparticles/updater-color@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/updater-life@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/updater-opacity@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/updater-out-modes@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/updater-rotate@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/updater-size@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + + '@tsparticles/updater-stroke-color@3.7.1': + dependencies: + '@tsparticles/engine': 3.7.1 + '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.5 @@ -6506,6 +6939,8 @@ snapshots: '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/hast@2.3.10': dependencies: '@types/unist': 2.0.10 @@ -6554,9 +6989,9 @@ snapshots: '@types/react-transition-group@4.4.10': dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.12 - '@types/react@18.3.1': + '@types/react@18.3.12': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -6581,7 +7016,7 @@ snapshots: dependencies: '@types/node': 18.16.0 - '@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) @@ -6596,6 +7031,7 @@ snapshots: natural-compare: 1.4.0 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6608,6 +7044,7 @@ snapshots: '@typescript-eslint/visitor-keys': 7.2.0 debug: 4.3.4 eslint: 8.57.0 + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6620,6 +7057,7 @@ snapshots: '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4 eslint: 8.57.0 + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6641,6 +7079,7 @@ snapshots: debug: 4.3.4 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6659,6 +7098,7 @@ snapshots: minimatch: 9.0.3 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6673,6 +7113,7 @@ snapshots: minimatch: 9.0.4 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6709,11 +7150,12 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vercel/analytics@1.2.2(next@14.2.3)(react@18.3.1)': + '@vercel/analytics@1.2.2(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - next: 14.2.3(react-dom@18.3.1)(react@18.3.1) - react: 18.3.1 server-only: 0.0.1 + optionalDependencies: + next: 14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 '@vercel/og@0.6.2': dependencies: @@ -6721,27 +7163,27 @@ snapshots: satori: 0.10.9 yoga-wasm-web: 0.3.3 - '@vercel/speed-insights@1.0.10(next@14.2.3)(react@18.3.1)(svelte@4.2.16)(vue@3.4.27)': - dependencies: - next: 14.2.3(react-dom@18.3.1)(react@18.3.1) + '@vercel/speed-insights@1.0.10(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(svelte@4.2.16)(vue@3.4.27(typescript@5.4.5))': + optionalDependencies: + next: 14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 svelte: 4.2.16 vue: 3.4.27(typescript@5.4.5) - '@vidstack/react@0.6.15(@types/react@18.3.1)(maverick.js@0.37.0)(react@18.3.1)(vidstack@0.6.15)': + '@vidstack/react@0.6.15(@types/react@18.3.12)(maverick.js@0.37.0)(react@18.3.1)(vidstack@0.6.15)': dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.12 maverick.js: 0.37.0 react: 18.3.1 vidstack: 0.6.15 '@vue/compiler-core@3.4.27': dependencies: - '@babel/parser': 7.24.5 + '@babel/parser': 7.26.1 '@vue/shared': 3.4.27 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-dom@3.4.27': dependencies: @@ -6750,15 +7192,15 @@ snapshots: '@vue/compiler-sfc@3.4.27': dependencies: - '@babel/parser': 7.24.5 + '@babel/parser': 7.26.1 '@vue/compiler-core': 3.4.27 '@vue/compiler-dom': 3.4.27 '@vue/compiler-ssr': 3.4.27 '@vue/shared': 3.4.27 estree-walker: 2.0.2 - magic-string: 0.30.10 - postcss: 8.4.38 - source-map-js: 1.2.0 + magic-string: 0.30.12 + postcss: 8.4.47 + source-map-js: 1.2.1 '@vue/compiler-ssr@3.4.27': dependencies: @@ -6780,7 +7222,7 @@ snapshots: '@vue/shared': 3.4.27 csstype: 3.1.3 - '@vue/server-renderer@3.4.27(vue@3.4.27)': + '@vue/server-renderer@3.4.27(vue@3.4.27(typescript@5.4.5))': dependencies: '@vue/compiler-ssr': 3.4.27 '@vue/shared': 3.4.27 @@ -6884,7 +7326,9 @@ snapshots: acorn@8.11.3: {} - ai@3.1.5(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.16)(vue@3.4.27)(zod@3.23.8): + acorn@8.14.0: {} + + ai@3.1.5(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.16)(vue@3.4.27(typescript@5.4.5))(zod@3.23.8): dependencies: '@ai-sdk/provider': 0.0.3 '@ai-sdk/provider-utils': 0.0.6(zod@3.23.8) @@ -6892,18 +7336,19 @@ snapshots: json-schema: 0.4.0 jsondiffpatch: 0.6.0 nanoid: 3.3.6 - react: 18.3.1 secure-json-parse: 2.7.0 - solid-js: 1.8.17 solid-swr-store: 0.10.7(solid-js@1.8.17)(swr-store@0.10.6) sswr: 2.0.0(svelte@4.2.16) - svelte: 4.2.16 swr: 2.2.0(react@18.3.1) swr-store: 0.10.6 - swrv: 1.0.4(vue@3.4.27) + swrv: 1.0.4(vue@3.4.27(typescript@5.4.5)) + zod-to-json-schema: 3.22.5(zod@3.23.8) + optionalDependencies: + react: 18.3.1 + solid-js: 1.8.17 + svelte: 4.2.16 vue: 3.4.27(typescript@5.4.5) zod: 3.23.8 - zod-to-json-schema: 3.22.5(zod@3.23.8) ajv-keywords@3.5.2(ajv@6.12.6): dependencies: @@ -6966,6 +7411,8 @@ snapshots: dependencies: dequal: 2.0.3 + aria-query@5.3.2: {} + array-buffer-byte-length@1.0.1: dependencies: call-bind: 1.0.7 @@ -7053,7 +7500,7 @@ snapshots: autoprefixer@10.4.19(postcss@8.4.38): dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001615 + caniuse-lite: 1.0.30001673 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -7078,9 +7525,7 @@ snapshots: dependencies: dequal: 2.0.3 - axobject-query@4.0.0: - dependencies: - dequal: 2.0.3 + axobject-query@4.1.0: {} babel-plugin-macros@3.1.0: dependencies: @@ -7116,7 +7561,7 @@ snapshots: browserslist@4.23.0: dependencies: - caniuse-lite: 1.0.30001615 + caniuse-lite: 1.0.30001673 electron-to-chromium: 1.4.754 node-releases: 2.0.14 update-browserslist-db: 1.0.14(browserslist@4.23.0) @@ -7145,7 +7590,7 @@ snapshots: camelize@1.0.1: {} - caniuse-lite@1.0.30001615: {} + caniuse-lite@1.0.30001673: {} ccount@2.0.1: {} @@ -7228,9 +7673,9 @@ snapshots: code-red@1.0.4: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - '@types/estree': 1.0.5 - acorn: 8.11.3 + '@jridgewell/sourcemap-codec': 1.5.0 + '@types/estree': 1.0.6 + acorn: 8.14.0 estree-walker: 3.0.3 periscopic: 3.1.0 @@ -7336,6 +7781,8 @@ snapshots: css-color-keywords@1.0.0: {} + css-mediaquery@0.1.2: {} + css-to-react-native@3.2.0: dependencies: camelize: 1.0.1 @@ -7345,7 +7792,7 @@ snapshots: css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 + source-map-js: 1.2.1 cssesc@3.0.0: {} @@ -7759,11 +8206,12 @@ snapshots: '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -7781,13 +8229,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): dependencies: debug: 4.3.4 enhanced-resolve: 5.16.0 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.3 is-core-module: 2.13.1 @@ -7818,28 +8266,29 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -7848,7 +8297,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -7858,6 +8307,8 @@ snapshots: object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -7904,13 +8355,15 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): + eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5): dependencies: eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) prettier: 3.2.5 prettier-linter-helpers: 1.0.0 synckit: 0.8.8 + optionalDependencies: + '@types/eslint': 8.56.10 + eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): dependencies: @@ -8213,11 +8666,13 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@11.1.9(react-dom@18.3.1)(react@18.3.1): + framer-motion@11.1.9(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: + tslib: 2.6.2 + optionalDependencies: + '@emotion/is-prop-valid': 1.2.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.6.2 fs.realpath@1.0.0: {} @@ -8235,9 +8690,9 @@ snapshots: functions-have-names@1.2.3: {} - geist@1.3.0(next@14.2.3): + geist@1.3.0(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: - next: 14.2.3(react-dom@18.3.1)(react@18.3.1) + next: 14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) get-east-asian-width@1.2.0: {} @@ -8534,6 +8989,8 @@ snapshots: husky@9.0.11: {} + hyphenate-style-name@1.1.0: {} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -8945,14 +9402,18 @@ snapshots: dependencies: react: 18.3.1 - magic-string@0.30.10: + magic-string@0.30.12: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 markdown-extensions@2.0.0: {} markdown-table@3.0.3: {} + matchmediaquery@0.4.2: + dependencies: + css-mediaquery: 0.1.2 + mathjax-full@3.2.2: dependencies: esm: 3.2.25 @@ -9747,13 +10208,13 @@ snapshots: neo-async@2.6.2: {} - next-auth@4.24.7(next@14.2.3)(react-dom@18.3.1)(react@18.3.1): + next-auth@4.24.7(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.24.5 '@panva/hkdf': 1.1.1 cookie: 0.5.0 jose: 4.15.5 - next: 14.2.3(react-dom@18.3.1)(react@18.3.1) + next: 14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) oauth: 0.9.15 openid-client: 5.6.5 preact: 10.21.0 @@ -9762,26 +10223,26 @@ snapshots: react-dom: 18.3.1(react@18.3.1) uuid: 8.3.2 - next-sitemap@4.2.3(next@14.2.3): + next-sitemap@4.2.3(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: '@corex/deepmerge': 4.0.43 '@next/env': 13.5.6 fast-glob: 3.3.2 minimist: 1.2.8 - next: 14.2.3(react-dom@18.3.1)(react@18.3.1) + next: 14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next-themes@0.2.1(next@14.2.3)(react-dom@18.3.1)(react@18.3.1): + next-themes@0.2.1(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 14.2.3(react-dom@18.3.1)(react@18.3.1) + next: 14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@14.2.3(react-dom@18.3.1)(react@18.3.1): + next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.3 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001615 + caniuse-lite: 1.0.30001673 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 @@ -9801,28 +10262,28 @@ snapshots: - '@babel/core' - babel-plugin-macros - nextra-theme-docs@3.0.0-alpha.22(next@14.2.3)(nextra@3.0.0-alpha.22)(react-dom@18.3.1)(react@18.3.1): + nextra-theme-docs@3.0.0-alpha.22(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.0.0-alpha.22(@types/react@18.3.12)(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@headlessui/react': 1.7.19(react-dom@18.3.1)(react@18.3.1) + '@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@popperjs/core': 2.11.8 clsx: 2.1.1 escape-string-regexp: 5.0.0 flexsearch: 0.7.43 focus-visible: 5.2.0 intersection-observer: 0.12.2 - next: 14.2.3(react-dom@18.3.1)(react@18.3.1) - next-themes: 0.2.1(next@14.2.3)(react-dom@18.3.1)(react@18.3.1) - nextra: 3.0.0-alpha.22(@types/react@18.3.1)(next@14.2.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + next: 14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-themes: 0.2.1(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + nextra: 3.0.0-alpha.22(@types/react@18.3.12)(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) scroll-into-view-if-needed: 3.1.0 zod: 3.23.8 - nextra@3.0.0-alpha.22(@types/react@18.3.1)(next@14.2.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): + nextra@3.0.0-alpha.22(@types/react@18.3.12)(next@14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5): dependencies: - '@headlessui/react': 1.7.19(react-dom@18.3.1)(react@18.3.1) + '@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdx-js/mdx': 3.0.1 - '@mdx-js/react': 3.0.1(@types/react@18.3.1)(react@18.3.1) + '@mdx-js/react': 3.0.1(@types/react@18.3.12)(react@18.3.1) '@napi-rs/simple-git': 0.1.16 '@shikijs/twoslash': 1.4.0(typescript@5.4.5) '@theguild/remark-mermaid': 0.0.5(react@18.3.1) @@ -9836,7 +10297,7 @@ snapshots: gray-matter: 4.0.3 hast-util-to-estree: 3.1.0 katex: 0.16.10 - next: 14.2.3(react-dom@18.3.1)(react@18.3.1) + next: 14.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) p-limit: 4.0.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -10089,6 +10550,8 @@ snapshots: picocolors@1.0.0: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} pidtree@0.6.0: {} @@ -10116,8 +10579,9 @@ snapshots: postcss-load-config@4.0.2(postcss@8.4.38): dependencies: lilconfig: 3.1.1 - postcss: 8.4.38 yaml: 2.4.2 + optionalDependencies: + postcss: 8.4.38 postcss-nested@6.0.1(postcss@8.4.38): dependencies: @@ -10143,6 +10607,12 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.2.0 + postcss@8.4.47: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + posthog-js@1.131.4: dependencies: fflate: 0.4.8 @@ -10195,7 +10665,7 @@ snapshots: dependencies: safe-buffer: 5.2.1 - react-ace@11.0.1(react-dom@18.3.1)(react@18.3.1): + react-ace@11.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: ace-builds: 1.33.1 diff-match-patch: 1.0.5 @@ -10215,7 +10685,7 @@ snapshots: dependencies: react: 18.3.1 - react-hot-toast@2.4.1(csstype@3.1.3)(react-dom@18.3.1)(react@18.3.1): + react-hot-toast@2.4.1(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: goober: 2.1.14(csstype@3.1.3) react: 18.3.1 @@ -10229,10 +10699,10 @@ snapshots: react-is@16.13.1: {} - react-markdown@9.0.1(@types/react@18.3.1)(react@18.3.1): + react-markdown@9.0.1(@types/react@18.3.12)(react@18.3.1): dependencies: '@types/hast': 3.0.4 - '@types/react': 18.3.1 + '@types/react': 18.3.12 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.0 html-url-attributes: 3.0.0 @@ -10246,52 +10716,63 @@ snapshots: transitivePeerDependencies: - supports-color - react-remove-scroll-bar@2.3.6(@types/react@18.3.1)(react@18.3.1): + react-remove-scroll-bar@2.3.6(@types/react@18.3.12)(react@18.3.1): dependencies: - '@types/react': 18.3.1 react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.1)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.12)(react@18.3.1) tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.3.12 - react-remove-scroll@2.5.5(@types/react@18.3.1)(react@18.3.1): + react-remove-scroll@2.5.5(@types/react@18.3.12)(react@18.3.1): dependencies: - '@types/react': 18.3.1 react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.1)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.1)(react@18.3.1) + react-remove-scroll-bar: 2.3.6(@types/react@18.3.12)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.12)(react@18.3.1) tslib: 2.6.2 - use-callback-ref: 1.3.2(@types/react@18.3.1)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.1)(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.3.12)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + + react-responsive@10.0.0(react@18.3.1): + dependencies: + hyphenate-style-name: 1.1.0 + matchmediaquery: 0.4.2 + prop-types: 15.8.1 + react: 18.3.1 + shallow-equal: 3.1.0 - react-select@5.8.0(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1): + react-select@5.8.0(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.24.5 '@emotion/cache': 11.11.0 - '@emotion/react': 11.11.4(@types/react@18.3.1)(react@18.3.1) + '@emotion/react': 11.11.4(@types/react@18.3.12)(react@18.3.1) '@floating-ui/dom': 1.6.4 '@types/react-transition-group': 4.4.10 memoize-one: 6.0.0 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.3.1) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.1)(react@18.3.1) + react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.12)(react@18.3.1) transitivePeerDependencies: - '@types/react' - react-social-icons@6.16.0(react-dom@18.3.1)(react@18.3.1): + react-social-icons@6.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.24.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-style-singleton@2.2.1(@types/react@18.3.1)(react@18.3.1): + react-style-singleton@2.2.1(@types/react@18.3.12)(react@18.3.1): dependencies: - '@types/react': 18.3.1 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.3.12 react-syntax-highlighter@15.5.0(react@18.3.1): dependencies: @@ -10302,7 +10783,7 @@ snapshots: react: 18.3.1 refractor: 3.6.0 - react-transition-group@4.4.5(react-dom@18.3.1)(react@18.3.1): + react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.24.5 dom-helpers: 5.2.1 @@ -10311,7 +10792,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-tweet@3.2.1(react-dom@18.3.1)(react@18.3.1): + react-tweet@3.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@swc/helpers': 0.5.11 clsx: 2.1.1 @@ -10627,11 +11108,11 @@ snapshots: dependencies: randombytes: 2.1.0 - seroval-plugins@1.0.5(seroval@1.0.5): + seroval-plugins@1.1.1(seroval@1.1.1): dependencies: - seroval: 1.0.5 + seroval: 1.1.1 - seroval@1.0.5: {} + seroval@1.1.1: {} server-only@0.0.1: {} @@ -10651,6 +11132,8 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 + shallow-equal@3.1.0: {} + shallowequal@1.1.0: {} sharp@0.33.3: @@ -10735,8 +11218,8 @@ snapshots: solid-js@1.8.17: dependencies: csstype: 3.1.3 - seroval: 1.0.5 - seroval-plugins: 1.0.5(seroval@1.0.5) + seroval: 1.1.1 + seroval-plugins: 1.1.1(seroval@1.1.1) solid-swr-store@0.10.7(solid-js@1.8.17)(swr-store@0.10.6): dependencies: @@ -10745,6 +11228,8 @@ snapshots: source-map-js@1.2.0: {} + source-map-js@1.2.1: {} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -10894,7 +11379,7 @@ snapshots: dependencies: inline-style-parser: 0.2.3 - styled-components@6.1.11(react-dom@18.3.1)(react@18.3.1): + styled-components@6.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@emotion/is-prop-valid': 1.2.2 '@emotion/unitless': 0.8.1 @@ -10950,18 +11435,18 @@ snapshots: svelte@4.2.16: dependencies: '@ampproject/remapping': 2.3.0 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - '@types/estree': 1.0.5 - acorn: 8.11.3 - aria-query: 5.3.0 - axobject-query: 4.0.0 + '@types/estree': 1.0.6 + acorn: 8.14.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 code-red: 1.0.4 css-tree: 2.3.1 estree-walker: 3.0.3 is-reference: 3.0.2 locate-character: 3.0.0 - magic-string: 0.30.10 + magic-string: 0.30.12 periscopic: 3.1.0 swr-store@0.10.6: @@ -10981,7 +11466,7 @@ snapshots: swrev@4.0.0: {} - swrv@1.0.4(vue@3.4.27): + swrv@1.0.4(vue@3.4.27(typescript@5.4.5)): dependencies: vue: 3.4.27(typescript@5.4.5) @@ -11326,23 +11811,26 @@ snapshots: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.2(@types/react@18.3.1)(react@18.3.1): + use-callback-ref@1.3.2(@types/react@18.3.12)(react@18.3.1): dependencies: - '@types/react': 18.3.1 react: 18.3.1 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.3.12 - use-isomorphic-layout-effect@1.1.2(@types/react@18.3.1)(react@18.3.1): + use-isomorphic-layout-effect@1.1.2(@types/react@18.3.12)(react@18.3.1): dependencies: - '@types/react': 18.3.1 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 - use-sidecar@1.1.2(@types/react@18.3.1)(react@18.3.1): + use-sidecar@1.1.2(@types/react@18.3.12)(react@18.3.1): dependencies: - '@types/react': 18.3.1 detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.3.12 use-sync-external-store@1.2.2(react@18.3.1): dependencies: @@ -11428,8 +11916,9 @@ snapshots: '@vue/compiler-dom': 3.4.27 '@vue/compiler-sfc': 3.4.27 '@vue/runtime-dom': 3.4.27 - '@vue/server-renderer': 3.4.27(vue@3.4.27) + '@vue/server-renderer': 3.4.27(vue@3.4.27(typescript@5.4.5)) '@vue/shared': 3.4.27 + optionalDependencies: typescript: 5.4.5 walk-up-path@3.0.1: {} diff --git a/public/images/agents/endpoints_menu.png b/public/images/agents/endpoints_menu.png new file mode 100644 index 000000000..79c875fc0 Binary files /dev/null and b/public/images/agents/endpoints_menu.png differ diff --git a/public/images/agents/mention.png b/public/images/agents/mention.png new file mode 100644 index 000000000..be122226e Binary files /dev/null and b/public/images/agents/mention.png differ diff --git a/public/images/agents/run_code.png b/public/images/agents/run_code.png new file mode 100644 index 000000000..9850f501d Binary files /dev/null and b/public/images/agents/run_code.png differ diff --git a/public/site.webmanifest b/public/site.webmanifest index 526769c76..d9ff41434 100644 --- a/public/site.webmanifest +++ b/public/site.webmanifest @@ -13,7 +13,7 @@ "type": "image/png" } ], - "theme_color": "#111111", - "background_color": "#111111", + "theme_color": "#000000", + "background_color": "#000000", "display": "minimal-ui" } diff --git a/src/overrides.css b/src/overrides.css index f8db5f90e..f04ccfa8a 100644 --- a/src/overrides.css +++ b/src/overrides.css @@ -38,6 +38,10 @@ li > ul { media-outlet { background-color: transparent !important; } +.nextra-toc-footer, .nextra-sidebar-footer { + background-color: transparent !important; + box-shadow: none; +} /* More gap between h2 in articles */ article.nextra-body-typesetting-article h2 { diff --git a/style.css b/style.css index 3f0cb5795..96eba72ff 100644 --- a/style.css +++ b/style.css @@ -36,7 +36,7 @@ } :root[class~='dark'] { - --background: 0 0% 6.7%; + --background: 0 0% 0%; --foreground: 210 40% 98%; --muted: 0 0% 18%; @@ -49,7 +49,7 @@ --card-foreground: 210 40% 98%; --ring: 0 0% 18%; - --border: 0 0% 18%; + --border: 0 0% 10%; --input: 0 0% 18%; --primary: 210 40% 98%; diff --git a/tailwind.config.js b/tailwind.config.js index 20341acff..5b69bcb48 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -24,18 +24,18 @@ module.exports = { }, colors: { gray: { - 50: '#F9F9F9', - 100: '#F3F3F3', - 200: '#E7E7E7', - 300: '#DADADA', - 400: '#CECECE', - 500: '#C2C2C2', - 600: '#9B9B9B', - 700: '#747474', - 800: '#4E4E4E', - 900: '#272727', - }, - blackish: '#111111', + 50: '#fafafa', + 100: '#f5f5f5', + 200: '#e5e5e5', + 300: '#d4d4d4', + 400: '#a3a3a3', + 500: '#737373', + 600: '#525252', + 700: '#404040', + 800: '#262626', + 900: '#171717', + }, + blackish: '#000000', border: 'hsl(var(--border))', input: 'hsl(var(--input))', ring: 'hsl(var(--ring))', diff --git a/theme.config.tsx b/theme.config.tsx index 7fd0f46c5..3ed91e364 100644 --- a/theme.config.tsx +++ b/theme.config.tsx @@ -1,5 +1,4 @@ import React from 'react' -import Link from 'next/link' import { useRouter } from 'next/router' import { GeistSans } from 'geist/font/sans' import { DocsThemeConfig, useConfig, ThemeSwitch } from 'nextra-theme-docs' @@ -94,7 +93,7 @@ const config: DocsThemeConfig = { - + ) }, @@ -110,18 +109,6 @@ const config: DocsThemeConfig = { Carousel, OptionTable, }, - banner: { - key: 'new-docs', - dismissible: true, - content: ( - - {/* mobile */} - Meet the New LibreChat Resources Hub! 🚀 - {/* desktop */} - Meet the New LibreChat Resources Hub! 🚀 - - ), - }, } export default config