diff --git a/.claude/launch.json b/.claude/launch.json new file mode 100644 index 0000000000..8fdde83ba3 --- /dev/null +++ b/.claude/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.0.1", + "configurations": [ + { + "name": "dev", + "runtimeExecutable": "pnpm", + "runtimeArgs": ["dev", "--port", "3333", "--hostname", "0.0.0.0"], + "port": 3333 + } + ] +} diff --git a/.gitignore b/.gitignore index 4eda84f29a..c4b89f6386 100644 --- a/.gitignore +++ b/.gitignore @@ -123,4 +123,7 @@ fabric.properties !.idea/codeStyles !.idea/runConfigurations -# End of https://www.toptal.com/developers/gitignore/api/intellij+all \ No newline at end of file +# End of https://www.toptal.com/developers/gitignore/api/intellij+all + +# fumadocs-mdx generated +.source/ diff --git a/.source/source.config.mjs b/.source/source.config.mjs new file mode 100644 index 0000000000..eda0877e11 --- /dev/null +++ b/.source/source.config.mjs @@ -0,0 +1,124 @@ +// source.config.ts +import { defineDocs, defineConfig, frontmatterSchema } from "fumadocs-mdx/config"; +import remarkGfm from "remark-gfm"; +import { mdxJsxToMarkdown } from "mdast-util-mdx-jsx"; +import { z } from "zod"; +var yamlDateField = z.union([ + z.string(), + z.date().transform((d) => d.toISOString().split("T")[0]) +]).nullish(); +var blogFrontmatterSchema = frontmatterSchema.extend({ + date: yamlDateField, + tag: z.string().nullish(), + author: z.string().nullish(), + ogImage: z.string().nullish(), + showInBlogIndex: z.boolean().nullish() +}); +var changelogFrontmatterSchema = frontmatterSchema.extend({ + date: yamlDateField, + author: z.string().nullish(), + ogImage: z.string().nullish() +}); +var customerFrontmatterSchema = frontmatterSchema.extend({ + // Use .nullish() so empty YAML values (parsed as null) are accepted too + date: yamlDateField, + ogImage: z.string().nullish(), + tag: z.string().nullish(), + author: z.string().nullish(), + customerLogo: z.string().nullish(), + customerLogoDark: z.string().nullish(), + customerQuote: z.string().nullish(), + quoteAuthor: z.string().nullish(), + quoteRole: z.string().nullish(), + quoteCompany: z.string().nullish(), + quoteAuthorImage: z.string().nullish(), + showInCustomerIndex: z.boolean().nullish() +}); +var docs = defineDocs({ + dir: "content/docs" +}); +var selfHosting = defineDocs({ + dir: "content/self-hosting" +}); +var blog = defineDocs({ + dir: "content/blog", + docs: { + schema: blogFrontmatterSchema + } +}); +var changelog = defineDocs({ + dir: "content/changelog", + docs: { + schema: changelogFrontmatterSchema + } +}); +var guidesFrontmatterSchema = frontmatterSchema.extend({ + ogImage: z.string().nullish(), + category: z.string().nullish() +}); +var guides = defineDocs({ + dir: "content/guides", + docs: { + schema: guidesFrontmatterSchema + } +}); +var faq = defineDocs({ + dir: "content/faq" +}); +var integrations = defineDocs({ + dir: "content/integrations" +}); +var security = defineDocs({ + dir: "content/security" +}); +var library = defineDocs({ + dir: "content/library" +}); +var customers = defineDocs({ + dir: "content/customers", + docs: { + schema: customerFrontmatterSchema + } +}); +var handbook = defineDocs({ + dir: "content/handbook" +}); +var marketing = defineDocs({ + dir: "content/marketing" +}); +var source_config_default = defineConfig({ + mdxOptions: { + remarkPlugins: [remarkGfm], + providerImportSource: "@/mdx-components", + // Disable remark-image: many content files reference remote images via https:// + // and the plugin tries to fetch dimensions at compile time, causing build failures + remarkImageOptions: false, + // Teach remark-structure's mdast-util-to-markdown serializer how to handle + // MDX JSX nodes (mdxJsxFlowElement / mdxJsxTextElement). Without this, it + // throws "Cannot handle unknown node `mdxJsxFlowElement`" when pages contain + // JSX components like , , etc. + remarkStructureOptions: { + // @ts-ignore — extensions is valid in mdast-util-to-markdown but the + // StructureOptions type doesn't expose it directly + stringify: { extensions: [mdxJsxToMarkdown()] } + }, + // @ts-ignore — { lazy: false } is valid at runtime; RehypeCodeOptions + // requires themes in its full type but fumadocs applies safe defaults + rehypeCodeOptions: { lazy: false } + } +}); +export { + blog, + changelog, + customers, + source_config_default as default, + docs, + faq, + guides, + handbook, + integrations, + library, + marketing, + security, + selfHosting +}; diff --git a/MIGRATION.md b/MIGRATION.md new file mode 100644 index 0000000000..8ca85b4af7 --- /dev/null +++ b/MIGRATION.md @@ -0,0 +1,98 @@ +# Nextra → Fumadocs + App Router Migration + +This document describes the migration from Nextra (Pages Router) to Fumadocs (App Router) and the remaining steps to complete it. + +## What’s done + +1. **Dependencies** + - Replaced `nextra` and `nextra-theme-docs` with `fumadocs-core`, `fumadocs-mdx`, and `fumadocs-ui`. + - Added `@types/mdx` in devDependencies. + +2. **Config** + - **`source.config.ts`** – Fumadocs MDX config: `defineDocs({ dir: 'content/docs' })`, `remarkGfm`, `providerImportSource: '@/mdx-components'`. + - **`lib/source.ts`** – Fumadocs source: `loader()` with `docs.toFumadocsSource()`, `baseUrl: '/docs'`. + - **`next.config.mjs`** – Removed Nextra; wrapped config with `createMDX()` from `fumadocs-mdx/next`. All existing options (headers, redirects, rewrites, images, etc.) are unchanged. + - **`tsconfig.json`** – Added path `"fumadocs-mdx:collections/*": [".source/*"]`. + +3. **App Router** + - **`app/layout.tsx`** – Root layout: `RootProvider` (from `fumadocs-ui/provider/next`), Geist fonts, global CSS (`style.css`, overrides, Vidstack). + - **`app/page.tsx`** – Temporary home: title + link to `/docs`. Replace with the real landing (e.g. current ``) when ready. + - **`app/docs/layout.tsx`** – `DocsLayout` with `source.getPageTree()`, nav title “Langfuse”, GitHub link. + - **`app/docs/[[...slug]]/page.tsx`** – Doc page: `source.getPage(slug)`, `page.data.load()`, `DocsPage` + `DocsBody` with MDX and `getMDXComponents()`; `generateMetadata` and `generateStaticParams`. + +4. **MDX** + - **`mdx-components.tsx`** – `getMDXComponents` / `useMDXComponents` using `fumadocs-ui/mdx`. + +5. **Content** + - **`content/docs/`** – New Fumadocs content root: + - `meta.json` – root meta with `pages: ["index", "observability"]`. + - `index.mdx` – overview doc. + - `observability/meta.json` and `observability/overview.mdx` – sample observability doc. + +## Install and peer deps + +- Fumadocs MDX 13 expects **Next 15.3+** and **fumadocs-core 15+**. If you stay on Next 15.2.x, use: + - `pnpm install --legacy-peer-deps` (or `npm install --legacy-peer-deps`). +- Optional: upgrade to Next `^15.3.0` to satisfy peer deps without `--legacy-peer-deps`. + +## Remaining steps + +### 1. Content migration (docs) + +- **Done.** Docs live in `content/docs/` with Fumadocs `meta.json`. The former `pages/docs/` content was migrated; `docs-nextra-backup` was removed after verification. + +### 2. Other sections (blog, changelog, guides, etc.) — done + +- **Done.** All main sections are on App Router: + - **Fumadocs collections** in `source.config.ts`: `selfHosting`, `blog`, `changelog`, `guides`, `faq`, `integrations`, `security`, `library`, `customers`, `handbook`. + - **Content** in `content/
/`. + - **App routes**: `app/docs/` (docs), `app/blog/`, `app/changelog/` (index + layout), and `app/[section]/[[...slug]]` for self-hosting, guides, faq, integrations, security, library, customers, handbook. + - **Client loaders** for section MDX: `lib/section-loaders.generated.ts` (generated in prebuild via `scripts/generate-section-loaders.js`). + - **Index components** (`BlogIndex`, `ChangelogIndex`) use `getPagesUnderRoute` from nextra-shim, which now reads from Fumadocs sources via `getPagesForRoute` in `lib/source.ts`. +- **Static marketing pages** are in `content/marketing/` and served via `app/[section]` (section = about, careers, pricing, etc.). + +### 3. Replace Nextra usage in components + +These (and any others that import from Nextra) need to be updated or replaced: + +| File | Nextra usage | Fumadocs / replacement | +|------|--------------|-------------------------| +| `theme.config.tsx` | Entire file | No longer used. Nav/sidebar/footer are in `app/docs/layout.tsx` and Fumadocs layout props. Replicate any custom nav/links in `DocsLayout` (e.g. `nav`, `sidebar`, `links`). | +| `components/*` using `getPagesUnderRoute`, `Page`, `useConfig`, `useTheme` | `nextra/context`, `nextra-theme-docs` | Use `source` from `@/lib/source`: e.g. `source.getPages()`, filter by path; or build custom indexes from `source.getPageTree()`. For theme, use `next-themes` or Fumadocs theme. | +| `nextra/components`: `Cards`, `Tabs`, `Callout` | Nextra components | Use Fumadocs UI: `fumadocs-ui/components/card`, `fumadocs-ui/components/tabs`, `fumadocs-ui/components/callout`, or keep local wrappers that match Fumadocs props. | + +Notable components to refactor: + +- `components/home/*` (Changelog, etc.) – replace `getPagesUnderRoute` with `source` + path filter. +- `components/blog/BlogIndex.tsx`, `components/changelog/ChangelogIndex.tsx` – same. +- `components/faq/FaqIndex.tsx`, `components/customers/CustomerIndex.tsx`, `components/CookbookIndex.tsx`, `components/VideoIndex.tsx`, `components/integrations/IntegrationIndex.tsx` – same. +- `components/MainContentWrapper.tsx`, `components/LangTabs.tsx`, etc. – remove `useConfig` / Nextra theme; use Fumadocs layout or local state. +- `components/not-found-animation.tsx`, `components/MetabaseDashboard.tsx`, `components/inkeep/useInkeepSettings.ts` – replace `useTheme` with `next-themes` or Fumadocs theme. + +### 4. Home and global providers — done + +- **`app/page.tsx`** – Uses real `` from `@/components/home`. +- **Analytics and scripts** – In `app/layout.tsx`: PostHog (via `@/components/analytics/PostHogProvider`), Hubspot, and Cookieyes scripts (production only). + +### 5. Remove Pages Router — done + +- **Done.** The `pages/` directory has been removed. The site uses **App Router only**. +- All routes are under `app/`; content lives under `content/`. API routes are under `app/api/`. + +### 6. Optional: Fumadocs search + +- Configure search (e.g. Fumadocs search or Inkeep) in the root layout or docs layout (e.g. `RootProvider` or `DocsLayout` search options), and remove any Nextra search wiring. + +## Running the project + +- Generate Fumadocs source (usually automatic with Next): + - `npx fumadocs-mdx` (or add to `postinstall` if you want types on install). +- Dev: `pnpm dev` (or `npm run dev`). +- Build: `pnpm build` (or `npm run build`). If you hit peer dependency errors, use `pnpm install --legacy-peer-deps` or upgrade Next as above. + +## Reference + +- [Fumadocs – Get started](https://fumadocs.dev/docs) +- [Fumadocs MDX – Next.js](https://fumadocs.dev/docs/mdx/next) +- [Fumadocs UI – Docs layout](https://fumadocs.dev/docs/ui/layouts/docs) +- [Fumadocs navigation / meta](https://fumadocs.dev/docs/navigation) diff --git a/README.md b/README.md index fd98c9ac62..e2f29abac5 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ You can easily contribute to the docs using GitHub Codespaces. Just click on the Pre-requisites: Node.js 22, pnpm v9.5.0 +To use Node 22 (e.g. with [nvm](https://github.com/nvm-sh/nvm)): `nvm install 22` then `nvm use` (or `nvm use 22`). The repo includes an `.nvmrc` so `nvm use` picks 22 automatically. + 1. Optional: Create env based on [.env.template](./.env.template) 2. Run `pnpm i` to install the dependencies. 3. Run `pnpm dev` to start the development server on localhost:3333 @@ -57,7 +59,7 @@ Interested in stack of Q&A docs chatbot? Checkout the [blog post](https://langfu The docs site includes four interconnected features designed to make documentation accessible to LLMs and AI tools: -1. **Markdown URL endpoints** (`.md` suffix): Append `.md` to any URL (e.g., `/docs.md`) to get raw markdown. Built at compile time via `scripts/copy_md_sources.js` which copies all `.mdx` files from `/pages` to `/public/md-src/` as static `.md` files with inlined MDX components. +1. **Markdown URL endpoints** (`.md` suffix): Append `.md` to any URL (e.g., `/docs.md`) to get raw markdown. Built at compile time via `scripts/copy_md_sources.js` which copies all `.mdx`/`.md` files from `content/` to `public/md-src/` as static `.md` files with inlined MDX components. 2. **Copy as Markdown button**: UI button on docs pages that fetches the `.md` endpoint and copies to clipboard for pasting into ChatGPT/Claude/Cursor. diff --git a/app/(home)/layout.tsx b/app/(home)/layout.tsx new file mode 100644 index 0000000000..223ef94391 --- /dev/null +++ b/app/(home)/layout.tsx @@ -0,0 +1,9 @@ +import { Layout } from "@/components/layout"; + +export default function HomeLayoutRoute({ + children, +}: { + children: React.ReactNode; +}) { + return {children}; +} diff --git a/app/(home)/page.tsx b/app/(home)/page.tsx new file mode 100644 index 0000000000..2ab3c79a07 --- /dev/null +++ b/app/(home)/page.tsx @@ -0,0 +1,5 @@ +import { Home } from "@/components/home"; + +export default function HomePage() { + return ; +} diff --git a/app/(wide)/WideSectionPage.tsx b/app/(wide)/WideSectionPage.tsx new file mode 100644 index 0000000000..d5b5b54831 --- /dev/null +++ b/app/(wide)/WideSectionPage.tsx @@ -0,0 +1,31 @@ +import type { Metadata } from "next"; +import { notFound } from "next/navigation"; +import { SECTION_CONFIG, WIDE_SECTIONS } from "@/lib/sections"; +import type { WideSectionSlug } from "@/lib/sections"; +import { SectionDocBodyClient } from "@/app/[section]/SectionDocBodyClient"; + +export async function generateWideSectionMetadata(section: WideSectionSlug): Promise { + const config = SECTION_CONFIG[section as keyof typeof SECTION_CONFIG]; + const page = config.source.getPage([section]); + if (!page) return { title: "Not Found" }; + return { + title: page.data.title, + description: page.data.description ?? undefined, + }; +} + +type Props = { section: WideSectionSlug }; + +export default async function WideSectionPage({ section }: Props) { + if (!WIDE_SECTIONS.has(section)) notFound(); + const config = SECTION_CONFIG[section as keyof typeof SECTION_CONFIG]; + const page = config.source.getPage([section]); + if (!page) notFound(); + + return ( + + ); +} diff --git a/app/(wide)/layout.tsx b/app/(wide)/layout.tsx new file mode 100644 index 0000000000..1a0693d3ad --- /dev/null +++ b/app/(wide)/layout.tsx @@ -0,0 +1,20 @@ +import { Layout } from "@/components/layout"; +import { MainContentWrapper } from "@/components/MainContentWrapper"; + +/** + * Layout for wide marketing sections (pricing, enterprise, etc.) that have + * their own route folders. No sidebar, no prose, max-w-7xl content. + */ +export default function WideSectionLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + +
+ {children} +
+
+ ); +} diff --git a/app/(wide)/pricing-self-host/page.tsx b/app/(wide)/pricing-self-host/page.tsx new file mode 100644 index 0000000000..2df2f0e915 --- /dev/null +++ b/app/(wide)/pricing-self-host/page.tsx @@ -0,0 +1,10 @@ +import type { Metadata } from "next"; +import WideSectionPage, { generateWideSectionMetadata } from "../WideSectionPage"; + +export async function generateMetadata(): Promise { + return generateWideSectionMetadata("pricing-self-host"); +} + +export default function Page() { + return ; +} diff --git a/app/(wide)/pricing/page.tsx b/app/(wide)/pricing/page.tsx new file mode 100644 index 0000000000..4e2bcf7c86 --- /dev/null +++ b/app/(wide)/pricing/page.tsx @@ -0,0 +1,10 @@ +import type { Metadata } from "next"; +import WideSectionPage, { generateWideSectionMetadata } from "../WideSectionPage"; + +export async function generateMetadata(): Promise { + return generateWideSectionMetadata("pricing"); +} + +export default function Page() { + return ; +} diff --git a/app/(wide)/startups/page.tsx b/app/(wide)/startups/page.tsx new file mode 100644 index 0000000000..24f0a0b4f2 --- /dev/null +++ b/app/(wide)/startups/page.tsx @@ -0,0 +1,10 @@ +import type { Metadata } from "next"; +import WideSectionPage, { generateWideSectionMetadata } from "../WideSectionPage"; + +export async function generateMetadata(): Promise { + return generateWideSectionMetadata("startups"); +} + +export default function Page() { + return ; +} diff --git a/app/(wide)/talk-to-us/page.tsx b/app/(wide)/talk-to-us/page.tsx new file mode 100644 index 0000000000..e5dde1897d --- /dev/null +++ b/app/(wide)/talk-to-us/page.tsx @@ -0,0 +1,10 @@ +import type { Metadata } from "next"; +import WideSectionPage, { generateWideSectionMetadata } from "../WideSectionPage"; + +export async function generateMetadata(): Promise { + return generateWideSectionMetadata("talk-to-us"); +} + +export default function Page() { + return ; +} diff --git a/app/(wide)/watch-demo/page.tsx b/app/(wide)/watch-demo/page.tsx new file mode 100644 index 0000000000..1548880cd0 --- /dev/null +++ b/app/(wide)/watch-demo/page.tsx @@ -0,0 +1,10 @@ +import type { Metadata } from "next"; +import WideSectionPage, { generateWideSectionMetadata } from "../WideSectionPage"; + +export async function generateMetadata(): Promise { + return generateWideSectionMetadata("watch-demo"); +} + +export default function Page() { + return ; +} diff --git a/app/[section]/SectionDocBodyClient.tsx b/app/[section]/SectionDocBodyClient.tsx new file mode 100644 index 0000000000..aa47e0b809 --- /dev/null +++ b/app/[section]/SectionDocBodyClient.tsx @@ -0,0 +1,63 @@ +"use client"; + +import { use } from "react"; +import { usePathname } from "next/navigation"; +import { DocsBody } from "fumadocs-ui/page"; +import { getMDXComponents } from "@/mdx-components"; +import { getSectionDocLoader } from "@/lib/section-loaders.generated"; +import { notFound } from "next/navigation"; +import { CopyMarkdownButton } from "@/components/MainContentWrapper"; + +type SectionDocBodyClientProps = { + collection: string; + slugPromise: Promise<{ slug?: string[] }>; + /** When true, wrap in DocsBody (prose) for typography. Use for marketing/docs; false for wide sections (pricing, etc.). */ + withProse?: boolean; +}; + +const loaderPromiseCache = new Map< + string, + ReturnType>> +>(); + +function getCachedLoaderPromise( + collection: string, + slug: string[], + loader: NonNullable> +) { + const key = `${collection}:${slug.length === 0 ? "" : slug.join("/")}`; + let p = loaderPromiseCache.get(key); + if (!p) { + p = loader(); + loaderPromiseCache.set(key, p); + } + return p; +} + +export function SectionDocBodyClient({ + collection, + slugPromise, + withProse = false, +}: SectionDocBodyClientProps) { + const params = use(slugPromise); + const slug = params.slug ?? []; + const loader = getSectionDocLoader(collection, slug); + if (!loader) notFound(); + + const mod = use(getCachedLoaderPromise(collection, slug, loader)); + const MDX = mod.default; + const pathname = usePathname(); + + const content = ; + if (withProse) { + return ( + +
+ +
+ {content} +
+ ); + } + return
{content}
; +} diff --git a/app/[section]/SectionLayoutWrapper.tsx b/app/[section]/SectionLayoutWrapper.tsx new file mode 100644 index 0000000000..e304d4e7fa --- /dev/null +++ b/app/[section]/SectionLayoutWrapper.tsx @@ -0,0 +1,17 @@ +"use client"; + +import { SidebarProvider } from "fumadocs-ui/components/sidebar/base"; +import type { ReactNode } from "react"; + +/** + * Thin client wrapper that provides SidebarProvider. + * DocsLayout is passed as {children} (from the server layout), so it runs in the + * server context and its LayoutContextProvider propagates correctly to DocsPage. + */ +export function SectionLayoutWrapper({ children }: { children: ReactNode }) { + return ( +
+ {children} +
+ ); +} diff --git a/app/[section]/[[...slug]]/page.tsx b/app/[section]/[[...slug]]/page.tsx new file mode 100644 index 0000000000..3defae2a1b --- /dev/null +++ b/app/[section]/[[...slug]]/page.tsx @@ -0,0 +1,100 @@ +import type { Metadata } from "next"; +import { notFound } from "next/navigation"; +import { DocsPage } from "fumadocs-ui/page"; +import type { TOCItemType } from "fumadocs-core/toc"; +import { SECTION_CONFIG, SECTION_SLUGS, MARKETING_SECTION_SLUGS, WIDE_SECTIONS, DOCS_STYLE_APP_SECTIONS, POST_SECTIONS, CHANGELOG_SECTIONS } from "@/lib/sections"; +import type { SectionSlug } from "@/lib/sections"; +import { MARKETING_SLUGS } from "@/lib/source"; +import { SectionDocBodyClient } from "../SectionDocBodyClient"; +import { DocsContributors } from "@/components/DocsContributors"; + +type PageProps = { + params: Promise<{ section: string; slug?: string[] }>; +}; + +export default async function SectionDocPage(props: PageProps) { + const params = await props.params; + const { section, slug: slugParam } = params; + const slug = slugParam ?? []; + const isMarketing = MARKETING_SECTION_SLUGS.has(section as (typeof MARKETING_SLUGS)[number]); + const isPost = POST_SECTIONS.has(section); + const isChangelog = CHANGELOG_SECTIONS.has(section); + const isCollectionIndex = section === "users" && slug.length === 0; + const effectiveSlug = isMarketing ? [section] : slug; + + if (!SECTION_SLUGS.includes(section as SectionSlug)) { + notFound(); + } + if (WIDE_SECTIONS.has(section)) { + notFound(); /* wide sections are served by app/(wide)/
/page.tsx */ + } + const config = SECTION_CONFIG[section as keyof typeof SECTION_CONFIG]; + const page = config.source.getPage(effectiveSlug); + + if (!page) notFound(); + + const data = page.data as typeof page.data & { + load?: () => Promise<{ body: unknown; toc: TOCItemType[] }>; + toc?: TOCItemType[]; + }; + const loaded = + typeof data.load === "function" + ? await data.load() + : { body: data.body, toc: data.toc ?? [] }; + const toc: TOCItemType[] = loaded.toc ?? []; + + return ( + }} + > + + + ); +} + +export async function generateMetadata(props: PageProps): Promise { + const params = await props.params; + const { section, slug: slugParam } = params; + const slug = slugParam ?? []; + const isMarketing = MARKETING_SECTION_SLUGS.has(section as (typeof MARKETING_SLUGS)[number]); + const effectiveSlug = isMarketing ? [section] : slug; + + if (!SECTION_SLUGS.includes(section as SectionSlug) || WIDE_SECTIONS.has(section)) { + return { title: "Not Found" }; + } + const config = SECTION_CONFIG[section as keyof typeof SECTION_CONFIG]; + const page = config.source.getPage(effectiveSlug); + if (!page) return { title: "Not Found" }; + return { + title: page.data.title, + description: page.data.description ?? undefined, + }; +} + +export function generateStaticParams() { + const params: { section: string; slug?: string[] }[] = []; + for (const section of SECTION_SLUGS) { + if (DOCS_STYLE_APP_SECTIONS.has(section)) continue; + if (WIDE_SECTIONS.has(section)) continue; /* handled by app/(wide)/
/page.tsx */ + const config = SECTION_CONFIG[section]; + const isMarketing = MARKETING_SECTION_SLUGS.has(section as (typeof MARKETING_SLUGS)[number]); + if (isMarketing) { + params.push({ section }); + } else { + const slugs = config.source.generateParams(); + for (const { slug } of slugs) { + params.push(slug.length > 0 ? { section, slug } : { section }); + } + } + } + return params; +} diff --git a/app/[section]/layout.tsx b/app/[section]/layout.tsx new file mode 100644 index 0000000000..4ace3e35a9 --- /dev/null +++ b/app/[section]/layout.tsx @@ -0,0 +1,88 @@ +import { use } from "react"; +import { notFound } from "next/navigation"; +import { Layout } from "@/components/layout"; +import { DocsLayout } from "fumadocs-ui/layouts/docs"; +import { + SECTION_CONFIG, + SECTION_SLUGS, + DOCS_STYLE_APP_SECTIONS, + MARKETING_SECTION_SLUGS, + WIDE_SECTIONS, + POST_SECTIONS, + CHANGELOG_SECTIONS, +} from "@/lib/sections"; +import { MenuSwitcher } from "@/components/MenuSwitcher"; +import { MainContentWrapper } from "@/components/MainContentWrapper"; +import { SectionLayoutWrapper } from "./SectionLayoutWrapper"; + +type LayoutProps = { + children: React.ReactNode; + params: Promise<{ section: string }>; +}; + +const contentWrapperClass = "mx-auto w-full max-w-4xl"; + +// Synchronous server component — keeps the same RSC context-propagation behaviour +// as app/docs/layout.tsx (which is also sync). Using React.use() to unwrap the +// Next.js 15 params Promise without making the component async. +export default function SectionLayout({ children, params }: LayoutProps) { + const { section } = use(params); + + if (!SECTION_SLUGS.includes(section as (typeof SECTION_SLUGS)[number])) { + notFound(); + } + if (DOCS_STYLE_APP_SECTIONS.has(section)) { + notFound(); + } + if (WIDE_SECTIONS.has(section)) { + notFound(); /* wide sections are served by app/(wide)/
/page.tsx */ + } + + const config = SECTION_CONFIG[section as keyof typeof SECTION_CONFIG]; + const tree = config.source.getPageTree(); + + const isMarketing = MARKETING_SECTION_SLUGS.has( + section as Parameters[0] + ); + const isPost = POST_SECTIONS.has(section); + const isChangelog = CHANGELOG_SECTIONS.has(section); + + // Render DocsLayout from the server component so its LayoutContextProvider + // correctly propagates context to DocsPage in the page component. + // SectionLayoutWrapper is a thin "use client" wrapper for SidebarProvider only. + return ( + + + } + } + themeSwitch={isMarketing || isPost ? { enabled: false } : undefined} + searchToggle={{ enabled: false }} + containerProps={ + isMarketing || isChangelog + ? // Force --fd-toc-width:0 so the docs grid doesn't reserve a phantom + // 268px TOC column (written to the grid by DocsPage's article via CSS :has()). + ({ style: { "--fd-toc-width": "0px" } } as React.ComponentProps< + typeof DocsLayout + >["containerProps"]) + : undefined + } + > + {isMarketing || isChangelog ? ( +
+
+ {children} +
+
+ ) : ( + children + )} +
+
+
+ ); +} diff --git a/pages/api/contact-sales.ts b/app/api/contact-sales/route.ts similarity index 55% rename from pages/api/contact-sales.ts rename to app/api/contact-sales/route.ts index c67438ff98..ea6bd3017d 100644 --- a/pages/api/contact-sales.ts +++ b/app/api/contact-sales/route.ts @@ -1,32 +1,32 @@ -import type { NextApiRequest, NextApiResponse } from "next"; +import { NextRequest, NextResponse } from "next/server"; import nodemailer from "nodemailer"; import { contactFormSchema, generateEmailContent, } from "@/lib/contact-sales-form"; -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - if (req.method !== "POST") { - return res.status(405).json({ error: "Method not allowed" }); - } - +export async function POST(request: NextRequest) { const smtpUrl = process.env.SMTP_CONNECTION_URL; if (!smtpUrl) { console.error("SMTP_CONNECTION_URL is not configured"); - return res.status(500).json({ error: "Email service not configured" }); + return NextResponse.json( + { error: "Email service not configured" }, + { status: 500 } + ); } try { - const validationResult = contactFormSchema.safeParse(req.body); + const body = await request.json(); + const validationResult = contactFormSchema.safeParse(body); if (!validationResult.success) { - return res.status(400).json({ - error: "Invalid form data", - details: validationResult.error.flatten(), - }); + return NextResponse.json( + { + error: "Invalid form data", + details: validationResult.error.flatten(), + }, + { status: 400 } + ); } const data = validationResult.data; @@ -42,9 +42,12 @@ export default async function handler( text: emailContent, }); - return res.status(200).json({ success: true }); + return NextResponse.json({ success: true }); } catch (error) { console.error("Failed to send email:", error); - return res.status(500).json({ error: "Failed to send email" }); + return NextResponse.json( + { error: "Failed to send email" }, + { status: 500 } + ); } } diff --git a/app/api/feedback/route.ts b/app/api/feedback/route.ts new file mode 100644 index 0000000000..b58a252890 --- /dev/null +++ b/app/api/feedback/route.ts @@ -0,0 +1,39 @@ +import { NextRequest, NextResponse } from "next/server"; + +export const runtime = "edge"; + +export async function POST(request: NextRequest) { + try { + if (!process.env.WEBSITE_FEEDBACK_WEBHOOK) { + throw new Error("WEBSITE_FEEDBACK_WEBHOOK is not set"); + } + + const body = await request.json(); + + const webhookResponse = await fetch(process.env.WEBSITE_FEEDBACK_WEBHOOK, { + method: "POST", + body: JSON.stringify({ + type: "docs-feedback", + ...body, + }), + headers: { + "Content-Type": "application/json", + }, + }); + + if (webhookResponse.status === 200) { + return NextResponse.json({ status: "OK" }); + } + console.error(webhookResponse); + return NextResponse.json( + {}, + { status: 500, statusText: "Internal Server Error" } + ); + } catch (error) { + console.error(error); + return NextResponse.json( + {}, + { status: 500, statusText: "Internal Server Error" } + ); + } +} diff --git a/app/api/get-continent-code/route.ts b/app/api/get-continent-code/route.ts new file mode 100644 index 0000000000..66e2f8f4f7 --- /dev/null +++ b/app/api/get-continent-code/route.ts @@ -0,0 +1,15 @@ +import { NextRequest } from "next/server"; + +export const runtime = "edge"; + +export function GET(request: NextRequest) { + const continentCode = request.headers.get("x-vercel-ip-continent"); + + return new Response( + JSON.stringify({ continentCode: continentCode || undefined }), + { + status: 200, + headers: { "Content-Type": "application/json" }, + } + ); +} diff --git a/pages/api/latest-releases.ts b/app/api/latest-releases/route.ts similarity index 50% rename from pages/api/latest-releases.ts rename to app/api/latest-releases/route.ts index 0cebe61eba..cb1b4480eb 100644 --- a/pages/api/latest-releases.ts +++ b/app/api/latest-releases/route.ts @@ -1,4 +1,4 @@ -import { NextApiRequest, NextApiResponse } from "next"; +import { NextResponse } from "next/server"; const REPOS = [ "langfuse/langfuse", @@ -16,13 +16,14 @@ type ApiResponse = { url?: string; }; -const getLatestReleases = async (): Promise => { - const headers = { +async function getLatestReleases(): Promise { + const headers: HeadersInit = { Accept: "application/vnd.github.v3+json", }; if (process.env.GITHUB_ACCESS_TOKEN) { - headers["Authorization"] = `token ${process.env.GITHUB_ACCESS_TOKEN}`; + (headers as Record)["Authorization"] = + `token ${process.env.GITHUB_ACCESS_TOKEN}`; } const responses = await Promise.all( @@ -30,7 +31,7 @@ const getLatestReleases = async (): Promise => { ); if (responses.some((res) => !res.ok)) { - throw new Error(`GitHub API responded with an error`); + throw new Error("GitHub API responded with an error"); } const langfuseReleases = await Promise.all( @@ -39,48 +40,36 @@ const getLatestReleases = async (): Promise => { if (!Array.isArray(data) || data.length === 0) { throw new Error(`No releases found for ${REPOS[index]}`); } - const latestRelease = data.find((release) => !release.prerelease); + const latestRelease = data.find((r: { prerelease?: boolean }) => !r.prerelease); if (!latestRelease) { throw new Error(`No latest release found for ${REPOS[index]}`); } return { repo: REPOS[index], - latestRelease: latestRelease ? latestRelease.tag_name : undefined, - publishedAt: latestRelease ? latestRelease.published_at : undefined, - url: latestRelease ? latestRelease.html_url : undefined, + latestRelease: latestRelease.tag_name, + publishedAt: latestRelease.published_at, + url: latestRelease.html_url, }; }) ); return langfuseReleases; -}; +} -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { +export async function GET() { try { - // Only allow GET requests for this endpoint - if (req.method !== "GET") { - return res.status(405).json({ message: "Method Not Allowed" }); - } - const langfuseReleases = await getLatestReleases(); - - return ( - res - .status(200) - .setHeader("Content-Type", "application/json") - // cache for 1 hour in the browser and CDN - // cache for 7 days if there is an error with the API response - .setHeader( - "Cache-Control", - "public, s-maxage=3600, max-age=3600, stale-if-error=604800" - ) - .json(langfuseReleases) - ); + return NextResponse.json(langfuseReleases, { + headers: { + "Cache-Control": + "public, s-maxage=3600, max-age=3600, stale-if-error=604800", + }, + }); } catch (error) { console.error(error); - return res.status(500).json({ message: "Internal Server Error" }); + return NextResponse.json( + { message: "Internal Server Error" }, + { status: 500 } + ); } } diff --git a/app/api/mcp/route.ts b/app/api/mcp/route.ts new file mode 100644 index 0000000000..25e95cb77f --- /dev/null +++ b/app/api/mcp/route.ts @@ -0,0 +1,28 @@ +import { NextRequest } from "next/server"; +import { mcpHandler } from "@/lib/mcp-handler"; + +export const maxDuration = 60; + +export async function GET(request: NextRequest) { + try { + return await mcpHandler(request); + } catch (error) { + console.error("MCP Handler Error:", error); + return new Response( + JSON.stringify({ error: "Internal server error" }), + { status: 500, headers: { "Content-Type": "application/json" } } + ); + } +} + +export async function POST(request: NextRequest) { + try { + return await mcpHandler(request); + } catch (error) { + console.error("MCP Handler Error:", error); + return new Response( + JSON.stringify({ error: "Internal server error" }), + { status: 500, headers: { "Content-Type": "application/json" } } + ); + } +} diff --git a/app/api/md-to-pdf/route.ts b/app/api/md-to-pdf/route.ts new file mode 100644 index 0000000000..d5ab67e48a --- /dev/null +++ b/app/api/md-to-pdf/route.ts @@ -0,0 +1,158 @@ +import { NextRequest, NextResponse } from "next/server"; +import { marked } from "marked"; + +const ALLOWED_HOSTNAMES = [ + "langfuse.com", + "raw.githubusercontent.com", + "github.com", +]; + +function removeAnchorTags(content: string): string { + return content.replace(/\s*\[#[\w-]+\]/g, ""); +} + +function processCallouts(content: string): string { + const calloutRegex = + /([\s\S]*?)<\/Callout>/g; + return content.replace(calloutRegex, (match, type, innerContent) => { + return `
${innerContent}
`; + }); +} + +export async function GET(request: NextRequest) { + try { + const url = request.nextUrl.searchParams.get("url"); + const disposition = request.nextUrl.searchParams.get("disposition"); + + if (!url || typeof url !== "string") { + return NextResponse.json( + { error: "Missing or invalid 'url' query parameter" }, + { status: 400 } + ); + } + + let markdownUrl: URL; + try { + markdownUrl = new URL(url); + } catch { + return NextResponse.json( + { error: "Invalid URL format" }, + { status: 400 } + ); + } + + if ( + process.env.NODE_ENV !== "development" && + !ALLOWED_HOSTNAMES.includes(markdownUrl.hostname) + ) { + return NextResponse.json( + { + error: `Fetching from ${markdownUrl.hostname} is not permitted.`, + allowed: ALLOWED_HOSTNAMES, + }, + { status: 400 } + ); + } + + const response = await fetch(markdownUrl.toString()); + if (!response.ok) { + return NextResponse.json( + { error: `Failed to fetch markdown: ${response.statusText}` }, + { status: response.status } + ); + } + + let markdownContent = await response.text(); + markdownContent = markdownContent.replace( + /^---\r?\n[\s\S]*?\r?\n---\r?\n/, + "" + ); + markdownContent = removeAnchorTags(markdownContent); + let htmlContent = await marked.parse(markdownContent); + htmlContent = processCallouts(htmlContent); + + const pathname = markdownUrl.pathname; + const filename = pathname.split("/").pop() || "document.md"; + const baseFilename = filename.replace(/\.mdx?$/i, ""); + const documentTitle = `Langfuse - ${baseFilename}`; + + const fullHtml = ` + + + + + ${documentTitle} + + + +
Source: ${markdownUrl.toString()}
+ ${htmlContent} + + + `; + + const isDev = process.env.NODE_ENV === "development"; + let browser; + + if (isDev) { + const puppeteer = await import("puppeteer"); + browser = await puppeteer.default.launch({ + headless: true, + args: ["--no-sandbox", "--disable-setuid-sandbox"], + }); + } else { + const puppeteerCore = await import("puppeteer-core"); + const chromium = await import("@sparticuz/chromium"); + browser = await puppeteerCore.default.launch({ + args: chromium.default.args, + executablePath: await chromium.default.executablePath(), + headless: true, + }); + } + + try { + const page = await browser.newPage(); + await page.setContent(fullHtml, { waitUntil: "networkidle0" }); + const pdf = await page.pdf({ + format: "A4", + printBackground: true, + margin: { top: "1cm", right: "1cm", bottom: "1cm", left: "1cm" }, + }); + + const pdfFilename = `${documentTitle}.pdf`; + const contentDisposition = + disposition === "download" ? "attachment" : "inline"; + + return new NextResponse(pdf, { + status: 200, + headers: { + "Content-Type": "application/pdf", + "Content-Disposition": `${contentDisposition}; filename="${pdfFilename}"`, + "Cache-Control": "public, s-maxage=60, stale-while-revalidate=86400", + }, + }); + } finally { + await browser.close(); + } + } catch (error) { + console.error("Error generating PDF:", error); + return NextResponse.json( + { + error: "Internal server error while generating PDF", + message: "An unexpected error occurred.", + }, + { status: 500 } + ); + } +} diff --git a/app/api/metabase-embed/route.ts b/app/api/metabase-embed/route.ts new file mode 100644 index 0000000000..1f4689dfba --- /dev/null +++ b/app/api/metabase-embed/route.ts @@ -0,0 +1,49 @@ +import { NextRequest, NextResponse } from "next/server"; +import jwt from "jsonwebtoken"; + +export async function GET(request: NextRequest) { + try { + const METABASE_SITE_URL = "https://langfuse.metabaseapp.com"; + const METABASE_SECRET_KEY = process.env.METABASE_SECRET_KEY; + + if (!METABASE_SECRET_KEY) { + console.error("Missing required environment variables: METABASE_SECRET_KEY"); + return NextResponse.json( + { message: "Server configuration error" }, + { status: 500 } + ); + } + + const dashboardId = request.nextUrl.searchParams.get("dashboardId") + ? parseInt(request.nextUrl.searchParams.get("dashboardId")!, 10) + : 25; + const theme = request.nextUrl.searchParams.get("theme") === "day" ? "day" : "night"; + + const payload = { + resource: { dashboard: dashboardId }, + params: {}, + exp: Math.round(Date.now() / 1000) + 10 * 60, + }; + + const token = jwt.sign(payload, METABASE_SECRET_KEY); + const iframeUrl = `${METABASE_SITE_URL}/embed/dashboard/${token}#theme=${theme}&bordered=false&titled=false`; + + return NextResponse.json( + { + iframeUrl, + expiresAt: new Date(Date.now() + 10 * 60 * 1000).toISOString(), + }, + { + headers: { + "Cache-Control": "public, s-maxage=300, max-age=0", + }, + } + ); + } catch (error) { + console.error("Error generating Metabase embed URL:", error); + return NextResponse.json( + { message: "Internal Server Error" }, + { status: 500 } + ); + } +} diff --git a/pages/api/og.tsx b/app/api/og/route.tsx similarity index 79% rename from pages/api/og.tsx rename to app/api/og/route.tsx index 4360057c96..56069394b2 100644 --- a/pages/api/og.tsx +++ b/app/api/og/route.tsx @@ -1,11 +1,9 @@ import { ImageResponse } from "@vercel/og"; import { NextRequest } from "next/server"; -export const config = { - runtime: "edge", -}; +export const runtime = "edge"; -export default async function handler(request: NextRequest) { +export async function GET(request: NextRequest) { const imageData = (await fetch( new URL("https://langfuse.com/icon256.png") ).then((res) => res.arrayBuffer())) as string; @@ -17,25 +15,17 @@ export default async function handler(request: NextRequest) { ).then((res) => res.arrayBuffer()); const { searchParams } = new URL(request.url); - - // ?title= - const rawTitle = searchParams.has("title") - ? searchParams.get("title") - : undefined; + const rawTitle = searchParams.get("title") ?? undefined; const title = rawTitle ?? "Langfuse"; - const rawDescription = searchParams.has("description") - ? searchParams.get("description") - : undefined; + const rawDescription = searchParams.get("description") ?? undefined; const description = rawDescription ? rawDescription.length > 155 ? rawDescription.slice(0, 155) + "..." : rawDescription : undefined; - const section = searchParams.has("section") - ? searchParams.get("section") - : undefined; + const section = searchParams.get("section") ?? undefined; return new ImageResponse( ( @@ -45,7 +35,6 @@ export default async function handler(request: NextRequest) { flexDirection: "column", height: "100%", width: "100%", - //backgroundImage: "radial-gradient(at center top, #283557, #000000)", backgroundColor: "#000000", fontFamily: "GeistSans", color: "#fff", @@ -121,16 +110,8 @@ export default async function handler(request: NextRequest) { width: 1200, height: 630, fonts: [ - { - name: "GeistMono", - data: fontGeistMono, - style: "normal", - }, - { - name: "GeistSans", - data: fontGeistSans, - style: "normal", - }, + { name: "GeistMono", data: fontGeistMono, style: "normal" }, + { name: "GeistSans", data: fontGeistSans, style: "normal" }, ], } ); diff --git a/app/api/productUpdateSignup/route.ts b/app/api/productUpdateSignup/route.ts new file mode 100644 index 0000000000..53b36a72a5 --- /dev/null +++ b/app/api/productUpdateSignup/route.ts @@ -0,0 +1,56 @@ +import { NextRequest, NextResponse } from "next/server"; +import * as z from "zod/v3"; + +export const runtime = "edge"; + +const emailSchema = z.string().email(); + +export async function POST(request: NextRequest) { + try { + const body = await request.json(); + const { email, source } = body; + + if (!emailSchema.safeParse(email).success) { + return NextResponse.json( + { error: "Invalid email address" }, + { status: 400 } + ); + } + + const loopsResponse = await fetch( + "https://app.loops.so/api/v1/contacts/create", + { + method: "POST", + body: JSON.stringify({ + email, + source, + mailingLists: { + cmbzj9z64074z0iyj7jj38ra6: true, + }, + }), + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${process.env.LOOPS_API_KEY}`, + }, + } + ); + + if (loopsResponse.status === 200 || loopsResponse.status === 409) { + return NextResponse.json({ status: "OK" }); + } + console.error("Loops", await loopsResponse.text()); + return NextResponse.json( + {}, + { status: 500, statusText: "Internal Server Error" } + ); + } catch (error) { + console.error(error); + return NextResponse.json( + {}, + { + status: 500, + statusText: error instanceof Error ? error.message : "Internal Server Error", + } + ); + } +} diff --git a/app/api/search-docs/route.ts b/app/api/search-docs/route.ts new file mode 100644 index 0000000000..fbc115dd21 --- /dev/null +++ b/app/api/search-docs/route.ts @@ -0,0 +1,40 @@ +import { NextRequest, NextResponse } from "next/server"; +import { searchLangfuseDocsWithInkeep, isNonEmptyString } from "@/lib/inkeep-search"; + +const corsHeaders = { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "GET, OPTIONS", + "Access-Control-Allow-Headers": "Content-Type", +}; + +export async function OPTIONS() { + return new NextResponse(null, { status: 204, headers: corsHeaders }); +} + +export async function GET(request: NextRequest) { + const query = request.nextUrl.searchParams.get("query"); + + if (!isNonEmptyString(query)) { + return NextResponse.json( + { error: "Missing or invalid 'query' parameter" }, + { status: 400, headers: corsHeaders } + ); + } + + try { + const inkeepResult = await searchLangfuseDocsWithInkeep(query); + return NextResponse.json( + { query, answer: inkeepResult.answer, metadata: inkeepResult.metadata }, + { headers: corsHeaders } + ); + } catch (error) { + return NextResponse.json( + { + error: "Error searching documentation", + message: error instanceof Error ? error.message : "Unknown error", + query, + }, + { status: 500, headers: corsHeaders } + ); + } +} diff --git a/app/blog/layout.tsx b/app/blog/layout.tsx new file mode 100644 index 0000000000..5400e27dc5 --- /dev/null +++ b/app/blog/layout.tsx @@ -0,0 +1,23 @@ +import { blogSource } from "@/lib/source"; +import { Layout } from "@/components/layout"; +import { FluxLayoutNoPanel } from "@/components/layout/FluxLayoutNoPanel"; + +export default function BlogLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <Layout> + <FluxLayoutNoPanel + tree={blogSource.getPageTree()} + nav={{ enabled: false }} + sidebar={{ enabled: false }} + themeSwitch={{ enabled: false }} + searchToggle={{ enabled: false }} + > + {children} + </FluxLayoutNoPanel> + </Layout> + ); +} diff --git a/app/blog/page.tsx b/app/blog/page.tsx new file mode 100644 index 0000000000..f9089e16e9 --- /dev/null +++ b/app/blog/page.tsx @@ -0,0 +1,68 @@ +import { Suspense } from "react"; +import { BlogIndex } from "@/components/blog/BlogIndex"; +import { Header } from "@/components/Header"; +import { ProductUpdateSignup } from "@/components/productUpdateSignup"; +import Link from "next/link"; +import { getPagesForRoute } from "@/lib/source"; +import type { BlogPageItem } from "@/components/blog/BlogIndex"; + +/** Serializable blog page for client (no functions/non-serializable fields). */ +function toSerializableBlogPage( + p: ReturnType<typeof getPagesForRoute>[number] +): BlogPageItem { + const fm = p.frontMatter ?? {}; + return { + route: p.route ?? "", + name: p.name ?? p.title, + title: p.title, + frontMatter: { + title: typeof fm.title === "string" ? fm.title : undefined, + description: typeof fm.description === "string" ? fm.description : undefined, + date: typeof fm.date === "string" ? fm.date : undefined, + tag: typeof fm.tag === "string" ? fm.tag : undefined, + ogImage: typeof fm.ogImage === "string" ? fm.ogImage : undefined, + author: typeof fm.author === "string" ? fm.author : undefined, + showInBlogIndex: + typeof fm.showInBlogIndex === "boolean" ? fm.showInBlogIndex : undefined, + }, + }; +} + +export default function BlogIndexPage() { + const rawPages = getPagesForRoute("/blog"); + const pages: BlogPageItem[] = rawPages + .filter((p) => p.route !== "/blog" && p.frontMatter?.showInBlogIndex !== false) + .sort( + (a, b) => + new Date((b.frontMatter?.date as string) ?? 0).getTime() - + new Date((a.frontMatter?.date as string) ?? 0).getTime() + ) + .map(toSerializableBlogPage); + + return ( + <div className="mx-auto max-w-360 pl-[max(env(safe-area-inset-left),1.5rem)] pr-[max(env(safe-area-inset-right),1.5rem)]"> + <div className="flex flex-col content-center items-center my-10 text-center"> + <Header + title="Blog" + description={ + <> + The latest updates from Langfuse. See{" "} + <Link href="/changelog" className="underline"> + Changelog + </Link>{" "} + for more product updates. + </> + } + className="mb-8" + h="h1" + /> + <div className="mb-8"> + <ProductUpdateSignup source="blog" /> + </div> + </div> + <Suspense fallback={<div className="min-h-[400px] animate-pulse rounded-md bg-muted/50" />}> + <BlogIndex path="/blog" pages={pages} /> + </Suspense> + </div> + ); +} diff --git a/app/changelog/layout.tsx b/app/changelog/layout.tsx new file mode 100644 index 0000000000..a500140f5a --- /dev/null +++ b/app/changelog/layout.tsx @@ -0,0 +1,23 @@ +import { changelogSource } from "@/lib/source"; +import { Layout } from "@/components/layout"; +import { FluxLayoutNoPanel } from "@/components/layout/FluxLayoutNoPanel"; + +export default function ChangelogLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <Layout> + <FluxLayoutNoPanel + tree={changelogSource.getPageTree()} + nav={{ enabled: false }} + sidebar={{ enabled: false }} + themeSwitch={{ enabled: false }} + searchToggle={{ enabled: false }} + > + {children} + </FluxLayoutNoPanel> + </Layout> + ); +} diff --git a/app/changelog/page.tsx b/app/changelog/page.tsx new file mode 100644 index 0000000000..ffebe35dfb --- /dev/null +++ b/app/changelog/page.tsx @@ -0,0 +1,67 @@ +import { Suspense } from "react"; +import { ChangelogIndex } from "@/components/changelog/ChangelogIndex"; +import type { ChangelogPageItem } from "@/components/changelog/ChangelogIndex"; +import { Header } from "@/components/Header"; +import { ProductUpdateSignup } from "@/components/productUpdateSignup"; +import Link from "next/link"; +import { getPagesForRoute } from "@/lib/source"; + +/** Keep only serializable fields so we can pass pages to a client component. */ +function toSerializableChangelogPage( + p: (ReturnType<typeof getPagesForRoute>[number] & { route: string }) +): ChangelogPageItem { + const fm = p.frontMatter ?? {}; + return { + route: p.route, + name: p.name ?? p.title, + title: p.title, + frontMatter: { + title: typeof fm.title === "string" ? fm.title : undefined, + description: typeof fm.description === "string" ? fm.description : undefined, + date: typeof fm.date === "string" ? fm.date : undefined, + ogImage: typeof fm.ogImage === "string" ? fm.ogImage : undefined, + ogVideo: typeof fm.ogVideo === "string" ? fm.ogVideo : undefined, + gif: typeof fm.gif === "string" ? fm.gif : undefined, + badge: typeof fm.badge === "string" ? fm.badge : undefined, + }, + }; +} + +export default function ChangelogIndexPage() { + const rawPages = getPagesForRoute("/changelog"); + const pages: ChangelogPageItem[] = rawPages + .filter((p) => p.route !== "/changelog") + .sort( + (a, b) => + new Date((b.frontMatter?.date as string) ?? 0).getTime() - + new Date((a.frontMatter?.date as string) ?? 0).getTime() + ) + .map(toSerializableChangelogPage); + + return ( + <div className="md:container"> + <div className="flex flex-col items-center content-center text-center my-10"> + <Header + title="Changelog" + description={ + <> + Latest release updates from the Langfuse team. Check out our{" "} + <Link href="/docs/roadmap" className="underline"> + Roadmap + </Link>{" "} + to see what's next. + </> + } + className="mb-8" + h="h1" + /> + <div className="mb-8"> + <ProductUpdateSignup source="changelog" /> + </div> + </div> + <Suspense fallback={<div className="min-h-[400px] animate-pulse rounded-md bg-muted/50" />}> + <ChangelogIndex pages={pages} /> + </Suspense> + </div> + ); +} diff --git a/app/cloud/[[...path]]/page.tsx b/app/cloud/[[...path]]/page.tsx new file mode 100644 index 0000000000..28a47d9fd3 --- /dev/null +++ b/app/cloud/[[...path]]/page.tsx @@ -0,0 +1,225 @@ +"use client"; + +import { useCallback, useMemo, type MouseEvent } from "react"; +import Image from "next/image"; +import { usePathname } from "next/navigation"; +import { + ArrowRight, + Globe, + Shield, + ShieldCheck, +} from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent } from "@/components/ui/card"; +import { + cloudRegionSelectorOrder, + cloudRegions, + type CloudRegionKey, +} from "@/lib/cloud-regions"; +import { useCloudRegionSignIn } from "@/lib/use-cloud-region-sign-in"; + +const regionCards: Record< + CloudRegionKey, + { + title: string; + awsRegion: string; + awsLocation: string; + icon: typeof Shield; + flag?: string; + } +> = { + us: { + title: "US", + awsRegion: "us-west-2", + awsLocation: "Oregon", + icon: Shield, + flag: "🇺🇸", + }, + hipaa: { + title: "US HIPAA", + awsRegion: "us-west-2", + awsLocation: "Oregon", + icon: ShieldCheck, + }, + eu: { + title: "Europe", + awsRegion: "eu-west-1", + awsLocation: "Ireland", + icon: Globe, + flag: "🇪🇺", + }, +}; + +const CLOUD_ROUTE_PREFIX = "/cloud"; + +const stripControlChars = (value: string) => + value.replace(/[\u0000-\u001F\u007F]/g, ""); + +const getCloudRedirectPartsFromPathname = (pathname: string) => { + const sanitized = stripControlChars(pathname || ""); + let cloudSubpath = "/"; + if ( + sanitized.startsWith(`${CLOUD_ROUTE_PREFIX}/`) && + sanitized.length > CLOUD_ROUTE_PREFIX.length + ) { + cloudSubpath = sanitized.slice(CLOUD_ROUTE_PREFIX.length); + } else if (sanitized === CLOUD_ROUTE_PREFIX) { + cloudSubpath = "/"; + } + return { cloudSubpath }; +}; + +const buildCloudRedirectUrl = ({ + region, + cloudSubpath, + search, + hash, +}: { + region: CloudRegionKey; + cloudSubpath: string; + search: string; + hash: string; +}) => { + const baseUrl = cloudRegions[region].url.replace(/\/$/, ""); + const targetPath = cloudSubpath.startsWith("/") ? cloudSubpath : `/${cloudSubpath}`; + return `${baseUrl}${targetPath}${search}${hash}`; +}; + +const SignedInHint = () => ( + <span className="inline-flex items-center gap-1.5 text-[11px] font-medium text-emerald-700/90 dark:text-emerald-400"> + <span className="h-1.5 w-1.5 rounded-full bg-emerald-500/90" /> + Signed in + </span> +); + +const getCloudHost = (url: string) => new URL(url).host; + +export default function CloudRegionSelectorPage() { + const pathname = usePathname(); + const signedInRegions = useCloudRegionSignIn(); + + const { cloudSubpath } = useMemo( + () => getCloudRedirectPartsFromPathname(pathname || ""), + [pathname] + ); + + const handleRegionSelect = useCallback( + (region: CloudRegionKey, event: MouseEvent<HTMLAnchorElement>) => { + const isModifiedClick = + event.button !== 0 || + event.metaKey || + event.ctrlKey || + event.shiftKey || + event.altKey; + if (isModifiedClick) return; + event.preventDefault(); + const search = typeof window === "undefined" ? "" : window.location.search; + const hash = typeof window === "undefined" ? "" : window.location.hash; + const targetUrl = buildCloudRedirectUrl({ + region, + cloudSubpath, + search, + hash, + }); + if (typeof window !== "undefined") { + window.location.assign(targetUrl); + } + }, + [cloudSubpath] + ); + + return ( + <main className="flex min-h-screen items-center bg-background px-4 py-6 sm:min-h-full sm:justify-center sm:px-6 sm:py-10 lg:px-8"> + <div className="w-full max-w-[480px]"> + <div className="text-center sm:mx-auto sm:w-full"> + <a href="/" aria-label="Langfuse Home" className="inline-flex"> + <Image + src="/langfuse_logo.svg" + alt="Langfuse" + width={152} + height={20} + priority + className="h-auto w-36 dark:hidden" + /> + <Image + src="/langfuse_logo_white.svg" + alt="Langfuse" + width={152} + height={20} + priority + className="hidden h-auto w-36 dark:block" + /> + </a> + <h1 className="mt-7 text-2xl font-bold leading-9 tracking-tight text-primary"> + Select your region + </h1> + </div> + + <Card className="mt-8 overflow-hidden border shadow-sm"> + <CardContent className="divide-y p-0"> + {cloudRegionSelectorOrder.map((regionKey) => { + const region = cloudRegions[regionKey]; + const card = regionCards[regionKey]; + const Icon = card.icon; + const host = getCloudHost(region.url); + const href = buildCloudRedirectUrl({ + region: regionKey, + cloudSubpath, + search: typeof window === "undefined" ? "" : "", + hash: typeof window === "undefined" ? "" : "", + }); + const isSignedIn = signedInRegions[regionKey]; + + return ( + <div + key={regionKey} + className="grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 px-4 py-3.5 sm:gap-4 sm:px-5 sm:py-4" + > + <div className="flex min-w-0 items-start gap-3"> + <span className="inline-flex h-11 w-11 shrink-0 items-center justify-center rounded-md border border-border/80 bg-muted/25 text-lg"> + {card.flag ? ( + <span>{card.flag}</span> + ) : ( + <Icon className="h-5 w-5 text-muted-foreground" /> + )} + </span> + <div className="min-w-0"> + <p className="mb-1 text-base font-semibold"> + {card.title} + </p> + <p className="mt-1.5 text-xs font-medium tracking-wide text-muted-foreground/80"> + AWS {card.awsRegion} • {card.awsLocation} + </p> + <code + className="mt-1.5 block max-w-full truncate text-xs text-muted-foreground/90" + title={host} + > + {host} + </code> + </div> + </div> + <div className="flex flex-col items-center gap-1.5"> + <Button + asChild + size="sm" + className="whitespace-nowrap" + > + <a + href={href} + onClick={(event) => handleRegionSelect(regionKey, event)} + > + Continue + <ArrowRight className="h-4 w-4" /> + </a> + </Button> + {isSignedIn && <SignedInHint />} + </div> + </div> + ); + })} + </CardContent> + </Card> + </div> + </main> + ); +} diff --git a/app/cloud/layout.tsx b/app/cloud/layout.tsx new file mode 100644 index 0000000000..a70c9c0ffe --- /dev/null +++ b/app/cloud/layout.tsx @@ -0,0 +1,15 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Select Cloud Region", + description: + "Select the Langfuse Cloud region and continue to your destination.", +}; + +export default function CloudLayout({ + children, +}: { + children: React.ReactNode; +}) { + return children; +} diff --git a/app/docs/.layout.tsx.swp b/app/docs/.layout.tsx.swp new file mode 100644 index 0000000000..00ac75782e Binary files /dev/null and b/app/docs/.layout.tsx.swp differ diff --git a/app/docs/DocsLayoutWrapper.tsx b/app/docs/DocsLayoutWrapper.tsx new file mode 100644 index 0000000000..79cdbe7790 --- /dev/null +++ b/app/docs/DocsLayoutWrapper.tsx @@ -0,0 +1,17 @@ +"use client"; + +import { SidebarProvider } from "fumadocs-ui/components/sidebar/base"; +import type { ReactNode } from "react"; + +/** + * Wraps docs layout so SidebarTrigger has a SidebarProvider. + * Sidebar sticky top is handled via --fd-docs-row-1 override in overrides.css: + * calc(var(--fd-nav-height, 4rem) + var(--fd-banner-height, 0px)) + */ +export function DocsLayoutWrapper({ children }: { children: ReactNode }) { + return ( + <div className="layout-wrapper"> + <SidebarProvider>{children}</SidebarProvider> + </div> + ); +} diff --git a/app/docs/[[...slug]]/DocBodyClient.tsx b/app/docs/[[...slug]]/DocBodyClient.tsx new file mode 100644 index 0000000000..b2dae26076 --- /dev/null +++ b/app/docs/[[...slug]]/DocBodyClient.tsx @@ -0,0 +1,50 @@ +"use client"; + +import { use } from "react"; +import { usePathname } from "next/navigation"; +import { DocsBody } from "fumadocs-ui/page"; +import { getMDXComponents } from "../../../mdx-components"; +import { getDocLoader } from "./doc-loaders.client"; +import { notFound } from "next/navigation"; +import { CopyMarkdownButton } from "@/components/MainContentWrapper"; + +type DocBodyClientProps = { + slugPromise: Promise<{ slug?: string[] }>; +}; + +// Cache loader promises by slug so use() receives a stable promise (required by React) +const loaderPromiseCache = new Map<string, ReturnType<ReturnType<typeof getDocLoader>>>(); + +function getCachedLoaderPromise(slug: string[], loader: NonNullable<ReturnType<typeof getDocLoader>>) { + const key = slug.length === 0 ? "" : slug.join("/"); + let p = loaderPromiseCache.get(key); + if (!p) { + p = loader(); + loaderPromiseCache.set(key, p); + } + return p; +} + +/** + * Renders doc body on the client via dynamic imports (doc-loaders.client). + * Avoids passing MDX component functions from server and avoids importing lib/source (no fs in client). + */ +export function DocBodyClient({ slugPromise }: DocBodyClientProps) { + const params = use(slugPromise); + const slug = params.slug ?? []; + const loader = getDocLoader(slug); + if (!loader) notFound(); + + const mod = use(getCachedLoaderPromise(slug, loader)); + const MDX = mod.default; + const pathname = usePathname(); + + return ( + <DocsBody> + <div className="mb-4"> + <CopyMarkdownButton key={pathname} /> + </div> + <MDX components={getMDXComponents()} /> + </DocsBody> + ); +} diff --git a/app/docs/[[...slug]]/doc-loaders.client.ts b/app/docs/[[...slug]]/doc-loaders.client.ts new file mode 100644 index 0000000000..70d40620aa --- /dev/null +++ b/app/docs/[[...slug]]/doc-loaders.client.ts @@ -0,0 +1,184 @@ +"use client"; + +import type { ComponentType } from "react"; + +/** + * Client-only doc loaders: dynamic imports to MDX files. + * Does not import lib/source or .source, so no Node fs/runtime in the client bundle. + */ +export const docLoaders: Record< + string, + () => Promise<{ default: ComponentType<{ components?: Record<string, ComponentType> }> }> +> = { + "ask-ai": () => import("@/content/docs/ask-ai.mdx?collection=docs"), + demo: () => import("@/content/docs/demo.mdx?collection=docs"), + "docs-mcp": () => import("@/content/docs/docs-mcp.mdx?collection=docs"), + glossary: () => import("@/content/docs/glossary.mdx?collection=docs"), + "": () => import("@/content/docs/index.mdx?collection=docs"), + roadmap: () => import("@/content/docs/roadmap.mdx?collection=docs"), + "security-and-guardrails": () => + import("@/content/docs/security-and-guardrails.mdx?collection=docs"), + "administration/audit-logs": () => + import("@/content/docs/administration/audit-logs.mdx?collection=docs"), + "administration/authentication-and-sso": () => + import("@/content/docs/administration/authentication-and-sso.mdx?collection=docs"), + "administration/billable-units": () => + import("@/content/docs/administration/billable-units.mdx?collection=docs"), + "administration/data-deletion": () => + import("@/content/docs/administration/data-deletion.mdx?collection=docs"), + "administration/data-retention": () => + import("@/content/docs/administration/data-retention.mdx?collection=docs"), + "administration/llm-connection": () => + import("@/content/docs/administration/llm-connection.mdx?collection=docs"), + "administration/rbac": () => import("@/content/docs/administration/rbac.mdx?collection=docs"), + "administration/scim-and-org-api": () => + import("@/content/docs/administration/scim-and-org-api.mdx?collection=docs"), + "administration/spend-alerts": () => + import("@/content/docs/administration/spend-alerts.mdx?collection=docs"), + "administration/troubleshooting-and-faq": () => + import("@/content/docs/administration/troubleshooting-and-faq.mdx?collection=docs"), + "api-and-data-platform/overview": () => + import("@/content/docs/api-and-data-platform/overview.mdx?collection=docs"), + "evaluation/core-concepts": () => + import("@/content/docs/evaluation/core-concepts.mdx?collection=docs"), + "evaluation/overview": () => + import("@/content/docs/evaluation/overview.mdx?collection=docs"), + "evaluation/troubleshooting-and-faq": () => + import("@/content/docs/evaluation/troubleshooting-and-faq.mdx?collection=docs"), + "metrics/overview": () => import("@/content/docs/metrics/overview.mdx?collection=docs"), + "observability/data-model": () => + import("@/content/docs/observability/data-model.mdx?collection=docs"), + "observability/get-started": () => + import("@/content/docs/observability/get-started.mdx?collection=docs"), + "observability/overview": () => + import("@/content/docs/observability/overview.mdx?collection=docs"), + "observability/troubleshooting-and-faq": () => + import("@/content/docs/observability/troubleshooting-and-faq.mdx?collection=docs"), + "prompt-management/data-model": () => + import("@/content/docs/prompt-management/data-model.mdx?collection=docs"), + "prompt-management/get-started": () => + import("@/content/docs/prompt-management/get-started.mdx?collection=docs"), + "prompt-management/overview": () => + import("@/content/docs/prompt-management/overview.mdx?collection=docs"), + "prompt-management/troubleshooting-and-faq": () => + import("@/content/docs/prompt-management/troubleshooting-and-faq.mdx?collection=docs"), + "api-and-data-platform/features/export-from-ui": () => + import("@/content/docs/api-and-data-platform/features/export-from-ui.mdx?collection=docs"), + "api-and-data-platform/features/export-to-blob-storage": () => + import("@/content/docs/api-and-data-platform/features/export-to-blob-storage.mdx?collection=docs"), + "api-and-data-platform/features/mcp-server": () => + import("@/content/docs/api-and-data-platform/features/mcp-server.mdx?collection=docs"), + "api-and-data-platform/features/observations-api": () => + import("@/content/docs/api-and-data-platform/features/observations-api.mdx?collection=docs"), + "api-and-data-platform/features/public-api": () => + import("@/content/docs/api-and-data-platform/features/public-api.mdx?collection=docs"), + "api-and-data-platform/features/query-via-sdk": () => + import("@/content/docs/api-and-data-platform/features/query-via-sdk.mdx?collection=docs"), + "evaluation/evaluation-methods/annotation-queues": () => + import("@/content/docs/evaluation/evaluation-methods/annotation-queues.mdx?collection=docs"), + "evaluation/evaluation-methods/llm-as-a-judge": () => + import("@/content/docs/evaluation/evaluation-methods/llm-as-a-judge.mdx?collection=docs"), + "evaluation/evaluation-methods/score-analytics": () => + import("@/content/docs/evaluation/evaluation-methods/score-analytics.mdx?collection=docs"), + "evaluation/evaluation-methods/scores-via-sdk": () => + import("@/content/docs/evaluation/evaluation-methods/scores-via-sdk.mdx?collection=docs"), + "evaluation/evaluation-methods/scores-via-ui": () => + import("@/content/docs/evaluation/evaluation-methods/scores-via-ui.mdx?collection=docs"), + "evaluation/experiments/data-model": () => + import("@/content/docs/evaluation/experiments/data-model.mdx?collection=docs"), + "evaluation/experiments/datasets": () => + import("@/content/docs/evaluation/experiments/datasets.mdx?collection=docs"), + "evaluation/experiments/experiments-via-sdk": () => + import("@/content/docs/evaluation/experiments/experiments-via-sdk.mdx?collection=docs"), + "evaluation/experiments/experiments-via-ui": () => + import("@/content/docs/evaluation/experiments/experiments-via-ui.mdx?collection=docs"), + "metrics/features/custom-dashboards": () => + import("@/content/docs/metrics/features/custom-dashboards.mdx?collection=docs"), + "metrics/features/metrics-api": () => + import("@/content/docs/metrics/features/metrics-api.mdx?collection=docs"), + "observability/features/agent-graphs": () => + import("@/content/docs/observability/features/agent-graphs.mdx?collection=docs"), + "observability/features/comments": () => + import("@/content/docs/observability/features/comments.mdx?collection=docs"), + "observability/features/corrections": () => + import("@/content/docs/observability/features/corrections.mdx?collection=docs"), + "observability/features/environments": () => + import("@/content/docs/observability/features/environments.mdx?collection=docs"), + "observability/features/log-levels": () => + import("@/content/docs/observability/features/log-levels.mdx?collection=docs"), + "observability/features/masking": () => + import("@/content/docs/observability/features/masking.mdx?collection=docs"), + "observability/features/mcp-tracing": () => + import("@/content/docs/observability/features/mcp-tracing.mdx?collection=docs"), + "observability/features/metadata": () => + import("@/content/docs/observability/features/metadata.mdx?collection=docs"), + "observability/features/multi-modality": () => + import("@/content/docs/observability/features/multi-modality.mdx?collection=docs"), + "observability/features/observation-types": () => + import("@/content/docs/observability/features/observation-types.mdx?collection=docs"), + "observability/features/queuing-batching": () => + import("@/content/docs/observability/features/queuing-batching.mdx?collection=docs"), + "observability/features/releases-and-versioning": () => + import("@/content/docs/observability/features/releases-and-versioning.mdx?collection=docs"), + "observability/features/sampling": () => + import("@/content/docs/observability/features/sampling.mdx?collection=docs"), + "observability/features/sessions": () => + import("@/content/docs/observability/features/sessions.mdx?collection=docs"), + "observability/features/tags": () => + import("@/content/docs/observability/features/tags.mdx?collection=docs"), + "observability/features/token-and-cost-tracking": () => + import("@/content/docs/observability/features/token-and-cost-tracking.mdx?collection=docs"), + "observability/features/trace-ids-and-distributed-tracing": () => + import("@/content/docs/observability/features/trace-ids-and-distributed-tracing.mdx?collection=docs"), + "observability/features/url": () => + import("@/content/docs/observability/features/url.mdx?collection=docs"), + "observability/features/user-feedback": () => + import("@/content/docs/observability/features/user-feedback.mdx?collection=docs"), + "observability/features/users": () => + import("@/content/docs/observability/features/users.mdx?collection=docs"), + "observability/sdk/advanced-features": () => + import("@/content/docs/observability/sdk/advanced-features.mdx?collection=docs"), + "observability/sdk/instrumentation": () => + import("@/content/docs/observability/sdk/instrumentation.mdx?collection=docs"), + "observability/sdk/overview": () => + import("@/content/docs/observability/sdk/overview.mdx?collection=docs"), + "observability/sdk/troubleshooting-and-faq": () => + import("@/content/docs/observability/sdk/troubleshooting-and-faq.mdx?collection=docs"), + "observability/sdk/upgrade-path": () => + import("@/content/docs/observability/sdk/upgrade-path.mdx?collection=docs"), + "prompt-management/features/a-b-testing": () => + import("@/content/docs/prompt-management/features/a-b-testing.mdx?collection=docs"), + "prompt-management/features/caching": () => + import("@/content/docs/prompt-management/features/caching.mdx?collection=docs"), + "prompt-management/features/composability": () => + import("@/content/docs/prompt-management/features/composability.mdx?collection=docs"), + "prompt-management/features/config": () => + import("@/content/docs/prompt-management/features/config.mdx?collection=docs"), + "prompt-management/features/folders": () => + import("@/content/docs/prompt-management/features/folders.mdx?collection=docs"), + "prompt-management/features/github-integration": () => + import("@/content/docs/prompt-management/features/github-integration.mdx?collection=docs"), + "prompt-management/features/guaranteed-availability": () => + import("@/content/docs/prompt-management/features/guaranteed-availability.mdx?collection=docs"), + "prompt-management/features/link-to-traces": () => + import("@/content/docs/prompt-management/features/link-to-traces.mdx?collection=docs"), + "prompt-management/features/mcp-server": () => + import("@/content/docs/prompt-management/features/mcp-server.mdx?collection=docs"), + "prompt-management/features/message-placeholders": () => + import("@/content/docs/prompt-management/features/message-placeholders.mdx?collection=docs"), + "prompt-management/features/n8n-node": () => + import("@/content/docs/prompt-management/features/n8n-node.mdx?collection=docs"), + "prompt-management/features/playground": () => + import("@/content/docs/prompt-management/features/playground.mdx?collection=docs"), + "prompt-management/features/prompt-version-control": () => + import("@/content/docs/prompt-management/features/prompt-version-control.mdx?collection=docs"), + "prompt-management/features/variables": () => + import("@/content/docs/prompt-management/features/variables.mdx?collection=docs"), + "prompt-management/features/webhooks-slack-integrations": () => + import("@/content/docs/prompt-management/features/webhooks-slack-integrations.mdx?collection=docs"), +}; + +export function getDocLoader(slug: string[]): (typeof docLoaders)[string] | undefined { + const key = slug.length === 0 ? "" : slug.join("/"); + return docLoaders[key]; +} diff --git a/app/docs/[[...slug]]/not-found.tsx b/app/docs/[[...slug]]/not-found.tsx new file mode 100644 index 0000000000..f5ccb78f17 --- /dev/null +++ b/app/docs/[[...slug]]/not-found.tsx @@ -0,0 +1,18 @@ +import Link from "next/link"; + +export default function DocsNotFound() { + return ( + <div className="flex flex-col items-center justify-center gap-4 py-16 text-center"> + <h1 className="text-2xl font-semibold">Page not found</h1> + <p className="text-fd-muted-foreground"> + The documentation page you’re looking for doesn’t exist or has moved. + </p> + <Link + href="/docs" + className="text-fd-primary hover:underline" + > + Back to Documentation + </Link> + </div> + ); +} diff --git a/app/docs/[[...slug]]/page.tsx b/app/docs/[[...slug]]/page.tsx new file mode 100644 index 0000000000..74e49c1045 --- /dev/null +++ b/app/docs/[[...slug]]/page.tsx @@ -0,0 +1,56 @@ +import type { Metadata } from "next"; +import { source } from "@/lib/source"; +import { DocsPage } from "fumadocs-ui/page"; +import { notFound } from "next/navigation"; +import { DocBodyClient } from "./DocBodyClient"; +import { DocsContributors } from "@/components/DocsContributors"; + +type PageProps = { + params: Promise<{ slug?: string[] }>; +}; + +export default async function DocPage(props: PageProps) { + const params = await props.params; + const slug = params.slug ?? []; + const page = source.getPage(slug); + + if (!page) notFound(); + + const { toc } = page.data; + + const filePath = `content/docs/${slug.length === 0 ? "index" : slug.join("/")}.mdx`; + + return ( + <DocsPage + toc={toc} + breadcrumb={{ includePage: true, includeRoot: true }} + tableOfContent={{ footer: <DocsContributors pageTitle={page.data.title} /> }} + editOnGithub={{ + owner: "langfuse", + repo: "langfuse-docs", + sha: "main", + path: filePath, + }} + > + <DocBodyClient slugPromise={props.params} /> + </DocsPage> + ); +} + +export async function generateMetadata(props: PageProps): Promise<Metadata> { + const params = await props.params; + const slug = params.slug ?? []; + const page = source.getPage(slug); + if (!page) + return { + title: "Not Found", + }; + return { + title: page.data.title, + description: page.data.description ?? undefined, + }; +} + +export function generateStaticParams() { + return source.generateParams(); +} diff --git a/app/docs/layout.tsx b/app/docs/layout.tsx new file mode 100644 index 0000000000..f5439f9eb9 --- /dev/null +++ b/app/docs/layout.tsx @@ -0,0 +1,27 @@ +import { DocsLayout } from "fumadocs-ui/layouts/docs"; +import { source } from "@/lib/source"; +import { DocsLayoutWrapper } from "./DocsLayoutWrapper"; +import { Layout } from "@/components/layout"; +import { MenuSwitcher } from "@/components/MenuSwitcher"; + +export default function DoscPageLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <Layout> + <DocsLayoutWrapper> + <DocsLayout + tree={source.getPageTree()} + githubUrl="https://github.com/langfuse/langfuse-docs" + nav={{ enabled: false }} + sidebar={{ banner: <MenuSwitcher /> }} + searchToggle={{ enabled: false }} + > + {children} + </DocsLayout> + </DocsLayoutWrapper> + </Layout> + ); +} diff --git a/app/guides/[[...slug]]/not-found.tsx b/app/guides/[[...slug]]/not-found.tsx new file mode 100644 index 0000000000..4411fd59ab --- /dev/null +++ b/app/guides/[[...slug]]/not-found.tsx @@ -0,0 +1,15 @@ +import Link from "next/link"; + +export default function GuidesNotFound() { + return ( + <div className="flex flex-col items-center justify-center gap-4 py-16 text-center"> + <h1 className="text-2xl font-semibold">Page not found</h1> + <p className="text-fd-muted-foreground"> + The guides page you're looking for doesn't exist or has moved. + </p> + <Link href="/guides" className="text-fd-primary hover:underline"> + Back to Guides + </Link> + </div> + ); +} diff --git a/app/guides/[[...slug]]/page.tsx b/app/guides/[[...slug]]/page.tsx new file mode 100644 index 0000000000..c1d9371fae --- /dev/null +++ b/app/guides/[[...slug]]/page.tsx @@ -0,0 +1,61 @@ +import type { Metadata } from "next"; +import { guidesSource } from "@/lib/source"; +import { DocsPage } from "fumadocs-ui/page"; +import { notFound } from "next/navigation"; +import { SectionDocBodyClientWithDocsBody } from "@/components/SectionDocBodyClientWithDocsBody"; +import { DocsContributors } from "@/components/DocsContributors"; + +type PageProps = { + params: Promise<{ slug?: string[] }>; +}; + +const COLLECTION = "guides"; +const CONTENT_DIR = "content/guides"; + +export default async function GuidesPage(props: PageProps) { + const params = await props.params; + const slug = params.slug ?? []; + const page = guidesSource.getPage(slug); + + if (!page) notFound(); + + const { toc } = page.data; + const filePath = `${CONTENT_DIR}/${slug.length === 0 ? "index" : slug.join("/")}.mdx`; + + return ( + <DocsPage + toc={toc} + breadcrumb={{ includePage: true, includeRoot: true }} + tableOfContent={{ footer: <DocsContributors pageTitle={page.data.title} /> }} + editOnGithub={{ + owner: "langfuse", + repo: "langfuse-docs", + sha: "main", + path: filePath, + }} + > + <SectionDocBodyClientWithDocsBody + collection={COLLECTION} + slugPromise={props.params} + /> + </DocsPage> + ); +} + +export async function generateMetadata(props: PageProps): Promise<Metadata> { + const params = await props.params; + const slug = params.slug ?? []; + const page = guidesSource.getPage(slug); + if (!page) + return { + title: "Not Found", + }; + return { + title: page.data.title, + description: page.data.description ?? undefined, + }; +} + +export function generateStaticParams() { + return guidesSource.generateParams(); +} diff --git a/app/guides/layout.tsx b/app/guides/layout.tsx new file mode 100644 index 0000000000..df760cb778 --- /dev/null +++ b/app/guides/layout.tsx @@ -0,0 +1,27 @@ +import { DocsLayout } from "fumadocs-ui/layouts/docs"; +import { guidesSource } from "@/lib/source"; +import { DocsLayoutWrapper } from "@/app/docs/DocsLayoutWrapper"; +import { Layout } from "@/components/layout"; +import { MenuSwitcher } from "@/components/MenuSwitcher"; + +export default function GuidesLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <Layout> + <DocsLayoutWrapper> + <DocsLayout + tree={guidesSource.getPageTree()} + githubUrl="https://github.com/langfuse/langfuse-docs" + nav={{ enabled: false }} + sidebar={{ banner: <MenuSwitcher /> }} + searchToggle={{ enabled: false }} + > + {children} + </DocsLayout> + </DocsLayoutWrapper> + </Layout> + ); +} diff --git a/app/integrations/[[...slug]]/not-found.tsx b/app/integrations/[[...slug]]/not-found.tsx new file mode 100644 index 0000000000..53e6937bae --- /dev/null +++ b/app/integrations/[[...slug]]/not-found.tsx @@ -0,0 +1,15 @@ +import Link from "next/link"; + +export default function IntegrationsNotFound() { + return ( + <div className="flex flex-col items-center justify-center gap-4 py-16 text-center"> + <h1 className="text-2xl font-semibold">Page not found</h1> + <p className="text-fd-muted-foreground"> + The integrations page you're looking for doesn't exist or has moved. + </p> + <Link href="/integrations" className="text-fd-primary hover:underline"> + Back to Integrations + </Link> + </div> + ); +} diff --git a/app/integrations/[[...slug]]/page.tsx b/app/integrations/[[...slug]]/page.tsx new file mode 100644 index 0000000000..c4f6af14dc --- /dev/null +++ b/app/integrations/[[...slug]]/page.tsx @@ -0,0 +1,61 @@ +import type { Metadata } from "next"; +import { integrationsSource } from "@/lib/source"; +import { DocsPage } from "fumadocs-ui/page"; +import { notFound } from "next/navigation"; +import { SectionDocBodyClientWithDocsBody } from "@/components/SectionDocBodyClientWithDocsBody"; +import { DocsContributors } from "@/components/DocsContributors"; + +type PageProps = { + params: Promise<{ slug?: string[] }>; +}; + +const COLLECTION = "integrations"; +const CONTENT_DIR = "content/integrations"; + +export default async function IntegrationsPage(props: PageProps) { + const params = await props.params; + const slug = params.slug ?? []; + const page = integrationsSource.getPage(slug); + + if (!page) notFound(); + + const { toc } = page.data; + const filePath = `${CONTENT_DIR}/${slug.length === 0 ? "index" : slug.join("/")}.mdx`; + + return ( + <DocsPage + toc={toc} + breadcrumb={{ includePage: true, includeRoot: true }} + tableOfContent={{ footer: <DocsContributors pageTitle={page.data.title} /> }} + editOnGithub={{ + owner: "langfuse", + repo: "langfuse-docs", + sha: "main", + path: filePath, + }} + > + <SectionDocBodyClientWithDocsBody + collection={COLLECTION} + slugPromise={props.params} + /> + </DocsPage> + ); +} + +export async function generateMetadata(props: PageProps): Promise<Metadata> { + const params = await props.params; + const slug = params.slug ?? []; + const page = integrationsSource.getPage(slug); + if (!page) + return { + title: "Not Found", + }; + return { + title: page.data.title, + description: page.data.description ?? undefined, + }; +} + +export function generateStaticParams() { + return integrationsSource.generateParams(); +} diff --git a/app/integrations/layout.tsx b/app/integrations/layout.tsx new file mode 100644 index 0000000000..9eb91656b0 --- /dev/null +++ b/app/integrations/layout.tsx @@ -0,0 +1,27 @@ +import { DocsLayout } from "fumadocs-ui/layouts/docs"; +import { integrationsSource } from "@/lib/source"; +import { DocsLayoutWrapper } from "@/app/docs/DocsLayoutWrapper"; +import { Layout } from "@/components/layout"; +import { MenuSwitcher } from "@/components/MenuSwitcher"; + +export default function IntegrationsLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <Layout> + <DocsLayoutWrapper> + <DocsLayout + tree={integrationsSource.getPageTree()} + githubUrl="https://github.com/langfuse/langfuse-docs" + nav={{ enabled: false }} + sidebar={{ banner: <MenuSwitcher /> }} + searchToggle={{ enabled: false }} + > + {children} + </DocsLayout> + </DocsLayoutWrapper> + </Layout> + ); +} diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 0000000000..b5078c33aa --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,46 @@ +import type { Metadata } from "next"; +import Script from "next/script"; +import { RootProvider } from "fumadocs-ui/provider/next"; +import { GeistSans } from "geist/font/sans"; +import { GeistMono } from "geist/font/mono"; +import { PostHogProvider } from "@/components/analytics/PostHogProvider"; +import { Hubspot } from "@/components/analytics/hubspot"; +import "../style.css"; +import "@vidstack/react/player/styles/base.css"; +import "../src/overrides.css"; + +export const metadata: Metadata = { + title: { default: "Langfuse", template: "%s - Langfuse" }, + description: + "Traces, evals, prompt management and metrics to debug and improve your LLM application.", +}; + +export default function RootLayout({ + children, +}: Readonly<{ children: React.ReactNode }>) { + return ( + <html + lang="en" + dir="ltr" + suppressHydrationWarning + className={`${GeistSans.variable} ${GeistMono.variable}`} + > + <body className="font-sans antialiased"> + <PostHogProvider> + <RootProvider>{children}</RootProvider> + </PostHogProvider> + {process.env.NODE_ENV === "production" && ( + <> + <Hubspot /> + <Script + id="cookieyes" + type="text/javascript" + src="https://cdn-cookieyes.com/client_data/40247147630c6589ad01a874/script.js" + strategy="beforeInteractive" + /> + </> + )} + </body> + </html> + ); +} diff --git a/app/library/[[...slug]]/not-found.tsx b/app/library/[[...slug]]/not-found.tsx new file mode 100644 index 0000000000..415f4b3e95 --- /dev/null +++ b/app/library/[[...slug]]/not-found.tsx @@ -0,0 +1,15 @@ +import Link from "next/link"; + +export default function LibraryNotFound() { + return ( + <div className="flex flex-col items-center justify-center gap-4 py-16 text-center"> + <h1 className="text-2xl font-semibold">Page not found</h1> + <p className="text-fd-muted-foreground"> + The library page you're looking for doesn't exist or has moved. + </p> + <Link href="/library" className="text-fd-primary hover:underline"> + Back to Library + </Link> + </div> + ); +} diff --git a/app/library/[[...slug]]/page.tsx b/app/library/[[...slug]]/page.tsx new file mode 100644 index 0000000000..100813b453 --- /dev/null +++ b/app/library/[[...slug]]/page.tsx @@ -0,0 +1,61 @@ +import type { Metadata } from "next"; +import { librarySource } from "@/lib/source"; +import { DocsPage } from "fumadocs-ui/page"; +import { notFound } from "next/navigation"; +import { SectionDocBodyClientWithDocsBody } from "@/components/SectionDocBodyClientWithDocsBody"; +import { DocsContributors } from "@/components/DocsContributors"; + +type PageProps = { + params: Promise<{ slug?: string[] }>; +}; + +const COLLECTION = "library"; +const CONTENT_DIR = "content/library"; + +export default async function LibraryPage(props: PageProps) { + const params = await props.params; + const slug = params.slug ?? []; + const page = librarySource.getPage(slug); + + if (!page) notFound(); + + const { toc } = page.data; + const filePath = `${CONTENT_DIR}/${slug.length === 0 ? "index" : slug.join("/")}.mdx`; + + return ( + <DocsPage + toc={toc} + breadcrumb={{ includePage: true, includeRoot: true }} + tableOfContent={{ footer: <DocsContributors pageTitle={page.data.title} /> }} + editOnGithub={{ + owner: "langfuse", + repo: "langfuse-docs", + sha: "main", + path: filePath, + }} + > + <SectionDocBodyClientWithDocsBody + collection={COLLECTION} + slugPromise={props.params} + /> + </DocsPage> + ); +} + +export async function generateMetadata(props: PageProps): Promise<Metadata> { + const params = await props.params; + const slug = params.slug ?? []; + const page = librarySource.getPage(slug); + if (!page) + return { + title: "Not Found", + }; + return { + title: page.data.title, + description: page.data.description ?? undefined, + }; +} + +export function generateStaticParams() { + return librarySource.generateParams(); +} diff --git a/app/library/layout.tsx b/app/library/layout.tsx new file mode 100644 index 0000000000..7b70874a61 --- /dev/null +++ b/app/library/layout.tsx @@ -0,0 +1,27 @@ +import { DocsLayout } from "fumadocs-ui/layouts/docs"; +import { librarySource } from "@/lib/source"; +import { DocsLayoutWrapper } from "@/app/docs/DocsLayoutWrapper"; +import { Layout } from "@/components/layout"; +import { MenuSwitcher } from "@/components/MenuSwitcher"; + +export default function LibraryLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <Layout> + <DocsLayoutWrapper> + <DocsLayout + tree={librarySource.getPageTree()} + githubUrl="https://github.com/langfuse/langfuse-docs" + nav={{ enabled: false }} + sidebar={{ banner: <MenuSwitcher /> }} + searchToggle={{ enabled: false }} + > + {children} + </DocsLayout> + </DocsLayoutWrapper> + </Layout> + ); +} diff --git a/app/not-found.tsx b/app/not-found.tsx new file mode 100644 index 0000000000..51a0a50910 --- /dev/null +++ b/app/not-found.tsx @@ -0,0 +1,20 @@ +import Link from "next/link"; +import { NotFoundAnimation } from "@/components/not-found-animation"; + +export default function NotFound() { + return ( + <div className="text-center sm:py-20"> + <NotFoundAnimation /> + <h1 className="mt-6 text-2xl font-bold">404: Page Not Found</h1> + <p className="mt-2 text-muted-foreground"> + The page you were looking for does not exist. + </p> + <Link + href="/" + className="mt-6 inline-block text-primary underline underline-offset-4" + > + Go back home + </Link> + </div> + ); +} diff --git a/app/self-hosting/[[...slug]]/not-found.tsx b/app/self-hosting/[[...slug]]/not-found.tsx new file mode 100644 index 0000000000..2491deeb75 --- /dev/null +++ b/app/self-hosting/[[...slug]]/not-found.tsx @@ -0,0 +1,15 @@ +import Link from "next/link"; + +export default function SelfHostingNotFound() { + return ( + <div className="flex flex-col items-center justify-center gap-4 py-16 text-center"> + <h1 className="text-2xl font-semibold">Page not found</h1> + <p className="text-fd-muted-foreground"> + The self-hosting page you're looking for doesn't exist or has moved. + </p> + <Link href="/self-hosting" className="text-fd-primary hover:underline"> + Back to Self-hosting + </Link> + </div> + ); +} diff --git a/app/self-hosting/[[...slug]]/page.tsx b/app/self-hosting/[[...slug]]/page.tsx new file mode 100644 index 0000000000..cc151edbc0 --- /dev/null +++ b/app/self-hosting/[[...slug]]/page.tsx @@ -0,0 +1,61 @@ +import type { Metadata } from "next"; +import { selfHostingSource } from "@/lib/source"; +import { DocsPage } from "fumadocs-ui/page"; +import { notFound } from "next/navigation"; +import { SectionDocBodyClientWithDocsBody } from "@/components/SectionDocBodyClientWithDocsBody"; +import { DocsContributors } from "@/components/DocsContributors"; + +type PageProps = { + params: Promise<{ slug?: string[] }>; +}; + +const COLLECTION = "selfHosting"; +const CONTENT_DIR = "content/self-hosting"; + +export default async function SelfHostingPage(props: PageProps) { + const params = await props.params; + const slug = params.slug ?? []; + const page = selfHostingSource.getPage(slug); + + if (!page) notFound(); + + const { toc } = page.data; + const filePath = `${CONTENT_DIR}/${slug.length === 0 ? "index" : slug.join("/")}.mdx`; + + return ( + <DocsPage + toc={toc} + breadcrumb={{ includePage: true, includeRoot: true }} + tableOfContent={{ footer: <DocsContributors pageTitle={page.data.title} /> }} + editOnGithub={{ + owner: "langfuse", + repo: "langfuse-docs", + sha: "main", + path: filePath, + }} + > + <SectionDocBodyClientWithDocsBody + collection={COLLECTION} + slugPromise={props.params} + /> + </DocsPage> + ); +} + +export async function generateMetadata(props: PageProps): Promise<Metadata> { + const params = await props.params; + const slug = params.slug ?? []; + const page = selfHostingSource.getPage(slug); + if (!page) + return { + title: "Not Found", + }; + return { + title: page.data.title, + description: page.data.description ?? undefined, + }; +} + +export function generateStaticParams() { + return selfHostingSource.generateParams(); +} diff --git a/app/self-hosting/layout.tsx b/app/self-hosting/layout.tsx new file mode 100644 index 0000000000..3bde18963a --- /dev/null +++ b/app/self-hosting/layout.tsx @@ -0,0 +1,27 @@ +import { DocsLayout } from "fumadocs-ui/layouts/docs"; +import { selfHostingSource } from "@/lib/source"; +import { DocsLayoutWrapper } from "@/app/docs/DocsLayoutWrapper"; +import { Layout } from "@/components/layout"; +import { MenuSwitcher } from "@/components/MenuSwitcher"; + +export default function SelfHostingLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <Layout> + <DocsLayoutWrapper> + <DocsLayout + tree={selfHostingSource.getPageTree()} + githubUrl="https://github.com/langfuse/langfuse-docs" + nav={{ enabled: false }} + sidebar={{ banner: <MenuSwitcher /> }} + searchToggle={{ enabled: false }} + > + {children} + </DocsLayout> + </DocsLayoutWrapper> + </Layout> + ); +} diff --git a/binder/postBuild b/binder/postBuild deleted file mode 100755 index bb8f327556..0000000000 --- a/binder/postBuild +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -curl -fsSL https://deno.land/install.sh | sh -export PATH="$HOME/.deno/bin:$PATH" -deno jupyter --install diff --git a/binder/requirements.txt b/binder/requirements.txt deleted file mode 100644 index a63140f0d8..0000000000 --- a/binder/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -notebook>=7.2,<8 diff --git a/components-mdx/dependents/js.md b/components-mdx/dependents/js.md index 77e7e94afd..53244f925a 100644 --- a/components-mdx/dependents/js.md +++ b/components-mdx/dependents/js.md @@ -7,87 +7,87 @@ | Repository | Stars | | :-------- | -----: | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/131470832?s=40&v=4" width="20" height="20" alt="">   [lobehub](https://github.com/lobehub) / [lobe-chat](https://github.com/lobehub/lobe-chat) | 65454 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/135057108?s=40&v=4" width="20" height="20" alt="">   [firecrawl](https://github.com/firecrawl) / [firecrawl](https://github.com/firecrawl/firecrawl) | 56713 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/128289781?s=40&v=4" width="20" height="20" alt="">   [FlowiseAI](https://github.com/FlowiseAI) / [Flowise](https://github.com/FlowiseAI/Flowise) | 43547 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/139558948?s=40&v=4" width="20" height="20" alt="">   [chatchat-space](https://github.com/chatchat-space) / [Langchain-Chatchat](https://github.com/chatchat-space/Langchain-Chatchat) | 36071 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/157326433?s=40&v=4" width="20" height="20" alt="">   [onlook-dev](https://github.com/onlook-dev) / [onlook](https://github.com/onlook-dev/onlook) | 22447 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/487568?s=40&v=4" width="20" height="20" alt="">   [NixOS](https://github.com/NixOS) / [nixpkgs](https://github.com/NixOS/nixpkgs) | 21748 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/76263028?s=40&v=4" width="20" height="20" alt="">   [anthropics](https://github.com/anthropics) / [courses](https://github.com/anthropics/courses) | 17057 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/149120496?s=40&v=4" width="20" height="20" alt="">   [mastra-ai](https://github.com/mastra-ai) / [mastra](https://github.com/mastra-ai/mastra) | 16484 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/134601687?s=40&v=4" width="20" height="20" alt="">   [langfuse](https://github.com/langfuse) / [langfuse](https://github.com/langfuse/langfuse) | 16054 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/137907881?s=40&v=4" width="20" height="20" alt="">   [promptfoo](https://github.com/promptfoo) / [promptfoo](https://github.com/promptfoo/promptfoo) | 8350 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/132635806?s=40&v=4" width="20" height="20" alt="">   [refly-ai](https://github.com/refly-ai) / [refly](https://github.com/refly-ai/refly) | 4654 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/185852128?s=40&v=4" width="20" height="20" alt="">   [colanode](https://github.com/colanode) / [colanode](https://github.com/colanode/colanode) | 3517 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/201282378?s=40&v=4" width="20" height="20" alt="">   [VoltAgent](https://github.com/VoltAgent) / [voltagent](https://github.com/VoltAgent/voltagent) | 3210 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/11855343?s=40&v=4" width="20" height="20" alt="">   [pingcap](https://github.com/pingcap) / [autoflow](https://github.com/pingcap/autoflow) | 2651 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/135396723?s=40&v=4" width="20" height="20" alt="">   [sourcebot-dev](https://github.com/sourcebot-dev) / [sourcebot](https://github.com/sourcebot-dev/sourcebot) | 2570 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/18422723?s=40&v=4" width="20" height="20" alt="">   [alishobeiri](https://github.com/alishobeiri) / [thread](https://github.com/alishobeiri/thread) | 1098 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/121352441?s=40&v=4" width="20" height="20" alt="">   [openops-cloud](https://github.com/openops-cloud) / [openops](https://github.com/openops-cloud/openops) | 939 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/186889946?s=40&v=4" width="20" height="20" alt="">   [ai-hero-dev](https://github.com/ai-hero-dev) / [ai-hero](https://github.com/ai-hero-dev/ai-hero) | 916 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/74420131?s=40&v=4" width="20" height="20" alt="">   [xataio](https://github.com/xataio) / [agent](https://github.com/xataio/agent) | 857 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/123981229?s=40&v=4" width="20" height="20" alt="">   [plastic-labs](https://github.com/plastic-labs) / [tutor-gpt](https://github.com/plastic-labs/tutor-gpt) | 845 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/176438967?s=40&v=4" width="20" height="20" alt="">   [trendy-design](https://github.com/trendy-design) / [llmchat](https://github.com/trendy-design/llmchat) | 829 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/2045570?s=40&v=4" width="20" height="20" alt="">   [hotovo](https://github.com/hotovo) / [aider-desk](https://github.com/hotovo/aider-desk) | 781 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/142796018?s=40&v=4" width="20" height="20" alt="">   [wrtnlabs](https://github.com/wrtnlabs) / [autoview](https://github.com/wrtnlabs/autoview) | 688 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/148684274?s=40&v=4" width="20" height="20" alt="">   [i-am-alice](https://github.com/i-am-alice) / [3rd-devs](https://github.com/i-am-alice/3rd-devs) | 472 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/163431636?s=40&v=4" width="20" height="20" alt="">   [AIDotNet](https://github.com/AIDotNet) / [koala-ai](https://github.com/AIDotNet/koala-ai) | 470 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/170831637?s=40&v=4" width="20" height="20" alt="">   [inferablehq](https://github.com/inferablehq) / [inferable](https://github.com/inferablehq/inferable) | 403 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/16997807?s=40&v=4" width="20" height="20" alt="">   [FranciscoMoretti](https://github.com/FranciscoMoretti) / [sparka](https://github.com/FranciscoMoretti/sparka) | 380 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/137044109?s=40&v=4" width="20" height="20" alt="">   [ElectricCodeGuy](https://github.com/ElectricCodeGuy) / [SupabaseAuthWithSSR](https://github.com/ElectricCodeGuy/SupabaseAuthWithSSR) | 370 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/169401942?s=40&v=4" width="20" height="20" alt="">   [LibreChat-AI](https://github.com/LibreChat-AI) / [librechat.ai](https://github.com/LibreChat-AI/librechat.ai) | 339 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/15125613?s=40&v=4" width="20" height="20" alt="">   [souzatharsis](https://github.com/souzatharsis) / [tamingLLMs](https://github.com/souzatharsis/tamingLLMs) | 323 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/90278288?s=40&v=4" width="20" height="20" alt="">   [Ozamatash](https://github.com/Ozamatash) / [deep-research-mcp](https://github.com/Ozamatash/deep-research-mcp) | 269 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/29215115?s=40&v=4" width="20" height="20" alt="">   [iceener](https://github.com/iceener) / [ai](https://github.com/iceener/ai) | 186 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/187584218?s=40&v=4" width="20" height="20" alt="">   [giselles-ai](https://github.com/giselles-ai) / [giselle](https://github.com/giselles-ai/giselle) | 181 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/202488052?s=40&v=4" width="20" height="20" alt="">   [celerforge](https://github.com/celerforge) / [freenote](https://github.com/celerforge/freenote) | 171 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/104478511?s=40&v=4" width="20" height="20" alt="">   [babelcloud](https://github.com/babelcloud) / [LLM-RGB](https://github.com/babelcloud/LLM-RGB) | 164 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/1009716?s=40&v=4" width="20" height="20" alt="">   [codecentric](https://github.com/codecentric) / [c4-genai-suite](https://github.com/codecentric/c4-genai-suite) | 152 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/134601687?s=40&v=4" width="20" height="20" alt="">   [langfuse](https://github.com/langfuse) / [langfuse-docs](https://github.com/langfuse/langfuse-docs) | 139 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/134601687?s=40&v=4" width="20" height="20" alt="">   [langfuse](https://github.com/langfuse) / [mcp-server-langfuse](https://github.com/langfuse/mcp-server-langfuse) | 133 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/207005519?s=40&v=4" width="20" height="20" alt="">   [mcp-use](https://github.com/mcp-use) / [mcp-use-ts](https://github.com/mcp-use/mcp-use-ts) | 125 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/3299148?s=40&v=4" width="20" height="20" alt="">   [awslabs](https://github.com/awslabs) / [backstage-plugins-for-aws](https://github.com/awslabs/backstage-plugins-for-aws) | 122 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/25649282?s=40&v=4" width="20" height="20" alt="">   [lucagrippa](https://github.com/lucagrippa) / [obsidian-ai-tagger](https://github.com/lucagrippa/obsidian-ai-tagger) | 121 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/26894329?s=40&v=4" width="20" height="20" alt="">   [cofacts](https://github.com/cofacts) / [rumors-api](https://github.com/cofacts/rumors-api) | 119 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/144611010?s=40&v=4" width="20" height="20" alt="">   [uiuc-kang-lab](https://github.com/uiuc-kang-lab) / [cve-bench](https://github.com/uiuc-kang-lab/cve-bench) | 90 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/26894329?s=40&v=4" width="20" height="20" alt="">   [cofacts](https://github.com/cofacts) / [rumors-site](https://github.com/cofacts/rumors-site) | 90 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/69692985?s=40&v=4" width="20" height="20" alt="">   [ChristophHandschuh](https://github.com/ChristophHandschuh) / [chatbot-ui](https://github.com/ChristophHandschuh/chatbot-ui) | 85 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/131727825?s=40&v=4" width="20" height="20" alt="">   [Future-House](https://github.com/Future-House) / [LAB-Bench](https://github.com/Future-House/LAB-Bench) | 83 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/134601687?s=40&v=4" width="20" height="20" alt="">   [langfuse](https://github.com/langfuse) / [langfuse-js](https://github.com/langfuse/langfuse-js) | 78 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/153584155?s=40&v=4" width="20" height="20" alt="">   [empirical-run](https://github.com/empirical-run) / [appwright](https://github.com/empirical-run/appwright) | 76 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/186273274?s=40&v=4" width="20" height="20" alt="">   [Gerome-Elassaad](https://github.com/Gerome-Elassaad) / [CodingIT](https://github.com/Gerome-Elassaad/CodingIT) | 73 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/128912789?s=40&v=4" width="20" height="20" alt="">   [chokiproai](https://github.com/chokiproai) / [ChatGPT-Plugins](https://github.com/chokiproai/ChatGPT-Plugins) | 72 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/188236679?s=40&v=4" width="20" height="20" alt="">   [presidio-oss](https://github.com/presidio-oss) / [specif-ai](https://github.com/presidio-oss/specif-ai) | 71 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/52932082?s=40&v=4" width="20" height="20" alt="">   [indexnetwork](https://github.com/indexnetwork) / [index](https://github.com/indexnetwork/index) | 69 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/171450329?s=40&v=4" width="20" height="20" alt="">   [Davis-Media](https://github.com/Davis-Media) / [weights-ai](https://github.com/Davis-Media/weights-ai) | 66 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/95403881?s=40&v=4" width="20" height="20" alt="">   [tokens-studio](https://github.com/tokens-studio) / [graph-engine](https://github.com/tokens-studio/graph-engine) | 62 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/160759882?s=40&v=4" width="20" height="20" alt="">   [inf-monkeys](https://github.com/inf-monkeys) / [monkeys](https://github.com/inf-monkeys/monkeys) | 44 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/29598954?s=40&v=4" width="20" height="20" alt="">   [filopedraz](https://github.com/filopedraz) / [kosuke-core](https://github.com/filopedraz/kosuke-core) | 43 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/44359141?s=40&v=4" width="20" height="20" alt="">   [onesaitplatform](https://github.com/onesaitplatform) / [onesaitplatform-cloud](https://github.com/onesaitplatform/onesaitplatform-cloud) | 29 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/90461131?s=40&v=4" width="20" height="20" alt="">   [wosherco](https://github.com/wosherco) / [bashbuddy](https://github.com/wosherco/bashbuddy) | 29 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/1328983?s=40&v=4" width="20" height="20" alt="">   [orsonteodoro](https://github.com/orsonteodoro) / [oiledmachine-overlay](https://github.com/orsonteodoro/oiledmachine-overlay) | 27 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/191391794?s=40&v=4" width="20" height="20" alt="">   [monad-developers](https://github.com/monad-developers) / [AI-Werewolf](https://github.com/monad-developers/AI-Werewolf) | 26 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/10161067?s=40&v=4" width="20" height="20" alt="">   [ntgussoni](https://github.com/ntgussoni) / [clashofapps](https://github.com/ntgussoni/clashofapps) | 26 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/137907881?s=40&v=4" width="20" height="20" alt="">   [promptfoo](https://github.com/promptfoo) / [promptfoo-action](https://github.com/promptfoo/promptfoo-action) | 25 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/6154722?s=40&v=4" width="20" height="20" alt="">   [microsoft](https://github.com/microsoft) / [vscode-azureapicenter](https://github.com/microsoft/vscode-azureapicenter) | 23 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/25982255?s=40&v=4" width="20" height="20" alt="">   [checkly](https://github.com/checkly) / [srebot](https://github.com/checkly/srebot) | 22 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/74597894?s=40&v=4" width="20" height="20" alt="">   [minorun365](https://github.com/minorun365) / [aws-level-checker](https://github.com/minorun365/aws-level-checker) | 22 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/38677638?s=40&v=4" width="20" height="20" alt="">   [find-xposed-magisk](https://github.com/find-xposed-magisk) / [lobe-chat](https://github.com/find-xposed-magisk/lobe-chat) | 21 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/23255129?s=40&v=4" width="20" height="20" alt="">   [justUmen](https://github.com/justUmen) / [Bjornulf_lobe-chat](https://github.com/justUmen/Bjornulf_lobe-chat) | 21 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8060102?s=40&v=4" width="20" height="20" alt="">   [ErickWendel](https://github.com/ErickWendel) / [monitoring-llms-langfuse-ollama](https://github.com/ErickWendel/monitoring-llms-langfuse-ollama) | 19 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/57828270?s=40&v=4" width="20" height="20" alt="">   [Evobaso-J](https://github.com/Evobaso-J) / [ai-gitlab-code-review](https://github.com/Evobaso-J/ai-gitlab-code-review) | 19 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/9998118?s=40&v=4" width="20" height="20" alt="">   [hankchiutw](https://github.com/hankchiutw) / [copilot-proxy](https://github.com/hankchiutw/copilot-proxy) | 17 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/115334294?s=40&v=4" width="20" height="20" alt="">   [kalviumcommunity](https://github.com/kalviumcommunity) / [compilerd](https://github.com/kalviumcommunity/compilerd) | 17 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/9511227?s=40&v=4" width="20" height="20" alt="">   [tubone24](https://github.com/tubone24) / [a2a_mastra](https://github.com/tubone24/a2a_mastra) | 16 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8931462?s=40&v=4" width="20" height="20" alt="">   [aws-samples](https://github.com/aws-samples) / [Cost_Effective_and_Scalable_Models_Inference_on_AWS_Graviton](https://github.com/aws-samples/Cost_Effective_and_Scalable_Models_Inference_on_AWS_Graviton) | 15 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/134601687?s=40&v=4" width="20" height="20" alt="">   [langfuse](https://github.com/langfuse) / [ai-chatbot](https://github.com/langfuse/ai-chatbot) | 14 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/116849?s=40&v=4" width="20" height="20" alt="">   [dmcquay](https://github.com/dmcquay) / [katas](https://github.com/dmcquay/katas) | 13 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/42715311?s=40&v=4" width="20" height="20" alt="">   [huanshenyi](https://github.com/huanshenyi) / [nextjs-mastra](https://github.com/huanshenyi/nextjs-mastra) | 13 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/169542833?s=40&v=4" width="20" height="20" alt="">   [clujhouse](https://github.com/clujhouse) / [a.place](https://github.com/clujhouse/a.place) | 12 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/5978068?s=40&v=4" width="20" height="20" alt="">   [lainra](https://github.com/lainra) / [claude-code-telemetry](https://github.com/lainra/claude-code-telemetry) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/125315111?s=40&v=4" width="20" height="20" alt="">   [the-answerai](https://github.com/the-answerai) / [theanswer](https://github.com/the-answerai/theanswer) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/44333589?s=40&v=4" width="20" height="20" alt="">   [programmerraja](https://github.com/programmerraja) / [CallAgent](https://github.com/programmerraja/CallAgent) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/2492022?s=40&v=4" width="20" height="20" alt="">   [ColeMurray](https://github.com/ColeMurray) / [swarmjs](https://github.com/ColeMurray/swarmjs) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/10118666?s=40&v=4" width="20" height="20" alt="">   [0xinhua](https://github.com/0xinhua) / [joychat](https://github.com/0xinhua/joychat) | 10 | +|![avatar](https://avatars.githubusercontent.com/u/131470832?s=40&v=4)   [lobehub](https://github.com/lobehub) / [lobe-chat](https://github.com/lobehub/lobe-chat) | 65454 | +|![avatar](https://avatars.githubusercontent.com/u/135057108?s=40&v=4)   [firecrawl](https://github.com/firecrawl) / [firecrawl](https://github.com/firecrawl/firecrawl) | 56713 | +|![avatar](https://avatars.githubusercontent.com/u/128289781?s=40&v=4)   [FlowiseAI](https://github.com/FlowiseAI) / [Flowise](https://github.com/FlowiseAI/Flowise) | 43547 | +|![avatar](https://avatars.githubusercontent.com/u/139558948?s=40&v=4)   [chatchat-space](https://github.com/chatchat-space) / [Langchain-Chatchat](https://github.com/chatchat-space/Langchain-Chatchat) | 36071 | +|![avatar](https://avatars.githubusercontent.com/u/157326433?s=40&v=4)   [onlook-dev](https://github.com/onlook-dev) / [onlook](https://github.com/onlook-dev/onlook) | 22447 | +|![avatar](https://avatars.githubusercontent.com/u/487568?s=40&v=4)   [NixOS](https://github.com/NixOS) / [nixpkgs](https://github.com/NixOS/nixpkgs) | 21748 | +|![avatar](https://avatars.githubusercontent.com/u/76263028?s=40&v=4)   [anthropics](https://github.com/anthropics) / [courses](https://github.com/anthropics/courses) | 17057 | +|![avatar](https://avatars.githubusercontent.com/u/149120496?s=40&v=4)   [mastra-ai](https://github.com/mastra-ai) / [mastra](https://github.com/mastra-ai/mastra) | 16484 | +|![avatar](https://avatars.githubusercontent.com/u/134601687?s=40&v=4)   [langfuse](https://github.com/langfuse) / [langfuse](https://github.com/langfuse/langfuse) | 16054 | +|![avatar](https://avatars.githubusercontent.com/u/137907881?s=40&v=4)   [promptfoo](https://github.com/promptfoo) / [promptfoo](https://github.com/promptfoo/promptfoo) | 8350 | +|![avatar](https://avatars.githubusercontent.com/u/132635806?s=40&v=4)   [refly-ai](https://github.com/refly-ai) / [refly](https://github.com/refly-ai/refly) | 4654 | +|![avatar](https://avatars.githubusercontent.com/u/185852128?s=40&v=4)   [colanode](https://github.com/colanode) / [colanode](https://github.com/colanode/colanode) | 3517 | +|![avatar](https://avatars.githubusercontent.com/u/201282378?s=40&v=4)   [VoltAgent](https://github.com/VoltAgent) / [voltagent](https://github.com/VoltAgent/voltagent) | 3210 | +|![avatar](https://avatars.githubusercontent.com/u/11855343?s=40&v=4)   [pingcap](https://github.com/pingcap) / [autoflow](https://github.com/pingcap/autoflow) | 2651 | +|![avatar](https://avatars.githubusercontent.com/u/135396723?s=40&v=4)   [sourcebot-dev](https://github.com/sourcebot-dev) / [sourcebot](https://github.com/sourcebot-dev/sourcebot) | 2570 | +|![avatar](https://avatars.githubusercontent.com/u/18422723?s=40&v=4)   [alishobeiri](https://github.com/alishobeiri) / [thread](https://github.com/alishobeiri/thread) | 1098 | +|![avatar](https://avatars.githubusercontent.com/u/121352441?s=40&v=4)   [openops-cloud](https://github.com/openops-cloud) / [openops](https://github.com/openops-cloud/openops) | 939 | +|![avatar](https://avatars.githubusercontent.com/u/186889946?s=40&v=4)   [ai-hero-dev](https://github.com/ai-hero-dev) / [ai-hero](https://github.com/ai-hero-dev/ai-hero) | 916 | +|![avatar](https://avatars.githubusercontent.com/u/74420131?s=40&v=4)   [xataio](https://github.com/xataio) / [agent](https://github.com/xataio/agent) | 857 | +|![avatar](https://avatars.githubusercontent.com/u/123981229?s=40&v=4)   [plastic-labs](https://github.com/plastic-labs) / [tutor-gpt](https://github.com/plastic-labs/tutor-gpt) | 845 | +|![avatar](https://avatars.githubusercontent.com/u/176438967?s=40&v=4)   [trendy-design](https://github.com/trendy-design) / [llmchat](https://github.com/trendy-design/llmchat) | 829 | +|![avatar](https://avatars.githubusercontent.com/u/2045570?s=40&v=4)   [hotovo](https://github.com/hotovo) / [aider-desk](https://github.com/hotovo/aider-desk) | 781 | +|![avatar](https://avatars.githubusercontent.com/u/142796018?s=40&v=4)   [wrtnlabs](https://github.com/wrtnlabs) / [autoview](https://github.com/wrtnlabs/autoview) | 688 | +|![avatar](https://avatars.githubusercontent.com/u/148684274?s=40&v=4)   [i-am-alice](https://github.com/i-am-alice) / [3rd-devs](https://github.com/i-am-alice/3rd-devs) | 472 | +|![avatar](https://avatars.githubusercontent.com/u/163431636?s=40&v=4)   [AIDotNet](https://github.com/AIDotNet) / [koala-ai](https://github.com/AIDotNet/koala-ai) | 470 | +|![avatar](https://avatars.githubusercontent.com/u/170831637?s=40&v=4)   [inferablehq](https://github.com/inferablehq) / [inferable](https://github.com/inferablehq/inferable) | 403 | +|![avatar](https://avatars.githubusercontent.com/u/16997807?s=40&v=4)   [FranciscoMoretti](https://github.com/FranciscoMoretti) / [sparka](https://github.com/FranciscoMoretti/sparka) | 380 | +|![avatar](https://avatars.githubusercontent.com/u/137044109?s=40&v=4)   [ElectricCodeGuy](https://github.com/ElectricCodeGuy) / [SupabaseAuthWithSSR](https://github.com/ElectricCodeGuy/SupabaseAuthWithSSR) | 370 | +|![avatar](https://avatars.githubusercontent.com/u/169401942?s=40&v=4)   [LibreChat-AI](https://github.com/LibreChat-AI) / [librechat.ai](https://github.com/LibreChat-AI/librechat.ai) | 339 | +|![avatar](https://avatars.githubusercontent.com/u/15125613?s=40&v=4)   [souzatharsis](https://github.com/souzatharsis) / [tamingLLMs](https://github.com/souzatharsis/tamingLLMs) | 323 | +|![avatar](https://avatars.githubusercontent.com/u/90278288?s=40&v=4)   [Ozamatash](https://github.com/Ozamatash) / [deep-research-mcp](https://github.com/Ozamatash/deep-research-mcp) | 269 | +|![avatar](https://avatars.githubusercontent.com/u/29215115?s=40&v=4)   [iceener](https://github.com/iceener) / [ai](https://github.com/iceener/ai) | 186 | +|![avatar](https://avatars.githubusercontent.com/u/187584218?s=40&v=4)   [giselles-ai](https://github.com/giselles-ai) / [giselle](https://github.com/giselles-ai/giselle) | 181 | +|![avatar](https://avatars.githubusercontent.com/u/202488052?s=40&v=4)   [celerforge](https://github.com/celerforge) / [freenote](https://github.com/celerforge/freenote) | 171 | +|![avatar](https://avatars.githubusercontent.com/u/104478511?s=40&v=4)   [babelcloud](https://github.com/babelcloud) / [LLM-RGB](https://github.com/babelcloud/LLM-RGB) | 164 | +|![avatar](https://avatars.githubusercontent.com/u/1009716?s=40&v=4)   [codecentric](https://github.com/codecentric) / [c4-genai-suite](https://github.com/codecentric/c4-genai-suite) | 152 | +|![avatar](https://avatars.githubusercontent.com/u/134601687?s=40&v=4)   [langfuse](https://github.com/langfuse) / [langfuse-docs](https://github.com/langfuse/langfuse-docs) | 139 | +|![avatar](https://avatars.githubusercontent.com/u/134601687?s=40&v=4)   [langfuse](https://github.com/langfuse) / [mcp-server-langfuse](https://github.com/langfuse/mcp-server-langfuse) | 133 | +|![avatar](https://avatars.githubusercontent.com/u/207005519?s=40&v=4)   [mcp-use](https://github.com/mcp-use) / [mcp-use-ts](https://github.com/mcp-use/mcp-use-ts) | 125 | +|![avatar](https://avatars.githubusercontent.com/u/3299148?s=40&v=4)   [awslabs](https://github.com/awslabs) / [backstage-plugins-for-aws](https://github.com/awslabs/backstage-plugins-for-aws) | 122 | +|![avatar](https://avatars.githubusercontent.com/u/25649282?s=40&v=4)   [lucagrippa](https://github.com/lucagrippa) / [obsidian-ai-tagger](https://github.com/lucagrippa/obsidian-ai-tagger) | 121 | +|![avatar](https://avatars.githubusercontent.com/u/26894329?s=40&v=4)   [cofacts](https://github.com/cofacts) / [rumors-api](https://github.com/cofacts/rumors-api) | 119 | +|![avatar](https://avatars.githubusercontent.com/u/144611010?s=40&v=4)   [uiuc-kang-lab](https://github.com/uiuc-kang-lab) / [cve-bench](https://github.com/uiuc-kang-lab/cve-bench) | 90 | +|![avatar](https://avatars.githubusercontent.com/u/26894329?s=40&v=4)   [cofacts](https://github.com/cofacts) / [rumors-site](https://github.com/cofacts/rumors-site) | 90 | +|![avatar](https://avatars.githubusercontent.com/u/69692985?s=40&v=4)   [ChristophHandschuh](https://github.com/ChristophHandschuh) / [chatbot-ui](https://github.com/ChristophHandschuh/chatbot-ui) | 85 | +|![avatar](https://avatars.githubusercontent.com/u/131727825?s=40&v=4)   [Future-House](https://github.com/Future-House) / [LAB-Bench](https://github.com/Future-House/LAB-Bench) | 83 | +|![avatar](https://avatars.githubusercontent.com/u/134601687?s=40&v=4)   [langfuse](https://github.com/langfuse) / [langfuse-js](https://github.com/langfuse/langfuse-js) | 78 | +|![avatar](https://avatars.githubusercontent.com/u/153584155?s=40&v=4)   [empirical-run](https://github.com/empirical-run) / [appwright](https://github.com/empirical-run/appwright) | 76 | +|![avatar](https://avatars.githubusercontent.com/u/186273274?s=40&v=4)   [Gerome-Elassaad](https://github.com/Gerome-Elassaad) / [CodingIT](https://github.com/Gerome-Elassaad/CodingIT) | 73 | +|![avatar](https://avatars.githubusercontent.com/u/128912789?s=40&v=4)   [chokiproai](https://github.com/chokiproai) / [ChatGPT-Plugins](https://github.com/chokiproai/ChatGPT-Plugins) | 72 | +|![avatar](https://avatars.githubusercontent.com/u/188236679?s=40&v=4)   [presidio-oss](https://github.com/presidio-oss) / [specif-ai](https://github.com/presidio-oss/specif-ai) | 71 | +|![avatar](https://avatars.githubusercontent.com/u/52932082?s=40&v=4)   [indexnetwork](https://github.com/indexnetwork) / [index](https://github.com/indexnetwork/index) | 69 | +|![avatar](https://avatars.githubusercontent.com/u/171450329?s=40&v=4)   [Davis-Media](https://github.com/Davis-Media) / [weights-ai](https://github.com/Davis-Media/weights-ai) | 66 | +|![avatar](https://avatars.githubusercontent.com/u/95403881?s=40&v=4)   [tokens-studio](https://github.com/tokens-studio) / [graph-engine](https://github.com/tokens-studio/graph-engine) | 62 | +|![avatar](https://avatars.githubusercontent.com/u/160759882?s=40&v=4)   [inf-monkeys](https://github.com/inf-monkeys) / [monkeys](https://github.com/inf-monkeys/monkeys) | 44 | +|![avatar](https://avatars.githubusercontent.com/u/29598954?s=40&v=4)   [filopedraz](https://github.com/filopedraz) / [kosuke-core](https://github.com/filopedraz/kosuke-core) | 43 | +|![avatar](https://avatars.githubusercontent.com/u/44359141?s=40&v=4)   [onesaitplatform](https://github.com/onesaitplatform) / [onesaitplatform-cloud](https://github.com/onesaitplatform/onesaitplatform-cloud) | 29 | +|![avatar](https://avatars.githubusercontent.com/u/90461131?s=40&v=4)   [wosherco](https://github.com/wosherco) / [bashbuddy](https://github.com/wosherco/bashbuddy) | 29 | +|![avatar](https://avatars.githubusercontent.com/u/1328983?s=40&v=4)   [orsonteodoro](https://github.com/orsonteodoro) / [oiledmachine-overlay](https://github.com/orsonteodoro/oiledmachine-overlay) | 27 | +|![avatar](https://avatars.githubusercontent.com/u/191391794?s=40&v=4)   [monad-developers](https://github.com/monad-developers) / [AI-Werewolf](https://github.com/monad-developers/AI-Werewolf) | 26 | +|![avatar](https://avatars.githubusercontent.com/u/10161067?s=40&v=4)   [ntgussoni](https://github.com/ntgussoni) / [clashofapps](https://github.com/ntgussoni/clashofapps) | 26 | +|![avatar](https://avatars.githubusercontent.com/u/137907881?s=40&v=4)   [promptfoo](https://github.com/promptfoo) / [promptfoo-action](https://github.com/promptfoo/promptfoo-action) | 25 | +|![avatar](https://avatars.githubusercontent.com/u/6154722?s=40&v=4)   [microsoft](https://github.com/microsoft) / [vscode-azureapicenter](https://github.com/microsoft/vscode-azureapicenter) | 23 | +|![avatar](https://avatars.githubusercontent.com/u/25982255?s=40&v=4)   [checkly](https://github.com/checkly) / [srebot](https://github.com/checkly/srebot) | 22 | +|![avatar](https://avatars.githubusercontent.com/u/74597894?s=40&v=4)   [minorun365](https://github.com/minorun365) / [aws-level-checker](https://github.com/minorun365/aws-level-checker) | 22 | +|![avatar](https://avatars.githubusercontent.com/u/38677638?s=40&v=4)   [find-xposed-magisk](https://github.com/find-xposed-magisk) / [lobe-chat](https://github.com/find-xposed-magisk/lobe-chat) | 21 | +|![avatar](https://avatars.githubusercontent.com/u/23255129?s=40&v=4)   [justUmen](https://github.com/justUmen) / [Bjornulf_lobe-chat](https://github.com/justUmen/Bjornulf_lobe-chat) | 21 | +|![avatar](https://avatars.githubusercontent.com/u/8060102?s=40&v=4)   [ErickWendel](https://github.com/ErickWendel) / [monitoring-llms-langfuse-ollama](https://github.com/ErickWendel/monitoring-llms-langfuse-ollama) | 19 | +|![avatar](https://avatars.githubusercontent.com/u/57828270?s=40&v=4)   [Evobaso-J](https://github.com/Evobaso-J) / [ai-gitlab-code-review](https://github.com/Evobaso-J/ai-gitlab-code-review) | 19 | +|![avatar](https://avatars.githubusercontent.com/u/9998118?s=40&v=4)   [hankchiutw](https://github.com/hankchiutw) / [copilot-proxy](https://github.com/hankchiutw/copilot-proxy) | 17 | +|![avatar](https://avatars.githubusercontent.com/u/115334294?s=40&v=4)   [kalviumcommunity](https://github.com/kalviumcommunity) / [compilerd](https://github.com/kalviumcommunity/compilerd) | 17 | +|![avatar](https://avatars.githubusercontent.com/u/9511227?s=40&v=4)   [tubone24](https://github.com/tubone24) / [a2a_mastra](https://github.com/tubone24/a2a_mastra) | 16 | +|![avatar](https://avatars.githubusercontent.com/u/8931462?s=40&v=4)   [aws-samples](https://github.com/aws-samples) / [Cost_Effective_and_Scalable_Models_Inference_on_AWS_Graviton](https://github.com/aws-samples/Cost_Effective_and_Scalable_Models_Inference_on_AWS_Graviton) | 15 | +|![avatar](https://avatars.githubusercontent.com/u/134601687?s=40&v=4)   [langfuse](https://github.com/langfuse) / [ai-chatbot](https://github.com/langfuse/ai-chatbot) | 14 | +|![avatar](https://avatars.githubusercontent.com/u/116849?s=40&v=4)   [dmcquay](https://github.com/dmcquay) / [katas](https://github.com/dmcquay/katas) | 13 | +|![avatar](https://avatars.githubusercontent.com/u/42715311?s=40&v=4)   [huanshenyi](https://github.com/huanshenyi) / [nextjs-mastra](https://github.com/huanshenyi/nextjs-mastra) | 13 | +|![avatar](https://avatars.githubusercontent.com/u/169542833?s=40&v=4)   [clujhouse](https://github.com/clujhouse) / [a.place](https://github.com/clujhouse/a.place) | 12 | +|![avatar](https://avatars.githubusercontent.com/u/5978068?s=40&v=4)   [lainra](https://github.com/lainra) / [claude-code-telemetry](https://github.com/lainra/claude-code-telemetry) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/125315111?s=40&v=4)   [the-answerai](https://github.com/the-answerai) / [theanswer](https://github.com/the-answerai/theanswer) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/44333589?s=40&v=4)   [programmerraja](https://github.com/programmerraja) / [CallAgent](https://github.com/programmerraja/CallAgent) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/2492022?s=40&v=4)   [ColeMurray](https://github.com/ColeMurray) / [swarmjs](https://github.com/ColeMurray/swarmjs) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/10118666?s=40&v=4)   [0xinhua](https://github.com/0xinhua) / [joychat](https://github.com/0xinhua/joychat) | 10 | _Generated using [github-dependents-info](https://github.com/nvuillam/github-dependents-info), by [Nicolas Vuillamy](https://github.com/nvuillam)_ \ No newline at end of file diff --git a/components-mdx/dependents/python.md b/components-mdx/dependents/python.md index 311204ebf4..440ccdd48e 100644 --- a/components-mdx/dependents/python.md +++ b/components-mdx/dependents/python.md @@ -7,204 +7,204 @@ | Repository | Stars | | :-------- | -----: | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/85702467?s=40&v=4" width="20" height="20" alt="">   [langflow-ai](https://github.com/langflow-ai) / [langflow](https://github.com/langflow-ai/langflow) | 116251 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/158137808?s=40&v=4" width="20" height="20" alt="">   [open-webui](https://github.com/open-webui) / [open-webui](https://github.com/open-webui/open-webui) | 109642 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/23818?s=40&v=4" width="20" height="20" alt="">   [abi](https://github.com/abi) / [screenshot-to-code](https://github.com/abi/screenshot-to-code) | 70877 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/69962740?s=40&v=4" width="20" height="20" alt="">   [infiniflow](https://github.com/infiniflow) / [ragflow](https://github.com/infiniflow/ragflow) | 64118 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/130722866?s=40&v=4" width="20" height="20" alt="">   [run-llama](https://github.com/run-llama) / [llama_index](https://github.com/run-llama/llama_index) | 44203 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/159330290?s=40&v=4" width="20" height="20" alt="">   [QuivrHQ](https://github.com/QuivrHQ) / [quivr](https://github.com/QuivrHQ/quivr) | 38415 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/6154722?s=40&v=4" width="20" height="20" alt="">   [microsoft](https://github.com/microsoft) / [ai-agents-for-beginners](https://github.com/microsoft/ai-agents-for-beginners) | 38012 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/31035808?s=40&v=4" width="20" height="20" alt="">   [mindsdb](https://github.com/mindsdb) / [mindsdb](https://github.com/mindsdb/mindsdb) | 35669 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/121462774?s=40&v=4" width="20" height="20" alt="">   [BerriAI](https://github.com/BerriAI) / [litellm](https://github.com/BerriAI/litellm) | 28726 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/170767358?s=40&v=4" width="20" height="20" alt="">   [kortix-ai](https://github.com/kortix-ai) / [suna](https://github.com/kortix-ai/suna) | 17976 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/7250217?s=40&v=4" width="20" height="20" alt="">   [Canner](https://github.com/Canner) / [WrenAI](https://github.com/Canner/WrenAI) | 11868 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/193350244?s=40&v=4" width="20" height="20" alt="">   [The-Pocket](https://github.com/The-Pocket) / [PocketFlow](https://github.com/The-Pocket/PocketFlow) | 8313 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/139012218?s=40&v=4" width="20" height="20" alt="">   [OpenPipe](https://github.com/OpenPipe) / [ART](https://github.com/OpenPipe/ART) | 7093 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/125468716?s=40&v=4" width="20" height="20" alt="">   [topoteretes](https://github.com/topoteretes) / [cognee](https://github.com/topoteretes/cognee) | 7011 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/3299148?s=40&v=4" width="20" height="20" alt="">   [awslabs](https://github.com/awslabs) / [agent-squad](https://github.com/awslabs/agent-squad) | 6785 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/162546372?s=40&v=4" width="20" height="20" alt="">   [BasedHardware](https://github.com/BasedHardware) / [omi](https://github.com/BasedHardware/omi) | 6231 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/118301880?s=40&v=4" width="20" height="20" alt="">   [hatchet-dev](https://github.com/hatchet-dev) / [hatchet](https://github.com/hatchet-dev/hatchet) | 6019 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/88676955?s=40&v=4" width="20" height="20" alt="">   [zenml-io](https://github.com/zenml-io) / [zenml](https://github.com/zenml-io/zenml) | 4873 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/47287758?s=40&v=4" width="20" height="20" alt="">   [coleam00](https://github.com/coleam00) / [ottomator-agents](https://github.com/coleam00/ottomator-agents) | 4165 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8251002?s=40&v=4" width="20" height="20" alt="">   [JoshuaC215](https://github.com/JoshuaC215) / [agent-service-toolkit](https://github.com/JoshuaC215/agent-service-toolkit) | 3557 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/188657705?s=40&v=4" width="20" height="20" alt="">   [bragai](https://github.com/bragai) / [bRAG-langchain](https://github.com/bragai/bRAG-langchain) | 3010 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/11855343?s=40&v=4" width="20" height="20" alt="">   [pingcap](https://github.com/pingcap) / [autoflow](https://github.com/pingcap/autoflow) | 2651 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/158137808?s=40&v=4" width="20" height="20" alt="">   [open-webui](https://github.com/open-webui) / [pipelines](https://github.com/open-webui/pipelines) | 2055 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/179994263?s=40&v=4" width="20" height="20" alt="">   [YFGaia](https://github.com/YFGaia) / [dify-plus](https://github.com/YFGaia/dify-plus) | 1734 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/46323662?s=40&v=4" width="20" height="20" alt="">   [TheSpaghettiDetective](https://github.com/TheSpaghettiDetective) / [obico-server](https://github.com/TheSpaghettiDetective/obico-server) | 1687 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/85268109?s=40&v=4" width="20" height="20" alt="">   [MLSysOps](https://github.com/MLSysOps) / [MLE-agent](https://github.com/MLSysOps/MLE-agent) | 1387 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/144196744?s=40&v=4" width="20" height="20" alt="">   [TIGER-AI-Lab](https://github.com/TIGER-AI-Lab) / [TheoremExplainAgent](https://github.com/TIGER-AI-Lab/TheoremExplainAgent) | 1385 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/2314423?s=40&v=4" width="20" height="20" alt="">   [trailofbits](https://github.com/trailofbits) / [buttercup](https://github.com/trailofbits/buttercup) | 1223 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/62564480?s=40&v=4" width="20" height="20" alt="">   [wassim249](https://github.com/wassim249) / [fastapi-langgraph-agent-production-ready-template](https://github.com/wassim249/fastapi-langgraph-agent-production-ready-template) | 1200 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/2357342?s=40&v=4" width="20" height="20" alt="">   [dmayboroda](https://github.com/dmayboroda) / [minima](https://github.com/dmayboroda/minima) | 1010 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/65890619?s=40&v=4" width="20" height="20" alt="">   [zstar1003](https://github.com/zstar1003) / [ragflow-plus](https://github.com/zstar1003/ragflow-plus) | 993 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/151867818?s=40&v=4" width="20" height="20" alt="">   [dynamiq-ai](https://github.com/dynamiq-ai) / [dynamiq](https://github.com/dynamiq-ai/dynamiq) | 927 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/169500408?s=40&v=4" width="20" height="20" alt="">   [opslane](https://github.com/opslane) / [opslane](https://github.com/opslane/opslane) | 719 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/20493493?s=40&v=4" width="20" height="20" alt="">   [andysingal](https://github.com/andysingal) / [llm-course](https://github.com/andysingal/llm-course) | 643 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/48585267?s=40&v=4" width="20" height="20" alt="">   [theopenconversationkit](https://github.com/theopenconversationkit) / [tock](https://github.com/theopenconversationkit/tock) | 587 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/178644984?s=40&v=4" width="20" height="20" alt="">   [sentient-engineering](https://github.com/sentient-engineering) / [agent-q](https://github.com/sentient-engineering/agent-q) | 487 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/58037050?s=40&v=4" width="20" height="20" alt="">   [NicholasGoh](https://github.com/NicholasGoh) / [fastapi-mcp-langgraph-template](https://github.com/NicholasGoh/fastapi-mcp-langgraph-template) | 481 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/132396805?s=40&v=4" width="20" height="20" alt="">   [phospho-app](https://github.com/phospho-app) / [text-analytics-legacy](https://github.com/phospho-app/text-analytics-legacy) | 439 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/171800766?s=40&v=4" width="20" height="20" alt="">   [duoyang666](https://github.com/duoyang666) / [ai_novel](https://github.com/duoyang666/ai_novel) | 397 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/209155962?s=40&v=4" width="20" height="20" alt="">   [strands-agents](https://github.com/strands-agents) / [samples](https://github.com/strands-agents/samples) | 385 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/66303003?s=40&v=4" width="20" height="20" alt="">   [RobotecAI](https://github.com/RobotecAI) / [rai](https://github.com/RobotecAI/rai) | 373 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8931462?s=40&v=4" width="20" height="20" alt="">   [aws-samples](https://github.com/aws-samples) / [aws-ai-ml-workshop-kr](https://github.com/aws-samples/aws-ai-ml-workshop-kr) | 295 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/25676773?s=40&v=4" width="20" height="20" alt="">   [weizxfree](https://github.com/weizxfree) / [KnowFlow](https://github.com/weizxfree/KnowFlow) | 285 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/88676955?s=40&v=4" width="20" height="20" alt="">   [zenml-io](https://github.com/zenml-io) / [zenml-projects](https://github.com/zenml-io/zenml-projects) | 276 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/136071305?s=40&v=4" width="20" height="20" alt="">   [wxai-space](https://github.com/wxai-space) / [LightAgent](https://github.com/wxai-space/LightAgent) | 275 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/168552753?s=40&v=4" width="20" height="20" alt="">   [sql-agi](https://github.com/sql-agi) / [DB-GPT](https://github.com/sql-agi/DB-GPT) | 241 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/828269?s=40&v=4" width="20" height="20" alt="">   [guyernest](https://github.com/guyernest) / [advanced-rag](https://github.com/guyernest/advanced-rag) | 238 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/175069511?s=40&v=4" width="20" height="20" alt="">   [bklieger-groq](https://github.com/bklieger-groq) / [mathtutor-on-groq](https://github.com/bklieger-groq/mathtutor-on-groq) | 233 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/123981229?s=40&v=4" width="20" height="20" alt="">   [plastic-labs](https://github.com/plastic-labs) / [honcho](https://github.com/plastic-labs/honcho) | 224 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/118967077?s=40&v=4" width="20" height="20" alt="">   [OVINC-CN](https://github.com/OVINC-CN) / [OpenWebUI](https://github.com/OVINC-CN/OpenWebUI) | 202 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/31960995?s=40&v=4" width="20" height="20" alt="">   [zhutoutoutousan](https://github.com/zhutoutoutousan) / [worldquant-miner](https://github.com/zhutoutoutousan/worldquant-miner) | 202 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/174666116?s=40&v=4" width="20" height="20" alt="">   [ai-shifu](https://github.com/ai-shifu) / [ai-shifu](https://github.com/ai-shifu/ai-shifu) | 181 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8931462?s=40&v=4" width="20" height="20" alt="">   [aws-samples](https://github.com/aws-samples) / [sample-serverless-mcp-servers](https://github.com/aws-samples/sample-serverless-mcp-servers) | 175 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/171735272?s=40&v=4" width="20" height="20" alt="">   [8090-inc](https://github.com/8090-inc) / [xrx-sample-apps](https://github.com/8090-inc/xrx-sample-apps) | 163 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/51827949?s=40&v=4" width="20" height="20" alt="">   [deepset-ai](https://github.com/deepset-ai) / [haystack-core-integrations](https://github.com/deepset-ai/haystack-core-integrations) | 163 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/196509932?s=40&v=4" width="20" height="20" alt="">   [XSpoonAi](https://github.com/XSpoonAi) / [spoon-core](https://github.com/XSpoonAi/spoon-core) | 150 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/139558948?s=40&v=4" width="20" height="20" alt="">   [chatchat-space](https://github.com/chatchat-space) / [LangGraph-Chatchat](https://github.com/chatchat-space/LangGraph-Chatchat) | 144 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/44976328?s=40&v=4" width="20" height="20" alt="">   [piyushgarg-dev](https://github.com/piyushgarg-dev) / [genai-cohort](https://github.com/piyushgarg-dev/genai-cohort) | 135 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/105285801?s=40&v=4" width="20" height="20" alt="">   [i-dot-ai](https://github.com/i-dot-ai) / [redbox](https://github.com/i-dot-ai/redbox) | 132 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/90423581?s=40&v=4" width="20" height="20" alt="">   [bmd1905](https://github.com/bmd1905) / [ChatOpsLLM](https://github.com/bmd1905/ChatOpsLLM) | 127 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/202074444?s=40&v=4" width="20" height="20" alt="">   [Fintech-Dreamer](https://github.com/Fintech-Dreamer) / [FinSynth](https://github.com/Fintech-Dreamer/FinSynth) | 121 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/1566555?s=40&v=4" width="20" height="20" alt="">   [kenshiro-o](https://github.com/kenshiro-o) / [nagato-ai](https://github.com/kenshiro-o/nagato-ai) | 119 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/32715913?s=40&v=4" width="20" height="20" alt="">   [AmineDjeghri](https://github.com/AmineDjeghri) / [generative-ai-project-template](https://github.com/AmineDjeghri/generative-ai-project-template) | 106 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/42655961?s=40&v=4" width="20" height="20" alt="">   [zozoheir](https://github.com/zozoheir) / [tinyllm](https://github.com/zozoheir/tinyllm) | 100 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/6801780?s=40&v=4" width="20" height="20" alt="">   [tuhinsharma121](https://github.com/tuhinsharma121) / [ai-playground](https://github.com/tuhinsharma121/ai-playground) | 97 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/25398886?s=40&v=4" width="20" height="20" alt="">   [pavanjava](https://github.com/pavanjava) / [bootstrap-rag](https://github.com/pavanjava/bootstrap-rag) | 91 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/5483139?s=40&v=4" width="20" height="20" alt="">   [hustyichi](https://github.com/hustyichi) / [dify-eval](https://github.com/hustyichi/dify-eval) | 82 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/136511203?s=40&v=4" width="20" height="20" alt="">   [longevity-genie](https://github.com/longevity-genie) / [just-agents](https://github.com/longevity-genie/just-agents) | 75 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/29546870?s=40&v=4" width="20" height="20" alt="">   [MSNP1381](https://github.com/MSNP1381) / [kaggle-Agent](https://github.com/MSNP1381/kaggle-Agent) | 70 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/55096704?s=40&v=4" width="20" height="20" alt="">   [TencentBlueKing](https://github.com/TencentBlueKing) / [bk-monitor](https://github.com/TencentBlueKing/bk-monitor) | 68 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/131913382?s=40&v=4" width="20" height="20" alt="">   [elenagalun](https://github.com/elenagalun) / [difygit](https://github.com/elenagalun/difygit) | 67 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/131913521?s=40&v=4" width="20" height="20" alt="">   [veragloo](https://github.com/veragloo) / [dify](https://github.com/veragloo/dify) | 66 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/24954468?s=40&v=4" width="20" height="20" alt="">   [gnosis](https://github.com/gnosis) / [prediction-market-agent](https://github.com/gnosis/prediction-market-agent) | 65 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8931462?s=40&v=4" width="20" height="20" alt="">   [aws-samples](https://github.com/aws-samples) / [genai-ml-platform-examples](https://github.com/aws-samples/genai-ml-platform-examples) | 64 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/1355641?s=40&v=4" width="20" height="20" alt="">   [cab938](https://github.com/cab938) / [jupyter_tool](https://github.com/cab938/jupyter_tool) | 64 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/105285801?s=40&v=4" width="20" height="20" alt="">   [i-dot-ai](https://github.com/i-dot-ai) / [themefinder](https://github.com/i-dot-ai/themefinder) | 61 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/17580039?s=40&v=4" width="20" height="20" alt="">   [sib-swiss](https://github.com/sib-swiss) / [sparql-llm](https://github.com/sib-swiss/sparql-llm) | 60 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/83681204?s=40&v=4" width="20" height="20" alt="">   [kaymen99](https://github.com/kaymen99) / [AI-Sales-agent](https://github.com/kaymen99/AI-Sales-agent) | 59 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/63241254?s=40&v=4" width="20" height="20" alt="">   [denodo](https://github.com/denodo) / [denodo-ai-sdk](https://github.com/denodo/denodo-ai-sdk) | 57 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/64038928?s=40&v=4" width="20" height="20" alt="">   [jayita13](https://github.com/jayita13) / [GenerativeAI](https://github.com/jayita13/GenerativeAI) | 57 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8931462?s=40&v=4" width="20" height="20" alt="">   [aws-samples](https://github.com/aws-samples) / [generative-ai-on-amazon-sagemaker](https://github.com/aws-samples/generative-ai-on-amazon-sagemaker) | 56 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/64363987?s=40&v=4" width="20" height="20" alt="">   [Coding-Crashkurse](https://github.com/Coding-Crashkurse) / [Udemy-Advanced-LangChain](https://github.com/Coding-Crashkurse/Udemy-Advanced-LangChain) | 52 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/105286202?s=40&v=4" width="20" height="20" alt="">   [Shy2593666979](https://github.com/Shy2593666979) / [AgentChat](https://github.com/Shy2593666979/AgentChat) | 51 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/166864454?s=40&v=4" width="20" height="20" alt="">   [agentcoinorg](https://github.com/agentcoinorg) / [predictionprophet](https://github.com/agentcoinorg/predictionprophet) | 48 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/22869067?s=40&v=4" width="20" height="20" alt="">   [DTiapan](https://github.com/DTiapan) / [ai-agents-handbook](https://github.com/DTiapan/ai-agents-handbook) | 47 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/107418811?s=40&v=4" width="20" height="20" alt="">   [opendatahub-io-contrib](https://github.com/opendatahub-io-contrib) / [workbench-images](https://github.com/opendatahub-io-contrib/workbench-images) | 47 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/29598954?s=40&v=4" width="20" height="20" alt="">   [filopedraz](https://github.com/filopedraz) / [kosuke-core](https://github.com/filopedraz/kosuke-core) | 43 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/50320576?s=40&v=4" width="20" height="20" alt="">   [jakobap](https://github.com/jakobap) / [graph2nosql](https://github.com/jakobap/graph2nosql) | 42 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/7874148?s=40&v=4" width="20" height="20" alt="">   [betagouv](https://github.com/betagouv) / [ComparIA](https://github.com/betagouv/ComparIA) | 41 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/24954468?s=40&v=4" width="20" height="20" alt="">   [gnosis](https://github.com/gnosis) / [prediction-market-agent-tooling](https://github.com/gnosis/prediction-market-agent-tooling) | 41 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/33279882?s=40&v=4" width="20" height="20" alt="">   [holunda-io](https://github.com/holunda-io) / [bpm-ai-connectors-camunda-8](https://github.com/holunda-io/bpm-ai-connectors-camunda-8) | 41 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/86200048?s=40&v=4" width="20" height="20" alt="">   [valory-xyz](https://github.com/valory-xyz) / [mech](https://github.com/valory-xyz/mech) | 40 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/176538739?s=40&v=4" width="20" height="20" alt="">   [AIAtrium](https://github.com/AIAtrium) / [mcp-assistant](https://github.com/AIAtrium/mcp-assistant) | 38 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/50320576?s=40&v=4" width="20" height="20" alt="">   [jakobap](https://github.com/jakobap) / [graphrag-light](https://github.com/jakobap/graphrag-light) | 38 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/37552977?s=40&v=4" width="20" height="20" alt="">   [michelle-avery](https://github.com/michelle-avery) / [custom-conversation](https://github.com/michelle-avery/custom-conversation) | 37 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/137899388?s=40&v=4" width="20" height="20" alt="">   [yaitec](https://github.com/yaitec) / [langflow-streamlit](https://github.com/yaitec/langflow-streamlit) | 37 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/58515289?s=40&v=4" width="20" height="20" alt="">   [it-at-m](https://github.com/it-at-m) / [mucgpt](https://github.com/it-at-m/mucgpt) | 36 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/12874877?s=40&v=4" width="20" height="20" alt="">   [garyzava](https://github.com/garyzava) / [chat-to-database-chatbot](https://github.com/garyzava/chat-to-database-chatbot) | 36 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/34230119?s=40&v=4" width="20" height="20" alt="">   [IDinsight](https://github.com/IDinsight) / [ask-a-question](https://github.com/IDinsight/ask-a-question) | 36 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/35997537?s=40&v=4" width="20" height="20" alt="">   [danifuya](https://github.com/danifuya) / [ai-agents-tutorials](https://github.com/danifuya/ai-agents-tutorials) | 35 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/55577607?s=40&v=4" width="20" height="20" alt="">   [stackitcloud](https://github.com/stackitcloud) / [rag-template](https://github.com/stackitcloud/rag-template) | 35 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/170646650?s=40&v=4" width="20" height="20" alt="">   [jayrinaldime](https://github.com/jayrinaldime) / [ollama-straico-apiproxy](https://github.com/jayrinaldime/ollama-straico-apiproxy) | 35 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/45158568?s=40&v=4" width="20" height="20" alt="">   [SSK-14](https://github.com/SSK-14) / [WizSearch](https://github.com/SSK-14/WizSearch) | 33 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/24699559?s=40&v=4" width="20" height="20" alt="">   [Renumics](https://github.com/Renumics) / [lexio](https://github.com/Renumics/lexio) | 32 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/152896178?s=40&v=4" width="20" height="20" alt="">   [xyin-anl](https://github.com/xyin-anl) / [Nodeology](https://github.com/xyin-anl/Nodeology) | 32 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/33828982?s=40&v=4" width="20" height="20" alt="">   [percent4](https://github.com/percent4) / [llm_4_doc_qa](https://github.com/percent4/llm_4_doc_qa) | 31 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/2002434?s=40&v=4" width="20" height="20" alt="">   [wangxj03](https://github.com/wangxj03) / [ai-cookbook](https://github.com/wangxj03/ai-cookbook) | 31 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/72557383?s=40&v=4" width="20" height="20" alt="">   [Shekswess](https://github.com/Shekswess) / [ai-project-template](https://github.com/Shekswess/ai-project-template) | 31 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/78410652?s=40&v=4" width="20" height="20" alt="">   [GreyDGL](https://github.com/GreyDGL) / [ShareGPTs](https://github.com/GreyDGL/ShareGPTs) | 31 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/119934927?s=40&v=4" width="20" height="20" alt="">   [auto-code-etri](https://github.com/auto-code-etri) / [autocode](https://github.com/auto-code-etri/autocode) | 28 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/152447349?s=40&v=4" width="20" height="20" alt="">   [thomasnormal](https://github.com/thomasnormal) / [fewshot](https://github.com/thomasnormal/fewshot) | 28 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/11855343?s=40&v=4" width="20" height="20" alt="">   [pingcap](https://github.com/pingcap) / [LinguFlow](https://github.com/pingcap/LinguFlow) | 28 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/43288948?s=40&v=4" width="20" height="20" alt="">   [AnkushMalaker](https://github.com/AnkushMalaker) / [friend-lite](https://github.com/AnkushMalaker/friend-lite) | 27 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/225730003?s=40&v=4" width="20" height="20" alt="">   [MoFox-Studio](https://github.com/MoFox-Studio) / [MoFox_Bot](https://github.com/MoFox-Studio/MoFox_Bot) | 27 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/94514?s=40&v=4" width="20" height="20" alt="">   [dimagi](https://github.com/dimagi) / [open-chat-studio](https://github.com/dimagi/open-chat-studio) | 27 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/58823673?s=40&v=4" width="20" height="20" alt="">   [minhbtrc](https://github.com/minhbtrc) / [chatbot-template](https://github.com/minhbtrc/chatbot-template) | 26 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/78464112?s=40&v=4" width="20" height="20" alt="">   [syzhy113](https://github.com/syzhy113) / [Engineering-Code-Analysis](https://github.com/syzhy113/Engineering-Code-Analysis) | 26 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/39209037?s=40&v=4" width="20" height="20" alt="">   [bearlike](https://github.com/bearlike) / [Personal-Assistant](https://github.com/bearlike/Personal-Assistant) | 26 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/42569525?s=40&v=4" width="20" height="20" alt="">   [ThalesGroup](https://github.com/ThalesGroup) / [fred](https://github.com/ThalesGroup/fred) | 25 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/212066184?s=40&v=4" width="20" height="20" alt="">   [Stockelper-Lab](https://github.com/Stockelper-Lab) / [stockelper-llm](https://github.com/Stockelper-Lab/stockelper-llm) | 25 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/1937124?s=40&v=4" width="20" height="20" alt="">   [sunblaze-ucb](https://github.com/sunblaze-ucb) / [verina](https://github.com/sunblaze-ucb/verina) | 25 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/70932800?s=40&v=4" width="20" height="20" alt="">   [Pseudo-Lab](https://github.com/Pseudo-Lab) / [JobPT](https://github.com/Pseudo-Lab/JobPT) | 25 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/128304174?s=40&v=4" width="20" height="20" alt="">   [Hyperspawn](https://github.com/Hyperspawn) / [Dropbear](https://github.com/Hyperspawn/Dropbear) | 25 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/165080693?s=40&v=4" width="20" height="20" alt="">   [PersonaFlow](https://github.com/PersonaFlow) / [agentstack](https://github.com/PersonaFlow/agentstack) | 24 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8947407?s=40&v=4" width="20" height="20" alt="">   [RRisto](https://github.com/RRisto) / [learning](https://github.com/RRisto/learning) | 23 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/75791840?s=40&v=4" width="20" height="20" alt="">   [Flopsky](https://github.com/Flopsky) / [OpenDeepWiki](https://github.com/Flopsky/OpenDeepWiki) | 23 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/101029445?s=40&v=4" width="20" height="20" alt="">   [therohitshelar97](https://github.com/therohitshelar97) / [SignLanguageDetectionDeepLearningProject](https://github.com/therohitshelar97/SignLanguageDetectionDeepLearningProject) | 23 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/536878?s=40&v=4" width="20" height="20" alt="">   [mayflower](https://github.com/mayflower) / [langchain_agents](https://github.com/mayflower/langchain_agents) | 23 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8931462?s=40&v=4" width="20" height="20" alt="">   [aws-samples](https://github.com/aws-samples) / [sample-getting-started-with-strands-agents-course](https://github.com/aws-samples/sample-getting-started-with-strands-agents-course) | 22 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/204286196?s=40&v=4" width="20" height="20" alt="">   [Computer-use-agents](https://github.com/Computer-use-agents) / [MacOS-Agent](https://github.com/Computer-use-agents/MacOS-Agent) | 22 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/74597894?s=40&v=4" width="20" height="20" alt="">   [minorun365](https://github.com/minorun365) / [aws-level-checker](https://github.com/minorun365/aws-level-checker) | 22 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/65946329?s=40&v=4" width="20" height="20" alt="">   [aimclub](https://github.com/aimclub) / [ProtoLLM](https://github.com/aimclub/ProtoLLM) | 22 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/60320192?s=40&v=4" width="20" height="20" alt="">   [blacksmithop](https://github.com/blacksmithop) / [LLM-Graph-Builder](https://github.com/blacksmithop/LLM-Graph-Builder) | 22 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/119980131?s=40&v=4" width="20" height="20" alt="">   [cnoe-io](https://github.com/cnoe-io) / [openapi-mcp-codegen](https://github.com/cnoe-io/openapi-mcp-codegen) | 20 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/13483165?s=40&v=4" width="20" height="20" alt="">   [bangoc123](https://github.com/bangoc123) / [multi-agents-design-patterns](https://github.com/bangoc123/multi-agents-design-patterns) | 20 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8931462?s=40&v=4" width="20" height="20" alt="">   [aws-samples](https://github.com/aws-samples) / [open-source-bedrock-agent-evaluation](https://github.com/aws-samples/open-source-bedrock-agent-evaluation) | 20 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/137441464?s=40&v=4" width="20" height="20" alt="">   [PalisadeResearch](https://github.com/PalisadeResearch) / [ctfish](https://github.com/PalisadeResearch/ctfish) | 20 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/68445958?s=40&v=4" width="20" height="20" alt="">   [anatelgovbr](https://github.com/anatelgovbr) / [sei-ia](https://github.com/anatelgovbr/sei-ia) | 20 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/140273596?s=40&v=4" width="20" height="20" alt="">   [LLM-Projects](https://github.com/LLM-Projects) / [haystack-book](https://github.com/LLM-Projects/haystack-book) | 20 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/146026395?s=40&v=4" width="20" height="20" alt="">   [edenartlab](https://github.com/edenartlab) / [eve](https://github.com/edenartlab/eve) | 19 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/133569709?s=40&v=4" width="20" height="20" alt="">   [Ubheee](https://github.com/Ubheee) / [chainainexus-cloud](https://github.com/Ubheee/chainainexus-cloud) | 19 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/187237976?s=40&v=4" width="20" height="20" alt="">   [SuperGalaxy0901](https://github.com/SuperGalaxy0901) / [Streamlit-OpenAI-Chatbot](https://github.com/SuperGalaxy0901/Streamlit-OpenAI-Chatbot) | 19 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/26455310?s=40&v=4" width="20" height="20" alt="">   [nthanhdo2610](https://github.com/nthanhdo2610) / [ai-log-analysis](https://github.com/nthanhdo2610/ai-log-analysis) | 18 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/42213409?s=40&v=4" width="20" height="20" alt="">   [pshenok](https://github.com/pshenok) / [minima-aws](https://github.com/pshenok/minima-aws) | 18 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/12452009?s=40&v=4" width="20" height="20" alt="">   [maxritter](https://github.com/maxritter) / [aws-bedrock-multi-agent-blueprint](https://github.com/maxritter/aws-bedrock-multi-agent-blueprint) | 18 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/64363987?s=40&v=4" width="20" height="20" alt="">   [Coding-Crashkurse](https://github.com/Coding-Crashkurse) / [LangChain-in-Production-with-Langfuse](https://github.com/Coding-Crashkurse/LangChain-in-Production-with-Langfuse) | 18 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/46789005?s=40&v=4" width="20" height="20" alt="">   [sumukshashidhar](https://github.com/sumukshashidhar) / [yourbench](https://github.com/sumukshashidhar/yourbench) | 17 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/132536190?s=40&v=4" width="20" height="20" alt="">   [beaubeas](https://github.com/beaubeas) / [lung-cancer-detection](https://github.com/beaubeas/lung-cancer-detection) | 17 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/64363987?s=40&v=4" width="20" height="20" alt="">   [Coding-Crashkurse](https://github.com/Coding-Crashkurse) / [LangGraph-Visualizer](https://github.com/Coding-Crashkurse/LangGraph-Visualizer) | 17 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/64363987?s=40&v=4" width="20" height="20" alt="">   [Coding-Crashkurse](https://github.com/Coding-Crashkurse) / [RAG-Evaluation-with-Ragas](https://github.com/Coding-Crashkurse/RAG-Evaluation-with-Ragas) | 17 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/6224969?s=40&v=4" width="20" height="20" alt="">   [shreyashankar](https://github.com/shreyashankar) / [spade-experiments](https://github.com/shreyashankar/spade-experiments) | 17 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/24829397?s=40&v=4" width="20" height="20" alt="">   [ogabrielluiz](https://github.com/ogabrielluiz) / [langflow-railway](https://github.com/ogabrielluiz/langflow-railway) | 17 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/512756?s=40&v=4" width="20" height="20" alt="">   [moodlehq](https://github.com/moodlehq) / [wiki-rag](https://github.com/moodlehq/wiki-rag) | 16 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/145160226?s=40&v=4" width="20" height="20" alt="">   [FosterFlow](https://github.com/FosterFlow) / [fosterflow](https://github.com/FosterFlow/fosterflow) | 16 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/131941631?s=40&v=4" width="20" height="20" alt="">   [ldilab](https://github.com/ldilab) / [ArchCode](https://github.com/ldilab/ArchCode) | 16 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/120989600?s=40&v=4" width="20" height="20" alt="">   [balajivis](https://github.com/balajivis) / [modernaipro](https://github.com/balajivis/modernaipro) | 16 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8931462?s=40&v=4" width="20" height="20" alt="">   [aws-samples](https://github.com/aws-samples) / [Cost_Effective_and_Scalable_Models_Inference_on_AWS_Graviton](https://github.com/aws-samples/Cost_Effective_and_Scalable_Models_Inference_on_AWS_Graviton) | 15 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/28005881?s=40&v=4" width="20" height="20" alt="">   [a-klos](https://github.com/a-klos) / [langchain-ocr](https://github.com/a-klos/langchain-ocr) | 15 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/57317518?s=40&v=4" width="20" height="20" alt="">   [samitugal](https://github.com/samitugal) / [KnowledgeGraphQA-Langgraph](https://github.com/samitugal/KnowledgeGraphQA-Langgraph) | 15 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/17307?s=40&v=4" width="20" height="20" alt="">   [brylie](https://github.com/brylie) / [langflow-fastapi-htmx](https://github.com/brylie/langflow-fastapi-htmx) | 15 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/30489717?s=40&v=4" width="20" height="20" alt="">   [YeonwooSung](https://github.com/YeonwooSung) / [MLOps](https://github.com/YeonwooSung/MLOps) | 15 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/205921208?s=40&v=4" width="20" height="20" alt="">   [outskill-git](https://github.com/outskill-git) / [GenAIEngineering-Cohort1](https://github.com/outskill-git/GenAIEngineering-Cohort1) | 14 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8931462?s=40&v=4" width="20" height="20" alt="">   [aws-samples](https://github.com/aws-samples) / [sample-genai-on-eks-starter-kit](https://github.com/aws-samples/sample-genai-on-eks-starter-kit) | 14 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/19359510?s=40&v=4" width="20" height="20" alt="">   [AndreCNF](https://github.com/AndreCNF) / [polids](https://github.com/AndreCNF/polids) | 14 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/83023332?s=40&v=4" width="20" height="20" alt="">   [phitrann](https://github.com/phitrann) / [arXivRAG](https://github.com/phitrann/arXivRAG) | 14 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/44242534?s=40&v=4" width="20" height="20" alt="">   [diicellman](https://github.com/diicellman) / [dynamite-dogs](https://github.com/diicellman/dynamite-dogs) | 14 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/3348134?s=40&v=4" width="20" height="20" alt="">   [strickvl](https://github.com/strickvl) / [hinbox](https://github.com/strickvl/hinbox) | 13 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/23645788?s=40&v=4" width="20" height="20" alt="">   [shivaraj-bh](https://github.com/shivaraj-bh) / [ollama-flake](https://github.com/shivaraj-bh/ollama-flake) | 13 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/183470322?s=40&v=4" width="20" height="20" alt="">   [synth-laboratories](https://github.com/synth-laboratories) / [synth-ai](https://github.com/synth-laboratories/synth-ai) | 12 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/158254884?s=40&v=4" width="20" height="20" alt="">   [tensorplex-labs](https://github.com/tensorplex-labs) / [dojo](https://github.com/tensorplex-labs/dojo) | 12 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/92739940?s=40&v=4" width="20" height="20" alt="">   [ssc-dsai](https://github.com/ssc-dsai) / [canchat-v2](https://github.com/ssc-dsai/canchat-v2) | 12 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/125468716?s=40&v=4" width="20" height="20" alt="">   [topoteretes](https://github.com/topoteretes) / [cognee-community](https://github.com/topoteretes/cognee-community) | 12 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/72557383?s=40&v=4" width="20" height="20" alt="">   [Shekswess](https://github.com/Shekswess) / [small-language-model-rags-is-all-you-need](https://github.com/Shekswess/small-language-model-rags-is-all-you-need) | 12 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/24278041?s=40&v=4" width="20" height="20" alt="">   [PhiBrandon](https://github.com/PhiBrandon) / [offer-generator-lightrag](https://github.com/PhiBrandon/offer-generator-lightrag) | 12 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/58663620?s=40&v=4" width="20" height="20" alt="">   [dida-do](https://github.com/dida-do) / [public](https://github.com/dida-do/public) | 12 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/156330287?s=40&v=4" width="20" height="20" alt="">   [aishe-ai](https://github.com/aishe-ai) / [core](https://github.com/aishe-ai/core) | 12 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/17572232?s=40&v=4" width="20" height="20" alt="">   [jayeshmahapatra](https://github.com/jayeshmahapatra) / [rag-chatbot](https://github.com/jayeshmahapatra/rag-chatbot) | 12 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/10764713?s=40&v=4" width="20" height="20" alt="">   [georgian-io](https://github.com/georgian-io) / [GAL](https://github.com/georgian-io/GAL) | 12 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/162442287?s=40&v=4" width="20" height="20" alt="">   [GaiaNet-AI](https://github.com/GaiaNet-AI) / [gaia-cookbook](https://github.com/GaiaNet-AI/gaia-cookbook) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8931462?s=40&v=4" width="20" height="20" alt="">   [aws-samples](https://github.com/aws-samples) / [sample-building-agentic-ai-applications-on-aws](https://github.com/aws-samples/sample-building-agentic-ai-applications-on-aws) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/84165920?s=40&v=4" width="20" height="20" alt="">   [app-vitals](https://github.com/app-vitals) / [livekit-video](https://github.com/app-vitals/livekit-video) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/211746166?s=40&v=4" width="20" height="20" alt="">   [AI3clauseBSD](https://github.com/AI3clauseBSD) / [claused-webai](https://github.com/AI3clauseBSD/claused-webai) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/65946329?s=40&v=4" width="20" height="20" alt="">   [aimclub](https://github.com/aimclub) / [FEDOT.LLM](https://github.com/aimclub/FEDOT.LLM) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/46588040?s=40&v=4" width="20" height="20" alt="">   [afontana1](https://github.com/afontana1) / [Data-Engineering](https://github.com/afontana1/Data-Engineering) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/8032076?s=40&v=4" width="20" height="20" alt="">   [c00cjz00](https://github.com/c00cjz00) / [llmservice_ip](https://github.com/c00cjz00/llmservice_ip) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/150324891?s=40&v=4" width="20" height="20" alt="">   [CdC-SI](https://github.com/CdC-SI) / [ZAS-EAK-CopilotGPT](https://github.com/CdC-SI/ZAS-EAK-CopilotGPT) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/6956?s=40&v=4" width="20" height="20" alt="">   [zby](https://github.com/zby) / [answerbot](https://github.com/zby/answerbot) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/175238189?s=40&v=4" width="20" height="20" alt="">   [OpenProBono](https://github.com/OpenProBono) / [openprobono](https://github.com/OpenProBono/openprobono) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/53172094?s=40&v=4" width="20" height="20" alt="">   [binarybrain-009](https://github.com/binarybrain-009) / [AUTOATTACKER](https://github.com/binarybrain-009/AUTOATTACKER) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/114365148?s=40&v=4" width="20" height="20" alt="">   [himanshu-skid19](https://github.com/himanshu-skid19) / [Inter-IIT-12-Devrev-AI-Agent-007](https://github.com/himanshu-skid19/Inter-IIT-12-Devrev-AI-Agent-007) | 11 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/195694209?s=40&v=4" width="20" height="20" alt="">   [luwhano](https://github.com/luwhano) / [fastapi-langgraph-agent-production-ready-template](https://github.com/luwhano/fastapi-langgraph-agent-production-ready-template) | 10 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/175069511?s=40&v=4" width="20" height="20" alt="">   [bklieger-groq](https://github.com/bklieger-groq) / [voice-stockbot](https://github.com/bklieger-groq/voice-stockbot) | 10 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/11064260?s=40&v=4" width="20" height="20" alt="">   [ls1intum](https://github.com/ls1intum) / [Hephaestus](https://github.com/ls1intum/Hephaestus) | 10 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/113577252?s=40&v=4" width="20" height="20" alt="">   [CeS-3](https://github.com/CeS-3) / [pwn.hust.college](https://github.com/CeS-3/pwn.hust.college) | 10 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/2431071?s=40&v=4" width="20" height="20" alt="">   [domik82](https://github.com/domik82) / [aidevs3](https://github.com/domik82/aidevs3) | 10 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/151687909?s=40&v=4" width="20" height="20" alt="">   [totvs-ai](https://github.com/totvs-ai) / [dta-samples](https://github.com/totvs-ai/dta-samples) | 10 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/12850602?s=40&v=4" width="20" height="20" alt="">   [kartik-nighania](https://github.com/kartik-nighania) / [dhs-workshop](https://github.com/kartik-nighania/dhs-workshop) | 10 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/170548455?s=40&v=4" width="20" height="20" alt="">   [phoenix-legend7](https://github.com/phoenix-legend7) / [Open-WebUI](https://github.com/phoenix-legend7/Open-WebUI) | 10 | -|<img class="avatar mr-2" src="https://avatars.githubusercontent.com/u/81291567?s=40&v=4" width="20" height="20" alt="">   [milistu](https://github.com/milistu) / [LegaBot](https://github.com/milistu/LegaBot) | 10 | +|![avatar](https://avatars.githubusercontent.com/u/85702467?s=40&v=4)   [langflow-ai](https://github.com/langflow-ai) / [langflow](https://github.com/langflow-ai/langflow) | 116251 | +|![avatar](https://avatars.githubusercontent.com/u/158137808?s=40&v=4)   [open-webui](https://github.com/open-webui) / [open-webui](https://github.com/open-webui/open-webui) | 109642 | +|![avatar](https://avatars.githubusercontent.com/u/23818?s=40&v=4)   [abi](https://github.com/abi) / [screenshot-to-code](https://github.com/abi/screenshot-to-code) | 70877 | +|![avatar](https://avatars.githubusercontent.com/u/69962740?s=40&v=4)   [infiniflow](https://github.com/infiniflow) / [ragflow](https://github.com/infiniflow/ragflow) | 64118 | +|![avatar](https://avatars.githubusercontent.com/u/130722866?s=40&v=4)   [run-llama](https://github.com/run-llama) / [llama_index](https://github.com/run-llama/llama_index) | 44203 | +|![avatar](https://avatars.githubusercontent.com/u/159330290?s=40&v=4)   [QuivrHQ](https://github.com/QuivrHQ) / [quivr](https://github.com/QuivrHQ/quivr) | 38415 | +|![avatar](https://avatars.githubusercontent.com/u/6154722?s=40&v=4)   [microsoft](https://github.com/microsoft) / [ai-agents-for-beginners](https://github.com/microsoft/ai-agents-for-beginners) | 38012 | +|![avatar](https://avatars.githubusercontent.com/u/31035808?s=40&v=4)   [mindsdb](https://github.com/mindsdb) / [mindsdb](https://github.com/mindsdb/mindsdb) | 35669 | +|![avatar](https://avatars.githubusercontent.com/u/121462774?s=40&v=4)   [BerriAI](https://github.com/BerriAI) / [litellm](https://github.com/BerriAI/litellm) | 28726 | +|![avatar](https://avatars.githubusercontent.com/u/170767358?s=40&v=4)   [kortix-ai](https://github.com/kortix-ai) / [suna](https://github.com/kortix-ai/suna) | 17976 | +|![avatar](https://avatars.githubusercontent.com/u/7250217?s=40&v=4)   [Canner](https://github.com/Canner) / [WrenAI](https://github.com/Canner/WrenAI) | 11868 | +|![avatar](https://avatars.githubusercontent.com/u/193350244?s=40&v=4)   [The-Pocket](https://github.com/The-Pocket) / [PocketFlow](https://github.com/The-Pocket/PocketFlow) | 8313 | +|![avatar](https://avatars.githubusercontent.com/u/139012218?s=40&v=4)   [OpenPipe](https://github.com/OpenPipe) / [ART](https://github.com/OpenPipe/ART) | 7093 | +|![avatar](https://avatars.githubusercontent.com/u/125468716?s=40&v=4)   [topoteretes](https://github.com/topoteretes) / [cognee](https://github.com/topoteretes/cognee) | 7011 | +|![avatar](https://avatars.githubusercontent.com/u/3299148?s=40&v=4)   [awslabs](https://github.com/awslabs) / [agent-squad](https://github.com/awslabs/agent-squad) | 6785 | +|![avatar](https://avatars.githubusercontent.com/u/162546372?s=40&v=4)   [BasedHardware](https://github.com/BasedHardware) / [omi](https://github.com/BasedHardware/omi) | 6231 | +|![avatar](https://avatars.githubusercontent.com/u/118301880?s=40&v=4)   [hatchet-dev](https://github.com/hatchet-dev) / [hatchet](https://github.com/hatchet-dev/hatchet) | 6019 | +|![avatar](https://avatars.githubusercontent.com/u/88676955?s=40&v=4)   [zenml-io](https://github.com/zenml-io) / [zenml](https://github.com/zenml-io/zenml) | 4873 | +|![avatar](https://avatars.githubusercontent.com/u/47287758?s=40&v=4)   [coleam00](https://github.com/coleam00) / [ottomator-agents](https://github.com/coleam00/ottomator-agents) | 4165 | +|![avatar](https://avatars.githubusercontent.com/u/8251002?s=40&v=4)   [JoshuaC215](https://github.com/JoshuaC215) / [agent-service-toolkit](https://github.com/JoshuaC215/agent-service-toolkit) | 3557 | +|![avatar](https://avatars.githubusercontent.com/u/188657705?s=40&v=4)   [bragai](https://github.com/bragai) / [bRAG-langchain](https://github.com/bragai/bRAG-langchain) | 3010 | +|![avatar](https://avatars.githubusercontent.com/u/11855343?s=40&v=4)   [pingcap](https://github.com/pingcap) / [autoflow](https://github.com/pingcap/autoflow) | 2651 | +|![avatar](https://avatars.githubusercontent.com/u/158137808?s=40&v=4)   [open-webui](https://github.com/open-webui) / [pipelines](https://github.com/open-webui/pipelines) | 2055 | +|![avatar](https://avatars.githubusercontent.com/u/179994263?s=40&v=4)   [YFGaia](https://github.com/YFGaia) / [dify-plus](https://github.com/YFGaia/dify-plus) | 1734 | +|![avatar](https://avatars.githubusercontent.com/u/46323662?s=40&v=4)   [TheSpaghettiDetective](https://github.com/TheSpaghettiDetective) / [obico-server](https://github.com/TheSpaghettiDetective/obico-server) | 1687 | +|![avatar](https://avatars.githubusercontent.com/u/85268109?s=40&v=4)   [MLSysOps](https://github.com/MLSysOps) / [MLE-agent](https://github.com/MLSysOps/MLE-agent) | 1387 | +|![avatar](https://avatars.githubusercontent.com/u/144196744?s=40&v=4)   [TIGER-AI-Lab](https://github.com/TIGER-AI-Lab) / [TheoremExplainAgent](https://github.com/TIGER-AI-Lab/TheoremExplainAgent) | 1385 | +|![avatar](https://avatars.githubusercontent.com/u/2314423?s=40&v=4)   [trailofbits](https://github.com/trailofbits) / [buttercup](https://github.com/trailofbits/buttercup) | 1223 | +|![avatar](https://avatars.githubusercontent.com/u/62564480?s=40&v=4)   [wassim249](https://github.com/wassim249) / [fastapi-langgraph-agent-production-ready-template](https://github.com/wassim249/fastapi-langgraph-agent-production-ready-template) | 1200 | +|![avatar](https://avatars.githubusercontent.com/u/2357342?s=40&v=4)   [dmayboroda](https://github.com/dmayboroda) / [minima](https://github.com/dmayboroda/minima) | 1010 | +|![avatar](https://avatars.githubusercontent.com/u/65890619?s=40&v=4)   [zstar1003](https://github.com/zstar1003) / [ragflow-plus](https://github.com/zstar1003/ragflow-plus) | 993 | +|![avatar](https://avatars.githubusercontent.com/u/151867818?s=40&v=4)   [dynamiq-ai](https://github.com/dynamiq-ai) / [dynamiq](https://github.com/dynamiq-ai/dynamiq) | 927 | +|![avatar](https://avatars.githubusercontent.com/u/169500408?s=40&v=4)   [opslane](https://github.com/opslane) / [opslane](https://github.com/opslane/opslane) | 719 | +|![avatar](https://avatars.githubusercontent.com/u/20493493?s=40&v=4)   [andysingal](https://github.com/andysingal) / [llm-course](https://github.com/andysingal/llm-course) | 643 | +|![avatar](https://avatars.githubusercontent.com/u/48585267?s=40&v=4)   [theopenconversationkit](https://github.com/theopenconversationkit) / [tock](https://github.com/theopenconversationkit/tock) | 587 | +|![avatar](https://avatars.githubusercontent.com/u/178644984?s=40&v=4)   [sentient-engineering](https://github.com/sentient-engineering) / [agent-q](https://github.com/sentient-engineering/agent-q) | 487 | +|![avatar](https://avatars.githubusercontent.com/u/58037050?s=40&v=4)   [NicholasGoh](https://github.com/NicholasGoh) / [fastapi-mcp-langgraph-template](https://github.com/NicholasGoh/fastapi-mcp-langgraph-template) | 481 | +|![avatar](https://avatars.githubusercontent.com/u/132396805?s=40&v=4)   [phospho-app](https://github.com/phospho-app) / [text-analytics-legacy](https://github.com/phospho-app/text-analytics-legacy) | 439 | +|![avatar](https://avatars.githubusercontent.com/u/171800766?s=40&v=4)   [duoyang666](https://github.com/duoyang666) / [ai_novel](https://github.com/duoyang666/ai_novel) | 397 | +|![avatar](https://avatars.githubusercontent.com/u/209155962?s=40&v=4)   [strands-agents](https://github.com/strands-agents) / [samples](https://github.com/strands-agents/samples) | 385 | +|![avatar](https://avatars.githubusercontent.com/u/66303003?s=40&v=4)   [RobotecAI](https://github.com/RobotecAI) / [rai](https://github.com/RobotecAI/rai) | 373 | +|![avatar](https://avatars.githubusercontent.com/u/8931462?s=40&v=4)   [aws-samples](https://github.com/aws-samples) / [aws-ai-ml-workshop-kr](https://github.com/aws-samples/aws-ai-ml-workshop-kr) | 295 | +|![avatar](https://avatars.githubusercontent.com/u/25676773?s=40&v=4)   [weizxfree](https://github.com/weizxfree) / [KnowFlow](https://github.com/weizxfree/KnowFlow) | 285 | +|![avatar](https://avatars.githubusercontent.com/u/88676955?s=40&v=4)   [zenml-io](https://github.com/zenml-io) / [zenml-projects](https://github.com/zenml-io/zenml-projects) | 276 | +|![avatar](https://avatars.githubusercontent.com/u/136071305?s=40&v=4)   [wxai-space](https://github.com/wxai-space) / [LightAgent](https://github.com/wxai-space/LightAgent) | 275 | +|![avatar](https://avatars.githubusercontent.com/u/168552753?s=40&v=4)   [sql-agi](https://github.com/sql-agi) / [DB-GPT](https://github.com/sql-agi/DB-GPT) | 241 | +|![avatar](https://avatars.githubusercontent.com/u/828269?s=40&v=4)   [guyernest](https://github.com/guyernest) / [advanced-rag](https://github.com/guyernest/advanced-rag) | 238 | +|![avatar](https://avatars.githubusercontent.com/u/175069511?s=40&v=4)   [bklieger-groq](https://github.com/bklieger-groq) / [mathtutor-on-groq](https://github.com/bklieger-groq/mathtutor-on-groq) | 233 | +|![avatar](https://avatars.githubusercontent.com/u/123981229?s=40&v=4)   [plastic-labs](https://github.com/plastic-labs) / [honcho](https://github.com/plastic-labs/honcho) | 224 | +|![avatar](https://avatars.githubusercontent.com/u/118967077?s=40&v=4)   [OVINC-CN](https://github.com/OVINC-CN) / [OpenWebUI](https://github.com/OVINC-CN/OpenWebUI) | 202 | +|![avatar](https://avatars.githubusercontent.com/u/31960995?s=40&v=4)   [zhutoutoutousan](https://github.com/zhutoutoutousan) / [worldquant-miner](https://github.com/zhutoutoutousan/worldquant-miner) | 202 | +|![avatar](https://avatars.githubusercontent.com/u/174666116?s=40&v=4)   [ai-shifu](https://github.com/ai-shifu) / [ai-shifu](https://github.com/ai-shifu/ai-shifu) | 181 | +|![avatar](https://avatars.githubusercontent.com/u/8931462?s=40&v=4)   [aws-samples](https://github.com/aws-samples) / [sample-serverless-mcp-servers](https://github.com/aws-samples/sample-serverless-mcp-servers) | 175 | +|![avatar](https://avatars.githubusercontent.com/u/171735272?s=40&v=4)   [8090-inc](https://github.com/8090-inc) / [xrx-sample-apps](https://github.com/8090-inc/xrx-sample-apps) | 163 | +|![avatar](https://avatars.githubusercontent.com/u/51827949?s=40&v=4)   [deepset-ai](https://github.com/deepset-ai) / [haystack-core-integrations](https://github.com/deepset-ai/haystack-core-integrations) | 163 | +|![avatar](https://avatars.githubusercontent.com/u/196509932?s=40&v=4)   [XSpoonAi](https://github.com/XSpoonAi) / [spoon-core](https://github.com/XSpoonAi/spoon-core) | 150 | +|![avatar](https://avatars.githubusercontent.com/u/139558948?s=40&v=4)   [chatchat-space](https://github.com/chatchat-space) / [LangGraph-Chatchat](https://github.com/chatchat-space/LangGraph-Chatchat) | 144 | +|![avatar](https://avatars.githubusercontent.com/u/44976328?s=40&v=4)   [piyushgarg-dev](https://github.com/piyushgarg-dev) / [genai-cohort](https://github.com/piyushgarg-dev/genai-cohort) | 135 | +|![avatar](https://avatars.githubusercontent.com/u/105285801?s=40&v=4)   [i-dot-ai](https://github.com/i-dot-ai) / [redbox](https://github.com/i-dot-ai/redbox) | 132 | +|![avatar](https://avatars.githubusercontent.com/u/90423581?s=40&v=4)   [bmd1905](https://github.com/bmd1905) / [ChatOpsLLM](https://github.com/bmd1905/ChatOpsLLM) | 127 | +|![avatar](https://avatars.githubusercontent.com/u/202074444?s=40&v=4)   [Fintech-Dreamer](https://github.com/Fintech-Dreamer) / [FinSynth](https://github.com/Fintech-Dreamer/FinSynth) | 121 | +|![avatar](https://avatars.githubusercontent.com/u/1566555?s=40&v=4)   [kenshiro-o](https://github.com/kenshiro-o) / [nagato-ai](https://github.com/kenshiro-o/nagato-ai) | 119 | +|![avatar](https://avatars.githubusercontent.com/u/32715913?s=40&v=4)   [AmineDjeghri](https://github.com/AmineDjeghri) / [generative-ai-project-template](https://github.com/AmineDjeghri/generative-ai-project-template) | 106 | +|![avatar](https://avatars.githubusercontent.com/u/42655961?s=40&v=4)   [zozoheir](https://github.com/zozoheir) / [tinyllm](https://github.com/zozoheir/tinyllm) | 100 | +|![avatar](https://avatars.githubusercontent.com/u/6801780?s=40&v=4)   [tuhinsharma121](https://github.com/tuhinsharma121) / [ai-playground](https://github.com/tuhinsharma121/ai-playground) | 97 | +|![avatar](https://avatars.githubusercontent.com/u/25398886?s=40&v=4)   [pavanjava](https://github.com/pavanjava) / [bootstrap-rag](https://github.com/pavanjava/bootstrap-rag) | 91 | +|![avatar](https://avatars.githubusercontent.com/u/5483139?s=40&v=4)   [hustyichi](https://github.com/hustyichi) / [dify-eval](https://github.com/hustyichi/dify-eval) | 82 | +|![avatar](https://avatars.githubusercontent.com/u/136511203?s=40&v=4)   [longevity-genie](https://github.com/longevity-genie) / [just-agents](https://github.com/longevity-genie/just-agents) | 75 | +|![avatar](https://avatars.githubusercontent.com/u/29546870?s=40&v=4)   [MSNP1381](https://github.com/MSNP1381) / [kaggle-Agent](https://github.com/MSNP1381/kaggle-Agent) | 70 | +|![avatar](https://avatars.githubusercontent.com/u/55096704?s=40&v=4)   [TencentBlueKing](https://github.com/TencentBlueKing) / [bk-monitor](https://github.com/TencentBlueKing/bk-monitor) | 68 | +|![avatar](https://avatars.githubusercontent.com/u/131913382?s=40&v=4)   [elenagalun](https://github.com/elenagalun) / [difygit](https://github.com/elenagalun/difygit) | 67 | +|![avatar](https://avatars.githubusercontent.com/u/131913521?s=40&v=4)   [veragloo](https://github.com/veragloo) / [dify](https://github.com/veragloo/dify) | 66 | +|![avatar](https://avatars.githubusercontent.com/u/24954468?s=40&v=4)   [gnosis](https://github.com/gnosis) / [prediction-market-agent](https://github.com/gnosis/prediction-market-agent) | 65 | +|![avatar](https://avatars.githubusercontent.com/u/8931462?s=40&v=4)   [aws-samples](https://github.com/aws-samples) / [genai-ml-platform-examples](https://github.com/aws-samples/genai-ml-platform-examples) | 64 | +|![avatar](https://avatars.githubusercontent.com/u/1355641?s=40&v=4)   [cab938](https://github.com/cab938) / [jupyter_tool](https://github.com/cab938/jupyter_tool) | 64 | +|![avatar](https://avatars.githubusercontent.com/u/105285801?s=40&v=4)   [i-dot-ai](https://github.com/i-dot-ai) / [themefinder](https://github.com/i-dot-ai/themefinder) | 61 | +|![avatar](https://avatars.githubusercontent.com/u/17580039?s=40&v=4)   [sib-swiss](https://github.com/sib-swiss) / [sparql-llm](https://github.com/sib-swiss/sparql-llm) | 60 | +|![avatar](https://avatars.githubusercontent.com/u/83681204?s=40&v=4)   [kaymen99](https://github.com/kaymen99) / [AI-Sales-agent](https://github.com/kaymen99/AI-Sales-agent) | 59 | +|![avatar](https://avatars.githubusercontent.com/u/63241254?s=40&v=4)   [denodo](https://github.com/denodo) / [denodo-ai-sdk](https://github.com/denodo/denodo-ai-sdk) | 57 | +|![avatar](https://avatars.githubusercontent.com/u/64038928?s=40&v=4)   [jayita13](https://github.com/jayita13) / [GenerativeAI](https://github.com/jayita13/GenerativeAI) | 57 | +|![avatar](https://avatars.githubusercontent.com/u/8931462?s=40&v=4)   [aws-samples](https://github.com/aws-samples) / [generative-ai-on-amazon-sagemaker](https://github.com/aws-samples/generative-ai-on-amazon-sagemaker) | 56 | +|![avatar](https://avatars.githubusercontent.com/u/64363987?s=40&v=4)   [Coding-Crashkurse](https://github.com/Coding-Crashkurse) / [Udemy-Advanced-LangChain](https://github.com/Coding-Crashkurse/Udemy-Advanced-LangChain) | 52 | +|![avatar](https://avatars.githubusercontent.com/u/105286202?s=40&v=4)   [Shy2593666979](https://github.com/Shy2593666979) / [AgentChat](https://github.com/Shy2593666979/AgentChat) | 51 | +|![avatar](https://avatars.githubusercontent.com/u/166864454?s=40&v=4)   [agentcoinorg](https://github.com/agentcoinorg) / [predictionprophet](https://github.com/agentcoinorg/predictionprophet) | 48 | +|![avatar](https://avatars.githubusercontent.com/u/22869067?s=40&v=4)   [DTiapan](https://github.com/DTiapan) / [ai-agents-handbook](https://github.com/DTiapan/ai-agents-handbook) | 47 | +|![avatar](https://avatars.githubusercontent.com/u/107418811?s=40&v=4)   [opendatahub-io-contrib](https://github.com/opendatahub-io-contrib) / [workbench-images](https://github.com/opendatahub-io-contrib/workbench-images) | 47 | +|![avatar](https://avatars.githubusercontent.com/u/29598954?s=40&v=4)   [filopedraz](https://github.com/filopedraz) / [kosuke-core](https://github.com/filopedraz/kosuke-core) | 43 | +|![avatar](https://avatars.githubusercontent.com/u/50320576?s=40&v=4)   [jakobap](https://github.com/jakobap) / [graph2nosql](https://github.com/jakobap/graph2nosql) | 42 | +|![avatar](https://avatars.githubusercontent.com/u/7874148?s=40&v=4)   [betagouv](https://github.com/betagouv) / [ComparIA](https://github.com/betagouv/ComparIA) | 41 | +|![avatar](https://avatars.githubusercontent.com/u/24954468?s=40&v=4)   [gnosis](https://github.com/gnosis) / [prediction-market-agent-tooling](https://github.com/gnosis/prediction-market-agent-tooling) | 41 | +|![avatar](https://avatars.githubusercontent.com/u/33279882?s=40&v=4)   [holunda-io](https://github.com/holunda-io) / [bpm-ai-connectors-camunda-8](https://github.com/holunda-io/bpm-ai-connectors-camunda-8) | 41 | +|![avatar](https://avatars.githubusercontent.com/u/86200048?s=40&v=4)   [valory-xyz](https://github.com/valory-xyz) / [mech](https://github.com/valory-xyz/mech) | 40 | +|![avatar](https://avatars.githubusercontent.com/u/176538739?s=40&v=4)   [AIAtrium](https://github.com/AIAtrium) / [mcp-assistant](https://github.com/AIAtrium/mcp-assistant) | 38 | +|![avatar](https://avatars.githubusercontent.com/u/50320576?s=40&v=4)   [jakobap](https://github.com/jakobap) / [graphrag-light](https://github.com/jakobap/graphrag-light) | 38 | +|![avatar](https://avatars.githubusercontent.com/u/37552977?s=40&v=4)   [michelle-avery](https://github.com/michelle-avery) / [custom-conversation](https://github.com/michelle-avery/custom-conversation) | 37 | +|![avatar](https://avatars.githubusercontent.com/u/137899388?s=40&v=4)   [yaitec](https://github.com/yaitec) / [langflow-streamlit](https://github.com/yaitec/langflow-streamlit) | 37 | +|![avatar](https://avatars.githubusercontent.com/u/58515289?s=40&v=4)   [it-at-m](https://github.com/it-at-m) / [mucgpt](https://github.com/it-at-m/mucgpt) | 36 | +|![avatar](https://avatars.githubusercontent.com/u/12874877?s=40&v=4)   [garyzava](https://github.com/garyzava) / [chat-to-database-chatbot](https://github.com/garyzava/chat-to-database-chatbot) | 36 | +|![avatar](https://avatars.githubusercontent.com/u/34230119?s=40&v=4)   [IDinsight](https://github.com/IDinsight) / [ask-a-question](https://github.com/IDinsight/ask-a-question) | 36 | +|![avatar](https://avatars.githubusercontent.com/u/35997537?s=40&v=4)   [danifuya](https://github.com/danifuya) / [ai-agents-tutorials](https://github.com/danifuya/ai-agents-tutorials) | 35 | +|![avatar](https://avatars.githubusercontent.com/u/55577607?s=40&v=4)   [stackitcloud](https://github.com/stackitcloud) / [rag-template](https://github.com/stackitcloud/rag-template) | 35 | +|![avatar](https://avatars.githubusercontent.com/u/170646650?s=40&v=4)   [jayrinaldime](https://github.com/jayrinaldime) / [ollama-straico-apiproxy](https://github.com/jayrinaldime/ollama-straico-apiproxy) | 35 | +|![avatar](https://avatars.githubusercontent.com/u/45158568?s=40&v=4)   [SSK-14](https://github.com/SSK-14) / [WizSearch](https://github.com/SSK-14/WizSearch) | 33 | +|![avatar](https://avatars.githubusercontent.com/u/24699559?s=40&v=4)   [Renumics](https://github.com/Renumics) / [lexio](https://github.com/Renumics/lexio) | 32 | +|![avatar](https://avatars.githubusercontent.com/u/152896178?s=40&v=4)   [xyin-anl](https://github.com/xyin-anl) / [Nodeology](https://github.com/xyin-anl/Nodeology) | 32 | +|![avatar](https://avatars.githubusercontent.com/u/33828982?s=40&v=4)   [percent4](https://github.com/percent4) / [llm_4_doc_qa](https://github.com/percent4/llm_4_doc_qa) | 31 | +|![avatar](https://avatars.githubusercontent.com/u/2002434?s=40&v=4)   [wangxj03](https://github.com/wangxj03) / [ai-cookbook](https://github.com/wangxj03/ai-cookbook) | 31 | +|![avatar](https://avatars.githubusercontent.com/u/72557383?s=40&v=4)   [Shekswess](https://github.com/Shekswess) / [ai-project-template](https://github.com/Shekswess/ai-project-template) | 31 | +|![avatar](https://avatars.githubusercontent.com/u/78410652?s=40&v=4)   [GreyDGL](https://github.com/GreyDGL) / [ShareGPTs](https://github.com/GreyDGL/ShareGPTs) | 31 | +|![avatar](https://avatars.githubusercontent.com/u/119934927?s=40&v=4)   [auto-code-etri](https://github.com/auto-code-etri) / [autocode](https://github.com/auto-code-etri/autocode) | 28 | +|![avatar](https://avatars.githubusercontent.com/u/152447349?s=40&v=4)   [thomasnormal](https://github.com/thomasnormal) / [fewshot](https://github.com/thomasnormal/fewshot) | 28 | +|![avatar](https://avatars.githubusercontent.com/u/11855343?s=40&v=4)   [pingcap](https://github.com/pingcap) / [LinguFlow](https://github.com/pingcap/LinguFlow) | 28 | +|![avatar](https://avatars.githubusercontent.com/u/43288948?s=40&v=4)   [AnkushMalaker](https://github.com/AnkushMalaker) / [friend-lite](https://github.com/AnkushMalaker/friend-lite) | 27 | +|![avatar](https://avatars.githubusercontent.com/u/225730003?s=40&v=4)   [MoFox-Studio](https://github.com/MoFox-Studio) / [MoFox_Bot](https://github.com/MoFox-Studio/MoFox_Bot) | 27 | +|![avatar](https://avatars.githubusercontent.com/u/94514?s=40&v=4)   [dimagi](https://github.com/dimagi) / [open-chat-studio](https://github.com/dimagi/open-chat-studio) | 27 | +|![avatar](https://avatars.githubusercontent.com/u/58823673?s=40&v=4)   [minhbtrc](https://github.com/minhbtrc) / [chatbot-template](https://github.com/minhbtrc/chatbot-template) | 26 | +|![avatar](https://avatars.githubusercontent.com/u/78464112?s=40&v=4)   [syzhy113](https://github.com/syzhy113) / [Engineering-Code-Analysis](https://github.com/syzhy113/Engineering-Code-Analysis) | 26 | +|![avatar](https://avatars.githubusercontent.com/u/39209037?s=40&v=4)   [bearlike](https://github.com/bearlike) / [Personal-Assistant](https://github.com/bearlike/Personal-Assistant) | 26 | +|![avatar](https://avatars.githubusercontent.com/u/42569525?s=40&v=4)   [ThalesGroup](https://github.com/ThalesGroup) / [fred](https://github.com/ThalesGroup/fred) | 25 | +|![avatar](https://avatars.githubusercontent.com/u/212066184?s=40&v=4)   [Stockelper-Lab](https://github.com/Stockelper-Lab) / [stockelper-llm](https://github.com/Stockelper-Lab/stockelper-llm) | 25 | +|![avatar](https://avatars.githubusercontent.com/u/1937124?s=40&v=4)   [sunblaze-ucb](https://github.com/sunblaze-ucb) / [verina](https://github.com/sunblaze-ucb/verina) | 25 | +|![avatar](https://avatars.githubusercontent.com/u/70932800?s=40&v=4)   [Pseudo-Lab](https://github.com/Pseudo-Lab) / [JobPT](https://github.com/Pseudo-Lab/JobPT) | 25 | +|![avatar](https://avatars.githubusercontent.com/u/128304174?s=40&v=4)   [Hyperspawn](https://github.com/Hyperspawn) / [Dropbear](https://github.com/Hyperspawn/Dropbear) | 25 | +|![avatar](https://avatars.githubusercontent.com/u/165080693?s=40&v=4)   [PersonaFlow](https://github.com/PersonaFlow) / [agentstack](https://github.com/PersonaFlow/agentstack) | 24 | +|![avatar](https://avatars.githubusercontent.com/u/8947407?s=40&v=4)   [RRisto](https://github.com/RRisto) / [learning](https://github.com/RRisto/learning) | 23 | +|![avatar](https://avatars.githubusercontent.com/u/75791840?s=40&v=4)   [Flopsky](https://github.com/Flopsky) / [OpenDeepWiki](https://github.com/Flopsky/OpenDeepWiki) | 23 | +|![avatar](https://avatars.githubusercontent.com/u/101029445?s=40&v=4)   [therohitshelar97](https://github.com/therohitshelar97) / [SignLanguageDetectionDeepLearningProject](https://github.com/therohitshelar97/SignLanguageDetectionDeepLearningProject) | 23 | +|![avatar](https://avatars.githubusercontent.com/u/536878?s=40&v=4)   [mayflower](https://github.com/mayflower) / [langchain_agents](https://github.com/mayflower/langchain_agents) | 23 | +|![avatar](https://avatars.githubusercontent.com/u/8931462?s=40&v=4)   [aws-samples](https://github.com/aws-samples) / [sample-getting-started-with-strands-agents-course](https://github.com/aws-samples/sample-getting-started-with-strands-agents-course) | 22 | +|![avatar](https://avatars.githubusercontent.com/u/204286196?s=40&v=4)   [Computer-use-agents](https://github.com/Computer-use-agents) / [MacOS-Agent](https://github.com/Computer-use-agents/MacOS-Agent) | 22 | +|![avatar](https://avatars.githubusercontent.com/u/74597894?s=40&v=4)   [minorun365](https://github.com/minorun365) / [aws-level-checker](https://github.com/minorun365/aws-level-checker) | 22 | +|![avatar](https://avatars.githubusercontent.com/u/65946329?s=40&v=4)   [aimclub](https://github.com/aimclub) / [ProtoLLM](https://github.com/aimclub/ProtoLLM) | 22 | +|![avatar](https://avatars.githubusercontent.com/u/60320192?s=40&v=4)   [blacksmithop](https://github.com/blacksmithop) / [LLM-Graph-Builder](https://github.com/blacksmithop/LLM-Graph-Builder) | 22 | +|![avatar](https://avatars.githubusercontent.com/u/119980131?s=40&v=4)   [cnoe-io](https://github.com/cnoe-io) / [openapi-mcp-codegen](https://github.com/cnoe-io/openapi-mcp-codegen) | 20 | +|![avatar](https://avatars.githubusercontent.com/u/13483165?s=40&v=4)   [bangoc123](https://github.com/bangoc123) / [multi-agents-design-patterns](https://github.com/bangoc123/multi-agents-design-patterns) | 20 | +|![avatar](https://avatars.githubusercontent.com/u/8931462?s=40&v=4)   [aws-samples](https://github.com/aws-samples) / [open-source-bedrock-agent-evaluation](https://github.com/aws-samples/open-source-bedrock-agent-evaluation) | 20 | +|![avatar](https://avatars.githubusercontent.com/u/137441464?s=40&v=4)   [PalisadeResearch](https://github.com/PalisadeResearch) / [ctfish](https://github.com/PalisadeResearch/ctfish) | 20 | +|![avatar](https://avatars.githubusercontent.com/u/68445958?s=40&v=4)   [anatelgovbr](https://github.com/anatelgovbr) / [sei-ia](https://github.com/anatelgovbr/sei-ia) | 20 | +|![avatar](https://avatars.githubusercontent.com/u/140273596?s=40&v=4)   [LLM-Projects](https://github.com/LLM-Projects) / [haystack-book](https://github.com/LLM-Projects/haystack-book) | 20 | +|![avatar](https://avatars.githubusercontent.com/u/146026395?s=40&v=4)   [edenartlab](https://github.com/edenartlab) / [eve](https://github.com/edenartlab/eve) | 19 | +|![avatar](https://avatars.githubusercontent.com/u/133569709?s=40&v=4)   [Ubheee](https://github.com/Ubheee) / [chainainexus-cloud](https://github.com/Ubheee/chainainexus-cloud) | 19 | +|![avatar](https://avatars.githubusercontent.com/u/187237976?s=40&v=4)   [SuperGalaxy0901](https://github.com/SuperGalaxy0901) / [Streamlit-OpenAI-Chatbot](https://github.com/SuperGalaxy0901/Streamlit-OpenAI-Chatbot) | 19 | +|![avatar](https://avatars.githubusercontent.com/u/26455310?s=40&v=4)   [nthanhdo2610](https://github.com/nthanhdo2610) / [ai-log-analysis](https://github.com/nthanhdo2610/ai-log-analysis) | 18 | +|![avatar](https://avatars.githubusercontent.com/u/42213409?s=40&v=4)   [pshenok](https://github.com/pshenok) / [minima-aws](https://github.com/pshenok/minima-aws) | 18 | +|![avatar](https://avatars.githubusercontent.com/u/12452009?s=40&v=4)   [maxritter](https://github.com/maxritter) / [aws-bedrock-multi-agent-blueprint](https://github.com/maxritter/aws-bedrock-multi-agent-blueprint) | 18 | +|![avatar](https://avatars.githubusercontent.com/u/64363987?s=40&v=4)   [Coding-Crashkurse](https://github.com/Coding-Crashkurse) / [LangChain-in-Production-with-Langfuse](https://github.com/Coding-Crashkurse/LangChain-in-Production-with-Langfuse) | 18 | +|![avatar](https://avatars.githubusercontent.com/u/46789005?s=40&v=4)   [sumukshashidhar](https://github.com/sumukshashidhar) / [yourbench](https://github.com/sumukshashidhar/yourbench) | 17 | +|![avatar](https://avatars.githubusercontent.com/u/132536190?s=40&v=4)   [beaubeas](https://github.com/beaubeas) / [lung-cancer-detection](https://github.com/beaubeas/lung-cancer-detection) | 17 | +|![avatar](https://avatars.githubusercontent.com/u/64363987?s=40&v=4)   [Coding-Crashkurse](https://github.com/Coding-Crashkurse) / [LangGraph-Visualizer](https://github.com/Coding-Crashkurse/LangGraph-Visualizer) | 17 | +|![avatar](https://avatars.githubusercontent.com/u/64363987?s=40&v=4)   [Coding-Crashkurse](https://github.com/Coding-Crashkurse) / [RAG-Evaluation-with-Ragas](https://github.com/Coding-Crashkurse/RAG-Evaluation-with-Ragas) | 17 | +|![avatar](https://avatars.githubusercontent.com/u/6224969?s=40&v=4)   [shreyashankar](https://github.com/shreyashankar) / [spade-experiments](https://github.com/shreyashankar/spade-experiments) | 17 | +|![avatar](https://avatars.githubusercontent.com/u/24829397?s=40&v=4)   [ogabrielluiz](https://github.com/ogabrielluiz) / [langflow-railway](https://github.com/ogabrielluiz/langflow-railway) | 17 | +|![avatar](https://avatars.githubusercontent.com/u/512756?s=40&v=4)   [moodlehq](https://github.com/moodlehq) / [wiki-rag](https://github.com/moodlehq/wiki-rag) | 16 | +|![avatar](https://avatars.githubusercontent.com/u/145160226?s=40&v=4)   [FosterFlow](https://github.com/FosterFlow) / [fosterflow](https://github.com/FosterFlow/fosterflow) | 16 | +|![avatar](https://avatars.githubusercontent.com/u/131941631?s=40&v=4)   [ldilab](https://github.com/ldilab) / [ArchCode](https://github.com/ldilab/ArchCode) | 16 | +|![avatar](https://avatars.githubusercontent.com/u/120989600?s=40&v=4)   [balajivis](https://github.com/balajivis) / [modernaipro](https://github.com/balajivis/modernaipro) | 16 | +|![avatar](https://avatars.githubusercontent.com/u/8931462?s=40&v=4)   [aws-samples](https://github.com/aws-samples) / [Cost_Effective_and_Scalable_Models_Inference_on_AWS_Graviton](https://github.com/aws-samples/Cost_Effective_and_Scalable_Models_Inference_on_AWS_Graviton) | 15 | +|![avatar](https://avatars.githubusercontent.com/u/28005881?s=40&v=4)   [a-klos](https://github.com/a-klos) / [langchain-ocr](https://github.com/a-klos/langchain-ocr) | 15 | +|![avatar](https://avatars.githubusercontent.com/u/57317518?s=40&v=4)   [samitugal](https://github.com/samitugal) / [KnowledgeGraphQA-Langgraph](https://github.com/samitugal/KnowledgeGraphQA-Langgraph) | 15 | +|![avatar](https://avatars.githubusercontent.com/u/17307?s=40&v=4)   [brylie](https://github.com/brylie) / [langflow-fastapi-htmx](https://github.com/brylie/langflow-fastapi-htmx) | 15 | +|![avatar](https://avatars.githubusercontent.com/u/30489717?s=40&v=4)   [YeonwooSung](https://github.com/YeonwooSung) / [MLOps](https://github.com/YeonwooSung/MLOps) | 15 | +|![avatar](https://avatars.githubusercontent.com/u/205921208?s=40&v=4)   [outskill-git](https://github.com/outskill-git) / [GenAIEngineering-Cohort1](https://github.com/outskill-git/GenAIEngineering-Cohort1) | 14 | +|![avatar](https://avatars.githubusercontent.com/u/8931462?s=40&v=4)   [aws-samples](https://github.com/aws-samples) / [sample-genai-on-eks-starter-kit](https://github.com/aws-samples/sample-genai-on-eks-starter-kit) | 14 | +|![avatar](https://avatars.githubusercontent.com/u/19359510?s=40&v=4)   [AndreCNF](https://github.com/AndreCNF) / [polids](https://github.com/AndreCNF/polids) | 14 | +|![avatar](https://avatars.githubusercontent.com/u/83023332?s=40&v=4)   [phitrann](https://github.com/phitrann) / [arXivRAG](https://github.com/phitrann/arXivRAG) | 14 | +|![avatar](https://avatars.githubusercontent.com/u/44242534?s=40&v=4)   [diicellman](https://github.com/diicellman) / [dynamite-dogs](https://github.com/diicellman/dynamite-dogs) | 14 | +|![avatar](https://avatars.githubusercontent.com/u/3348134?s=40&v=4)   [strickvl](https://github.com/strickvl) / [hinbox](https://github.com/strickvl/hinbox) | 13 | +|![avatar](https://avatars.githubusercontent.com/u/23645788?s=40&v=4)   [shivaraj-bh](https://github.com/shivaraj-bh) / [ollama-flake](https://github.com/shivaraj-bh/ollama-flake) | 13 | +|![avatar](https://avatars.githubusercontent.com/u/183470322?s=40&v=4)   [synth-laboratories](https://github.com/synth-laboratories) / [synth-ai](https://github.com/synth-laboratories/synth-ai) | 12 | +|![avatar](https://avatars.githubusercontent.com/u/158254884?s=40&v=4)   [tensorplex-labs](https://github.com/tensorplex-labs) / [dojo](https://github.com/tensorplex-labs/dojo) | 12 | +|![avatar](https://avatars.githubusercontent.com/u/92739940?s=40&v=4)   [ssc-dsai](https://github.com/ssc-dsai) / [canchat-v2](https://github.com/ssc-dsai/canchat-v2) | 12 | +|![avatar](https://avatars.githubusercontent.com/u/125468716?s=40&v=4)   [topoteretes](https://github.com/topoteretes) / [cognee-community](https://github.com/topoteretes/cognee-community) | 12 | +|![avatar](https://avatars.githubusercontent.com/u/72557383?s=40&v=4)   [Shekswess](https://github.com/Shekswess) / [small-language-model-rags-is-all-you-need](https://github.com/Shekswess/small-language-model-rags-is-all-you-need) | 12 | +|![avatar](https://avatars.githubusercontent.com/u/24278041?s=40&v=4)   [PhiBrandon](https://github.com/PhiBrandon) / [offer-generator-lightrag](https://github.com/PhiBrandon/offer-generator-lightrag) | 12 | +|![avatar](https://avatars.githubusercontent.com/u/58663620?s=40&v=4)   [dida-do](https://github.com/dida-do) / [public](https://github.com/dida-do/public) | 12 | +|![avatar](https://avatars.githubusercontent.com/u/156330287?s=40&v=4)   [aishe-ai](https://github.com/aishe-ai) / [core](https://github.com/aishe-ai/core) | 12 | +|![avatar](https://avatars.githubusercontent.com/u/17572232?s=40&v=4)   [jayeshmahapatra](https://github.com/jayeshmahapatra) / [rag-chatbot](https://github.com/jayeshmahapatra/rag-chatbot) | 12 | +|![avatar](https://avatars.githubusercontent.com/u/10764713?s=40&v=4)   [georgian-io](https://github.com/georgian-io) / [GAL](https://github.com/georgian-io/GAL) | 12 | +|![avatar](https://avatars.githubusercontent.com/u/162442287?s=40&v=4)   [GaiaNet-AI](https://github.com/GaiaNet-AI) / [gaia-cookbook](https://github.com/GaiaNet-AI/gaia-cookbook) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/8931462?s=40&v=4)   [aws-samples](https://github.com/aws-samples) / [sample-building-agentic-ai-applications-on-aws](https://github.com/aws-samples/sample-building-agentic-ai-applications-on-aws) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/84165920?s=40&v=4)   [app-vitals](https://github.com/app-vitals) / [livekit-video](https://github.com/app-vitals/livekit-video) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/211746166?s=40&v=4)   [AI3clauseBSD](https://github.com/AI3clauseBSD) / [claused-webai](https://github.com/AI3clauseBSD/claused-webai) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/65946329?s=40&v=4)   [aimclub](https://github.com/aimclub) / [FEDOT.LLM](https://github.com/aimclub/FEDOT.LLM) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/46588040?s=40&v=4)   [afontana1](https://github.com/afontana1) / [Data-Engineering](https://github.com/afontana1/Data-Engineering) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/8032076?s=40&v=4)   [c00cjz00](https://github.com/c00cjz00) / [llmservice_ip](https://github.com/c00cjz00/llmservice_ip) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/150324891?s=40&v=4)   [CdC-SI](https://github.com/CdC-SI) / [ZAS-EAK-CopilotGPT](https://github.com/CdC-SI/ZAS-EAK-CopilotGPT) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/6956?s=40&v=4)   [zby](https://github.com/zby) / [answerbot](https://github.com/zby/answerbot) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/175238189?s=40&v=4)   [OpenProBono](https://github.com/OpenProBono) / [openprobono](https://github.com/OpenProBono/openprobono) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/53172094?s=40&v=4)   [binarybrain-009](https://github.com/binarybrain-009) / [AUTOATTACKER](https://github.com/binarybrain-009/AUTOATTACKER) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/114365148?s=40&v=4)   [himanshu-skid19](https://github.com/himanshu-skid19) / [Inter-IIT-12-Devrev-AI-Agent-007](https://github.com/himanshu-skid19/Inter-IIT-12-Devrev-AI-Agent-007) | 11 | +|![avatar](https://avatars.githubusercontent.com/u/195694209?s=40&v=4)   [luwhano](https://github.com/luwhano) / [fastapi-langgraph-agent-production-ready-template](https://github.com/luwhano/fastapi-langgraph-agent-production-ready-template) | 10 | +|![avatar](https://avatars.githubusercontent.com/u/175069511?s=40&v=4)   [bklieger-groq](https://github.com/bklieger-groq) / [voice-stockbot](https://github.com/bklieger-groq/voice-stockbot) | 10 | +|![avatar](https://avatars.githubusercontent.com/u/11064260?s=40&v=4)   [ls1intum](https://github.com/ls1intum) / [Hephaestus](https://github.com/ls1intum/Hephaestus) | 10 | +|![avatar](https://avatars.githubusercontent.com/u/113577252?s=40&v=4)   [CeS-3](https://github.com/CeS-3) / [pwn.hust.college](https://github.com/CeS-3/pwn.hust.college) | 10 | +|![avatar](https://avatars.githubusercontent.com/u/2431071?s=40&v=4)   [domik82](https://github.com/domik82) / [aidevs3](https://github.com/domik82/aidevs3) | 10 | +|![avatar](https://avatars.githubusercontent.com/u/151687909?s=40&v=4)   [totvs-ai](https://github.com/totvs-ai) / [dta-samples](https://github.com/totvs-ai/dta-samples) | 10 | +|![avatar](https://avatars.githubusercontent.com/u/12850602?s=40&v=4)   [kartik-nighania](https://github.com/kartik-nighania) / [dhs-workshop](https://github.com/kartik-nighania/dhs-workshop) | 10 | +|![avatar](https://avatars.githubusercontent.com/u/170548455?s=40&v=4)   [phoenix-legend7](https://github.com/phoenix-legend7) / [Open-WebUI](https://github.com/phoenix-legend7/Open-WebUI) | 10 | +|![avatar](https://avatars.githubusercontent.com/u/81291567?s=40&v=4)   [milistu](https://github.com/milistu) / [LegaBot](https://github.com/milistu/LegaBot) | 10 | _Generated using [github-dependents-info](https://github.com/nvuillam/github-dependents-info), by [Nicolas Vuillamy](https://github.com/nvuillam)_ \ No newline at end of file diff --git a/components/CTACard.tsx b/components/CTACard.tsx index 1cb15df79b..d54dcce5a6 100644 --- a/components/CTACard.tsx +++ b/components/CTACard.tsx @@ -29,13 +29,27 @@ export function CTACard({ title, description, children, className, showArrow = f <div className="flex flex-col sm:flex-row gap-3 justify-center md:justify-end items-center md:flex-1"> {showArrow ? ( React.Children.map(children, (child) => { - if (React.isValidElement(child) && (child.type === Button || child.props.asChild)) { + if (React.isValidElement(child) && child.type === Button) { + if (child.props.asChild && React.isValidElement(child.props.children)) { + // asChild: inject arrow inside the <a> so Slot renders <a> with button classes + const linkChild = child.props.children as React.ReactElement; + return React.cloneElement(child, { + children: React.cloneElement(linkChild, { + children: ( + <span className="flex items-center gap-2"> + {linkChild.props.children} + <ArrowRight className="h-4 w-4" /> + </span> + ) + }) + } as any); + } return React.cloneElement(child, { children: ( - <div className="flex items-center gap-2"> + <span className="flex items-center gap-2"> {child.props.children} <ArrowRight className="h-4 w-4" /> - </div> + </span> ) } as any); } diff --git a/components/CookbookIndex.tsx b/components/CookbookIndex.tsx index e4667ec087..33fae87ede 100644 --- a/components/CookbookIndex.tsx +++ b/components/CookbookIndex.tsx @@ -1,15 +1,14 @@ -import { getPagesUnderRoute } from "nextra/context"; -import { type Page } from "nextra"; -import { Cards } from "nextra/components"; -import { FileCode } from "lucide-react"; +import { getPagesUnderRoute } from "@/lib/nextra-shim/context"; +import Link from "next/link"; +import { FileCode, ArrowRight } from "lucide-react"; + +type CookbookPage = { route?: string; name?: string; frontMatter?: Record<string, any> }; export const CookbookIndex = ({ categories }: { categories?: string[] }) => ( <> {Object.entries( ( - getPagesUnderRoute("/guides/cookbook") as Array< - Page & { frontMatter: any } - > + getPagesUnderRoute("/guides/cookbook") as Array<CookbookPage> ) .filter((page) => page.route !== "/cookbook") .filter((page) => page.route !== "/guides/cookbook") @@ -18,7 +17,7 @@ export const CookbookIndex = ({ categories }: { categories?: string[] }) => ( if (!acc[category]) acc[category] = []; acc[category].push(page); return acc; - }, {} as Record<string, Array<Page & { frontMatter: any }>>) + }, {} as Record<string, Array<CookbookPage>>) ) .sort(([categoryA], [categoryB]) => { // if categories are provided, use the order of the provided categories @@ -38,28 +37,37 @@ export const CookbookIndex = ({ categories }: { categories?: string[] }) => ( .filter(([category]) => !categories || categories.includes(category)) .map(([category, pages]) => ( <div key={category}> - <h3 className="_font-semibold _tracking-tight _text-slate-900 dark:_text-slate-100 _mt-8 _text-2xl"> + <h3 className="font-semibold tracking-tight mt-8 text-2xl"> {category} </h3> - <Cards num={2}> - {pages.map((page) => ( - <Cards.Card - href={page.route} - key={page.route} - title={ - page.frontMatter?.title || - page.name - .split("_") - .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) - .join(" ") - } - icon={<FileCode />} - arrow - > - {""} - </Cards.Card> - ))} - </Cards> + <div className="grid grid-cols-1 md:grid-cols-2 gap-3 mt-4"> + {pages.map((page) => { + const title = + page.frontMatter?.title || + page.name + .split("_") + .map( + (word: string) => + word.charAt(0).toUpperCase() + word.slice(1) + ) + .join(" "); + return ( + <Link + href={page.route} + key={page.route} + className="no-underline group" + > + <div className="flex items-center gap-3 px-4 py-3 rounded-lg border border-border bg-transparent hover:bg-muted/40 hover:border-gray-300 dark:hover:border-gray-600 transition-all duration-200"> + <FileCode className="h-4 w-4 text-muted-foreground shrink-0" /> + <span className="text-sm font-medium flex-1 no-underline"> + {title} + </span> + <ArrowRight className="h-4 w-4 text-muted-foreground shrink-0 opacity-0 group-hover:opacity-100 transition-opacity" /> + </div> + </Link> + ); + })} + </div> </div> ))} </> diff --git a/components/DocsContributors.tsx b/components/DocsContributors.tsx index 034f45df2e..fdd71f25ba 100644 --- a/components/DocsContributors.tsx +++ b/components/DocsContributors.tsx @@ -1,10 +1,44 @@ -import { useRouter } from "next/router"; +"use client"; + +import { usePathname } from "next/navigation"; import React, { useState, useEffect, forwardRef } from "react"; import { allAuthors, Author, AuthorHoverCardContent } from "./Authors"; import contributorsData from "../data/generated/contributors.json"; import Image from "next/image"; import { HoverCard, HoverCardTrigger } from "@/components/ui/hover-card"; +const getGithubEditUrl = (path: string): string | null => { + const cleanPath = path.split("#")[0].split("?")[0]; + + const [, section, ...slugParts] = cleanPath.split("/"); + + const sectionToDir: Record<string, string> = { + docs: "content/docs", + guides: "content/guides", + integrations: "content/integrations", + "self-hosting": "content/self-hosting", + library: "content/library", + }; + + const contentDir = sectionToDir[section]; + if (!contentDir) return null; + + const slugPath = slugParts.join("/"); + const filePath = `${contentDir}/${slugPath === "" ? "index" : slugPath}.mdx`; + + return `https://github.com/langfuse/langfuse-docs/edit/main/${filePath}`; +}; + +const getFeedbackUrl = (pageTitle?: string): string => { + const title = (pageTitle ?? "this page").trim(); + const issueTitle = `Feedback for "${title}"`; + const params = new URLSearchParams({ + title: issueTitle, + labels: "feedback", + }); + return `https://github.com/langfuse/langfuse-docs/issues/new?${params.toString()}`; +}; + const getContributors = (path: string): string[] => { // Try exact path first, then with/without /index suffix const variants = [ @@ -108,10 +142,16 @@ const processContributor = (username: string): ProcessedContributor => { }; }; -export const DocsContributors = () => { - const router = useRouter(); - const currentPath = router.asPath.split("#")[0].split("?")[0]; +type DocsContributorsProps = { + pageTitle?: string; +}; + +export const DocsContributors = ({ pageTitle }: DocsContributorsProps) => { + const pathname = usePathname() ?? ""; + const currentPath = pathname.split("#")[0].split("?")[0]; const [showAll, setShowAll] = useState(false); + const editUrl = getGithubEditUrl(currentPath); + const feedbackUrl = getFeedbackUrl(pageTitle); // Reset showAll when the page changes useEffect(() => { @@ -128,26 +168,51 @@ export const DocsContributors = () => { const remainingCount = Math.max(0, processedContributors.length - 3); return ( - <div className="mt-1 pt-4 border-t border-border w-full"> - <div className="text-sm font-medium text-gray-500 dark:text-gray-400 mb-2"> - Contributors - </div> - <div> - {displayedContributors.map((contributor) => ( - <ContributorCard - key={contributor.username} - contributor={contributor} - /> - ))} - {remainingCount > 0 && !showAll && ( - <button - onClick={() => setShowAll(true)} - className="mt-1 text-xs text-muted-foreground hover:text-foreground italic pl-2 transition-colors cursor-pointer" - > - ... and {remainingCount} more - </button> - )} + <> + {(editUrl || feedbackUrl) && ( + <div className="mt-1 pt-3 pb-2 border-t border-border w-full flex flex-col gap-2"> + {feedbackUrl && ( + <a + href={feedbackUrl} + rel="noreferrer noopener" + target="_blank" + className="font-medium text-xs text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground" + > + Question? Give us feedback → + </a> + )} + {editUrl && ( + <a + href={editUrl} + rel="noreferrer noopener" + target="_blank" + className="font-medium text-xs text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground" + > + Edit this page on GitHub + </a> + )} + </div> + )} + <div className="mt-1 pt-4 border-t border-border w-full"> + <div className="text-sm font-medium text-gray-500 dark:text-gray-400 mb-2"> + Contributors + </div> + <div> + {displayedContributors.map((contributor) => ( + <React.Fragment key={contributor.username}> + <ContributorCard contributor={contributor} /> + </React.Fragment> + ))} + {remainingCount > 0 && !showAll && ( + <button + onClick={() => setShowAll(true)} + className="mt-1 text-xs text-muted-foreground hover:text-foreground italic pl-2 transition-colors cursor-pointer" + > + ... and {remainingCount} more + </button> + )} + </div> </div> - </div> + </> ); }; diff --git a/components/FetchReadme.tsx b/components/FetchReadme.tsx new file mode 100644 index 0000000000..b3087cb0c8 --- /dev/null +++ b/components/FetchReadme.tsx @@ -0,0 +1,20 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { Playground } from "@/lib/nextra-shim/components"; + +export function FetchReadme({ url }: { url: string }) { + const [content, setContent] = useState<string | null>(null); + const [error, setError] = useState<string | null>(null); + + useEffect(() => { + fetch(url) + .then((res) => (res.ok ? res.text() : Promise.reject(new Error(res.statusText)))) + .then(setContent) + .catch((e) => setError(e instanceof Error ? e.message : "Failed to load")); + }, [url]); + + if (error) return <p>Error loading content: {error}</p>; + if (content === null) return <p>Loading…</p>; + return <Playground source={content} />; +} diff --git a/components/FooterMenu.tsx b/components/FooterMenu.tsx index 498bfdb303..32b34174e4 100644 --- a/components/FooterMenu.tsx +++ b/components/FooterMenu.tsx @@ -5,6 +5,7 @@ import IconDiscord from "@/components/icons/discord"; import IconX from "@/components/icons/x"; import IconYoutube from "@/components/icons/youtube"; import IconLinkedin from "@/components/icons/linkedin"; +import { ThemeToggle } from "@/components/ThemeToggle"; const socialLinks = [ { @@ -38,63 +39,63 @@ const menuItems: { heading: string; items: { name: string; href: string }[]; }[] = [ - { - heading: "Product", - items: [ - { name: "Observability", href: "/docs/observability/overview" }, - { - name: "Prompt Management", - href: "/docs/prompt-management/overview", - }, - { name: "Evaluation", href: "/docs/evaluation/overview" }, - { name: "Metrics", href: "/docs/metrics/overview" }, - { - name: "Playground", - href: "/docs/prompt-management/features/playground", - }, - { name: "Pricing", href: "/pricing" }, - { name: "Enterprise", href: "/enterprise" }, - ], - }, - { - heading: "Developers", - items: [ - { name: "Documentation", href: "/docs" }, - { name: "Self-Hosting", href: "/self-hosting" }, - { name: "SDKs", href: "/docs/observability/sdk/overview" }, - { name: "Integrations", href: "/integrations" }, - { - name: "API Reference", - href: "/docs/api-and-data-platform/overview", - }, - { name: "Status", href: "https://status.langfuse.com" }, - { name: "Talk to Us", href: "/talk-to-us" }, - ], - }, - { - heading: "Resources", - items: [ - { name: "Blog", href: "/blog" }, - { name: "Changelog", href: "/changelog" }, - { name: "Roadmap", href: "/docs/roadmap" }, - { name: "Interactive Demo", href: "/docs/demo" }, - { name: "Customers", href: "/customers" }, - { name: "AI Engineering Library", href: "/library" }, - { name: "Guides & Cookbooks", href: "/guides" }, - ], - }, - { - heading: "Company", - items: [ - { name: "About Us", href: "/about" }, - { name: "Careers", href: "/careers" }, - { name: "Press", href: "/press" }, - { name: "Security", href: "/security" }, - { name: "Support", href: "/support" }, - { name: "Open Source", href: "/handbook/chapters/open-source" }, - ], - }, -]; + { + heading: "Product", + items: [ + { name: "Observability", href: "/docs/observability/overview" }, + { + name: "Prompt Management", + href: "/docs/prompt-management/overview", + }, + { name: "Evaluation", href: "/docs/evaluation/overview" }, + { name: "Metrics", href: "/docs/metrics/overview" }, + { + name: "Playground", + href: "/docs/prompt-management/features/playground", + }, + { name: "Pricing", href: "/pricing" }, + { name: "Enterprise", href: "/enterprise" }, + ], + }, + { + heading: "Developers", + items: [ + { name: "Documentation", href: "/docs" }, + { name: "Self-Hosting", href: "/self-hosting" }, + { name: "SDKs", href: "/docs/observability/sdk/overview" }, + { name: "Integrations", href: "/integrations" }, + { + name: "API Reference", + href: "/docs/api-and-data-platform/overview", + }, + { name: "Status", href: "https://status.langfuse.com" }, + { name: "Talk to Us", href: "/talk-to-us" }, + ], + }, + { + heading: "Resources", + items: [ + { name: "Blog", href: "/blog" }, + { name: "Changelog", href: "/changelog" }, + { name: "Roadmap", href: "/docs/roadmap" }, + { name: "Interactive Demo", href: "/docs/demo" }, + { name: "Users", href: "/users" }, + { name: "AI Engineering Library", href: "/library" }, + { name: "Guides & Cookbooks", href: "/guides" }, + ], + }, + { + heading: "Company", + items: [ + { name: "About Us", href: "/about" }, + { name: "Careers", href: "/careers" }, + { name: "Press", href: "/press" }, + { name: "Security", href: "/security" }, + { name: "Support", href: "/support" }, + { name: "Open Source", href: "/handbook/chapters/open-source" }, + ], + }, + ]; const bottomLinks: { name: string; href: string }[] = [ { name: "Terms", href: "/terms" }, @@ -148,7 +149,7 @@ const FooterMenu = () => { </Link> ))} </div> - <div className="flex gap-3 shrink-0"> + <div className="flex items-center gap-3 shrink-0"> {socialLinks.map((link) => { const Icon = link.icon; const isExternal = link.href.startsWith("http"); @@ -167,6 +168,9 @@ const FooterMenu = () => { </a> ); })} + <div className="border-l border-border/50 pl-1.5 ml-1"> + <ThemeToggle /> + </div> </div> </div> diff --git a/components/Frame.tsx b/components/Frame.tsx index 12ef2308a8..ab24520b64 100644 --- a/components/Frame.tsx +++ b/components/Frame.tsx @@ -1,3 +1,5 @@ +"use client"; + import { cn } from "@/lib/utils"; import { useEffect, useRef, useState } from "react"; @@ -141,7 +143,7 @@ export const Frame = ({ > <div className={cn( - "inline bg-primary/5 max-w-2xl [&>*]:mt-0 [&>*]:mb-0 [&>img]:block [&>img]:w-full [&>img]:h-auto [&>img]:leading-none [&>img]:align-top", + "block bg-primary/5 max-w-2xl [&>*]:mt-0 [&>*]:mb-0 [&>*]:p-0 [&_img]:block [&_img]:w-full [&_img]:h-auto [&_img]:leading-none [&_img]:align-top [&_img]:my-0 [&_p]:my-0", fullWidth && "max-w-full", transparent && "bg-transparent" )} diff --git a/components/Glossary.tsx b/components/Glossary.tsx index b8f277bb1e..883980780c 100644 --- a/components/Glossary.tsx +++ b/components/Glossary.tsx @@ -586,7 +586,9 @@ const GlossaryEntry = ({ term }: { term: GlossaryTerm }) => { </div> <div className="flex flex-wrap gap-1.5"> {term.categories.map((cat) => ( - <CategoryBadge key={cat} category={cat} /> + <React.Fragment key={cat}> + <CategoryBadge category={cat} /> + </React.Fragment> ))} </div> <p className="text-sm text-muted-foreground m-0 mt-1"> @@ -693,12 +695,13 @@ export const Glossary = () => { <div className="flex flex-wrap gap-2 items-center"> <span className="text-sm text-muted-foreground mr-1">Filter:</span> {(Object.keys(CATEGORIES) as CategoryKey[]).map((cat) => ( - <CategoryBadge - key={cat} - category={cat} - onClick={() => toggleCategory(cat)} - isActive={activeCategories.includes(cat)} - /> + <React.Fragment key={cat}> + <CategoryBadge + category={cat} + onClick={() => toggleCategory(cat)} + isActive={activeCategories.includes(cat)} + /> + </React.Fragment> ))} {hasActiveFilters && ( <button @@ -756,7 +759,9 @@ export const Glossary = () => { {terms .sort((a, b) => a.term.localeCompare(b.term)) .map((term) => ( - <GlossaryEntry key={term.id} term={term} /> + <React.Fragment key={term.id}> + <GlossaryEntry term={term} /> + </React.Fragment> ))} </div> )) diff --git a/components/HiringBadge.tsx b/components/HiringBadge.tsx index f7be4ac4d8..99bd2e5970 100644 --- a/components/HiringBadge.tsx +++ b/components/HiringBadge.tsx @@ -22,7 +22,7 @@ export function HiringBadge() { const now = Date.now(); if (isHovered && now - lastSpawnTimeRef.current > 100) { lastSpawnTimeRef.current = now; - + const newGoat = { id: goatIdRef.current++, x, @@ -49,9 +49,9 @@ export function HiringBadge() { }; return ( - <div + <div ref={containerRef} - className="relative hidden lg:block" + className="hidden relative min-[1120px]:block" onMouseMove={handleMouseMove} onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave} @@ -66,7 +66,7 @@ export function HiringBadge() { onBlur={() => setIsHovered(false)} style={{ width: "max-content" }} > - <span className="w-1.5 h-1.5 rounded-full bg-[theme(colors.orange.400)] shrink-0" /> + <span className="w-1.5 h-1.5 rounded-full bg-orange-400 shrink-0" /> <span className="relative"> <span className={cn("block", isHovered && "invisible")}> Hiring in Europe and SF @@ -76,13 +76,13 @@ export function HiringBadge() { </span> </span> </Link> - + {/* Falling goats animation */} {isHovered && ( - <div className="fixed pointer-events-none overflow-visible z-50" style={{ - top: 0, - left: 0, - width: "100vw", + <div className="overflow-visible fixed z-50 pointer-events-none" style={{ + top: 0, + left: 0, + width: "100vw", height: "100vh", }}> {goats.map((goat) => { @@ -90,7 +90,7 @@ export function HiringBadge() { const rect = containerRef.current.getBoundingClientRect(); const absoluteX = rect.left + goat.x; const absoluteY = rect.top + goat.y; - + return ( <span key={goat.id} diff --git a/components/MainContentWrapper.tsx b/components/MainContentWrapper.tsx index d4cc0232d3..95830a6cd1 100644 --- a/components/MainContentWrapper.tsx +++ b/components/MainContentWrapper.tsx @@ -1,6 +1,9 @@ -import { useRouter } from "next/router"; +"use client"; + +import type { ReactNode } from "react"; +import { usePathname } from "next/navigation"; import { useState, useEffect, useRef } from "react"; -import { useConfig } from "nextra-theme-docs"; +import { useConfig } from "@/lib/nextra-shim/theme-docs"; import { usePostHogClientCapture } from "@/src/usePostHogClientCapture"; import { Button } from "./ui/button"; import { @@ -14,7 +17,6 @@ import { Loader2, } from "lucide-react"; import { Textarea } from "./ui/textarea"; -import { Background } from "./Background"; import { NotebookBanner } from "./NotebookBanner"; import { COOKBOOK_ROUTE_MAPPING } from "@/lib/cookbook_route_mapping"; import { cn } from "@/lib/utils"; @@ -26,7 +28,6 @@ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, - DropdownMenuSeparator, DropdownMenuTrigger, } from "./ui/dropdown-menu"; import IconChatGPT from "./icons/chatgpt"; @@ -38,6 +39,7 @@ const pathsWithoutFooterWidgets = [ "/blog", "/users", "/careers", + "/watch-demo", ]; const pathsWithCopyAsMarkdownButton = [ "/docs", @@ -51,8 +53,8 @@ const pathsWithCopyAsMarkdownButton = [ const isCustomerStory = (pathname: string) => pathname.startsWith("/users/"); -const CopyMarkdownButton = () => { - const router = useRouter(); +export const CopyMarkdownButton = () => { + const pathname = usePathname(); const capture = usePostHogClientCapture(); const [copyState, setCopyState] = useState< "idle" | "loading" | "copied" | "error" @@ -70,7 +72,7 @@ const CopyMarkdownButton = () => { }, []); const getMarkdownUrl = () => { - let basePath = router.pathname; + let basePath = pathname ?? ""; if (basePath.startsWith("/")) basePath = basePath.substring(1); if (basePath.endsWith("/")) basePath = basePath.slice(0, -1); if (!basePath) basePath = "index"; // Handle root index page @@ -163,6 +165,13 @@ const CopyMarkdownButton = () => { const isDisabled = copyState === "loading" || copyState === "copied"; const isError = copyState === "error"; + // Self-guard: only render on pages that should have the copy button. + // All hooks are above so this conditional return is safe. + const shouldShow = pathsWithCopyAsMarkdownButton.some((prefix) => + (pathname ?? "").startsWith(prefix) + ); + if (!shouldShow) return null; + let buttonText = "Copy page"; let ButtonIcon = CopyIcon; if (copyState === "loading") { @@ -176,7 +185,7 @@ const CopyMarkdownButton = () => { } return ( - <div className="inline-flex items-center rounded-md bg-secondary overflow-hidden"> + <div className="inline-flex overflow-hidden items-center rounded-md bg-secondary"> <button type="button" disabled={isDisabled || isError} @@ -211,7 +220,7 @@ const CopyMarkdownButton = () => { : "" )} > - <ChevronDown className="h-3 w-3" /> + <ChevronDown className="w-3 h-3" /> </button> </DropdownMenuTrigger> <DropdownMenuContent align="end" className="min-w-[200px]"> @@ -220,7 +229,7 @@ const CopyMarkdownButton = () => { disabled={isDisabled} className="flex gap-3 items-center py-1.5 px-3 cursor-pointer" > - <CopyIcon className="h-4 w-4 shrink-0" /> + <CopyIcon className="w-4 h-4 shrink-0" /> <div className="flex flex-col"> <span className="font-medium">Copy page</span> <span className="text-xs text-muted-foreground"> @@ -234,11 +243,11 @@ const CopyMarkdownButton = () => { target="_blank" rel="noopener noreferrer" onClick={handleChatGPTClick} - className="flex gap-3 items-center py-1.5 px-3 cursor-pointer" + className="flex gap-3 items-center py-1.5 px-3 cursor-pointer no-underline" > - <IconChatGPT className="h-4 w-4 shrink-0" /> + <IconChatGPT className="w-4 h-4 shrink-0" /> <div className="flex flex-col flex-1 min-w-0"> - <span className="font-medium flex items-center gap-1"> + <span className="flex gap-1 items-center font-medium"> Open in ChatGPT <ExternalLink className="h-[1em] w-[1em] shrink-0" @@ -257,11 +266,11 @@ const CopyMarkdownButton = () => { target="_blank" rel="noopener noreferrer" onClick={handleClaudeClick} - className="flex gap-3 items-center py-1.5 px-3 cursor-pointer" + className="flex gap-3 items-center py-1.5 px-3 cursor-pointer no-underline" > - <IconClaude className="h-4 w-4 shrink-0" /> + <IconClaude className="w-4 h-4 shrink-0" /> <div className="flex flex-col flex-1 min-w-0"> - <span className="font-medium flex items-center gap-1"> + <span className="flex gap-1 items-center font-medium"> Open in Claude <ExternalLink className="h-[1em] w-[1em] shrink-0" @@ -281,11 +290,11 @@ const CopyMarkdownButton = () => { capture("copy_page", { type: "mcp" }); }} target="_blank" - className="flex gap-3 items-center py-1.5 px-3 cursor-pointer" + className="flex gap-3 items-center py-1.5 px-3 cursor-pointer no-underline" > - <IconMCP className="h-4 w-4 shrink-0" /> + <IconMCP className="w-4 h-4 shrink-0" /> <div className="flex flex-col flex-1 min-w-0"> - <span className="font-medium flex items-center gap-1"> + <span className="flex gap-1 items-center font-medium"> Install Docs MCP server <ExternalLink className="h-[1em] w-[1em] shrink-0" @@ -305,61 +314,62 @@ const CopyMarkdownButton = () => { }; export const MainContentWrapper = (props) => { - const router = useRouter(); + const pathname = usePathname(); const { frontMatter } = useConfig(); const cookbook = COOKBOOK_ROUTE_MAPPING.find( - (cookbook) => cookbook.path === router.pathname + (cookbook) => cookbook.path === pathname ); const versionLabel = frontMatter.label; const shouldShowCopyButton = pathsWithCopyAsMarkdownButton.some((prefix) => - router.pathname.startsWith(prefix) + (pathname ?? "").startsWith(prefix) ); return ( <> {(versionLabel || shouldShowCopyButton) && ( - <div className="flex items-center gap-2 flex-wrap mt-5"> - {versionLabel && ( - <span className="inline-flex items-center rounded-md bg-secondary px-2 py-1 text-xs font-medium text-secondary-foreground"> - {versionLabel} + <div className="flex flex-wrap gap-2 items-center mt-5"> + {versionLabel != null && ( + <span className="inline-flex items-center px-2 py-1 text-xs font-medium rounded-md bg-secondary text-secondary-foreground"> + {versionLabel as ReactNode} </span> )} - {shouldShowCopyButton && <CopyMarkdownButton key={router.pathname} />} + {shouldShowCopyButton && <CopyMarkdownButton key={pathname} />} </div> )} {cookbook ? ( - <NotebookBanner src={cookbook.ipynbPath} className="mb-4 mt-4" /> + <NotebookBanner src={cookbook.ipynbPath} className="mt-4 mb-4" /> ) : null} + {props.children} - {isCustomerStory(router.pathname) && <CustomerStoryCTA />} + {isCustomerStory(pathname ?? "") && <CustomerStoryCTA />} + <hr className="mx-4 my-4 border-t dark:border-neutral-800 md:mx-6 xl:mx-8" /> {!pathsWithoutFooterWidgets.some( (path) => - router.pathname === path || router.pathname.startsWith(path + "/") + pathname === path || (pathname ?? "").startsWith(path + "/") ) ? ( <div - className="flex flex-wrap items-center justify-between gap-6 pt-8 border-t dark:border-neutral-800" + className="flex flex-wrap gap-6 justify-between items-center px-4 py-6 pt-8 md:px-6 md:pt-8 xl:px-8 xl:pt-14" id="docs-feedback" > - <DocsFeedback key={router.pathname} /> + <DocsFeedback key={pathname} /> <DocsSupport /> </div> ) : null} - <Background /> </> ); }; export const DocsSupport = () => { return ( - <div className="flex items-center gap-3"> + <div className="flex gap-3 items-center"> <Button variant="outline" size="sm" asChild> <a href="/support"> <span>Support</span> - <LifeBuoy className="h-4 w-4 ml-2" /> + <LifeBuoy className="ml-2 w-4 h-4" /> </a> </Button> </div> @@ -367,7 +377,7 @@ export const DocsSupport = () => { }; export const DocsFeedback = () => { - const router = useRouter(); + const pathname = usePathname(); const [selected, setSelected] = useState< "positive" | "negative" | "submitted" | null >(null); @@ -388,7 +398,7 @@ export const DocsFeedback = () => { fetch("/api/feedback", { method: "POST", body: JSON.stringify({ - page: router.pathname, + page: pathname ?? "", feedback: newSelection, }), }) @@ -408,7 +418,7 @@ export const DocsFeedback = () => { fetch("/api/feedback", { method: "POST", body: JSON.stringify({ - page: router.pathname, + page: pathname ?? "", feedback: selected, comment: feedbackComment, }), @@ -426,7 +436,7 @@ export const DocsFeedback = () => { }; return ( - <div className="flex items-center gap-3"> + <div className="flex gap-3 items-center"> <span className="text-sm font-medium">Was this page helpful?</span> <div className="flex gap-2"> <Button @@ -435,7 +445,7 @@ export const DocsFeedback = () => { onClick={() => handleFeedbackSelection("positive")} disabled={submitting} > - <ThumbsUp className="h-4 w-4 text-green-600" /> + <ThumbsUp className="w-4 h-4 text-green-600" /> <span className="sr-only">Yes</span> </Button> <Button @@ -444,7 +454,7 @@ export const DocsFeedback = () => { onClick={() => handleFeedbackSelection("negative")} disabled={submitting} > - <ThumbsDown className="h-4 w-4 text-red-600" /> + <ThumbsDown className="w-4 h-4 text-red-600" /> <span className="sr-only">No</span> </Button> </div> @@ -463,8 +473,8 @@ export const DocsFeedback = () => { <DialogContent className="max-w-lg"> {selected === "submitted" ? ( // Thank you view - <div className="flex flex-col gap-4 text-center items-center py-4"> - <ThumbsUp className="h-12 w-12 text-green-500" /> + <div className="flex flex-col gap-4 items-center py-4 text-center"> + <ThumbsUp className="w-12 h-12 text-green-500" /> <h4 className="text-lg font-semibold"> Thank you for your feedback! </h4> @@ -487,9 +497,9 @@ export const DocsFeedback = () => { // Positive feedback follow-up <div className="flex flex-col gap-6"> <div className="flex gap-4 items-start"> - <ThumbsUp className="h-8 w-8 text-green-500 mt-1" /> + <ThumbsUp className="mt-1 w-8 h-8 text-green-500" /> <div> - <h4 className="text-lg font-semibold mb-2"> + <h4 className="mb-2 text-lg font-semibold"> What was most helpful? </h4> <p className="text-sm text-muted-foreground"> diff --git a/components/MdxDetails.tsx b/components/MdxDetails.tsx new file mode 100644 index 0000000000..97b22f0a2e --- /dev/null +++ b/components/MdxDetails.tsx @@ -0,0 +1,55 @@ +import React from "react"; +import { ChevronRight } from "lucide-react"; +import { cn } from "@/lib/utils"; + +/** + * Styled replacement for <details> used in MDX content. + * Replicates the accordion-style appearance that Nextra provided by default. + * Uses `group` so the chevron icon can rotate when the disclosure is open + * via the Tailwind `group-open:` variant. + */ +export function MdxDetails({ + children, + className, + ...props +}: React.DetailsHTMLAttributes<HTMLDetailsElement>) { + return ( + <details + className={cn( + "group my-3 rounded-lg border border-border overflow-hidden", + className + )} + {...props} + > + {children} + </details> + ); +} + +/** + * Styled replacement for <summary> used inside <details> in MDX content. + * Hides the native browser disclosure marker and adds a custom + * ChevronRight icon that rotates 90° when the parent <details> is open. + */ +export function MdxSummary({ + children, + className, + ...props +}: React.HTMLAttributes<HTMLElement>) { + return ( + <summary + className={cn( + // Hide the native disclosure triangle in all browsers + "list-none [&::-webkit-details-marker]:hidden", + "flex cursor-pointer select-none items-center justify-between", + "px-4 py-3 font-semibold text-sm", + "hover:bg-muted/50 transition-colors", + className + )} + {...props} + > + <span className="flex-1">{children}</span> + <ChevronRight className="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-90" /> + </summary> + ); +} diff --git a/components/MenuSwitcher.tsx b/components/MenuSwitcher.tsx index 7b20acf670..83ab4350f6 100644 --- a/components/MenuSwitcher.tsx +++ b/components/MenuSwitcher.tsx @@ -1,35 +1,37 @@ +"use client"; + import { Server, LibraryBig, BookOpen, FileCode, Unplug } from "lucide-react"; import Link from "next/link"; -import { useRouter } from "next/router"; -import React from "react"; +import { usePathname } from "next/navigation"; + +const SECTIONS = [ + { title: "Docs", path: "/docs", Icon: LibraryBig }, + { title: "Integrations", path: "/integrations", Icon: Unplug }, + { title: "Self Hosting", path: "/self-hosting", Icon: Server }, + { title: "Guides", path: "/guides", Icon: FileCode }, + { title: "AI Engineering Library", path: "/library", Icon: BookOpen }, +] as const; export const MenuSwitcher = () => { - const { asPath } = useRouter(); + const pathname = usePathname(); return ( - <div className="-mx-2 hidden md:block"> - {[ - { title: "Docs", path: "/docs", Icon: LibraryBig }, - { title: "Integrations", path: "/integrations", Icon: Unplug }, - { title: "Self Hosting", path: "/self-hosting", Icon: Server }, - { title: "Guides", path: "/guides", Icon: FileCode }, - { title: "AI Engineering Library", path: "/library", Icon: BookOpen }, - // { title: "FAQ", path: "/faq", Icon: CircleHelp }, - ].map((item) => - asPath.startsWith(item.path) ? ( + <div className="hidden my-2 md:block"> + {SECTIONS.map((item) => + pathname?.startsWith(item.path) ? ( <div key={item.path} - className="group mb-3 flex flex-row items-center gap-3 _text-primary-800 dark:_text-primary-600" + className="flex flex-row gap-3 items-center mb-3 group text-primary" > - <item.Icon className="w-7 h-7 p-1 border rounded _bg-primary-100 dark:_bg-primary-400/10" /> + <item.Icon className="p-1 w-7 h-7 rounded border bg-primary/10" /> {item.title} </div> ) : ( <Link href={item.path} key={item.path} - className="group mb-3 flex flex-row items-center gap-3 text-gray-500 hover:text-primary/100" + className="flex flex-row gap-3 items-center mb-3 group text-muted-foreground hover:text-foreground" > - <item.Icon className="w-7 h-7 p-1 border rounded group-hover:bg-border/30" /> + <item.Icon className="p-1 w-7 h-7 rounded border group-hover:bg-muted" /> {item.title} </Link> ) diff --git a/components/MetabaseDashboard.tsx b/components/MetabaseDashboard.tsx index 25ba97f36f..09aac5ba17 100644 --- a/components/MetabaseDashboard.tsx +++ b/components/MetabaseDashboard.tsx @@ -1,5 +1,7 @@ +"use client"; + import { useEffect, useState } from "react"; -import { useTheme } from "nextra-theme-docs"; +import { useTheme } from "next-themes"; import { cn } from "@/lib/utils"; import { Loader } from "./ai-elements/loader"; diff --git a/components/NavLinks.tsx b/components/NavLinks.tsx new file mode 100644 index 0000000000..5624a7eb70 --- /dev/null +++ b/components/NavLinks.tsx @@ -0,0 +1,312 @@ +"use client"; + +import Link from "next/link"; +import { ChevronDown, ChevronRight, Menu, X } from "lucide-react"; +import { useState } from "react"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { cn } from "@/lib/utils"; +import InkeepSearchBar from "@/components/inkeep/InkeepSearchBar"; +import type { NavTreeItem, SectionNavData } from "@/lib/nav-tree"; + +const productLinks = [ + { name: "Overview", href: "/docs" }, + { name: "LLM Observability", href: "/docs/observability/overview" }, + { name: "Prompt Management", href: "/docs/prompt-management/overview" }, + { name: "Evaluation", href: "/docs/evaluation/overview" }, + { name: "Metrics", href: "/docs/metrics/overview" }, +]; + +const resourcesLinks = [ + { name: "Blog", href: "/blog" }, + { name: "Changelog", href: "/changelog" }, + { name: "Roadmap", href: "/docs/roadmap" }, + { name: "Users", href: "/users" }, + { name: "Example Project", href: "/docs/demo" }, + { name: "Walkthroughs", href: "/guides" }, + { name: "Support", href: "/support" }, +]; + +const simpleLinks = [ + { name: "Docs", href: "/docs" }, + { name: "Changelog", href: "/changelog", tabletHidden: true }, + { name: "Pricing", href: "/pricing" }, +]; + +export function NavLinks({ + sectionNavData, +}: { + sectionNavData: SectionNavData[]; +}) { + const [mobileOpen, setMobileOpen] = useState(false); + const [mobileProductOpen, setMobileProductOpen] = useState(true); + const [mobileResourcesOpen, setMobileResourcesOpen] = useState(false); + const [openSections, setOpenSections] = useState<Record<string, boolean>>({}); + + const toggleSection = (href: string) => { + setOpenSections((prev) => ({ ...prev, [href]: !prev[href] })); + }; + + return ( + <> + {/* Desktop nav */} + <div className="hidden overflow-x-auto gap-2 lg:gap-4 items-center md:flex"> + <DropdownMenu> + <DropdownMenuTrigger className="flex items-center gap-1 py-1.5 text-sm whitespace-nowrap ring-inset text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200 hover:bg-transparent transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"> + Product + <ChevronDown className="h-3.5 w-3.5 opacity-60" /> + </DropdownMenuTrigger> + <DropdownMenuContent align="start"> + {productLinks.map((link) => ( + <DropdownMenuItem key={link.name} asChild> + <Link href={link.href}>{link.name}</Link> + </DropdownMenuItem> + ))} + </DropdownMenuContent> + </DropdownMenu> + + <DropdownMenu> + <DropdownMenuTrigger className="flex items-center gap-1 px3- py-1.5 text-sm font-medium whitespace-nowrap ring-inset text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200 hover:bg-transparent transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"> + Resources + <ChevronDown className="h-3.5 w-3.5 opacity-60" /> + </DropdownMenuTrigger> + <DropdownMenuContent align="start"> + {resourcesLinks.map((link) => ( + <DropdownMenuItem key={link.name} asChild> + <Link href={link.href}>{link.name}</Link> + </DropdownMenuItem> + ))} + </DropdownMenuContent> + </DropdownMenu> + + {simpleLinks.map((link) => ( + <Link + key={link.name} + href={link.href} + className={cn("py-1.5 text-sm font-normal whitespace-nowrap ring-inset text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring", link.tabletHidden && "hidden lg:block")} + > + {link.name} + </Link> + ))} + </div> + + {/* Mobile hamburger button */} + <button + className="md:hidden p-0.5 text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200" + onClick={() => setMobileOpen((v) => !v)} + aria-label="Toggle navigation menu" + > + {mobileOpen ? <X className="h-6 w-6" /> : <Menu className="h-6 w-6" />} + </button> + + {/* Mobile menu — backdrop-blur on header creates a CSS containing block, + so `top` is relative to the header itself. Use `4rem` (navbar height) + to sit flush at the navbar's bottom edge. */} + <div + className={`md:hidden fixed left-0 right-0 z-50 bg-background border-b shadow-lg transition-all duration-300 ease-out overflow-hidden ${mobileOpen + ? "opacity-100 translate-y-0" + : "opacity-0 -translate-y-2 max-h-0 pointer-events-none" + }`} + style={{ + top: "4rem", + maxHeight: mobileOpen + ? "calc(100vh - 4rem - var(--fd-banner-height, 0px))" + : undefined, + }} + aria-hidden={!mobileOpen} + > + <div + className="overflow-y-auto" + style={{ maxHeight: "calc(100vh - 4rem - var(--fd-banner-height, 0px))" }} + > + <div className="px-4 py-4 flex flex-col gap-1"> + {/* Search */} + <div className="mb-2"> + <InkeepSearchBar /> + </div> + + {/* Product */} + <button + type="button" + className="flex items-center justify-between px-2 py-2 text-sm font-medium text-gray-700 hover:bg-accent rounded-md dark:text-gray-200" + onClick={() => setMobileProductOpen((v) => !v)} + aria-expanded={mobileProductOpen} + > + <span>Product</span> + <ChevronDown + className={`h-4 w-4 transition-transform ${mobileProductOpen ? "rotate-180" : "rotate-0" + }`} + /> + </button> + {mobileProductOpen && ( + <div className="flex flex-col gap-1 pl-2"> + {productLinks.map((link) => ( + <Link + key={link.name} + href={link.href} + onClick={() => setMobileOpen(false)} + className="block px-2 py-2 text-sm text-gray-700 hover:bg-accent rounded-md dark:text-gray-300" + > + {link.name} + </Link> + ))} + </div> + )} + + {/* Resources */} + <button + type="button" + className="mt-1 flex items-center justify-between px-2 py-2 text-sm font-medium text-gray-700 hover:bg-accent rounded-md dark:text-gray-200" + onClick={() => setMobileResourcesOpen((v) => !v)} + aria-expanded={mobileResourcesOpen} + > + <span>Resources</span> + <ChevronDown + className={`h-4 w-4 transition-transform ${mobileResourcesOpen ? "rotate-180" : "rotate-0" + }`} + /> + </button> + {mobileResourcesOpen && ( + <div className="flex flex-col gap-1 pl-2"> + {resourcesLinks.map((link) => ( + <Link + key={link.name} + href={link.href} + onClick={() => setMobileOpen(false)} + className="block px-2 py-2 text-sm text-gray-700 hover:bg-accent rounded-md dark:text-gray-300" + > + {link.name} + </Link> + ))} + </div> + )} + + {/* All sections */} + <div className="border-t mt-3 pt-3 flex flex-col gap-1"> + {sectionNavData.map((section) => + section.children.length > 0 ? ( + <div key={section.href}> + <button + type="button" + className="flex w-full items-center justify-between px-2 py-2 text-sm font-medium text-gray-700 hover:bg-accent rounded-md dark:text-gray-200" + onClick={() => toggleSection(section.href)} + aria-expanded={!!openSections[section.href]} + > + <span>{section.name}</span> + <ChevronDown + className={cn( + "h-4 w-4 transition-transform", + openSections[section.href] + ? "rotate-180" + : "rotate-0" + )} + /> + </button> + {openSections[section.href] && ( + <div className="flex flex-col gap-0.5 pl-2"> + {section.children.map((item, i) => ( + <MobileNavTreeItem + key={`${item.type}-${item.url || item.name || i}`} + item={item} + onNavigate={() => setMobileOpen(false)} + /> + ))} + </div> + )} + </div> + ) : ( + <Link + key={section.href} + href={section.href} + onClick={() => setMobileOpen(false)} + className="flex items-center justify-between px-2 py-2 text-sm font-medium text-gray-700 hover:bg-accent rounded-md dark:text-gray-300" + > + <span>{section.name}</span> + <ChevronRight className="h-4 w-4 opacity-50" /> + </Link> + ) + )} + </div> + </div> + </div> + </div> + </> + ); +} + +function MobileNavTreeItem({ + item, + onNavigate, +}: { + item: NavTreeItem; + onNavigate: () => void; +}) { + if (item.type === "separator") { + if (!item.name) return null; + return ( + <div className="px-2 pt-3 pb-1 text-xs font-semibold text-muted-foreground uppercase tracking-wider"> + {item.name} + </div> + ); + } + + if (item.type === "folder" && item.children && item.children.length > 0) { + return <MobileNavFolder item={item} onNavigate={onNavigate} />; + } + + if (!item.url) return null; + + return ( + <Link + href={item.url} + onClick={onNavigate} + className="block px-2 py-1.5 text-sm text-gray-700 hover:bg-accent rounded-md dark:text-gray-300" + > + {item.name} + </Link> + ); +} + +function MobileNavFolder({ + item, + onNavigate, +}: { + item: NavTreeItem; + onNavigate: () => void; +}) { + const [open, setOpen] = useState(false); + + return ( + <div> + <button + type="button" + className="flex w-full items-center justify-between px-2 py-1.5 text-sm text-gray-700 hover:bg-accent rounded-md dark:text-gray-300" + onClick={() => setOpen((v) => !v)} + aria-expanded={open} + > + <span>{item.name}</span> + <ChevronDown + className={cn( + "h-3.5 w-3.5 opacity-60 transition-transform", + open ? "rotate-180" : "rotate-0" + )} + /> + </button> + {open && ( + <div className="flex flex-col gap-0.5 pl-3"> + {item.children!.map((child, i) => ( + <MobileNavTreeItem + key={`${child.type}-${child.url || child.name || i}`} + item={child} + onNavigate={onNavigate} + /> + ))} + </div> + )} + </div> + ); +} diff --git a/components/NavbarExtraContent.tsx b/components/NavbarExtraContent.tsx new file mode 100644 index 0000000000..b6980b289f --- /dev/null +++ b/components/NavbarExtraContent.tsx @@ -0,0 +1,37 @@ +import Link from "next/link"; +import { GithubMenuBadge } from "@/components/GitHubBadge"; +import { ToAppButton } from "@/components/ToAppButton"; +import { Button } from "@/components/ui/button"; + +/** Shared nav actions (X, GitHub, Get Demo, To App) used in Nextra theme.config and docs navbar */ +export function NavbarExtraContent() { + return ( + <> + <a + className="hidden p-1 lg:inline-block hover:opacity-80" + target="_blank" + href="https://x.com/langfuse" + aria-label="Langfuse X formerly known as Twitter" + rel="nofollow noreferrer" + > + <svg + aria-hidden + fill="currentColor" + width="24" + height="24" + viewBox="0 0 24 22" + > + <path d="M16.99 0H20.298L13.071 8.26L21.573 19.5H14.916L9.702 12.683L3.736 19.5H0.426L8.156 10.665L0 0H6.826L11.539 6.231L16.99 0ZM15.829 17.52H17.662L5.83 1.876H3.863L15.829 17.52Z" /> + </svg> + </a> + + <GithubMenuBadge /> + + <Button size="xs" asChild className="whitespace-nowrap" variant="outline"> + <Link href="/talk-to-us">Get Demo</Link> + </Button> + + <ToAppButton /> + </> + ); +} diff --git a/components/NavbarLogo.tsx b/components/NavbarLogo.tsx new file mode 100644 index 0000000000..0ac30198b2 --- /dev/null +++ b/components/NavbarLogo.tsx @@ -0,0 +1,13 @@ +import Link from "next/link"; +import { Logo } from "@/components/logo"; +import { HiringBadge } from "@/components/HiringBadge"; + +/** Shared logo + hiring badge used in Nextra theme.config and docs navbar. */ +export function NavbarLogo({ linkToHome = true }: { linkToHome?: boolean }) { + return ( + <div className="flex shrink-0 items-center gap-4"> + <Logo wrapInLink={linkToHome} /> + <HiringBadge /> + </div> + ); +} diff --git a/components/SectionDocBodyClientWithDocsBody.tsx b/components/SectionDocBodyClientWithDocsBody.tsx new file mode 100644 index 0000000000..2d00a8359a --- /dev/null +++ b/components/SectionDocBodyClientWithDocsBody.tsx @@ -0,0 +1,54 @@ +"use client"; + +import { use } from "react"; +import { DocsBody } from "fumadocs-ui/page"; +import { getMDXComponents } from "@/mdx-components"; +import { getSectionDocLoader } from "@/lib/section-loaders.generated"; +import { notFound } from "next/navigation"; + +type Props = { + collection: string; + slugPromise: Promise<{ slug?: string[] }>; +}; + +const loaderPromiseCache = new Map< + string, + ReturnType<NonNullable<ReturnType<typeof getSectionDocLoader>>> +>(); + +function getCachedLoaderPromise( + collection: string, + slug: string[], + loader: NonNullable<ReturnType<typeof getSectionDocLoader>> +) { + const key = `${collection}:${slug.length === 0 ? "" : slug.join("/")}`; + let p = loaderPromiseCache.get(key); + if (!p) { + p = loader(); + loaderPromiseCache.set(key, p); + } + return p; +} + +/** + * Renders section doc body in DocsBody (same as docs DocBodyClient). + * Use in app/integrations, app/self-hosting, app/guides, app/library. + */ +export function SectionDocBodyClientWithDocsBody({ + collection, + slugPromise, +}: Props) { + const params = use(slugPromise); + const slug = params.slug ?? []; + const loader = getSectionDocLoader(collection, slug); + if (!loader) notFound(); + + const mod = use(getCachedLoaderPromise(collection, slug, loader)); + const MDX = mod.default; + + return ( + <DocsBody> + <MDX components={getMDXComponents()} /> + </DocsBody> + ); +} diff --git a/components/ThemeToggle.tsx b/components/ThemeToggle.tsx new file mode 100644 index 0000000000..7d0fd37530 --- /dev/null +++ b/components/ThemeToggle.tsx @@ -0,0 +1,44 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { useTheme } from "next-themes"; +import { Moon, Sun } from "lucide-react"; +import { Button } from "@/components/ui/button"; + +export function ThemeToggle() { + const { resolvedTheme, setTheme } = useTheme(); + const [mounted, setMounted] = useState(false); + + useEffect(() => { + setMounted(true); + }, []); + + if (!mounted) { + return ( + <Button + variant="ghost" + size="icon" + className="h-8 w-8" + aria-label="Toggle theme" + disabled + > + <Sun className="h-4 w-4" /> + </Button> + ); + } + + const isDark = resolvedTheme === "dark"; + + return ( + <Button + variant="ghost" + size="icon" + className="h-8 w-8" + aria-label={isDark ? "Switch to light mode" : "Switch to dark mode"} + onClick={() => setTheme?.(isDark ? "light" : "dark")} + > + {isDark ? <Sun className="h-4 w-4" /> : <Moon className="h-4 w-4" />} + </Button> + ); +} + diff --git a/components/ToAppButton.tsx b/components/ToAppButton.tsx index 94f5367e91..f01a7dcaa6 100644 --- a/components/ToAppButton.tsx +++ b/components/ToAppButton.tsx @@ -1,3 +1,5 @@ +"use client"; + import Link from "next/link"; import { Button } from "./ui/button"; import { useState, useEffect } from "react"; diff --git a/components/TutorialCard.tsx b/components/TutorialCard.tsx index af6bb667c1..23afc0aa13 100644 --- a/components/TutorialCard.tsx +++ b/components/TutorialCard.tsx @@ -1,7 +1,6 @@ import React from "react"; import Link from "next/link"; import { Card, CardContent } from "@/components/ui/card"; -import { ArrowRight } from "lucide-react"; import { cn } from "@/lib/utils"; interface TutorialCardProps { @@ -20,23 +19,23 @@ export function TutorialCard({ className, }: TutorialCardProps) { return ( - <Link href={href} className="block h-full"> + <Link href={href} className="block h-full no-underline"> <Card className={cn( "h-full transition-all duration-200 border bg-transparent hover:bg-muted/40 hover:border-gray-300 dark:hover:border-gray-600 group", className )} > - <CardContent className="p-4 flex flex-col h-full"> - <div className="flex items-center gap-3 mb-4"> - <div className="text-muted-foreground flex items-center group-hover:text-primary transition-colors"> + <CardContent className="p-4 flex flex-col h-full gap-3"> + <div className="flex items-center gap-2"> + <div className="text-muted-foreground flex items-center justify-center shrink-0 w-5 h-5 group-hover:text-primary transition-colors [&>svg]:w-5 [&>svg]:h-5"> {icon} </div> - <h3 className="font-semibold text-lg leading-tight flex-1"> + <h3 className="font-semibold text-base leading-none no-underline !m-0 !p-0 !border-0"> {title} </h3> </div> - <p className="text-sm text-muted-foreground leading-relaxed"> + <p className="text-sm text-muted-foreground leading-relaxed no-underline"> {description} </p> </CardContent> diff --git a/components/Video.tsx b/components/Video.tsx index 2d8fb3f33a..cf43583dc8 100644 --- a/components/Video.tsx +++ b/components/Video.tsx @@ -1,3 +1,5 @@ +"use client"; + import { cn } from "@/lib/utils"; import { MediaPlayer, MediaProvider } from "@vidstack/react"; diff --git a/components/VideoIndex.tsx b/components/VideoIndex.tsx index b413f6591e..220a22764a 100644 --- a/components/VideoIndex.tsx +++ b/components/VideoIndex.tsx @@ -1,49 +1,48 @@ -import { getPagesUnderRoute } from "nextra/context"; -import { type Page } from "nextra"; -import { Cards } from "nextra/components"; -import { Video } from "lucide-react"; +import { getPagesUnderRoute } from "@/lib/nextra-shim/context"; +import { Video, ArrowRight } from "lucide-react"; import Image from "next/image"; +import Link from "next/link"; -export const VideoIndex = () => ( - <Cards num={3}> - {( - getPagesUnderRoute("/guides/videos") as Array<Page & { frontMatter: any }> - ) - .filter((page) => page.route !== "/guides/videos") - .map((page, i) => ( - <Cards.Card - href={page.route} - key={page.route} - title={ - page.frontMatter?.title || - page.name - .split("_") - .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) - .join(" ") - } - icon={<Video />} - arrow - > - {page.frontMatter.ogImage ? ( - <div className="relative aspect-video"> +export const VideoIndex = () => { + const pages = ( + getPagesUnderRoute("/guides/videos") as Array<{ route?: string; name?: string; frontMatter?: Record<string, any> }> + ).filter( + (page) => page.route !== "/guides/videos" && !!page.frontMatter?.ogImage + ); + + return ( + <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 not-prose my-4"> + {pages.map((page) => { + const title = + page.frontMatter?.title || + page.name + .split("_") + .map((word: string) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(" "); + + return ( + <Link + href={page.route} + key={page.route} + className="flex flex-col rounded-lg border overflow-hidden hover:border-primary transition-colors" + > + <div className="relative aspect-video w-full shrink-0"> <Image src={page.frontMatter.ogImage} - alt={ - page.frontMatter?.title || - page.name - .split("_") - .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) - .join(" ") - } - objectFit="cover" + alt={title} fill - sizes="(max-width: 560px) 100vw, (max-width: 1350px) 50vw, 33vw" + className="object-cover" + sizes="(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw" /> </div> - ) : ( - "" - )} - </Cards.Card> - ))} - </Cards> -); + <div className="flex items-start gap-2 p-4"> + <Video className="w-4 h-4 mt-0.5 shrink-0 text-muted-foreground" /> + <span className="flex-1 font-semibold text-sm leading-snug">{title}</span> + <ArrowRight className="w-4 h-4 mt-0.5 shrink-0 text-muted-foreground" /> + </div> + </Link> + ); + })} + </div> + ); +}; diff --git a/components/agentic-onboarding/CopyAgentOnboardingPrompt.tsx b/components/agentic-onboarding/CopyAgentOnboardingPrompt.tsx index 8aae24f58a..8d4cfca99e 100644 --- a/components/agentic-onboarding/CopyAgentOnboardingPrompt.tsx +++ b/components/agentic-onboarding/CopyAgentOnboardingPrompt.tsx @@ -1,3 +1,5 @@ +"use client"; + import { Button } from "../ui/button"; import { Copy } from "lucide-react"; import { useState } from "react"; @@ -83,20 +85,20 @@ export const CopyAgentOnboardingPrompt = () => { }; return ( - <div className="space-y-2 mt-3"> + <div className="mt-3 space-y-2"> <Button onClick={handleCopy} - className="flex items-center gap-2" + className="flex gap-2 items-center" variant={copied ? "secondary" : "default"} > - <Copy className="h-4 w-4" /> + <Copy className="w-4 h-4" /> {copied ? "Copied!" : "Copy Agent Prompt to Clipboard"} </Button> <details className="text-xs text-muted-foreground"> <summary className="cursor-pointer hover:text-foreground"> View prompt </summary> - <pre className="mt-2 whitespace-pre-wrap break-words bg-muted p-2 rounded text-xs"> + <pre className="p-2 mt-2 text-xs whitespace-pre-wrap break-words rounded bg-muted"> {agenticOnboardingPrompt} </pre> </details> diff --git a/components/analytics/PostHogProvider.tsx b/components/analytics/PostHogProvider.tsx new file mode 100644 index 0000000000..adb7eb4306 --- /dev/null +++ b/components/analytics/PostHogProvider.tsx @@ -0,0 +1,34 @@ +"use client"; + +import { useEffect } from "react"; +import { usePathname } from "next/navigation"; +import posthog from "posthog-js"; +import { PostHogProvider as PHProvider } from "posthog-js/react"; +import { hsPageView } from "@/components/analytics/hubspot"; + +export function PostHogProvider({ children }: { children: React.ReactNode }) { + const pathname = usePathname(); + + useEffect(() => { + if (typeof window !== "undefined") { + posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY ?? "", { + api_host: + process.env.NEXT_PUBLIC_POSTHOG_HOST || "https://eu.posthog.com", + ui_host: "https://eu.posthog.com", + persistence: "cookie", + loaded: (ph) => { + if (process.env.NODE_ENV === "development") ph.debug(); + }, + }); + } + }, []); + + useEffect(() => { + if (pathname) { + posthog.capture("$pageview"); + hsPageView(pathname); + } + }, [pathname]); + + return <PHProvider client={posthog}>{children}</PHProvider>; +} diff --git a/components/blog/BlogHeader.tsx b/components/blog/BlogHeader.tsx index b9c5d46f3e..8f722998cc 100644 --- a/components/blog/BlogHeader.tsx +++ b/components/blog/BlogHeader.tsx @@ -1,6 +1,5 @@ import Image from "next/image"; import { Authors, allAuthors } from "../Authors"; -import { useConfig } from "nextra-theme-docs"; export const BlogHeader = ({ authors, @@ -17,8 +16,6 @@ export const BlogHeader = ({ image?: string; customerLogo?: string; }) => { - const { frontMatter } = useConfig(); - return ( <div className="flex flex-col gap-1 items-center my-10 text-center"> {image && ( @@ -27,25 +24,25 @@ export const BlogHeader = ({ alt={title} width={1200} height={630} - className="rounded mb-14" + className="rounded mb-14 my-0" /> )} - <span className="text-primary/60">{date ?? frontMatter.date}</span> + <span className="text-primary/60">{date}</span> {customerLogo && ( - <div className="bg-white rounded-lg p-4 shadow-sm border my-4"> + <div className="not-prose bg-white rounded-lg p-4 shadow-sm border my-0"> <Image src={customerLogo} alt={`${title} logo`} - width={200} - height={80} - className="h-12 w-auto object-contain" + width={160} + height={40} + className="h-10 w-auto object-contain my-0" /> </div> )} - <h1 className="font-bold leading-snug text-balance text-foreground"> + <h1 className="mt-8 font-bold leading-snug text-balance text-foreground"> {title} </h1> - <p className="text-primary/60 text-xl text-balance">{description}</p> + <p className="mt-2 text-primary/60 text-xl text-balance">{description}</p> <Authors authors={authors} /> </div> ); diff --git a/components/blog/BlogIndex.tsx b/components/blog/BlogIndex.tsx index a0adfaf0d6..18cb60f3d1 100644 --- a/components/blog/BlogIndex.tsx +++ b/components/blog/BlogIndex.tsx @@ -1,43 +1,61 @@ -import { getPagesUnderRoute } from "nextra/context"; +"use client"; + import Link from "next/link"; import Image from "next/image"; -import { type Page } from "nextra"; import { useState, useEffect, useMemo } from "react"; -import { useRouter } from "next/router"; +import { useSearchParams, useRouter, usePathname } from "next/navigation"; import { Button } from "@/components/ui/button"; +export type BlogPageItem = { + route: string; + name?: string; + title?: string; + frontMatter?: { + title?: string; + description?: string; + date?: string; + tag?: string; + ogImage?: string; + author?: string; + showInBlogIndex?: boolean; + [key: string]: unknown; + }; +}; + export const BlogIndex = ({ maxItems, path = "/blog", + pages: initialPages, }: { maxItems?: number; path?: string; + pages?: BlogPageItem[]; }) => { + const searchParams = useSearchParams(); const router = useRouter(); + const pathname = usePathname(); const [selectedTag, setSelectedTag] = useState<string | null>(null); // Initialize selected tag from URL parameter useEffect(() => { - const tag = router.query.tag as string | undefined; + const tag = searchParams.get("tag") ?? undefined; setSelectedTag(tag || null); - }, [router.query.tag]); + }, [searchParams]); - const posts = useMemo( - () => - (getPagesUnderRoute(path) as Array<Page & { frontMatter: any }>) - .filter((page) => page.frontMatter?.showInBlogIndex !== false) - .sort( - (a, b) => - new Date(b.frontMatter.date).getTime() - - new Date(a.frontMatter.date).getTime() - ) - .slice(0, maxItems), - [maxItems] - ); + const posts = useMemo(() => { + const list = initialPages ?? []; + return list + .filter((page) => page.frontMatter?.showInBlogIndex !== false) + .sort( + (a, b) => + new Date((b.frontMatter?.date ?? "") as string).getTime() - + new Date((a.frontMatter?.date ?? "") as string).getTime() + ) + .slice(0, maxItems); + }, [initialPages, path, maxItems]); - // Function to normalize and split tags - const normalizeTags = (tagString?: string) => { - if (!tagString) return []; + const normalizeTags = (tagString?: string): string[] => { + if (tagString == null || typeof tagString !== "string") return []; return tagString .split(",") .map((tag) => tag.trim().toLowerCase()) @@ -55,75 +73,82 @@ export const BlogIndex = ({ [posts, selectedTag] ); - // Get unique tags + // Get unique tags, sorted alphabetically for consistent category row const tags = useMemo(() => { - const allTags = posts.flatMap((page) => - normalizeTags(page.frontMatter?.tag) + const allTags: string[] = posts.flatMap((page) => + normalizeTags(page.frontMatter?.tag as string) ); - return Array.from(new Set(allTags)); + return Array.from(new Set(allTags)).sort((a, b) => a.localeCompare(b)); }, [posts]); const handleTagClick = (tag: string) => { const newTag = selectedTag === tag ? null : tag; - setSelectedTag(newTag); + setSelectedTag(newTag ?? null); - // Update URL parameter - const query = { ...router.query }; + const params = new URLSearchParams(searchParams.toString()); if (newTag) { - query.tag = newTag; + params.set("tag", newTag); } else { - delete query.tag; + params.delete("tag"); } - router.push({ pathname: router.pathname, query }, undefined, { - shallow: true, - }); + const query = params.toString(); + router.replace(query ? `${pathname}?${query}` : pathname); }; return ( <div> - <div className="flex gap-2 flex-wrap mb-10 justify-center"> - {tags.map((tag) => ( + {tags.length > 0 ? ( + <div className="flex flex-wrap gap-2 justify-center mb-10 mt-2"> <Button - key={tag} - onClick={() => handleTagClick(tag)} - variant={ - selectedTag - ?.toLowerCase() - .split(",") - .map((t) => t.trim()) - .includes(tag) - ? "default" - : "secondary" - } + onClick={() => handleTagClick("")} + variant={selectedTag ? "secondary" : "default"} size="pill" > - {tag.charAt(0).toUpperCase() + tag.slice(1)} + All </Button> - ))} - </div> + {tags.map((tag) => ( + <Button + key={tag} + onClick={() => handleTagClick(tag)} + variant={ + selectedTag + ?.toLowerCase() + .split(",") + .map((t) => t.trim()) + .includes(tag) + ? "default" + : "secondary" + } + size="pill" + > + {tag.charAt(0).toUpperCase() + tag.slice(1)} + </Button> + ))} + </div> + ) : null} - <div className="grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-3 gap-7"> + <div className="grid grid-cols-1 gap-7 sm:grid-cols-2 xl:grid-cols-3"> {filteredPosts.map((page) => ( <Link key={page.route} href={page.route} className="block mb-8 group"> {page.frontMatter?.ogImage ? ( - <div className="mt-4 rounded relative aspect-video overflow-hidden"> + <div className="overflow-hidden relative mt-4 rounded aspect-video"> <Image src={page.frontMatter.ogImage} - className="object-cover transform group-hover:scale-105 transition-transform" + className="object-cover transition-transform transform group-hover:scale-105" alt={page.frontMatter?.title ?? "Blog post image"} fill={true} sizes="(min-width: 1024px) 33vw, 100vw" /> </div> ) : null} - <h2 className="block font-mono mt-8 text-2xl opacity-90 group-hover:opacity-100"> - {page.meta?.title || page.frontMatter?.title || page.name} + <h2 className="block mt-8 font-mono text-2xl opacity-90 group-hover:opacity-100"> + {page.frontMatter?.title || page.name} </h2> - <div className="opacity-80 mt-2 group-hover:opacity-100"> + <div className="mt-2 opacity-80 group-hover:opacity-100"> {page.frontMatter?.description} <span>Read more →</span> </div> - <div className="flex gap-2 flex-wrap mt-3 items-baseline"> - {normalizeTags(page.frontMatter?.tag).map((tag, index) => ( + <div className="flex flex-wrap gap-2 items-baseline mt-3"> + {normalizeTags(page.frontMatter?.tag as string).map((tag, index) => ( <Button key={index} onClick={(e) => { @@ -146,12 +171,12 @@ export const BlogIndex = ({ </Button> ))} {page.frontMatter?.date ? ( - <span className="opacity-60 text-sm group-hover:opacity-100"> + <span className="text-sm opacity-60 group-hover:opacity-100"> {page.frontMatter.date} </span> ) : null} {page.frontMatter?.author ? ( - <span className="opacity-60 text-sm group-hover:opacity-100"> + <span className="text-sm opacity-60 group-hover:opacity-100"> by {page.frontMatter.author} </span> ) : null} diff --git a/components/changelog/ChangelogHeader.tsx b/components/changelog/ChangelogHeader.tsx index 2b9da04fcd..ad07865476 100644 --- a/components/changelog/ChangelogHeader.tsx +++ b/components/changelog/ChangelogHeader.tsx @@ -1,20 +1,21 @@ +"use client"; + import Image from "next/image"; -import { useRouter } from "next/router"; -import { Page } from "nextra"; +import { usePathname } from "next/navigation"; import { getPagesUnderRoute } from "nextra/context"; import Link from "next/link"; import { Authors } from "../Authors"; import { Video } from "../Video"; -import { useConfig } from "nextra-theme-docs"; export const ChangelogHeader = () => { - const router = useRouter(); + const pathname = usePathname(); const changelogPages = getPagesUnderRoute("/changelog"); - const page = changelogPages.find( - (page) => page.route === router.pathname - ) as Page & { frontMatter: any }; + const page = changelogPages.find((p) => p.route === pathname) as { + route?: string; + frontMatter?: Record<string, any>; + } | undefined; - const { frontMatter } = useConfig(); + const frontMatter = page?.frontMatter ?? {}; const { title, description, @@ -75,8 +76,8 @@ export const ChangelogHeader = () => { height={630} className="rounded border" unoptimized={ - page.frontMatter.gif !== undefined || - page.frontMatter.ogImage?.endsWith(".gif") + frontMatter.gif !== undefined || + frontMatter.ogImage?.endsWith(".gif") } /> ) : null} diff --git a/components/changelog/ChangelogIndex.tsx b/components/changelog/ChangelogIndex.tsx index e4329ecafa..8f98451f23 100644 --- a/components/changelog/ChangelogIndex.tsx +++ b/components/changelog/ChangelogIndex.tsx @@ -1,9 +1,8 @@ -import { getPagesUnderRoute } from "nextra/context"; +"use client"; + import Link from "next/link"; -import Image from "next/image"; -import { type Page } from "nextra"; import { Video } from "../Video"; -import { useRouter } from "next/router"; +import { useSearchParams } from "next/navigation"; import { useState, useEffect } from "react"; import Head from "next/head"; import { @@ -15,28 +14,40 @@ import { PaginationNext, PaginationPrevious, } from "@/components/ui/pagination"; +import Image from "next/image"; + +export type ChangelogPageItem = { + route: string; + name?: string; + title?: string; + frontMatter?: { + date?: string; + title?: string; + description?: string; + badge?: React.ReactNode; + ogVideo?: string; + ogImage?: string; + gif?: string; + [key: string]: unknown; + }; +}; export const ChangelogIndex = ({ + pages: initialPages, itemsPerPage = 50, }: { + pages: ChangelogPageItem[]; itemsPerPage?: number; }) => { - const router = useRouter(); + const searchParams = useSearchParams(); const [currentPage, setCurrentPage] = useState(1); useEffect(() => { - const page = Number(router.query.page) || 1; + const page = Number(searchParams.get("page")) || 1; setCurrentPage(page); - }, [router.query.page]); - - const allPages = ( - getPagesUnderRoute("/changelog") as Array<Page & { frontMatter: any }> - ).sort( - (a, b) => - new Date(b.frontMatter.date).getTime() - - new Date(a.frontMatter.date).getTime() - ); + }, [searchParams]); + const allPages = initialPages; const totalPages = Math.ceil(allPages.length / itemsPerPage); const paginatedPages = allPages.slice( (currentPage - 1) * itemsPerPage, @@ -84,7 +95,7 @@ export const ChangelogIndex = ({ className="cursor-pointer select-none" /> </PaginationItem> - <div className="hidden sm:flex gap-1 items-center"> + <div className="hidden gap-1 items-center sm:flex"> {pageNumbers.map((pageNumber, index) => pageNumber === null ? ( <PaginationItem key={`ellipsis-${index}`}> @@ -118,24 +129,24 @@ export const ChangelogIndex = ({ return ( <> - <div className="mt-12 max-w-6xl mx-auto divide-y divide-primary/10 border-b border-primary/10"> + <div className="mx-auto mt-12 max-w-6xl border-b divide-y divide-primary/10 border-primary/10"> {paginatedPages.map((page, i) => ( <div - className="md:grid md:grid-cols-4 md:gap-5 py-16 transition-all" + className="py-16 transition-all md:grid md:grid-cols-4 md:gap-5" id={page.route.replace("/changelog/", "")} key={page.route.replace("/changelog/", "")} > - <div className="hidden md:flex opacity-80 text-lg group-hover:opacity-100 sticky top-24 self-start flex-col items-start gap-2"> + <div className="hidden sticky top-24 flex-col gap-2 items-start self-start text-lg opacity-80 md:flex group-hover:opacity-100"> {page.frontMatter?.date ? new Date(page.frontMatter.date).toLocaleDateString("en-US", { - year: "numeric", - month: "long", - day: "numeric", - timeZone: "UTC", - }) + year: "numeric", + month: "long", + day: "numeric", + timeZone: "UTC", + }) : null} {page.frontMatter?.badge && ( - <div className="hidden md:inline-block px-2 py-1 text-xs font-bold bg-primary/10 text-primary rounded-sm mb-5"> + <div className="hidden px-2 py-1 mb-5 text-xs font-bold rounded-sm md:inline-block bg-primary/10 text-primary"> {page.frontMatter.badge} </div> )} @@ -147,46 +158,47 @@ export const ChangelogIndex = ({ src={page.frontMatter.ogVideo} aspectRatio={16 / 9} gifStyle - className="mb-14 rounded relative overflow-hidden shadow-md group-hover:shadow-lg ring-0 border-0" + className="overflow-hidden relative mb-14 rounded border-0 ring-0 shadow-md group-hover:shadow-lg" /> ) : page.frontMatter?.ogImage ? ( - <div className="mb-14 rounded relative aspect-video overflow-hidden shadow-md group-hover:shadow-lg border"> + <div className="overflow-hidden relative mb-14 rounded border shadow-md aspect-video group-hover:shadow-lg"> <Image - src={page.frontMatter.gif ?? page.frontMatter.ogImage} + src={(page.frontMatter.gif ?? page.frontMatter.ogImage) as string} className="object-cover" - alt={page.frontMatter?.title ?? "Blog post image"} + alt={(page.frontMatter?.title ?? "Blog post image") as string} fill={true} sizes="(min-width: 1024px) 1000px, 100vw" priority={i < 3} unoptimized={ page.frontMatter.gif !== undefined || - page.frontMatter.ogImage?.endsWith(".gif") + (typeof page.frontMatter.ogImage === "string" && + page.frontMatter.ogImage.endsWith(".gif")) } /> </div> ) : null} - <div className="md:hidden opacity-80 text-sm mb-4 group-hover:opacity-100"> + <div className="mb-4 text-sm opacity-80 md:hidden group-hover:opacity-100"> {page.frontMatter?.date ? new Date(page.frontMatter.date).toLocaleDateString( - "en-US", - { - year: "numeric", - month: "long", - day: "numeric", - timeZone: "UTC", - } - ) + "en-US", + { + year: "numeric", + month: "long", + day: "numeric", + timeZone: "UTC", + } + ) : null} {page.frontMatter?.badge && ( - <div className="inline-block px-2 py-1 text-xs font-bold bg-primary/10 text-primary rounded-sm ml-3"> + <div className="inline-block px-2 py-1 ml-3 text-xs font-bold rounded-sm bg-primary/10 text-primary"> {page.frontMatter.badge} </div> )} </div> - <h2 className="block font-mono text-2xl md:text-3xl opacity-90 group-hover:opacity-100"> - {page.meta?.title || page.frontMatter?.title || page.name} + <h2 className="block font-mono text-2xl opacity-90 md:text-3xl group-hover:opacity-100"> + {page.frontMatter?.title || page.name} </h2> - <div className="opacity-80 mt-4 text-lg group-hover:opacity-100"> + <div className="mt-4 text-lg opacity-80 group-hover:opacity-100"> {page.frontMatter?.description} </div> </Link> diff --git a/components/customers/CustomerCarousel.tsx b/components/customers/CustomerCarousel.tsx index a2102e2c64..b7553aef74 100644 --- a/components/customers/CustomerCarousel.tsx +++ b/components/customers/CustomerCarousel.tsx @@ -1,7 +1,7 @@ -import { getPagesUnderRoute } from "nextra/context"; +"use client"; + import Link from "next/link"; import Image from "next/image"; -import { type Page } from "nextra"; import { useMemo, useState, useEffect } from "react"; import { Carousel, @@ -12,11 +12,11 @@ import { type CarouselApi, } from "@/components/ui/carousel"; -interface CustomerStory { +export interface CustomerStory { route: string; frontMatter: { - title: string; - description: string; + title?: string; + description?: string; customerLogo?: string; customerLogoDark?: string; customerQuote?: string; @@ -25,15 +25,16 @@ interface CustomerStory { quoteCompany?: string; quoteAuthorImage?: string; showInCustomerIndex?: boolean; + [key: string]: unknown; }; meta?: { title: string; }; - name: string; + name?: string; } interface CustomerCarouselProps { - path?: string; + stories: CustomerStory[]; title?: string; description?: string; showDots?: boolean; @@ -42,19 +43,19 @@ interface CustomerCarouselProps { } export const CustomerCarousel = ({ - path = "/customers", + stories: allStories, title, description, showDots = true, loop = false, className = "", }: CustomerCarouselProps) => { - // Memoize the original filtered stories to avoid repeated getPagesUnderRoute calls + // Filter stories where showInCustomerIndex is not explicitly false const originalStories = useMemo(() => { - return (getPagesUnderRoute(path) as Array<CustomerStory>).filter( + return allStories.filter( (page) => page.frontMatter?.showInCustomerIndex !== false ); - }, [path]); + }, [allStories]); const customerStories = useMemo(() => { // For infinite loop, duplicate items to ensure smooth looping @@ -130,12 +131,12 @@ export const CustomerCarousel = ({ <div className={`w-full ${className}`}> {/* Header */} {(title || description) && ( - <div className="text-center mb-8"> + <div className="mb-8 text-center"> {title && ( - <h2 className="text-3xl font-bold text-foreground mb-4">{title}</h2> + <h2 className="mb-4 text-3xl font-bold text-foreground">{title}</h2> )} {description && ( - <p className="text-gray-600 dark:text-gray-400 text-lg"> + <p className="text-lg text-gray-600 dark:text-gray-400"> {description} </p> )} @@ -143,7 +144,7 @@ export const CustomerCarousel = ({ )} {/* Carousel */} - <div className="w-full max-w-6xl mx-auto"> + <div className="mx-auto w-full max-w-6xl px-12"> <Carousel setApi={setApi} opts={{ @@ -161,17 +162,16 @@ export const CustomerCarousel = ({ > <Link href={story.route} - className={`group block bg-card border rounded-lg p-4 md:p-8 hover:border-gray-300 dark:hover:border-gray-600 transition-all duration-500 cursor-pointer flex flex-col h-full min-h-[250px] md:min-h-[300px] ${ - index === current - 1 + className={`no-underline group block bg-card border rounded-lg p-4 md:p-8 hover:border-gray-300 dark:hover:border-gray-600 transition-all duration-500 cursor-pointer flex flex-col h-full min-h-[250px] md:min-h-[300px] ${index === current - 1 ? "opacity-100" : isInView[index] - ? "opacity-20 md:opacity-50" - : "opacity-20" - }`} + ? "opacity-20 md:opacity-50" + : "opacity-20" + }`} > {/* Customer Logo */} {story.frontMatter.customerLogo && ( - <div className="flex items-center mb-8"> + <div className="flex items-center mb-4"> {story.frontMatter.customerLogoDark ? ( <> <Image @@ -179,7 +179,7 @@ export const CustomerCarousel = ({ alt={`${story.frontMatter.title} logo`} width={250} height={80} - className="h-8 w-auto object-contain dark:hidden" + className="object-contain w-auto h-8 dark:hidden" quality={100} priority={false} unoptimized={false} @@ -189,7 +189,7 @@ export const CustomerCarousel = ({ alt={`${story.frontMatter.title} logo`} width={250} height={80} - className="h-8 w-auto object-contain hidden dark:block" + className="hidden object-contain w-auto h-8 dark:block" quality={100} priority={false} unoptimized={false} @@ -201,7 +201,7 @@ export const CustomerCarousel = ({ alt={`${story.frontMatter.title} logo`} width={250} height={80} - className="h-8 w-auto object-contain dark:invert dark:brightness-0 dark:contrast-200" + className="object-contain w-auto h-8 dark:invert dark:brightness-0 dark:contrast-200" quality={100} priority={false} unoptimized={false} @@ -212,7 +212,7 @@ export const CustomerCarousel = ({ {/* Quote */} {story.frontMatter.customerQuote && ( - <blockquote className="text-gray-500 dark:text-gray-200 text-xl leading-relaxed mb-4"> + <blockquote className="text-xl leading-relaxed text-gray-500 dark:text-gray-200 not-italic !m-0 !mb-4 !border-0 !pl-0"> "{story.frontMatter.customerQuote}" </blockquote> )} @@ -224,63 +224,62 @@ export const CustomerCarousel = ({ {(story.frontMatter.quoteAuthor || story.frontMatter.quoteRole || story.frontMatter.quoteCompany) && ( - <div className="flex items-center justify-between text-sm text-gray-600 dark:text-gray-400"> - <div className="flex items-center gap-3"> - {/* Profile Picture */} - {story.frontMatter.quoteAuthorImage && ( - <div className="w-10 h-10 rounded-full overflow-hidden flex-shrink-0"> - <Image - src={story.frontMatter.quoteAuthorImage} - alt={`${story.frontMatter.quoteAuthor} profile picture`} - width={40} - height={40} - className="w-full h-full object-cover" - quality={100} - priority={false} - unoptimized={false} - /> - </div> - )} - <div> - {story.frontMatter.quoteAuthor && ( - <div className="font-semibold text-gray-900 dark:text-gray-100"> - {story.frontMatter.quoteAuthor} + <div className="flex justify-between items-center text-sm text-gray-600 dark:text-gray-400"> + <div className="flex gap-3 items-center"> + {/* Profile Picture */} + {story.frontMatter.quoteAuthorImage && ( + <div className="overflow-hidden flex-shrink-0 w-12 h-12 rounded-full border border-border"> + <Image + src={story.frontMatter.quoteAuthorImage} + alt={`${story.frontMatter.quoteAuthor} profile picture`} + width={48} + height={48} + className="object-cover w-full h-full !m-0" + quality={90} + unoptimized + /> </div> )} - {(story.frontMatter.quoteRole || - story.frontMatter.quoteCompany) && ( - <div> - {story.frontMatter.quoteRole && ( - <span>{story.frontMatter.quoteRole}</span> - )} - {story.frontMatter.quoteRole && - story.frontMatter.quoteCompany && ( - <span> at </span> - )} - {story.frontMatter.quoteCompany && ( - <span>{story.frontMatter.quoteCompany}</span> + <div> + {story.frontMatter.quoteAuthor && ( + <div className="font-semibold text-gray-900 dark:text-gray-100"> + {story.frontMatter.quoteAuthor} + </div> + )} + {(story.frontMatter.quoteRole || + story.frontMatter.quoteCompany) && ( + <div> + {story.frontMatter.quoteRole && ( + <span>{story.frontMatter.quoteRole}</span> + )} + {story.frontMatter.quoteRole && + story.frontMatter.quoteCompany && ( + <span> at </span> + )} + {story.frontMatter.quoteCompany && ( + <span>{story.frontMatter.quoteCompany}</span> + )} + </div> )} - </div> - )} + </div> + </div> + <div className="flex justify-center items-center w-6 h-6 bg-gray-100 rounded-full transition-colors min-w-6 dark:bg-gray-700 group-hover:bg-gray-200 dark:group-hover:bg-gray-600"> + <svg + className="w-3 h-3 text-gray-600 dark:text-gray-400" + fill="none" + stroke="currentColor" + viewBox="0 0 24 24" + > + <path + strokeLinecap="round" + strokeLinejoin="round" + strokeWidth={2} + d="M5 12h14M12 5l7 7-7 7" + /> + </svg> </div> </div> - <div className="w-6 h-6 min-w-6 rounded-full bg-gray-100 dark:bg-gray-700 flex items-center justify-center group-hover:bg-gray-200 dark:group-hover:bg-gray-600 transition-colors"> - <svg - className="w-3 h-3 text-gray-600 dark:text-gray-400" - fill="none" - stroke="currentColor" - viewBox="0 0 24 24" - > - <path - strokeLinecap="round" - strokeLinejoin="round" - strokeWidth={2} - d="M5 12h14M12 5l7 7-7 7" - /> - </svg> - </div> - </div> - )} + )} </Link> </CarouselItem> ))} @@ -304,11 +303,10 @@ export const CustomerCarousel = ({ api.scrollTo(targetIndex); } }} - className={`w-2 h-2 rounded-full transition-all duration-200 ${ - index === (current - 1) % originalStories.length + className={`w-2 h-2 rounded-full transition-all duration-200 ${index === (current - 1) % originalStories.length ? "bg-primary w-6" : "bg-gray-300 dark:bg-gray-600 hover:bg-gray-400 dark:hover:bg-gray-500" - }`} + }`} aria-label={`Go to customer story ${index + 1}`} /> ))} diff --git a/components/customers/CustomerCarouselWrapper.tsx b/components/customers/CustomerCarouselWrapper.tsx new file mode 100644 index 0000000000..eaeae2cc8e --- /dev/null +++ b/components/customers/CustomerCarouselWrapper.tsx @@ -0,0 +1,29 @@ +// Server component — no "use client". Fetches customer stories server-side +// and passes them as props to the client-side CustomerCarousel. +// Use this in MDX files instead of CustomerCarousel when you need path-based fetching. +import { getPagesForRoute } from "@/lib/source"; +import { CustomerCarousel, type CustomerStory } from "./CustomerCarousel"; + +interface CustomerCarouselWrapperProps { + path?: string; + showDots?: boolean; + loop?: boolean; + className?: string; +} + +export function CustomerCarouselWrapper({ + path = "/users", + showDots, + loop, + className, +}: CustomerCarouselWrapperProps) { + const stories = getPagesForRoute(path) as CustomerStory[]; + return ( + <CustomerCarousel + stories={stories} + showDots={showDots} + loop={loop} + className={className} + /> + ); +} diff --git a/components/customers/CustomerIndex.tsx b/components/customers/CustomerIndex.tsx index dd48f95fa9..e5a25972c2 100644 --- a/components/customers/CustomerIndex.tsx +++ b/components/customers/CustomerIndex.tsx @@ -1,72 +1,47 @@ -import { getPagesUnderRoute } from "nextra/context"; import Link from "next/link"; import Image from "next/image"; -import { type Page } from "nextra"; -import { useMemo } from "react"; - -interface CustomerStory { - route: string; - frontMatter: { - title: string; - description: string; - customerLogo?: string; - customerLogoDark?: string; - customerQuote?: string; - quoteAuthor?: string; - quoteRole?: string; - quoteCompany?: string; - showInCustomerIndex?: boolean; - }; - meta?: { - title: string; - }; - name: string; -} +import { type CustomerStory } from "./CustomerCarousel"; export const CustomerIndex = ({ + stories: allStories = [], maxItems, - path = "/customers", }: { + stories?: CustomerStory[]; maxItems?: number; - path?: string; }) => { - const customerStories = useMemo( - () => - (getPagesUnderRoute(path) as Array<CustomerStory>) - .filter((page) => page.frontMatter?.showInCustomerIndex !== false) - .slice(0, maxItems), - [maxItems, path] - ); + const customerStories = allStories + .filter((page) => page.frontMatter?.showInCustomerIndex !== false) + .slice(0, maxItems); return ( - <div className="grid grid-cols-1 md:grid-cols-2 gap-6"> + <div className="grid grid-cols-1 gap-6 md:grid-cols-2"> {customerStories.map((story) => ( - <Link - key={story.route} - href={story.route} - className="group block bg-card border rounded-lg p-8 break-inside-avoid hover:border-gray-300 dark:hover:border-gray-600 transition-all duration-200 cursor-pointer flex flex-col h-full" + <Link + key={story.route} + href={story.route} + className="no-underline flex flex-col p-8 h-full rounded-lg border transition-all duration-200 cursor-pointer group bg-card break-inside-avoid hover:border-gray-300 dark:hover:border-gray-600" > {/* Customer Logo */} {story.frontMatter.customerLogo && ( - <div className="flex items-center mb-8"> + <div className="flex items-center mb-4"> {story.frontMatter.customerLogoDark ? ( <> <Image - src={story.frontMatter.customerLogo} + src={story.frontMatter.customerLogo as string} alt={`${story.frontMatter.title} logo`} width={250} height={80} - className="h-8 w-auto object-contain dark:hidden" + className="object-contain w-auto h-8 dark:hidden !m-0" quality={100} priority={false} unoptimized={false} /> <Image - src={story.frontMatter.customerLogoDark} + src={story.frontMatter.customerLogoDark as string} alt={`${story.frontMatter.title} logo`} width={250} height={80} - className="h-8 w-auto object-contain hidden dark:block" + className="hidden object-contain w-auto h-8 dark:block !m-0" quality={100} priority={false} unoptimized={false} @@ -74,11 +49,11 @@ export const CustomerIndex = ({ </> ) : ( <Image - src={story.frontMatter.customerLogo} + src={story.frontMatter.customerLogo as string} alt={`${story.frontMatter.title} logo`} width={250} height={80} - className="h-8 w-auto object-contain dark:invert dark:brightness-0 dark:contrast-200" + className="object-contain w-auto h-8 dark:invert dark:brightness-0 dark:contrast-200 !m-0" quality={100} priority={false} unoptimized={false} @@ -89,8 +64,8 @@ export const CustomerIndex = ({ {/* Quote */} {story.frontMatter.customerQuote && ( - <blockquote className="text-gray-500 dark:text-gray-200 text-xl leading-relaxed mb-4"> - "{story.frontMatter.customerQuote}" + <blockquote className="text-xl leading-relaxed text-gray-500 dark:text-gray-200 !m-0 !mb-4 !border-0 !pl-0 not-italic"> + "{story.frontMatter.customerQuote as string}" </blockquote> )} @@ -99,46 +74,46 @@ export const CustomerIndex = ({ {/* Author Information */} {(story.frontMatter.quoteAuthor || story.frontMatter.quoteRole || story.frontMatter.quoteCompany) && ( - <div className="flex items-center justify-between text-sm text-gray-600 dark:text-gray-400"> + <div className="flex justify-between items-center text-sm text-gray-600 dark:text-gray-400"> <div> {story.frontMatter.quoteAuthor && ( <div className="font-semibold text-gray-900 dark:text-gray-100"> - {story.frontMatter.quoteAuthor} + {story.frontMatter.quoteAuthor as string} </div> )} {(story.frontMatter.quoteRole || story.frontMatter.quoteCompany) && ( <div> {story.frontMatter.quoteRole && ( - <span>{story.frontMatter.quoteRole}</span> + <span>{story.frontMatter.quoteRole as string}</span> )} {story.frontMatter.quoteRole && story.frontMatter.quoteCompany && ( <span> at </span> )} {story.frontMatter.quoteCompany && ( - <span>{story.frontMatter.quoteCompany}</span> + <span>{story.frontMatter.quoteCompany as string}</span> )} </div> )} </div> - <div className="w-6 h-6 min-w-6 rounded-full bg-gray-100 dark:bg-gray-700 flex items-center justify-center group-hover:bg-gray-200 dark:group-hover:bg-gray-600 transition-colors"> - <svg - className="w-3 h-3 text-gray-600 dark:text-gray-400" - fill="none" - stroke="currentColor" - viewBox="0 0 24 24" - > - <path - strokeLinecap="round" - strokeLinejoin="round" - strokeWidth={2} - d="M5 12h14M12 5l7 7-7 7" - /> - </svg> - </div> + <div className="flex justify-center items-center w-6 h-6 bg-gray-100 rounded-full transition-colors min-w-6 dark:bg-gray-700 group-hover:bg-gray-200 dark:group-hover:bg-gray-600"> + <svg + className="w-3 h-3 text-gray-600 dark:text-gray-400" + fill="none" + stroke="currentColor" + viewBox="0 0 24 24" + > + <path + strokeLinecap="round" + strokeLinejoin="round" + strokeWidth={2} + d="M5 12h14M12 5l7 7-7 7" + /> + </svg> + </div> </div> )} </Link> ))} </div> ); -}; \ No newline at end of file +}; diff --git a/components/customers/CustomerIndexWrapper.tsx b/components/customers/CustomerIndexWrapper.tsx new file mode 100644 index 0000000000..647a6381bc --- /dev/null +++ b/components/customers/CustomerIndexWrapper.tsx @@ -0,0 +1,19 @@ +// Server component — no "use client". Fetches customer stories server-side +// and passes them as props to the client-side CustomerIndex. +// Use this in MDX files instead of CustomerIndex when you need path-based fetching. +import { getPagesForRoute } from "@/lib/source"; +import { CustomerIndex } from "./CustomerIndex"; +import { type CustomerStory } from "./CustomerCarousel"; + +interface CustomerIndexWrapperProps { + path?: string; + maxItems?: number; +} + +export function CustomerIndexWrapper({ + path = "/users", + maxItems, +}: CustomerIndexWrapperProps) { + const stories = getPagesForRoute(path) as CustomerStory[]; + return <CustomerIndex stories={stories} maxItems={maxItems} />; +} diff --git a/components/customers/CustomerQuote.tsx b/components/customers/CustomerQuote.tsx index 97b95a9a2a..e196911d6a 100644 --- a/components/customers/CustomerQuote.tsx +++ b/components/customers/CustomerQuote.tsx @@ -70,7 +70,7 @@ export const CustomerQuote = ({ return ( <div ref={ref} className={`my-24 ${className}`}> - <blockquote className="text-2xl font-normal leading-relaxed mb-4 relative"> + <blockquote className="text-2xl font-normal leading-relaxed mb-4 relative border-none pl-0"> {/* Hidden text to maintain layout height */} <span className="invisible" aria-hidden="true"> <span className={openingQuoteStyle}>"</span>{quote}<span className={quoteMarkStyle}>"</span> diff --git a/components/customers/CustomerStoryCTA.tsx b/components/customers/CustomerStoryCTA.tsx index cbaa772d1e..d8c1e16416 100644 --- a/components/customers/CustomerStoryCTA.tsx +++ b/components/customers/CustomerStoryCTA.tsx @@ -27,7 +27,7 @@ export const CustomerStoryCTA = () => { </div> <div className="mt-4"> <span className="text-sm text-muted-foreground">or </span> - <Link href="/talk-to-us" className="text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300 underline"> + <Link href="/talk-to-us" className="text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300 no-underline"> Talk to an expert </Link> </div> diff --git a/components/customers/ImpactChart.tsx b/components/customers/ImpactChart.tsx index 6d23408322..32947477c0 100644 --- a/components/customers/ImpactChart.tsx +++ b/components/customers/ImpactChart.tsx @@ -15,15 +15,15 @@ export const ImpactChart = ({ items }: ImpactChartProps) => { <div className="space-y-4"> {items.map((item, index) => ( <div key={index}> - <div className="flex"> - <div className="flex-shrink-0 mr-4"> + <div className="flex items-baseline"> + <div className="flex-shrink-0 w-10"> <span className="font-mono text-sm text-muted-foreground"> {String(index + 1).padStart(2, "0")} </span> </div> <div className="flex-1 grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="md:col-span-1"> - <h3 className="font-semibold text-foreground">{item.area}</h3> + <h3 className="font-semibold text-foreground my-0">{item.area}</h3> </div> <div className="md:col-span-1"> <p className="leading-relaxed">{item.impact}</p> diff --git a/components/docs/DocsNavbar.tsx b/components/docs/DocsNavbar.tsx new file mode 100644 index 0000000000..f37ad544df --- /dev/null +++ b/components/docs/DocsNavbar.tsx @@ -0,0 +1,39 @@ +"use client"; + +import { SidebarTrigger } from "fumadocs-ui/components/sidebar/base"; +import { NavbarLogo } from "@/components/NavbarLogo"; +import { NavbarExtraContent } from "@/components/NavbarExtraContent"; +import InkeepSearchBar from "@/components/inkeep/InkeepSearchBar"; +import { MenuIcon } from "lucide-react"; +import { cn } from "@/lib/utils"; + +/** Docs navbar: same logo + nav actions as Nextra (theme.config), plus sidebar toggle and search for Fumadocs. */ +export function DocsNavbar() { + return ( + <header + className="sticky top-0 z-50 h-16 border-b border-foreground/10 bg-background/50 backdrop-blur-md" + > + <nav className="container flex h-full flex-row items-center gap-4"> + <SidebarTrigger + aria-label="Toggle Sidebar" + className={cn( + "size-9 shrink-0 md:hidden", + "inline-flex items-center justify-center rounded-md hover:bg-accent hover:text-accent-foreground" + )} + > + <MenuIcon className="size-5" /> + </SidebarTrigger> + + <NavbarLogo /> + + <div className="flex flex-1 items-center justify-end gap-2 md:gap-4"> + <div className="hidden min-w-0 max-w-[240px] flex-1 md:block lg:max-w-[280px]"> + <InkeepSearchBar /> + </div> + + <NavbarExtraContent /> + </div> + </nav> + </header> + ); +} diff --git a/components/faq/FaqIndex.tsx b/components/faq/FaqIndex.tsx index 31d4f9faa8..a9cd44d1e9 100644 --- a/components/faq/FaqIndex.tsx +++ b/components/faq/FaqIndex.tsx @@ -22,7 +22,7 @@ export const formatTag = (tag: string) => export const FaqIndex = () => { const pages = getPagesUnderRoute("/faq/all") as Array< - Page & { frontMatter: any } + Page & { frontMatter: any; meta?: { title?: string } } >; const categorizedPages = pages .filter((page) => page.route !== "/faq/all") @@ -33,7 +33,7 @@ export const FaqIndex = () => { acc[tag].push(page); }); return acc; - }, {} as Record<string, Array<Page & { frontMatter: any }>>); + }, {} as Record<string, Array<Page & { frontMatter: any; meta?: { title?: string } }>>); return ( <> diff --git a/components/faq/FaqPreview.tsx b/components/faq/FaqPreview.tsx index 54355f2771..6ef7b7bf94 100644 --- a/components/faq/FaqPreview.tsx +++ b/components/faq/FaqPreview.tsx @@ -5,11 +5,11 @@ import { MessageCircleQuestion } from "lucide-react"; import Link from "next/link"; export const getFaqPages = () => { - return getPagesUnderRoute("/faq/all") as Array<Page & { frontMatter: any }>; + return getPagesUnderRoute("/faq/all") as Array<Page & { frontMatter: any; meta?: { title?: string } }>; }; export const getFilteredFaqPages = ( - faqPages: Array<Page & { frontMatter: any }>, + faqPages: Array<Page & { frontMatter: any; meta?: { title?: string } }>, tags: string[], limit: number | undefined = undefined ) => { @@ -42,7 +42,7 @@ export const FaqList = ({ pages, renderAsCards = false, }: { - pages: Array<Page & { frontMatter: any }>; + pages: Array<Page & { frontMatter: any; meta?: { title?: string } }>; renderAsCards?: boolean; }) => { if (renderAsCards) { diff --git a/components/gh-discussions/GhDiscussionsPreview.tsx b/components/gh-discussions/GhDiscussionsPreview.tsx index 3c9599965a..3dc014caa9 100644 --- a/components/gh-discussions/GhDiscussionsPreview.tsx +++ b/components/gh-discussions/GhDiscussionsPreview.tsx @@ -1,3 +1,5 @@ +"use client"; + import dynamic from "next/dynamic"; export const GhDiscussionsPreview = dynamic( diff --git a/components/gh-discussions/GhDiscussionsPreviewInternal.tsx b/components/gh-discussions/GhDiscussionsPreviewInternal.tsx index 273d1512f8..b85e030a99 100644 --- a/components/gh-discussions/GhDiscussionsPreviewInternal.tsx +++ b/components/gh-discussions/GhDiscussionsPreviewInternal.tsx @@ -270,7 +270,7 @@ const GhDiscussionsPreviewInternal = ({ {!filterCategory && ( <TabsList> {categories.map((category) => ( - <TabsTrigger value={category}> + <TabsTrigger key={category} value={category}> <IconGithub className="mr-1" /> {category} </TabsTrigger> diff --git a/components/handbook/ChapterIndex.tsx b/components/handbook/ChapterIndex.tsx index 2d037ee6d7..c5fd2fcccf 100644 --- a/components/handbook/ChapterIndex.tsx +++ b/components/handbook/ChapterIndex.tsx @@ -1,11 +1,10 @@ import { getPagesUnderRoute } from "nextra/context"; import { type Page } from "nextra"; -import { Cards } from "nextra/components"; -import { CHAPTER_ORDER } from "@/pages/handbook/chapters/_meta"; +import { CHAPTER_ORDER } from "@/lib/handbook-meta"; export const ChapterIndex = () => { const pages = getPagesUnderRoute("/handbook/chapters") as Array< - Page & { frontMatter: any } + Page & { frontMatter: any; meta?: { title?: string } } >; // Filter out the _meta.tsx file and sort pages @@ -38,22 +37,21 @@ export const ChapterIndex = () => { }); return ( - <div className="my-6"> - <Cards num={1}> - {chapterPages.map((page, index) => ( - <Cards.Card - href={page.route} - key={page.route} - title={page.meta?.title || page.frontMatter?.title || page.name} - icon={ - <span className="text-base font-medium font-mono"> - {index + 1} - </span> - } - arrow - /> - ))} - </Cards> + <div className="my-6 flex flex-col gap-2 not-prose"> + {chapterPages.map((page, index) => ( + <a + key={page.route} + href={page.route} + className="flex items-center gap-3 rounded-lg border p-4 hover:border-primary" + > + <span className="text-base font-medium font-mono shrink-0 text-muted-foreground"> + {index + 1} + </span> + <span className="font-semibold"> + {page.meta?.title || page.frontMatter?.title || page.name} + </span> + </a> + ))} </div> ); }; diff --git a/components/handbook/TeamsIndex.tsx b/components/handbook/TeamsIndex.tsx index 24ce1a5b40..a3128d36fd 100644 --- a/components/handbook/TeamsIndex.tsx +++ b/components/handbook/TeamsIndex.tsx @@ -1,6 +1,6 @@ import { Cards } from "nextra/components"; import { Users } from "lucide-react"; -import { TEAMS } from "@/pages/handbook/_meta"; +import { TEAMS } from "@/lib/handbook-meta"; export const TeamsIndex = () => { return ( diff --git a/components/home/Changelog.tsx b/components/home/Changelog.tsx index 14942a883a..72161fd8b1 100644 --- a/components/home/Changelog.tsx +++ b/components/home/Changelog.tsx @@ -1,13 +1,12 @@ import { cn } from "@/lib/utils"; import Link from "next/link"; -import { Page } from "nextra"; -import { getPagesUnderRoute } from "nextra/context"; - -const changelogItems = getPagesUnderRoute("/changelog") as Array< - Page & { frontMatter: any } ->; +import { getPagesForRoute } from "@/lib/source"; export default function Changelog({ className }: { className?: string }) { + const changelogItems = getPagesForRoute("/changelog") as Array<{ + route: string; + frontMatter: { title?: string; date?: string; author?: string }; + }>; const changelog = changelogItems .filter( (page) => page.route && page.frontMatter.title && page.frontMatter.date diff --git a/components/home/CustomerStories.tsx b/components/home/CustomerStories.tsx index 6ae5aaa9ef..28f3b73566 100644 --- a/components/home/CustomerStories.tsx +++ b/components/home/CustomerStories.tsx @@ -1,8 +1,11 @@ import { HomeSection } from "./components/HomeSection"; import { Header } from "../Header"; import { CustomerCarousel } from "../customers/CustomerCarousel"; +import { getPagesForRoute } from "@/lib/source"; export default function CustomerStories() { + const stories = getPagesForRoute("/users"); + return ( <HomeSection> <Header @@ -17,7 +20,11 @@ export default function CustomerStories() { }, ]} /> - <CustomerCarousel path="/users" showDots={true} loop={true} /> + <CustomerCarousel + stories={stories as any} + showDots={true} + loop={true} + /> </HomeSection> ); } diff --git a/components/home/FeatureTabsSection.tsx b/components/home/FeatureTabsSection.tsx index 22b4749ba9..f0c3fab721 100644 --- a/components/home/FeatureTabsSection.tsx +++ b/components/home/FeatureTabsSection.tsx @@ -1,10 +1,14 @@ +import { Suspense } from "react"; import { HomeSection } from "./components/HomeSection"; import { FeatureTabs, featureTabsData } from "./feature-tabs"; export function FeatureTabsSection() { return ( <HomeSection id="features" className="pt-8 lg:pt-4 2xl:pt-10"> - <FeatureTabs features={featureTabsData} /> + {/* Suspense required because FeatureTabs uses useSearchParams() */} + <Suspense> + <FeatureTabs features={featureTabsData} /> + </Suspense> </HomeSection> ); } diff --git a/components/home/FromTheBlog.tsx b/components/home/FromTheBlog.tsx index dad4a3693f..e73d4f9e9d 100644 --- a/components/home/FromTheBlog.tsx +++ b/components/home/FromTheBlog.tsx @@ -1,3 +1,4 @@ +import { Suspense } from "react"; import { BlogIndex } from "../blog/BlogIndex"; import { HomeSection } from "./components/HomeSection"; import { Header } from "../Header"; @@ -8,6 +9,9 @@ export const FromTheBlog = () => ( title="Blog" description="The latest updates and releases from Langfuse" /> - <BlogIndex maxItems={3} /> + {/* Suspense required because BlogIndex uses useSearchParams() */} + <Suspense> + <BlogIndex maxItems={3} /> + </Suspense> </HomeSection> ); diff --git a/components/home/OpenSource.tsx b/components/home/OpenSource.tsx index c8e254302e..34112f9bf8 100644 --- a/components/home/OpenSource.tsx +++ b/components/home/OpenSource.tsx @@ -63,17 +63,16 @@ function ScrollingDiscussions({ return ( <div className="absolute inset-0 overflow-hidden opacity-50 pointer-events-none"> <div - className="animate-marquee-vertical space-y-0" + className="space-y-0" style={ { - "--duration": speed, "--gap": "0px", - animationDirection: "reverse", + animation: `marquee-vertical ${speed} linear infinite reverse`, } as React.CSSProperties } > {/* Duplicate discussions to create seamless loop */} - {[...discussions].map((discussion, index) => ( + {[...discussions, ...discussions].map((discussion, index) => ( <DiscussionItem key={`${discussion.number}-${index}`} discussion={discussion} diff --git a/components/home/TestimonialsGrid.tsx b/components/home/TestimonialsGrid.tsx index 3b3a5ac8c1..134a411556 100644 --- a/components/home/TestimonialsGrid.tsx +++ b/components/home/TestimonialsGrid.tsx @@ -1,3 +1,5 @@ +"use client"; + import Image from "next/image"; import { useState, useMemo, useEffect } from "react"; import { testimonials } from "../../data/testimonials"; @@ -26,44 +28,37 @@ const CARDS_CONFIG = { ALL: 15 } as const; -// Helper function to render content with @langfuse links for X.com posts -const renderContent = (content: string, platform: string, postURL?: string) => { +// Helper to render content; card is already a link so we use span for @langfuse to avoid nested <a> +const renderContent = (content: string, platform: string) => { if (platform === "xcom" && content.includes("@langfuse")) { const parts = content.split("@langfuse"); const elements = []; - for (let i = 0; i < parts.length; i++) { elements.push(parts[i]); if (i < parts.length - 1) { elements.push( - <a + <span key={i} - href={postURL || "#"} - target="_blank" - rel="noopener noreferrer" className="text-blue-500 hover:text-blue-600 hover:underline" - onClick={(e) => e.stopPropagation()} > @langfuse - </a> + </span> ); } } - return elements; } - return content; }; export const TestimonialsGrid = () => { const [cardsPerColumn, setCardsPerColumn] = useState(CARDS_CONFIG.INITIAL); const [isClient, setIsClient] = useState(false); - + useEffect(() => { setIsClient(true); }, []); - + const columns = useMemo(() => { const cols = [[], [], []]; testimonials.forEach((testimonial, index) => { @@ -90,68 +85,68 @@ export const TestimonialsGrid = () => { }; if (!isClient) { - return <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4" />; + return <div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3" />; } return ( <> {/* Testimonials Grid */} - <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"> + <div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"> {columns.map((column, columnIndex) => ( <div key={columnIndex} className="flex flex-col gap-4"> {column.slice(0, cardsPerColumn).map((testimonial) => ( - <a - key={testimonial.id} - href={testimonial.postURL} - target="_blank" - rel="noopener noreferrer" - className="block bg-card border rounded-lg p-6 break-inside-avoid hover:border-gray-300 dark:hover:border-gray-600 transition-all duration-200 cursor-pointer" - > - {/* Profile Header */} - <div className="flex items-start gap-3 mb-4"> - {testimonial.avatar && ( - <div className="relative"> - <Image - src={testimonial.avatar} - alt="" - width={40} - height={40} - className="rounded-full" - /> - <div className="absolute -bottom-1 -right-1 bg-white rounded-full shadow-sm border"> - {PLATFORMS[testimonial.platform].logo.startsWith('/') ? ( - <Image - src={PLATFORMS[testimonial.platform].logo} - alt={testimonial.platform} - width={12} - height={12} - className="object-contain" - /> - ) : ( - <span className={`text-xs ${PLATFORMS[testimonial.platform].color}`}> - {PLATFORMS[testimonial.platform].name} - </span> - )} + <a + key={testimonial.id} + href={testimonial.postURL} + target="_blank" + rel="noopener noreferrer" + className="no-underline block p-6 rounded-lg border transition-all duration-200 cursor-pointer bg-card break-inside-avoid hover:border-gray-300 dark:hover:border-gray-600" + > + {/* Profile Header */} + <div className="flex gap-3 items-start mb-4"> + {testimonial.avatar && ( + <div className="relative"> + <Image + src={testimonial.avatar} + alt="" + width={40} + height={40} + className="rounded-full" + /> + <div className="absolute -right-1 -bottom-1 w-5 h-5 bg-white dark:bg-card rounded-full border border-border shadow-sm flex items-center justify-center overflow-hidden"> + {PLATFORMS[testimonial.platform].logo.startsWith('/') ? ( + <Image + src={PLATFORMS[testimonial.platform].logo} + alt={testimonial.platform} + width={14} + height={14} + className="object-contain" + /> + ) : ( + <span className={`text-[9px] leading-none ${PLATFORMS[testimonial.platform].color}`}> + {PLATFORMS[testimonial.platform].name[0]} + </span> + )} + </div> </div> + )} + <div className="flex-1 min-w-0"> + <div className="flex gap-2 items-center"> + <h4 className="text-sm font-medium truncate text-foreground"> + {testimonial.name} + </h4> + </div> + <p className="text-xs text-muted-foreground"> + {testimonial.handle} + </p> </div> - )} - <div className="flex-1 min-w-0"> - <div className="flex items-center gap-2"> - <h4 className="font-medium text-foreground text-sm truncate"> - {testimonial.name} - </h4> - </div> - <p className="text-xs text-muted-foreground"> - {testimonial.handle} - </p> </div> - </div> - {/* Content */} - <div className="text-sm text-foreground leading-relaxed"> - {renderContent(testimonial.content, testimonial.platform, testimonial.postURL)} - </div> - </a> + {/* Content */} + <div className="text-sm leading-relaxed text-foreground"> + {renderContent(testimonial.content, testimonial.platform)} + </div> + </a> ))} </div> ))} @@ -162,7 +157,7 @@ export const TestimonialsGrid = () => { <div className="flex justify-center mt-8"> <button onClick={handleShowMore} - className="text-sm text-muted-foreground hover:text-foreground transition-colors underline" + className="text-sm underline transition-colors text-muted-foreground hover:text-foreground" > {getButtonText()} </button> diff --git a/components/home/feature-tabs/FeatureTabs.tsx b/components/home/feature-tabs/FeatureTabs.tsx index 448a164a9b..7bf670741c 100644 --- a/components/home/feature-tabs/FeatureTabs.tsx +++ b/components/home/feature-tabs/FeatureTabs.tsx @@ -8,8 +8,8 @@ import { useCallback, useReducer, } from "react"; -import { useRouter } from "next/router"; import Image from "next/image"; +import { useRouter, usePathname, useSearchParams } from "next/navigation"; import { TabButton } from "./TabButton"; import { TabContent } from "./TabContent"; import type { AutoAdvanceConfig, FeatureTabData } from "./types"; @@ -90,16 +90,18 @@ export const FeatureTabs = ({ }; const router = useRouter(); + const pathname = usePathname(); + const searchParams = useSearchParams(); const [state, dispatch] = useReducer(tabStateReducer, initialTabState); // Memoize activeTab computation to prevent unnecessary re-renders const activeTab = useMemo(() => { - const tab = router.query.tab as string; + const tab = searchParams.get("tab"); if (tab && features.some((f) => f.id === tab)) { return tab; } return defaultTab; - }, [router.query.tab, features, defaultTab]); + }, [searchParams, features, defaultTab]); const tabListRef = useRef<HTMLDivElement>(null); const tabListScrollRef = useRef<HTMLDivElement>(null); @@ -130,7 +132,7 @@ export const FeatureTabs = ({ root: null, rootMargin: "50px", threshold: [0, 0.1, 0.25, 0.5], - } + }, ); observer.observe(element); @@ -148,13 +150,10 @@ export const FeatureTabs = ({ dispatch({ type: "PAUSE_AUTO_ADVANCE" }); clearAutoAdvanceTimer(); - // Update URL query param - const query = { ...router.query }; - query.tab = tabId; - - router.replace({ pathname: router.pathname, query }, undefined, { - shallow: true, - }); + // Update URL query param (App Router) + const params = new URLSearchParams(searchParams.toString()); + params.set("tab", tabId); + router.replace(`${pathname}?${params.toString()}`, { scroll: false }); }; // Keyboard navigation @@ -258,13 +257,10 @@ export const FeatureTabs = ({ setTimeout(() => { dispatch({ type: "RESET_PROGRESS" }); - // Update URL query param - const query = { ...router.query }; - query.tab = nextTab.id; - - router.replace({ pathname: router.pathname, query }, undefined, { - shallow: true, - }); + // Update URL query param (App Router) + const params = new URLSearchParams(searchParams.toString()); + params.set("tab", nextTab.id); + router.replace(`${pathname}?${params.toString()}`, { scroll: false }); // Allow fade in setTimeout(() => { @@ -277,6 +273,8 @@ export const FeatureTabs = ({ defaultAutoAdvance?.enabled, state.isAutoAdvancePaused, router, + pathname, + searchParams, ]); // Simplified auto-advance with single timer and optimized progress updates diff --git a/components/home/index.tsx b/components/home/index.tsx index bc41fb8170..0b677dd764 100644 --- a/components/home/index.tsx +++ b/components/home/index.tsx @@ -1,7 +1,6 @@ -import dynamic from "next/dynamic"; +"use client"; -// Non-dynamic imports for everyhting that renders on top -import { Background } from "../Background"; +import dynamic from "next/dynamic"; import { Hero } from "./Hero"; import { FeatureTabsSection } from "./FeatureTabsSection"; @@ -33,7 +32,7 @@ const CTAGetStarted = dynamic(() => import("./CTAGetStarted"), { export const Home = () => ( <> - <main className="relative overflow-hidden w-full"> + <main className="overflow-hidden relative w-full"> <Hero /> <FeatureTabsSection /> <Usage /> @@ -45,6 +44,5 @@ export const Home = () => ( <WallOfLove /> <CTAGetStarted /> </main> - <Background /> </> ); diff --git a/components/home/pricing/PricingCalculator.tsx b/components/home/pricing/PricingCalculator.tsx index 7cf58e8fff..b75ccfa3b1 100644 --- a/components/home/pricing/PricingCalculator.tsx +++ b/components/home/pricing/PricingCalculator.tsx @@ -1,3 +1,5 @@ +"use client"; + import { useState, useMemo } from "react"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; @@ -141,17 +143,17 @@ export function PricingCalculator({ return ( <div className="mx-auto max-w-4xl" id="pricing-calculator"> - <h2 className="text-2xl font-bold leading-10 tracking-tight text-primary mb-2"> + <h2 className="mb-2 text-2xl font-bold tracking-tight leading-10 text-primary"> Pricing Calculator </h2> - <p className="text-base text-muted-foreground mb-6"> + <p className="mb-6 text-base text-muted-foreground"> Enter your monthly billable units to see the graduated pricing breakdown. - + </p> <Card> - <CardContent className="space-y-6 pt-6"> + <CardContent className="pt-6 space-y-6"> <div className="grid gap-6 md:grid-cols-2"> <div className="space-y-2"> <Label htmlFor="plan" className="block"> @@ -172,7 +174,7 @@ export function PricingCalculator({ </Select> </div> <div className="space-y-2"> - <div className="flex items-center gap-1"> + <div className="flex gap-1 items-center"> <Label htmlFor="events">Monthly Units</Label> <Link href="/docs/administration/billable-units" @@ -191,33 +193,33 @@ export function PricingCalculator({ </div> </div> - <div className="border bg-secondary p-4 sm:p-6 rounded-lg"> + <div className="p-4 rounded-lg border bg-secondary sm:p-6"> {currentBaseFee > 0 ? ( <div className="text-center"> - <div className="flex flex-col sm:flex-row items-center justify-center gap-2 sm:gap-4 text-base sm:text-lg font-medium"> + <div className="flex flex-col gap-2 justify-center items-center text-base font-medium sm:flex-row sm:gap-4 sm:text-lg"> <div className="text-center"> - <div className="text-primary text-xl sm:text-2xl font-bold"> + <div className="text-xl font-bold text-primary sm:text-2xl"> {formatCurrency(currentBaseFee)} </div> - <div className="text-xs text-muted-foreground mt-1"> + <div className="mt-1 text-xs text-muted-foreground"> {selectedPlan} Base </div> </div> - <div className="text-muted-foreground text-lg sm:text-xl">+</div> + <div className="text-lg text-muted-foreground sm:text-xl">+</div> <div className="text-center"> - <div className="text-primary text-xl sm:text-2xl font-bold"> + <div className="text-xl font-bold text-primary sm:text-2xl"> {formatCurrency(calculatedPrice)} </div> - <div className="text-xs text-muted-foreground mt-1"> + <div className="mt-1 text-xs text-muted-foreground"> Usage </div> </div> - <div className="text-muted-foreground text-lg sm:text-xl">=</div> + <div className="text-lg text-muted-foreground sm:text-xl">=</div> <div className="text-center"> - <div className="text-primary text-xl sm:text-2xl font-bold"> + <div className="text-xl font-bold text-primary sm:text-2xl"> {formatCurrency(calculatedPrice + currentBaseFee)} </div> - <div className="text-xs text-muted-foreground mt-1"> + <div className="mt-1 text-xs text-muted-foreground"> Total / Month </div> </div> @@ -226,10 +228,10 @@ export function PricingCalculator({ ) : ( <div className="text-center"> <div className="text-center"> - <div className="text-2xl sm:text-3xl font-bold text-primary"> + <div className="text-2xl font-bold sm:text-3xl text-primary"> {formatCurrency(calculatedPrice)} </div> - <div className="text-sm text-muted-foreground mt-1"> + <div className="mt-1 text-sm text-muted-foreground"> Total Usage Cost / Month </div> </div> @@ -240,14 +242,14 @@ export function PricingCalculator({ {/* Breakdown */} <div className="space-y-3"> <div className="font-medium">Pricing tiers breakdown:</div> - <div className="border rounded-lg overflow-hidden"> + <div className="overflow-hidden rounded-lg border"> <Table> <TableHeader> <TableRow> <TableHead className="text-left">Tier</TableHead> <TableHead className="text-right">Rate</TableHead> <TableHead className="text-right"> - <div className="flex items-center justify-end gap-1"> + <div className="flex gap-1 justify-end items-center"> Your Units <Link aria-label="Learn more about billable units" href="/docs/administration/billable-units" @@ -274,7 +276,7 @@ export function PricingCalculator({ <TableCell className="text-right"> {eventsInTier > 0 ? formatNumber(eventsInTier) : "—"} </TableCell> - <TableCell className="text-right font-medium"> + <TableCell className="font-medium text-right"> {eventsInTier > 0 ? formatCurrency(costForTier) : "—"} </TableCell> </TableRow> @@ -283,7 +285,7 @@ export function PricingCalculator({ {/* Total row */} <TableRow className="border-t-2 bg-muted/30"> <TableCell className="font-semibold">Total</TableCell> - <TableCell className="text-right font-semibold"> + <TableCell className="font-semibold text-right"> {(() => { const totalUnits = parseInt(monthlyEvents.replace(/,/g, "")) || 0; if (totalUnits === 0) return "—"; @@ -291,10 +293,10 @@ export function PricingCalculator({ return formatCurrency(avgRate) + "/100k"; })()} </TableCell> - <TableCell className="text-right font-semibold"> + <TableCell className="font-semibold text-right"> {monthlyEvents} </TableCell> - <TableCell className="text-right font-semibold text-primary"> + <TableCell className="font-semibold text-right text-primary"> {formatCurrency(calculatedPrice)} </TableCell> </TableRow> diff --git a/components/home/pricing/PricingTable.tsx b/components/home/pricing/PricingTable.tsx index c1a2db6989..cac837c697 100644 --- a/components/home/pricing/PricingTable.tsx +++ b/components/home/pricing/PricingTable.tsx @@ -1,3 +1,5 @@ +"use client"; + import { Button } from "@/components/ui/button"; import { Card, @@ -33,7 +35,7 @@ const GraduatedPricingText = () => { return ( <> $8/100k units. Lower with volume ( - <Link href="#pricing-calculator" className="hover:text-primary underline"> + <Link href="#pricing-calculator" className="underline hover:text-primary"> pricing calculator </Link> ) @@ -1229,7 +1231,7 @@ const FeatureDetails = ({ return ( <HoverCard> <HoverCardTrigger> - <InfoIcon className="inline-block size-3 ml-1" /> + <InfoIcon className="inline-block ml-1 size-3" /> </HoverCardTrigger> <HoverCardContent className="w-60 text-xs"> {description} @@ -1261,7 +1263,7 @@ const FeatureCell = ({ {value.includes(TEAMS_ADDON) && ( <HoverCard> <HoverCardTrigger> - <InfoIcon className="inline-block size-3 ml-1" /> + <InfoIcon className="inline-block ml-1 size-3" /> </HoverCardTrigger> <HoverCardContent className="w-60"> Available as part of the Teams add-on on the Pro plan. @@ -1271,7 +1273,7 @@ const FeatureCell = ({ {value.includes(YEARLY_COMMITMENT) && ( <HoverCard> <HoverCardTrigger> - <InfoIcon className="inline-block size-3 ml-1" /> + <InfoIcon className="inline-block ml-1 size-3" /> </HoverCardTrigger> <HoverCardContent className="w-60"> Available when committing to a yearly contract on the Enterprise @@ -1282,7 +1284,7 @@ const FeatureCell = ({ {value === ENTERPRISE && ( <HoverCard> <HoverCardTrigger> - <InfoIcon className="inline-block size-3 ml-1" /> + <InfoIcon className="inline-block ml-1 size-3" /> </HoverCardTrigger> <HoverCardContent className="w-60"> Available as part of the Enterprise add-on for self-hosted @@ -1296,9 +1298,9 @@ const FeatureCell = ({ return ( <div className="flex justify-center"> {value === true ? ( - <CheckIcon className="h-5 w-5 text-primary" /> + <CheckIcon className="w-5 h-5 text-primary" /> ) : ( - <MinusIcon className="h-5 w-5 text-muted-foreground" /> + <MinusIcon className="w-5 h-5 text-muted-foreground" /> )} </div> ); @@ -1338,14 +1340,14 @@ export function PricingPlans({ variant }: { variant: DeploymentOption }) { {variant === "cloud" && (tier.name === "Core" || tier.name === "Pro") && ( <div className="absolute -top-3 left-1/2 transform -translate-x-1/2"> - <div className="bg-primary text-primary-foreground text-xs px-3 py-1 rounded-full font-medium text-center whitespace-nowrap inline-block"> + <div className="inline-block px-3 py-1 text-xs font-medium text-center whitespace-nowrap rounded-full bg-primary text-primary-foreground"> Unlimited Users </div> </div> )} - <CardHeader className="p-4 lg:p-6 text-left"> - <CardTitle className="text-lg text-foreground font-semibold"> + <CardHeader className="p-4 text-left lg:p-6"> + <CardTitle className="text-lg font-semibold text-foreground"> {tier.name} </CardTitle> <CardDescription className="text-left"> @@ -1364,8 +1366,8 @@ export function PricingPlans({ variant }: { variant: DeploymentOption }) { <CardContent className="p-0 px-4 lg:px-6"> {/* Price information */} <div className="h-[60px] flex items-baseline"> - <span className="font-bold text-3xl">{tier.price}</span> - <span className="text-sm leading-4 ml-1"> + <span className="text-3xl font-bold">{tier.price}</span> + <span className="ml-1 text-sm leading-4"> {tier.price.includes("$") ? tier.priceUnit ? `/ ${tier.priceUnit}` @@ -1406,10 +1408,10 @@ export function PricingPlans({ variant }: { variant: DeploymentOption }) { {/* Callouts for different tiers - always render container for alignment */} <div className="p-6 h-[30px] flex items-center justify-center"> {tier.calloutLink ? ( - <div className="text-xs text-muted-foreground text-center"> + <div className="text-xs text-center text-muted-foreground"> <Link href={tier.calloutLink.href} - className="underline hover:text-primary" + className="underline underline-offset-2 decoration-auto text-muted-foreground hover:text-primary" > {tier.calloutLink.text} </Link> @@ -1426,26 +1428,26 @@ export function PricingPlans({ variant }: { variant: DeploymentOption }) { </> )} <div className="border-t"></div> - <CardFooter className="p-4 lg:p-6 flex-col items-start gap-2"> + <CardFooter className="flex-col gap-2 items-start p-4 lg:p-6"> <ul className="space-y-2.5 text-sm"> {tier.mainFeatures.map((feature, index) => ( <li key={index} className="flex space-x-2"> - <Check className="flex-shrink-0 mt-0.5 h-4 w-4 text-primary" /> + <Check className="shrink-0 mt-0.5 h-4 w-4 text-primary" /> <span className="text-muted-foreground">{feature}</span> </li> ))} </ul> {tier.addOn && ( - <div className="mt-3 border rounded pt-4 p-3 relative w-full"> - <div className="absolute left-1/2 -translate-x-1/2 -translate-y-1/2 -top-0 bg-card px-2 text-xs text-muted-foreground"> + <div className="relative p-3 pt-4 mt-3 w-full rounded border"> + <div className="absolute top-0 left-1/2 px-2 text-xs -translate-x-1/2 -translate-y-1/2 bg-card text-muted-foreground"> + optional </div> <div className="flex justify-between items-center mb-2"> - <span className="font-bold text-sm text-primary"> + <span className="text-sm font-bold text-primary"> {tier.addOn.name} </span> {tier.addOn.price && ( - <span className="font-bold text-sm text-primary"> + <span className="text-sm font-bold text-primary"> {tier.addOn.price} </span> )} @@ -1460,7 +1462,7 @@ export function PricingPlans({ variant }: { variant: DeploymentOption }) { </ul> {tier.addOn.cta && ( <Button - className="w-full mt-3" + className="mt-3 w-full" variant="secondary" size="sm" asChild @@ -1471,7 +1473,7 @@ export function PricingPlans({ variant }: { variant: DeploymentOption }) { </Button> )} {tier.addOn.calloutLink && ( - <div className="mt-2 text-xs text-muted-foreground text-center"> + <div className="mt-2 text-xs text-center text-muted-foreground"> <Link href={tier.addOn.calloutLink.href} className="underline hover:text-primary" @@ -1559,7 +1561,7 @@ export function PricingTable({ {/* Feature comparison (up to lg) */} <section aria-labelledby="mobile-comparison-heading" - className="lg:hidden mt-20" + className="mt-20 lg:hidden" > <h2 id="mobile-comparison-heading" className="sr-only"> Feature comparison @@ -1574,10 +1576,10 @@ export function PricingTable({ {selectedTiers.map((tier) => ( <div key={tier.id} - className="mb-10 bg-card rounded-lg overflow-hidden border p-4" + className="overflow-hidden p-4 mb-10 rounded-lg border bg-card" > <div className="mb-6"> - <h4 className="text-lg text-foreground font-semibold"> + <h4 className="text-lg font-semibold text-foreground"> {tier.name} </h4> <p className="mt-2 text-sm text-muted-foreground"> @@ -1591,7 +1593,7 @@ export function PricingTable({ <TableRow className="bg-muted hover:bg-muted"> <TableHead colSpan={2} - className="w-full text-primary font-bold" + className="w-full font-bold text-primary" scope="colgroup" > {section.name} @@ -1643,15 +1645,16 @@ export function PricingTable({ {isHeaderFixed && ( <div - className="fixed left-0 right-0 bg-muted z-50 shadow-md border-b" + className="fixed right-0 left-0 z-50 border-b shadow-md bg-muted" style={{ top: "64px" }} > - <div className="mx-auto max-w-7xl px-6"> + <div className="flex justify-center items-center px-6 mx-auto max-w-7xl"> <div className="overflow-hidden pl-[16px]"> <table - className="w-full" + className="w-full bg-transparent border-none" style={{ width: headerWidth, + margin: 0, }} > <thead> @@ -1660,7 +1663,7 @@ export function PricingTable({ <> <th style={{ width: columnWidths[0] }} - className="text-left font-medium" + className="font-medium text-left bg-transparent border-none" scope="col" ></th> {selectedTiers.map((tier, index) => ( @@ -1669,7 +1672,7 @@ export function PricingTable({ style={{ width: columnWidths[index + 1], }} - className="py-2 text-center text-lg text-foreground font-semibold" + className="py-2 text-lg font-semibold text-center bg-transparent border-none text-foreground" scope="col" > {tier.name} @@ -1682,8 +1685,9 @@ export function PricingTable({ </table> </div> </div> - </div> - )} + </div > + ) + } <div className="relative"> <Table @@ -1749,7 +1753,7 @@ export function PricingTable({ </TableBody> </Table> </div> - </section> + </section > </> ); } diff --git a/components/home/pricing/index.tsx b/components/home/pricing/index.tsx index 1517da7065..919cd15f17 100644 --- a/components/home/pricing/index.tsx +++ b/components/home/pricing/index.tsx @@ -1,3 +1,5 @@ +"use client"; + import Link from "next/link"; import { Header } from "../../Header"; import { HomeSection } from "../components/HomeSection"; @@ -22,7 +24,7 @@ type DeploymentOptionParams = { const deploymentOptions: Record<DeploymentOption, DeploymentOptionParams> = { cloud: { switch: ( - <span className="flex flex-row items-center gap-x-1"> + <span className="flex flex-row gap-x-1 items-center"> Langfuse Cloud <span className="hidden md:block"> (we host)</span> </span> @@ -34,7 +36,7 @@ const deploymentOptions: Record<DeploymentOption, DeploymentOptionParams> = { }, selfHosted: { switch: ( - <span className="flex flex-row items-center gap-x-1"> + <span className="flex flex-row gap-x-1 items-center"> Self-hosted <span className="hidden md:block"> (you host)</span> </span> @@ -71,7 +73,7 @@ export function PricingPage({ <Tabs defaultValue={variant} value={variant} - className="mt-4 flex justify-center" + className="flex justify-center mt-4" onValueChange={(value) => { if (!isPricingPage) { setLocalVariant(value as "cloud" | "selfHosted"); @@ -116,7 +118,7 @@ export function PricingPage({ </> ) : ( <> - <div className="text-center mt-10"> + <div className="mt-10 text-center"> For a detailed comparison and FAQ, see our{" "} <Link href={deploymentOptions[variant].href} diff --git a/components/icons/azure.tsx b/components/icons/azure.tsx index 667dd3df60..42596f75f5 100644 --- a/components/icons/azure.tsx +++ b/components/icons/azure.tsx @@ -13,11 +13,11 @@ function IconAzure(props: React.SVGProps<SVGSVGElement>) { <path d="M18.397 15.296H7.4a.51.51 0 00-.347.882l7.066 6.595c.206.192.477.298.758.298h6.226l-2.706-7.775z" - fill-opacity=".75" + fillOpacity=".75" ></path> <path d="M8.295.857c-.477 0-.9.304-1.053.756L.495 21.605a1.11 1.11 0 001.052 1.466h5.43c.477 0 .9-.304 1.053-.755l1.341-3.975-2.318-2.163a.51.51 0 01.347-.882h3L15.271.857H8.295z" - fill-opacity=".5" + fillOpacity=".5" ></path> <path d="M17.193 1.613a1.11 1.11 0 00-1.052-.756h-7.81.035c.477 0 .9.304 1.052.756l6.748 19.992a1.11 1.11 0 01-1.052 1.466h-.12 7.895a1.11 1.11 0 001.052-1.466L17.193 1.613z"></path> </svg> diff --git a/components/inkeep/InkeepChatButton.tsx b/components/inkeep/InkeepChatButton.tsx index fc47020fb2..f815f2715f 100644 --- a/components/inkeep/InkeepChatButton.tsx +++ b/components/inkeep/InkeepChatButton.tsx @@ -1,3 +1,5 @@ +"use client"; + import dynamic from "next/dynamic"; import type { InkeepChatButtonProps } from "@inkeep/cxkit-react"; import useInkeepSettings from "./useInkeepSettings"; diff --git a/components/inkeep/InkeepCustomTrigger.tsx b/components/inkeep/InkeepCustomTrigger.tsx index 2327f2ec0a..9049010741 100644 --- a/components/inkeep/InkeepCustomTrigger.tsx +++ b/components/inkeep/InkeepCustomTrigger.tsx @@ -1,12 +1,11 @@ -import { useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; import useInkeepSettings from "./useInkeepSettings"; import type { InkeepModalSearchAndChatProps } from "@inkeep/cxkit-react"; -import { Search } from "lucide-react"; export default function InkeepCustomTrigger() { const [isOpen, setIsOpen] = useState(false); const [CustomTrigger, setCustomTrigger] = - useState<(e: InkeepModalSearchAndChatProps) => JSX.Element>(); + useState<(e: InkeepModalSearchAndChatProps) => React.ReactElement>(); const { baseSettings, aiChatSettings, searchSettings, modalSettings } = useInkeepSettings(); diff --git a/components/inkeep/InkeepEmbeddedChat.tsx b/components/inkeep/InkeepEmbeddedChat.tsx index 84eaa757be..f4bfed9270 100644 --- a/components/inkeep/InkeepEmbeddedChat.tsx +++ b/components/inkeep/InkeepEmbeddedChat.tsx @@ -1,3 +1,5 @@ +"use client"; + import dynamic from "next/dynamic"; import type { InkeepEmbeddedChatProps } from "@inkeep/cxkit-react"; import useInkeepSettings from "./useInkeepSettings"; diff --git a/components/inkeep/InkeepSearchBar.tsx b/components/inkeep/InkeepSearchBar.tsx index 13836f1206..50bf76b241 100644 --- a/components/inkeep/InkeepSearchBar.tsx +++ b/components/inkeep/InkeepSearchBar.tsx @@ -1,3 +1,5 @@ +'use client'; + import dynamic from "next/dynamic"; import type { InkeepSearchBarProps } from "@inkeep/cxkit-react"; import useInkeepSettings from "./useInkeepSettings"; @@ -44,7 +46,7 @@ export default function InkeepSearchBar() { }; return ( - <div className="h-9 overflow-hidden"> + <div className="overflow-hidden h-9"> <SearchBar {...searchBarProps} /> </div> ); diff --git a/components/inkeep/useInkeepSettings.ts b/components/inkeep/useInkeepSettings.ts index e86b832dc1..edba63e6ca 100644 --- a/components/inkeep/useInkeepSettings.ts +++ b/components/inkeep/useInkeepSettings.ts @@ -6,9 +6,9 @@ import type { AIChatDisclaimerSettings, InkeepCallbackEvent, } from "@inkeep/cxkit-react"; -import { useTheme } from "nextra-theme-docs"; +import { useTheme } from "next-themes"; import { type PostHog, usePostHog } from "posthog-js/react"; -import { useRouter } from "next/router"; +import { usePathname } from "next/navigation"; import { useMemo } from "react"; const customAnalyticsCallback = ( @@ -46,14 +46,14 @@ type InkeepSharedSettings = { const useInkeepSettings = (): InkeepSharedSettings => { const { resolvedTheme } = useTheme(); const posthog = usePostHog(); - const router = useRouter(); + const pathname = usePathname() ?? ""; const tabOfCurrentDocsSection = useMemo(() => { return inkeepCustomTabsToSlugs.find((t) => { const slugs = Array.isArray(t.slug) ? t.slug : [t.slug]; - return slugs.some((slug) => router.pathname.startsWith(slug)); + return slugs.some((slug) => pathname.startsWith(slug)); })?.tab; - }, [router.pathname]); + }, [pathname]); const baseSettings: InkeepBaseSettings = { apiKey: process.env.NEXT_PUBLIC_INKEEP_API_KEY! || "", diff --git a/components/integrations/IntegrationIndex.tsx b/components/integrations/IntegrationIndex.tsx index fa9a3c72e3..60d953be09 100644 --- a/components/integrations/IntegrationIndex.tsx +++ b/components/integrations/IntegrationIndex.tsx @@ -11,8 +11,10 @@ import { Code, Database, } from "lucide-react"; -import nativeIntegrationsMeta from "../../pages/integrations/native/_meta"; -import dataPlatformIntegrationsMeta from "../../pages/integrations/data-platform/_meta"; +import { + nativeIntegrationsMeta, + dataPlatformIntegrationsMeta, +} from "@/lib/integrations-meta"; /** * Transforms meta config entries into integration page objects diff --git a/components/layout/Banner.tsx b/components/layout/Banner.tsx new file mode 100644 index 0000000000..b7c5ea6e7c --- /dev/null +++ b/components/layout/Banner.tsx @@ -0,0 +1,11 @@ +import Link from "next/link"; +import { Banner as FumadocsBanner } from 'fumadocs-ui/components/banner'; + +export function Banner() { + return ( + <FumadocsBanner id="fd-top-banner" className="bg-black text-white [&_a]:text-white [&_button]:text-white"> + <Link href="/blog/joining-clickhouse">Langfuse joins ClickHouse! Learn more → + </Link> + </FumadocsBanner> + ); +} diff --git a/components/layout/FluxLayoutNoPanel.tsx b/components/layout/FluxLayoutNoPanel.tsx new file mode 100644 index 0000000000..fbf8a795d5 --- /dev/null +++ b/components/layout/FluxLayoutNoPanel.tsx @@ -0,0 +1,9 @@ +"use client"; + +import { DocsLayout, type DocsLayoutProps } from "fumadocs-ui/layouts/flux"; + +/** Wrapper around fumadocs flux DocsLayout that suppresses the NavigationPanel. + * Must be a Client Component because renderNavigationPanel is a function prop. */ +export function FluxLayoutNoPanel(props: Omit<DocsLayoutProps, "renderNavigationPanel">) { + return <DocsLayout {...props} renderNavigationPanel={() => null} />; +} diff --git a/components/layout/Footer.tsx b/components/layout/Footer.tsx new file mode 100644 index 0000000000..e4cb4ebc51 --- /dev/null +++ b/components/layout/Footer.tsx @@ -0,0 +1,11 @@ +import FooterMenu from "@/components/FooterMenu"; + +export function Footer() { + return ( + <footer className="border-t border-border/50 bg-muted/30"> + <div className="mx-auto flex max-w-360 justify-center pt-12 pb-22 text-gray-600 dark:text-gray-400 md:justify-start pl-[max(env(safe-area-inset-left),1.5rem)] pr-[max(env(safe-area-inset-right),1.5rem)]"> + <FooterMenu /> + </div> + </footer> + ); +} diff --git a/components/layout/Layout.tsx b/components/layout/Layout.tsx new file mode 100644 index 0000000000..8ba5d79076 --- /dev/null +++ b/components/layout/Layout.tsx @@ -0,0 +1,20 @@ +import { Banner } from "./Banner"; +import { Navbar } from "./Navbar"; +import { Footer } from "./Footer"; +import { Background } from "../Background"; + +type LayoutProps = { + children: React.ReactNode; +}; + +export function Layout({ children }: LayoutProps) { + return ( + <> + <Banner /> + <Navbar /> + {children} + <Footer /> + <Background /> + </> + ); +} diff --git a/components/layout/Navbar.tsx b/components/layout/Navbar.tsx new file mode 100644 index 0000000000..34680d95ea --- /dev/null +++ b/components/layout/Navbar.tsx @@ -0,0 +1,49 @@ +import { NavbarLogo } from "@/components/NavbarLogo"; +import { NavbarExtraContent } from "@/components/NavbarExtraContent"; +import { NavLinks } from "@/components/NavLinks"; +import InkeepSearchBar from "@/components/inkeep/InkeepSearchBar"; +import { + source, + selfHostingSource, + guidesSource, + integrationsSource, + faqSource, + handbookSource, + librarySource, + securitySource, +} from "@/lib/source"; +import { serializePageTree, type SectionNavData } from "@/lib/nav-tree"; + +const sectionNavData: SectionNavData[] = [ + { name: "Docs", href: "/docs", children: serializePageTree(source.getPageTree()) }, + { name: "Self Hosting", href: "/self-hosting", children: serializePageTree(selfHostingSource.getPageTree()) }, + { name: "Guides", href: "/guides", children: serializePageTree(guidesSource.getPageTree()) }, + { name: "Integrations", href: "/integrations", children: serializePageTree(integrationsSource.getPageTree()) }, + { name: "FAQ", href: "/faq", children: serializePageTree(faqSource.getPageTree()) }, + { name: "Handbook", href: "/handbook", children: serializePageTree(handbookSource.getPageTree()) }, + { name: "Changelog", href: "/changelog", children: [] }, + { name: "Pricing", href: "/pricing", children: [] }, + { name: "Library", href: "/library", children: serializePageTree(librarySource.getPageTree()) }, + { name: "Security & Compliance", href: "/security", children: serializePageTree(securitySource.getPageTree()) }, +]; + +export function Navbar() { + return ( + <header className="sticky z-50 h-16 border-b backdrop-blur-md border-foreground/10 bg-background/50" style={{ top: 'var(--fd-banner-height, 0px)' }}> + <nav className="mx-auto flex h-full max-w-360 items-center justify-end gap-4 pl-[max(env(safe-area-inset-left),1.5rem)] pr-[max(env(safe-area-inset-right),1.5rem)]"> + <div className="flex flex-1"> + <NavbarLogo /> + </div> + <div className="flex flex-row-reverse md:flex-row flex-1 md:gap-4 gap-2"> + <NavLinks sectionNavData={sectionNavData} /> + <div className="flex gap-2 justify-end items-center lg:gap-4"> + <div className="min-w-0 max-w-9 h-9 flex-1 block xl:max-w-[280px]"> + <InkeepSearchBar /> + </div> + <NavbarExtraContent /> + </div> + </div> + </nav> + </header> + ); +} diff --git a/components/layout/index.ts b/components/layout/index.ts new file mode 100644 index 0000000000..de5534b4dc --- /dev/null +++ b/components/layout/index.ts @@ -0,0 +1,4 @@ +export { Banner } from "./Banner"; +export { Navbar } from "./Navbar"; +export { Footer } from "./Footer"; +export { Layout } from "./Layout"; diff --git a/components/logo.tsx b/components/logo.tsx index 934773400a..bccc516304 100644 --- a/components/logo.tsx +++ b/components/logo.tsx @@ -9,51 +9,71 @@ const ContextMenu = dynamic(() => import("./LogoContextMenu"), { ssr: false, }); -export function Logo() { +export function Logo({ + wrapInLink = true, +}: { + /** When false, render only the image block (use when already inside a link, e.g. NavbarLogo). */ + wrapInLink?: boolean; +}) { const [menuOpen, setMenuOpen] = useState(false); + const images = ( + <div className="flex gap-2 items-center cursor-pointer -mr-4 md:-mr-0"> + <Image + src="/langfuse_logo_white.svg" + alt="Langfuse Logo" + width={120} + height={20} + className="hidden dark:block max-w-28 sm:max-w-none" + /> + <Image + src="/langfuse_logo.svg" + alt="Langfuse Logo" + width={120} + height={20} + className="block dark:hidden max-w-28 sm:max-w-none" + /> + <style jsx>{` + div { + mask-image: linear-gradient( + 60deg, + #bba0ff 25%, + rgba(187, 160, 255, 0.2) 50%, + #bba0ff 75% + ); + mask-size: 400%; + mask-position: 0%; + } + div:hover { + mask-position: 100%; + transition: mask-position 1s ease, -webkit-mask-position 1s ease; + } + `}</style> + </div> + ); + return ( <> <div className="flex items-center"> - <Link - href="/" - onContextMenu={(e) => { - e.preventDefault(); - setMenuOpen(true); - }} - > - <div className="flex gap-2 items-center cursor-pointer -mr-4 md:-mr-0"> - <Image - src="/langfuse_logo_white.svg" - alt="Langfuse Logo" - width={120} - height={20} - className="hidden dark:block max-w-28 sm:max-w-none" - /> - <Image - src="/langfuse_logo.svg" - alt="Langfuse Logo" - width={120} - height={20} - className="block dark:hidden max-w-28 sm:max-w-none" - /> - <style jsx>{` - div { - mask-image: linear-gradient( - 60deg, - #bba0ff 25%, - rgba(187, 160, 255, 0.2) 50%, - #bba0ff 75% - ); - mask-size: 400%; - mask-position: 0%; - } - div:hover { - mask-position: 100%; - transition: mask-position 1s ease, -webkit-mask-position 1s ease; - } - `}</style> + {wrapInLink ? ( + <Link + href="/" + onContextMenu={(e) => { + e.preventDefault(); + setMenuOpen(true); + }} + > + {images} + </Link> + ) : ( + <div + onContextMenu={(e) => { + e.preventDefault(); + setMenuOpen(true); + }} + > + {images} </div> - </Link> + )} </div> {menuOpen && <ContextMenu open={menuOpen} setOpen={setMenuOpen} />} </> diff --git a/components/magicui/dot-pattern.tsx b/components/magicui/dot-pattern.tsx index 89562b9531..f379e01d8c 100644 --- a/components/magicui/dot-pattern.tsx +++ b/components/magicui/dot-pattern.tsx @@ -1,5 +1,4 @@ import { cn } from "@/lib/utils"; -import { useId } from "react"; interface DotPatternProps { width?: any; @@ -12,6 +11,9 @@ interface DotPatternProps { className?: string; [key: string]: any; } + +const DOT_PATTERN_ID = "dot-pattern"; + export function DotPattern({ width = 16, height = 16, @@ -23,8 +25,6 @@ export function DotPattern({ className, ...props }: DotPatternProps) { - const id = useId(); - return ( <svg aria-hidden="true" @@ -36,7 +36,7 @@ export function DotPattern({ > <defs> <pattern - id={id} + id={DOT_PATTERN_ID} width={width} height={height} patternUnits="userSpaceOnUse" @@ -47,7 +47,7 @@ export function DotPattern({ <circle id="pattern-circle" cx={cy} cy={cy} r={cr} /> </pattern> </defs> - <rect width="100%" height="100%" strokeWidth={0} fill={`url(#${id})`} /> + <rect width="100%" height="100%" strokeWidth={0} fill={`url(#${DOT_PATTERN_ID})`} /> </svg> ); } diff --git a/components/magicui/shimmer-button.tsx b/components/magicui/shimmer-button.tsx index 9d8a29a4d7..eb79cf43f7 100644 --- a/components/magicui/shimmer-button.tsx +++ b/components/magicui/shimmer-button.tsx @@ -46,7 +46,7 @@ const ShimmerButton = ({ {/* spark */} <div className="absolute inset-0 h-[100cqh] animate-slide [aspect-ratio:1] [border-radius:0] [mask:none] "> {/* spark before */} - <div className="absolute inset-[-100%] w-auto rotate-0 animate-spin [background:conic-gradient(from_calc(270deg-(var(--spread)*0.5)),transparent_0,hsl(0_0%_100%/1)_var(--spread),transparent_var(--spread))] [translate:0_0]" /> + <div className="absolute inset-[-100%] w-auto rotate-0 animate-spin-custom [background:conic-gradient(from_calc(270deg-(var(--spread)*0.5)),transparent_0,hsl(0_0%_100%/1)_var(--spread),transparent_var(--spread))] [translate:0_0]" /> </div> </div> diff --git a/components/not-found-animation.tsx b/components/not-found-animation.tsx index 843ef9a4e8..5cd896cec1 100644 --- a/components/not-found-animation.tsx +++ b/components/not-found-animation.tsx @@ -1,83 +1,51 @@ -import dynamic from "next/dynamic"; -import { Canvas, useFrame } from "@react-three/fiber"; -import { TrackballControls, Environment } from "@react-three/drei"; -import { useRef } from "react"; -import * as THREE from "three"; -import { useTheme } from "nextra-theme-docs"; +"use client"; -const CANVAS_STYLES = { - width: "100%", - height: "50vh", - minHeight: "400px", - maxHeight: "600px", -} as const; - -function MetallicKnot() { - const meshRef = useRef<THREE.Mesh>(null); - const { resolvedTheme } = useTheme(); - - useFrame((state) => { - if (meshRef.current) { - meshRef.current.rotation.x = state.clock.elapsedTime * 0.25; - meshRef.current.rotation.y = state.clock.elapsedTime * 0.2; - meshRef.current.rotation.z = state.clock.elapsedTime * 0.15; - } - }); - - return ( - <mesh ref={meshRef}> - <torusKnotGeometry args={[0.8, 0.2, 200, 32]} /> - <meshPhysicalMaterial - color={resolvedTheme === "dark" ? "#E11312" : "#0A60B5"} - metalness={0.9} - roughness={0.1} - clearcoat={1} - clearcoatRoughness={0.1} - reflectivity={1} - envMapIntensity={2} - /> - </mesh> - ); -} - -function NotFoundAnimationComponent() { +export function NotFoundAnimation() { return ( - <Canvas - camera={{ position: [0, 0, 5], fov: 45 }} - gl={{ - antialias: true, - toneMapping: THREE.ACESFilmicToneMapping, - toneMappingExposure: 1.5, - }} - style={CANVAS_STYLES} + <div + className="mx-auto flex items-center justify-center" + style={{ width: "100%", height: "50vh", minHeight: "400px", maxHeight: "600px" }} + aria-hidden="true" > - <ambientLight intensity={0.2} /> - <ambientLight intensity={0.1} color="#E01211" /> - <spotLight - position={[10, 10, 10]} - angle={0.15} - penumbra={1} - intensity={1} - color="#ffffff" - /> - <spotLight - position={[-10, -10, -10]} - angle={0.15} - penumbra={1} - intensity={0.5} - color="#E01211" - /> - <MetallicKnot /> - <TrackballControls noZoom={true} rotateSpeed={4} /> - <Environment preset="sunset" /> - </Canvas> + <div className="relative flex items-center justify-center"> + {/* Outer ring */} + <div + className="absolute rounded-full border-2 border-primary/20" + style={{ + width: 280, + height: 280, + animation: "spin 12s linear infinite", + }} + /> + {/* Middle ring */} + <div + className="absolute rounded-full border-2 border-primary/40" + style={{ + width: 200, + height: 200, + animation: "spin 8s linear infinite reverse", + }} + /> + {/* Inner ring */} + <div + className="absolute rounded-full border-2 border-primary/60" + style={{ + width: 130, + height: 130, + animation: "spin 5s linear infinite", + }} + /> + {/* Center text */} + <span className="relative text-7xl font-bold text-primary select-none"> + 404 + </span> + </div> + <style>{` + @keyframes spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } + } + `}</style> + </div> ); } - -export const NotFoundAnimation = dynamic( - () => Promise.resolve(NotFoundAnimationComponent), - { - ssr: false, - loading: () => <div style={CANVAS_STYLES} />, - } -); diff --git a/components/productUpdateSignup.tsx b/components/productUpdateSignup.tsx index c828574bde..b97ccaeb1f 100644 --- a/components/productUpdateSignup.tsx +++ b/components/productUpdateSignup.tsx @@ -1,3 +1,5 @@ +"use client"; + import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { cn } from "@/lib/utils"; diff --git a/components/shared/EnterpriseLogoGrid.tsx b/components/shared/EnterpriseLogoGrid.tsx index 0248657c34..4a51e2632c 100644 --- a/components/shared/EnterpriseLogoGrid.tsx +++ b/components/shared/EnterpriseLogoGrid.tsx @@ -165,13 +165,13 @@ const CustomerStoryBadge = ({ small }: { small?: boolean }) => ( <div className={cn( "absolute top-0 right-0 z-10 pointer-events-none", - !small && "md:top-2 md:right-2" + !small && "md:top-2 md:right-2", )} > <div className={cn( "inline-flex items-center justify-center text-blue-500 text-xs rounded-full group-hover:w-auto group-hover:h-auto group-hover:px-3 group-hover:py-1 px-2 py-1 transition-all duration-200", - !small && "md:bg-blue-500 md:text-white md:px-0 md:py-0 md:w-6 md:h-6" + !small && "md:bg-blue-500 md:text-white md:px-0 md:py-0 md:w-6 md:h-6", )} > {small ? ( @@ -179,9 +179,7 @@ const CustomerStoryBadge = ({ small }: { small?: boolean }) => ( ) : ( <> <span className="md:hidden whitespace-nowrap">Read Story</span> - <span className="hidden md:group-hover:inline"> - Read User Story - </span> + <span className="hidden md:group-hover:inline">Read User Story</span> <span className="hidden md:block group-hover:hidden w-2 h-2 bg-white rounded-full"></span> </> )} @@ -209,7 +207,7 @@ export const EnterpriseLogoGrid = ({ className={cn( "grid grid-cols-2 md:grid-cols-4 auto-rows-fr", small && "grid-cols-4", - className + className, )} role="grid" aria-label="Enterprise customers using Langfuse" @@ -233,7 +231,7 @@ export const EnterpriseLogoGrid = ({ className={cn( baseCellClasses, clickableCellClasses, - small && smallCellClasses + small && smallCellClasses, )} aria-label={`Read ${company.name} user story`} role="gridcell" diff --git a/components/ui/button.tsx b/components/ui/button.tsx index e7f59c1bf3..1181172d71 100644 --- a/components/ui/button.tsx +++ b/components/ui/button.tsx @@ -5,7 +5,7 @@ import { cva, type VariantProps } from "class-variance-authority"; import { cn } from "@/lib/utils"; const buttonVariants = cva( - "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded text-sm font-medium no-underline ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", { variants: { variant: { diff --git a/components/ui/pagination.tsx b/components/ui/pagination.tsx index ea40d196dc..641bf752a3 100644 --- a/components/ui/pagination.tsx +++ b/components/ui/pagination.tsx @@ -20,7 +20,7 @@ const PaginationContent = React.forwardRef< >(({ className, ...props }, ref) => ( <ul ref={ref} - className={cn("flex flex-row items-center gap-1", className)} + className={cn("flex flex-row list-none items-center gap-1", className)} {...props} /> )) @@ -30,7 +30,7 @@ const PaginationItem = React.forwardRef< HTMLLIElement, React.ComponentProps<"li"> >(({ className, ...props }, ref) => ( - <li ref={ref} className={cn("", className)} {...props} /> + <li ref={ref} className={cn("list-none", className)} {...props} /> )) PaginationItem.displayName = "PaginationItem" diff --git a/components/ui/table.tsx b/components/ui/table.tsx index 3e16035d89..fcb92f8042 100644 --- a/components/ui/table.tsx +++ b/components/ui/table.tsx @@ -6,10 +6,10 @@ const Table = React.forwardRef< HTMLTableElement, React.HTMLAttributes<HTMLTableElement> >(({ className, ...props }, ref) => ( - <div className="w-full overflow-auto"> + <div className="overflow-auto w-full"> <table ref={ref} - className={cn("w-full caption-bottom text-sm", className)} + className={cn("my-0! w-full h-full text-sm caption-bottom", className)} {...props} /> </div> @@ -42,7 +42,7 @@ const TableFooter = React.forwardRef< >(({ className, ...props }, ref) => ( <tfoot ref={ref} - className={cn("bg-primary font-medium text-primary-foreground", className)} + className={cn("font-medium bg-primary text-primary-foreground", className)} {...props} /> )); diff --git a/components/ui/tabs.tsx b/components/ui/tabs.tsx index fcafe97e47..c4b5f33be8 100644 --- a/components/ui/tabs.tsx +++ b/components/ui/tabs.tsx @@ -42,7 +42,7 @@ function TabsTrigger({ <TabsPrimitive.Trigger data-slot="tabs-trigger" className={cn( - "data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-background text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + "no-underline data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-background text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className )} {...props} diff --git a/components/ui/tooltip.tsx b/components/ui/tooltip.tsx index 31ea4066eb..ba4b8997b6 100644 --- a/components/ui/tooltip.tsx +++ b/components/ui/tooltip.tsx @@ -5,9 +5,24 @@ import * as TooltipPrimitive from "@radix-ui/react-tooltip"; import { cn } from "@/lib/utils"; -const TooltipProvider = TooltipPrimitive.Provider; +// Cast to make `children` optional — with React 19 types, React.FC<P> no +// longer adds implicit `children` via PropsWithChildren, so JSX children +// don't automatically satisfy a required `children` prop in the strict +// attribute check. Making it optional here allows the standard JSX usage +// `<TooltipProvider>...</TooltipProvider>` to remain valid. +const TooltipProvider = TooltipPrimitive.Provider as React.ComponentType< + Omit< + React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider>, + "children" + > & { children?: React.ReactNode } +>; -const Tooltip = TooltipPrimitive.Root; +const Tooltip = TooltipPrimitive.Root as React.ComponentType< + Omit< + React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root>, + "children" + > & { children?: React.ReactNode } +>; const TooltipTrigger = TooltipPrimitive.Trigger; diff --git a/components/watchOrBookDemo/WatchWalkthroughs.tsx b/components/watchOrBookDemo/WatchWalkthroughs.tsx index 621a1638ca..41ec7e15fa 100644 --- a/components/watchOrBookDemo/WatchWalkthroughs.tsx +++ b/components/watchOrBookDemo/WatchWalkthroughs.tsx @@ -1,7 +1,11 @@ +"use client"; + +import { Suspense } from "react"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Button } from "@/components/ui/button"; import Link from "next/link"; -import { useRouter } from "next/router"; +import { useRouter } from "next/navigation"; +import { useSearchParams } from "next/navigation"; import { WALKTHROUGH_TABS } from "./constants"; import { BookOpen, ExternalLink } from "lucide-react"; import { cn } from "@/lib/utils"; @@ -26,27 +30,20 @@ function VideoPlayer({ videoId, title }: VideoPlayerProps) { ); } -export function WatchWalkthroughs({ className }: { className?: string }) { +function WatchWalkthroughsInner({ className }: { className?: string }) { const router = useRouter(); + const searchParams = useSearchParams(); - // Get current tab from query param or default to first tab - const activeTab = (() => { - const tab = router.query.tab as string; - if (tab && WALKTHROUGH_TABS.some((t) => t.id === tab)) { - return tab; - } - return WALKTHROUGH_TABS[0].id; - })(); + const tab = searchParams.get("tab"); + const activeTab = + tab && WALKTHROUGH_TABS.some((t) => t.id === tab) + ? tab + : WALKTHROUGH_TABS[0].id; - // Handle tab change and update URL query param const handleTabChange = (value: string) => { - const query = { ...router.query }; - - query.tab = value; - - router.replace({ pathname: router.pathname, query }, undefined, { - shallow: true, - }); + const params = new URLSearchParams(searchParams.toString()); + params.set("tab", value); + router.replace(`?${params.toString()}`); }; return ( @@ -56,12 +53,12 @@ export function WatchWalkthroughs({ className }: { className?: string }) { onValueChange={handleTabChange} className="w-full" > - <TabsList className="h-auto p-2 gap-2 flex-wrap justify-center mx-auto flex-row"> + <TabsList className="flex-row flex-wrap gap-2 justify-center p-2 mx-auto h-auto"> {WALKTHROUGH_TABS.map((tab) => ( <TabsTrigger key={tab.id} value={tab.id} - className="flex-none h-auto items-center justify-center md:gap-2 text-center whitespace-nowrap flex-row" + className="flex-row flex-none justify-center items-center h-auto text-center whitespace-nowrap md:gap-2" > <tab.icon className="size-4" /> <span>{tab.label}</span> @@ -74,10 +71,10 @@ export function WatchWalkthroughs({ className }: { className?: string }) { <TabsContent key={tab.id} value={tab.id} - className="mt-2 p-4 border rounded bg-card max-w-2xl mx-auto" + className="p-4 mx-auto mt-2 max-w-2xl rounded border bg-card" > <div className="mb-6"> - <h3 className="text-xl font-semibold mb-2">{tab.title}</h3> + <h3 className="mb-2 text-xl font-semibold">{tab.title}</h3> <p>{tab.description}</p> </div> <VideoPlayer @@ -88,7 +85,7 @@ export function WatchWalkthroughs({ className }: { className?: string }) { <Button asChild variant="outline" - className="w-full justify-start" + className="justify-start w-full" > <Link href={tab.docs.href}> <BookOpen size={16} /> @@ -104,3 +101,13 @@ export function WatchWalkthroughs({ className }: { className?: string }) { </div> ); } + +// Suspense boundary required because useSearchParams() inside WatchWalkthroughsInner +// would otherwise bail out of static prerendering and crash the production build. +export function WatchWalkthroughs({ className }: { className?: string }) { + return ( + <Suspense> + <WatchWalkthroughsInner className={className} /> + </Suspense> + ); +} diff --git a/components/watchOrBookDemo/index.tsx b/components/watchOrBookDemo/index.tsx index ea44914026..abacfe0ba4 100644 --- a/components/watchOrBookDemo/index.tsx +++ b/components/watchOrBookDemo/index.tsx @@ -1,5 +1,6 @@ "use client"; +import { Suspense } from "react"; import { Background } from "@/components/Background"; import { Header } from "@/components/Header"; import { ContactSalesForm } from "@/components/ContactSalesForm"; @@ -254,7 +255,7 @@ export function Demo({ page }: { page: "talk-to-us" | "watch-demo" }) { {/* Right Column: Calendar or Walkthroughs */} <div className={isDiscoverOpen ? "flex-1 md:flex-[0.6]" : "flex-1"}> - {!isDiscoverOpen ? <ContactFormSection /> : <WatchWalkthroughs />} + {!isDiscoverOpen ? <ContactFormSection /> : <Suspense><WatchWalkthroughs /></Suspense>} </div> </div> </div> diff --git a/components/wrapped/Customers.tsx b/components/wrapped/Customers.tsx index b673e6296a..ae049ac2b8 100644 --- a/components/wrapped/Customers.tsx +++ b/components/wrapped/Customers.tsx @@ -55,11 +55,26 @@ interface CustomerStory { // Companies with customer stories const companiesWithStories = [ - { name: "Canva", path: "/users/canva", lightModeImage: canvaDark, darkModeImage: canvaLight }, - { name: "SumUp", path: "/users/sumup", lightModeImage: sumupDark, darkModeImage: sumupLight }, - { name: "Khan Academy", path: "/users/khan-academy", lightModeImage: khanacademyDark, darkModeImage: khanacademyLight }, - { name: "Magic Patterns", path: "/users/magic-patterns-ai-design-tools", lightModeImage: magicPatternsDark, darkModeImage: magicPatternsLight }, - { name: "Merck", path: "/users/merckgroup", lightModeImage: merckDark, darkModeImage: merckLight }, + { name: "Canva", path: "/users/canva", light: canvaDark, dark: canvaLight }, + { name: "SumUp", path: "/users/sumup", light: sumupLight, dark: sumupDark }, + { + name: "Khan Academy", + path: "/users/khan-academy", + light: khanacademyLight, + dark: khanacademyDark, + }, + { + name: "Magic Patterns", + path: "/users/magic-patterns-ai-design-tools", + light: magicPatternsLight, + dark: magicPatternsDark, + }, + { + name: "Merck", + path: "/users/merckgroup", + light: merckLight, + dark: merckDark, + }, ]; // Companies without customer stories (logos only) @@ -69,9 +84,21 @@ const companiesWithoutStories = [ { name: "Telus", lightModeImage: telusDark, darkModeImage: telusLight }, { name: "Pigment", lightModeImage: pigmentDark, darkModeImage: pigmentLight }, { name: "Adobe", lightModeImage: adobeLight, darkModeImage: adobeDark }, - { name: "Intuit", lightModeImage: intuitLightMode, darkModeImage: intuitDarkMode }, - { name: "Seven Eleven Japan", lightModeImage: sevenelevenDark, darkModeImage: sevenelevenLight }, - { name: "Circleback", lightModeImage: circlebackDark, darkModeImage: circlebackLight }, + { + name: "Intuit", + lightModeImage: intuitLightMode, + darkModeImage: intuitDarkMode, + }, + { + name: "Seven Eleven Japan", + lightModeImage: sevenelevenDark, + darkModeImage: sevenelevenLight, + }, + { + name: "Circleback", + lightModeImage: circlebackDark, + darkModeImage: circlebackLight, + }, ]; function CustomerStoryCard({ story }: { story: CustomerStory }) { @@ -104,7 +131,7 @@ function CustomerStoryCard({ story }: { story: CustomerStory }) { </div> )} </div> - + <div className="absolute inset-0 transition-transform duration-700 [transform-style:preserve-3d] [transform:rotateY(180deg)] lg:[transform:rotateY(0deg)] lg:group-hover:[transform:rotateY(180deg)]"> {/* Front side - Logo only */} <div className="absolute inset-0 flex items-center justify-center p-6 lg:p-8 [backface-visibility:hidden]"> @@ -215,9 +242,7 @@ function CustomerStoryCard({ story }: { story: CustomerStory }) { <div className="text-xs sm:text-sm text-muted-foreground mt-1 break-words"> {story.frontMatter.quoteRole} {story.frontMatter.quoteRole && - story.frontMatter.quoteCompany && ( - <span> at </span> - )} + story.frontMatter.quoteCompany && <span> at </span>} {story.frontMatter.quoteCompany} </div> )} @@ -263,24 +288,22 @@ function CompanyLogo({ type CustomerItem = | { type: "story"; story: CustomerStory & { company: any } } - | { type: "logo"; company: typeof companiesWithoutStories[0] } + | { type: "logo"; company: (typeof companiesWithoutStories)[0] } | { type: "text"; text: string }; export function Customers() { const containerRef = useRef<HTMLDivElement>(null); const isInView = useInView(containerRef, { once: true, margin: "-100px" }); - const allStories = (getPagesUnderRoute("/users") as Array< - Page & { frontMatter: any } - >).filter( - (page) => page.frontMatter?.showInCustomerIndex !== false - ); + const allStories = ( + getPagesUnderRoute("/users") as Array<Page & { frontMatter: any }> + ).filter((page) => page.frontMatter?.showInCustomerIndex !== false); // Match stories with companies const customerStories = companiesWithStories .map((company) => { const story = allStories.find( - (s) => s.route === company.path || s.route === `${company.path}/` + (s) => s.route === company.path || s.route === `${company.path}/`, ); return story ? { ...story, company } : null; }) @@ -290,10 +313,10 @@ export function Customers() { const orderedItems = useMemo(() => { // Create maps for easy lookup const storyMap = new Map( - customerStories.map((story) => [story.company.name, story]) + customerStories.map((story) => [story.company.name, story]), ); const logoMap = new Map( - companiesWithoutStories.map((company) => [company.name, company]) + companiesWithoutStories.map((company) => [company.name, company]), ); // Define the exact order @@ -354,7 +377,7 @@ export function Customers() { const row = Math.floor(index / columns); const col = index % columns; const delay = (row + col) * 0.1; // Stagger delay - + const animationProps = { initial: { opacity: 0, y: 20, scale: 0.95 }, animate: isInView @@ -369,9 +392,7 @@ export function Customers() { // Use negative margins to overlap borders on all sides except first item // For columns layout, we overlap top and left borders - const marginClass = index === 0 - ? "" - : "-mt-[1px] -ml-[1px]"; + const marginClass = index === 0 ? "" : "-mt-[1px] -ml-[1px]"; if (item.type === "story") { return ( diff --git a/pages/blog/2024-04-introducing-langfuse-2.0.mdx b/content/blog/2024-04-introducing-langfuse-2.0.mdx similarity index 100% rename from pages/blog/2024-04-introducing-langfuse-2.0.mdx rename to content/blog/2024-04-introducing-langfuse-2.0.mdx diff --git a/pages/blog/2024-04-python-decorator.mdx b/content/blog/2024-04-python-decorator.mdx similarity index 100% rename from pages/blog/2024-04-python-decorator.mdx rename to content/blog/2024-04-python-decorator.mdx diff --git a/pages/blog/2024-05-haystack-integration.mdx b/content/blog/2024-05-haystack-integration.mdx similarity index 100% rename from pages/blog/2024-05-haystack-integration.mdx rename to content/blog/2024-05-haystack-integration.mdx diff --git a/pages/blog/2024-06-monitoring-llm-security.mdx b/content/blog/2024-06-monitoring-llm-security.mdx similarity index 100% rename from pages/blog/2024-06-monitoring-llm-security.mdx rename to content/blog/2024-06-monitoring-llm-security.mdx diff --git a/pages/blog/2024-07-ai-agent-observability-with-langfuse.mdx b/content/blog/2024-07-ai-agent-observability-with-langfuse.mdx similarity index 100% rename from pages/blog/2024-07-ai-agent-observability-with-langfuse.mdx rename to content/blog/2024-07-ai-agent-observability-with-langfuse.mdx diff --git a/pages/blog/2024-07-dify-langfuse-integration.mdx b/content/blog/2024-07-dify-langfuse-integration.mdx similarity index 100% rename from pages/blog/2024-07-dify-langfuse-integration.mdx rename to content/blog/2024-07-dify-langfuse-integration.mdx diff --git a/pages/blog/2024-08-what-is-langchain.mdx b/content/blog/2024-08-what-is-langchain.mdx similarity index 100% rename from pages/blog/2024-08-what-is-langchain.mdx rename to content/blog/2024-08-what-is-langchain.mdx diff --git a/pages/blog/2024-09-langfuse-proxy.mdx b/content/blog/2024-09-langfuse-proxy.mdx similarity index 100% rename from pages/blog/2024-09-langfuse-proxy.mdx rename to content/blog/2024-09-langfuse-proxy.mdx diff --git a/pages/blog/2024-10-observability-in-multi-step-llm-systems.mdx b/content/blog/2024-10-observability-in-multi-step-llm-systems.mdx similarity index 100% rename from pages/blog/2024-10-observability-in-multi-step-llm-systems.mdx rename to content/blog/2024-10-observability-in-multi-step-llm-systems.mdx diff --git a/pages/blog/2024-10-opentelemetry-for-llm-observability.mdx b/content/blog/2024-10-opentelemetry-for-llm-observability.mdx similarity index 100% rename from pages/blog/2024-10-opentelemetry-for-llm-observability.mdx rename to content/blog/2024-10-opentelemetry-for-llm-observability.mdx diff --git a/pages/blog/2024-11-17-launch-week-2.mdx b/content/blog/2024-11-17-launch-week-2.mdx similarity index 100% rename from pages/blog/2024-11-17-launch-week-2.mdx rename to content/blog/2024-11-17-launch-week-2.mdx diff --git a/pages/blog/2024-11-llm-product-management.mdx b/content/blog/2024-11-llm-product-management.mdx similarity index 100% rename from pages/blog/2024-11-llm-product-management.mdx rename to content/blog/2024-11-llm-product-management.mdx diff --git a/pages/blog/2024-11-most-used-oss-llmops.mdx b/content/blog/2024-11-most-used-oss-llmops.mdx similarity index 100% rename from pages/blog/2024-11-most-used-oss-llmops.mdx rename to content/blog/2024-11-most-used-oss-llmops.mdx diff --git a/pages/blog/2024-12-langfuse-v3-infrastructure-evolution.mdx b/content/blog/2024-12-langfuse-v3-infrastructure-evolution.mdx similarity index 100% rename from pages/blog/2024-12-langfuse-v3-infrastructure-evolution.mdx rename to content/blog/2024-12-langfuse-v3-infrastructure-evolution.mdx diff --git a/pages/blog/2025-01-22-evaluating-voice-ai-agents.mdx b/content/blog/2025-01-22-evaluating-voice-ai-agents.mdx similarity index 100% rename from pages/blog/2025-01-22-evaluating-voice-ai-agents.mdx rename to content/blog/2025-01-22-evaluating-voice-ai-agents.mdx diff --git a/pages/blog/2025-02-20-the-agent-deep-dive-open-deep-research.mdx b/content/blog/2025-02-20-the-agent-deep-dive-open-deep-research.mdx similarity index 100% rename from pages/blog/2025-02-20-the-agent-deep-dive-open-deep-research.mdx rename to content/blog/2025-02-20-the-agent-deep-dive-open-deep-research.mdx diff --git a/pages/blog/2025-02-28-langfuse-february-update.mdx b/content/blog/2025-02-28-langfuse-february-update.mdx similarity index 100% rename from pages/blog/2025-02-28-langfuse-february-update.mdx rename to content/blog/2025-02-28-langfuse-february-update.mdx diff --git a/pages/blog/2025-03-04-llm-evaluation-101-best-practices-and-challenges.mdx b/content/blog/2025-03-04-llm-evaluation-101-best-practices-and-challenges.mdx similarity index 100% rename from pages/blog/2025-03-04-llm-evaluation-101-best-practices-and-challenges.mdx rename to content/blog/2025-03-04-llm-evaluation-101-best-practices-and-challenges.mdx diff --git a/pages/blog/2025-03-13-use-hugging-face-together-with-langfuse.mdx b/content/blog/2025-03-13-use-hugging-face-together-with-langfuse.mdx similarity index 100% rename from pages/blog/2025-03-13-use-hugging-face-together-with-langfuse.mdx rename to content/blog/2025-03-13-use-hugging-face-together-with-langfuse.mdx diff --git a/pages/blog/2025-03-19-ai-agent-comparison.mdx b/content/blog/2025-03-19-ai-agent-comparison.mdx similarity index 100% rename from pages/blog/2025-03-19-ai-agent-comparison.mdx rename to content/blog/2025-03-19-ai-agent-comparison.mdx diff --git a/pages/blog/2025-03-31-langfuse-march-update.mdx b/content/blog/2025-03-31-langfuse-march-update.mdx similarity index 100% rename from pages/blog/2025-03-31-langfuse-march-update.mdx rename to content/blog/2025-03-31-langfuse-march-update.mdx diff --git a/pages/blog/2025-04-24-how-we-use-llms-to-scale-langfuse.mdx b/content/blog/2025-04-24-how-we-use-llms-to-scale-langfuse.mdx similarity index 100% rename from pages/blog/2025-04-24-how-we-use-llms-to-scale-langfuse.mdx rename to content/blog/2025-04-24-how-we-use-llms-to-scale-langfuse.mdx diff --git a/pages/blog/2025-04-30-langfuse-april-update.mdx b/content/blog/2025-04-30-langfuse-april-update.mdx similarity index 100% rename from pages/blog/2025-04-30-langfuse-april-update.mdx rename to content/blog/2025-04-30-langfuse-april-update.mdx diff --git a/pages/blog/2025-05-19-launch-week-3.mdx b/content/blog/2025-05-19-launch-week-3.mdx similarity index 100% rename from pages/blog/2025-05-19-launch-week-3.mdx rename to content/blog/2025-05-19-launch-week-3.mdx diff --git a/pages/blog/2025-05-21-customizable-dashboards.mdx b/content/blog/2025-05-21-customizable-dashboards.mdx similarity index 100% rename from pages/blog/2025-05-21-customizable-dashboards.mdx rename to content/blog/2025-05-21-customizable-dashboards.mdx diff --git a/pages/blog/2025-05-31-langfuse-may-update.mdx b/content/blog/2025-05-31-langfuse-may-update.mdx similarity index 100% rename from pages/blog/2025-05-31-langfuse-may-update.mdx rename to content/blog/2025-05-31-langfuse-may-update.mdx diff --git a/pages/blog/2025-06-04-open-sourcing-langfuse-product.mdx b/content/blog/2025-06-04-open-sourcing-langfuse-product.mdx similarity index 100% rename from pages/blog/2025-06-04-open-sourcing-langfuse-product.mdx rename to content/blog/2025-06-04-open-sourcing-langfuse-product.mdx diff --git a/pages/blog/2025-06-30-langfuse-june-update.mdx b/content/blog/2025-06-30-langfuse-june-update.mdx similarity index 100% rename from pages/blog/2025-06-30-langfuse-june-update.mdx rename to content/blog/2025-06-30-langfuse-june-update.mdx diff --git a/pages/blog/2025-07-31-langfuse-july-update.mdx b/content/blog/2025-07-31-langfuse-july-update.mdx similarity index 100% rename from pages/blog/2025-07-31-langfuse-july-update.mdx rename to content/blog/2025-07-31-langfuse-july-update.mdx diff --git a/pages/blog/2025-08-13-evaluating-model-performance-accross-clouds-with-shadeform-and-langfuse.mdx b/content/blog/2025-08-13-evaluating-model-performance-accross-clouds-with-shadeform-and-langfuse.mdx similarity index 100% rename from pages/blog/2025-08-13-evaluating-model-performance-accross-clouds-with-shadeform-and-langfuse.mdx rename to content/blog/2025-08-13-evaluating-model-performance-accross-clouds-with-shadeform-and-langfuse.mdx diff --git a/pages/blog/2025-08-29-error-analysis-to-evaluate-llm-applications.mdx b/content/blog/2025-08-29-error-analysis-to-evaluate-llm-applications.mdx similarity index 100% rename from pages/blog/2025-08-29-error-analysis-to-evaluate-llm-applications.mdx rename to content/blog/2025-08-29-error-analysis-to-evaluate-llm-applications.mdx diff --git a/pages/blog/2025-08-31-langfuse-august-update.mdx b/content/blog/2025-08-31-langfuse-august-update.mdx similarity index 100% rename from pages/blog/2025-08-31-langfuse-august-update.mdx rename to content/blog/2025-08-31-langfuse-august-update.mdx diff --git a/pages/blog/2025-09-05-automated-evaluations.mdx b/content/blog/2025-09-05-automated-evaluations.mdx similarity index 100% rename from pages/blog/2025-09-05-automated-evaluations.mdx rename to content/blog/2025-09-05-automated-evaluations.mdx diff --git a/pages/blog/2025-09-30-langfuse-september-update.mdx b/content/blog/2025-09-30-langfuse-september-update.mdx similarity index 100% rename from pages/blog/2025-09-30-langfuse-september-update.mdx rename to content/blog/2025-09-30-langfuse-september-update.mdx diff --git a/pages/blog/2025-10-09-evaluating-multi-turn-conversations.mdx b/content/blog/2025-10-09-evaluating-multi-turn-conversations.mdx similarity index 100% rename from pages/blog/2025-10-09-evaluating-multi-turn-conversations.mdx rename to content/blog/2025-10-09-evaluating-multi-turn-conversations.mdx diff --git a/pages/blog/2025-10-13-state-of-llms-september-2025.mdx b/content/blog/2025-10-13-state-of-llms-september-2025.mdx similarity index 100% rename from pages/blog/2025-10-13-state-of-llms-september-2025.mdx rename to content/blog/2025-10-13-state-of-llms-september-2025.mdx diff --git a/pages/blog/2025-10-21-testing-llm-applications.mdx b/content/blog/2025-10-21-testing-llm-applications.mdx similarity index 99% rename from pages/blog/2025-10-21-testing-llm-applications.mdx rename to content/blog/2025-10-21-testing-llm-applications.mdx index 3c9bbc787b..63e5b3deee 100644 --- a/pages/blog/2025-10-21-testing-llm-applications.mdx +++ b/content/blog/2025-10-21-testing-llm-applications.mdx @@ -301,15 +301,21 @@ import { FileCode, BookOpen, Video, Users, Joystick } from "lucide-react"; <details> <summary>How do you test LLM applications?</summary> + Testing LLM applications requires a different approach than traditional software testing. Instead of checking exact output matches, you use **evaluation functions** that score outputs on continuous scales. The typical approach combines three components: (1) **Datasets** — collections of input/output pairs representing test cases, (2) **Experiment runners** — tools that execute your LLM application against the dataset, and (3) **Evaluators** — scoring functions that assess output quality using LLM-as-a-Judge, semantic similarity, or custom logic. A test passes when evaluation scores meet your defined thresholds. + </details> <details> <summary>What is the difference between LLM testing and LLM evaluation?</summary> + **Testing** produces binary pass/fail results — your test suite tells you whether something broke. **Evaluation** measures quality on continuous scales — how accurate, helpful, or relevant are the responses. In practice, LLM testing and evaluation blend together: you "test" your application by "evaluating" its outputs with scoring functions, and a test passes if the evaluation score meets your threshold. Both are essential for building reliable LLM applications. + </details> <details> <summary>How do I automate LLM testing in CI/CD?</summary> + You can integrate LLM testing into your CI/CD pipeline using Langfuse's experiment runner SDK. Create a test script that: (1) loads your dataset (locally or from Langfuse), (2) runs your application against each test case, (3) scores the outputs with evaluator functions, and (4) asserts that scores meet minimum thresholds. Run this script as part of your CI pipeline using `pytest` or your preferred test runner. See the [experiments via SDK guide](/docs/evaluation/experiments/experiments-via-sdk) for implementation details. + </details> \ No newline at end of file diff --git a/pages/blog/2025-10-28-rag-observability-and-evals.mdx b/content/blog/2025-10-28-rag-observability-and-evals.mdx similarity index 100% rename from pages/blog/2025-10-28-rag-observability-and-evals.mdx rename to content/blog/2025-10-28-rag-observability-and-evals.mdx diff --git a/pages/blog/2025-10-29-launch-week-4.mdx b/content/blog/2025-10-29-launch-week-4.mdx similarity index 100% rename from pages/blog/2025-10-29-launch-week-4.mdx rename to content/blog/2025-10-29-launch-week-4.mdx diff --git a/pages/blog/2025-11-06-experiment-interpretation.mdx b/content/blog/2025-11-06-experiment-interpretation.mdx similarity index 100% rename from pages/blog/2025-11-06-experiment-interpretation.mdx rename to content/blog/2025-11-06-experiment-interpretation.mdx diff --git a/pages/blog/2025-11-12-evals.mdx b/content/blog/2025-11-12-evals.mdx similarity index 100% rename from pages/blog/2025-11-12-evals.mdx rename to content/blog/2025-11-12-evals.mdx diff --git a/pages/blog/2025-11-20-incident-report.mdx b/content/blog/2025-11-20-incident-report.mdx similarity index 100% rename from pages/blog/2025-11-20-incident-report.mdx rename to content/blog/2025-11-20-incident-report.mdx diff --git a/pages/blog/2025-11-25-vibe-coding-custom-annotation-ui.mdx b/content/blog/2025-11-25-vibe-coding-custom-annotation-ui.mdx similarity index 100% rename from pages/blog/2025-11-25-vibe-coding-custom-annotation-ui.mdx rename to content/blog/2025-11-25-vibe-coding-custom-annotation-ui.mdx diff --git a/pages/blog/2025-11-30-langfuse-november-update.mdx b/content/blog/2025-11-30-langfuse-november-update.mdx similarity index 100% rename from pages/blog/2025-11-30-langfuse-november-update.mdx rename to content/blog/2025-11-30-langfuse-november-update.mdx diff --git a/pages/blog/2025-12-09-building-langfuse-mcp-server.mdx b/content/blog/2025-12-09-building-langfuse-mcp-server.mdx similarity index 100% rename from pages/blog/2025-12-09-building-langfuse-mcp-server.mdx rename to content/blog/2025-12-09-building-langfuse-mcp-server.mdx diff --git a/pages/blog/2026-02-13-will-you-be-my-cli.mdx b/content/blog/2026-02-13-will-you-be-my-cli.mdx similarity index 100% rename from pages/blog/2026-02-13-will-you-be-my-cli.mdx rename to content/blog/2026-02-13-will-you-be-my-cli.mdx diff --git a/pages/blog/2026-02-16-prompt-improvement-claude-skills.mdx b/content/blog/2026-02-16-prompt-improvement-claude-skills.mdx similarity index 100% rename from pages/blog/2026-02-16-prompt-improvement-claude-skills.mdx rename to content/blog/2026-02-16-prompt-improvement-claude-skills.mdx diff --git a/pages/blog/2026-02-26-evaluate-ai-agent-skills.mdx b/content/blog/2026-02-26-evaluate-ai-agent-skills.mdx similarity index 100% rename from pages/blog/2026-02-26-evaluate-ai-agent-skills.mdx rename to content/blog/2026-02-26-evaluate-ai-agent-skills.mdx diff --git a/pages/blog/announcing-our-seed-round.mdx b/content/blog/announcing-our-seed-round.mdx similarity index 100% rename from pages/blog/announcing-our-seed-round.mdx rename to content/blog/announcing-our-seed-round.mdx diff --git a/pages/blog/joining-clickhouse.mdx b/content/blog/joining-clickhouse.mdx similarity index 100% rename from pages/blog/joining-clickhouse.mdx rename to content/blog/joining-clickhouse.mdx diff --git a/pages/blog/langflow.mdx b/content/blog/langflow.mdx similarity index 100% rename from pages/blog/langflow.mdx rename to content/blog/langflow.mdx diff --git a/pages/blog/launch-week-1.mdx b/content/blog/launch-week-1.mdx similarity index 100% rename from pages/blog/launch-week-1.mdx rename to content/blog/launch-week-1.mdx diff --git a/pages/blog/llama-index-integration.mdx b/content/blog/llama-index-integration.mdx similarity index 100% rename from pages/blog/llama-index-integration.mdx rename to content/blog/llama-index-integration.mdx diff --git a/content/blog/meta.json b/content/blog/meta.json new file mode 100644 index 0000000000..d37b6a472c --- /dev/null +++ b/content/blog/meta.json @@ -0,0 +1,11 @@ +{ + "title": "Blog", + "pages": [ + "theme", + "toc", + "sidebar", + "pagination", + "typesetting", + "breadcrumb" + ] +} diff --git a/pages/blog/product-analytics-for-LLM-apps.mdx b/content/blog/product-analytics-for-LLM-apps.mdx similarity index 100% rename from pages/blog/product-analytics-for-LLM-apps.mdx rename to content/blog/product-analytics-for-LLM-apps.mdx diff --git a/pages/blog/qa-chatbot-for-langfuse-docs.mdx b/content/blog/qa-chatbot-for-langfuse-docs.mdx similarity index 100% rename from pages/blog/qa-chatbot-for-langfuse-docs.mdx rename to content/blog/qa-chatbot-for-langfuse-docs.mdx diff --git a/pages/blog/showcase-llm-chatbot.mdx b/content/blog/showcase-llm-chatbot.mdx similarity index 100% rename from pages/blog/showcase-llm-chatbot.mdx rename to content/blog/showcase-llm-chatbot.mdx diff --git a/pages/blog/update-2023-07.mdx b/content/blog/update-2023-07.mdx similarity index 100% rename from pages/blog/update-2023-07.mdx rename to content/blog/update-2023-07.mdx diff --git a/pages/blog/update-2023-08.mdx b/content/blog/update-2023-08.mdx similarity index 100% rename from pages/blog/update-2023-08.mdx rename to content/blog/update-2023-08.mdx diff --git a/pages/blog/update-2023-09.mdx b/content/blog/update-2023-09.mdx similarity index 100% rename from pages/blog/update-2023-09.mdx rename to content/blog/update-2023-09.mdx diff --git a/pages/blog/update-2023-10.mdx b/content/blog/update-2023-10.mdx similarity index 100% rename from pages/blog/update-2023-10.mdx rename to content/blog/update-2023-10.mdx diff --git a/pages/changelog/2023-07-19-launch.mdx b/content/changelog/2023-07-19-launch.mdx similarity index 100% rename from pages/changelog/2023-07-19-launch.mdx rename to content/changelog/2023-07-19-launch.mdx diff --git a/pages/changelog/2023-07-20-analytics-alpha.mdx b/content/changelog/2023-07-20-analytics-alpha.mdx similarity index 100% rename from pages/changelog/2023-07-20-analytics-alpha.mdx rename to content/changelog/2023-07-20-analytics-alpha.mdx diff --git a/pages/changelog/2023-07-20-token-calculation.mdx b/content/changelog/2023-07-20-token-calculation.mdx similarity index 100% rename from pages/changelog/2023-07-20-token-calculation.mdx rename to content/changelog/2023-07-20-token-calculation.mdx diff --git a/pages/changelog/2023-07-24-nested-trace-ui.mdx b/content/changelog/2023-07-24-nested-trace-ui.mdx similarity index 100% rename from pages/changelog/2023-07-24-nested-trace-ui.mdx rename to content/changelog/2023-07-24-nested-trace-ui.mdx diff --git a/pages/changelog/2023-07-27-integration-langchain-python.mdx b/content/changelog/2023-07-27-integration-langchain-python.mdx similarity index 100% rename from pages/changelog/2023-07-27-integration-langchain-python.mdx rename to content/changelog/2023-07-27-integration-langchain-python.mdx diff --git a/pages/changelog/2023-07-27-project-user-management.mdx b/content/changelog/2023-07-27-project-user-management.mdx similarity index 100% rename from pages/changelog/2023-07-27-project-user-management.mdx rename to content/changelog/2023-07-27-project-user-management.mdx diff --git a/pages/changelog/2023-07-31-human-in-the-loop-evaluation.mdx b/content/changelog/2023-07-31-human-in-the-loop-evaluation.mdx similarity index 100% rename from pages/changelog/2023-07-31-human-in-the-loop-evaluation.mdx rename to content/changelog/2023-07-31-human-in-the-loop-evaluation.mdx diff --git a/pages/changelog/2023-08-07-extended-usage-get-api.mdx b/content/changelog/2023-08-07-extended-usage-get-api.mdx similarity index 100% rename from pages/changelog/2023-08-07-extended-usage-get-api.mdx rename to content/changelog/2023-08-07-extended-usage-get-api.mdx diff --git a/pages/changelog/2023-08-14-public-demo-project.mdx b/content/changelog/2023-08-14-public-demo-project.mdx similarity index 100% rename from pages/changelog/2023-08-14-public-demo-project.mdx rename to content/changelog/2023-08-14-public-demo-project.mdx diff --git a/pages/changelog/2023-08-16-prebuilt-docker-image.mdx b/content/changelog/2023-08-16-prebuilt-docker-image.mdx similarity index 100% rename from pages/changelog/2023-08-16-prebuilt-docker-image.mdx rename to content/changelog/2023-08-16-prebuilt-docker-image.mdx diff --git a/pages/changelog/2023-08-30-integration-langchain-js.mdx b/content/changelog/2023-08-30-integration-langchain-js.mdx similarity index 100% rename from pages/changelog/2023-08-30-integration-langchain-js.mdx rename to content/changelog/2023-08-30-integration-langchain-js.mdx diff --git a/pages/changelog/2023-08-31-track-version-and-releases.mdx b/content/changelog/2023-08-31-track-version-and-releases.mdx similarity index 100% rename from pages/changelog/2023-08-31-track-version-and-releases.mdx rename to content/changelog/2023-08-31-track-version-and-releases.mdx diff --git a/pages/changelog/2023-09-01-token-costs-in-usd.mdx b/content/changelog/2023-09-01-token-costs-in-usd.mdx similarity index 100% rename from pages/changelog/2023-09-01-token-costs-in-usd.mdx rename to content/changelog/2023-09-01-token-costs-in-usd.mdx diff --git a/pages/changelog/2023-09-12-analytics-alpha-public-access.mdx b/content/changelog/2023-09-12-analytics-alpha-public-access.mdx similarity index 100% rename from pages/changelog/2023-09-12-analytics-alpha-public-access.mdx rename to content/changelog/2023-09-12-analytics-alpha-public-access.mdx diff --git a/pages/changelog/2023-09-14-public-link-sharing.mdx b/content/changelog/2023-09-14-public-link-sharing.mdx similarity index 100% rename from pages/changelog/2023-09-14-public-link-sharing.mdx rename to content/changelog/2023-09-14-public-link-sharing.mdx diff --git a/pages/changelog/2023-09-15-model-based-evaluation.mdx b/content/changelog/2023-09-15-model-based-evaluation.mdx similarity index 100% rename from pages/changelog/2023-09-15-model-based-evaluation.mdx rename to content/changelog/2023-09-15-model-based-evaluation.mdx diff --git a/pages/changelog/2023-09-18-export-generations.mdx b/content/changelog/2023-09-18-export-generations.mdx similarity index 100% rename from pages/changelog/2023-09-18-export-generations.mdx rename to content/changelog/2023-09-18-export-generations.mdx diff --git a/pages/changelog/2023-09-25-datasets.mdx b/content/changelog/2023-09-25-datasets.mdx similarity index 100% rename from pages/changelog/2023-09-25-datasets.mdx rename to content/changelog/2023-09-25-datasets.mdx diff --git a/pages/changelog/2023-09-27-JSON-viewer.mdx b/content/changelog/2023-09-27-JSON-viewer.mdx similarity index 100% rename from pages/changelog/2023-09-27-JSON-viewer.mdx rename to content/changelog/2023-09-27-JSON-viewer.mdx diff --git a/pages/changelog/2023-10-03-complex-filters.mdx b/content/changelog/2023-10-03-complex-filters.mdx similarity index 100% rename from pages/changelog/2023-10-03-complex-filters.mdx rename to content/changelog/2023-10-03-complex-filters.mdx diff --git a/pages/changelog/2023-10-05-faster-navigation.mdx b/content/changelog/2023-10-05-faster-navigation.mdx similarity index 100% rename from pages/changelog/2023-10-05-faster-navigation.mdx rename to content/changelog/2023-10-05-faster-navigation.mdx diff --git a/pages/changelog/2023-10-07-improved-support-of-complex-inputs-and-outputs.mdx b/content/changelog/2023-10-07-improved-support-of-complex-inputs-and-outputs.mdx similarity index 100% rename from pages/changelog/2023-10-07-improved-support-of-complex-inputs-and-outputs.mdx rename to content/changelog/2023-10-07-improved-support-of-complex-inputs-and-outputs.mdx diff --git a/pages/changelog/2023-10-09-dashboards.mdx b/content/changelog/2023-10-09-dashboards.mdx similarity index 100% rename from pages/changelog/2023-10-09-dashboards.mdx rename to content/changelog/2023-10-09-dashboards.mdx diff --git a/pages/changelog/2023-10-19-doubled-performance-ingestion-apis.mdx b/content/changelog/2023-10-19-doubled-performance-ingestion-apis.mdx similarity index 100% rename from pages/changelog/2023-10-19-doubled-performance-ingestion-apis.mdx rename to content/changelog/2023-10-19-doubled-performance-ingestion-apis.mdx diff --git a/pages/changelog/2023-10-25-openai-sdk-integration.mdx b/content/changelog/2023-10-25-openai-sdk-integration.mdx similarity index 100% rename from pages/changelog/2023-10-25-openai-sdk-integration.mdx rename to content/changelog/2023-10-25-openai-sdk-integration.mdx diff --git a/pages/changelog/2023-10-25-support-pydantic-v1-and-v2.mdx b/content/changelog/2023-10-25-support-pydantic-v1-and-v2.mdx similarity index 100% rename from pages/changelog/2023-10-25-support-pydantic-v1-and-v2.mdx rename to content/changelog/2023-10-25-support-pydantic-v1-and-v2.mdx diff --git a/pages/changelog/2023-10-30-ragas-cookbook.mdx b/content/changelog/2023-10-30-ragas-cookbook.mdx similarity index 100% rename from pages/changelog/2023-10-30-ragas-cookbook.mdx rename to content/changelog/2023-10-30-ragas-cookbook.mdx diff --git a/pages/changelog/2023-10-31-simplified-self-hosting.mdx b/content/changelog/2023-10-31-simplified-self-hosting.mdx similarity index 100% rename from pages/changelog/2023-10-31-simplified-self-hosting.mdx rename to content/changelog/2023-10-31-simplified-self-hosting.mdx diff --git a/pages/changelog/2023-11-03-sso-enforcement.mdx b/content/changelog/2023-11-03-sso-enforcement.mdx similarity index 100% rename from pages/changelog/2023-11-03-sso-enforcement.mdx rename to content/changelog/2023-11-03-sso-enforcement.mdx diff --git a/pages/changelog/2023-11-06-support-for-gpt-4-turbo.mdx b/content/changelog/2023-11-06-support-for-gpt-4-turbo.mdx similarity index 100% rename from pages/changelog/2023-11-06-support-for-gpt-4-turbo.mdx rename to content/changelog/2023-11-06-support-for-gpt-4-turbo.mdx diff --git a/pages/changelog/2023-11-13-support-for-langchain-expression-language.mdx b/content/changelog/2023-11-13-support-for-langchain-expression-language.mdx similarity index 100% rename from pages/changelog/2023-11-13-support-for-langchain-expression-language.mdx rename to content/changelog/2023-11-13-support-for-langchain-expression-language.mdx diff --git a/pages/changelog/2023-11-15-pretty-generations.mdx b/content/changelog/2023-11-15-pretty-generations.mdx similarity index 100% rename from pages/changelog/2023-11-15-pretty-generations.mdx rename to content/changelog/2023-11-15-pretty-generations.mdx diff --git a/pages/changelog/2023-11-15-semantic-releases.mdx b/content/changelog/2023-11-15-semantic-releases.mdx similarity index 100% rename from pages/changelog/2023-11-15-semantic-releases.mdx rename to content/changelog/2023-11-15-semantic-releases.mdx diff --git a/pages/changelog/2023-11-16-openai-sdk-version-1.mdx b/content/changelog/2023-11-16-openai-sdk-version-1.mdx similarity index 100% rename from pages/changelog/2023-11-16-openai-sdk-version-1.mdx rename to content/changelog/2023-11-16-openai-sdk-version-1.mdx diff --git a/pages/changelog/2023-11-19-more-robust-docker.mdx b/content/changelog/2023-11-19-more-robust-docker.mdx similarity index 100% rename from pages/changelog/2023-11-19-more-robust-docker.mdx rename to content/changelog/2023-11-19-more-robust-docker.mdx diff --git a/pages/changelog/2023-12-04-column-visbility.mdx b/content/changelog/2023-12-04-column-visbility.mdx similarity index 100% rename from pages/changelog/2023-12-04-column-visbility.mdx rename to content/changelog/2023-12-04-column-visbility.mdx diff --git a/pages/changelog/2023-12-12-rename-and-transfer-projects.mdx b/content/changelog/2023-12-12-rename-and-transfer-projects.mdx similarity index 100% rename from pages/changelog/2023-12-12-rename-and-transfer-projects.mdx rename to content/changelog/2023-12-12-rename-and-transfer-projects.mdx diff --git a/pages/changelog/2023-12-13-sessions.mdx b/content/changelog/2023-12-13-sessions.mdx similarity index 100% rename from pages/changelog/2023-12-13-sessions.mdx rename to content/changelog/2023-12-13-sessions.mdx diff --git a/pages/changelog/2023-12-28-v2-sdks.mdx b/content/changelog/2023-12-28-v2-sdks.mdx similarity index 100% rename from pages/changelog/2023-12-28-v2-sdks.mdx rename to content/changelog/2023-12-28-v2-sdks.mdx diff --git a/pages/changelog/2024-01-02-sort-trace-table.mdx b/content/changelog/2024-01-02-sort-trace-table.mdx similarity index 100% rename from pages/changelog/2024-01-02-sort-trace-table.mdx rename to content/changelog/2024-01-02-sort-trace-table.mdx diff --git a/pages/changelog/2024-01-03-prompt-management.mdx b/content/changelog/2024-01-03-prompt-management.mdx similarity index 100% rename from pages/changelog/2024-01-03-prompt-management.mdx rename to content/changelog/2024-01-03-prompt-management.mdx diff --git a/pages/changelog/2024-01-16-trace-tagging.mdx b/content/changelog/2024-01-16-trace-tagging.mdx similarity index 100% rename from pages/changelog/2024-01-16-trace-tagging.mdx rename to content/changelog/2024-01-16-trace-tagging.mdx diff --git a/pages/changelog/2024-01-29-custom-model-prices.mdx b/content/changelog/2024-01-29-custom-model-prices.mdx similarity index 100% rename from pages/changelog/2024-01-29-custom-model-prices.mdx rename to content/changelog/2024-01-29-custom-model-prices.mdx diff --git a/pages/changelog/2024-02-05-sdk-level-prompt-caching.mdx b/content/changelog/2024-02-05-sdk-level-prompt-caching.mdx similarity index 100% rename from pages/changelog/2024-02-05-sdk-level-prompt-caching.mdx rename to content/changelog/2024-02-05-sdk-level-prompt-caching.mdx diff --git a/pages/changelog/2024-02-19-metrics-api-endpoint.mdx b/content/changelog/2024-02-19-metrics-api-endpoint.mdx similarity index 100% rename from pages/changelog/2024-02-19-metrics-api-endpoint.mdx rename to content/changelog/2024-02-19-metrics-api-endpoint.mdx diff --git a/pages/changelog/2024-02-20-prompt-config.mdx b/content/changelog/2024-02-20-prompt-config.mdx similarity index 100% rename from pages/changelog/2024-02-20-prompt-config.mdx rename to content/changelog/2024-02-20-prompt-config.mdx diff --git a/pages/changelog/2024-02-27-llama-index-integration.mdx b/content/changelog/2024-02-27-llama-index-integration.mdx similarity index 100% rename from pages/changelog/2024-02-27-llama-index-integration.mdx rename to content/changelog/2024-02-27-llama-index-integration.mdx diff --git a/pages/changelog/2024-02-29-performance-improvement-ui.mdx b/content/changelog/2024-02-29-performance-improvement-ui.mdx similarity index 100% rename from pages/changelog/2024-02-29-performance-improvement-ui.mdx rename to content/changelog/2024-02-29-performance-improvement-ui.mdx diff --git a/pages/changelog/2024-03-05-uptrain-integration.mdx b/content/changelog/2024-03-05-uptrain-integration.mdx similarity index 100% rename from pages/changelog/2024-03-05-uptrain-integration.mdx rename to content/changelog/2024-03-05-uptrain-integration.mdx diff --git a/pages/changelog/2024-03-07-Claude3.mdx b/content/changelog/2024-03-07-Claude3.mdx similarity index 100% rename from pages/changelog/2024-03-07-Claude3.mdx rename to content/changelog/2024-03-07-Claude3.mdx diff --git a/pages/changelog/2024-03-11-improved-chatml-rendering.mdx b/content/changelog/2024-03-11-improved-chatml-rendering.mdx similarity index 100% rename from pages/changelog/2024-03-11-improved-chatml-rendering.mdx rename to content/changelog/2024-03-11-improved-chatml-rendering.mdx diff --git a/pages/changelog/2024-03-24-python-decorator.mdx b/content/changelog/2024-03-24-python-decorator.mdx similarity index 100% rename from pages/changelog/2024-03-24-python-decorator.mdx rename to content/changelog/2024-03-24-python-decorator.mdx diff --git a/pages/changelog/2024-04-08-langchain-streaming-and-batch.mdx b/content/changelog/2024-04-08-langchain-streaming-and-batch.mdx similarity index 100% rename from pages/changelog/2024-04-08-langchain-streaming-and-batch.mdx rename to content/changelog/2024-04-08-langchain-streaming-and-batch.mdx diff --git a/pages/changelog/2024-04-09-openai-integration-linked-prompt-management.mdx b/content/changelog/2024-04-09-openai-integration-linked-prompt-management.mdx similarity index 100% rename from pages/changelog/2024-04-09-openai-integration-linked-prompt-management.mdx rename to content/changelog/2024-04-09-openai-integration-linked-prompt-management.mdx diff --git a/pages/changelog/2024-04-09-prompt-management-chatml.mdx b/content/changelog/2024-04-09-prompt-management-chatml.mdx similarity index 100% rename from pages/changelog/2024-04-09-prompt-management-chatml.mdx rename to content/changelog/2024-04-09-prompt-management-chatml.mdx diff --git a/pages/changelog/2024-04-10-ISO-27001-certification.mdx b/content/changelog/2024-04-10-ISO-27001-certification.mdx similarity index 100% rename from pages/changelog/2024-04-10-ISO-27001-certification.mdx rename to content/changelog/2024-04-10-ISO-27001-certification.mdx diff --git a/pages/changelog/2024-04-13-images-on-docker-hub.mdx b/content/changelog/2024-04-13-images-on-docker-hub.mdx similarity index 100% rename from pages/changelog/2024-04-13-images-on-docker-hub.mdx rename to content/changelog/2024-04-13-images-on-docker-hub.mdx diff --git a/pages/changelog/2024-04-21-openai-integration-JS-SDK.mdx b/content/changelog/2024-04-21-openai-integration-JS-SDK.mdx similarity index 100% rename from pages/changelog/2024-04-21-openai-integration-JS-SDK.mdx rename to content/changelog/2024-04-21-openai-integration-JS-SDK.mdx diff --git a/pages/changelog/2024-04-22-posthog-integration.mdx b/content/changelog/2024-04-22-posthog-integration.mdx similarity index 100% rename from pages/changelog/2024-04-22-posthog-integration.mdx rename to content/changelog/2024-04-22-posthog-integration.mdx diff --git a/pages/changelog/2024-04-23-prompt-playground.mdx b/content/changelog/2024-04-23-prompt-playground.mdx similarity index 100% rename from pages/changelog/2024-04-23-prompt-playground.mdx rename to content/changelog/2024-04-23-prompt-playground.mdx diff --git a/pages/changelog/2024-04-24-decorator.mdx b/content/changelog/2024-04-24-decorator.mdx similarity index 100% rename from pages/changelog/2024-04-24-decorator.mdx rename to content/changelog/2024-04-24-decorator.mdx diff --git a/pages/changelog/2024-04-25-datasets-v2.mdx b/content/changelog/2024-04-25-datasets-v2.mdx similarity index 100% rename from pages/changelog/2024-04-25-datasets-v2.mdx rename to content/changelog/2024-04-25-datasets-v2.mdx diff --git a/pages/changelog/2024-04-26-model-based-evaluation.mdx b/content/changelog/2024-04-26-model-based-evaluation.mdx similarity index 100% rename from pages/changelog/2024-04-26-model-based-evaluation.mdx rename to content/changelog/2024-04-26-model-based-evaluation.mdx diff --git a/pages/changelog/2024-04-30-SOC-2-Type-2-certification.mdx b/content/changelog/2024-04-30-SOC-2-Type-2-certification.mdx similarity index 100% rename from pages/changelog/2024-04-30-SOC-2-Type-2-certification.mdx rename to content/changelog/2024-04-30-SOC-2-Type-2-certification.mdx diff --git a/pages/changelog/2024-05-07-prompts-api-and-deployment-labels.mdx b/content/changelog/2024-05-07-prompts-api-and-deployment-labels.mdx similarity index 100% rename from pages/changelog/2024-05-07-prompts-api-and-deployment-labels.mdx rename to content/changelog/2024-05-07-prompts-api-and-deployment-labels.mdx diff --git a/pages/changelog/2024-05-14-openai-gpt-4o-playground-evals.mdx b/content/changelog/2024-05-14-openai-gpt-4o-playground-evals.mdx similarity index 100% rename from pages/changelog/2024-05-14-openai-gpt-4o-playground-evals.mdx rename to content/changelog/2024-05-14-openai-gpt-4o-playground-evals.mdx diff --git a/pages/changelog/2024-05-14-openai-gpt-4o.mdx b/content/changelog/2024-05-14-openai-gpt-4o.mdx similarity index 100% rename from pages/changelog/2024-05-14-openai-gpt-4o.mdx rename to content/changelog/2024-05-14-openai-gpt-4o.mdx diff --git a/pages/changelog/2024-05-16-mirascope-integration.mdx b/content/changelog/2024-05-16-mirascope-integration.mdx similarity index 100% rename from pages/changelog/2024-05-16-mirascope-integration.mdx rename to content/changelog/2024-05-16-mirascope-integration.mdx diff --git a/pages/changelog/2024-05-16-prompts-version-insights.mdx b/content/changelog/2024-05-16-prompts-version-insights.mdx similarity index 100% rename from pages/changelog/2024-05-16-prompts-version-insights.mdx rename to content/changelog/2024-05-16-prompts-version-insights.mdx diff --git a/pages/changelog/2024-05-16-sticky-headings.mdx b/content/changelog/2024-05-16-sticky-headings.mdx similarity index 100% rename from pages/changelog/2024-05-16-sticky-headings.mdx rename to content/changelog/2024-05-16-sticky-headings.mdx diff --git a/pages/changelog/2024-05-17-haystack-integration.mdx b/content/changelog/2024-05-17-haystack-integration.mdx similarity index 100% rename from pages/changelog/2024-05-17-haystack-integration.mdx rename to content/changelog/2024-05-17-haystack-integration.mdx diff --git a/pages/changelog/2024-05-23-dark-mode.mdx b/content/changelog/2024-05-23-dark-mode.mdx similarity index 100% rename from pages/changelog/2024-05-23-dark-mode.mdx rename to content/changelog/2024-05-23-dark-mode.mdx diff --git a/pages/changelog/2024-05-29-openai-assistants.mdx b/content/changelog/2024-05-29-openai-assistants.mdx similarity index 100% rename from pages/changelog/2024-05-29-openai-assistants.mdx rename to content/changelog/2024-05-29-openai-assistants.mdx diff --git a/pages/changelog/2024-06-05-annotation.mdx b/content/changelog/2024-06-05-annotation.mdx similarity index 100% rename from pages/changelog/2024-06-05-annotation.mdx rename to content/changelog/2024-06-05-annotation.mdx diff --git a/pages/changelog/2024-06-06-monitoring-llm-security-docs.mdx b/content/changelog/2024-06-06-monitoring-llm-security-docs.mdx similarity index 100% rename from pages/changelog/2024-06-06-monitoring-llm-security-docs.mdx rename to content/changelog/2024-06-06-monitoring-llm-security-docs.mdx diff --git a/pages/changelog/2024-06-10-update-indicator.mdx b/content/changelog/2024-06-10-update-indicator.mdx similarity index 100% rename from pages/changelog/2024-06-10-update-indicator.mdx rename to content/changelog/2024-06-10-update-indicator.mdx diff --git a/pages/changelog/2024-06-12-timeline-view.mdx b/content/changelog/2024-06-12-timeline-view.mdx similarity index 100% rename from pages/changelog/2024-06-12-timeline-view.mdx rename to content/changelog/2024-06-12-timeline-view.mdx diff --git a/pages/changelog/2024-06-26-dify-integration.mdx b/content/changelog/2024-06-26-dify-integration.mdx similarity index 100% rename from pages/changelog/2024-06-26-dify-integration.mdx rename to content/changelog/2024-06-26-dify-integration.mdx diff --git a/pages/changelog/2024-07-02-datasets-api-v2.mdx b/content/changelog/2024-07-02-datasets-api-v2.mdx similarity index 100% rename from pages/changelog/2024-07-02-datasets-api-v2.mdx rename to content/changelog/2024-07-02-datasets-api-v2.mdx diff --git a/pages/changelog/2024-07-03-models-api.mdx b/content/changelog/2024-07-03-models-api.mdx similarity index 100% rename from pages/changelog/2024-07-03-models-api.mdx rename to content/changelog/2024-07-03-models-api.mdx diff --git a/pages/changelog/2024-07-04-query-traces-via-sdks.mdx b/content/changelog/2024-07-04-query-traces-via-sdks.mdx similarity index 100% rename from pages/changelog/2024-07-04-query-traces-via-sdks.mdx rename to content/changelog/2024-07-04-query-traces-via-sdks.mdx diff --git a/pages/changelog/2024-07-11-non-numeric-scores-api.mdx b/content/changelog/2024-07-11-non-numeric-scores-api.mdx similarity index 100% rename from pages/changelog/2024-07-11-non-numeric-scores-api.mdx rename to content/changelog/2024-07-11-non-numeric-scores-api.mdx diff --git a/pages/changelog/2024-07-15-render-markdown-trace-preview.mdx b/content/changelog/2024-07-15-render-markdown-trace-preview.mdx similarity index 100% rename from pages/changelog/2024-07-15-render-markdown-trace-preview.mdx rename to content/changelog/2024-07-15-render-markdown-trace-preview.mdx diff --git a/pages/changelog/2024-07-18-openai-gpt-4o-mini.mdx b/content/changelog/2024-07-18-openai-gpt-4o-mini.mdx similarity index 100% rename from pages/changelog/2024-07-18-openai-gpt-4o-mini.mdx rename to content/changelog/2024-07-18-openai-gpt-4o-mini.mdx diff --git a/pages/changelog/2024-07-30-resizable-columns.mdx b/content/changelog/2024-07-30-resizable-columns.mdx similarity index 100% rename from pages/changelog/2024-07-30-resizable-columns.mdx rename to content/changelog/2024-07-30-resizable-columns.mdx diff --git a/pages/changelog/2024-08-02-vercel-ai-sdk-integration.mdx b/content/changelog/2024-08-02-vercel-ai-sdk-integration.mdx similarity index 100% rename from pages/changelog/2024-08-02-vercel-ai-sdk-integration.mdx rename to content/changelog/2024-08-02-vercel-ai-sdk-integration.mdx diff --git a/pages/changelog/2024-08-08-openai-structured-outputs.mdx b/content/changelog/2024-08-08-openai-structured-outputs.mdx similarity index 100% rename from pages/changelog/2024-08-08-openai-structured-outputs.mdx rename to content/changelog/2024-08-08-openai-structured-outputs.mdx diff --git a/pages/changelog/2024-08-13-organizations.mdx b/content/changelog/2024-08-13-organizations.mdx similarity index 100% rename from pages/changelog/2024-08-13-organizations.mdx rename to content/changelog/2024-08-13-organizations.mdx diff --git a/pages/changelog/2024-08-14-ui-customization.mdx b/content/changelog/2024-08-14-ui-customization.mdx similarity index 100% rename from pages/changelog/2024-08-14-ui-customization.mdx rename to content/changelog/2024-08-14-ui-customization.mdx diff --git a/pages/changelog/2024-08-15-deployment-as-porter-add-on.mdx b/content/changelog/2024-08-15-deployment-as-porter-add-on.mdx similarity index 100% rename from pages/changelog/2024-08-15-deployment-as-porter-add-on.mdx rename to content/changelog/2024-08-15-deployment-as-porter-add-on.mdx diff --git a/pages/changelog/2024-08-19-score-analytics.mdx b/content/changelog/2024-08-19-score-analytics.mdx similarity index 100% rename from pages/changelog/2024-08-19-score-analytics.mdx rename to content/changelog/2024-08-19-score-analytics.mdx diff --git a/pages/changelog/2024-08-20-comments.mdx b/content/changelog/2024-08-20-comments.mdx similarity index 100% rename from pages/changelog/2024-08-20-comments.mdx rename to content/changelog/2024-08-20-comments.mdx diff --git a/pages/changelog/2024-08-21-openai-multi-modal-traces.mdx b/content/changelog/2024-08-21-openai-multi-modal-traces.mdx similarity index 100% rename from pages/changelog/2024-08-21-openai-multi-modal-traces.mdx rename to content/changelog/2024-08-21-openai-multi-modal-traces.mdx diff --git a/pages/changelog/2024-09-04-headless-initialization-of-self-hosted-deployments.mdx b/content/changelog/2024-09-04-headless-initialization-of-self-hosted-deployments.mdx similarity index 100% rename from pages/changelog/2024-09-04-headless-initialization-of-self-hosted-deployments.mdx rename to content/changelog/2024-09-04-headless-initialization-of-self-hosted-deployments.mdx diff --git a/pages/changelog/2024-09-04-prompt-management-zero-latency.mdx b/content/changelog/2024-09-04-prompt-management-zero-latency.mdx similarity index 100% rename from pages/changelog/2024-09-04-prompt-management-zero-latency.mdx rename to content/changelog/2024-09-04-prompt-management-zero-latency.mdx diff --git a/pages/changelog/2024-09-13-custom-basepath-for-self-hosted-deployments.mdx b/content/changelog/2024-09-13-custom-basepath-for-self-hosted-deployments.mdx similarity index 100% rename from pages/changelog/2024-09-13-custom-basepath-for-self-hosted-deployments.mdx rename to content/changelog/2024-09-13-custom-basepath-for-self-hosted-deployments.mdx diff --git a/pages/changelog/2024-09-13-openai-o1-models.mdx b/content/changelog/2024-09-13-openai-o1-models.mdx similarity index 100% rename from pages/changelog/2024-09-13-openai-o1-models.mdx rename to content/changelog/2024-09-13-openai-o1-models.mdx diff --git a/pages/changelog/2024-09-17-prompt-linking-langchain.mdx b/content/changelog/2024-09-17-prompt-linking-langchain.mdx similarity index 100% rename from pages/changelog/2024-09-17-prompt-linking-langchain.mdx rename to content/changelog/2024-09-17-prompt-linking-langchain.mdx diff --git a/pages/changelog/2024-09-20-aws-marketplace.mdx b/content/changelog/2024-09-20-aws-marketplace.mdx similarity index 100% rename from pages/changelog/2024-09-20-aws-marketplace.mdx rename to content/changelog/2024-09-20-aws-marketplace.mdx diff --git a/pages/changelog/2024-09-20-dspy-integration-example.mdx b/content/changelog/2024-09-20-dspy-integration-example.mdx similarity index 100% rename from pages/changelog/2024-09-20-dspy-integration-example.mdx rename to content/changelog/2024-09-20-dspy-integration-example.mdx diff --git a/pages/changelog/2024-09-23-github-discussion-across-documentation.mdx b/content/changelog/2024-09-23-github-discussion-across-documentation.mdx similarity index 100% rename from pages/changelog/2024-09-23-github-discussion-across-documentation.mdx rename to content/changelog/2024-09-23-github-discussion-across-documentation.mdx diff --git a/pages/changelog/2024-10-10-annotation-queues.mdx b/content/changelog/2024-10-10-annotation-queues.mdx similarity index 100% rename from pages/changelog/2024-10-10-annotation-queues.mdx rename to content/changelog/2024-10-10-annotation-queues.mdx diff --git a/pages/changelog/2024-10-10-text-color-for-latency-and-costs.mdx b/content/changelog/2024-10-10-text-color-for-latency-and-costs.mdx similarity index 100% rename from pages/changelog/2024-10-10-text-color-for-latency-and-costs.mdx rename to content/changelog/2024-10-10-text-color-for-latency-and-costs.mdx diff --git a/pages/changelog/2024-10-11-bedrock-support-playground-evals.mdx b/content/changelog/2024-10-11-bedrock-support-playground-evals.mdx similarity index 100% rename from pages/changelog/2024-10-11-bedrock-support-playground-evals.mdx rename to content/changelog/2024-10-11-bedrock-support-playground-evals.mdx diff --git a/pages/changelog/2024-10-11-extended-eval-models.mdx b/content/changelog/2024-10-11-extended-eval-models.mdx similarity index 100% rename from pages/changelog/2024-10-11-extended-eval-models.mdx rename to content/changelog/2024-10-11-extended-eval-models.mdx diff --git a/pages/changelog/2024-10-25-input-output-masking.mdx b/content/changelog/2024-10-25-input-output-masking.mdx similarity index 100% rename from pages/changelog/2024-10-25-input-output-masking.mdx rename to content/changelog/2024-10-25-input-output-masking.mdx diff --git a/pages/changelog/2024-11-01-collapsible-sidebar.mdx b/content/changelog/2024-11-01-collapsible-sidebar.mdx similarity index 100% rename from pages/changelog/2024-11-01-collapsible-sidebar.mdx rename to content/changelog/2024-11-01-collapsible-sidebar.mdx diff --git a/pages/changelog/2024-11-17-llms-txt.mdx b/content/changelog/2024-11-17-llms-txt.mdx similarity index 100% rename from pages/changelog/2024-11-17-llms-txt.mdx rename to content/changelog/2024-11-17-llms-txt.mdx diff --git a/pages/changelog/2024-11-17-vercel-ai-sdk-prompt-mgmt.mdx b/content/changelog/2024-11-17-vercel-ai-sdk-prompt-mgmt.mdx similarity index 100% rename from pages/changelog/2024-11-17-vercel-ai-sdk-prompt-mgmt.mdx rename to content/changelog/2024-11-17-vercel-ai-sdk-prompt-mgmt.mdx diff --git a/pages/changelog/2024-11-18-dataset-runs-comparison-view.mdx b/content/changelog/2024-11-18-dataset-runs-comparison-view.mdx similarity index 100% rename from pages/changelog/2024-11-18-dataset-runs-comparison-view.mdx rename to content/changelog/2024-11-18-dataset-runs-comparison-view.mdx diff --git a/pages/changelog/2024-11-19-llm-as-a-judge-for-datasets.mdx b/content/changelog/2024-11-19-llm-as-a-judge-for-datasets.mdx similarity index 100% rename from pages/changelog/2024-11-19-llm-as-a-judge-for-datasets.mdx rename to content/changelog/2024-11-19-llm-as-a-judge-for-datasets.mdx diff --git a/pages/changelog/2024-11-20-full-multi-modal-images-audio-attachments.mdx b/content/changelog/2024-11-20-full-multi-modal-images-audio-attachments.mdx similarity index 100% rename from pages/changelog/2024-11-20-full-multi-modal-images-audio-attachments.mdx rename to content/changelog/2024-11-20-full-multi-modal-images-audio-attachments.mdx diff --git a/pages/changelog/2024-11-21-all-new-datasets-and-evals-documentation.mdx b/content/changelog/2024-11-21-all-new-datasets-and-evals-documentation.mdx similarity index 100% rename from pages/changelog/2024-11-21-all-new-datasets-and-evals-documentation.mdx rename to content/changelog/2024-11-21-all-new-datasets-and-evals-documentation.mdx diff --git a/pages/changelog/2024-11-22-prompt-experimentation.mdx b/content/changelog/2024-11-22-prompt-experimentation.mdx similarity index 100% rename from pages/changelog/2024-11-22-prompt-experimentation.mdx rename to content/changelog/2024-11-22-prompt-experimentation.mdx diff --git a/pages/changelog/2024-11-28-google-vertex-ai-support-playground-evals.mdx b/content/changelog/2024-11-28-google-vertex-ai-support-playground-evals.mdx similarity index 100% rename from pages/changelog/2024-11-28-google-vertex-ai-support-playground-evals.mdx rename to content/changelog/2024-11-28-google-vertex-ai-support-playground-evals.mdx diff --git a/pages/changelog/2024-12-02-tracing-docs-for-google-vertex-ai-and-gemini.mdx b/content/changelog/2024-12-02-tracing-docs-for-google-vertex-ai-and-gemini.mdx similarity index 100% rename from pages/changelog/2024-12-02-tracing-docs-for-google-vertex-ai-and-gemini.mdx rename to content/changelog/2024-12-02-tracing-docs-for-google-vertex-ai-and-gemini.mdx diff --git a/pages/changelog/2024-12-03-new-sso-providers-github-enterprise-and-keycloak.mdx b/content/changelog/2024-12-03-new-sso-providers-github-enterprise-and-keycloak.mdx similarity index 100% rename from pages/changelog/2024-12-03-new-sso-providers-github-enterprise-and-keycloak.mdx rename to content/changelog/2024-12-03-new-sso-providers-github-enterprise-and-keycloak.mdx diff --git a/pages/changelog/2024-12-04-extensive-end-to-end-example-for-js-ts.mdx b/content/changelog/2024-12-04-extensive-end-to-end-example-for-js-ts.mdx similarity index 100% rename from pages/changelog/2024-12-04-extensive-end-to-end-example-for-js-ts.mdx rename to content/changelog/2024-12-04-extensive-end-to-end-example-for-js-ts.mdx diff --git a/pages/changelog/2024-12-09-Langfuse-v3-stable-release.mdx b/content/changelog/2024-12-09-Langfuse-v3-stable-release.mdx similarity index 100% rename from pages/changelog/2024-12-09-Langfuse-v3-stable-release.mdx rename to content/changelog/2024-12-09-Langfuse-v3-stable-release.mdx diff --git a/pages/changelog/2024-12-20-improved-cost-tracking.mdx b/content/changelog/2024-12-20-improved-cost-tracking.mdx similarity index 100% rename from pages/changelog/2024-12-20-improved-cost-tracking.mdx rename to content/changelog/2024-12-20-improved-cost-tracking.mdx diff --git a/pages/changelog/2024-12-20-posthog-integration-GA.mdx b/content/changelog/2024-12-20-posthog-integration-GA.mdx similarity index 100% rename from pages/changelog/2024-12-20-posthog-integration-GA.mdx rename to content/changelog/2024-12-20-posthog-integration-GA.mdx diff --git a/pages/changelog/2025-01-21-audit-logs.mdx b/content/changelog/2025-01-21-audit-logs.mdx similarity index 100% rename from pages/changelog/2025-01-21-audit-logs.mdx rename to content/changelog/2025-01-21-audit-logs.mdx diff --git a/pages/changelog/2025-01-22-track-changes-between-prompt-versions.mdx b/content/changelog/2025-01-22-track-changes-between-prompt-versions.mdx similarity index 100% rename from pages/changelog/2025-01-22-track-changes-between-prompt-versions.mdx rename to content/changelog/2025-01-22-track-changes-between-prompt-versions.mdx diff --git a/pages/changelog/2025-01-23-LLM-calls-extra-headers.mdx b/content/changelog/2025-01-23-LLM-calls-extra-headers.mdx similarity index 100% rename from pages/changelog/2025-01-23-LLM-calls-extra-headers.mdx rename to content/changelog/2025-01-23-LLM-calls-extra-headers.mdx diff --git a/pages/changelog/2025-01-27-Dataset-Items-csv-upload.mdx b/content/changelog/2025-01-27-Dataset-Items-csv-upload.mdx similarity index 100% rename from pages/changelog/2025-01-27-Dataset-Items-csv-upload.mdx rename to content/changelog/2025-01-27-Dataset-Items-csv-upload.mdx diff --git a/pages/changelog/2025-01-28-prompt-commit-messages.mdx b/content/changelog/2025-01-28-prompt-commit-messages.mdx similarity index 100% rename from pages/changelog/2025-01-28-prompt-commit-messages.mdx rename to content/changelog/2025-01-28-prompt-commit-messages.mdx diff --git a/pages/changelog/2025-01-30-cmd-k-menu.mdx b/content/changelog/2025-01-30-cmd-k-menu.mdx similarity index 100% rename from pages/changelog/2025-01-30-cmd-k-menu.mdx rename to content/changelog/2025-01-30-cmd-k-menu.mdx diff --git a/pages/changelog/2025-01-30-data-retention.mdx b/content/changelog/2025-01-30-data-retention.mdx similarity index 100% rename from pages/changelog/2025-01-30-data-retention.mdx rename to content/changelog/2025-01-30-data-retention.mdx diff --git a/pages/changelog/2025-01-30-new-api-reference.mdx b/content/changelog/2025-01-30-new-api-reference.mdx similarity index 100% rename from pages/changelog/2025-01-30-new-api-reference.mdx rename to content/changelog/2025-01-30-new-api-reference.mdx diff --git a/pages/changelog/2025-01-30-new-prompt-editor.mdx b/content/changelog/2025-01-30-new-prompt-editor.mdx similarity index 100% rename from pages/changelog/2025-01-30-new-prompt-editor.mdx rename to content/changelog/2025-01-30-new-prompt-editor.mdx diff --git a/pages/changelog/2025-01-30-sampling-js-ts-sdk.mdx b/content/changelog/2025-01-30-sampling-js-ts-sdk.mdx similarity index 100% rename from pages/changelog/2025-01-30-sampling-js-ts-sdk.mdx rename to content/changelog/2025-01-30-sampling-js-ts-sdk.mdx diff --git a/pages/changelog/2025-01-31-o3-mini-support.mdx b/content/changelog/2025-01-31-o3-mini-support.mdx similarity index 100% rename from pages/changelog/2025-01-31-o3-mini-support.mdx rename to content/changelog/2025-01-31-o3-mini-support.mdx diff --git a/pages/changelog/2025-02-05-public-api-wrapper-sdks.mdx b/content/changelog/2025-02-05-public-api-wrapper-sdks.mdx similarity index 100% rename from pages/changelog/2025-02-05-public-api-wrapper-sdks.mdx rename to content/changelog/2025-02-05-public-api-wrapper-sdks.mdx diff --git a/pages/changelog/2025-02-06-gemini-2-support.mdx b/content/changelog/2025-02-06-gemini-2-support.mdx similarity index 100% rename from pages/changelog/2025-02-06-gemini-2-support.mdx rename to content/changelog/2025-02-06-gemini-2-support.mdx diff --git a/pages/changelog/2025-02-06-llm-as-a-judge-jsonpath.mdx b/content/changelog/2025-02-06-llm-as-a-judge-jsonpath.mdx similarity index 89% rename from pages/changelog/2025-02-06-llm-as-a-judge-jsonpath.mdx rename to content/changelog/2025-02-06-llm-as-a-judge-jsonpath.mdx index b6ee35b154..6d0b2852f5 100644 --- a/pages/changelog/2025-02-06-llm-as-a-judge-jsonpath.mdx +++ b/content/changelog/2025-02-06-llm-as-a-judge-jsonpath.mdx @@ -1,7 +1,7 @@ --- date: 2025-02-06 title: Use JsonPath to select from Input, Output, or Metadata values in LLM as a Judge -description: +description: Use JsonPath to select from Input, Output, or Metadata in LLM as a Judge for more precise evaluation prompts. author: Max ogImage: /images/changelog/2025-02-06-eval-config.png canonical: /docs/evaluation/evaluation-methods/llm-as-a-judge diff --git a/pages/changelog/2025-02-10-trace-log-level-filter.mdx b/content/changelog/2025-02-10-trace-log-level-filter.mdx similarity index 100% rename from pages/changelog/2025-02-10-trace-log-level-filter.mdx rename to content/changelog/2025-02-10-trace-log-level-filter.mdx diff --git a/pages/changelog/2025-02-11-tables-select-all.mdx b/content/changelog/2025-02-11-tables-select-all.mdx similarity index 100% rename from pages/changelog/2025-02-11-tables-select-all.mdx rename to content/changelog/2025-02-11-tables-select-all.mdx diff --git a/pages/changelog/2025-02-14-opentelemetry-tracing.mdx b/content/changelog/2025-02-14-opentelemetry-tracing.mdx similarity index 100% rename from pages/changelog/2025-02-14-opentelemetry-tracing.mdx rename to content/changelog/2025-02-14-opentelemetry-tracing.mdx diff --git a/pages/changelog/2025-02-14-oss-llmops-stack.mdx b/content/changelog/2025-02-14-oss-llmops-stack.mdx similarity index 100% rename from pages/changelog/2025-02-14-oss-llmops-stack.mdx rename to content/changelog/2025-02-14-oss-llmops-stack.mdx diff --git a/pages/changelog/2025-02-14-trace-graph-view.mdx b/content/changelog/2025-02-14-trace-graph-view.mdx similarity index 100% rename from pages/changelog/2025-02-14-trace-graph-view.mdx rename to content/changelog/2025-02-14-trace-graph-view.mdx diff --git a/pages/changelog/2025-02-16-mcp-server-update.mdx b/content/changelog/2025-02-16-mcp-server-update.mdx similarity index 100% rename from pages/changelog/2025-02-16-mcp-server-update.mdx rename to content/changelog/2025-02-16-mcp-server-update.mdx diff --git a/pages/changelog/2025-02-20-model-based-evals-on-history.mdx b/content/changelog/2025-02-20-model-based-evals-on-history.mdx similarity index 100% rename from pages/changelog/2025-02-20-model-based-evals-on-history.mdx rename to content/changelog/2025-02-20-model-based-evals-on-history.mdx diff --git a/pages/changelog/2025-02-25-claude-3-7-support.mdx b/content/changelog/2025-02-25-claude-3-7-support.mdx similarity index 100% rename from pages/changelog/2025-02-25-claude-3-7-support.mdx rename to content/changelog/2025-02-25-claude-3-7-support.mdx diff --git a/pages/changelog/2025-02-25-google-ai-studio-support.mdx b/content/changelog/2025-02-25-google-ai-studio-support.mdx similarity index 100% rename from pages/changelog/2025-02-25-google-ai-studio-support.mdx rename to content/changelog/2025-02-25-google-ai-studio-support.mdx diff --git a/pages/changelog/2025-02-26-in-product-onboarding-screens.mdx b/content/changelog/2025-02-26-in-product-onboarding-screens.mdx similarity index 100% rename from pages/changelog/2025-02-26-in-product-onboarding-screens.mdx rename to content/changelog/2025-02-26-in-product-onboarding-screens.mdx diff --git a/pages/changelog/2025-02-27-openai-gpt-4-5-support.mdx b/content/changelog/2025-02-27-openai-gpt-4-5-support.mdx similarity index 100% rename from pages/changelog/2025-02-27-openai-gpt-4-5-support.mdx rename to content/changelog/2025-02-27-openai-gpt-4-5-support.mdx diff --git a/pages/changelog/2025-03-03-langfuse-java-client.mdx b/content/changelog/2025-03-03-langfuse-java-client.mdx similarity index 100% rename from pages/changelog/2025-03-03-langfuse-java-client.mdx rename to content/changelog/2025-03-03-langfuse-java-client.mdx diff --git a/pages/changelog/2025-03-04-dataset-deletion-of-items-and-runs.mdx b/content/changelog/2025-03-04-dataset-deletion-of-items-and-runs.mdx similarity index 100% rename from pages/changelog/2025-03-04-dataset-deletion-of-items-and-runs.mdx rename to content/changelog/2025-03-04-dataset-deletion-of-items-and-runs.mdx diff --git a/pages/changelog/2025-03-04-dataset-items-duplicate-and-add-to-many.mdx b/content/changelog/2025-03-04-dataset-items-duplicate-and-add-to-many.mdx similarity index 100% rename from pages/changelog/2025-03-04-dataset-items-duplicate-and-add-to-many.mdx rename to content/changelog/2025-03-04-dataset-items-duplicate-and-add-to-many.mdx diff --git a/pages/changelog/2025-03-05-workos-idp.mdx b/content/changelog/2025-03-05-workos-idp.mdx similarity index 100% rename from pages/changelog/2025-03-05-workos-idp.mdx rename to content/changelog/2025-03-05-workos-idp.mdx diff --git a/pages/changelog/2025-03-06-native-environments.mdx b/content/changelog/2025-03-06-native-environments.mdx similarity index 100% rename from pages/changelog/2025-03-06-native-environments.mdx rename to content/changelog/2025-03-06-native-environments.mdx diff --git a/pages/changelog/2025-03-12-prompt-composability.mdx b/content/changelog/2025-03-12-prompt-composability.mdx similarity index 100% rename from pages/changelog/2025-03-12-prompt-composability.mdx rename to content/changelog/2025-03-12-prompt-composability.mdx diff --git a/pages/changelog/2025-03-13-batch-export-scores-ui.mdx b/content/changelog/2025-03-13-batch-export-scores-ui.mdx similarity index 100% rename from pages/changelog/2025-03-13-batch-export-scores-ui.mdx rename to content/changelog/2025-03-13-batch-export-scores-ui.mdx diff --git a/pages/changelog/2025-03-13-public-api-annotation-queues.mdx b/content/changelog/2025-03-13-public-api-annotation-queues.mdx similarity index 100% rename from pages/changelog/2025-03-13-public-api-annotation-queues.mdx rename to content/changelog/2025-03-13-public-api-annotation-queues.mdx diff --git a/pages/changelog/2025-03-17-openai-response-api-support.mdx b/content/changelog/2025-03-17-openai-response-api-support.mdx similarity index 100% rename from pages/changelog/2025-03-17-openai-response-api-support.mdx rename to content/changelog/2025-03-17-openai-response-api-support.mdx diff --git a/pages/changelog/2025-03-19-new-prompt-view.mdx b/content/changelog/2025-03-19-new-prompt-view.mdx similarity index 100% rename from pages/changelog/2025-03-19-new-prompt-view.mdx rename to content/changelog/2025-03-19-new-prompt-view.mdx diff --git a/pages/changelog/2025-03-19-new-trace-view.mdx b/content/changelog/2025-03-19-new-trace-view.mdx similarity index 100% rename from pages/changelog/2025-03-19-new-trace-view.mdx rename to content/changelog/2025-03-19-new-trace-view.mdx diff --git a/pages/changelog/2025-03-21-table-peek-view.mdx b/content/changelog/2025-03-21-table-peek-view.mdx similarity index 100% rename from pages/changelog/2025-03-21-table-peek-view.mdx rename to content/changelog/2025-03-21-table-peek-view.mdx diff --git a/pages/changelog/2025-03-28-tool-calling-structured-output-playground.mdx b/content/changelog/2025-03-28-tool-calling-structured-output-playground.mdx similarity index 100% rename from pages/changelog/2025-03-28-tool-calling-structured-output-playground.mdx rename to content/changelog/2025-03-28-tool-calling-structured-output-playground.mdx diff --git a/pages/changelog/2025-03-31-gemini-2.5-pro-exp-support.mdx b/content/changelog/2025-03-31-gemini-2.5-pro-exp-support.mdx similarity index 100% rename from pages/changelog/2025-03-31-gemini-2.5-pro-exp-support.mdx rename to content/changelog/2025-03-31-gemini-2.5-pro-exp-support.mdx diff --git a/pages/changelog/2025-04-02-protected-prompt-labels.mdx b/content/changelog/2025-04-02-protected-prompt-labels.mdx similarity index 100% rename from pages/changelog/2025-04-02-protected-prompt-labels.mdx rename to content/changelog/2025-04-02-protected-prompt-labels.mdx diff --git a/pages/changelog/2025-04-15-4.1-support.mdx b/content/changelog/2025-04-15-4.1-support.mdx similarity index 100% rename from pages/changelog/2025-04-15-4.1-support.mdx rename to content/changelog/2025-04-15-4.1-support.mdx diff --git a/pages/changelog/2025-04-15-admin-apis.mdx b/content/changelog/2025-04-15-admin-apis.mdx similarity index 100% rename from pages/changelog/2025-04-15-admin-apis.mdx rename to content/changelog/2025-04-15-admin-apis.mdx diff --git a/pages/changelog/2025-04-16-o3-o4-mini-support.mdx b/content/changelog/2025-04-16-o3-o4-mini-support.mdx similarity index 100% rename from pages/changelog/2025-04-16-o3-o4-mini-support.mdx rename to content/changelog/2025-04-16-o3-o4-mini-support.mdx diff --git a/pages/changelog/2025-04-17-copy-as-markdown.mdx b/content/changelog/2025-04-17-copy-as-markdown.mdx similarity index 100% rename from pages/changelog/2025-04-17-copy-as-markdown.mdx rename to content/changelog/2025-04-17-copy-as-markdown.mdx diff --git a/pages/changelog/2025-04-28-session-level-scores.mdx b/content/changelog/2025-04-28-session-level-scores.mdx similarity index 100% rename from pages/changelog/2025-04-28-session-level-scores.mdx rename to content/changelog/2025-04-28-session-level-scores.mdx diff --git a/pages/changelog/2025-05-07-run-level-scores.mdx b/content/changelog/2025-05-07-run-level-scores.mdx similarity index 100% rename from pages/changelog/2025-05-07-run-level-scores.mdx rename to content/changelog/2025-05-07-run-level-scores.mdx diff --git a/pages/changelog/2025-05-12-custom-metrics-api.mdx b/content/changelog/2025-05-12-custom-metrics-api.mdx similarity index 100% rename from pages/changelog/2025-05-12-custom-metrics-api.mdx rename to content/changelog/2025-05-12-custom-metrics-api.mdx diff --git a/pages/changelog/2025-05-15-product-module-visibility.mdx b/content/changelog/2025-05-15-product-module-visibility.mdx similarity index 100% rename from pages/changelog/2025-05-15-product-module-visibility.mdx rename to content/changelog/2025-05-15-product-module-visibility.mdx diff --git a/pages/changelog/2025-05-19-full-text-search.mdx b/content/changelog/2025-05-19-full-text-search.mdx similarity index 100% rename from pages/changelog/2025-05-19-full-text-search.mdx rename to content/changelog/2025-05-19-full-text-search.mdx diff --git a/pages/changelog/2025-05-20-save-table-views.mdx b/content/changelog/2025-05-20-save-table-views.mdx similarity index 100% rename from pages/changelog/2025-05-20-save-table-views.mdx rename to content/changelog/2025-05-20-save-table-views.mdx diff --git a/pages/changelog/2025-05-21-custom-dashboards.mdx b/content/changelog/2025-05-21-custom-dashboards.mdx similarity index 100% rename from pages/changelog/2025-05-21-custom-dashboards.mdx rename to content/changelog/2025-05-21-custom-dashboards.mdx diff --git a/pages/changelog/2025-05-22-claude-4-support.mdx b/content/changelog/2025-05-22-claude-4-support.mdx similarity index 100% rename from pages/changelog/2025-05-22-claude-4-support.mdx rename to content/changelog/2025-05-22-claude-4-support.mdx diff --git a/pages/changelog/2025-05-22-terraform-modules.mdx b/content/changelog/2025-05-22-terraform-modules.mdx similarity index 100% rename from pages/changelog/2025-05-22-terraform-modules.mdx rename to content/changelog/2025-05-22-terraform-modules.mdx diff --git a/pages/changelog/2025-05-23-otel-based-python-sdk.mdx b/content/changelog/2025-05-23-otel-based-python-sdk.mdx similarity index 100% rename from pages/changelog/2025-05-23-otel-based-python-sdk.mdx rename to content/changelog/2025-05-23-otel-based-python-sdk.mdx diff --git a/pages/changelog/2025-05-24-langfuse-evaluator-library.mdx b/content/changelog/2025-05-24-langfuse-evaluator-library.mdx similarity index 100% rename from pages/changelog/2025-05-24-langfuse-evaluator-library.mdx rename to content/changelog/2025-05-24-langfuse-evaluator-library.mdx diff --git a/pages/changelog/2025-05-29-pipecat-integration.mdx b/content/changelog/2025-05-29-pipecat-integration.mdx similarity index 100% rename from pages/changelog/2025-05-29-pipecat-integration.mdx rename to content/changelog/2025-05-29-pipecat-integration.mdx diff --git a/pages/changelog/2025-06-04-open-sourcing-langfuse.mdx b/content/changelog/2025-06-04-open-sourcing-langfuse.mdx similarity index 100% rename from pages/changelog/2025-06-04-open-sourcing-langfuse.mdx rename to content/changelog/2025-06-04-open-sourcing-langfuse.mdx diff --git a/pages/changelog/2025-06-05-python-sdk-v3-generally-available.mdx b/content/changelog/2025-06-05-python-sdk-v3-generally-available.mdx similarity index 100% rename from pages/changelog/2025-06-05-python-sdk-v3-generally-available.mdx rename to content/changelog/2025-06-05-python-sdk-v3-generally-available.mdx diff --git a/pages/changelog/2025-06-10-o3-pro-support.mdx b/content/changelog/2025-06-10-o3-pro-support.mdx similarity index 100% rename from pages/changelog/2025-06-10-o3-pro-support.mdx rename to content/changelog/2025-06-10-o3-pro-support.mdx diff --git a/pages/changelog/2025-06-16-prompt-management-folders.mdx b/content/changelog/2025-06-16-prompt-management-folders.mdx similarity index 100% rename from pages/changelog/2025-06-16-prompt-management-folders.mdx rename to content/changelog/2025-06-16-prompt-management-folders.mdx diff --git a/pages/changelog/2025-06-17-csv-download-dashboard-charts.mdx b/content/changelog/2025-06-17-csv-download-dashboard-charts.mdx similarity index 100% rename from pages/changelog/2025-06-17-csv-download-dashboard-charts.mdx rename to content/changelog/2025-06-17-csv-download-dashboard-charts.mdx diff --git a/pages/changelog/2025-06-23-exports-datasets-audit-logs.mdx b/content/changelog/2025-06-23-exports-datasets-audit-logs.mdx similarity index 100% rename from pages/changelog/2025-06-23-exports-datasets-audit-logs.mdx rename to content/changelog/2025-06-23-exports-datasets-audit-logs.mdx diff --git a/pages/changelog/2025-06-27-improved-json-handling-langchain-prompts.mdx b/content/changelog/2025-06-27-improved-json-handling-langchain-prompts.mdx similarity index 100% rename from pages/changelog/2025-06-27-improved-json-handling-langchain-prompts.mdx rename to content/changelog/2025-06-27-improved-json-handling-langchain-prompts.mdx diff --git a/pages/changelog/2025-06-28-agentic-onboarding-and-docs-mcp.mdx b/content/changelog/2025-06-28-agentic-onboarding-and-docs-mcp.mdx similarity index 100% rename from pages/changelog/2025-06-28-agentic-onboarding-and-docs-mcp.mdx rename to content/changelog/2025-06-28-agentic-onboarding-and-docs-mcp.mdx diff --git a/pages/changelog/2025-06-30-histogram-charts-custom-dashboards.mdx b/content/changelog/2025-06-30-histogram-charts-custom-dashboards.mdx similarity index 100% rename from pages/changelog/2025-06-30-histogram-charts-custom-dashboards.mdx rename to content/changelog/2025-06-30-histogram-charts-custom-dashboards.mdx diff --git a/pages/changelog/2025-07-01-pivot-tables-custom-dashboards.mdx b/content/changelog/2025-07-01-pivot-tables-custom-dashboards.mdx similarity index 100% rename from pages/changelog/2025-07-01-pivot-tables-custom-dashboards.mdx rename to content/changelog/2025-07-01-pivot-tables-custom-dashboards.mdx diff --git a/pages/changelog/2025-07-01-search-for-prompts.mdx b/content/changelog/2025-07-01-search-for-prompts.mdx similarity index 100% rename from pages/changelog/2025-07-01-search-for-prompts.mdx rename to content/changelog/2025-07-01-search-for-prompts.mdx diff --git a/pages/changelog/2025-07-02-prompt-management-placeholders.mdx b/content/changelog/2025-07-02-prompt-management-placeholders.mdx similarity index 100% rename from pages/changelog/2025-07-02-prompt-management-placeholders.mdx rename to content/changelog/2025-07-02-prompt-management-placeholders.mdx diff --git a/pages/changelog/2025-07-03-gemini-2.5-support.mdx b/content/changelog/2025-07-03-gemini-2.5-support.mdx similarity index 100% rename from pages/changelog/2025-07-03-gemini-2.5-support.mdx rename to content/changelog/2025-07-03-gemini-2.5-support.mdx diff --git a/pages/changelog/2025-07-06-n8n-node-for-langfuse-prompts.mdx b/content/changelog/2025-07-06-n8n-node-for-langfuse-prompts.mdx similarity index 100% rename from pages/changelog/2025-07-06-n8n-node-for-langfuse-prompts.mdx rename to content/changelog/2025-07-06-n8n-node-for-langfuse-prompts.mdx diff --git a/pages/changelog/2025-07-11-prompt-version-webhooks.mdx b/content/changelog/2025-07-11-prompt-version-webhooks.mdx similarity index 100% rename from pages/changelog/2025-07-11-prompt-version-webhooks.mdx rename to content/changelog/2025-07-11-prompt-version-webhooks.mdx diff --git a/pages/changelog/2025-07-18-aws-sdk-default-credential-provider.mdx b/content/changelog/2025-07-18-aws-sdk-default-credential-provider.mdx similarity index 100% rename from pages/changelog/2025-07-18-aws-sdk-default-credential-provider.mdx rename to content/changelog/2025-07-18-aws-sdk-default-credential-provider.mdx diff --git a/pages/changelog/2025-07-22-full-text-search-for-prompts.mdx b/content/changelog/2025-07-22-full-text-search-for-prompts.mdx similarity index 100% rename from pages/changelog/2025-07-22-full-text-search-for-prompts.mdx rename to content/changelog/2025-07-22-full-text-search-for-prompts.mdx diff --git a/pages/changelog/2025-07-24-remote-experiment-triggers.mdx b/content/changelog/2025-07-24-remote-experiment-triggers.mdx similarity index 100% rename from pages/changelog/2025-07-24-remote-experiment-triggers.mdx rename to content/changelog/2025-07-24-remote-experiment-triggers.mdx diff --git a/pages/changelog/2025-07-25-livekit-integration.mdx b/content/changelog/2025-07-25-livekit-integration.mdx similarity index 100% rename from pages/changelog/2025-07-25-livekit-integration.mdx rename to content/changelog/2025-07-25-livekit-integration.mdx diff --git a/pages/changelog/2025-07-28-playground-side-by-side.mdx b/content/changelog/2025-07-28-playground-side-by-side.mdx similarity index 100% rename from pages/changelog/2025-07-28-playground-side-by-side.mdx rename to content/changelog/2025-07-28-playground-side-by-side.mdx diff --git a/pages/changelog/2025-07-28-sessions-in-annotation-queues.mdx b/content/changelog/2025-07-28-sessions-in-annotation-queues.mdx similarity index 100% rename from pages/changelog/2025-07-28-sessions-in-annotation-queues.mdx rename to content/changelog/2025-07-28-sessions-in-annotation-queues.mdx diff --git a/pages/changelog/2025-07-30-slack-prompt-notifications.mdx b/content/changelog/2025-07-30-slack-prompt-notifications.mdx similarity index 100% rename from pages/changelog/2025-07-30-slack-prompt-notifications.mdx rename to content/changelog/2025-07-30-slack-prompt-notifications.mdx diff --git a/pages/changelog/2025-08-07-annotation-queue-assignments.mdx b/content/changelog/2025-08-07-annotation-queue-assignments.mdx similarity index 100% rename from pages/changelog/2025-08-07-annotation-queue-assignments.mdx rename to content/changelog/2025-08-07-annotation-queue-assignments.mdx diff --git a/pages/changelog/2025-08-07-markdown-endpoints-and-copy-button.mdx b/content/changelog/2025-08-07-markdown-endpoints-and-copy-button.mdx similarity index 100% rename from pages/changelog/2025-08-07-markdown-endpoints-and-copy-button.mdx rename to content/changelog/2025-08-07-markdown-endpoints-and-copy-button.mdx diff --git a/pages/changelog/2025-08-08-openai-pricing-availability.mdx b/content/changelog/2025-08-08-openai-pricing-availability.mdx similarity index 100% rename from pages/changelog/2025-08-08-openai-pricing-availability.mdx rename to content/changelog/2025-08-08-openai-pricing-availability.mdx diff --git a/pages/changelog/2025-08-14-llm-calls-provider-options.mdx b/content/changelog/2025-08-14-llm-calls-provider-options.mdx similarity index 100% rename from pages/changelog/2025-08-14-llm-calls-provider-options.mdx rename to content/changelog/2025-08-14-llm-calls-provider-options.mdx diff --git a/pages/changelog/2025-08-25-full-text-search-for-dataset-items.mdx b/content/changelog/2025-08-25-full-text-search-for-dataset-items.mdx similarity index 100% rename from pages/changelog/2025-08-25-full-text-search-for-dataset-items.mdx rename to content/changelog/2025-08-25-full-text-search-for-dataset-items.mdx diff --git a/pages/changelog/2025-08-26-new-end-to-end-walkthrough.mdx b/content/changelog/2025-08-26-new-end-to-end-walkthrough.mdx similarity index 100% rename from pages/changelog/2025-08-26-new-end-to-end-walkthrough.mdx rename to content/changelog/2025-08-26-new-end-to-end-walkthrough.mdx diff --git a/pages/changelog/2025-08-27-enhanced-observation-types.mdx b/content/changelog/2025-08-27-enhanced-observation-types.mdx similarity index 100% rename from pages/changelog/2025-08-27-enhanced-observation-types.mdx rename to content/changelog/2025-08-27-enhanced-observation-types.mdx diff --git a/pages/changelog/2025-08-28-typescript-sdk-v4-ga.mdx b/content/changelog/2025-08-28-typescript-sdk-v4-ga.mdx similarity index 100% rename from pages/changelog/2025-08-28-typescript-sdk-v4-ga.mdx rename to content/changelog/2025-08-28-typescript-sdk-v4-ga.mdx diff --git a/pages/changelog/2025-09-17-experiment-runner-sdk.mdx b/content/changelog/2025-09-17-experiment-runner-sdk.mdx similarity index 100% rename from pages/changelog/2025-09-17-experiment-runner-sdk.mdx rename to content/changelog/2025-09-17-experiment-runner-sdk.mdx diff --git a/pages/changelog/2025-09-29-score-config-updates.mdx b/content/changelog/2025-09-29-score-config-updates.mdx similarity index 100% rename from pages/changelog/2025-09-29-score-config-updates.mdx rename to content/changelog/2025-09-29-score-config-updates.mdx diff --git a/pages/changelog/2025-09-30-natural-language-filters.mdx b/content/changelog/2025-09-30-natural-language-filters.mdx similarity index 100% rename from pages/changelog/2025-09-30-natural-language-filters.mdx rename to content/changelog/2025-09-30-natural-language-filters.mdx diff --git a/pages/changelog/2025-09-30-structured-output-experiments.mdx b/content/changelog/2025-09-30-structured-output-experiments.mdx similarity index 100% rename from pages/changelog/2025-09-30-structured-output-experiments.mdx rename to content/changelog/2025-09-30-structured-output-experiments.mdx diff --git a/pages/changelog/2025-10-10-spend-alerts.mdx b/content/changelog/2025-10-10-spend-alerts.mdx similarity index 100% rename from pages/changelog/2025-10-10-spend-alerts.mdx rename to content/changelog/2025-10-10-spend-alerts.mdx diff --git a/pages/changelog/2025-10-16-llm-as-a-judge-execution-tracing.mdx b/content/changelog/2025-10-16-llm-as-a-judge-execution-tracing.mdx similarity index 100% rename from pages/changelog/2025-10-16-llm-as-a-judge-execution-tracing.mdx rename to content/changelog/2025-10-16-llm-as-a-judge-execution-tracing.mdx diff --git a/pages/changelog/2025-10-23-annotate-from-compare-view.mdx b/content/changelog/2025-10-23-annotate-from-compare-view.mdx similarity index 100% rename from pages/changelog/2025-10-23-annotate-from-compare-view.mdx rename to content/changelog/2025-10-23-annotate-from-compare-view.mdx diff --git a/pages/changelog/2025-10-26-langchain-v1-support.mdx b/content/changelog/2025-10-26-langchain-v1-support.mdx similarity index 100% rename from pages/changelog/2025-10-26-langchain-v1-support.mdx rename to content/changelog/2025-10-26-langchain-v1-support.mdx diff --git a/pages/changelog/2025-10-27-dataset-folders.mdx b/content/changelog/2025-10-27-dataset-folders.mdx similarity index 100% rename from pages/changelog/2025-10-27-dataset-folders.mdx rename to content/changelog/2025-10-27-dataset-folders.mdx diff --git a/pages/changelog/2025-11-03-advanced-filtering-traces-and-observations-api.mdx b/content/changelog/2025-11-03-advanced-filtering-traces-and-observations-api.mdx similarity index 100% rename from pages/changelog/2025-11-03-advanced-filtering-traces-and-observations-api.mdx rename to content/changelog/2025-11-03-advanced-filtering-traces-and-observations-api.mdx diff --git a/pages/changelog/2025-11-03-filter-sidebar-for-tables.mdx b/content/changelog/2025-11-03-filter-sidebar-for-tables.mdx similarity index 100% rename from pages/changelog/2025-11-03-filter-sidebar-for-tables.mdx rename to content/changelog/2025-11-03-filter-sidebar-for-tables.mdx diff --git a/pages/changelog/2025-11-04-amazon-bedrock-agentcore-integration.mdx b/content/changelog/2025-11-04-amazon-bedrock-agentcore-integration.mdx similarity index 100% rename from pages/changelog/2025-11-04-amazon-bedrock-agentcore-integration.mdx rename to content/changelog/2025-11-04-amazon-bedrock-agentcore-integration.mdx diff --git a/pages/changelog/2025-11-04-comment-mentions-and-reactions.mdx b/content/changelog/2025-11-04-comment-mentions-and-reactions.mdx similarity index 100% rename from pages/changelog/2025-11-04-comment-mentions-and-reactions.mdx rename to content/changelog/2025-11-04-comment-mentions-and-reactions.mdx diff --git a/pages/changelog/2025-11-04-idp-initiated-sso.mdx b/content/changelog/2025-11-04-idp-initiated-sso.mdx similarity index 100% rename from pages/changelog/2025-11-04-idp-initiated-sso.mdx rename to content/changelog/2025-11-04-idp-initiated-sso.mdx diff --git a/pages/changelog/2025-11-04-mixpanel-integration.mdx b/content/changelog/2025-11-04-mixpanel-integration.mdx similarity index 100% rename from pages/changelog/2025-11-04-mixpanel-integration.mdx rename to content/changelog/2025-11-04-mixpanel-integration.mdx diff --git a/pages/changelog/2025-11-05-langfuse-for-agents.mdx b/content/changelog/2025-11-05-langfuse-for-agents.mdx similarity index 100% rename from pages/changelog/2025-11-05-langfuse-for-agents.mdx rename to content/changelog/2025-11-05-langfuse-for-agents.mdx diff --git a/pages/changelog/2025-11-06-compare-view-baseline-support.mdx b/content/changelog/2025-11-06-compare-view-baseline-support.mdx similarity index 100% rename from pages/changelog/2025-11-06-compare-view-baseline-support.mdx rename to content/changelog/2025-11-06-compare-view-baseline-support.mdx diff --git a/pages/changelog/2025-11-06-dataset-schema-enforcement.mdx b/content/changelog/2025-11-06-dataset-schema-enforcement.mdx similarity index 100% rename from pages/changelog/2025-11-06-dataset-schema-enforcement.mdx rename to content/changelog/2025-11-06-dataset-schema-enforcement.mdx diff --git a/pages/changelog/2025-11-07-compare-view-filters.mdx b/content/changelog/2025-11-07-compare-view-filters.mdx similarity index 100% rename from pages/changelog/2025-11-07-compare-view-filters.mdx rename to content/changelog/2025-11-07-compare-view-filters.mdx diff --git a/pages/changelog/2025-11-07-score-analytics-multi-score-comparison.mdx b/content/changelog/2025-11-07-score-analytics-multi-score-comparison.mdx similarity index 100% rename from pages/changelog/2025-11-07-score-analytics-multi-score-comparison.mdx rename to content/changelog/2025-11-07-score-analytics-multi-score-comparison.mdx diff --git a/pages/changelog/2025-11-14-openai-gpt-5-1-support.mdx b/content/changelog/2025-11-14-openai-gpt-5-1-support.mdx similarity index 100% rename from pages/changelog/2025-11-14-openai-gpt-5-1-support.mdx rename to content/changelog/2025-11-14-openai-gpt-5-1-support.mdx diff --git a/pages/changelog/2025-11-20-native-mcp-server.mdx b/content/changelog/2025-11-20-native-mcp-server.mdx similarity index 100% rename from pages/changelog/2025-11-20-native-mcp-server.mdx rename to content/changelog/2025-11-20-native-mcp-server.mdx diff --git a/pages/changelog/2025-12-02-model-pricing-tiers.mdx b/content/changelog/2025-12-02-model-pricing-tiers.mdx similarity index 100% rename from pages/changelog/2025-12-02-model-pricing-tiers.mdx rename to content/changelog/2025-12-02-model-pricing-tiers.mdx diff --git a/pages/changelog/2025-12-11-batch-add-observations-to-dataset.mdx b/content/changelog/2025-12-11-batch-add-observations-to-dataset.mdx similarity index 100% rename from pages/changelog/2025-12-11-batch-add-observations-to-dataset.mdx rename to content/changelog/2025-12-11-batch-add-observations-to-dataset.mdx diff --git a/pages/changelog/2025-12-12-openai-gpt-5-2-support.mdx b/content/changelog/2025-12-12-openai-gpt-5-2-support.mdx similarity index 100% rename from pages/changelog/2025-12-12-openai-gpt-5-2-support.mdx rename to content/changelog/2025-12-12-openai-gpt-5-2-support.mdx diff --git a/pages/changelog/2025-12-15-dataset-versioning.mdx b/content/changelog/2025-12-15-dataset-versioning.mdx similarity index 100% rename from pages/changelog/2025-12-15-dataset-versioning.mdx rename to content/changelog/2025-12-15-dataset-versioning.mdx diff --git a/pages/changelog/2025-12-17-v2-metrics-and-observations-api.mdx b/content/changelog/2025-12-17-v2-metrics-and-observations-api.mdx similarity index 100% rename from pages/changelog/2025-12-17-v2-metrics-and-observations-api.mdx rename to content/changelog/2025-12-17-v2-metrics-and-observations-api.mdx diff --git a/pages/changelog/2025-12-22-tool-calls-filtering-visualization.mdx b/content/changelog/2025-12-22-tool-calls-filtering-visualization.mdx similarity index 100% rename from pages/changelog/2025-12-22-tool-calls-filtering-visualization.mdx rename to content/changelog/2025-12-22-tool-calls-filtering-visualization.mdx diff --git a/pages/changelog/2026-01-07-inline-comments-on-trace-io.mdx b/content/changelog/2026-01-07-inline-comments-on-trace-io.mdx similarity index 100% rename from pages/changelog/2026-01-07-inline-comments-on-trace-io.mdx rename to content/changelog/2026-01-07-inline-comments-on-trace-io.mdx diff --git a/pages/changelog/2026-01-14-corrected-outputs.mdx b/content/changelog/2026-01-14-corrected-outputs.mdx similarity index 100% rename from pages/changelog/2026-01-14-corrected-outputs.mdx rename to content/changelog/2026-01-14-corrected-outputs.mdx diff --git a/pages/changelog/2026-02-11-versioned-dataset-experiments.mdx b/content/changelog/2026-02-11-versioned-dataset-experiments.mdx similarity index 100% rename from pages/changelog/2026-02-11-versioned-dataset-experiments.mdx rename to content/changelog/2026-02-11-versioned-dataset-experiments.mdx diff --git a/pages/changelog/2026-02-13-observation-level-evals.mdx b/content/changelog/2026-02-13-observation-level-evals.mdx similarity index 100% rename from pages/changelog/2026-02-13-observation-level-evals.mdx rename to content/changelog/2026-02-13-observation-level-evals.mdx diff --git a/pages/changelog/2026-02-17-langfuse-cli.mdx b/content/changelog/2026-02-17-langfuse-cli.mdx similarity index 100% rename from pages/changelog/2026-02-17-langfuse-cli.mdx rename to content/changelog/2026-02-17-langfuse-cli.mdx diff --git a/content/changelog/meta.json b/content/changelog/meta.json new file mode 100644 index 0000000000..9f1ad2b121 --- /dev/null +++ b/content/changelog/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Changelog", + "pages": [ + "theme" + ] +} diff --git a/pages/users/canva.mdx b/content/customers/canva.mdx similarity index 86% rename from pages/users/canva.mdx rename to content/customers/canva.mdx index b0358eeec4..e9432593c8 100644 --- a/pages/users/canva.mdx +++ b/content/customers/canva.mdx @@ -2,7 +2,7 @@ title: "How Canva built an Agentic Support Experience using Langfuse" date: January 12, 2026 description: Learn how Canva's 4-person ML team built an AI support experience surpassing all baseline evaluation targets, powered by Langfuse observability across Java and Python stacks. -ogImage: +ogImage: tag: customer-story author: Felix customerLogo: "/images/customers/canva/Canva-color.png" @@ -37,14 +37,15 @@ Canva is building on Langfuse to develop and operate their customer support agen The core evolves around the in-app chat (Help Assistant) and an asynchronous ticket resolution agent (Omni Agent). <Frame fullWidth> - ![Screenshot of Canva's Support Agent](/images/customers/canva/multi-agent-support-system.png) + ![Screenshot of Canva's Support + Agent](/images/customers/canva/multi-agent-support-system.png) </Frame> **Help Assistant:** The Help Assistant is the user-facing chat panel that handles the majority of support volume. When a user opens the help interface, their query gets routed to specialized sub-agents: -* Design assistance - “How do I remove a background?” -* Account actions - Refunds, subscription changes -* Feature requests - Routed to bug lists and roadmaps +- Design assistance - “How do I remove a background?” +- Account actions - Refunds, subscription changes +- Feature requests - Routed to bug lists and roadmaps **OmniAgent:** OmniAgent is a more sophisticated system that works asynchronously on submitted tickets. It interfaces with users through the Help Assistant or e-mail. If OmniAgent can’t resolve the ticket, it escalates to human support. @@ -52,9 +53,9 @@ The core evolves around the in-app chat (Help Assistant) and an asynchronous tic ## Two Stacks, one Platform -Canva's multi-language architecture made handling different tech stacks a core requirement for their LLM operations platform. +Canva's multi-language architecture made handling different tech stacks a core requirement for their LLM operations platform. -**Help Assistant runs on Java**, the backbone of much of Canva's infrastructure. The team integrated via [OpenTelemetry](/integrations/native/opentelemetry), which doesn't lock them into a single observability solution. +**Help Assistant runs on Java**, the backbone of much of Canva's infrastructure. The team integrated via [OpenTelemetry](/integrations/native/opentelemetry), which doesn't lock them into a single observability solution. **Omni Agent runs as a Python ML worker**, taking full advantage of [Langfuse's native Python SDK](/docs/observability/sdk/overview) and the faster iteration cycles that come with it. @@ -62,11 +63,11 @@ Canva's multi-language architecture made handling different tech stacks a core r Canva takes full advantage of the entire Langfuse suite across Observability, Prompt Management and Evaluation. What started as a tight engineering core has expanded across roles: -- **ML Engineers**: Deep debugging, trace analysis, online and offline evaluation setup -- **Product Managers**: Prompt iteration, replay testing, quality monitoring -- **QA Team**: Annotation queues, systematic quality scoring -- **Content Designers**: Maintaining and improving response and RAG content -- **Domain Experts** : Topic-, market- or language-specific QA +- **ML Engineers**: Deep debugging, trace analysis, online and offline evaluation setup +- **Product Managers**: Prompt iteration, replay testing, quality monitoring +- **QA Team**: Annotation queues, systematic quality scoring +- **Content Designers**: Maintaining and improving response and RAG content +- **Domain Experts** : Topic-, market- or language-specific QA One example: Canva's Japanese market requires precise formal business tones. A marketing manager in Japan set up a dedicated LLM-as-a-judge evaluator to monitor tone of voice, without engineering help. This is a massive enabler: the person who knows the subject matter best can build and run evaluators independently. @@ -91,7 +92,8 @@ The [Tracing](/docs/observability/overview) captures error information, warnings Langfuse's [Prompt Management](/docs/prompt-management/overview) has become a key enabler. Prompts are versioned, changes can be tested before deployment, and, critically, non-technical team members can make updates independently. <Frame fullWidth> - ![Screenshot of Canva's Prompt Management](/images/customers/canva/canva-prompt-management.jpg) + ![Screenshot of Canva's Prompt + Management](/images/customers/canva/canva-prompt-management.jpg) </Frame> "The prompt management system is well-designed," says Sergey. "Versioning, the ability to promote or rollback changes from and to production, is a big enabler. When product managers can make changes without involving engineering, it frees up a lot of time and makes everything faster." @@ -104,7 +106,7 @@ Here are Canva’s approaches to offline and online Evals: - **[Experiments](/docs/evaluation/core-concepts#experiments) & [Datasets](/docs/evaluation/experiments/datasets):** In development, both systems can be tested by running offline Experiments based on data stored in Datasets: Canva has stored input data for default paths and edge cases together with their expected outputs. To make agents with access to tools testable the team is mocking tool call responses during experiments. -- **[LLM-as-a-Judge](/docs/evaluation/evaluation-methods/llm-as-a-judge):** Both systems are running slightly different sets of evaluators scoring them across 15-20 metrics both offline (in development) and online (in production). +- **[LLM-as-a-Judge](/docs/evaluation/evaluation-methods/llm-as-a-judge):** Both systems are running slightly different sets of evaluators scoring them across 15-20 metrics both offline (in development) and online (in production). - **[Custom Scores](/docs/evaluation/evaluation-methods/scores-via-sdk):** Additionally to LLM-as-a-Judge, Canva has implemented custom deterministic scoring logic via API/SDK which is executed during offline Experiments. @@ -144,24 +146,28 @@ The team evaluated several LLM observability platforms. Langfuse won for several items={[ { area: "Driving better user experiences", - impact: "Building on Langfuse a 4-person team enabled Canva to automate repeatable support requests driving better resolutions for our users at lower cost.", + impact: + "Building on Langfuse a 4-person team enabled Canva to automate repeatable support requests driving better resolutions for our users at lower cost.", }, - { + { area: "Multi-Agent System at Scale", - impact: "AI support handles 80% of user interactions across 250M monthly active users through a sophisticated multi-agent architecture.", + impact: + "AI support handles 80% of user interactions across 250M monthly active users through a sophisticated multi-agent architecture.", }, - { + { area: "Faster Iteration Speed", - impact: "Engineers ship faster and domain experts are empowered to directly improve the system without requiring engineering.", + impact: + "Engineers ship faster and domain experts are empowered to directly improve the system without requiring engineering.", }, { area: "Improved AI Output Quality", - impact: "The overall system quality significantly improved through the inclusion of non-technical team members and domain experts.", + impact: + "The overall system quality significantly improved through the inclusion of non-technical team members and domain experts.", }, { area: "Single Platform across Tech Stacks", - impact: "Langfuse runs for both Canva's Java and Python stacks, enabling a single observability platform for their entire multi-agent support system.", + impact: + "Langfuse runs for both Canva's Java and Python stacks, enabling a single observability platform for their entire multi-agent support system.", }, - ]} /> diff --git a/pages/users.mdx b/content/customers/index.mdx similarity index 87% rename from pages/users.mdx rename to content/customers/index.mdx index 5d3b575943..77b9187a79 100644 --- a/pages/users.mdx +++ b/content/customers/index.mdx @@ -1,9 +1,10 @@ --- title: Users description: Langfuse users share their experiences with the platform. +showInCustomerIndex: false --- -import { CustomerIndex } from "@/components/customers/CustomerIndex"; +import { CustomerIndexWrapper } from "@/components/customers/CustomerIndexWrapper"; import { Header } from "@/components/Header"; import { TestimonialsGrid } from "@/components/home/TestimonialsGrid"; import { Button } from "@/components/ui/button"; @@ -19,19 +20,19 @@ import { CustomerStoryCTA } from "@/components/customers/CustomerStoryCTA"; className="mb-8" h="h1" /> - + </div> - <CustomerIndex path="/users" /> + <CustomerIndexWrapper path="/users" /> <div className="text-center text-gray-500 dark:text-gray-400 mt-8"> More coming soon! Thousands of teams are building on Langfuse – we are just getting started telling their stories. </div> - + <div className="mt-24"> <h2 className="text-3xl text-center font-mono font-bold text-foreground mb-10"> What Our Community Says </h2> <TestimonialsGrid /> - </div> + </div> <div className="mt-10"> <CustomerStoryCTA /> </div> diff --git a/pages/users/khan-academy.mdx b/content/customers/khan-academy.mdx similarity index 97% rename from pages/users/khan-academy.mdx rename to content/customers/khan-academy.mdx index d6a5716427..d4f3ab297c 100644 --- a/pages/users/khan-academy.mdx +++ b/content/customers/khan-academy.mdx @@ -18,12 +18,14 @@ showInCustomerIndex: true import { BlogHeader } from "@/components/blog/BlogHeader"; import { CustomerQuote } from "@/components/customers/CustomerQuote"; import { ImpactChart } from "@/components/customers/ImpactChart"; +import { CustomerStoryCTA } from "@/components/customers/CustomerStoryCTA"; <BlogHeader title="Khan Academy uses Langfuse’s LLM Engineering platform to build Khanmigo AI" description="How Khan Academy uses Langfuse to debug and improve Khanmigo AI, a student tutor and teaching assistant." customerLogo="/images/customers/khan-academy/khan-academy-logo.png" authors={["felixkrauth"]} + date="August 1st, 2025" /> <Frame fullWidth> @@ -104,7 +106,5 @@ For Khan Academy, Langfuse solved multiple challenges simultaneously. The compan image="/images/customers/khan-academy/walt-wells.jpeg" /> - - - +<CustomerStoryCTA /> diff --git a/pages/users/magic-patterns-ai-design-tools.mdx b/content/customers/magic-patterns-ai-design-tools.mdx similarity index 98% rename from pages/users/magic-patterns-ai-design-tools.mdx rename to content/customers/magic-patterns-ai-design-tools.mdx index 3cf44591eb..62dd721f0b 100644 --- a/pages/users/magic-patterns-ai-design-tools.mdx +++ b/content/customers/magic-patterns-ai-design-tools.mdx @@ -17,12 +17,14 @@ showInCustomerIndex: true import { BlogHeader } from "@/components/blog/BlogHeader"; import { CustomerQuote } from "@/components/customers/CustomerQuote"; import { ImpactChart } from "@/components/customers/ImpactChart"; +import { CustomerStoryCTA } from "@/components/customers/CustomerStoryCTA"; <BlogHeader title="Building AI Design Tools at Scale" description="How Magic Patterns built a profitable AI design platform processing millions of UI generations while maintaining 8-minute customer support resolution times" customerLogo="/images/customers/magic-patterns-ai-design-tools/magicpatterns-logo.png" authors={["felixkrauth"]} + date="June 6, 2025" /> <Frame fullWidth> @@ -135,3 +137,5 @@ Magic Patterns represents a new breed of AI-native companies where traditional s For teams building production AI systems, Magic Patterns offers a crucial lesson: the difference between a weekend prototype and a scalable product isn't just better prompts—it's infrastructure that lets you understand, debug, and improve every single generation. _Learn more about Magic Patterns at [magicpatterns.com](https://magicpatterns.com)_ + +<CustomerStoryCTA /> diff --git a/pages/users/merckgroup.mdx b/content/customers/merckgroup.mdx similarity index 98% rename from pages/users/merckgroup.mdx rename to content/customers/merckgroup.mdx index 6030172245..3758df708e 100644 --- a/pages/users/merckgroup.mdx +++ b/content/customers/merckgroup.mdx @@ -18,12 +18,14 @@ showInCustomerIndex: true import { BlogHeader } from "@/components/blog/BlogHeader"; import { CustomerQuote } from "@/components/customers/CustomerQuote"; import { ImpactChart } from "@/components/customers/ImpactChart"; +import { CustomerStoryCTA } from "@/components/customers/CustomerStoryCTA"; <BlogHeader title="How Merck is serving 80+ AI project teams globally on Langfuse" description="Learn how Merck uses Langfuse to turn black-box models into auditable, optimizable assets for 80+ project teams globally" customerLogo="/images/customers/merck/merck-light.png" authors={["felixkrauth"]} + date="September 2, 2025" /> Big shout out to the team at Merck! Without them, this story would not have been possible: Harsha Gurulingappa (Global Head of AI & Machine Learning Practice), Shikhar Bhardwaj (Product Owner for AI-ML Services), Shashi Kumar (Senior AI-ML Architect), and Geoffrey Dominic Lobo (AI-ML Engineer). @@ -107,9 +109,7 @@ Now that Observability is widely adopted globally, the team will move into more ]} /> - - - +<CustomerStoryCTA /> diff --git a/content/customers/meta.json b/content/customers/meta.json new file mode 100644 index 0000000000..599ec0cc12 --- /dev/null +++ b/content/customers/meta.json @@ -0,0 +1,11 @@ +{ + "title": "Users", + "pages": [ + "index", + "canva", + "khan-academy", + "magic-patterns-ai-design-tools", + "merckgroup", + "sumup" + ] +} \ No newline at end of file diff --git a/pages/users/sumup.mdx b/content/customers/sumup.mdx similarity index 98% rename from pages/users/sumup.mdx rename to content/customers/sumup.mdx index 5b3b01ee75..35003968a2 100644 --- a/pages/users/sumup.mdx +++ b/content/customers/sumup.mdx @@ -18,12 +18,14 @@ showInCustomerIndex: true import { BlogHeader } from "@/components/blog/BlogHeader"; import { CustomerQuote } from "@/components/customers/CustomerQuote"; import { ImpactChart } from "@/components/customers/ImpactChart"; +import { CustomerStoryCTA } from "@/components/customers/CustomerStoryCTA"; <BlogHeader title="AI-Powered first level support for 4 million merchants" description="How Global Payments Company SumUp rolled out AI-Powered Support for 4 million merchants across 35+ markets building on Langfuse" customerLogo="/images/customers/sumup/Sumup-Light.png" authors={["felixkrauth"]} + date="August 11, 2025" /> ## About SumUp @@ -117,9 +119,7 @@ Langfuse [Observability & Tracing](/docs/observability/overview) gives SumUp a u ]} /> - - - +<CustomerStoryCTA /> diff --git a/pages/docs/administration/audit-logs.mdx b/content/docs/administration/audit-logs.mdx similarity index 99% rename from pages/docs/administration/audit-logs.mdx rename to content/docs/administration/audit-logs.mdx index 5fc28a7e1e..2b1aeb21f3 100644 --- a/pages/docs/administration/audit-logs.mdx +++ b/content/docs/administration/audit-logs.mdx @@ -1,4 +1,5 @@ --- +title: Audit Logs description: Comprehensive audit logging in Langfuse tracks all system activities with detailed state capture and user attribution for enterprise security and compliance requirements. sidebarTitle: Audit Logs --- diff --git a/pages/docs/administration/authentication-and-sso.mdx b/content/docs/administration/authentication-and-sso.mdx similarity index 98% rename from pages/docs/administration/authentication-and-sso.mdx rename to content/docs/administration/authentication-and-sso.mdx index e2afd6c3e7..649b1accda 100644 --- a/pages/docs/administration/authentication-and-sso.mdx +++ b/content/docs/administration/authentication-and-sso.mdx @@ -1,5 +1,5 @@ --- -title: Authentication & SSO (Cloud) +title: Authentication & SSO sidebarTitle: Authentication & SSO description: Overview of Single Sign-On (SSO) methods in Langfuse --- diff --git a/pages/docs/administration/billable-units.mdx b/content/docs/administration/billable-units.mdx similarity index 100% rename from pages/docs/administration/billable-units.mdx rename to content/docs/administration/billable-units.mdx diff --git a/pages/docs/administration/data-deletion.mdx b/content/docs/administration/data-deletion.mdx similarity index 99% rename from pages/docs/administration/data-deletion.mdx rename to content/docs/administration/data-deletion.mdx index f1cecde5af..c732aa945d 100644 --- a/pages/docs/administration/data-deletion.mdx +++ b/content/docs/administration/data-deletion.mdx @@ -1,4 +1,5 @@ --- +title: Data Deletion description: Delete data from Langfuse sidebarTitle: Data Deletion --- diff --git a/pages/docs/administration/data-retention.mdx b/content/docs/administration/data-retention.mdx similarity index 98% rename from pages/docs/administration/data-retention.mdx rename to content/docs/administration/data-retention.mdx index 45c40e2de1..f649df1103 100644 --- a/pages/docs/administration/data-retention.mdx +++ b/content/docs/administration/data-retention.mdx @@ -1,4 +1,5 @@ --- +title: Data Retention description: Control Data Retention in Langfuse sidebarTitle: Data Retention --- diff --git a/pages/docs/administration/llm-connection.mdx b/content/docs/administration/llm-connection.mdx similarity index 99% rename from pages/docs/administration/llm-connection.mdx rename to content/docs/administration/llm-connection.mdx index 0a7d9b4d36..f2fc77a844 100644 --- a/pages/docs/administration/llm-connection.mdx +++ b/content/docs/administration/llm-connection.mdx @@ -147,6 +147,7 @@ export function ModelList() { } <ModelList /> + </details> You may connect to third party LLM providers if their API schema implements the schema of one of our supported provider adapters. For example, you may connect to Mistral by using the OpenAI adapter in Langfuse to connect to Mistral's OpenAI compliant API. diff --git a/content/docs/administration/meta.json b/content/docs/administration/meta.json new file mode 100644 index 0000000000..40b01eab1e --- /dev/null +++ b/content/docs/administration/meta.json @@ -0,0 +1,20 @@ +{ + "title": "Administration", + "pages": [ + "---Auth---", + "authentication-and-sso", + "rbac", + "scim-and-org-api", + "---Security---", + "audit-logs", + "data-deletion", + "data-retention", + "external:[Security Docs ↗](/security)", + "---Configuration---", + "llm-connection", + "spend-alerts", + "---Misc---", + "billable-units", + "troubleshooting-and-faq" + ] +} diff --git a/pages/docs/administration/rbac.mdx b/content/docs/administration/rbac.mdx similarity index 99% rename from pages/docs/administration/rbac.mdx rename to content/docs/administration/rbac.mdx index 12ae0d06ce..c6abdb401f 100644 --- a/pages/docs/administration/rbac.mdx +++ b/content/docs/administration/rbac.mdx @@ -1,4 +1,5 @@ --- +title: Access Control (RBAC) description: Langfuse offers extensive RBAC capabilities to manage project sharing and permissions across different organizations and projects. sidebarTitle: Access Control (RBAC) --- diff --git a/pages/docs/administration/scim-and-org-api.mdx b/content/docs/administration/scim-and-org-api.mdx similarity index 99% rename from pages/docs/administration/scim-and-org-api.mdx rename to content/docs/administration/scim-and-org-api.mdx index b52609171a..c10cc51608 100644 --- a/pages/docs/administration/scim-and-org-api.mdx +++ b/content/docs/administration/scim-and-org-api.mdx @@ -1,5 +1,5 @@ --- -title: Organization-Key Scoped API Routes +title: SCIM and Org API sidebarTitle: SCIM and Org API description: Langfuse is open and meant to be extended via custom workflows and integrations. You can use these endpoints to automate project and user management on your Langfuse organization. --- diff --git a/pages/docs/administration/spend-alerts.mdx b/content/docs/administration/spend-alerts.mdx similarity index 100% rename from pages/docs/administration/spend-alerts.mdx rename to content/docs/administration/spend-alerts.mdx diff --git a/pages/docs/administration/troubleshooting-and-faq.mdx b/content/docs/administration/troubleshooting-and-faq.mdx similarity index 91% rename from pages/docs/administration/troubleshooting-and-faq.mdx rename to content/docs/administration/troubleshooting-and-faq.mdx index 3ad0652ec6..bd90b28270 100644 --- a/pages/docs/administration/troubleshooting-and-faq.mdx +++ b/content/docs/administration/troubleshooting-and-faq.mdx @@ -1,5 +1,5 @@ --- -title: Troubleshooting and FAQ for Langfuse Administration +title: Troubleshooting and FAQ sidebarTitle: Troubleshooting and FAQ description: Troubleshooting and FAQ for administering Langfuse. --- diff --git a/pages/docs/api-and-data-platform/features/cli.mdx b/content/docs/api-and-data-platform/features/cli.mdx similarity index 100% rename from pages/docs/api-and-data-platform/features/cli.mdx rename to content/docs/api-and-data-platform/features/cli.mdx diff --git a/pages/docs/api-and-data-platform/features/export-from-ui.mdx b/content/docs/api-and-data-platform/features/export-from-ui.mdx similarity index 91% rename from pages/docs/api-and-data-platform/features/export-from-ui.mdx rename to content/docs/api-and-data-platform/features/export-from-ui.mdx index 2a7b633ade..2946cdb330 100644 --- a/pages/docs/api-and-data-platform/features/export-from-ui.mdx +++ b/content/docs/api-and-data-platform/features/export-from-ui.mdx @@ -1,7 +1,7 @@ --- -title: Export Data from UI +title: Export from UI sidebarTitle: Export from UI -description: Export your Langfuse observability data from the UIfor analysis, fine-tuning, and integration with external tools. +description: Export your Langfuse observability data from the UI for analysis, fine-tuning, and integration with external tools. --- # Export Data from UI diff --git a/content/docs/api-and-data-platform/features/export-to-blob-storage.mdx b/content/docs/api-and-data-platform/features/export-to-blob-storage.mdx new file mode 100644 index 0000000000..8778acb3fc --- /dev/null +++ b/content/docs/api-and-data-platform/features/export-to-blob-storage.mdx @@ -0,0 +1,73 @@ +--- +title: Export to Blob Storage +description: Export traces, observations, enriched observations, and scores to Blob Storage, e.g. S3, GCS, or Azure Blob Storage. +sidebarTitle: Export to Blob Storage +--- + +# Export via Blob Storage Integration + +<AvailabilityBanner + availability={{ + hobby: "not-available", + core: "not-available", + pro: "team-add-on", + enterprise: "full", + selfHosted: "full", + }} +/> + +You can create schedule exports to a Blob Storage, e.g. S3, GCS, or Azure Blob Storage, for `traces`, `observations`, enriched observations, and `scores`. + +Those exports can run on an `hourly`, `daily`, or `weekly` schedule. +Navigate to your project settings and select `Integrations > Blob Storage` to set up a new export. +Select whether you want to use S3, a S3 compatible storage, Google Cloud Storage, or Azure Blob Storage. + +## Start exporting via Blob Storage + +To set up the export navigate to `Your Project` > `Settings` > `Integrations` > `Blob Storage`. + +Fill in the settings to authenticate with your vendor, enable the integration, and press save. +Within an hour an initial export should start and continue based on the schedule you have selected. +The export supports CSV, JSON, and JSONL file formats. +Read [our blob storage documentation](/self-hosting/deployment/infrastructure/blobstorage) for more information on how to get credentials for your specific vendor. + +<Frame className="my-10" fullWidth> + ![Blob Storage Integration Setup](/images/docs/blob-storage.png) +</Frame> + +## Export source (Langfuse v4) + +Blob Storage integrations now include an `Export Source` selector. New integrations default to `Enriched observations (recommended)` (trace attributes are directly set on observations). + +This source uses enriched observations with trace attributes and provides significantly better export performance. `Scores` are always included, regardless of the selected source. + +Available options: + +- `Traces and observations (legacy)` +- `Traces and observations (legacy) and enriched observations` +- `Enriched observations (recommended)` + +<Callout type="warning"> + `Traces and observations (legacy)` sources may be deprecated in the future. + All new export jobs should use `Enriched observations (recommended)`, and + existing legacy jobs are strongly recommended to upgrade. +</Callout> + +### Upgrade path for existing configurations + +Existing integrations continue to use `Traces and observations (legacy)` until changed. + +To migrate safely: + +1. Switch to `Traces and observations (legacy) and enriched observations`. +2. Validate downstream jobs and data consumers while both sources are exported (this mode creates duplicate records by design). +3. Switch to `Enriched observations (recommended)` once validation is complete. + +For rollout details, see the [Simplify for Scale changelog](/changelog/2026-02-10-simplify-for-scale). + +## Alternatives + +You can also export data via: + +- [UI](/docs/api-and-data-platform/features/export-from-ui) - Manual batch-exports from the Langfuse UI +- [SDKs/API](/docs/api-and-data-platform/features/public-api) - Programmatic access using Langfuse SDKs or API diff --git a/pages/docs/api-and-data-platform/features/mcp-server.mdx b/content/docs/api-and-data-platform/features/mcp-server.mdx similarity index 99% rename from pages/docs/api-and-data-platform/features/mcp-server.mdx rename to content/docs/api-and-data-platform/features/mcp-server.mdx index fd992059b9..33ccdcd121 100644 --- a/pages/docs/api-and-data-platform/features/mcp-server.mdx +++ b/content/docs/api-and-data-platform/features/mcp-server.mdx @@ -1,5 +1,5 @@ --- -title: Langfuse MCP Server +title: MCP Server sidebarTitle: MCP Server description: Native Model Context Protocol (MCP) server for Langfuse, enabling AI assistants to interact with your Langfuse data programmatically. --- diff --git a/content/docs/api-and-data-platform/features/meta.json b/content/docs/api-and-data-platform/features/meta.json new file mode 100644 index 0000000000..cef508f0d4 --- /dev/null +++ b/content/docs/api-and-data-platform/features/meta.json @@ -0,0 +1,11 @@ +{ + "title": "Features", + "pages": [ + "public-api", + "observations-api", + "query-via-sdk", + "export-from-ui", + "export-to-blob-storage", + "mcp-server" + ] +} diff --git a/pages/docs/api-and-data-platform/features/observations-api.mdx b/content/docs/api-and-data-platform/features/observations-api.mdx similarity index 100% rename from pages/docs/api-and-data-platform/features/observations-api.mdx rename to content/docs/api-and-data-platform/features/observations-api.mdx diff --git a/pages/docs/api-and-data-platform/features/public-api.mdx b/content/docs/api-and-data-platform/features/public-api.mdx similarity index 100% rename from pages/docs/api-and-data-platform/features/public-api.mdx rename to content/docs/api-and-data-platform/features/public-api.mdx diff --git a/pages/docs/api-and-data-platform/features/query-via-sdk.mdx b/content/docs/api-and-data-platform/features/query-via-sdk.mdx similarity index 99% rename from pages/docs/api-and-data-platform/features/query-via-sdk.mdx rename to content/docs/api-and-data-platform/features/query-via-sdk.mdx index 5c50dff133..0f18258ba2 100644 --- a/pages/docs/api-and-data-platform/features/query-via-sdk.mdx +++ b/content/docs/api-and-data-platform/features/query-via-sdk.mdx @@ -1,5 +1,5 @@ --- -title: Query Data via SDKs +title: Query via SDKs sidebarTitle: Query via SDKs description: Conveniently fetch your LLM Observability traces via the SDKs for few-shotting, fine-tuning or further analysis. --- diff --git a/content/docs/api-and-data-platform/meta.json b/content/docs/api-and-data-platform/meta.json new file mode 100644 index 0000000000..6155b689b0 --- /dev/null +++ b/content/docs/api-and-data-platform/meta.json @@ -0,0 +1,7 @@ +{ + "title": "API & Data Platform", + "pages": [ + "overview", + "features" + ] +} diff --git a/pages/docs/api-and-data-platform/overview.mdx b/content/docs/api-and-data-platform/overview.mdx similarity index 98% rename from pages/docs/api-and-data-platform/overview.mdx rename to content/docs/api-and-data-platform/overview.mdx index b48e3703d5..64535c5525 100644 --- a/pages/docs/api-and-data-platform/overview.mdx +++ b/content/docs/api-and-data-platform/overview.mdx @@ -1,5 +1,5 @@ --- -title: Open Source LLM API & Data Platform +title: Overview description: Langfuse is designed to be extensible and flexible. People using Langfuse are building all kinds of workflows and customizations on top of it. This is powered by our open data platform. --- diff --git a/pages/docs/ask-ai.mdx b/content/docs/ask-ai.mdx similarity index 94% rename from pages/docs/ask-ai.mdx rename to content/docs/ask-ai.mdx index 5b7bb8752f..d1eda82c81 100644 --- a/pages/docs/ask-ai.mdx +++ b/content/docs/ask-ai.mdx @@ -1,5 +1,5 @@ --- -title: "Ask AI - Langfuse AI Assistant" +title: "Ask AI" description: "Ask AI questions about Langfuse features, integrations, SDK usage, and best practices. Get instant answers from our AI assistant trained on documentation, GitHub discussions, and API references." --- diff --git a/pages/docs/demo.mdx b/content/docs/demo.mdx similarity index 99% rename from pages/docs/demo.mdx rename to content/docs/demo.mdx index 0c877f702f..f7909609a6 100644 --- a/pages/docs/demo.mdx +++ b/content/docs/demo.mdx @@ -1,4 +1,5 @@ --- +title: Example Project description: Try Langfuse in action with a live example project for free. Interact with the chatbot to see new traces and user feedback (👍/👎) in Langfuse. No credit card required. --- diff --git a/pages/docs/docs-mcp.mdx b/content/docs/docs-mcp.mdx similarity index 98% rename from pages/docs/docs-mcp.mdx rename to content/docs/docs-mcp.mdx index 55edb1c3d0..217e889b64 100644 --- a/pages/docs/docs-mcp.mdx +++ b/content/docs/docs-mcp.mdx @@ -1,3 +1,7 @@ +--- +title: Docs MCP Server +--- + # Langfuse Docs MCP Server The Langfuse Docs MCP server exposes the Langfuse docs to AI agents. diff --git a/pages/docs/evaluation/core-concepts.mdx b/content/docs/evaluation/core-concepts.mdx similarity index 100% rename from pages/docs/evaluation/core-concepts.mdx rename to content/docs/evaluation/core-concepts.mdx diff --git a/pages/docs/evaluation/evaluation-methods/annotation-queues.mdx b/content/docs/evaluation/evaluation-methods/annotation-queues.mdx similarity index 100% rename from pages/docs/evaluation/evaluation-methods/annotation-queues.mdx rename to content/docs/evaluation/evaluation-methods/annotation-queues.mdx diff --git a/pages/docs/evaluation/evaluation-methods/llm-as-a-judge.mdx b/content/docs/evaluation/evaluation-methods/llm-as-a-judge.mdx similarity index 99% rename from pages/docs/evaluation/evaluation-methods/llm-as-a-judge.mdx rename to content/docs/evaluation/evaluation-methods/llm-as-a-judge.mdx index 7398e86832..375da25980 100644 --- a/pages/docs/evaluation/evaluation-methods/llm-as-a-judge.mdx +++ b/content/docs/evaluation/evaluation-methods/llm-as-a-judge.mdx @@ -1,5 +1,5 @@ --- -title: "LLM-as-a-Judge Evaluation: Complete Guide" +title: LLM-as-a-Judge sidebarTitle: LLM-as-a-Judge description: "Learn how LLM-as-a-Judge evaluation works — use large language models to automatically score, evaluate, and monitor your LLM application outputs at scale with rubric-guided assessments." --- @@ -375,27 +375,37 @@ If you have existing evaluators running on traces and want to upgrade to running <details> <summary>What is LLM-as-a-Judge evaluation?</summary> + LLM-as-a-Judge is an evaluation methodology where a large language model (the "judge") assesses the quality of outputs from another LLM application. The judge model is given the input, the application's output, and a scoring rubric, then produces a score with reasoning. It's one of the most popular approaches for evaluating LLM applications because it combines human-like nuance with automated scalability. + </details> <details> <summary>How accurate is LLM-as-a-Judge compared to human evaluation?</summary> + Research shows that strong LLM judges (such as GPT-5 class models) achieve 80-90% agreement with human evaluators on many quality dimensions, which is comparable to inter-annotator agreement between humans. Accuracy improves significantly with well-designed rubrics and clear evaluation criteria. For best results, calibrate your LLM-as-a-Judge setup against a small set of human-annotated examples. + </details> <details> <summary>What models work best as LLM judges?</summary> + The most capable models generally produce the best evaluations. Models with strong instruction-following and reasoning capabilities (such as GPT-4o, Claude Sonnet, or Gemini Pro) are commonly used. The judge model should support structured output so scores can be reliably parsed. In Langfuse, you configure the judge model via [LLM Connections](/docs/administration/llm-connection). + </details> <details> <summary>How much does LLM-as-a-Judge cost?</summary> + Cost depends on the judge model and the size of the inputs being evaluated. A typical evaluation costs $0.01-0.10 per assessment. You can manage costs by: (1) using sampling to evaluate a percentage of traces, (2) targeting specific observations instead of full traces, and (3) choosing cost-effective judge models for simpler evaluations. + </details> <details> <summary>Can I use LLM-as-a-Judge for RAG evaluation?</summary> + Yes. LLM-as-a-Judge is particularly effective for RAG pipelines. You can evaluate faithfulness (is the answer grounded in the retrieved context?), relevance (does the answer address the question?), and completeness (does the answer cover all relevant information?). Langfuse also integrates with [RAGAS](/guides/cookbook/evaluation_of_rag_with_ragas) for specialized RAG evaluation metrics. + </details> ## GitHub Discussions diff --git a/content/docs/evaluation/evaluation-methods/meta.json b/content/docs/evaluation/evaluation-methods/meta.json new file mode 100644 index 0000000000..5450ace166 --- /dev/null +++ b/content/docs/evaluation/evaluation-methods/meta.json @@ -0,0 +1,10 @@ +{ + "title": "Evaluation Methods", + "pages": [ + "llm-as-a-judge", + "annotation-queues", + "scores-via-ui", + "scores-via-sdk", + "score-analytics" + ] +} diff --git a/pages/docs/evaluation/evaluation-methods/score-analytics.mdx b/content/docs/evaluation/evaluation-methods/score-analytics.mdx similarity index 100% rename from pages/docs/evaluation/evaluation-methods/score-analytics.mdx rename to content/docs/evaluation/evaluation-methods/score-analytics.mdx diff --git a/pages/docs/evaluation/evaluation-methods/scores-via-sdk.mdx b/content/docs/evaluation/evaluation-methods/scores-via-sdk.mdx similarity index 99% rename from pages/docs/evaluation/evaluation-methods/scores-via-sdk.mdx rename to content/docs/evaluation/evaluation-methods/scores-via-sdk.mdx index 61ac20a9ec..db78a42367 100644 --- a/pages/docs/evaluation/evaluation-methods/scores-via-sdk.mdx +++ b/content/docs/evaluation/evaluation-methods/scores-via-sdk.mdx @@ -1,4 +1,5 @@ --- +title: Scores via API/SDK description: Ingest custom scores via the Langfuse SDKs or API. sidebarTitle: Scores via API/SDK --- diff --git a/pages/docs/evaluation/evaluation-methods/scores-via-ui.mdx b/content/docs/evaluation/evaluation-methods/scores-via-ui.mdx similarity index 98% rename from pages/docs/evaluation/evaluation-methods/scores-via-ui.mdx rename to content/docs/evaluation/evaluation-methods/scores-via-ui.mdx index 26a959875f..62ff2a768c 100644 --- a/pages/docs/evaluation/evaluation-methods/scores-via-ui.mdx +++ b/content/docs/evaluation/evaluation-methods/scores-via-ui.mdx @@ -1,5 +1,5 @@ --- -title: Add scores to traces via the UI +title: Scores via UI description: Annotate traces and observations with scores in the Langfuse UI to record human-in-the-loop evaluations. sidebarTitle: Scores via UI --- diff --git a/pages/docs/evaluation/experiments/data-model.mdx b/content/docs/evaluation/experiments/data-model.mdx similarity index 99% rename from pages/docs/evaluation/experiments/data-model.mdx rename to content/docs/evaluation/experiments/data-model.mdx index 1ccca0388e..6af53e6a5e 100644 --- a/pages/docs/evaluation/experiments/data-model.mdx +++ b/content/docs/evaluation/experiments/data-model.mdx @@ -1,5 +1,5 @@ --- -title: Evaluation Data Model +title: Data Model description: This page describes the evaluation data model including Datasets, DatasetItems, DatasetRuns, DatasetRunItems, Scores, Score Configs, and function definitions for Tasks and Evaluators. sidebarTitle: Data Model --- diff --git a/pages/docs/evaluation/experiments/datasets.mdx b/content/docs/evaluation/experiments/datasets.mdx similarity index 100% rename from pages/docs/evaluation/experiments/datasets.mdx rename to content/docs/evaluation/experiments/datasets.mdx diff --git a/pages/docs/evaluation/experiments/experiments-via-sdk.mdx b/content/docs/evaluation/experiments/experiments-via-sdk.mdx similarity index 100% rename from pages/docs/evaluation/experiments/experiments-via-sdk.mdx rename to content/docs/evaluation/experiments/experiments-via-sdk.mdx diff --git a/pages/docs/evaluation/experiments/experiments-via-ui.mdx b/content/docs/evaluation/experiments/experiments-via-ui.mdx similarity index 100% rename from pages/docs/evaluation/experiments/experiments-via-ui.mdx rename to content/docs/evaluation/experiments/experiments-via-ui.mdx diff --git a/content/docs/evaluation/experiments/meta.json b/content/docs/evaluation/experiments/meta.json new file mode 100644 index 0000000000..4c638b8163 --- /dev/null +++ b/content/docs/evaluation/experiments/meta.json @@ -0,0 +1,9 @@ +{ + "title": "Experiments", + "pages": [ + "data-model", + "datasets", + "experiments-via-sdk", + "experiments-via-ui" + ] +} diff --git a/content/docs/evaluation/meta.json b/content/docs/evaluation/meta.json new file mode 100644 index 0000000000..f910285ab3 --- /dev/null +++ b/content/docs/evaluation/meta.json @@ -0,0 +1,11 @@ +{ + "title": "Evaluation", + "pages": [ + "overview", + "core-concepts", + "evaluation-methods", + "experiments", + "external:[Guides](/guides#evaluation-tutorials)", + "troubleshooting-and-faq" + ] +} diff --git a/pages/docs/evaluation/overview.mdx b/content/docs/evaluation/overview.mdx similarity index 97% rename from pages/docs/evaluation/overview.mdx rename to content/docs/evaluation/overview.mdx index bff8b7d684..2a9c698a2f 100644 --- a/pages/docs/evaluation/overview.mdx +++ b/content/docs/evaluation/overview.mdx @@ -1,5 +1,5 @@ --- -title: Evaluation of LLM Applications +title: Overview description: With Langfuse you can capture all your LLM evaluations in one place. You can combine a variety of different evaluation metrics like model-based evaluations (LLM-as-a-Judge), human annotations or fully custom evaluation workflows via API/SDKs. This allows you to measure quality, tonality, factual accuracy, completeness, and other dimensions of your LLM application. --- diff --git a/pages/docs/evaluation/troubleshooting-and-faq.mdx b/content/docs/evaluation/troubleshooting-and-faq.mdx similarity index 94% rename from pages/docs/evaluation/troubleshooting-and-faq.mdx rename to content/docs/evaluation/troubleshooting-and-faq.mdx index 113afe4f66..8470f5fb60 100644 --- a/pages/docs/evaluation/troubleshooting-and-faq.mdx +++ b/content/docs/evaluation/troubleshooting-and-faq.mdx @@ -1,5 +1,5 @@ --- -title: Troubleshooting and FAQ for Langfuse Evaluation +title: Troubleshooting and FAQ sidebarTitle: Troubleshooting and FAQ description: Troubleshooting and FAQ for Langfuse Evaluation. --- diff --git a/pages/docs/glossary.mdx b/content/docs/glossary.mdx similarity index 100% rename from pages/docs/glossary.mdx rename to content/docs/glossary.mdx diff --git a/pages/docs/index.mdx b/content/docs/index.mdx similarity index 90% rename from pages/docs/index.mdx rename to content/docs/index.mdx index ec313c6b8b..a7b5c7f6a0 100644 --- a/pages/docs/index.mdx +++ b/content/docs/index.mdx @@ -1,11 +1,11 @@ --- -title: Langfuse Documentation -description: Langfuse is an open source LLM engineering platform. It includes observability, analytics, and experimentation features. +title: Overview +description: Langfuse is an open-source LLM engineering platform (GitHub) that helps teams collaboratively debug, analyze, and iterate on their LLM applications. All platform features are natively integrated to accelerate the development workflow. --- # Langfuse Overview -Langfuse is an **open-source LLM engineering platform** ([GitHub](https://github.com/langfuse/langfuse)) that helps teams collaboratively debug, analyze, and iterate on their LLM applications. All platform features are natively integrated to accelerate the development workflow. Langfuse is open, self-hostable, and extensible ([_why langfuse?_](/why)). +Langfuse is an open-source LLM engineering platform ([GitHub](https://github.com/langfuse/langfuse)) that helps teams collaboratively debug, analyze, and iterate on their LLM applications. All platform features are natively integrated to accelerate the development workflow. Langfuse is open, self-hostable, and extensible ([_why langfuse?_](/why)). import { FeatureOverview } from "@/components/FeatureOverview"; import { diff --git a/content/docs/meta.json b/content/docs/meta.json new file mode 100644 index 0000000000..ff2f08ef24 --- /dev/null +++ b/content/docs/meta.json @@ -0,0 +1,28 @@ +{ + "title": "Docs", + "pages": [ + "index", + "demo", + "ask-ai", + "---Get Started---", + "[Start Tracing](/docs/observability/get-started)", + "[Use Prompt Management](/docs/prompt-management/get-started)", + "[Set up Evals](/docs/evaluation/overview)", + "---Products---", + "observability", + "prompt-management", + "evaluation", + "---Platform---", + "metrics", + "api-and-data-platform", + "administration", + "security-and-guardrails", + "---More---", + "glossary", + "roadmap", + "docs-mcp", + "references", + "external:[Security & Compliance ↗](/security)", + "external:[Support ↗](/support)" + ] +} diff --git a/pages/docs/metrics/features/custom-dashboards.mdx b/content/docs/metrics/features/custom-dashboards.mdx similarity index 100% rename from pages/docs/metrics/features/custom-dashboards.mdx rename to content/docs/metrics/features/custom-dashboards.mdx diff --git a/content/docs/metrics/features/meta.json b/content/docs/metrics/features/meta.json new file mode 100644 index 0000000000..ae343185ed --- /dev/null +++ b/content/docs/metrics/features/meta.json @@ -0,0 +1,9 @@ +{ + "title": "Features", + "pages": [ + "custom-dashboards", + "metrics-api", + "external:[Export to PostHog ↗](/integrations/analytics/posthog)", + "external:[Export to Mixpanel ↗](/integrations/analytics/mixpanel)" + ] +} diff --git a/pages/docs/metrics/features/metrics-api.mdx b/content/docs/metrics/features/metrics-api.mdx similarity index 100% rename from pages/docs/metrics/features/metrics-api.mdx rename to content/docs/metrics/features/metrics-api.mdx diff --git a/content/docs/metrics/meta.json b/content/docs/metrics/meta.json new file mode 100644 index 0000000000..444e11caa0 --- /dev/null +++ b/content/docs/metrics/meta.json @@ -0,0 +1,7 @@ +{ + "title": "Metrics", + "pages": [ + "overview", + "features" + ] +} diff --git a/pages/docs/metrics/overview.mdx b/content/docs/metrics/overview.mdx similarity index 98% rename from pages/docs/metrics/overview.mdx rename to content/docs/metrics/overview.mdx index 65cea90a5a..e5951165b8 100644 --- a/pages/docs/metrics/overview.mdx +++ b/content/docs/metrics/overview.mdx @@ -1,5 +1,5 @@ --- -title: Open Source LLM Metrics +title: Overview description: Improve your LLM application with open source metrics tracking latency, cost, and quality across various dimensions. --- diff --git a/pages/docs/observability/data-model.mdx b/content/docs/observability/data-model.mdx similarity index 99% rename from pages/docs/observability/data-model.mdx rename to content/docs/observability/data-model.mdx index 591a9e7b2d..47aa19f771 100644 --- a/pages/docs/observability/data-model.mdx +++ b/content/docs/observability/data-model.mdx @@ -1,5 +1,5 @@ --- -title: Tracing Data Model in Langfuse +title: Concepts description: Langfuse (open source) helps you trace and analyze LLM applications. Learn how traces and observations are structured in Langfuse. --- diff --git a/pages/docs/observability/features/agent-graphs.mdx b/content/docs/observability/features/agent-graphs.mdx similarity index 100% rename from pages/docs/observability/features/agent-graphs.mdx rename to content/docs/observability/features/agent-graphs.mdx diff --git a/pages/docs/observability/features/comments.mdx b/content/docs/observability/features/comments.mdx similarity index 100% rename from pages/docs/observability/features/comments.mdx rename to content/docs/observability/features/comments.mdx diff --git a/pages/docs/observability/features/corrections.mdx b/content/docs/observability/features/corrections.mdx similarity index 99% rename from pages/docs/observability/features/corrections.mdx rename to content/docs/observability/features/corrections.mdx index 2ec68943de..504cfaa16a 100644 --- a/pages/docs/observability/features/corrections.mdx +++ b/content/docs/observability/features/corrections.mdx @@ -1,5 +1,5 @@ --- -title: Corrected Outputs +title: Corrections description: Capture improved versions of LLM outputs directly in traces and observations to build better datasets and drive continuous improvement. sidebarTitle: Corrections --- diff --git a/pages/docs/observability/features/environments.mdx b/content/docs/observability/features/environments.mdx similarity index 99% rename from pages/docs/observability/features/environments.mdx rename to content/docs/observability/features/environments.mdx index e1fe7d3604..4c6b36e489 100644 --- a/pages/docs/observability/features/environments.mdx +++ b/content/docs/observability/features/environments.mdx @@ -1,4 +1,5 @@ --- +title: Environments description: Configure environments to organize your traces, observations, and scores. sidebarTitle: Environments --- diff --git a/pages/docs/observability/features/log-levels.mdx b/content/docs/observability/features/log-levels.mdx similarity index 99% rename from pages/docs/observability/features/log-levels.mdx rename to content/docs/observability/features/log-levels.mdx index 6a42a5b26a..07334d50d0 100644 --- a/pages/docs/observability/features/log-levels.mdx +++ b/content/docs/observability/features/log-levels.mdx @@ -1,4 +1,5 @@ --- +title: Log Levels description: Use Log Levels to control the verbosity of your logs and highlight errors and warnings. sidebarTitle: Log Levels --- diff --git a/pages/docs/observability/features/masking.mdx b/content/docs/observability/features/masking.mdx similarity index 99% rename from pages/docs/observability/features/masking.mdx rename to content/docs/observability/features/masking.mdx index f00cc62177..6703016f86 100644 --- a/pages/docs/observability/features/masking.mdx +++ b/content/docs/observability/features/masking.mdx @@ -1,4 +1,5 @@ --- +title: Masking description: Configure masking to redact sensitive information from inputs, outputs, and metadata sent to the Langfuse server. sidebarTitle: Masking --- @@ -107,7 +108,7 @@ const spanProcessor = new LangfuseSpanProcessor({ // A simple regex to mask credit card numbers const maskedData = data.replace( /\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/g, - "***MASKED_CREDIT_CARD***" + "***MASKED_CREDIT_CARD***", ); return maskedData; }, diff --git a/pages/docs/observability/features/mcp-tracing.mdx b/content/docs/observability/features/mcp-tracing.mdx similarity index 100% rename from pages/docs/observability/features/mcp-tracing.mdx rename to content/docs/observability/features/mcp-tracing.mdx diff --git a/content/docs/observability/features/meta.json b/content/docs/observability/features/meta.json new file mode 100644 index 0000000000..424b219e40 --- /dev/null +++ b/content/docs/observability/features/meta.json @@ -0,0 +1,30 @@ +{ + "title": "Features", + "pages": [ + "---Essential---", + "sessions", + "users", + "environments", + "tags", + "metadata", + "trace-ids-and-distributed-tracing", + "---Advanced---", + "agent-graphs", + "comments", + "corrections", + "log-levels", + "masking", + "mcp-tracing", + "multi-modality", + "observation-types", + "queuing-batching", + "releases-and-versioning", + "sampling", + "token-and-cost-tracking", + "url", + "user-feedback", + "[Query Data ↗](/docs/api-and-data-platform/overview)", + "[Metrics API ↗](/docs/metrics/features/metrics-api)", + "[Custom Dashboards ↗](/docs/metrics/features/custom-dashboards)" + ] +} diff --git a/pages/docs/observability/features/metadata.mdx b/content/docs/observability/features/metadata.mdx similarity index 99% rename from pages/docs/observability/features/metadata.mdx rename to content/docs/observability/features/metadata.mdx index a053c2699f..e6d716704b 100644 --- a/pages/docs/observability/features/metadata.mdx +++ b/content/docs/observability/features/metadata.mdx @@ -1,4 +1,5 @@ --- +title: Metadata description: Add custom metadata to your observations to better understand and correlate your observations sidebarTitle: Metadata --- diff --git a/pages/docs/observability/features/multi-modality.mdx b/content/docs/observability/features/multi-modality.mdx similarity index 99% rename from pages/docs/observability/features/multi-modality.mdx rename to content/docs/observability/features/multi-modality.mdx index 0f7678f857..e7f7473e64 100644 --- a/pages/docs/observability/features/multi-modality.mdx +++ b/content/docs/observability/features/multi-modality.mdx @@ -1,5 +1,5 @@ --- -title: Multi-Modality & Attachments +title: Multi-Modality description: Langfuse fully supports multi-modal LLM traces, including text, images, audio, and attachments. sidebarTitle: Multi-Modality --- diff --git a/pages/docs/observability/features/observation-types.mdx b/content/docs/observability/features/observation-types.mdx similarity index 100% rename from pages/docs/observability/features/observation-types.mdx rename to content/docs/observability/features/observation-types.mdx diff --git a/pages/docs/observability/features/queuing-batching.mdx b/content/docs/observability/features/queuing-batching.mdx similarity index 100% rename from pages/docs/observability/features/queuing-batching.mdx rename to content/docs/observability/features/queuing-batching.mdx diff --git a/pages/docs/observability/features/releases-and-versioning.mdx b/content/docs/observability/features/releases-and-versioning.mdx similarity index 100% rename from pages/docs/observability/features/releases-and-versioning.mdx rename to content/docs/observability/features/releases-and-versioning.mdx diff --git a/pages/docs/observability/features/sampling.mdx b/content/docs/observability/features/sampling.mdx similarity index 99% rename from pages/docs/observability/features/sampling.mdx rename to content/docs/observability/features/sampling.mdx index bbf9aeb71e..6534d08298 100644 --- a/pages/docs/observability/features/sampling.mdx +++ b/content/docs/observability/features/sampling.mdx @@ -1,4 +1,5 @@ --- +title: Sampling description: Configure sampling to control the volume of traces collected by the Langfuse server. sidebarTitle: Sampling --- diff --git a/pages/docs/observability/features/sessions.mdx b/content/docs/observability/features/sessions.mdx similarity index 99% rename from pages/docs/observability/features/sessions.mdx rename to content/docs/observability/features/sessions.mdx index 5db1eb96ee..75499ccdae 100644 --- a/pages/docs/observability/features/sessions.mdx +++ b/content/docs/observability/features/sessions.mdx @@ -1,5 +1,5 @@ --- -title: Sessions (Chats, Threads, etc.) +title: Sessions description: Track LLM chat conversations or threads across multiple observations and traces into a single session. Replay the entire interaction to debug or analyze the conversation. sidebarTitle: Sessions --- diff --git a/pages/docs/observability/features/tags.mdx b/content/docs/observability/features/tags.mdx similarity index 99% rename from pages/docs/observability/features/tags.mdx rename to content/docs/observability/features/tags.mdx index 22bfadc1f5..f6397bf374 100644 --- a/pages/docs/observability/features/tags.mdx +++ b/content/docs/observability/features/tags.mdx @@ -1,5 +1,5 @@ --- -title: Add tags to observations and traces in Langfuse +title: Tags description: Tags help to filter and organize traces and observations in Langfuse based on use case, functions/apis used, environment and other criteria. sidebarTitle: Tags --- diff --git a/pages/docs/observability/features/token-and-cost-tracking.mdx b/content/docs/observability/features/token-and-cost-tracking.mdx similarity index 99% rename from pages/docs/observability/features/token-and-cost-tracking.mdx rename to content/docs/observability/features/token-and-cost-tracking.mdx index c890081dd0..4172dc1c6e 100644 --- a/pages/docs/observability/features/token-and-cost-tracking.mdx +++ b/content/docs/observability/features/token-and-cost-tracking.mdx @@ -1,5 +1,5 @@ --- -title: Model Usage & Cost Tracking for LLM applications (open source) +title: Token & Cost Tracking description: Langfuse tracks usage and cost of LLM generations for various models (incl OpenAI, Anthropic, Google, and more). You can always add your own models. sidebarTitle: Token & Cost Tracking --- diff --git a/pages/docs/observability/features/trace-ids-and-distributed-tracing.mdx b/content/docs/observability/features/trace-ids-and-distributed-tracing.mdx similarity index 100% rename from pages/docs/observability/features/trace-ids-and-distributed-tracing.mdx rename to content/docs/observability/features/trace-ids-and-distributed-tracing.mdx diff --git a/pages/docs/observability/features/url.mdx b/content/docs/observability/features/url.mdx similarity index 100% rename from pages/docs/observability/features/url.mdx rename to content/docs/observability/features/url.mdx diff --git a/pages/docs/observability/features/user-feedback.mdx b/content/docs/observability/features/user-feedback.mdx similarity index 99% rename from pages/docs/observability/features/user-feedback.mdx rename to content/docs/observability/features/user-feedback.mdx index ef5dd93dc3..bb4eda38a9 100644 --- a/pages/docs/observability/features/user-feedback.mdx +++ b/content/docs/observability/features/user-feedback.mdx @@ -1,5 +1,5 @@ --- -title: Collect User Feedback in Langfuse +title: User Feedback description: Collect user feedback on LLM or agent outputs to improve model performance and user satisfaction. sidebarTitle: User Feedback --- diff --git a/pages/docs/observability/features/users.mdx b/content/docs/observability/features/users.mdx similarity index 99% rename from pages/docs/observability/features/users.mdx rename to content/docs/observability/features/users.mdx index c200fb33a7..43f9e63240 100644 --- a/pages/docs/observability/features/users.mdx +++ b/content/docs/observability/features/users.mdx @@ -1,4 +1,5 @@ --- +title: User Tracking description: User-level LLM observability to track token usage, usage volume and individual user feedback. sidebarTitle: User Tracking --- diff --git a/pages/docs/observability/get-started.mdx b/content/docs/observability/get-started.mdx similarity index 99% rename from pages/docs/observability/get-started.mdx rename to content/docs/observability/get-started.mdx index 69b57b9db9..a7757eb8b9 100644 --- a/pages/docs/observability/get-started.mdx +++ b/content/docs/observability/get-started.mdx @@ -1,4 +1,5 @@ --- +title: Get Started description: Get started with LLM observability with Langfuse in minutes before diving into all platform features. --- diff --git a/content/docs/observability/meta.json b/content/docs/observability/meta.json new file mode 100644 index 0000000000..fd503c30f9 --- /dev/null +++ b/content/docs/observability/meta.json @@ -0,0 +1,12 @@ +{ + "title": "Observability", + "pages": [ + "overview", + "get-started", + "data-model", + "features", + "sdk", + "external:[Integrations ↗](/integrations)", + "troubleshooting-and-faq" + ] +} diff --git a/pages/docs/observability/overview.mdx b/content/docs/observability/overview.mdx similarity index 98% rename from pages/docs/observability/overview.mdx rename to content/docs/observability/overview.mdx index bdbc153c10..570ebd4bbb 100644 --- a/pages/docs/observability/overview.mdx +++ b/content/docs/observability/overview.mdx @@ -1,5 +1,5 @@ --- -title: "LLM Observability & Application Tracing (Open Source)" +title: "Overview" description: "Open source application tracing and observability for LLM apps. Capture traces, monitor latency, track costs, and debug issues across OpenAI, LangChain, LlamaIndex, and more." --- @@ -41,21 +41,29 @@ Already know what you want? Take a look under _Features_ for guides on specific <details> <summary>What is the difference between observability and tracing?</summary> + **Observability** is the broader capability of understanding the internal state of your system from its outputs. It encompasses tracing, metrics, and logging. **Tracing** is a specific observability technique that records the flow of a request through your system, preserving causal relationships between operations. In the context of LLM applications, tracing is the most important observability tool because it captures the full context of each request — prompts, responses, tool calls, and their relationships. + </details> <details> <summary>What is application tracing?</summary> + Application tracing records the complete lifecycle of a request as it flows through your system. Each trace captures every operation — LLM calls, retrieval steps, tool executions, and custom logic — along with timing, inputs, outputs, and metadata. This gives you full visibility into what happened during each request, enabling debugging, performance optimization, and quality monitoring. + </details> <details> <summary>How does Langfuse compare to other tracing solutions?</summary> + Langfuse is purpose-built for LLM applications, which means it natively understands LLM-specific concepts like token usage, model parameters, prompt/completion pairs, and evaluation scores. Unlike general-purpose APM tools, Langfuse provides features specific to AI engineering: [LLM-as-a-Judge evaluation](/docs/evaluation/evaluation-methods/llm-as-a-judge), [prompt management](/docs/prompt-management/overview), [experiments and datasets](/docs/evaluation/experiments/datasets), and [custom dashboards](/docs/metrics/features/custom-dashboards). It's also [open source](/self-hosting) and can be self-hosted. + </details> <details> <summary>Does Langfuse add latency to my application?</summary> + No. Langfuse SDKs send tracing data asynchronously in the background. Trace events are queued locally and flushed in batches, so your application's response time is not affected. See [queuing and batching](/docs/observability/features/queuing-batching) for details. + </details> diff --git a/pages/docs/observability/sdk/advanced-features.mdx b/content/docs/observability/sdk/advanced-features.mdx similarity index 100% rename from pages/docs/observability/sdk/advanced-features.mdx rename to content/docs/observability/sdk/advanced-features.mdx diff --git a/pages/docs/observability/sdk/instrumentation.mdx b/content/docs/observability/sdk/instrumentation.mdx similarity index 100% rename from pages/docs/observability/sdk/instrumentation.mdx rename to content/docs/observability/sdk/instrumentation.mdx diff --git a/content/docs/observability/sdk/meta.json b/content/docs/observability/sdk/meta.json new file mode 100644 index 0000000000..95261c2df9 --- /dev/null +++ b/content/docs/observability/sdk/meta.json @@ -0,0 +1,12 @@ +{ + "title": "SDKs", + "pages": [ + "overview", + "instrumentation", + "advanced-features", + "troubleshooting-and-faq", + "upgrade-path", + "external:[Python Reference ↗](https://python.reference.langfuse.com/)", + "external:[JS/TS Reference ↗](https://js.reference.langfuse.com/)" + ] +} diff --git a/pages/docs/observability/sdk/overview.mdx b/content/docs/observability/sdk/overview.mdx similarity index 99% rename from pages/docs/observability/sdk/overview.mdx rename to content/docs/observability/sdk/overview.mdx index e765eab1e0..9861352bc2 100644 --- a/pages/docs/observability/sdk/overview.mdx +++ b/content/docs/observability/sdk/overview.mdx @@ -280,6 +280,7 @@ const langfuse = new LangfuseClient({ baseUrl: "https://cloud.langfuse.com", // or your self-hosted instance }); ``` + </details> diff --git a/pages/docs/observability/sdk/troubleshooting-and-faq.mdx b/content/docs/observability/sdk/troubleshooting-and-faq.mdx similarity index 100% rename from pages/docs/observability/sdk/troubleshooting-and-faq.mdx rename to content/docs/observability/sdk/troubleshooting-and-faq.mdx diff --git a/pages/docs/observability/sdk/upgrade-path.mdx b/content/docs/observability/sdk/upgrade-path.mdx similarity index 100% rename from pages/docs/observability/sdk/upgrade-path.mdx rename to content/docs/observability/sdk/upgrade-path.mdx diff --git a/pages/docs/observability/troubleshooting-and-faq.mdx b/content/docs/observability/troubleshooting-and-faq.mdx similarity index 92% rename from pages/docs/observability/troubleshooting-and-faq.mdx rename to content/docs/observability/troubleshooting-and-faq.mdx index d29c9d021b..f9677af8c2 100644 --- a/pages/docs/observability/troubleshooting-and-faq.mdx +++ b/content/docs/observability/troubleshooting-and-faq.mdx @@ -1,6 +1,6 @@ --- -title: Troubleshooting and FAQ for Langfuse Tracing -sidebarTitle: Troubleshooting and FAQ +title: Troubleshooting & FAQ +sidebarTitle: Troubleshooting & FAQ description: Troubleshooting and FAQ for Langfuse Tracing. --- diff --git a/pages/docs/prompt-management/data-model.mdx b/content/docs/prompt-management/data-model.mdx similarity index 99% rename from pages/docs/prompt-management/data-model.mdx rename to content/docs/prompt-management/data-model.mdx index 0055425212..bae7ea591a 100644 --- a/pages/docs/prompt-management/data-model.mdx +++ b/content/docs/prompt-management/data-model.mdx @@ -1,5 +1,5 @@ --- -title: Core Concepts +title: Concepts sidebarTitle: Concepts description: Core concepts of Langfuse Prompt Management including prompt types, versioning, labels, and configuration. --- diff --git a/pages/docs/prompt-management/features/a-b-testing.mdx b/content/docs/prompt-management/features/a-b-testing.mdx similarity index 99% rename from pages/docs/prompt-management/features/a-b-testing.mdx rename to content/docs/prompt-management/features/a-b-testing.mdx index 635b992d26..61757b36ef 100644 --- a/pages/docs/prompt-management/features/a-b-testing.mdx +++ b/content/docs/prompt-management/features/a-b-testing.mdx @@ -1,5 +1,5 @@ --- -title: A/B Testing of LLM Prompts +title: A/B Testing sidebarTitle: A/B Testing description: Use Open Source Prompt Management in Langfuse to systematically test and improve your LLM prompts with A/B testing. --- diff --git a/pages/docs/prompt-management/features/caching.mdx b/content/docs/prompt-management/features/caching.mdx similarity index 99% rename from pages/docs/prompt-management/features/caching.mdx rename to content/docs/prompt-management/features/caching.mdx index a201014032..1311be6d11 100644 --- a/pages/docs/prompt-management/features/caching.mdx +++ b/content/docs/prompt-management/features/caching.mdx @@ -1,5 +1,5 @@ --- -title: Caching in Client SDKs +title: Caching sidebarTitle: Caching description: Langfuse prompts are cached client-side in the SDKs, so there's no latency impact after the first use. --- diff --git a/pages/docs/prompt-management/features/composability.mdx b/content/docs/prompt-management/features/composability.mdx similarity index 100% rename from pages/docs/prompt-management/features/composability.mdx rename to content/docs/prompt-management/features/composability.mdx diff --git a/pages/docs/prompt-management/features/config.mdx b/content/docs/prompt-management/features/config.mdx similarity index 99% rename from pages/docs/prompt-management/features/config.mdx rename to content/docs/prompt-management/features/config.mdx index 31e7e1b551..b9b1c47292 100644 --- a/pages/docs/prompt-management/features/config.mdx +++ b/content/docs/prompt-management/features/config.mdx @@ -1,5 +1,5 @@ --- -title: Prompt Config +title: Config sidebarTitle: Config description: The prompt config in Langfuse is an optional JSON object attached to each prompt that stores structured data such as model parameters (like model name, temperature), function/tool parameters, or JSON schemas. --- diff --git a/pages/docs/prompt-management/features/folders.mdx b/content/docs/prompt-management/features/folders.mdx similarity index 94% rename from pages/docs/prompt-management/features/folders.mdx rename to content/docs/prompt-management/features/folders.mdx index 1c07ad3ac2..053fd5aafd 100644 --- a/pages/docs/prompt-management/features/folders.mdx +++ b/content/docs/prompt-management/features/folders.mdx @@ -1,5 +1,5 @@ --- -title: "Prompt Folders - Organize Your Prompts" +title: Folders sidebarTitle: Folders description: "Organize prompts into virtual folders to group prompts with similar purposes. Use folder hierarchies to manage prompt libraries at scale." --- diff --git a/pages/docs/prompt-management/features/github-integration.mdx b/content/docs/prompt-management/features/github-integration.mdx similarity index 99% rename from pages/docs/prompt-management/features/github-integration.mdx rename to content/docs/prompt-management/features/github-integration.mdx index bde60094d3..ba10bc2d7e 100644 --- a/pages/docs/prompt-management/features/github-integration.mdx +++ b/content/docs/prompt-management/features/github-integration.mdx @@ -1,4 +1,5 @@ --- +title: GitHub Integration for Langfuse Prompts description: Integrate Langfuse prompts with GitHub using webhooks for version control, CI/CD workflows, and automated synchronization --- diff --git a/pages/docs/prompt-management/features/guaranteed-availability.mdx b/content/docs/prompt-management/features/guaranteed-availability.mdx similarity index 99% rename from pages/docs/prompt-management/features/guaranteed-availability.mdx rename to content/docs/prompt-management/features/guaranteed-availability.mdx index c88dca18cb..36ddf04799 100644 --- a/pages/docs/prompt-management/features/guaranteed-availability.mdx +++ b/content/docs/prompt-management/features/guaranteed-availability.mdx @@ -1,5 +1,5 @@ --- -title: Guaranteed Availability of Prompts +title: Guaranteed Availability sidebarTitle: Guaranteed Availability description: Ensure 100% availability of prompts by pre-fetching them on application startup and providing a fallback prompt. --- diff --git a/pages/docs/prompt-management/features/link-to-traces.mdx b/content/docs/prompt-management/features/link-to-traces.mdx similarity index 100% rename from pages/docs/prompt-management/features/link-to-traces.mdx rename to content/docs/prompt-management/features/link-to-traces.mdx diff --git a/pages/docs/prompt-management/features/mcp-server.mdx b/content/docs/prompt-management/features/mcp-server.mdx similarity index 99% rename from pages/docs/prompt-management/features/mcp-server.mdx rename to content/docs/prompt-management/features/mcp-server.mdx index cd0a409168..8d8bb9e30a 100644 --- a/pages/docs/prompt-management/features/mcp-server.mdx +++ b/content/docs/prompt-management/features/mcp-server.mdx @@ -1,5 +1,5 @@ --- -title: MCP Server for Prompts +title: MCP Server sidebarTitle: MCP Server description: Access and manage Langfuse prompts through the Model Context Protocol (MCP), enabling AI agents to work with your prompt library programmatically. --- diff --git a/pages/docs/prompt-management/features/message-placeholders.mdx b/content/docs/prompt-management/features/message-placeholders.mdx similarity index 99% rename from pages/docs/prompt-management/features/message-placeholders.mdx rename to content/docs/prompt-management/features/message-placeholders.mdx index 3adb0766e9..51a6c89166 100644 --- a/pages/docs/prompt-management/features/message-placeholders.mdx +++ b/content/docs/prompt-management/features/message-placeholders.mdx @@ -1,5 +1,5 @@ --- -title: Message Placeholders in Chat Prompts +title: Message Placeholders sidebarTitle: Message Placeholders description: Use message placeholders in chat prompts to insert a list of chat messages at specific positions within a chat prompt. --- diff --git a/content/docs/prompt-management/features/meta.json b/content/docs/prompt-management/features/meta.json new file mode 100644 index 0000000000..fbc696240d --- /dev/null +++ b/content/docs/prompt-management/features/meta.json @@ -0,0 +1,23 @@ +{ + "title": "Features", + "pages": [ + "---Essential---", + "link-to-traces", + "prompt-version-control", + "playground", + "---Advanced---", + "variables", + "composability", + "message-placeholders", + "config", + "[Prompt Experiments ↗](/docs/evaluation/dataset-runs/run-via-ui)", + "caching", + "mcp-server", + "webhooks-slack-integrations", + "github-integration", + "n8n-node", + "guaranteed-availability", + "a-b-testing", + "folders" + ] +} diff --git a/pages/docs/prompt-management/features/n8n-node.mdx b/content/docs/prompt-management/features/n8n-node.mdx similarity index 62% rename from pages/docs/prompt-management/features/n8n-node.mdx rename to content/docs/prompt-management/features/n8n-node.mdx index 1e05df594a..7ba0fc4ae9 100644 --- a/pages/docs/prompt-management/features/n8n-node.mdx +++ b/content/docs/prompt-management/features/n8n-node.mdx @@ -1,5 +1,5 @@ --- -title: Open Source Prompt Management for n8n +title: n8n Node sidebarTitle: n8n Node description: Community-maintained n8n node that enables seamless integration of Langfuse prompt management capabilities into n8n workflows. --- @@ -33,37 +33,8 @@ n8n Cloud: Use the node directly in your workflows by searching for `Langfuse`. ## GitHub Readme -import { useData } from "nextra/hooks"; -import { Playground } from "nextra/components"; - -export const getStaticProps = async () => { - const res = await fetch( - "https://raw.githubusercontent.com/langfuse/n8n-nodes-langfuse/refs/heads/master/README.md" - ); - const readmeContent = await res.text(); - return { - props: { - ssg: { - n8nReadme: readmeContent, - }, - }, - }; -}; - -export function N8nNodeReadme() { - const { n8nReadme } = useData(); - // Basic check to prevent errors if fetching failed or content is empty - if (!n8nReadme) { - return <p>Error loading README content.</p>; - } - // Ensure the source prop receives a string - const readmeString = - typeof n8nReadme === "string" ? n8nReadme : JSON.stringify(n8nReadme); - return <Playground source={readmeString} />; -} - <div className="p-6 mt-6 border bg-card rounded-md"> - <N8nNodeReadme /> + <FetchReadme url="https://raw.githubusercontent.com/langfuse/n8n-nodes-langfuse/refs/heads/master/README.md" /> </div> Source: [langfuse/n8n-nodes-langfuse](https://github.com/langfuse/n8n-nodes-langfuse) diff --git a/pages/docs/prompt-management/features/playground.mdx b/content/docs/prompt-management/features/playground.mdx similarity index 99% rename from pages/docs/prompt-management/features/playground.mdx rename to content/docs/prompt-management/features/playground.mdx index 00d251c41f..46d22a6b49 100644 --- a/pages/docs/prompt-management/features/playground.mdx +++ b/content/docs/prompt-management/features/playground.mdx @@ -1,4 +1,5 @@ --- +title: Playground description: Test, iterate, and compare different prompts and models within the LLM Playground. sidebarTitle: Playground --- diff --git a/pages/docs/prompt-management/features/prompt-version-control.mdx b/content/docs/prompt-management/features/prompt-version-control.mdx similarity index 99% rename from pages/docs/prompt-management/features/prompt-version-control.mdx rename to content/docs/prompt-management/features/prompt-version-control.mdx index 9bef62e493..0997d172e5 100644 --- a/pages/docs/prompt-management/features/prompt-version-control.mdx +++ b/content/docs/prompt-management/features/prompt-version-control.mdx @@ -1,5 +1,5 @@ --- -title: Prompt Version Control +title: Version Control sidebarTitle: Version Control description: Use prompt labels to fetch specific prompt versions in the SDKs. --- diff --git a/pages/docs/prompt-management/features/variables.mdx b/content/docs/prompt-management/features/variables.mdx similarity index 99% rename from pages/docs/prompt-management/features/variables.mdx rename to content/docs/prompt-management/features/variables.mdx index 7c3385f9f1..9b95257e06 100644 --- a/pages/docs/prompt-management/features/variables.mdx +++ b/content/docs/prompt-management/features/variables.mdx @@ -1,5 +1,5 @@ --- -title: Variables in Prompts +title: Variables sidebarTitle: Variables description: Insert dynamic text into prompts using variables that are resolved at runtime. --- diff --git a/pages/docs/prompt-management/features/webhooks-slack-integrations.mdx b/content/docs/prompt-management/features/webhooks-slack-integrations.mdx similarity index 99% rename from pages/docs/prompt-management/features/webhooks-slack-integrations.mdx rename to content/docs/prompt-management/features/webhooks-slack-integrations.mdx index ba7bbb06d9..5439f1be38 100644 --- a/pages/docs/prompt-management/features/webhooks-slack-integrations.mdx +++ b/content/docs/prompt-management/features/webhooks-slack-integrations.mdx @@ -1,5 +1,5 @@ --- -title: Webhooks & Slack Integration +title: Webhooks sidebarTitle: Webhooks description: Use webhooks to receive real‑time notifications whenever a prompt version is created, updated, or deleted in Langfuse. --- diff --git a/pages/docs/prompt-management/get-started.mdx b/content/docs/prompt-management/get-started.mdx similarity index 96% rename from pages/docs/prompt-management/get-started.mdx rename to content/docs/prompt-management/get-started.mdx index 16447c2e9d..13add0b5ca 100644 --- a/pages/docs/prompt-management/get-started.mdx +++ b/content/docs/prompt-management/get-started.mdx @@ -1,5 +1,5 @@ --- -title: Get Started with Open Source Prompt Management +title: Get Started sidebarTitle: Get Started description: Get started with Langfuse Prompt Management. --- diff --git a/content/docs/prompt-management/meta.json b/content/docs/prompt-management/meta.json new file mode 100644 index 0000000000..c1ee3530c0 --- /dev/null +++ b/content/docs/prompt-management/meta.json @@ -0,0 +1,10 @@ +{ + "title": "Prompt Management", + "pages": [ + "overview", + "get-started", + "data-model", + "features", + "troubleshooting-and-faq" + ] +} diff --git a/pages/docs/prompt-management/overview.mdx b/content/docs/prompt-management/overview.mdx similarity index 98% rename from pages/docs/prompt-management/overview.mdx rename to content/docs/prompt-management/overview.mdx index 18b3cd08e5..2753211f1d 100644 --- a/pages/docs/prompt-management/overview.mdx +++ b/content/docs/prompt-management/overview.mdx @@ -1,5 +1,5 @@ --- -title: Open Source Prompt Management +title: Overview description: Manage and version your prompts in Langfuse (open source). When retrieved, they are cached by the Langfuse SDKs for low latency. --- diff --git a/pages/docs/prompt-management/troubleshooting-and-faq.mdx b/content/docs/prompt-management/troubleshooting-and-faq.mdx similarity index 93% rename from pages/docs/prompt-management/troubleshooting-and-faq.mdx rename to content/docs/prompt-management/troubleshooting-and-faq.mdx index 0e26a9fd69..4f55a8260f 100644 --- a/pages/docs/prompt-management/troubleshooting-and-faq.mdx +++ b/content/docs/prompt-management/troubleshooting-and-faq.mdx @@ -1,5 +1,5 @@ --- -title: Troubleshooting and FAQ for Langfuse Prompt Management +title: Troubleshooting and FAQ sidebarTitle: Troubleshooting and FAQ description: Troubleshooting and FAQ for Langfuse Prompt Management. --- diff --git a/content/docs/references/meta.json b/content/docs/references/meta.json new file mode 100644 index 0000000000..6e6f86bf25 --- /dev/null +++ b/content/docs/references/meta.json @@ -0,0 +1,9 @@ +{ + "title": "SDK & API References", + "pages": [ + "external:[API Reference ↗](https://api.reference.langfuse.com)", + "external:[Python SDK ↗](https://python.reference.langfuse.com)", + "external:[JS SDK ↗](https://js.reference.langfuse.com)", + "external:[Java SDK ↗](https://github.com/langfuse/langfuse-java)" + ] +} diff --git a/pages/docs/roadmap.mdx b/content/docs/roadmap.mdx similarity index 99% rename from pages/docs/roadmap.mdx rename to content/docs/roadmap.mdx index ba30298cea..14f9128b81 100644 --- a/pages/docs/roadmap.mdx +++ b/content/docs/roadmap.mdx @@ -1,4 +1,5 @@ --- +title: Roadmap description: Sneak peak into upcoming new features and changes in Langfuse. This page is updated regularly. --- diff --git a/pages/docs/security-and-guardrails.mdx b/content/docs/security-and-guardrails.mdx similarity index 99% rename from pages/docs/security-and-guardrails.mdx rename to content/docs/security-and-guardrails.mdx index c768ba5974..e10b20f23e 100644 --- a/pages/docs/security-and-guardrails.mdx +++ b/content/docs/security-and-guardrails.mdx @@ -1,7 +1,7 @@ --- -title: "LLM Security & Guardrails" +title: "Security & Guardrails" description: "Comprehensive guide to LLM security guardrails — protect against prompt injection, PII leakage, and harmful content. Learn how to use LLM Guard, NeMo Guardrails, and Langfuse to monitor and evaluate LLM safety." -sidebarTitle: LLM Security & Guardrails +sidebarTitle: Security & Guardrails --- # LLM Security & Guardrails @@ -187,22 +187,30 @@ import { FileCode, BookOpen } from "lucide-react"; <details> <summary>What is LLM Guard?</summary> + [LLM Guard](https://llm-guard.com) is an open-source library by Protect AI that provides security guardrails for LLM applications. It includes input scanners (prompt injection detection, PII anonymization, toxicity detection, topic banning) and output scanners (content moderation, bias detection, malicious URL detection, deanonymization). LLM Guard can be integrated with Langfuse to trace and monitor the effectiveness of each security check. + </details> <details> <summary>What are security guardrails for LLMs?</summary> + Security guardrails are protective measures that intercept and filter inputs and outputs of LLM applications to prevent misuse and harm. They include input guardrails (blocking prompt injection and malicious inputs), output guardrails (filtering toxic or harmful responses), PII detection and redaction, content filtering, and topic restriction. Guardrails run at the application layer and are complementary to model-level safety training. + </details> <details> <summary>How do I prevent prompt injection in my LLM application?</summary> + Prompt injection can be mitigated through multiple layers: (1) Use a guardrail library like LLM Guard or Lakera to detect and block injection attempts before they reach the model. (2) Implement clear separation between system instructions and user input. (3) Use Langfuse tracing to monitor for injection attempts in production. (4) Set up automated evaluations to flag suspicious patterns. No single approach is 100% effective, so a defense-in-depth strategy with monitoring is recommended. + </details> <details> <summary>How do I monitor LLM security in production?</summary> + Use Langfuse to monitor your LLM security posture: (1) Trace every request through your guardrail pipeline to see which checks triggered. (2) Use LLM-as-a-Judge evaluators to automatically score traces for toxicity, PII leakage, and prompt injection. (3) Set up custom dashboards to track security scores over time. (4) Use annotation queues for human review of flagged conversations. (5) Track the latency impact of security checks to balance protection with user experience. + </details> ## GitHub Discussions diff --git a/pages/faq/all/ai-research-assistant-monitoring.mdx b/content/faq/all/ai-research-assistant-monitoring.mdx similarity index 100% rename from pages/faq/all/ai-research-assistant-monitoring.mdx rename to content/faq/all/ai-research-assistant-monitoring.mdx diff --git a/pages/faq/all/api-524-http-errors.mdx b/content/faq/all/api-524-http-errors.mdx similarity index 100% rename from pages/faq/all/api-524-http-errors.mdx rename to content/faq/all/api-524-http-errors.mdx diff --git a/pages/faq/all/api-limits.mdx b/content/faq/all/api-limits.mdx similarity index 100% rename from pages/faq/all/api-limits.mdx rename to content/faq/all/api-limits.mdx diff --git a/pages/faq/all/arm-images.mdx b/content/faq/all/arm-images.mdx similarity index 100% rename from pages/faq/all/arm-images.mdx rename to content/faq/all/arm-images.mdx diff --git a/pages/faq/all/aws-lambda-and-serverless-functions.mdx b/content/faq/all/aws-lambda-and-serverless-functions.mdx similarity index 100% rename from pages/faq/all/aws-lambda-and-serverless-functions.mdx rename to content/faq/all/aws-lambda-and-serverless-functions.mdx diff --git a/pages/faq/all/best-braintrustdata-alternatives.mdx b/content/faq/all/best-braintrustdata-alternatives.mdx similarity index 100% rename from pages/faq/all/best-braintrustdata-alternatives.mdx rename to content/faq/all/best-braintrustdata-alternatives.mdx diff --git a/pages/faq/all/best-galileo-ai-alternatives.mdx b/content/faq/all/best-galileo-ai-alternatives.mdx similarity index 100% rename from pages/faq/all/best-galileo-ai-alternatives.mdx rename to content/faq/all/best-galileo-ai-alternatives.mdx diff --git a/pages/faq/all/best-phoenix-arize-alternatives.mdx b/content/faq/all/best-phoenix-arize-alternatives.mdx similarity index 100% rename from pages/faq/all/best-phoenix-arize-alternatives.mdx rename to content/faq/all/best-phoenix-arize-alternatives.mdx diff --git a/pages/faq/all/cannot-see-organization.mdx b/content/faq/all/cannot-see-organization.mdx similarity index 100% rename from pages/faq/all/cannot-see-organization.mdx rename to content/faq/all/cannot-see-organization.mdx diff --git a/pages/faq/all/challenges-of-building-llm-applications.mdx b/content/faq/all/challenges-of-building-llm-applications.mdx similarity index 100% rename from pages/faq/all/challenges-of-building-llm-applications.mdx rename to content/faq/all/challenges-of-building-llm-applications.mdx diff --git a/pages/faq/all/chatbot-analytics.mdx b/content/faq/all/chatbot-analytics.mdx similarity index 99% rename from pages/faq/all/chatbot-analytics.mdx rename to content/faq/all/chatbot-analytics.mdx index 44d946b510..3e25f3e66b 100644 --- a/pages/faq/all/chatbot-analytics.mdx +++ b/content/faq/all/chatbot-analytics.mdx @@ -225,20 +225,28 @@ When evaluating a chatbot analytics platform, consider these key capabilities: <details> <summary>What is chatbot analytics?</summary> + Chatbot analytics is the practice of collecting, measuring, and analyzing data from your AI chatbot to understand its performance and improve user experience. This includes tracking metrics like response quality, conversation length, user satisfaction, cost per conversation, and error rates. With proper analytics, you can identify where your chatbot struggles, optimize prompts, and make data-driven improvements. + </details> <details> <summary>What chatbot analytics tools should I use?</summary> + The best toolset depends on your needs. For LLM-powered chatbots, start with an LLM observability platform like Langfuse for conversation tracing, cost tracking, and quality evaluation. Add product analytics tools like PostHog for user behavior analysis, and evaluation frameworks like Ragas for automated quality assessment. Most teams find that a combination of 2-3 tools covers their analytics needs. + </details> <details> <summary>How do I measure chatbot performance?</summary> + Measure chatbot performance across multiple dimensions: (1) **Quality** — use LLM-as-a-Judge evaluation and user feedback scores, (2) **Efficiency** — track response latency, cost per conversation, and token usage, (3) **Effectiveness** — measure resolution rate, escalation rate, and user satisfaction, (4) **Safety** — monitor hallucination rate, compliance violations, and prompt injection attempts. Use custom dashboards to visualize trends over time. + </details> <details> <summary>How do I improve my chatbot's responses?</summary> + Start by analyzing your chatbot analytics to identify problem areas. Use conversation tracing to inspect low-quality responses and understand why they failed. Set up automated evaluations to score responses on key dimensions (helpfulness, accuracy, tone). Build a dataset of problematic conversations and run experiments to test prompt improvements before deploying them to production. Continuously monitor production performance and feed edge cases back into your test dataset. + </details> diff --git a/pages/faq/all/compatibility-langfuse-ui-and-python-sdk.mdx b/content/faq/all/compatibility-langfuse-ui-and-python-sdk.mdx similarity index 100% rename from pages/faq/all/compatibility-langfuse-ui-and-python-sdk.mdx rename to content/faq/all/compatibility-langfuse-ui-and-python-sdk.mdx diff --git a/pages/faq/all/conditional-prompt-embedding.mdx b/content/faq/all/conditional-prompt-embedding.mdx similarity index 100% rename from pages/faq/all/conditional-prompt-embedding.mdx rename to content/faq/all/conditional-prompt-embedding.mdx diff --git a/pages/faq/all/costs-tokens-langfuse.mdx b/content/faq/all/costs-tokens-langfuse.mdx similarity index 100% rename from pages/faq/all/costs-tokens-langfuse.mdx rename to content/faq/all/costs-tokens-langfuse.mdx diff --git a/pages/faq/all/custom-langchain-run-names.mdx b/content/faq/all/custom-langchain-run-names.mdx similarity index 100% rename from pages/faq/all/custom-langchain-run-names.mdx rename to content/faq/all/custom-langchain-run-names.mdx diff --git a/pages/faq/all/cutting-costs.mdx b/content/faq/all/cutting-costs.mdx similarity index 100% rename from pages/faq/all/cutting-costs.mdx rename to content/faq/all/cutting-costs.mdx diff --git a/pages/faq/all/data-retention-timeouts-and-errors.mdx b/content/faq/all/data-retention-timeouts-and-errors.mdx similarity index 100% rename from pages/faq/all/data-retention-timeouts-and-errors.mdx rename to content/faq/all/data-retention-timeouts-and-errors.mdx diff --git a/pages/faq/all/debug-docker-deployment.mdx b/content/faq/all/debug-docker-deployment.mdx similarity index 100% rename from pages/faq/all/debug-docker-deployment.mdx rename to content/faq/all/debug-docker-deployment.mdx diff --git a/pages/faq/all/delete-account-langfuse.mdx b/content/faq/all/delete-account-langfuse.mdx similarity index 100% rename from pages/faq/all/delete-account-langfuse.mdx rename to content/faq/all/delete-account-langfuse.mdx diff --git a/pages/faq/all/empty-trace-input-and-output.mdx b/content/faq/all/empty-trace-input-and-output.mdx similarity index 100% rename from pages/faq/all/empty-trace-input-and-output.mdx rename to content/faq/all/empty-trace-input-and-output.mdx diff --git a/pages/faq/all/enable-disable-tracing.mdx b/content/faq/all/enable-disable-tracing.mdx similarity index 100% rename from pages/faq/all/enable-disable-tracing.mdx rename to content/faq/all/enable-disable-tracing.mdx diff --git a/pages/faq/all/enforcing-2fa.mdx b/content/faq/all/enforcing-2fa.mdx similarity index 100% rename from pages/faq/all/enforcing-2fa.mdx rename to content/faq/all/enforcing-2fa.mdx diff --git a/pages/faq/all/error-handling-and-timeouts.mdx b/content/faq/all/error-handling-and-timeouts.mdx similarity index 100% rename from pages/faq/all/error-handling-and-timeouts.mdx rename to content/faq/all/error-handling-and-timeouts.mdx diff --git a/pages/faq/all/evaluating-sessions-conversations.mdx b/content/faq/all/evaluating-sessions-conversations.mdx similarity index 100% rename from pages/faq/all/evaluating-sessions-conversations.mdx rename to content/faq/all/evaluating-sessions-conversations.mdx diff --git a/pages/faq/all/existing-otel-setup.mdx b/content/faq/all/existing-otel-setup.mdx similarity index 100% rename from pages/faq/all/existing-otel-setup.mdx rename to content/faq/all/existing-otel-setup.mdx diff --git a/pages/faq/all/existing-sentry-setup.mdx b/content/faq/all/existing-sentry-setup.mdx similarity index 100% rename from pages/faq/all/existing-sentry-setup.mdx rename to content/faq/all/existing-sentry-setup.mdx diff --git a/pages/faq/all/fifteen-questions-langfuse-answered.mdx b/content/faq/all/fifteen-questions-langfuse-answered.mdx similarity index 100% rename from pages/faq/all/fifteen-questions-langfuse-answered.mdx rename to content/faq/all/fifteen-questions-langfuse-answered.mdx diff --git a/pages/faq/all/forgot-password.mdx b/content/faq/all/forgot-password.mdx similarity index 100% rename from pages/faq/all/forgot-password.mdx rename to content/faq/all/forgot-password.mdx diff --git a/pages/faq/all/how-to-measure-prompt-performance.mdx b/content/faq/all/how-to-measure-prompt-performance.mdx similarity index 100% rename from pages/faq/all/how-to-measure-prompt-performance.mdx rename to content/faq/all/how-to-measure-prompt-performance.mdx diff --git a/pages/faq/all/inviting-in-langfuse.mdx b/content/faq/all/inviting-in-langfuse.mdx similarity index 100% rename from pages/faq/all/inviting-in-langfuse.mdx rename to content/faq/all/inviting-in-langfuse.mdx diff --git a/pages/faq/all/langfuse-evaluators-on-dataset-runs.mdx b/content/faq/all/langfuse-evaluators-on-dataset-runs.mdx similarity index 100% rename from pages/faq/all/langfuse-evaluators-on-dataset-runs.mdx rename to content/faq/all/langfuse-evaluators-on-dataset-runs.mdx diff --git a/pages/faq/all/langfuse-support.mdx b/content/faq/all/langfuse-support.mdx similarity index 100% rename from pages/faq/all/langfuse-support.mdx rename to content/faq/all/langfuse-support.mdx diff --git a/pages/faq/all/langsmith-alternative.mdx b/content/faq/all/langsmith-alternative.mdx similarity index 100% rename from pages/faq/all/langsmith-alternative.mdx rename to content/faq/all/langsmith-alternative.mdx diff --git a/pages/faq/all/limit-access-to-internal-users.mdx b/content/faq/all/limit-access-to-internal-users.mdx similarity index 100% rename from pages/faq/all/limit-access-to-internal-users.mdx rename to content/faq/all/limit-access-to-internal-users.mdx diff --git a/pages/faq/all/link-prompt-management-with-tracing.mdx b/content/faq/all/link-prompt-management-with-tracing.mdx similarity index 100% rename from pages/faq/all/link-prompt-management-with-tracing.mdx rename to content/faq/all/link-prompt-management-with-tracing.mdx diff --git a/pages/faq/all/llm-analytics-101.mdx b/content/faq/all/llm-analytics-101.mdx similarity index 100% rename from pages/faq/all/llm-analytics-101.mdx rename to content/faq/all/llm-analytics-101.mdx diff --git a/pages/faq/all/llm-as-a-judge-migration.mdx b/content/faq/all/llm-as-a-judge-migration.mdx similarity index 100% rename from pages/faq/all/llm-as-a-judge-migration.mdx rename to content/faq/all/llm-as-a-judge-migration.mdx diff --git a/pages/faq/all/llm-observability.mdx b/content/faq/all/llm-observability.mdx similarity index 100% rename from pages/faq/all/llm-observability.mdx rename to content/faq/all/llm-observability.mdx diff --git a/pages/faq/all/manage-score-configs.mdx b/content/faq/all/manage-score-configs.mdx similarity index 100% rename from pages/faq/all/manage-score-configs.mdx rename to content/faq/all/manage-score-configs.mdx diff --git a/pages/faq/all/managing-different-environments.mdx b/content/faq/all/managing-different-environments.mdx similarity index 100% rename from pages/faq/all/managing-different-environments.mdx rename to content/faq/all/managing-different-environments.mdx diff --git a/pages/faq/all/migrate-from-helicone.mdx b/content/faq/all/migrate-from-helicone.mdx similarity index 100% rename from pages/faq/all/migrate-from-helicone.mdx rename to content/faq/all/migrate-from-helicone.mdx diff --git a/pages/faq/all/missing-traces.mdx b/content/faq/all/missing-traces.mdx similarity index 100% rename from pages/faq/all/missing-traces.mdx rename to content/faq/all/missing-traces.mdx diff --git a/pages/faq/all/monitoring-ai-generated-content.mdx b/content/faq/all/monitoring-ai-generated-content.mdx similarity index 100% rename from pages/faq/all/monitoring-ai-generated-content.mdx rename to content/faq/all/monitoring-ai-generated-content.mdx diff --git a/pages/faq/all/old-prompt-version-caching.mdx b/content/faq/all/old-prompt-version-caching.mdx similarity index 100% rename from pages/faq/all/old-prompt-version-caching.mdx rename to content/faq/all/old-prompt-version-caching.mdx diff --git a/pages/faq/all/openai-assistant-api.mdx b/content/faq/all/openai-assistant-api.mdx similarity index 100% rename from pages/faq/all/openai-assistant-api.mdx rename to content/faq/all/openai-assistant-api.mdx diff --git a/pages/faq/all/packages-depending-on-langfuse.mdx b/content/faq/all/packages-depending-on-langfuse.mdx similarity index 100% rename from pages/faq/all/packages-depending-on-langfuse.mdx rename to content/faq/all/packages-depending-on-langfuse.mdx diff --git a/pages/faq/all/prompt-management-langfuse.mdx b/content/faq/all/prompt-management-langfuse.mdx similarity index 100% rename from pages/faq/all/prompt-management-langfuse.mdx rename to content/faq/all/prompt-management-langfuse.mdx diff --git a/pages/faq/all/report-feedback-bug.mdx b/content/faq/all/report-feedback-bug.mdx similarity index 100% rename from pages/faq/all/report-feedback-bug.mdx rename to content/faq/all/report-feedback-bug.mdx diff --git a/pages/faq/all/retrieve-experiment-scores.mdx b/content/faq/all/retrieve-experiment-scores.mdx similarity index 100% rename from pages/faq/all/retrieve-experiment-scores.mdx rename to content/faq/all/retrieve-experiment-scores.mdx diff --git a/pages/faq/all/self-host-with-load-balancer.mdx b/content/faq/all/self-host-with-load-balancer.mdx similarity index 100% rename from pages/faq/all/self-host-with-load-balancer.mdx rename to content/faq/all/self-host-with-load-balancer.mdx diff --git a/pages/faq/all/self-hosted-telemetry.mdx b/content/faq/all/self-hosted-telemetry.mdx similarity index 100% rename from pages/faq/all/self-hosted-telemetry.mdx rename to content/faq/all/self-hosted-telemetry.mdx diff --git a/pages/faq/all/self-hosting-502-504-network-errors.mdx b/content/faq/all/self-hosting-502-504-network-errors.mdx similarity index 100% rename from pages/faq/all/self-hosting-502-504-network-errors.mdx rename to content/faq/all/self-hosting-502-504-network-errors.mdx diff --git a/pages/faq/all/self-hosting-clickhouse-handling-failed-migrations.mdx b/content/faq/all/self-hosting-clickhouse-handling-failed-migrations.mdx similarity index 100% rename from pages/faq/all/self-hosting-clickhouse-handling-failed-migrations.mdx rename to content/faq/all/self-hosting-clickhouse-handling-failed-migrations.mdx diff --git a/pages/faq/all/self-hosting-javascript-heap-out-of-memory.mdx b/content/faq/all/self-hosting-javascript-heap-out-of-memory.mdx similarity index 100% rename from pages/faq/all/self-hosting-javascript-heap-out-of-memory.mdx rename to content/faq/all/self-hosting-javascript-heap-out-of-memory.mdx diff --git a/pages/faq/all/self-hosting-langfuse.mdx b/content/faq/all/self-hosting-langfuse.mdx similarity index 100% rename from pages/faq/all/self-hosting-langfuse.mdx rename to content/faq/all/self-hosting-langfuse.mdx diff --git a/pages/faq/all/self-hosting-missing-events-after-ingestion.mdx b/content/faq/all/self-hosting-missing-events-after-ingestion.mdx similarity index 100% rename from pages/faq/all/self-hosting-missing-events-after-ingestion.mdx rename to content/faq/all/self-hosting-missing-events-after-ingestion.mdx diff --git a/pages/faq/all/self-hosting-postgresql-table-ownership-migration-failures.mdx b/content/faq/all/self-hosting-postgresql-table-ownership-migration-failures.mdx similarity index 100% rename from pages/faq/all/self-hosting-postgresql-table-ownership-migration-failures.mdx rename to content/faq/all/self-hosting-postgresql-table-ownership-migration-failures.mdx diff --git a/pages/faq/all/self-hosting-queue-management-bullmq-admin-api.mdx b/content/faq/all/self-hosting-queue-management-bullmq-admin-api.mdx similarity index 100% rename from pages/faq/all/self-hosting-queue-management-bullmq-admin-api.mdx rename to content/faq/all/self-hosting-queue-management-bullmq-admin-api.mdx diff --git a/pages/faq/all/self-hosting-socket-usage-at-capacity.mdx b/content/faq/all/self-hosting-socket-usage-at-capacity.mdx similarity index 100% rename from pages/faq/all/self-hosting-socket-usage-at-capacity.mdx rename to content/faq/all/self-hosting-socket-usage-at-capacity.mdx diff --git a/pages/faq/all/self-hosting-timezone-errors.mdx b/content/faq/all/self-hosting-timezone-errors.mdx similarity index 100% rename from pages/faq/all/self-hosting-timezone-errors.mdx rename to content/faq/all/self-hosting-timezone-errors.mdx diff --git a/pages/faq/all/sso-har-file-export.mdx b/content/faq/all/sso-har-file-export.mdx similarity index 100% rename from pages/faq/all/sso-har-file-export.mdx rename to content/faq/all/sso-har-file-export.mdx diff --git a/pages/faq/all/ten-reasons-to-use-langfuse.mdx b/content/faq/all/ten-reasons-to-use-langfuse.mdx similarity index 100% rename from pages/faq/all/ten-reasons-to-use-langfuse.mdx rename to content/faq/all/ten-reasons-to-use-langfuse.mdx diff --git a/pages/faq/all/tracing-data-updates.mdx b/content/faq/all/tracing-data-updates.mdx similarity index 100% rename from pages/faq/all/tracing-data-updates.mdx rename to content/faq/all/tracing-data-updates.mdx diff --git a/pages/faq/all/unwanted-http-database-spans.mdx b/content/faq/all/unwanted-http-database-spans.mdx similarity index 100% rename from pages/faq/all/unwanted-http-database-spans.mdx rename to content/faq/all/unwanted-http-database-spans.mdx diff --git a/pages/faq/all/upgrade-langfuse.mdx b/content/faq/all/upgrade-langfuse.mdx similarity index 100% rename from pages/faq/all/upgrade-langfuse.mdx rename to content/faq/all/upgrade-langfuse.mdx diff --git a/pages/faq/all/using-external-templating-libraries.mdx b/content/faq/all/using-external-templating-libraries.mdx similarity index 100% rename from pages/faq/all/using-external-templating-libraries.mdx rename to content/faq/all/using-external-templating-libraries.mdx diff --git a/pages/faq/all/what-are-scores.mdx b/content/faq/all/what-are-scores.mdx similarity index 100% rename from pages/faq/all/what-are-scores.mdx rename to content/faq/all/what-are-scores.mdx diff --git a/pages/faq/all/what-is-prompt-engineering.mdx b/content/faq/all/what-is-prompt-engineering.mdx similarity index 100% rename from pages/faq/all/what-is-prompt-engineering.mdx rename to content/faq/all/what-is-prompt-engineering.mdx diff --git a/pages/faq/all/where-are-langfuse-api-keys.mdx b/content/faq/all/where-are-langfuse-api-keys.mdx similarity index 100% rename from pages/faq/all/where-are-langfuse-api-keys.mdx rename to content/faq/all/where-are-langfuse-api-keys.mdx diff --git a/pages/faq/all/where-is-my-project.mdx b/content/faq/all/where-is-my-project.mdx similarity index 100% rename from pages/faq/all/where-is-my-project.mdx rename to content/faq/all/where-is-my-project.mdx diff --git a/pages/faq/index.mdx b/content/faq/index.mdx similarity index 100% rename from pages/faq/index.mdx rename to content/faq/index.mdx diff --git a/content/faq/meta.json b/content/faq/meta.json new file mode 100644 index 0000000000..f14b35bde5 --- /dev/null +++ b/content/faq/meta.json @@ -0,0 +1,10 @@ +{ + "title": "Faq", + "pages": [ + "import", + "index", + "tag", + "all", + "display" + ] +} diff --git a/pages/faq/tag/[tag].mdx b/content/faq/tag/[tag].mdx similarity index 97% rename from pages/faq/tag/[tag].mdx rename to content/faq/tag/[tag].mdx index 92175ac0ba..2e87e76442 100644 --- a/pages/faq/tag/[tag].mdx +++ b/content/faq/tag/[tag].mdx @@ -1,3 +1,8 @@ +--- +title: FAQ by Tag +description: FAQ entries filtered by tag. +--- + import { FaqList, getFaqPages, diff --git a/pages/faq/tag/cloud.mdx b/content/faq/tag/cloud.mdx similarity index 71% rename from pages/faq/tag/cloud.mdx rename to content/faq/tag/cloud.mdx index 92b236ddc6..79b99239c6 100644 --- a/pages/faq/tag/cloud.mdx +++ b/content/faq/tag/cloud.mdx @@ -1,3 +1,8 @@ +--- +title: FAQ - Langfuse Cloud +description: Frequently asked questions about Langfuse Cloud. +--- + import { FaqPreview } from "@/components/faq/FaqPreview"; # FAQ: Langfuse Cloud diff --git a/content/faq/tag/meta.json b/content/faq/tag/meta.json new file mode 100644 index 0000000000..2af6087830 --- /dev/null +++ b/content/faq/tag/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Tag", + "pages": [ + "display" + ] +} diff --git a/pages/faq/tag/product.mdx b/content/faq/tag/product.mdx similarity index 70% rename from pages/faq/tag/product.mdx rename to content/faq/tag/product.mdx index d02a9865f4..267e9b77fb 100644 --- a/pages/faq/tag/product.mdx +++ b/content/faq/tag/product.mdx @@ -1,3 +1,8 @@ +--- +title: FAQ - Langfuse Product +description: Frequently asked questions about Langfuse product. +--- + import { FaqPreview } from "@/components/faq/FaqPreview"; # FAQ: Langfuse Product diff --git a/pages/faq/tag/prompt-management.mdx b/content/faq/tag/prompt-management.mdx similarity index 69% rename from pages/faq/tag/prompt-management.mdx rename to content/faq/tag/prompt-management.mdx index f1ebd78b45..8b6a6c9f5a 100644 --- a/pages/faq/tag/prompt-management.mdx +++ b/content/faq/tag/prompt-management.mdx @@ -1,3 +1,8 @@ +--- +title: FAQ - Prompt Management +description: Frequently asked questions about prompt management in Langfuse. +--- + import { FaqPreview } from "@/components/faq/FaqPreview"; # FAQ: Prompt Management diff --git a/pages/faq/tag/security.mdx b/content/faq/tag/security.mdx similarity index 71% rename from pages/faq/tag/security.mdx rename to content/faq/tag/security.mdx index 7c4b3c6128..0c009605cb 100644 --- a/pages/faq/tag/security.mdx +++ b/content/faq/tag/security.mdx @@ -1,3 +1,8 @@ +--- +title: FAQ - Security +description: Frequently asked questions about Langfuse security. +--- + import { FaqPreview } from "@/components/faq/FaqPreview"; # FAQ: Security diff --git a/pages/faq/tag/self-hosting.mdx b/content/faq/tag/self-hosting.mdx similarity index 70% rename from pages/faq/tag/self-hosting.mdx rename to content/faq/tag/self-hosting.mdx index 780efba221..5df6be73d0 100644 --- a/pages/faq/tag/self-hosting.mdx +++ b/content/faq/tag/self-hosting.mdx @@ -1,3 +1,8 @@ +--- +title: FAQ - Self-hosting +description: Frequently asked questions about self-hosting Langfuse. +--- + import { FaqPreview } from "@/components/faq/FaqPreview"; # FAQ: Self-hosting diff --git a/pages/faq/tag/tracing.mdx b/content/faq/tag/tracing.mdx similarity index 70% rename from pages/faq/tag/tracing.mdx rename to content/faq/tag/tracing.mdx index adb36505ad..f51e9c7d94 100644 --- a/pages/faq/tag/tracing.mdx +++ b/content/faq/tag/tracing.mdx @@ -1,3 +1,8 @@ +--- +title: FAQ - Tracing +description: Frequently asked questions about tracing with Langfuse. +--- + import { FaqPreview } from "@/components/faq/FaqPreview"; # FAQ: Tracing diff --git a/pages/guides/cookbook/evaluation_of_rag_with_ragas.md b/content/guides/cookbook/evaluation_of_rag_with_ragas.md similarity index 99% rename from pages/guides/cookbook/evaluation_of_rag_with_ragas.md rename to content/guides/cookbook/evaluation_of_rag_with_ragas.md index 2da7aac38a..c297da8541 100644 --- a/pages/guides/cookbook/evaluation_of_rag_with_ragas.md +++ b/content/guides/cookbook/evaluation_of_rag_with_ragas.md @@ -1,4 +1,5 @@ --- +title: Evaluation description: Use RAGAS to evaluate your RAG pipelines traced with Langfuse to measure the quality of your retrieval and sythesis. category: Evaluation --- diff --git a/pages/guides/cookbook/evaluation_with_langchain.md b/content/guides/cookbook/evaluation_with_langchain.md similarity index 99% rename from pages/guides/cookbook/evaluation_with_langchain.md rename to content/guides/cookbook/evaluation_with_langchain.md index 8c009a8076..008a75c9b8 100644 --- a/pages/guides/cookbook/evaluation_with_langchain.md +++ b/content/guides/cookbook/evaluation_with_langchain.md @@ -1,4 +1,5 @@ --- +title: Run Langchain Evaluations on Data in Langfuse description: Cookbook that demonstrates how to run Langchain evaluations on data in Langfuse. category: Evaluation --- diff --git a/pages/guides/cookbook/evaluation_with_uptrain.md b/content/guides/cookbook/evaluation_with_uptrain.md similarity index 99% rename from pages/guides/cookbook/evaluation_with_uptrain.md rename to content/guides/cookbook/evaluation_with_uptrain.md index 117ee0e872..96e498abb7 100644 --- a/pages/guides/cookbook/evaluation_with_uptrain.md +++ b/content/guides/cookbook/evaluation_with_uptrain.md @@ -1,4 +1,5 @@ --- +title: Evaluate Langfuse LLM Traces with UpTrain description: This notebook demonstrates how to run UpTrain's evaluation metrics on the traces generated by Langfuse. category: Evaluation --- diff --git a/pages/guides/cookbook/example_data_migration.md b/content/guides/cookbook/example_data_migration.md similarity index 100% rename from pages/guides/cookbook/example_data_migration.md rename to content/guides/cookbook/example_data_migration.md diff --git a/pages/guides/cookbook/example_decorator_openai_langchain.md b/content/guides/cookbook/example_decorator_openai_langchain.md similarity index 98% rename from pages/guides/cookbook/example_decorator_openai_langchain.md rename to content/guides/cookbook/example_decorator_openai_langchain.md index f6156bb558..96c3d48c18 100644 --- a/pages/guides/cookbook/example_decorator_openai_langchain.md +++ b/content/guides/cookbook/example_decorator_openai_langchain.md @@ -1,4 +1,5 @@ --- +title: Langfuse Decorator with OpenAI and Langchain description: LLM Rap Battle traced using the Langfuse Decorator, OpenAI & Langchain Integration category: Integrations --- diff --git a/pages/guides/cookbook/example_evaluating_multi_turn_conversations.mdx b/content/guides/cookbook/example_evaluating_multi_turn_conversations.mdx similarity index 100% rename from pages/guides/cookbook/example_evaluating_multi_turn_conversations.mdx rename to content/guides/cookbook/example_evaluating_multi_turn_conversations.mdx diff --git a/pages/guides/cookbook/example_evaluating_openai_agents.md b/content/guides/cookbook/example_evaluating_openai_agents.md similarity index 100% rename from pages/guides/cookbook/example_evaluating_openai_agents.md rename to content/guides/cookbook/example_evaluating_openai_agents.md diff --git a/pages/guides/cookbook/example_external_evaluation_pipelines.mdx b/content/guides/cookbook/example_external_evaluation_pipelines.mdx similarity index 100% rename from pages/guides/cookbook/example_external_evaluation_pipelines.mdx rename to content/guides/cookbook/example_external_evaluation_pipelines.mdx diff --git a/pages/guides/cookbook/example_intent_classification_pipeline.md b/content/guides/cookbook/example_intent_classification_pipeline.md similarity index 100% rename from pages/guides/cookbook/example_intent_classification_pipeline.md rename to content/guides/cookbook/example_intent_classification_pipeline.md diff --git a/pages/guides/cookbook/example_langgraph_agents.mdx b/content/guides/cookbook/example_langgraph_agents.mdx similarity index 100% rename from pages/guides/cookbook/example_langgraph_agents.mdx rename to content/guides/cookbook/example_langgraph_agents.mdx diff --git a/pages/guides/cookbook/example_llm_security_monitoring.md b/content/guides/cookbook/example_llm_security_monitoring.md similarity index 99% rename from pages/guides/cookbook/example_llm_security_monitoring.md rename to content/guides/cookbook/example_llm_security_monitoring.md index cb53509eb2..45e28487ee 100644 --- a/pages/guides/cookbook/example_llm_security_monitoring.md +++ b/content/guides/cookbook/example_llm_security_monitoring.md @@ -1,4 +1,5 @@ --- +title: Monitoring LLM Security description: Overview of common security problems facing LLM-based applications and how to use Langfuse to trace, prevent, and evaluate security risks. category: Security --- diff --git a/pages/guides/cookbook/example_multi_modal_traces.md b/content/guides/cookbook/example_multi_modal_traces.md similarity index 99% rename from pages/guides/cookbook/example_multi_modal_traces.md rename to content/guides/cookbook/example_multi_modal_traces.md index 3237eeb26a..24ae90e717 100644 --- a/pages/guides/cookbook/example_multi_modal_traces.md +++ b/content/guides/cookbook/example_multi_modal_traces.md @@ -1,4 +1,5 @@ --- +title: Multi-modality and Attachments category: Examples description: Examples of how to use multi-modality and attachments with the Langfuse Python SDK. --- diff --git a/pages/guides/cookbook/example_pydantic_ai_mcp_agent_evaluation.mdx b/content/guides/cookbook/example_pydantic_ai_mcp_agent_evaluation.mdx similarity index 100% rename from pages/guides/cookbook/example_pydantic_ai_mcp_agent_evaluation.mdx rename to content/guides/cookbook/example_pydantic_ai_mcp_agent_evaluation.mdx diff --git a/pages/guides/cookbook/example_query_data_via_sdk.md b/content/guides/cookbook/example_query_data_via_sdk.md similarity index 100% rename from pages/guides/cookbook/example_query_data_via_sdk.md rename to content/guides/cookbook/example_query_data_via_sdk.md diff --git a/pages/guides/cookbook/example_simulated_multi_turn_conversations.mdx b/content/guides/cookbook/example_simulated_multi_turn_conversations.mdx similarity index 100% rename from pages/guides/cookbook/example_simulated_multi_turn_conversations.mdx rename to content/guides/cookbook/example_simulated_multi_turn_conversations.mdx diff --git a/pages/guides/cookbook/example_synthetic_datasets.mdx b/content/guides/cookbook/example_synthetic_datasets.mdx similarity index 100% rename from pages/guides/cookbook/example_synthetic_datasets.mdx rename to content/guides/cookbook/example_synthetic_datasets.mdx diff --git a/pages/guides/cookbook/index.mdx b/content/guides/cookbook/index.mdx similarity index 93% rename from pages/guides/cookbook/index.mdx rename to content/guides/cookbook/index.mdx index dab7cd09e5..8a65a7bd0f 100644 --- a/pages/guides/cookbook/index.mdx +++ b/content/guides/cookbook/index.mdx @@ -1,4 +1,5 @@ --- +title: Langfuse Cookbook description: A collection of notebooks and examples to help you get started with Langfuse. --- diff --git a/pages/guides/cookbook/integration_amazon_bedrock.md b/content/guides/cookbook/integration_amazon_bedrock.md similarity index 99% rename from pages/guides/cookbook/integration_amazon_bedrock.md rename to content/guides/cookbook/integration_amazon_bedrock.md index 7d1f13ec15..4ea37cda5c 100644 --- a/pages/guides/cookbook/integration_amazon_bedrock.md +++ b/content/guides/cookbook/integration_amazon_bedrock.md @@ -1,4 +1,5 @@ --- +title: Amazon Bedrock Integration sidebarTitle: Amazon Bedrock seoTitle: Open Source Observability and Metrics for Amazon Bedrock description: Open source observability for Amazon Bedrock applications and the Bedrock SDK. diff --git a/pages/guides/cookbook/integration_anthropic.mdx b/content/guides/cookbook/integration_anthropic.mdx similarity index 100% rename from pages/guides/cookbook/integration_anthropic.mdx rename to content/guides/cookbook/integration_anthropic.mdx diff --git a/pages/guides/cookbook/integration_azure_openai_langchain.md b/content/guides/cookbook/integration_azure_openai_langchain.md similarity index 98% rename from pages/guides/cookbook/integration_azure_openai_langchain.md rename to content/guides/cookbook/integration_azure_openai_langchain.md index b21e6f6540..766fb9950f 100644 --- a/pages/guides/cookbook/integration_azure_openai_langchain.md +++ b/content/guides/cookbook/integration_azure_openai_langchain.md @@ -1,4 +1,5 @@ --- +title: Langfuse Tracing and Prompt Management for Azure OpenAI and Langchain description: This cookbook demonstate use of Langfuse with Azure OpenAI and Langchain for prompt versioning and evaluations. category: Integrations --- diff --git a/pages/guides/cookbook/integration_databricks.mdx b/content/guides/cookbook/integration_databricks.mdx similarity index 100% rename from pages/guides/cookbook/integration_databricks.mdx rename to content/guides/cookbook/integration_databricks.mdx diff --git a/pages/guides/cookbook/integration_langchain.md b/content/guides/cookbook/integration_langchain.md similarity index 98% rename from pages/guides/cookbook/integration_langchain.md rename to content/guides/cookbook/integration_langchain.md index 86e210eaed..008f50b5d7 100644 --- a/pages/guides/cookbook/integration_langchain.md +++ b/content/guides/cookbook/integration_langchain.md @@ -1,5 +1,6 @@ --- -description: +title: Cookbook - Langchain Integration (Python) +description: Cookbook with examples of the Langfuse Integration for Langchain (Python). category: Integrations --- diff --git a/pages/guides/cookbook/integration_langgraph.mdx b/content/guides/cookbook/integration_langgraph.mdx similarity index 100% rename from pages/guides/cookbook/integration_langgraph.mdx rename to content/guides/cookbook/integration_langgraph.mdx diff --git a/pages/guides/cookbook/integration_langserve.md b/content/guides/cookbook/integration_langserve.md similarity index 100% rename from pages/guides/cookbook/integration_langserve.md rename to content/guides/cookbook/integration_langserve.md diff --git a/pages/guides/cookbook/integration_litellm_proxy.mdx b/content/guides/cookbook/integration_litellm_proxy.mdx similarity index 100% rename from pages/guides/cookbook/integration_litellm_proxy.mdx rename to content/guides/cookbook/integration_litellm_proxy.mdx diff --git a/pages/guides/cookbook/integration_llama-index-callback.md b/content/guides/cookbook/integration_llama-index-callback.md similarity index 99% rename from pages/guides/cookbook/integration_llama-index-callback.md rename to content/guides/cookbook/integration_llama-index-callback.md index 091b3ab81c..29d88d9651 100644 --- a/pages/guides/cookbook/integration_llama-index-callback.md +++ b/content/guides/cookbook/integration_llama-index-callback.md @@ -1,4 +1,5 @@ --- +title: LlamaIndex Integration description: Example cookbook for the LlamaIndex Langfuse integration. category: Integrations --- diff --git a/pages/guides/cookbook/integration_llama-index_instrumentation.md b/content/guides/cookbook/integration_llama-index_instrumentation.md similarity index 98% rename from pages/guides/cookbook/integration_llama-index_instrumentation.md rename to content/guides/cookbook/integration_llama-index_instrumentation.md index f475ac964f..e5dfcdd017 100644 --- a/pages/guides/cookbook/integration_llama-index_instrumentation.md +++ b/content/guides/cookbook/integration_llama-index_instrumentation.md @@ -1,4 +1,5 @@ --- +title: LlamaIndex Integration (Instrumentation Module) description: Example cookbook for the experimental LlamaIndex Langfuse integration using the instrumentation module of LlamaIndex. category: Integrations --- diff --git a/pages/guides/cookbook/integration_llama-index_milvus-lite.mdx b/content/guides/cookbook/integration_llama-index_milvus-lite.mdx similarity index 98% rename from pages/guides/cookbook/integration_llama-index_milvus-lite.mdx rename to content/guides/cookbook/integration_llama-index_milvus-lite.mdx index 727928ed72..c11eafdfb1 100644 --- a/pages/guides/cookbook/integration_llama-index_milvus-lite.mdx +++ b/content/guides/cookbook/integration_llama-index_milvus-lite.mdx @@ -1,6 +1,6 @@ --- +title: Cookbook - LlamaIndex & Milvus Integration source: ⚠️ Jupyter Notebook -title: # Cookbook: LlamaIndex & Milvus Integration description: Example cookbook for the LlamaIndex, Milvus and Langfuse integration. category: Integrations --- diff --git a/pages/guides/cookbook/integration_llama_index.mdx b/content/guides/cookbook/integration_llama_index.mdx similarity index 100% rename from pages/guides/cookbook/integration_llama_index.mdx rename to content/guides/cookbook/integration_llama_index.mdx diff --git a/pages/guides/cookbook/integration_llama_index_posthog_mistral.md b/content/guides/cookbook/integration_llama_index_posthog_mistral.md similarity index 100% rename from pages/guides/cookbook/integration_llama_index_posthog_mistral.md rename to content/guides/cookbook/integration_llama_index_posthog_mistral.md diff --git a/pages/guides/cookbook/integration_llamaindex_workflows.mdx b/content/guides/cookbook/integration_llamaindex_workflows.mdx similarity index 100% rename from pages/guides/cookbook/integration_llamaindex_workflows.mdx rename to content/guides/cookbook/integration_llamaindex_workflows.mdx diff --git a/pages/guides/cookbook/integration_openai_assistants.md b/content/guides/cookbook/integration_openai_assistants.md similarity index 100% rename from pages/guides/cookbook/integration_openai_assistants.md rename to content/guides/cookbook/integration_openai_assistants.md diff --git a/pages/guides/cookbook/integration_openai_sdk.mdx b/content/guides/cookbook/integration_openai_sdk.mdx similarity index 100% rename from pages/guides/cookbook/integration_openai_sdk.mdx rename to content/guides/cookbook/integration_openai_sdk.mdx diff --git a/pages/guides/cookbook/integration_openai_structured_output.md b/content/guides/cookbook/integration_openai_structured_output.md similarity index 100% rename from pages/guides/cookbook/integration_openai_structured_output.md rename to content/guides/cookbook/integration_openai_structured_output.md diff --git a/pages/guides/cookbook/js_integration_anthropic.mdx b/content/guides/cookbook/js_integration_anthropic.mdx similarity index 100% rename from pages/guides/cookbook/js_integration_anthropic.mdx rename to content/guides/cookbook/js_integration_anthropic.mdx diff --git a/pages/guides/cookbook/js_integration_langchain.mdx b/content/guides/cookbook/js_integration_langchain.mdx similarity index 100% rename from pages/guides/cookbook/js_integration_langchain.mdx rename to content/guides/cookbook/js_integration_langchain.mdx diff --git a/pages/guides/cookbook/js_integration_litellm_proxy.mdx b/content/guides/cookbook/js_integration_litellm_proxy.mdx similarity index 100% rename from pages/guides/cookbook/js_integration_litellm_proxy.mdx rename to content/guides/cookbook/js_integration_litellm_proxy.mdx diff --git a/pages/guides/cookbook/js_integration_openai.mdx b/content/guides/cookbook/js_integration_openai.mdx similarity index 100% rename from pages/guides/cookbook/js_integration_openai.mdx rename to content/guides/cookbook/js_integration_openai.mdx diff --git a/pages/guides/cookbook/js_langfuse_sdk.mdx b/content/guides/cookbook/js_langfuse_sdk.mdx similarity index 100% rename from pages/guides/cookbook/js_langfuse_sdk.mdx rename to content/guides/cookbook/js_langfuse_sdk.mdx diff --git a/pages/guides/cookbook/js_prompt_management_langchain.mdx b/content/guides/cookbook/js_prompt_management_langchain.mdx similarity index 100% rename from pages/guides/cookbook/js_prompt_management_langchain.mdx rename to content/guides/cookbook/js_prompt_management_langchain.mdx diff --git a/pages/guides/cookbook/langfuse_sdk_performance_test.md b/content/guides/cookbook/langfuse_sdk_performance_test.md similarity index 100% rename from pages/guides/cookbook/langfuse_sdk_performance_test.md rename to content/guides/cookbook/langfuse_sdk_performance_test.md diff --git a/content/guides/cookbook/meta.json b/content/guides/cookbook/meta.json new file mode 100644 index 0000000000..f7ff3f7992 --- /dev/null +++ b/content/guides/cookbook/meta.json @@ -0,0 +1,27 @@ +{ + "title": "Cookbook", + "pages": [ + "index", + "example_evaluating_multi_turn_conversations", + "example_external_evaluation_pipelines", + "example_langgraph_agents", + "example_pydantic_ai_mcp_agent_evaluation", + "example_simulated_multi_turn_conversations", + "example_synthetic_datasets", + "integration_anthropic", + "integration_databricks", + "integration_langgraph", + "integration_litellm_proxy", + "integration_llama-index_milvus-lite", + "integration_llama_index", + "integration_llamaindex_workflows", + "integration_openai_sdk", + "js_integration_anthropic", + "js_integration_langchain", + "js_integration_litellm_proxy", + "js_integration_openai", + "js_langfuse_sdk", + "js_prompt_management_langchain", + "prompt_management_langchain" + ] +} diff --git a/pages/guides/cookbook/otel_integration_arize.md b/content/guides/cookbook/otel_integration_arize.md similarity index 100% rename from pages/guides/cookbook/otel_integration_arize.md rename to content/guides/cookbook/otel_integration_arize.md diff --git a/pages/guides/cookbook/otel_integration_mlflow.md b/content/guides/cookbook/otel_integration_mlflow.md similarity index 100% rename from pages/guides/cookbook/otel_integration_mlflow.md rename to content/guides/cookbook/otel_integration_mlflow.md diff --git a/pages/guides/cookbook/otel_integration_openlit.md b/content/guides/cookbook/otel_integration_openlit.md similarity index 100% rename from pages/guides/cookbook/otel_integration_openlit.md rename to content/guides/cookbook/otel_integration_openlit.md diff --git a/pages/guides/cookbook/otel_integration_openllmetry.md b/content/guides/cookbook/otel_integration_openllmetry.md similarity index 99% rename from pages/guides/cookbook/otel_integration_openllmetry.md rename to content/guides/cookbook/otel_integration_openllmetry.md index c1c3472d51..9c5adb1f5b 100644 --- a/pages/guides/cookbook/otel_integration_openllmetry.md +++ b/content/guides/cookbook/otel_integration_openllmetry.md @@ -1,4 +1,5 @@ --- +title: OpenLLMetry Integration via OpenTelemetry description: Example cookbook for the OpenLLMetry Langfuse integration using OpenTelemetry. category: Integrations --- diff --git a/pages/guides/cookbook/prompt_management_langchain.mdx b/content/guides/cookbook/prompt_management_langchain.mdx similarity index 100% rename from pages/guides/cookbook/prompt_management_langchain.mdx rename to content/guides/cookbook/prompt_management_langchain.mdx diff --git a/pages/guides/cookbook/prompt_management_openai_functions.md b/content/guides/cookbook/prompt_management_openai_functions.md similarity index 99% rename from pages/guides/cookbook/prompt_management_openai_functions.md rename to content/guides/cookbook/prompt_management_openai_functions.md index 8ae0240735..bc995bbe6a 100644 --- a/pages/guides/cookbook/prompt_management_openai_functions.md +++ b/content/guides/cookbook/prompt_management_openai_functions.md @@ -1,4 +1,5 @@ --- +title: Langfuse Prompt Management for OpenAI Functions description: Cookbook on how to use Langfuse Prompt Management to version control prompts collaboratively when using OpenAI functions. category: Prompt Management --- diff --git a/pages/guides/cookbook/prompt_management_performance_benchmark.md b/content/guides/cookbook/prompt_management_performance_benchmark.md similarity index 92% rename from pages/guides/cookbook/prompt_management_performance_benchmark.md rename to content/guides/cookbook/prompt_management_performance_benchmark.md index 0592b79f90..d82211d6b4 100644 --- a/pages/guides/cookbook/prompt_management_performance_benchmark.md +++ b/content/guides/cookbook/prompt_management_performance_benchmark.md @@ -1,3 +1,9 @@ +--- +title: Langfuse Prompt Management Performance Test +description: Performance benchmark on Langfuse Prompt Management measuring latency of retrieving and compiling prompts. +category: Prompt Management +--- + # Langfuse Prompt Management Performance Test This notebook conducts a performance benchmark on Langfuse Prompt Management by measuring the latency of retrieving and compiling a prompt without caching (cache_ttl_seconds=0) over 1,000 sequential executions. diff --git a/pages/guides/index.mdx b/content/guides/index.mdx similarity index 98% rename from pages/guides/index.mdx rename to content/guides/index.mdx index 77052b127b..292ff66613 100644 --- a/pages/guides/index.mdx +++ b/content/guides/index.mdx @@ -1,11 +1,10 @@ --- +title: Guides description: End-to-end examples and resources to get started with Langfuse for LLM Tracing, Monitoring, Prompt Management, and more. --- # Guides -import { Callout } from "nextra/components"; - The guides section is work-in-progress. We want to collect all end-to-end examples of how to use Langfuse here including cookbooks, videos and other external resources. ## Introduction to Langfuse diff --git a/content/guides/meta.json b/content/guides/meta.json new file mode 100644 index 0000000000..c6d47f70d8 --- /dev/null +++ b/content/guides/meta.json @@ -0,0 +1,9 @@ +{ + "title": "Guides", + "pages": [ + "import", + "index", + "cookbook", + "videos" + ] +} diff --git a/pages/guides/videos/beginners-guide-to-rag-evaluation.mdx b/content/guides/videos/beginners-guide-to-rag-evaluation.mdx similarity index 100% rename from pages/guides/videos/beginners-guide-to-rag-evaluation.mdx rename to content/guides/videos/beginners-guide-to-rag-evaluation.mdx diff --git a/pages/guides/videos/external-evaluation-pipelines.mdx b/content/guides/videos/external-evaluation-pipelines.mdx similarity index 100% rename from pages/guides/videos/external-evaluation-pipelines.mdx rename to content/guides/videos/external-evaluation-pipelines.mdx diff --git a/pages/guides/videos/index.mdx b/content/guides/videos/index.mdx similarity index 95% rename from pages/guides/videos/index.mdx rename to content/guides/videos/index.mdx index 065e281eb7..a56391bb06 100644 --- a/pages/guides/videos/index.mdx +++ b/content/guides/videos/index.mdx @@ -1,4 +1,5 @@ --- +title: Langfuse Videos description: A collection of videos and tutorials to help you get started with Langfuse. --- diff --git a/pages/guides/videos/introducing-datasets-v2.mdx b/content/guides/videos/introducing-datasets-v2.mdx similarity index 100% rename from pages/guides/videos/introducing-datasets-v2.mdx rename to content/guides/videos/introducing-datasets-v2.mdx diff --git a/pages/guides/videos/introducing-langfuse-2.0.mdx b/content/guides/videos/introducing-langfuse-2.0.mdx similarity index 100% rename from pages/guides/videos/introducing-langfuse-2.0.mdx rename to content/guides/videos/introducing-langfuse-2.0.mdx diff --git a/pages/guides/videos/introducing-python-decorator.mdx b/content/guides/videos/introducing-python-decorator.mdx similarity index 100% rename from pages/guides/videos/introducing-python-decorator.mdx rename to content/guides/videos/introducing-python-decorator.mdx diff --git a/pages/guides/videos/llm-as-a-judge-eval-on-dataset-experiments.mdx b/content/guides/videos/llm-as-a-judge-eval-on-dataset-experiments.mdx similarity index 100% rename from pages/guides/videos/llm-as-a-judge-eval-on-dataset-experiments.mdx rename to content/guides/videos/llm-as-a-judge-eval-on-dataset-experiments.mdx diff --git a/pages/guides/videos/llm-playground.mdx b/content/guides/videos/llm-playground.mdx similarity index 100% rename from pages/guides/videos/llm-playground.mdx rename to content/guides/videos/llm-playground.mdx diff --git a/content/guides/videos/meta.json b/content/guides/videos/meta.json new file mode 100644 index 0000000000..3a57c701c9 --- /dev/null +++ b/content/guides/videos/meta.json @@ -0,0 +1,16 @@ +{ + "title": "Videos", + "pages": [ + "index", + "beginners-guide-to-rag-evaluation", + "external-evaluation-pipelines", + "introducing-datasets-v2", + "introducing-langfuse-2.0", + "introducing-python-decorator", + "llm-as-a-judge-eval-on-dataset-experiments", + "llm-playground", + "posthog-integration", + "run-langfuse-locally", + "webinar-observability-llm-systems" + ] +} diff --git a/pages/guides/videos/posthog-integration.mdx b/content/guides/videos/posthog-integration.mdx similarity index 100% rename from pages/guides/videos/posthog-integration.mdx rename to content/guides/videos/posthog-integration.mdx diff --git a/pages/guides/videos/run-langfuse-locally.mdx b/content/guides/videos/run-langfuse-locally.mdx similarity index 100% rename from pages/guides/videos/run-langfuse-locally.mdx rename to content/guides/videos/run-langfuse-locally.mdx diff --git a/pages/guides/videos/webinar-observability-llm-systems.mdx b/content/guides/videos/webinar-observability-llm-systems.mdx similarity index 100% rename from pages/guides/videos/webinar-observability-llm-systems.mdx rename to content/guides/videos/webinar-observability-llm-systems.mdx diff --git a/pages/handbook/chapters/customers.mdx b/content/handbook/chapters/customers.mdx similarity index 100% rename from pages/handbook/chapters/customers.mdx rename to content/handbook/chapters/customers.mdx diff --git a/content/handbook/chapters/meta.json b/content/handbook/chapters/meta.json new file mode 100644 index 0000000000..04c1dc129d --- /dev/null +++ b/content/handbook/chapters/meta.json @@ -0,0 +1,12 @@ +{ + "title": "Chapters", + "pages": [ + "customers", + "mission", + "monetization", + "open-source", + "story", + "team", + "why" + ] +} diff --git a/pages/handbook/chapters/mission.mdx b/content/handbook/chapters/mission.mdx similarity index 100% rename from pages/handbook/chapters/mission.mdx rename to content/handbook/chapters/mission.mdx diff --git a/pages/handbook/chapters/monetization.mdx b/content/handbook/chapters/monetization.mdx similarity index 100% rename from pages/handbook/chapters/monetization.mdx rename to content/handbook/chapters/monetization.mdx diff --git a/pages/handbook/chapters/open-source.mdx b/content/handbook/chapters/open-source.mdx similarity index 100% rename from pages/handbook/chapters/open-source.mdx rename to content/handbook/chapters/open-source.mdx diff --git a/pages/handbook/chapters/story.mdx b/content/handbook/chapters/story.mdx similarity index 100% rename from pages/handbook/chapters/story.mdx rename to content/handbook/chapters/story.mdx diff --git a/pages/handbook/chapters/team.mdx b/content/handbook/chapters/team.mdx similarity index 100% rename from pages/handbook/chapters/team.mdx rename to content/handbook/chapters/team.mdx diff --git a/pages/handbook/chapters/why.mdx b/content/handbook/chapters/why.mdx similarity index 100% rename from pages/handbook/chapters/why.mdx rename to content/handbook/chapters/why.mdx diff --git a/pages/handbook/devrel/community-hour.mdx b/content/handbook/devrel/community-hour.mdx similarity index 100% rename from pages/handbook/devrel/community-hour.mdx rename to content/handbook/devrel/community-hour.mdx diff --git a/content/handbook/devrel/meta.json b/content/handbook/devrel/meta.json new file mode 100644 index 0000000000..d5c1c13925 --- /dev/null +++ b/content/handbook/devrel/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Devrel", + "pages": [ + "community-hour" + ] +} diff --git a/pages/handbook/how-we-hire/cs-fde-super-day.mdx b/content/handbook/how-we-hire/cs-fde-super-day.mdx similarity index 88% rename from pages/handbook/how-we-hire/cs-fde-super-day.mdx rename to content/handbook/how-we-hire/cs-fde-super-day.mdx index 5f63aa91c4..01128a2cdd 100644 --- a/pages/handbook/how-we-hire/cs-fde-super-day.mdx +++ b/content/handbook/how-we-hire/cs-fde-super-day.mdx @@ -1,10 +1,14 @@ +--- +title: CS and FDE Super Day +description: CS and FDE Super Day interview process at Langfuse. +--- + import { Badge } from "@/components/ui/badge"; # CS and Forward Deployed Engineering Super Day The Super Day is a full onsite day in our office where we work together with you on real problems you might tackle in your future role at Langfuse. The goal is to simulate working together for a day—a trial run for both sides to determine whether we enjoy collaborating, coding, and problem-solving together. Here is an overview on [how we work](/handbook/how-we-work/principles) as a team. - - **Start time:** 10:30 AM - **Location:** [Our office](/find-us) - **End time:** ~5:30 PM @@ -15,69 +19,62 @@ The Super Day is a full onsite day in our office where we work together with you We expect everyone participating in a Super Day to be genuinely interested in joining Langfuse and to have prepared for the day: **Everyone:** + - Read the [handbook](/handbook) from top to bottom - Read the [documentation](/docs) to understand the product and how it works - **CS and Forward Deployed Engineers:** + - Set up [Langfuse Cloud Hobby](https://cloud.langfuse.com/) and request LLM API keys if needed - Check out our [customer](/customers) and [why they choose Langfuse](https://langfuse.com/handbook/chapters/why) - ## Take-home Design Discussion Preparation + <Callout type="info"> -**1-2 days prior to Super Day**<br/> -Expected time investment: ~2-3 hours + **1-2 days prior to Super Day** + <br /> + Expected time investment: ~2-3 hours </Callout> You'll receive a technical challenge in PDF format. We'll set up a Whatsapp group where you can ask any questions about the challenge, the product context, or clarify requirements. -Once all questions are answered, you should take some time to prepare for the discussion during the Super Day. More on that below. While working on this challenge, please take notes on Langfuse. What works well, what doesn't? What's counterintuitive? Where is the documentation weak? The output should be a publishable Google Colab and Langfuse feedback log. +Once all questions are answered, you should take some time to prepare for the discussion during the Super Day. More on that below. While working on this challenge, please take notes on Langfuse. What works well, what doesn't? What's counterintuitive? Where is the documentation weak? The output should be a publishable Google Colab and Langfuse feedback log. ## Super Day: Morning Session -<Callout type="info"> -**10:30 AM - 11:45 AM** -</Callout> +<Callout type="info">**10:30 AM - 11:45 AM**</Callout> We'll discuss the challenge that we sent you in advance. Imagine you're already working at Langfuse and you want to demo what you've been working on. This means: you are in the driver seat, you are responsible for explaining the output to the room and answering questions. We are there to help you and provide additional context where needed. We start the session with a 15 minutes presentation by you on the preparation and your thoughts on how you built the project. -Afterwards, we focus on customer communication, running through a few example requests to discuss how we could react. No preparation necessary. +Afterwards, we focus on customer communication, running through a few example requests to discuss how we could react. No preparation necessary. ## Super Day: Feedback -<Callout type="info"> -**11:45 AM - 12:00 PM** -</Callout> +<Callout type="info">**11:45 AM - 12:00 PM**</Callout> After the morning session, we will take a few minutes to discuss the session and provide you with feedback. We believe this is fair given the investment you're making. In the interest of time and fairness for everyone, we may decide not to continue with the afternoon session if we don't think we're a good fit for each other. - ## Super Day: Lunch -<Callout type="info"> -**12:00 PM - 1:00 PM** -</Callout> + +<Callout type="info">**12:00 PM - 1:00 PM**</Callout> Meet the team for lunch, learn what they work on, and observe how they collaborate. Ask any questions you have. ## Super Day: Afternoon Session -<Callout type="info"> -**1:00 PM - 3:00 PM** -</Callout> + +<Callout type="info">**1:00 PM - 3:00 PM**</Callout> We discuss Langfuse's CS/FDE strategy and brainstorm ways of improving this. Here you have the chance to show how well you understand what we aim to achieve for our customers and how strategic you think about our interaction with the most important customers. ## Super Day: Meet the co-founder -<Callout type="info"> -**3:00 PM - 4:00 PM** -</Callout> -Meet the co-founder you have not met in the process so far. +<Callout type="info">**3:00 PM - 4:00 PM**</Callout> +Meet the co-founder you have not met in the process so far. </Steps> diff --git a/pages/handbook/how-we-hire/engineering-super-day.mdx b/content/handbook/how-we-hire/engineering-super-day.mdx similarity index 98% rename from pages/handbook/how-we-hire/engineering-super-day.mdx rename to content/handbook/how-we-hire/engineering-super-day.mdx index 7aa6db54f4..bb63fcea4a 100644 --- a/pages/handbook/how-we-hire/engineering-super-day.mdx +++ b/content/handbook/how-we-hire/engineering-super-day.mdx @@ -1,3 +1,8 @@ +--- +title: Engineering Super Day +description: Engineering Super Day interview process at Langfuse. +--- + import { Badge } from "@/components/ui/badge"; # Engineering Super Day diff --git a/pages/handbook/how-we-hire/hiring-process.mdx b/content/handbook/how-we-hire/hiring-process.mdx similarity index 95% rename from pages/handbook/how-we-hire/hiring-process.mdx rename to content/handbook/how-we-hire/hiring-process.mdx index 3cc5d47807..8c03efdde8 100644 --- a/pages/handbook/how-we-hire/hiring-process.mdx +++ b/content/handbook/how-we-hire/hiring-process.mdx @@ -1,3 +1,8 @@ +--- +title: Hiring process +description: Hiring process for engineering and other roles at Langfuse. +--- + ## Hiring process Most of the time we are hiring for engineering roles – below you will find the process for these roles. The process might differ slightly for other roles. diff --git a/content/handbook/how-we-hire/meta.json b/content/handbook/how-we-hire/meta.json new file mode 100644 index 0000000000..1916592ce8 --- /dev/null +++ b/content/handbook/how-we-hire/meta.json @@ -0,0 +1,10 @@ +{ + "title": "How We Hire", + "pages": [ + "philosophy", + "hiring-process", + "engineering-super-day", + "cs-fde-super-day", + "support-super-day" + ] +} diff --git a/pages/handbook/how-we-hire/philosophy.mdx b/content/handbook/how-we-hire/philosophy.mdx similarity index 86% rename from pages/handbook/how-we-hire/philosophy.mdx rename to content/handbook/how-we-hire/philosophy.mdx index e59a634af5..03b98590fd 100644 --- a/pages/handbook/how-we-hire/philosophy.mdx +++ b/content/handbook/how-we-hire/philosophy.mdx @@ -1,3 +1,8 @@ +--- +title: How we Hire +description: Hiring philosophy at Langfuse. +--- + # How we Hire Our core philosophy: diff --git a/pages/handbook/how-we-hire/support-super-day.mdx b/content/handbook/how-we-hire/support-super-day.mdx similarity index 97% rename from pages/handbook/how-we-hire/support-super-day.mdx rename to content/handbook/how-we-hire/support-super-day.mdx index 7e3206566f..175a32a828 100644 --- a/pages/handbook/how-we-hire/support-super-day.mdx +++ b/content/handbook/how-we-hire/support-super-day.mdx @@ -1,3 +1,8 @@ +--- +title: Support Engineering Super Day +description: Support Engineering Super Day interview process at Langfuse. +--- + import { Badge } from "@/components/ui/badge"; # Support Engineering Super Day diff --git a/pages/handbook/how-we-work/meetings.mdx b/content/handbook/how-we-work/meetings.mdx similarity index 96% rename from pages/handbook/how-we-work/meetings.mdx rename to content/handbook/how-we-work/meetings.mdx index 28fddd5e75..9b76c8e3ed 100644 --- a/pages/handbook/how-we-work/meetings.mdx +++ b/content/handbook/how-we-work/meetings.mdx @@ -1,3 +1,8 @@ +--- +title: Meetings +description: How we run meetings at Langfuse. +--- + # Meetings We have a small number of regular meetings. Generally, standing meetings are an anti-pattern and most things are better resolved adhoc/async. diff --git a/content/handbook/how-we-work/meta.json b/content/handbook/how-we-work/meta.json new file mode 100644 index 0000000000..c2237e5676 --- /dev/null +++ b/content/handbook/how-we-work/meta.json @@ -0,0 +1,9 @@ +{ + "title": "How We Work", + "pages": [ + "principles", + "meetings", + "ownership", + "productivity-and-ai" + ] +} diff --git a/pages/handbook/how-we-work/ownership.mdx b/content/handbook/how-we-work/ownership.mdx similarity index 100% rename from pages/handbook/how-we-work/ownership.mdx rename to content/handbook/how-we-work/ownership.mdx diff --git a/pages/handbook/how-we-work/principles.mdx b/content/handbook/how-we-work/principles.mdx similarity index 100% rename from pages/handbook/how-we-work/principles.mdx rename to content/handbook/how-we-work/principles.mdx diff --git a/pages/handbook/how-we-work/productivity-and-ai.mdx b/content/handbook/how-we-work/productivity-and-ai.mdx similarity index 100% rename from pages/handbook/how-we-work/productivity-and-ai.mdx rename to content/handbook/how-we-work/productivity-and-ai.mdx diff --git a/pages/handbook/how-we-work/remote.mdx b/content/handbook/how-we-work/remote.mdx similarity index 100% rename from pages/handbook/how-we-work/remote.mdx rename to content/handbook/how-we-work/remote.mdx diff --git a/pages/handbook/index.mdx b/content/handbook/index.mdx similarity index 83% rename from pages/handbook/index.mdx rename to content/handbook/index.mdx index e78f741715..b726d7530e 100644 --- a/pages/handbook/index.mdx +++ b/content/handbook/index.mdx @@ -1,3 +1,8 @@ +--- +title: Langfuse Company Handbook +description: How we work at Langfuse. +--- + import { ChapterIndex } from "@/components/handbook/ChapterIndex"; import { TeamsIndex } from "@/components/handbook/TeamsIndex"; diff --git a/content/handbook/meta.json b/content/handbook/meta.json new file mode 100644 index 0000000000..474b073706 --- /dev/null +++ b/content/handbook/meta.json @@ -0,0 +1,19 @@ +{ + "title": "Handbook", + "pages": [ + "---Handbook---", + "index", + "chapters", + "---Working at Langfuse---", + "how-we-work", + "how-we-hire", + "perks-and-pay", + "tools-and-processes", + "---Resources---", + "product-engineering", + "sales-and-cs", + "support", + "devrel", + "operations" + ] +} diff --git a/pages/handbook/operations/entity-structure.mdx b/content/handbook/operations/entity-structure.mdx similarity index 100% rename from pages/handbook/operations/entity-structure.mdx rename to content/handbook/operations/entity-structure.mdx diff --git a/pages/handbook/operations/finance.mdx b/content/handbook/operations/finance.mdx similarity index 52% rename from pages/handbook/operations/finance.mdx rename to content/handbook/operations/finance.mdx index 0217844def..b657146784 100644 --- a/pages/handbook/operations/finance.mdx +++ b/content/handbook/operations/finance.mdx @@ -1,3 +1,8 @@ +--- +title: Finance +description: Finance and spending guides at Langfuse. +--- + # Finance Guides: diff --git a/content/handbook/operations/meta.json b/content/handbook/operations/meta.json new file mode 100644 index 0000000000..cf8ce88944 --- /dev/null +++ b/content/handbook/operations/meta.json @@ -0,0 +1,7 @@ +{ + "title": "Operations", + "pages": [ + "entity-structure", + "finance" + ] +} diff --git a/pages/handbook/perks-and-pay.mdx b/content/handbook/perks-and-pay.mdx similarity index 96% rename from pages/handbook/perks-and-pay.mdx rename to content/handbook/perks-and-pay.mdx index fb1671fbee..5d1d028511 100644 --- a/pages/handbook/perks-and-pay.mdx +++ b/content/handbook/perks-and-pay.mdx @@ -1,3 +1,8 @@ +--- +title: Perks and Pay +description: Compensation and benefits at Langfuse. +--- + # Perks and Pay In order to build one of the talent-densest places to work, our compensation benefits are designed to value exceptional talent. We are trying to keep the absolute headcount small while constantly raising the bar of new talent joining instead of lowering it. diff --git a/pages/handbook/product-engineering/analytics.mdx b/content/handbook/product-engineering/analytics.mdx similarity index 98% rename from pages/handbook/product-engineering/analytics.mdx rename to content/handbook/product-engineering/analytics.mdx index 37c50c5427..65b728b17b 100644 --- a/pages/handbook/product-engineering/analytics.mdx +++ b/content/handbook/product-engineering/analytics.mdx @@ -1,3 +1,8 @@ +--- +title: Analytics +description: Internal analytics stack and usage at Langfuse. +--- + # Analytics Our internal analytics across teams/functions is based on a central analytics stack. diff --git a/pages/handbook/product-engineering/architecture.mdx b/content/handbook/product-engineering/architecture.mdx similarity index 100% rename from pages/handbook/product-engineering/architecture.mdx rename to content/handbook/product-engineering/architecture.mdx diff --git a/pages/handbook/product-engineering/how-we-work/code-review.mdx b/content/handbook/product-engineering/how-we-work/code-review.mdx similarity index 96% rename from pages/handbook/product-engineering/how-we-work/code-review.mdx rename to content/handbook/product-engineering/how-we-work/code-review.mdx index 108f79c2dc..bdec38dafe 100644 --- a/pages/handbook/product-engineering/how-we-work/code-review.mdx +++ b/content/handbook/product-engineering/how-we-work/code-review.mdx @@ -1,3 +1,8 @@ +--- +title: Code Review +description: Code review process and guidelines at Langfuse. +--- + # Code Review ## When a PR author should ask for review diff --git a/content/handbook/product-engineering/how-we-work/meta.json b/content/handbook/product-engineering/how-we-work/meta.json new file mode 100644 index 0000000000..7c12f2c150 --- /dev/null +++ b/content/handbook/product-engineering/how-we-work/meta.json @@ -0,0 +1,10 @@ +{ + "title": "How We Work", + "pages": [ + "roadmapping", + "workflow", + "onboarding", + "code-review", + "product-ops" + ] +} diff --git a/pages/handbook/product-engineering/how-we-work/onboarding.mdx b/content/handbook/product-engineering/how-we-work/onboarding.mdx similarity index 98% rename from pages/handbook/product-engineering/how-we-work/onboarding.mdx rename to content/handbook/product-engineering/how-we-work/onboarding.mdx index e75cfc53d8..0b9e10bdaa 100644 --- a/pages/handbook/product-engineering/how-we-work/onboarding.mdx +++ b/content/handbook/product-engineering/how-we-work/onboarding.mdx @@ -1,3 +1,8 @@ +--- +title: Onboarding at Langfuse +description: New hire onboarding guide. +--- + # Onboarding at Langfuse Welcome to Langfuse! diff --git a/pages/handbook/product-engineering/how-we-work/product-ops.mdx b/content/handbook/product-engineering/how-we-work/product-ops.mdx similarity index 95% rename from pages/handbook/product-engineering/how-we-work/product-ops.mdx rename to content/handbook/product-engineering/how-we-work/product-ops.mdx index 228536d2fc..385c78295c 100644 --- a/pages/handbook/product-engineering/how-we-work/product-ops.mdx +++ b/content/handbook/product-engineering/how-we-work/product-ops.mdx @@ -1,3 +1,8 @@ +--- +title: Product Ops +description: How we run product operations at Langfuse. +--- + # Product Ops We maintain an increasingly large product surface area with a small team. diff --git a/pages/handbook/product-engineering/how-we-work/roadmapping.mdx b/content/handbook/product-engineering/how-we-work/roadmapping.mdx similarity index 100% rename from pages/handbook/product-engineering/how-we-work/roadmapping.mdx rename to content/handbook/product-engineering/how-we-work/roadmapping.mdx diff --git a/pages/handbook/product-engineering/how-we-work/workflow.mdx b/content/handbook/product-engineering/how-we-work/workflow.mdx similarity index 98% rename from pages/handbook/product-engineering/how-we-work/workflow.mdx rename to content/handbook/product-engineering/how-we-work/workflow.mdx index fcbdf9b8de..ad26b846c1 100644 --- a/pages/handbook/product-engineering/how-we-work/workflow.mdx +++ b/content/handbook/product-engineering/how-we-work/workflow.mdx @@ -1,3 +1,8 @@ +--- +title: Engineering Workflow +description: Engineering workflow and prioritization at Langfuse. +--- + # Engineering Workflow ## Prioritization diff --git a/pages/handbook/product-engineering/incident-response.mdx b/content/handbook/product-engineering/incident-response.mdx similarity index 98% rename from pages/handbook/product-engineering/incident-response.mdx rename to content/handbook/product-engineering/incident-response.mdx index 5d741c0dda..caf042029e 100644 --- a/pages/handbook/product-engineering/incident-response.mdx +++ b/content/handbook/product-engineering/incident-response.mdx @@ -1,3 +1,7 @@ +--- +title: Langfuse Incident Response Plan +--- + # Langfuse Incident Response Plan --- @@ -21,8 +25,6 @@ incident.io will automatically create a **Slack channel**, page the **on-call en --- - - ### Incident Lead The **first engineer to join** the incident channel is the Incident Lead. Assign yourself the role in incident.io. Pull respective [DRIs](https://langfuse.com/handbook/how-we-work/ownership) of affected components or Max in if needed. If required, pull someone from the business side in to monitor Slack channels and support tickets. @@ -48,4 +50,3 @@ The incident lead makes sure that we always keep the status page up to date with ### Resolution & Post-Mortem After mitigation, find and fix the root cause. Complete the post-mortem in [Linear](https://linear.app/langfuse/view/incidents-952de24cfbb8) using the auto-generated timeline, covering: summary, impact, root cause, contributing factors, and action items with owners. Track follow-ups in the Linear ticket. Share in **#team-engineering**. - diff --git a/pages/handbook/product-engineering/infrastructure/clickhouse.mdx b/content/handbook/product-engineering/infrastructure/clickhouse.mdx similarity index 98% rename from pages/handbook/product-engineering/infrastructure/clickhouse.mdx rename to content/handbook/product-engineering/infrastructure/clickhouse.mdx index 3138f6a2e9..6a3918b338 100644 --- a/pages/handbook/product-engineering/infrastructure/clickhouse.mdx +++ b/content/handbook/product-engineering/infrastructure/clickhouse.mdx @@ -1,3 +1,8 @@ +--- +title: ClickHouse Cloud +description: How we use ClickHouse Cloud for observability data. +--- + # ClickHouse Cloud We are using [ClickHouse Cloud](https://clickhouse.com/cloud) as our main data warehouse for storing and querying observability data such as traces, observations, and scores. diff --git a/pages/handbook/product-engineering/infrastructure/ecs.mdx b/content/handbook/product-engineering/infrastructure/ecs.mdx similarity index 97% rename from pages/handbook/product-engineering/infrastructure/ecs.mdx rename to content/handbook/product-engineering/infrastructure/ecs.mdx index 3ec86c0983..22353639c8 100644 --- a/pages/handbook/product-engineering/infrastructure/ecs.mdx +++ b/content/handbook/product-engineering/infrastructure/ecs.mdx @@ -1,3 +1,8 @@ +--- +title: AWS ECS Fargate +description: How we use AWS ECS Fargate for application containers. +--- + # AWS ECS Fargate We are using [AWS ECS Fargate](https://docs.aws.amazon.com/ecs/) as the runtime for our web and worker application containers. diff --git a/content/handbook/product-engineering/infrastructure/meta.json b/content/handbook/product-engineering/infrastructure/meta.json new file mode 100644 index 0000000000..1b8f56d022 --- /dev/null +++ b/content/handbook/product-engineering/infrastructure/meta.json @@ -0,0 +1,7 @@ +{ + "title": "Infrastructure", + "pages": [ + "clickhouse", + "ecs" + ] +} diff --git a/content/handbook/product-engineering/meta.json b/content/handbook/product-engineering/meta.json new file mode 100644 index 0000000000..02fd19fcfb --- /dev/null +++ b/content/handbook/product-engineering/meta.json @@ -0,0 +1,12 @@ +{ + "title": "Product Engineering", + "pages": [ + "principles", + "architecture", + "analytics", + "how-we-work", + "playbooks", + "tech-stack", + "infrastructure" + ] +} diff --git a/pages/handbook/product-engineering/playbooks/code-structure.mdx b/content/handbook/product-engineering/playbooks/code-structure.mdx similarity index 99% rename from pages/handbook/product-engineering/playbooks/code-structure.mdx rename to content/handbook/product-engineering/playbooks/code-structure.mdx index ec73173c41..0fec16a9d6 100644 --- a/pages/handbook/product-engineering/playbooks/code-structure.mdx +++ b/content/handbook/product-engineering/playbooks/code-structure.mdx @@ -1,4 +1,5 @@ --- +title: Backend Code Structure Guide description: Learn how Langfuse's backend is structured and how to write code following our patterns and best practices. --- diff --git a/pages/handbook/product-engineering/playbooks/documentation.mdx b/content/handbook/product-engineering/playbooks/documentation.mdx similarity index 100% rename from pages/handbook/product-engineering/playbooks/documentation.mdx rename to content/handbook/product-engineering/playbooks/documentation.mdx diff --git a/content/handbook/product-engineering/playbooks/meta.json b/content/handbook/product-engineering/playbooks/meta.json new file mode 100644 index 0000000000..d709b2b8b6 --- /dev/null +++ b/content/handbook/product-engineering/playbooks/meta.json @@ -0,0 +1,9 @@ +{ + "title": "Playbooks", + "pages": [ + "code-structure", + "documentation", + "releases", + "vulnerability-handling" + ] +} diff --git a/pages/handbook/product-engineering/playbooks/releases.mdx b/content/handbook/product-engineering/playbooks/releases.mdx similarity index 100% rename from pages/handbook/product-engineering/playbooks/releases.mdx rename to content/handbook/product-engineering/playbooks/releases.mdx diff --git a/pages/handbook/product-engineering/playbooks/vulnerability-handling.mdx b/content/handbook/product-engineering/playbooks/vulnerability-handling.mdx similarity index 100% rename from pages/handbook/product-engineering/playbooks/vulnerability-handling.mdx rename to content/handbook/product-engineering/playbooks/vulnerability-handling.mdx diff --git a/pages/handbook/product-engineering/principles.mdx b/content/handbook/product-engineering/principles.mdx similarity index 100% rename from pages/handbook/product-engineering/principles.mdx rename to content/handbook/product-engineering/principles.mdx diff --git a/pages/handbook/product-engineering/tech-stack.mdx b/content/handbook/product-engineering/tech-stack.mdx similarity index 81% rename from pages/handbook/product-engineering/tech-stack.mdx rename to content/handbook/product-engineering/tech-stack.mdx index d3873f8f24..34ee25774d 100644 --- a/pages/handbook/product-engineering/tech-stack.mdx +++ b/content/handbook/product-engineering/tech-stack.mdx @@ -1,3 +1,8 @@ +--- +title: Tech Stack at Langfuse +description: Technologies and tools we use at Langfuse. +--- + # Tech Stack at Langfuse diff --git a/pages/handbook/sales-and-cs/customer-success.mdx b/content/handbook/sales-and-cs/customer-success.mdx similarity index 100% rename from pages/handbook/sales-and-cs/customer-success.mdx rename to content/handbook/sales-and-cs/customer-success.mdx diff --git a/content/handbook/sales-and-cs/meta.json b/content/handbook/sales-and-cs/meta.json new file mode 100644 index 0000000000..9e8dfd1ff6 --- /dev/null +++ b/content/handbook/sales-and-cs/meta.json @@ -0,0 +1,8 @@ +{ + "title": "Sales & CS", + "pages": [ + "overview", + "customer-success", + "sales" + ] +} diff --git a/pages/handbook/sales-and-cs/overview.mdx b/content/handbook/sales-and-cs/overview.mdx similarity index 100% rename from pages/handbook/sales-and-cs/overview.mdx rename to content/handbook/sales-and-cs/overview.mdx diff --git a/pages/handbook/sales-and-cs/sales.mdx b/content/handbook/sales-and-cs/sales.mdx similarity index 100% rename from pages/handbook/sales-and-cs/sales.mdx rename to content/handbook/sales-and-cs/sales.mdx diff --git a/content/handbook/support/meta.json b/content/handbook/support/meta.json new file mode 100644 index 0000000000..46a82a18cd --- /dev/null +++ b/content/handbook/support/meta.json @@ -0,0 +1,7 @@ +{ + "title": "Support", + "pages": [ + "support", + "using-plain" + ] +} diff --git a/pages/handbook/support/support.mdx b/content/handbook/support/support.mdx similarity index 100% rename from pages/handbook/support/support.mdx rename to content/handbook/support/support.mdx diff --git a/pages/handbook/support/using-plain.mdx b/content/handbook/support/using-plain.mdx similarity index 100% rename from pages/handbook/support/using-plain.mdx rename to content/handbook/support/using-plain.mdx diff --git a/content/handbook/tools-and-processes/meta.json b/content/handbook/tools-and-processes/meta.json new file mode 100644 index 0000000000..889ccdab75 --- /dev/null +++ b/content/handbook/tools-and-processes/meta.json @@ -0,0 +1,9 @@ +{ + "title": "Tools & Processes", + "pages": [ + "spending-money", + "time-off", + "using-linear", + "using-slack" + ] +} diff --git a/pages/handbook/tools-and-processes/spending-money.mdx b/content/handbook/tools-and-processes/spending-money.mdx similarity index 95% rename from pages/handbook/tools-and-processes/spending-money.mdx rename to content/handbook/tools-and-processes/spending-money.mdx index 660a55fd2e..ab03efce6b 100644 --- a/pages/handbook/tools-and-processes/spending-money.mdx +++ b/content/handbook/tools-and-processes/spending-money.mdx @@ -1,3 +1,8 @@ +--- +title: Spending money +description: Guidelines for spending money at Langfuse. +--- + # Spending money <Callout type="info"> diff --git a/pages/handbook/tools-and-processes/time-off.mdx b/content/handbook/tools-and-processes/time-off.mdx similarity index 85% rename from pages/handbook/tools-and-processes/time-off.mdx rename to content/handbook/tools-and-processes/time-off.mdx index 7ff14364fc..07c43ceed7 100644 --- a/pages/handbook/tools-and-processes/time-off.mdx +++ b/content/handbook/tools-and-processes/time-off.mdx @@ -1,3 +1,8 @@ +--- +title: Time off +description: PTO and time off policy at Langfuse. +--- + # Time off You can take PTO as needed. diff --git a/pages/handbook/tools-and-processes/using-linear.mdx b/content/handbook/tools-and-processes/using-linear.mdx similarity index 92% rename from pages/handbook/tools-and-processes/using-linear.mdx rename to content/handbook/tools-and-processes/using-linear.mdx index ce5301dd21..6387386647 100644 --- a/pages/handbook/tools-and-processes/using-linear.mdx +++ b/content/handbook/tools-and-processes/using-linear.mdx @@ -1,3 +1,8 @@ +--- +title: Using Linear +description: How we use Linear for task management and product ops. +--- + # Using Linear We use Linear for all internal ticketing / task management. diff --git a/pages/handbook/tools-and-processes/using-slack.mdx b/content/handbook/tools-and-processes/using-slack.mdx similarity index 98% rename from pages/handbook/tools-and-processes/using-slack.mdx rename to content/handbook/tools-and-processes/using-slack.mdx index 3e9885d089..6bffe01366 100644 --- a/pages/handbook/tools-and-processes/using-slack.mdx +++ b/content/handbook/tools-and-processes/using-slack.mdx @@ -1,3 +1,8 @@ +--- +title: Using Slack +description: How we use Slack for internal and external communication. +--- + # Using Slack We use Slack for internal comms and to chat with customers, partners, and vendors. When joining the team, you can sign up for Slack (`langfuse.slack.com`) via your Google account. diff --git a/pages/integrations/analytics/coval.mdx b/content/integrations/analytics/coval.mdx similarity index 100% rename from pages/integrations/analytics/coval.mdx rename to content/integrations/analytics/coval.mdx diff --git a/content/integrations/analytics/meta.json b/content/integrations/analytics/meta.json new file mode 100644 index 0000000000..8780c84285 --- /dev/null +++ b/content/integrations/analytics/meta.json @@ -0,0 +1,9 @@ +{ + "title": "Analytics", + "pages": [ + "coval", + "mixpanel", + "posthog", + "trubrics" + ] +} diff --git a/pages/integrations/analytics/mixpanel.mdx b/content/integrations/analytics/mixpanel.mdx similarity index 87% rename from pages/integrations/analytics/mixpanel.mdx rename to content/integrations/analytics/mixpanel.mdx index c294079b80..14ffd1a997 100644 --- a/pages/integrations/analytics/mixpanel.mdx +++ b/content/integrations/analytics/mixpanel.mdx @@ -66,6 +66,36 @@ You can use the `AI Company KPIs` template to get started with a pre-built dashb </Steps> +## Export source (Langfuse v4) + +Mixpanel integrations now include an `Export Source` selector. New integrations default to `Enriched observations (recommended)` (trace attributes are directly set on observations). + +This source uses enriched observations with trace attributes and provides significantly better export performance. `Scores` are always included, regardless of the selected source. + +Available options: + +- `Traces and observations (legacy)` +- `Traces and observations (legacy) and enriched observations` +- `Enriched observations (recommended)` + +<Callout type="warning"> + `Traces and observations (legacy)` sources may be deprecated in the future. + All new export jobs should use `Enriched observations (recommended)`, and + existing legacy jobs are strongly recommended to upgrade. +</Callout> + +### Upgrade path for existing configurations + +Existing integrations continue to use `Traces and observations (legacy)` until changed. + +To migrate safely: + +1. Switch to `Traces and observations (legacy) and enriched observations`. +2. Validate downstream dashboards, transformations, and alerts while both sources are exported (this mode creates duplicate records by design). +3. Switch to `Enriched observations (recommended)` once validation is complete. + +For rollout details, see the [Simplify for Scale changelog](/changelog/2026-02-10-simplify-for-scale). + ## Integration details [#details] On an hourly schedule, Langfuse batches aggregated events and metrics to your Mixpanel instance. diff --git a/pages/integrations/analytics/posthog.mdx b/content/integrations/analytics/posthog.mdx similarity index 84% rename from pages/integrations/analytics/posthog.mdx rename to content/integrations/analytics/posthog.mdx index 1a7e6bac0f..04d23965dc 100644 --- a/pages/integrations/analytics/posthog.mdx +++ b/content/integrations/analytics/posthog.mdx @@ -43,6 +43,36 @@ Once integrated, you can build a dashboard in PostHog to visualize your Langfuse </Steps> +## Export source (Langfuse v4) + +PostHog integrations now include an `Export Source` selector. New integrations default to `Enriched observations (recommended)` (trace attributes are directly set on observations). + +This source uses enriched observations with trace attributes and provides significantly better export performance. `Scores` are always included, regardless of the selected source. + +Available options: + +- `Traces and observations (legacy)` +- `Traces and observations (legacy) and enriched observations` +- `Enriched observations (recommended)` + +<Callout type="warning"> + `Traces and observations (legacy)` sources may be deprecated in the future. + All new export jobs should use `Enriched observations (recommended)`, and + existing legacy jobs are strongly recommended to upgrade. +</Callout> + +### Upgrade path for existing configurations + +Existing integrations continue to use `Traces and observations (legacy)` until changed. + +To migrate safely: + +1. Switch to `Traces and observations (legacy) and enriched observations`. +2. Validate downstream dashboards, transformations, and alerts while both sources are exported (this mode creates duplicate records by design). +3. Switch to `Enriched observations (recommended)` once validation is complete. + +For rollout details, see the [Simplify for Scale changelog](/changelog/2026-02-10-simplify-for-scale). + ## Example PostHog Dashboard <Video diff --git a/pages/integrations/analytics/trubrics.mdx b/content/integrations/analytics/trubrics.mdx similarity index 100% rename from pages/integrations/analytics/trubrics.mdx rename to content/integrations/analytics/trubrics.mdx diff --git a/content/integrations/data-platform/meta.json b/content/integrations/data-platform/meta.json new file mode 100644 index 0000000000..25e965c5ca --- /dev/null +++ b/content/integrations/data-platform/meta.json @@ -0,0 +1,10 @@ +{ + "title": "Data Platform", + "pages": [ + "[Public API ↗](/docs/api-and-data-platform/overview)", + "[Exports to S3 ↗](/docs/api-and-data-platform/features/export-to-blob-storage)", + "[Metrics API ↗](/docs/metrics/features/metrics-api)", + "[Prompt Webhooks ↗](/docs/prompt-management/features/webhooks-slack-integrations)", + "[Export to Blob Storage ↗](/docs/api-and-data-platform/features/export-to-blob-storage)" + ] +} diff --git a/pages/integrations/frameworks/agno-agents.mdx b/content/integrations/frameworks/agno-agents.mdx similarity index 100% rename from pages/integrations/frameworks/agno-agents.mdx rename to content/integrations/frameworks/agno-agents.mdx diff --git a/pages/integrations/frameworks/amazon-agentcore.mdx b/content/integrations/frameworks/amazon-agentcore.mdx similarity index 99% rename from pages/integrations/frameworks/amazon-agentcore.mdx rename to content/integrations/frameworks/amazon-agentcore.mdx index 776d23b6ef..4a9a07397e 100644 --- a/pages/integrations/frameworks/amazon-agentcore.mdx +++ b/content/integrations/frameworks/amazon-agentcore.mdx @@ -1,4 +1,5 @@ --- +title: Integration - Amazon Bedrock AgentCore sidebarTitle: Amazon Bedrock AgentCore seoTitle: Open Source Observability for Amazon Bedrock AgentCore description: Learn how to integrate Langfuse with Amazon Bedrock AgentCore for comprehensive tracing, evaluation, and continuous improvement of your AI agents. diff --git a/pages/integrations/frameworks/autogen.mdx b/content/integrations/frameworks/autogen.mdx similarity index 100% rename from pages/integrations/frameworks/autogen.mdx rename to content/integrations/frameworks/autogen.mdx diff --git a/pages/integrations/frameworks/beeai.mdx b/content/integrations/frameworks/beeai.mdx similarity index 100% rename from pages/integrations/frameworks/beeai.mdx rename to content/integrations/frameworks/beeai.mdx diff --git a/pages/integrations/frameworks/claude-agent-sdk.mdx b/content/integrations/frameworks/claude-agent-sdk.mdx similarity index 100% rename from pages/integrations/frameworks/claude-agent-sdk.mdx rename to content/integrations/frameworks/claude-agent-sdk.mdx diff --git a/pages/integrations/frameworks/crewai.mdx b/content/integrations/frameworks/crewai.mdx similarity index 100% rename from pages/integrations/frameworks/crewai.mdx rename to content/integrations/frameworks/crewai.mdx diff --git a/pages/integrations/frameworks/dspy.mdx b/content/integrations/frameworks/dspy.mdx similarity index 100% rename from pages/integrations/frameworks/dspy.mdx rename to content/integrations/frameworks/dspy.mdx diff --git a/pages/integrations/frameworks/embabel.mdx b/content/integrations/frameworks/embabel.mdx similarity index 100% rename from pages/integrations/frameworks/embabel.mdx rename to content/integrations/frameworks/embabel.mdx diff --git a/pages/integrations/frameworks/google-adk.mdx b/content/integrations/frameworks/google-adk.mdx similarity index 100% rename from pages/integrations/frameworks/google-adk.mdx rename to content/integrations/frameworks/google-adk.mdx diff --git a/pages/integrations/frameworks/haystack.mdx b/content/integrations/frameworks/haystack.mdx similarity index 100% rename from pages/integrations/frameworks/haystack.mdx rename to content/integrations/frameworks/haystack.mdx diff --git a/pages/integrations/frameworks/instructor.mdx b/content/integrations/frameworks/instructor.mdx similarity index 100% rename from pages/integrations/frameworks/instructor.mdx rename to content/integrations/frameworks/instructor.mdx diff --git a/pages/integrations/frameworks/koog.mdx b/content/integrations/frameworks/koog.mdx similarity index 100% rename from pages/integrations/frameworks/koog.mdx rename to content/integrations/frameworks/koog.mdx diff --git a/pages/integrations/frameworks/langchain-deepagents.mdx b/content/integrations/frameworks/langchain-deepagents.mdx similarity index 100% rename from pages/integrations/frameworks/langchain-deepagents.mdx rename to content/integrations/frameworks/langchain-deepagents.mdx diff --git a/pages/integrations/frameworks/langchain.mdx b/content/integrations/frameworks/langchain.mdx similarity index 99% rename from pages/integrations/frameworks/langchain.mdx rename to content/integrations/frameworks/langchain.mdx index 32fd2d34c3..6a558d54de 100644 --- a/pages/integrations/frameworks/langchain.mdx +++ b/content/integrations/frameworks/langchain.mdx @@ -1,4 +1,5 @@ --- +title: LangChain Tracing & LangGraph Integration sidebarTitle: LangChain & LangGraph description: "Open source LangChain tracing and monitoring. Automatically capture traces of your LangChain callbacks, LLM calls, tools, and retrievers with Langfuse. Python and JS/TS." seoTitle: "LangChain Tracing & Callbacks — Open Source Observability for LangChain & LangGraph" diff --git a/pages/integrations/frameworks/langserve.md b/content/integrations/frameworks/langserve.md similarity index 100% rename from pages/integrations/frameworks/langserve.md rename to content/integrations/frameworks/langserve.md diff --git a/pages/integrations/frameworks/litellm-sdk.mdx b/content/integrations/frameworks/litellm-sdk.mdx similarity index 100% rename from pages/integrations/frameworks/litellm-sdk.mdx rename to content/integrations/frameworks/litellm-sdk.mdx diff --git a/pages/integrations/frameworks/livekit.mdx b/content/integrations/frameworks/livekit.mdx similarity index 100% rename from pages/integrations/frameworks/livekit.mdx rename to content/integrations/frameworks/livekit.mdx diff --git a/pages/integrations/frameworks/llamaindex-workflows.mdx b/content/integrations/frameworks/llamaindex-workflows.mdx similarity index 100% rename from pages/integrations/frameworks/llamaindex-workflows.mdx rename to content/integrations/frameworks/llamaindex-workflows.mdx diff --git a/pages/integrations/frameworks/llamaindex.mdx b/content/integrations/frameworks/llamaindex.mdx similarity index 100% rename from pages/integrations/frameworks/llamaindex.mdx rename to content/integrations/frameworks/llamaindex.mdx diff --git a/pages/integrations/frameworks/mastra.mdx b/content/integrations/frameworks/mastra.mdx similarity index 100% rename from pages/integrations/frameworks/mastra.mdx rename to content/integrations/frameworks/mastra.mdx diff --git a/content/integrations/frameworks/meta.json b/content/integrations/frameworks/meta.json new file mode 100644 index 0000000000..f170a79a5c --- /dev/null +++ b/content/integrations/frameworks/meta.json @@ -0,0 +1,40 @@ +{ + "title": "Frameworks", + "pages": [ + "agno-agents", + "amazon-agentcore", + "autogen", + "beeai", + "claude-agent-sdk", + "crewai", + "dspy", + "google-adk", + "haystack", + "instructor", + "koog", + "langchain-deepagents", + "langchain", + "langserve", + "litellm-sdk", + "livekit", + "llamaindex-workflows", + "llamaindex", + "mastra", + "microsoft-agent-framework", + "mirascope", + "openai-agents", + "pipecat", + "pydantic-ai", + "quarkus-langchain4j", + "ragas", + "semantic-kernel", + "smolagents", + "spring-ai", + "strands-agents", + "swiftide", + "temporal", + "vercel-ai-sdk", + "voltagent", + "watsonx-orchestrate" + ] +} diff --git a/pages/integrations/frameworks/microsoft-agent-framework.mdx b/content/integrations/frameworks/microsoft-agent-framework.mdx similarity index 100% rename from pages/integrations/frameworks/microsoft-agent-framework.mdx rename to content/integrations/frameworks/microsoft-agent-framework.mdx diff --git a/pages/integrations/frameworks/mirascope.mdx b/content/integrations/frameworks/mirascope.mdx similarity index 100% rename from pages/integrations/frameworks/mirascope.mdx rename to content/integrations/frameworks/mirascope.mdx diff --git a/pages/integrations/frameworks/openai-agents.mdx b/content/integrations/frameworks/openai-agents.mdx similarity index 100% rename from pages/integrations/frameworks/openai-agents.mdx rename to content/integrations/frameworks/openai-agents.mdx diff --git a/pages/integrations/frameworks/pipecat.mdx b/content/integrations/frameworks/pipecat.mdx similarity index 100% rename from pages/integrations/frameworks/pipecat.mdx rename to content/integrations/frameworks/pipecat.mdx diff --git a/pages/integrations/frameworks/pydantic-ai.mdx b/content/integrations/frameworks/pydantic-ai.mdx similarity index 100% rename from pages/integrations/frameworks/pydantic-ai.mdx rename to content/integrations/frameworks/pydantic-ai.mdx diff --git a/pages/integrations/frameworks/quarkus-langchain4j.mdx b/content/integrations/frameworks/quarkus-langchain4j.mdx similarity index 100% rename from pages/integrations/frameworks/quarkus-langchain4j.mdx rename to content/integrations/frameworks/quarkus-langchain4j.mdx diff --git a/pages/integrations/frameworks/ragas.mdx b/content/integrations/frameworks/ragas.mdx similarity index 100% rename from pages/integrations/frameworks/ragas.mdx rename to content/integrations/frameworks/ragas.mdx diff --git a/pages/integrations/frameworks/semantic-kernel.mdx b/content/integrations/frameworks/semantic-kernel.mdx similarity index 100% rename from pages/integrations/frameworks/semantic-kernel.mdx rename to content/integrations/frameworks/semantic-kernel.mdx diff --git a/pages/integrations/frameworks/smolagents.mdx b/content/integrations/frameworks/smolagents.mdx similarity index 100% rename from pages/integrations/frameworks/smolagents.mdx rename to content/integrations/frameworks/smolagents.mdx diff --git a/pages/integrations/frameworks/spring-ai.mdx b/content/integrations/frameworks/spring-ai.mdx similarity index 100% rename from pages/integrations/frameworks/spring-ai.mdx rename to content/integrations/frameworks/spring-ai.mdx diff --git a/pages/integrations/frameworks/strands-agents.mdx b/content/integrations/frameworks/strands-agents.mdx similarity index 100% rename from pages/integrations/frameworks/strands-agents.mdx rename to content/integrations/frameworks/strands-agents.mdx diff --git a/pages/integrations/frameworks/swiftide.mdx b/content/integrations/frameworks/swiftide.mdx similarity index 100% rename from pages/integrations/frameworks/swiftide.mdx rename to content/integrations/frameworks/swiftide.mdx diff --git a/pages/integrations/frameworks/temporal.mdx b/content/integrations/frameworks/temporal.mdx similarity index 100% rename from pages/integrations/frameworks/temporal.mdx rename to content/integrations/frameworks/temporal.mdx diff --git a/pages/integrations/frameworks/vercel-ai-sdk.mdx b/content/integrations/frameworks/vercel-ai-sdk.mdx similarity index 100% rename from pages/integrations/frameworks/vercel-ai-sdk.mdx rename to content/integrations/frameworks/vercel-ai-sdk.mdx diff --git a/pages/integrations/frameworks/voltagent.mdx b/content/integrations/frameworks/voltagent.mdx similarity index 100% rename from pages/integrations/frameworks/voltagent.mdx rename to content/integrations/frameworks/voltagent.mdx diff --git a/pages/integrations/frameworks/watsonx-orchestrate.mdx b/content/integrations/frameworks/watsonx-orchestrate.mdx similarity index 100% rename from pages/integrations/frameworks/watsonx-orchestrate.mdx rename to content/integrations/frameworks/watsonx-orchestrate.mdx diff --git a/pages/integrations/gateways/anannas.mdx b/content/integrations/gateways/anannas.mdx similarity index 100% rename from pages/integrations/gateways/anannas.mdx rename to content/integrations/gateways/anannas.mdx diff --git a/pages/integrations/gateways/helicone.mdx b/content/integrations/gateways/helicone.mdx similarity index 100% rename from pages/integrations/gateways/helicone.mdx rename to content/integrations/gateways/helicone.mdx diff --git a/pages/integrations/gateways/kong-ai-plugin.mdx b/content/integrations/gateways/kong-ai-plugin.mdx similarity index 100% rename from pages/integrations/gateways/kong-ai-plugin.mdx rename to content/integrations/gateways/kong-ai-plugin.mdx diff --git a/pages/integrations/gateways/litellm.mdx b/content/integrations/gateways/litellm.mdx similarity index 100% rename from pages/integrations/gateways/litellm.mdx rename to content/integrations/gateways/litellm.mdx diff --git a/content/integrations/gateways/meta.json b/content/integrations/gateways/meta.json new file mode 100644 index 0000000000..ef8f656a04 --- /dev/null +++ b/content/integrations/gateways/meta.json @@ -0,0 +1,13 @@ +{ + "title": "Gateways", + "pages": [ + "anannas", + "helicone", + "kong-ai-plugin", + "litellm", + "openrouter", + "portkey", + "truefoundry", + "vercel-ai-gateway" + ] +} diff --git a/pages/integrations/gateways/openrouter.mdx b/content/integrations/gateways/openrouter.mdx similarity index 100% rename from pages/integrations/gateways/openrouter.mdx rename to content/integrations/gateways/openrouter.mdx diff --git a/pages/integrations/gateways/portkey.mdx b/content/integrations/gateways/portkey.mdx similarity index 100% rename from pages/integrations/gateways/portkey.mdx rename to content/integrations/gateways/portkey.mdx diff --git a/pages/integrations/gateways/truefoundry.mdx b/content/integrations/gateways/truefoundry.mdx similarity index 99% rename from pages/integrations/gateways/truefoundry.mdx rename to content/integrations/gateways/truefoundry.mdx index e1815c009e..c006158612 100644 --- a/pages/integrations/gateways/truefoundry.mdx +++ b/content/integrations/gateways/truefoundry.mdx @@ -19,6 +19,7 @@ Truefoundry’s AI Gateway and Langfuse combine to give you enterprise-grade obs <summary><strong>Unified OpenAI-Compatible Endpoint</strong></summary> Point the Langfuse OpenAI client at Truefoundry’s gateway URL. Truefoundry routes to any supported model (OpenAI, Anthropic, self-hosted, etc.), while Langfuse transparently captures each call—no code changes required. + </details> <details> @@ -30,6 +31,7 @@ Langfuse delivers: - **Latency breakdowns** per call - **Cost analytics** by model and environment Drill into any trace in seconds to optimize performance or debug regressions. + </details> <details> @@ -39,7 +41,8 @@ Truefoundry augments your LLM stack with: - **Rate limiting & quotas** per team or user - **Budget alerts & spend caps** to prevent overruns - **Scoped API keys** with RBAC for dev, staging, prod -- **On-prem/VPC deployment** for full data sovereignty +- **On-prem/VPC deployment** for full data sovereignty + </details> ## Prerequisites diff --git a/pages/integrations/gateways/vercel-ai-gateway.mdx b/content/integrations/gateways/vercel-ai-gateway.mdx similarity index 100% rename from pages/integrations/gateways/vercel-ai-gateway.mdx rename to content/integrations/gateways/vercel-ai-gateway.mdx diff --git a/pages/integrations/index.mdx b/content/integrations/index.mdx similarity index 100% rename from pages/integrations/index.mdx rename to content/integrations/index.mdx diff --git a/content/integrations/meta.json b/content/integrations/meta.json new file mode 100644 index 0000000000..c40c7cca4f --- /dev/null +++ b/content/integrations/meta.json @@ -0,0 +1,15 @@ +{ + "title": "Integrations", + "pages": [ + "import", + "index", + "native", + "frameworks", + "model-providers", + "gateways", + "no-code", + "analytics", + "data-platform", + "other" + ] +} diff --git a/pages/integrations/model-providers/amazon-bedrock-agents.mdx b/content/integrations/model-providers/amazon-bedrock-agents.mdx similarity index 97% rename from pages/integrations/model-providers/amazon-bedrock-agents.mdx rename to content/integrations/model-providers/amazon-bedrock-agents.mdx index ae69c6a803..d71a140271 100644 --- a/pages/integrations/model-providers/amazon-bedrock-agents.mdx +++ b/content/integrations/model-providers/amazon-bedrock-agents.mdx @@ -1,4 +1,5 @@ --- +title: Integration - Amazon Bedrock Agents sidebarTitle: Amazon Bedrock Agents seoTitle: Open Source Observability for Amazon Bedrock Agents description: This cookbook demonstrates how to trace Amazon Bedrock Agents with Langfuse. diff --git a/pages/integrations/model-providers/amazon-bedrock.md b/content/integrations/model-providers/amazon-bedrock.md similarity index 99% rename from pages/integrations/model-providers/amazon-bedrock.md rename to content/integrations/model-providers/amazon-bedrock.md index 7d1f13ec15..4ea37cda5c 100644 --- a/pages/integrations/model-providers/amazon-bedrock.md +++ b/content/integrations/model-providers/amazon-bedrock.md @@ -1,4 +1,5 @@ --- +title: Amazon Bedrock Integration sidebarTitle: Amazon Bedrock seoTitle: Open Source Observability and Metrics for Amazon Bedrock description: Open source observability for Amazon Bedrock applications and the Bedrock SDK. diff --git a/pages/integrations/model-providers/anthropic-js.mdx b/content/integrations/model-providers/anthropic-js.mdx similarity index 100% rename from pages/integrations/model-providers/anthropic-js.mdx rename to content/integrations/model-providers/anthropic-js.mdx diff --git a/pages/integrations/model-providers/anthropic.mdx b/content/integrations/model-providers/anthropic.mdx similarity index 100% rename from pages/integrations/model-providers/anthropic.mdx rename to content/integrations/model-providers/anthropic.mdx diff --git a/pages/integrations/model-providers/baseten.mdx b/content/integrations/model-providers/baseten.mdx similarity index 100% rename from pages/integrations/model-providers/baseten.mdx rename to content/integrations/model-providers/baseten.mdx diff --git a/pages/integrations/model-providers/byteplus.mdx b/content/integrations/model-providers/byteplus.mdx similarity index 100% rename from pages/integrations/model-providers/byteplus.mdx rename to content/integrations/model-providers/byteplus.mdx diff --git a/pages/integrations/model-providers/cerebras.mdx b/content/integrations/model-providers/cerebras.mdx similarity index 100% rename from pages/integrations/model-providers/cerebras.mdx rename to content/integrations/model-providers/cerebras.mdx diff --git a/pages/integrations/model-providers/cleanlab.md b/content/integrations/model-providers/cleanlab.md similarity index 100% rename from pages/integrations/model-providers/cleanlab.md rename to content/integrations/model-providers/cleanlab.md diff --git a/pages/integrations/model-providers/cohere.md b/content/integrations/model-providers/cohere.md similarity index 100% rename from pages/integrations/model-providers/cohere.md rename to content/integrations/model-providers/cohere.md diff --git a/pages/integrations/model-providers/cometapi.mdx b/content/integrations/model-providers/cometapi.mdx similarity index 100% rename from pages/integrations/model-providers/cometapi.mdx rename to content/integrations/model-providers/cometapi.mdx diff --git a/pages/integrations/model-providers/databricks.mdx b/content/integrations/model-providers/databricks.mdx similarity index 100% rename from pages/integrations/model-providers/databricks.mdx rename to content/integrations/model-providers/databricks.mdx diff --git a/pages/integrations/model-providers/deepseek.mdx b/content/integrations/model-providers/deepseek.mdx similarity index 100% rename from pages/integrations/model-providers/deepseek.mdx rename to content/integrations/model-providers/deepseek.mdx diff --git a/pages/integrations/model-providers/fireworks-ai.mdx b/content/integrations/model-providers/fireworks-ai.mdx similarity index 100% rename from pages/integrations/model-providers/fireworks-ai.mdx rename to content/integrations/model-providers/fireworks-ai.mdx diff --git a/pages/integrations/model-providers/google-gemini.mdx b/content/integrations/model-providers/google-gemini.mdx similarity index 100% rename from pages/integrations/model-providers/google-gemini.mdx rename to content/integrations/model-providers/google-gemini.mdx diff --git a/pages/integrations/model-providers/google-vertex-ai.mdx b/content/integrations/model-providers/google-vertex-ai.mdx similarity index 100% rename from pages/integrations/model-providers/google-vertex-ai.mdx rename to content/integrations/model-providers/google-vertex-ai.mdx diff --git a/pages/integrations/model-providers/groq.mdx b/content/integrations/model-providers/groq.mdx similarity index 100% rename from pages/integrations/model-providers/groq.mdx rename to content/integrations/model-providers/groq.mdx diff --git a/pages/integrations/model-providers/huggingface.mdx b/content/integrations/model-providers/huggingface.mdx similarity index 100% rename from pages/integrations/model-providers/huggingface.mdx rename to content/integrations/model-providers/huggingface.mdx diff --git a/content/integrations/model-providers/meta.json b/content/integrations/model-providers/meta.json new file mode 100644 index 0000000000..0a08d9962e --- /dev/null +++ b/content/integrations/model-providers/meta.json @@ -0,0 +1,31 @@ +{ + "title": "Model Providers", + "pages": [ + "amazon-bedrock-agents", + "amazon-bedrock", + "anthropic-js", + "anthropic", + "baseten", + "byteplus", + "cerebras", + "cleanlab", + "cohere", + "cometapi", + "databricks", + "deepseek", + "fireworks-ai", + "google-gemini", + "google-vertex-ai", + "groq", + "huggingface", + "mistral-sdk", + "novitaai", + "ollama", + "openai-assistants-api", + "openai-js", + "openai-py", + "togetherai", + "vllm", + "xai-grok" + ] +} diff --git a/pages/integrations/model-providers/mistral-sdk.mdx b/content/integrations/model-providers/mistral-sdk.mdx similarity index 100% rename from pages/integrations/model-providers/mistral-sdk.mdx rename to content/integrations/model-providers/mistral-sdk.mdx diff --git a/pages/integrations/model-providers/novitaai.mdx b/content/integrations/model-providers/novitaai.mdx similarity index 100% rename from pages/integrations/model-providers/novitaai.mdx rename to content/integrations/model-providers/novitaai.mdx diff --git a/pages/integrations/model-providers/ollama.md b/content/integrations/model-providers/ollama.md similarity index 100% rename from pages/integrations/model-providers/ollama.md rename to content/integrations/model-providers/ollama.md diff --git a/pages/integrations/model-providers/openai-assistants-api.md b/content/integrations/model-providers/openai-assistants-api.md similarity index 100% rename from pages/integrations/model-providers/openai-assistants-api.md rename to content/integrations/model-providers/openai-assistants-api.md diff --git a/pages/integrations/model-providers/openai-js.mdx b/content/integrations/model-providers/openai-js.mdx similarity index 100% rename from pages/integrations/model-providers/openai-js.mdx rename to content/integrations/model-providers/openai-js.mdx diff --git a/pages/integrations/model-providers/openai-py.mdx b/content/integrations/model-providers/openai-py.mdx similarity index 100% rename from pages/integrations/model-providers/openai-py.mdx rename to content/integrations/model-providers/openai-py.mdx diff --git a/pages/integrations/model-providers/togetherai.mdx b/content/integrations/model-providers/togetherai.mdx similarity index 100% rename from pages/integrations/model-providers/togetherai.mdx rename to content/integrations/model-providers/togetherai.mdx diff --git a/pages/integrations/model-providers/vllm.mdx b/content/integrations/model-providers/vllm.mdx similarity index 100% rename from pages/integrations/model-providers/vllm.mdx rename to content/integrations/model-providers/vllm.mdx diff --git a/pages/integrations/model-providers/xai-grok.mdx b/content/integrations/model-providers/xai-grok.mdx similarity index 100% rename from pages/integrations/model-providers/xai-grok.mdx rename to content/integrations/model-providers/xai-grok.mdx diff --git a/content/integrations/native/meta.json b/content/integrations/native/meta.json new file mode 100644 index 0000000000..2fe8390a64 --- /dev/null +++ b/content/integrations/native/meta.json @@ -0,0 +1,8 @@ +{ + "title": "Native", + "pages": [ + "[Python SDK ↗](/docs/sdk/python/sdk-v3)", + "[JS/TS SDK ↗](/docs/sdk/typescript/guide)", + "opentelemetry" + ] +} diff --git a/pages/integrations/native/opentelemetry.mdx b/content/integrations/native/opentelemetry.mdx similarity index 100% rename from pages/integrations/native/opentelemetry.mdx rename to content/integrations/native/opentelemetry.mdx diff --git a/pages/integrations/no-code/dify.mdx b/content/integrations/no-code/dify.mdx similarity index 100% rename from pages/integrations/no-code/dify.mdx rename to content/integrations/no-code/dify.mdx diff --git a/pages/integrations/no-code/flowise.mdx b/content/integrations/no-code/flowise.mdx similarity index 100% rename from pages/integrations/no-code/flowise.mdx rename to content/integrations/no-code/flowise.mdx diff --git a/pages/integrations/no-code/goose.mdx b/content/integrations/no-code/goose.mdx similarity index 99% rename from pages/integrations/no-code/goose.mdx rename to content/integrations/no-code/goose.mdx index 80ca6283a4..5e5c336cf5 100644 --- a/pages/integrations/no-code/goose.mdx +++ b/content/integrations/no-code/goose.mdx @@ -1,4 +1,5 @@ --- +title: Integrating Goose with Langfuse description: Learn how to integrate Goose, an open-source AI agent, with Langfuse for enhanced monitoring and automation of engineering tasks. category: Integrations sidebarTitle: Codename Goose diff --git a/pages/integrations/no-code/langdock.mdx b/content/integrations/no-code/langdock.mdx similarity index 100% rename from pages/integrations/no-code/langdock.mdx rename to content/integrations/no-code/langdock.mdx diff --git a/pages/integrations/no-code/langflow.mdx b/content/integrations/no-code/langflow.mdx similarity index 100% rename from pages/integrations/no-code/langflow.mdx rename to content/integrations/no-code/langflow.mdx diff --git a/pages/integrations/no-code/lobechat.mdx b/content/integrations/no-code/lobechat.mdx similarity index 100% rename from pages/integrations/no-code/lobechat.mdx rename to content/integrations/no-code/lobechat.mdx diff --git a/content/integrations/no-code/meta.json b/content/integrations/no-code/meta.json new file mode 100644 index 0000000000..800a7c526c --- /dev/null +++ b/content/integrations/no-code/meta.json @@ -0,0 +1,15 @@ +{ + "title": "No-Code Agent Builders", + "pages": [ + "dify", + "flowise", + "goose", + "langdock", + "langflow", + "lobechat", + "n8n", + "openwebui", + "ragflow", + "vapi" + ] +} diff --git a/pages/integrations/no-code/n8n.mdx b/content/integrations/no-code/n8n.mdx similarity index 100% rename from pages/integrations/no-code/n8n.mdx rename to content/integrations/no-code/n8n.mdx diff --git a/pages/integrations/no-code/openwebui.mdx b/content/integrations/no-code/openwebui.mdx similarity index 100% rename from pages/integrations/no-code/openwebui.mdx rename to content/integrations/no-code/openwebui.mdx diff --git a/pages/integrations/no-code/ragflow.mdx b/content/integrations/no-code/ragflow.mdx similarity index 100% rename from pages/integrations/no-code/ragflow.mdx rename to content/integrations/no-code/ragflow.mdx diff --git a/pages/integrations/no-code/vapi.mdx b/content/integrations/no-code/vapi.mdx similarity index 100% rename from pages/integrations/no-code/vapi.mdx rename to content/integrations/no-code/vapi.mdx diff --git a/pages/integrations/other/claude-code.mdx b/content/integrations/other/claude-code.mdx similarity index 100% rename from pages/integrations/other/claude-code.mdx rename to content/integrations/other/claude-code.mdx diff --git a/pages/integrations/other/cognee.mdx b/content/integrations/other/cognee.mdx similarity index 100% rename from pages/integrations/other/cognee.mdx rename to content/integrations/other/cognee.mdx diff --git a/pages/integrations/other/cursor.mdx b/content/integrations/other/cursor.mdx similarity index 100% rename from pages/integrations/other/cursor.mdx rename to content/integrations/other/cursor.mdx diff --git a/pages/integrations/other/exa.mdx b/content/integrations/other/exa.mdx similarity index 100% rename from pages/integrations/other/exa.mdx rename to content/integrations/other/exa.mdx diff --git a/pages/integrations/other/firecrawl.mdx b/content/integrations/other/firecrawl.mdx similarity index 100% rename from pages/integrations/other/firecrawl.mdx rename to content/integrations/other/firecrawl.mdx diff --git a/pages/integrations/other/gradio.md b/content/integrations/other/gradio.md similarity index 100% rename from pages/integrations/other/gradio.md rename to content/integrations/other/gradio.md diff --git a/pages/integrations/other/inferable.mdx b/content/integrations/other/inferable.mdx similarity index 100% rename from pages/integrations/other/inferable.mdx rename to content/integrations/other/inferable.mdx diff --git a/pages/integrations/other/librechat.mdx b/content/integrations/other/librechat.mdx similarity index 100% rename from pages/integrations/other/librechat.mdx rename to content/integrations/other/librechat.mdx diff --git a/pages/integrations/other/mcp-use.mdx b/content/integrations/other/mcp-use.mdx similarity index 100% rename from pages/integrations/other/mcp-use.mdx rename to content/integrations/other/mcp-use.mdx diff --git a/content/integrations/other/meta.json b/content/integrations/other/meta.json new file mode 100644 index 0000000000..f9cfd14854 --- /dev/null +++ b/content/integrations/other/meta.json @@ -0,0 +1,19 @@ +{ + "title": "Other", + "pages": [ + "claude-code", + "cognee", + "cursor", + "exa", + "firecrawl", + "gradio", + "inferable", + "librechat", + "mcp-use", + "milvus", + "parallel-ai", + "promptfoo", + "testable-minds", + "zapier" + ] +} diff --git a/pages/integrations/other/milvus.mdx b/content/integrations/other/milvus.mdx similarity index 100% rename from pages/integrations/other/milvus.mdx rename to content/integrations/other/milvus.mdx diff --git a/pages/integrations/other/openclaw.mdx b/content/integrations/other/openclaw.mdx similarity index 100% rename from pages/integrations/other/openclaw.mdx rename to content/integrations/other/openclaw.mdx diff --git a/pages/integrations/other/parallel-ai.mdx b/content/integrations/other/parallel-ai.mdx similarity index 100% rename from pages/integrations/other/parallel-ai.mdx rename to content/integrations/other/parallel-ai.mdx diff --git a/pages/integrations/other/promptfoo.mdx b/content/integrations/other/promptfoo.mdx similarity index 100% rename from pages/integrations/other/promptfoo.mdx rename to content/integrations/other/promptfoo.mdx diff --git a/pages/integrations/other/testable-minds.mdx b/content/integrations/other/testable-minds.mdx similarity index 100% rename from pages/integrations/other/testable-minds.mdx rename to content/integrations/other/testable-minds.mdx diff --git a/pages/integrations/other/zapier.mdx b/content/integrations/other/zapier.mdx similarity index 100% rename from pages/integrations/other/zapier.mdx rename to content/integrations/other/zapier.mdx diff --git a/pages/library/index.mdx b/content/library/index.mdx similarity index 100% rename from pages/library/index.mdx rename to content/library/index.mdx diff --git a/content/library/meta.json b/content/library/meta.json new file mode 100644 index 0000000000..936b9650af --- /dev/null +++ b/content/library/meta.json @@ -0,0 +1,7 @@ +{ + "title": "Library", + "pages": [ + "import", + "index" + ] +} diff --git a/pages/about.mdx b/content/marketing/about.mdx similarity index 100% rename from pages/about.mdx rename to content/marketing/about.mdx diff --git a/pages/careers.mdx b/content/marketing/careers.mdx similarity index 99% rename from pages/careers.mdx rename to content/marketing/careers.mdx index 0ae36d2cb1..211d365fba 100644 --- a/pages/careers.mdx +++ b/content/marketing/careers.mdx @@ -1,4 +1,5 @@ --- +title: Careers at Langfuse description: "Join the Langfuse team to build the leading open-source LLM engineering platform" --- diff --git a/pages/cn.mdx b/content/marketing/cn.mdx similarity index 100% rename from pages/cn.mdx rename to content/marketing/cn.mdx diff --git a/pages/community.mdx b/content/marketing/community.mdx similarity index 100% rename from pages/community.mdx rename to content/marketing/community.mdx diff --git a/pages/cookie-policy.mdx b/content/marketing/cookie-policy.mdx similarity index 100% rename from pages/cookie-policy.mdx rename to content/marketing/cookie-policy.mdx diff --git a/pages/enterprise.mdx b/content/marketing/enterprise.mdx similarity index 95% rename from pages/enterprise.mdx rename to content/marketing/enterprise.mdx index f57ba2dde3..307f171f74 100644 --- a/pages/enterprise.mdx +++ b/content/marketing/enterprise.mdx @@ -1,4 +1,5 @@ --- +title: Langfuse for Enterprise description: FAQ and deployment options for Langfuse in an enterprise environment. --- @@ -10,13 +11,13 @@ import { CredibilitySentence } from "@/components/credibilitySentence"; <CredibilitySentence style="list" /> -import { EnterpriseLogos } from "../components/EnterpriseLogos"; +import { EnterpriseLogos } from "@/components/EnterpriseLogos"; <EnterpriseLogos /> ## A complete toolbox to build enterprise LLM applications -Langfuse is a complete platform combining [[1] observability](/docs/observability/overview), [[2] prompt management](/docs/prompt-management/overview), [[3] evaluation](/docs/evaluation/overview), and much more to help teams collaboratively debug, analyze, and iterate on their LLM applications. +Langfuse is a complete platform combining [[1] observability](/docs/observability/overview), [[2] prompt management](/docs/prompt-management/overview), [[3] evaluation](/docs/evaluation/overview), and much more to help teams collaboratively debug, analyze, and iterate on their LLM applications. All platform features are natively integrated to accelerate the development workflow. **Langfuse is open, self-hostable, and extensible.** @@ -26,7 +27,7 @@ import { FeatureOverview } from "@/components/FeatureOverview"; <FeatureOverview /> -import { Button } from "../components/ui/button"; +import { Button } from "@/components/ui/button"; import EnterpriseCloudScale from "@/components-mdx/enterprise-cloud-scale.mdx"; @@ -50,15 +51,16 @@ We offer a range of packages and services to help you get started with Langfuse. - **Self-host Langfuse** for free or with an Enterprise Agreement [(see self-host licensing)](/pricing-self-host) More details: + - Langfuse can be procured through the [AWS Marketplace](https://aws.amazon.com/marketplace/seller-profile?id=seller-nmyz7ju7oafxu) or per invoice. - With an Enterprise Agreement, you get access to additional support, features to address your specific needs and compliance requirements. ## Don't take our word for it -import { CustomerCarousel } from "@/components/customers/CustomerCarousel"; +import { CustomerCarouselWrapper } from "@/components/customers/CustomerCarouselWrapper"; <div className="flex flex-col gap-4"> - <CustomerCarousel path="/users" showDots={true} loop={true} className="mt-6" /> + <CustomerCarouselWrapper showDots={true} loop={true} className="mt-6" /> </div> ## Let's Talk! @@ -87,35 +89,41 @@ export function TalkToUsButton() { ## Additional Resources ### Ways to experience the Product + - [10 minute video overview](/watch-demo) of all Langfuse features - [Test it yourself with our demo-application](/docs/demo) of the Langfuse platform - [Create an account on Langfuse Cloud](https://cloud.langfuse.com/) for free (no credit card required) - [Talk to Sales](/talk-to-us) to get a personalized demo ### Product + - [Why customers choose Langfuse](/why) - [Security and Compliance](/security) - about GDPR, HIPAA, SOC2 and ISO27001 compliance and [related FAQs](/security/security-faq) -- [Technical documentation](/docs) +- [Technical documentation](/docs) - [Changelog](/changelog) - [Roadmap](/docs/roadmap) ### Langfuse Cloud + - [Cloud Pricing](/pricing) - [Security and Compliance](/security) - includes information on GDPR, HIPAA, SOC2 and ISO27001 compliance ### Self-hosting - [Deployment Guide](/self-hosting) -- [Open Source Licensing](/open-source) +- [Open Source Licensing](/open-source) - [Comparison](/pricing-self-host) of Open Source and Enterprise version - [Langfuse Self-Hosting: EE](/self-hosting) [Terms and Conditions](/terms) ### Webinars + - [Traces as the core of the LLMOps workflow (webinar + slides)](/guides/videos/webinar-observability-llm-systems) - [Continuous Agent Evals with Langfuse and AWS Bedrock AgentCore](https://www.youtube.com/watch?v=api-Z4TfDvM) ### Resellers and managed Langfuse deployments + If you want an introduction to our partners, just let us know! + - [Shakudo](https://www.shakudo.io/partners) - managed Langfuse Enterprise self-hosted on behalf of customers on their VPC. - [GAO](https://www.gao-ai.com/) - our Partner in Japan & APAC that provides professional services, technical support, and payment in local currency in Japan. diff --git a/pages/find-us.mdx b/content/marketing/find-us.mdx similarity index 88% rename from pages/find-us.mdx rename to content/marketing/find-us.mdx index a1a6c84e18..cffe851d71 100644 --- a/pages/find-us.mdx +++ b/content/marketing/find-us.mdx @@ -16,7 +16,7 @@ Oranienburgerstr. 91 <br/> Germany <Frame className="my-10" fullWidth> - ![Langfuse Office Location](public/images/find-us.png) + ![Langfuse Office Location](/images/find-us.png) </Frame> ## Can't find us? diff --git a/pages/imprint.mdx b/content/marketing/imprint.mdx similarity index 100% rename from pages/imprint.mdx rename to content/marketing/imprint.mdx diff --git a/pages/jp.mdx b/content/marketing/jp.mdx similarity index 100% rename from pages/jp.mdx rename to content/marketing/jp.mdx diff --git a/pages/kr.mdx b/content/marketing/kr.mdx similarity index 100% rename from pages/kr.mdx rename to content/marketing/kr.mdx diff --git a/content/marketing/meta.json b/content/marketing/meta.json new file mode 100644 index 0000000000..6f2b7b6cab --- /dev/null +++ b/content/marketing/meta.json @@ -0,0 +1,27 @@ +{ + "title": "Marketing", + "pages": [ + "about", + "careers", + "cn", + "community", + "cookie-policy", + "enterprise", + "find-us", + "imprint", + "jp", + "kr", + "oss-friends", + "press", + "pricing", + "pricing-self-host", + "privacy", + "research", + "startups", + "support", + "talk-to-us", + "terms", + "watch-demo", + "wrapped" + ] +} diff --git a/pages/oss-friends.mdx b/content/marketing/oss-friends.mdx similarity index 98% rename from pages/oss-friends.mdx rename to content/marketing/oss-friends.mdx index bdfe16aff9..4f7df1df6c 100644 --- a/pages/oss-friends.mdx +++ b/content/marketing/oss-friends.mdx @@ -1,4 +1,5 @@ --- +title: Open Source Friends description: "We are proud to collaborate with a diverse group of partners to promote open-source software and the values of transparency, collaboration, and community that it represents." --- diff --git a/pages/press.mdx b/content/marketing/press.mdx similarity index 62% rename from pages/press.mdx rename to content/marketing/press.mdx index 6437cb1b33..8615464f3c 100644 --- a/pages/press.mdx +++ b/content/marketing/press.mdx @@ -1,13 +1,12 @@ --- +title: Press & Media description: Official press page for Langfuse — the open source LLM engineering platform. Latest news, company information, media assets, and press contacts. --- # Press & Media - Want to talk about press opportunities? Email clemens@langfuse.com and we'll be in touch shortly. To keep in touch with Langfuse, follow us on [Twitter](https://x.com/langfuse), [LinkedIn](https://linkedin.com/company/langfuse), [GitHub](https://github.com/langfuse), and [Discord](https://langfuse.com/discord). - ## Company Facts Langfuse is building the open source LLM engineering platform to help teams build production-grade LLM applications faster. The platform provides: @@ -17,8 +16,8 @@ Langfuse is building the open source LLM engineering platform to help teams buil - **Evaluations** — LLM-as-a-Judge evaluations, datasets, and structured evaluation processes - **Collaboration** — Shareable views, dashboards, and team collaboration features - ### Company + - **Founded:** 2023 - **Headquarters:** Berlin, Germany (Product & Engineering) and San Francisco, CA (Marketing & Sales) - **Team Size:** 14+ full-time employees @@ -26,10 +25,12 @@ Langfuse is building the open source LLM engineering platform to help teams buil - **Public Company Handbook:** [langfuse.com/handbook](/handbook/chapters/story) ### Funding + - **$4M Seed Round** (November 2023) - **Investors:** Lightspeed Venture Partners, General Catalyst (La Famiglia), Y Combinator, plus angels and operators in ML, Open Source, and Developer Tools ### Most Important Links + - **[Video Demo](/watch-demo)** - **Company Handbook:** [langfuse.com/handbook](/handbook/chapters/story) - **Changelog:** [langfuse.com/changelog](/changelog) @@ -52,7 +53,6 @@ We’re building an [integrated](/integrations) and [open](/handbook/chapters/op We are independent, vendor-neutral, and available as cloud or self-hosted at production scale. - ## Why do customers choose Langfuse? Customers choose Langfuse because we are... @@ -76,9 +76,6 @@ Companies who trust Langfuse: <EnterpriseLogos /> - - - ## Key Milestones A more detailed timeline is available in our [handbook](/handbook/chapters/story). @@ -106,63 +103,60 @@ A more detailed timeline is available in our [handbook](/handbook/chapters/story - **August:** [Featured in Handelsblatt](https://www.handelsblatt.com/technik/ki/langfuse-dieses-start-up-analysiert-wie-gut-ki-agenten-wirklich-sind/100139548.html) covering the Langfuse story and journey - **October:** Launch Week 4 with advanced filtering, team collaboration features, and Mixpanel integration -</Steps> - +</Steps> ## The Team -| Name | Role | Social Links | -|------|------|--------------| -| **Marc Klingen** | Co-Founder & CEO | [Twitter](https://twitter.com/marcklingen)<br/>[LinkedIn](https://linkedin.com/in/marcklingen)<br/>[GitHub](https://github.com/marcklingen) | -| **Max Deichmann** | Co-Founder & CTO | [Twitter](https://twitter.com/maxdeichmann)<br/>[LinkedIn](https://linkedin.com/in/maxdeichmann)<br/>[GitHub](https://github.com/maxdeichmann) | -| **Clemens Rawert** | Co-Founder & COO | [Twitter](https://twitter.com/rawert)<br/>[LinkedIn](https://linkedin.com/in/rawert)<br/>[GitHub](https://github.com/clemra) | -| **Marlies Mayerhofer** | Founding Engineer | [Twitter](https://x.com/marliessophie)<br/>[LinkedIn](https://www.linkedin.com/in/marlies-mayerhofer/)<br/>[GitHub](https://github.com/marliessophie) | -| **Hassieb Pakzad** | Founding Engineer | [Twitter](https://x.com/hassiebpakzad)<br/>[LinkedIn](https://www.linkedin.com/in/hassieb/)<br/>[GitHub](https://github.com/hassiebp) | -| **Steffen Schmitz** | Backend Engineer | [LinkedIn](https://www.linkedin.com/in/steffenschmitz/)<br/>[GitHub](https://github.com/Steffen911) | -| **Jannik Maierhöfer** | Growth Engineer | [Twitter](https://x.com/jmaierhoefer)<br/>[LinkedIn](https://www.linkedin.com/in/maierhoefer/)<br/>[GitHub](https://github.com/jannikmaierhoefer) | -| **Felix Krauth** | Growth | [Twitter](https://x.com/felixkrrr)<br/>[LinkedIn](https://www.linkedin.com/in/krauth/)<br/>[GitHub](https://github.com/felixkrrr) | -| **Akio Nuernberger** | Founding GTM Engineer | [Twitter](https://x.com/AkioNuernberger)<br/>[LinkedIn](https://www.linkedin.com/in/akio-nuernberger/) | -| **Nimar Blume** | Product Engineer | [Twitter](https://x.com/nimarblu)<br/>[LinkedIn](https://www.linkedin.com/in/nimar/)<br/>[GitHub](https://github.com/nimarb) | -| **Valeriy Meleshkin** | Backend Engineer | [LinkedIn](https://www.linkedin.com/in/valeriy-meleshkin-5610ab58)<br/>[GitHub](https://github.com/sumerman) | -| **Lotte Verheyden** | DevRel | [LinkedIn](https://www.linkedin.com/in/lotteverheyden/)<br/>[GitHub](https://github.com/Lotte-Verheyden) | -| **Leonard Wolters** | Ops | [LinkedIn](https://www.linkedin.com/in/leonardwolters/)<br/>[GitHub](https://github.com/leonardwolters) | +| Name | Role | Social Links | +| ---------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Marc Klingen** | Co-Founder & CEO | [Twitter](https://twitter.com/marcklingen)<br/>[LinkedIn](https://linkedin.com/in/marcklingen)<br/>[GitHub](https://github.com/marcklingen) | +| **Max Deichmann** | Co-Founder & CTO | [Twitter](https://twitter.com/maxdeichmann)<br/>[LinkedIn](https://linkedin.com/in/maxdeichmann)<br/>[GitHub](https://github.com/maxdeichmann) | +| **Clemens Rawert** | Co-Founder & COO | [Twitter](https://twitter.com/rawert)<br/>[LinkedIn](https://linkedin.com/in/rawert)<br/>[GitHub](https://github.com/clemra) | +| **Marlies Mayerhofer** | Founding Engineer | [Twitter](https://x.com/marliessophie)<br/>[LinkedIn](https://www.linkedin.com/in/marlies-mayerhofer/)<br/>[GitHub](https://github.com/marliessophie) | +| **Hassieb Pakzad** | Founding Engineer | [Twitter](https://x.com/hassiebpakzad)<br/>[LinkedIn](https://www.linkedin.com/in/hassieb/)<br/>[GitHub](https://github.com/hassiebp) | +| **Steffen Schmitz** | Backend Engineer | [LinkedIn](https://www.linkedin.com/in/steffenschmitz/)<br/>[GitHub](https://github.com/Steffen911) | +| **Jannik Maierhöfer** | Growth Engineer | [Twitter](https://x.com/jmaierhoefer)<br/>[LinkedIn](https://www.linkedin.com/in/maierhoefer/)<br/>[GitHub](https://github.com/jannikmaierhoefer) | +| **Felix Krauth** | Growth | [Twitter](https://x.com/felixkrrr)<br/>[LinkedIn](https://www.linkedin.com/in/krauth/)<br/>[GitHub](https://github.com/felixkrrr) | +| **Akio Nuernberger** | Founding GTM Engineer | [Twitter](https://x.com/AkioNuernberger)<br/>[LinkedIn](https://www.linkedin.com/in/akio-nuernberger/) | +| **Nimar Blume** | Product Engineer | [Twitter](https://x.com/nimarblu)<br/>[LinkedIn](https://www.linkedin.com/in/nimar/)<br/>[GitHub](https://github.com/nimarb) | +| **Valeriy Meleshkin** | Backend Engineer | [LinkedIn](https://www.linkedin.com/in/valeriy-meleshkin-5610ab58)<br/>[GitHub](https://github.com/sumerman) | +| **Lotte Verheyden** | DevRel | [LinkedIn](https://www.linkedin.com/in/lotteverheyden/)<br/>[GitHub](https://github.com/Lotte-Verheyden) | +| **Leonard Wolters** | Ops | [LinkedIn](https://www.linkedin.com/in/leonardwolters/)<br/>[GitHub](https://github.com/leonardwolters) | ## Media Assets All logos are available for download in both SVG (vector) and PNG (raster) formats. -| Asset | PNG | SVG | Notes | -|-------|-----|-----|-------| -| **Full Color Logo** | [Download](/langfuse_logo.png) | [Download](/langfuse_logo.svg) | Primary brand mark for light backgrounds | -| **White Logo** | [Download](/langfuse_logo_white.png) | [Download](/langfuse_logo_white.svg) | For dark backgrounds | -| **Icon Only** | [Download](/langfuse_icon.png) | [Download](/langfuse_icon.svg) | Compact icon without wordmark | - +| Asset | PNG | SVG | Notes | +| ------------------- | ------------------------------------ | ------------------------------------ | ---------------------------------------- | +| **Full Color Logo** | [Download](/langfuse_logo.png) | [Download](/langfuse_logo.svg) | Primary brand mark for light backgrounds | +| **White Logo** | [Download](/langfuse_logo_white.png) | [Download](/langfuse_logo_white.svg) | For dark backgrounds | +| **Icon Only** | [Download](/langfuse_icon.png) | [Download](/langfuse_icon.svg) | Compact icon without wordmark | ### 2023: Founders during Y Combinator W23 <Frame className="my-10" fullWidth> - ![Founders during Y Combinator W23 batch in San Francisco](/images/handbook/story/2023_founders.jpeg) + ![Founders during Y Combinator W23 batch in San + Francisco](/images/handbook/story/2023_founders.jpeg) </Frame> ### 2025: Team Offsite in Portugal <Frame className="my-10" fullWidth> - ![Team offsite to Portugal in 2025](/images/handbook/story/2025_team_offsite.jpg) + ![Team offsite to Portugal in + 2025](/images/handbook/story/2025_team_offsite.jpg) </Frame> - ### 2025: Founder team <Frame className="my-10" fullWidth> ![Founder team in 2025](/images/press/2025-founders.jpg) </Frame> - <Frame className="my-10" fullWidth> ![Founder team in 2025](/images/press/2025-founders-triptychon.jpg) </Frame> - <div className="flex flex-col md:flex-row gap-8 my-10"> <div className="flex-1"> <h3 className="text-lg font-semibold mb-4">2025: Clemens</h3> @@ -191,7 +185,6 @@ All logos are available for download in both SVG (vector) and PNG (raster) forma Learn how leading companies use Langfuse to build production-grade AI applications. -import { CustomerIndex } from "@/components/customers/CustomerIndex"; - -<CustomerIndex path="/users" /> +import { CustomerIndexWrapper } from "@/components/customers/CustomerIndexWrapper"; +<CustomerIndexWrapper path="/users" /> diff --git a/pages/pricing-self-host.mdx b/content/marketing/pricing-self-host.mdx similarity index 89% rename from pages/pricing-self-host.mdx rename to content/marketing/pricing-self-host.mdx index c9aad2b19e..aca6b043fb 100644 --- a/pages/pricing-self-host.mdx +++ b/content/marketing/pricing-self-host.mdx @@ -1,4 +1,5 @@ --- +title: Self-Hosted Pricing description: Simple pricing for projects of all sizes. Get started on our Hobby plan without a credit card. --- diff --git a/pages/pricing.mdx b/content/marketing/pricing.mdx similarity index 93% rename from pages/pricing.mdx rename to content/marketing/pricing.mdx index 539d9bf706..cd8c4b4533 100644 --- a/pages/pricing.mdx +++ b/content/marketing/pricing.mdx @@ -1,4 +1,5 @@ --- +title: Pricing description: Simple pricing for projects of all sizes. Get started on our Hobby plan without a credit card. --- diff --git a/pages/privacy.mdx b/content/marketing/privacy.mdx similarity index 100% rename from pages/privacy.mdx rename to content/marketing/privacy.mdx diff --git a/pages/research.mdx b/content/marketing/research.mdx similarity index 100% rename from pages/research.mdx rename to content/marketing/research.mdx diff --git a/pages/startups.mdx b/content/marketing/startups.mdx similarity index 100% rename from pages/startups.mdx rename to content/marketing/startups.mdx diff --git a/pages/support.mdx b/content/marketing/support.mdx similarity index 100% rename from pages/support.mdx rename to content/marketing/support.mdx diff --git a/pages/talk-to-us.mdx b/content/marketing/talk-to-us.mdx similarity index 70% rename from pages/talk-to-us.mdx rename to content/marketing/talk-to-us.mdx index e26816fca5..1e0e3fb3a3 100644 --- a/pages/talk-to-us.mdx +++ b/content/marketing/talk-to-us.mdx @@ -3,6 +3,6 @@ title: "Talk to us" description: "Talk to founders to learn more about how Langfuse can help." --- -import { Demo } from "../components/watchOrBookDemo"; +import { Demo } from "@/components/watchOrBookDemo"; <Demo page="talk-to-us" /> diff --git a/pages/terms.mdx b/content/marketing/terms.mdx similarity index 100% rename from pages/terms.mdx rename to content/marketing/terms.mdx diff --git a/pages/watch-demo.mdx b/content/marketing/watch-demo.mdx similarity index 72% rename from pages/watch-demo.mdx rename to content/marketing/watch-demo.mdx index 83c11e0bbc..8539acb134 100644 --- a/pages/watch-demo.mdx +++ b/content/marketing/watch-demo.mdx @@ -3,6 +3,6 @@ title: "Walkthroughs" description: "Discover Langfuse yourself through our resources and walkthroughs." --- -import { Demo } from "../components/watchOrBookDemo"; +import { Demo } from "@/components/watchOrBookDemo"; <Demo page="watch-demo" /> diff --git a/pages/wrapped.mdx b/content/marketing/wrapped.mdx similarity index 82% rename from pages/wrapped.mdx rename to content/marketing/wrapped.mdx index 90e348db12..b10a089d99 100644 --- a/pages/wrapped.mdx +++ b/content/marketing/wrapped.mdx @@ -3,6 +3,6 @@ title: "Langfuse Wrapped 2025 - Year in Review" description: "Traces, evals, prompt management and metrics to debug and improve your LLM application. Integrates with Langchain, OpenAI, LlamaIndex, LiteLLM, and more." --- -import { Wrapped } from "../components/wrapped"; +import { Wrapped } from "@/components/wrapped"; <Wrapped /> \ No newline at end of file diff --git a/pages/security/ai-features.mdx b/content/security/ai-features.mdx similarity index 100% rename from pages/security/ai-features.mdx rename to content/security/ai-features.mdx diff --git a/pages/security/auth.mdx b/content/security/auth.mdx similarity index 100% rename from pages/security/auth.mdx rename to content/security/auth.mdx diff --git a/pages/security/compliance-faq.mdx b/content/security/compliance-faq.mdx similarity index 100% rename from pages/security/compliance-faq.mdx rename to content/security/compliance-faq.mdx diff --git a/pages/security/data-regions.mdx b/content/security/data-regions.mdx similarity index 99% rename from pages/security/data-regions.mdx rename to content/security/data-regions.mdx index a0dae1b530..4459073eaf 100644 --- a/pages/security/data-regions.mdx +++ b/content/security/data-regions.mdx @@ -1,4 +1,5 @@ --- +title: Data Regions & Availability description: Details on Langfuse Cloud data regions, high availability, and the self-hosted option. --- diff --git a/pages/security/dependencies.mdx b/content/security/dependencies.mdx similarity index 97% rename from pages/security/dependencies.mdx rename to content/security/dependencies.mdx index 57d2c69ce2..5e681925e4 100644 --- a/pages/security/dependencies.mdx +++ b/content/security/dependencies.mdx @@ -1,4 +1,5 @@ --- +title: Software Dependencies & Licensing description: Information on Langfuse's software dependencies, licensing, and data subprocessors. --- diff --git a/pages/security/dpa.mdx b/content/security/dpa.mdx similarity index 99% rename from pages/security/dpa.mdx rename to content/security/dpa.mdx index 672d8940fc..218eafaddc 100644 --- a/pages/security/dpa.mdx +++ b/content/security/dpa.mdx @@ -1,3 +1,8 @@ +--- +title: Langfuse Data Processing Agreement (DPA) +description: Data Processing Agreement for Langfuse services. +--- + # Langfuse Data Processing Agreement (DPA) **Latest revision:** October 17th, 2025 | **<a href="/api/md-to-pdf?url=https://langfuse.com/security/dpa.md" target="_blank">download as PDF</a>** diff --git a/pages/security/encryption.mdx b/content/security/encryption.mdx similarity index 98% rename from pages/security/encryption.mdx rename to content/security/encryption.mdx index 6a5d958cac..fb998bbcd8 100644 --- a/pages/security/encryption.mdx +++ b/content/security/encryption.mdx @@ -1,4 +1,5 @@ --- +title: Encryption description: Details on how Langfuse Cloud encrypts data both in transit and at rest. --- diff --git a/pages/security/gdpr.mdx b/content/security/gdpr.mdx similarity index 98% rename from pages/security/gdpr.mdx rename to content/security/gdpr.mdx index 9389263215..c56be9f793 100644 --- a/pages/security/gdpr.mdx +++ b/content/security/gdpr.mdx @@ -1,4 +1,5 @@ --- +title: GDPR Compliance description: Information on Langfuse's GDPR compliance, Data Processing Agreement (DPA), and data subject rights. --- diff --git a/pages/security/hipaa.mdx b/content/security/hipaa.mdx similarity index 99% rename from pages/security/hipaa.mdx rename to content/security/hipaa.mdx index 0dc5a7bb2f..07c0877695 100644 --- a/pages/security/hipaa.mdx +++ b/content/security/hipaa.mdx @@ -1,4 +1,5 @@ --- +title: HIPAA Compliance & BAA description: Information about Langfuse's HIPAA compliance and Business Associate Agreement (BAA). --- diff --git a/pages/security/incident-and-breach.mdx b/content/security/incident-and-breach.mdx similarity index 91% rename from pages/security/incident-and-breach.mdx rename to content/security/incident-and-breach.mdx index 496d206366..0d10626b06 100644 --- a/pages/security/incident-and-breach.mdx +++ b/content/security/incident-and-breach.mdx @@ -1,3 +1,8 @@ +--- +title: Incident & Breach +description: Incident response and breach notification at Langfuse. +--- + # Incident & Breach ## Incident Response diff --git a/pages/security/index.mdx b/content/security/index.mdx similarity index 98% rename from pages/security/index.mdx rename to content/security/index.mdx index 3c7b61c1c9..d78c999237 100644 --- a/pages/security/index.mdx +++ b/content/security/index.mdx @@ -1,4 +1,5 @@ --- +title: Security & Compliance Overview description: Overview of Langfuse's commitment to data privacy, security, and compliance, including links to detailed pages on specific measures and certifications. --- diff --git a/pages/security/iso27001.mdx b/content/security/iso27001.mdx similarity index 96% rename from pages/security/iso27001.mdx rename to content/security/iso27001.mdx index 28b8bf0312..5acda64c85 100644 --- a/pages/security/iso27001.mdx +++ b/content/security/iso27001.mdx @@ -1,4 +1,5 @@ --- +title: ISO 27001 Compliance description: Information about Langfuse's ISO 27001 certification and how to request the certificate. --- diff --git a/pages/security/manage-personal-data.mdx b/content/security/manage-personal-data.mdx similarity index 83% rename from pages/security/manage-personal-data.mdx rename to content/security/manage-personal-data.mdx index dbab98ccc5..8da6ca10ae 100644 --- a/pages/security/manage-personal-data.mdx +++ b/content/security/manage-personal-data.mdx @@ -1,3 +1,8 @@ +--- +title: Managing Personal Data +description: How to manage personal data processed with Langfuse. +--- + # Managing Personal Data It is up to you to decide which kind of personal data you want to process with Langfuse. diff --git a/content/security/meta.json b/content/security/meta.json new file mode 100644 index 0000000000..ee9a57651f --- /dev/null +++ b/content/security/meta.json @@ -0,0 +1,37 @@ +{ + "title": "Security", + "pages": [ + "index", + "---Security---", + "auth", + "[Audit Logs ↗](/docs/administration/audit-logs)", + "ai-features", + "encryption", + "data-regions", + "networking", + "dependencies", + "incident-and-breach", + "responsible-disclosure", + "whistleblowing", + "penetration-testing", + "vulnerability-management", + "security-faq", + "toms", + "---Compliance---", + "policies", + "soc2", + "iso27001", + "hipaa", + "compliance-faq", + "---Privacy---", + "dpa", + "subprocessors", + "gdpr", + "manage-personal-data", + "privacy-faq", + "---Legal---", + "[Terms of Service ↗](/terms)", + "[Privacy Policy ↗](/privacy)", + "nda" + ] +} diff --git a/pages/security/nda.mdx b/content/security/nda.mdx similarity index 99% rename from pages/security/nda.mdx rename to content/security/nda.mdx index f37b37394e..58a79bc0af 100644 --- a/pages/security/nda.mdx +++ b/content/security/nda.mdx @@ -1,4 +1,5 @@ --- +title: NDA (Non Disclosure Agreement) description: Request a NDA (Non Disclosure Agreement) with Langfuse --- diff --git a/pages/security/networking.mdx b/content/security/networking.mdx similarity index 97% rename from pages/security/networking.mdx rename to content/security/networking.mdx index d0d5782dbe..cc85dc46c8 100644 --- a/pages/security/networking.mdx +++ b/content/security/networking.mdx @@ -1,4 +1,5 @@ --- +title: Networking description: Networking details for Langfuse Cloud. --- diff --git a/pages/security/penetration-testing.mdx b/content/security/penetration-testing.mdx similarity index 97% rename from pages/security/penetration-testing.mdx rename to content/security/penetration-testing.mdx index c47374de45..2a77e2eaf5 100644 --- a/pages/security/penetration-testing.mdx +++ b/content/security/penetration-testing.mdx @@ -1,4 +1,5 @@ --- +title: Penetration Testing description: Information about Langfuse's annual external penetration testing program. --- diff --git a/pages/security/policies.mdx b/content/security/policies.mdx similarity index 87% rename from pages/security/policies.mdx rename to content/security/policies.mdx index efb94635da..2397c8a743 100644 --- a/pages/security/policies.mdx +++ b/content/security/policies.mdx @@ -1,3 +1,8 @@ +--- +title: Policies +description: Internal policies underlying Langfuse compliance program. +--- + # Policies Our compliance program is based on the following internal policies: diff --git a/pages/security/privacy-faq.mdx b/content/security/privacy-faq.mdx similarity index 100% rename from pages/security/privacy-faq.mdx rename to content/security/privacy-faq.mdx diff --git a/pages/security/responsible-disclosure.mdx b/content/security/responsible-disclosure.mdx similarity index 99% rename from pages/security/responsible-disclosure.mdx rename to content/security/responsible-disclosure.mdx index e71fb9002b..15dd148465 100644 --- a/pages/security/responsible-disclosure.mdx +++ b/content/security/responsible-disclosure.mdx @@ -1,4 +1,5 @@ --- +title: Responsible Disclosure description: How to responsibly disclose security vulnerabilities found in Langfuse. --- diff --git a/pages/security/security-faq.mdx b/content/security/security-faq.mdx similarity index 100% rename from pages/security/security-faq.mdx rename to content/security/security-faq.mdx diff --git a/pages/security/soc2.mdx b/content/security/soc2.mdx similarity index 94% rename from pages/security/soc2.mdx rename to content/security/soc2.mdx index 50ed1b1df8..b8fb8724c2 100644 --- a/pages/security/soc2.mdx +++ b/content/security/soc2.mdx @@ -1,4 +1,5 @@ --- +title: SOC 2 Type II Compliance description: Information about Langfuse's SOC 2 Type II certification and how to request the report. --- diff --git a/pages/security/subprocessors.mdx b/content/security/subprocessors.mdx similarity index 100% rename from pages/security/subprocessors.mdx rename to content/security/subprocessors.mdx diff --git a/pages/security/toms.mdx b/content/security/toms.mdx similarity index 100% rename from pages/security/toms.mdx rename to content/security/toms.mdx diff --git a/pages/security/vulnerability-management.mdx b/content/security/vulnerability-management.mdx similarity index 94% rename from pages/security/vulnerability-management.mdx rename to content/security/vulnerability-management.mdx index dc5ffe6b68..a6f5f11ed1 100644 --- a/pages/security/vulnerability-management.mdx +++ b/content/security/vulnerability-management.mdx @@ -1,3 +1,8 @@ +--- +title: Vulnerability Management +description: Langfuse vulnerability management program and practices. +--- + # Vulnerability Management Langfuse is committed to maintaining the security of its systems and protecting customer data. Our vulnerability management program is a key component of this commitment, designed to identify, assess, prioritize, and remediate security vulnerabilities in a timely manner. diff --git a/pages/security/whistleblowing.mdx b/content/security/whistleblowing.mdx similarity index 97% rename from pages/security/whistleblowing.mdx rename to content/security/whistleblowing.mdx index 0e67becc63..57a610749d 100644 --- a/pages/security/whistleblowing.mdx +++ b/content/security/whistleblowing.mdx @@ -1,4 +1,5 @@ --- +title: Whistleblowing description: How employees and third parties can report breaches or misconduct related to Langfuse. --- diff --git a/pages/self-hosting/administration/automated-access-provisioning.mdx b/content/self-hosting/administration/automated-access-provisioning.mdx similarity index 100% rename from pages/self-hosting/administration/automated-access-provisioning.mdx rename to content/self-hosting/administration/automated-access-provisioning.mdx diff --git a/pages/self-hosting/administration/headless-initialization.mdx b/content/self-hosting/administration/headless-initialization.mdx similarity index 100% rename from pages/self-hosting/administration/headless-initialization.mdx rename to content/self-hosting/administration/headless-initialization.mdx diff --git a/pages/self-hosting/administration/index.mdx b/content/self-hosting/administration/index.mdx similarity index 100% rename from pages/self-hosting/administration/index.mdx rename to content/self-hosting/administration/index.mdx diff --git a/pages/self-hosting/administration/instance-management-api.mdx b/content/self-hosting/administration/instance-management-api.mdx similarity index 100% rename from pages/self-hosting/administration/instance-management-api.mdx rename to content/self-hosting/administration/instance-management-api.mdx diff --git a/content/self-hosting/administration/meta.json b/content/self-hosting/administration/meta.json new file mode 100644 index 0000000000..a05e7440ac --- /dev/null +++ b/content/self-hosting/administration/meta.json @@ -0,0 +1,11 @@ +{ + "title": "Administration", + "pages": [ + "index", + "automated-access-provisioning", + "headless-initialization", + "organization-creators", + "ui-customization", + "instance-management-api" + ] +} diff --git a/pages/self-hosting/administration/organization-creators.mdx b/content/self-hosting/administration/organization-creators.mdx similarity index 100% rename from pages/self-hosting/administration/organization-creators.mdx rename to content/self-hosting/administration/organization-creators.mdx diff --git a/pages/self-hosting/administration/ui-customization.mdx b/content/self-hosting/administration/ui-customization.mdx similarity index 100% rename from pages/self-hosting/administration/ui-customization.mdx rename to content/self-hosting/administration/ui-customization.mdx diff --git a/pages/self-hosting/configuration/backups.mdx b/content/self-hosting/configuration/backups.mdx similarity index 100% rename from pages/self-hosting/configuration/backups.mdx rename to content/self-hosting/configuration/backups.mdx diff --git a/pages/self-hosting/configuration/caching.mdx b/content/self-hosting/configuration/caching.mdx similarity index 100% rename from pages/self-hosting/configuration/caching.mdx rename to content/self-hosting/configuration/caching.mdx diff --git a/pages/self-hosting/configuration/custom-base-path.mdx b/content/self-hosting/configuration/custom-base-path.mdx similarity index 100% rename from pages/self-hosting/configuration/custom-base-path.mdx rename to content/self-hosting/configuration/custom-base-path.mdx diff --git a/pages/self-hosting/configuration/encryption.mdx b/content/self-hosting/configuration/encryption.mdx similarity index 100% rename from pages/self-hosting/configuration/encryption.mdx rename to content/self-hosting/configuration/encryption.mdx diff --git a/pages/self-hosting/configuration/health-readiness-endpoints.mdx b/content/self-hosting/configuration/health-readiness-endpoints.mdx similarity index 100% rename from pages/self-hosting/configuration/health-readiness-endpoints.mdx rename to content/self-hosting/configuration/health-readiness-endpoints.mdx diff --git a/pages/self-hosting/configuration/index.mdx b/content/self-hosting/configuration/index.mdx similarity index 100% rename from pages/self-hosting/configuration/index.mdx rename to content/self-hosting/configuration/index.mdx diff --git a/content/self-hosting/configuration/meta.json b/content/self-hosting/configuration/meta.json new file mode 100644 index 0000000000..5167183c78 --- /dev/null +++ b/content/self-hosting/configuration/meta.json @@ -0,0 +1,17 @@ +{ + "title": "Configuration", + "pages": [ + "import", + "---Essential---", + "index", + "scaling", + "backups", + "---Advanced---", + "caching", + "custom-base-path", + "encryption", + "health-readiness-endpoints", + "observability", + "transactional-emails" + ] +} diff --git a/pages/self-hosting/configuration/observability.mdx b/content/self-hosting/configuration/observability.mdx similarity index 100% rename from pages/self-hosting/configuration/observability.mdx rename to content/self-hosting/configuration/observability.mdx diff --git a/pages/self-hosting/configuration/scaling.mdx b/content/self-hosting/configuration/scaling.mdx similarity index 100% rename from pages/self-hosting/configuration/scaling.mdx rename to content/self-hosting/configuration/scaling.mdx diff --git a/pages/self-hosting/configuration/transactional-emails.mdx b/content/self-hosting/configuration/transactional-emails.mdx similarity index 100% rename from pages/self-hosting/configuration/transactional-emails.mdx rename to content/self-hosting/configuration/transactional-emails.mdx diff --git a/pages/self-hosting/deployment/aws.mdx b/content/self-hosting/deployment/aws.mdx similarity index 100% rename from pages/self-hosting/deployment/aws.mdx rename to content/self-hosting/deployment/aws.mdx diff --git a/pages/self-hosting/deployment/azure.mdx b/content/self-hosting/deployment/azure.mdx similarity index 100% rename from pages/self-hosting/deployment/azure.mdx rename to content/self-hosting/deployment/azure.mdx diff --git a/pages/self-hosting/deployment/docker-compose.mdx b/content/self-hosting/deployment/docker-compose.mdx similarity index 100% rename from pages/self-hosting/deployment/docker-compose.mdx rename to content/self-hosting/deployment/docker-compose.mdx diff --git a/pages/self-hosting/deployment/gcp.mdx b/content/self-hosting/deployment/gcp.mdx similarity index 100% rename from pages/self-hosting/deployment/gcp.mdx rename to content/self-hosting/deployment/gcp.mdx diff --git a/pages/self-hosting/deployment/infrastructure/blobstorage.mdx b/content/self-hosting/deployment/infrastructure/blobstorage.mdx similarity index 100% rename from pages/self-hosting/deployment/infrastructure/blobstorage.mdx rename to content/self-hosting/deployment/infrastructure/blobstorage.mdx diff --git a/pages/self-hosting/deployment/infrastructure/cache.mdx b/content/self-hosting/deployment/infrastructure/cache.mdx similarity index 100% rename from pages/self-hosting/deployment/infrastructure/cache.mdx rename to content/self-hosting/deployment/infrastructure/cache.mdx diff --git a/pages/self-hosting/deployment/infrastructure/clickhouse.mdx b/content/self-hosting/deployment/infrastructure/clickhouse.mdx similarity index 100% rename from pages/self-hosting/deployment/infrastructure/clickhouse.mdx rename to content/self-hosting/deployment/infrastructure/clickhouse.mdx diff --git a/pages/self-hosting/deployment/infrastructure/containers.mdx b/content/self-hosting/deployment/infrastructure/containers.mdx similarity index 100% rename from pages/self-hosting/deployment/infrastructure/containers.mdx rename to content/self-hosting/deployment/infrastructure/containers.mdx diff --git a/pages/self-hosting/deployment/infrastructure/llm-api.mdx b/content/self-hosting/deployment/infrastructure/llm-api.mdx similarity index 100% rename from pages/self-hosting/deployment/infrastructure/llm-api.mdx rename to content/self-hosting/deployment/infrastructure/llm-api.mdx diff --git a/content/self-hosting/deployment/infrastructure/meta.json b/content/self-hosting/deployment/infrastructure/meta.json new file mode 100644 index 0000000000..1d82f7e2d4 --- /dev/null +++ b/content/self-hosting/deployment/infrastructure/meta.json @@ -0,0 +1,12 @@ +{ + "title": "Infrastructure", + "pages": [ + "[Architecture Overview ↗](/self-hosting#architecture)", + "containers", + "clickhouse", + "cache", + "blobstorage", + "postgres", + "llm-api" + ] +} diff --git a/pages/self-hosting/deployment/infrastructure/postgres.mdx b/content/self-hosting/deployment/infrastructure/postgres.mdx similarity index 100% rename from pages/self-hosting/deployment/infrastructure/postgres.mdx rename to content/self-hosting/deployment/infrastructure/postgres.mdx diff --git a/pages/self-hosting/deployment/kubernetes-helm.mdx b/content/self-hosting/deployment/kubernetes-helm.mdx similarity index 100% rename from pages/self-hosting/deployment/kubernetes-helm.mdx rename to content/self-hosting/deployment/kubernetes-helm.mdx diff --git a/content/self-hosting/deployment/meta.json b/content/self-hosting/deployment/meta.json new file mode 100644 index 0000000000..90865198f9 --- /dev/null +++ b/content/self-hosting/deployment/meta.json @@ -0,0 +1,12 @@ +{ + "title": "Deployment", + "pages": [ + "docker-compose", + "kubernetes-helm", + "aws", + "azure", + "gcp", + "railway", + "infrastructure" + ] +} diff --git a/pages/self-hosting/deployment/railway.mdx b/content/self-hosting/deployment/railway.mdx similarity index 100% rename from pages/self-hosting/deployment/railway.mdx rename to content/self-hosting/deployment/railway.mdx diff --git a/pages/self-hosting/index.mdx b/content/self-hosting/index.mdx similarity index 100% rename from pages/self-hosting/index.mdx rename to content/self-hosting/index.mdx diff --git a/pages/self-hosting/license-key.mdx b/content/self-hosting/license-key.mdx similarity index 100% rename from pages/self-hosting/license-key.mdx rename to content/self-hosting/license-key.mdx diff --git a/content/self-hosting/meta.json b/content/self-hosting/meta.json new file mode 100644 index 0000000000..74a4c8cbe3 --- /dev/null +++ b/content/self-hosting/meta.json @@ -0,0 +1,15 @@ +{ + "title": "Self Hosting", + "pages": [ + "import", + "index", + "license-key", + "troubleshooting-and-faq", + "configuration", + "deployment", + "security", + "administration", + "upgrade", + "v2" + ] +} diff --git a/pages/self-hosting/security/authentication-and-sso.mdx b/content/self-hosting/security/authentication-and-sso.mdx similarity index 100% rename from pages/self-hosting/security/authentication-and-sso.mdx rename to content/self-hosting/security/authentication-and-sso.mdx diff --git a/pages/self-hosting/security/data-masking.mdx b/content/self-hosting/security/data-masking.mdx similarity index 100% rename from pages/self-hosting/security/data-masking.mdx rename to content/self-hosting/security/data-masking.mdx diff --git a/pages/self-hosting/security/deployment-strategies.mdx b/content/self-hosting/security/deployment-strategies.mdx similarity index 100% rename from pages/self-hosting/security/deployment-strategies.mdx rename to content/self-hosting/security/deployment-strategies.mdx diff --git a/content/self-hosting/security/meta.json b/content/self-hosting/security/meta.json new file mode 100644 index 0000000000..d87f6bb912 --- /dev/null +++ b/content/self-hosting/security/meta.json @@ -0,0 +1,11 @@ +{ + "title": "Security", + "pages": [ + "authentication-and-sso", + "deployment-strategies", + "networking", + "data-masking", + "[RBAC ↗ (main docs)](/docs/administration/rbac)", + "[Data Retention ↗ (main docs)](/docs/administration/data-retention)" + ] +} diff --git a/pages/self-hosting/security/networking.mdx b/content/self-hosting/security/networking.mdx similarity index 100% rename from pages/self-hosting/security/networking.mdx rename to content/self-hosting/security/networking.mdx diff --git a/pages/self-hosting/troubleshooting-and-faq.mdx b/content/self-hosting/troubleshooting-and-faq.mdx similarity index 100% rename from pages/self-hosting/troubleshooting-and-faq.mdx rename to content/self-hosting/troubleshooting-and-faq.mdx diff --git a/pages/self-hosting/upgrade/background-migrations.mdx b/content/self-hosting/upgrade/background-migrations.mdx similarity index 100% rename from pages/self-hosting/upgrade/background-migrations.mdx rename to content/self-hosting/upgrade/background-migrations.mdx diff --git a/pages/self-hosting/upgrade/index.mdx b/content/self-hosting/upgrade/index.mdx similarity index 100% rename from pages/self-hosting/upgrade/index.mdx rename to content/self-hosting/upgrade/index.mdx diff --git a/content/self-hosting/upgrade/meta.json b/content/self-hosting/upgrade/meta.json new file mode 100644 index 0000000000..2ca234141b --- /dev/null +++ b/content/self-hosting/upgrade/meta.json @@ -0,0 +1,10 @@ +{ + "title": "Upgrade", + "pages": [ + "index", + "versioning", + "background-migrations", + "upgrade-guides", + "release-notes" + ] +} diff --git a/content/self-hosting/upgrade/release-notes/meta.json b/content/self-hosting/upgrade/release-notes/meta.json new file mode 100644 index 0000000000..828a89fecb --- /dev/null +++ b/content/self-hosting/upgrade/release-notes/meta.json @@ -0,0 +1,3 @@ +{ + "title": "Release Notes" +} diff --git a/content/self-hosting/upgrade/upgrade-guides/meta.json b/content/self-hosting/upgrade/upgrade-guides/meta.json new file mode 100644 index 0000000000..acac8ac96b --- /dev/null +++ b/content/self-hosting/upgrade/upgrade-guides/meta.json @@ -0,0 +1,7 @@ +{ + "title": "Upgrade Guides", + "pages": [ + "upgrade-v2-to-v3", + "upgrade-v1-to-v2" + ] +} diff --git a/pages/self-hosting/upgrade/upgrade-guides/upgrade-v1-to-v2.mdx b/content/self-hosting/upgrade/upgrade-guides/upgrade-v1-to-v2.mdx similarity index 100% rename from pages/self-hosting/upgrade/upgrade-guides/upgrade-v1-to-v2.mdx rename to content/self-hosting/upgrade/upgrade-guides/upgrade-v1-to-v2.mdx diff --git a/pages/self-hosting/upgrade/upgrade-guides/upgrade-v2-to-v3.mdx b/content/self-hosting/upgrade/upgrade-guides/upgrade-v2-to-v3.mdx similarity index 100% rename from pages/self-hosting/upgrade/upgrade-guides/upgrade-v2-to-v3.mdx rename to content/self-hosting/upgrade/upgrade-guides/upgrade-v2-to-v3.mdx diff --git a/pages/self-hosting/upgrade/versioning.mdx b/content/self-hosting/upgrade/versioning.mdx similarity index 99% rename from pages/self-hosting/upgrade/versioning.mdx rename to content/self-hosting/upgrade/versioning.mdx index 27e36beb8f..e23c3242cd 100644 --- a/pages/self-hosting/upgrade/versioning.mdx +++ b/content/self-hosting/upgrade/versioning.mdx @@ -1,4 +1,5 @@ --- +title: Versioning label: "Version: v3" sidebarTitle: "Versioning" --- diff --git a/pages/self-hosting/v2/deployment-guide.mdx b/content/self-hosting/v2/deployment-guide.mdx similarity index 100% rename from pages/self-hosting/v2/deployment-guide.mdx rename to content/self-hosting/v2/deployment-guide.mdx diff --git a/pages/self-hosting/v2/docker-compose.mdx b/content/self-hosting/v2/docker-compose.mdx similarity index 100% rename from pages/self-hosting/v2/docker-compose.mdx rename to content/self-hosting/v2/docker-compose.mdx diff --git a/pages/self-hosting/v2/index.mdx b/content/self-hosting/v2/index.mdx similarity index 100% rename from pages/self-hosting/v2/index.mdx rename to content/self-hosting/v2/index.mdx diff --git a/content/self-hosting/v2/meta.json b/content/self-hosting/v2/meta.json new file mode 100644 index 0000000000..230f4c9dc9 --- /dev/null +++ b/content/self-hosting/v2/meta.json @@ -0,0 +1,9 @@ +{ + "title": "V2", + "pages": [ + "import", + "index", + "deployment-guide", + "docker-compose" + ] +} diff --git a/data/generated/contributors.json b/data/generated/contributors.json index 5c47ec85fd..9e26dfeeb6 100644 --- a/data/generated/contributors.json +++ b/data/generated/contributors.json @@ -1,1762 +1 @@ -{ - "/docs/administration/audit-logs": [ - "marcklingen" - ], - "/docs/administration/authentication-and-sso": [ - "marcklingen" - ], - "/docs/administration/billable-units": [ - "Lotte-Verheyden" - ], - "/docs/administration/data-deletion": [ - "FroeMic", - "marcklingen", - "jannikmaierhoefer" - ], - "/docs/administration/data-retention": [ - "Steffen911", - "marcklingen", - "nimarb" - ], - "/docs/administration/llm-connection": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp" - ], - "/docs/administration/rbac": [ - "marcklingen" - ], - "/docs/administration/scim-and-org-api": [ - "marcklingen", - "AkioNuernberger", - "Steffen911" - ], - "/docs/administration/spend-alerts": [ - "FroeMic" - ], - "/docs/administration/troubleshooting-and-faq": [ - "marcklingen" - ], - "/docs/api-and-data-platform/features/export-from-ui": [ - "nimarb", - "marcklingen" - ], - "/docs/api-and-data-platform/features/export-to-blob-storage": [ - "marcklingen" - ], - "/docs/api-and-data-platform/features/mcp-server": [ - "FroeMic", - "jannikmaierhoefer", - "marcklingen" - ], - "/docs/api-and-data-platform/features/observations-api": [ - "sumerman" - ], - "/docs/api-and-data-platform/features/public-api": [ - "sumerman", - "AkioNuernberger", - "marcklingen", - "daaain", - "jannikmaierhoefer", - "felixkrrr" - ], - "/docs/api-and-data-platform/features/query-via-sdk": [ - "Lotte-Verheyden", - "sumerman", - "jannikmaierhoefer", - "marcklingen", - "felixkrrr" - ], - "/docs/api-and-data-platform/overview": [ - "Lotte-Verheyden", - "FroeMic", - "marcklingen" - ], - "/docs/ask-ai": [ - "Lotte-Verheyden", - "marcklingen", - "jannikmaierhoefer" - ], - "/docs/demo": [ - "Lotte-Verheyden", - "marcklingen", - "jannikmaierhoefer", - "clemra", - "NicHaley" - ], - "/docs/docs-mcp": [ - "marcklingen" - ], - "/docs/evaluation/core-concepts": [ - "Lotte-Verheyden" - ], - "/docs/evaluation/evaluation-methods/annotation-queues": [ - "marliessophie", - "Lotte-Verheyden", - "jannikmaierhoefer" - ], - "/docs/evaluation/evaluation-methods/llm-as-a-judge": [ - "Lotte-Verheyden", - "jannikmaierhoefer", - "marcklingen", - "hassiebp", - "felixkrrr", - "AkioNuernberger" - ], - "/docs/evaluation/evaluation-methods/score-analytics": [ - "jannikmaierhoefer", - "FroeMic" - ], - "/docs/evaluation/evaluation-methods/scores-via-sdk": [ - "Lotte-Verheyden", - "jannikmaierhoefer" - ], - "/docs/evaluation/evaluation-methods/scores-via-ui": [ - "Lotte-Verheyden", - "jannikmaierhoefer" - ], - "/docs/evaluation/experiments/data-model": [ - "Lotte-Verheyden", - "hassiebp" - ], - "/docs/evaluation/experiments/datasets": [ - "marliessophie", - "hassiebp", - "marcklingen", - "AkioNuernberger" - ], - "/docs/evaluation/experiments/experiments-via-sdk": [ - "jannikmaierhoefer", - "marliessophie", - "marcklingen", - "hassiebp" - ], - "/docs/evaluation/experiments/experiments-via-ui": [ - "marliessophie", - "marcklingen", - "hassiebp" - ], - "/docs/evaluation/overview": [ - "Lotte-Verheyden", - "jannikmaierhoefer", - "aabedraba", - "marcklingen", - "hassiebp", - "felixkrrr", - "marliessophie" - ], - "/docs/evaluation/troubleshooting-and-faq": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/docs/index": [ - "Lotte-Verheyden", - "marcklingen", - "felixkrrr", - "hassiebp", - "jannikmaierhoefer", - "marliessophie", - "clemra", - "maxdeichmann", - "NicHaley" - ], - "/docs/metrics/features/custom-dashboards": [ - "marcklingen" - ], - "/docs/metrics/features/metrics-api": [ - "sumerman", - "jannikmaierhoefer", - "marcklingen" - ], - "/docs/metrics/overview": [ - "marcklingen" - ], - "/docs/observability/data-model": [ - "Lotte-Verheyden", - "marcklingen", - "hassiebp", - "nimarb" - ], - "/docs/observability/features/agent-graphs": [ - "nimarb", - "marcklingen" - ], - "/docs/observability/features/comments": [ - "nimarb", - "jannikmaierhoefer", - "FroeMic", - "marcklingen" - ], - "/docs/observability/features/corrections": [ - "marliessophie" - ], - "/docs/observability/features/environments": [ - "jannikmaierhoefer", - "hassiebp", - "felixkrrr", - "marcklingen" - ], - "/docs/observability/features/log-levels": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/docs/observability/features/masking": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp" - ], - "/docs/observability/features/mcp-tracing": [ - "aabedraba" - ], - "/docs/observability/features/metadata": [ - "jannikmaierhoefer", - "hassiebp", - "Steffen911", - "marcklingen" - ], - "/docs/observability/features/multi-modality": [ - "jannikmaierhoefer", - "hassiebp", - "dminhvu", - "Athroniaeth", - "marcklingen" - ], - "/docs/observability/features/observation-types": [ - "jannikmaierhoefer", - "hassiebp", - "nimarb" - ], - "/docs/observability/features/queuing-batching": [ - "hassiebp", - "jannikmaierhoefer", - "marcklingen" - ], - "/docs/observability/features/releases-and-versioning": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/docs/observability/features/sampling": [ - "hassiebp", - "jannikmaierhoefer", - "marcklingen" - ], - "/docs/observability/features/sessions": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/docs/observability/features/tags": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen", - "Steffen911" - ], - "/docs/observability/features/token-and-cost-tracking": [ - "hassiebp", - "jannikmaierhoefer", - "marcklingen", - "nimarb" - ], - "/docs/observability/features/trace-ids-and-distributed-tracing": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/docs/observability/features/url": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp" - ], - "/docs/observability/features/user-feedback": [ - "aabedraba" - ], - "/docs/observability/features/users": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen", - "felixkrrr" - ], - "/docs/observability/get-started": [ - "Lotte-Verheyden", - "jannikmaierhoefer", - "marcklingen" - ], - "/docs/observability/overview": [ - "Lotte-Verheyden", - "marcklingen", - "DrRinkiArya" - ], - "/docs/observability/sdk/advanced-features": [ - "jannikmaierhoefer" - ], - "/docs/observability/sdk/instrumentation": [ - "jannikmaierhoefer", - "hassiebp" - ], - "/docs/observability/sdk/overview": [ - "Lotte-Verheyden", - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/docs/observability/sdk/troubleshooting-and-faq": [ - "jannikmaierhoefer" - ], - "/docs/observability/sdk/upgrade-path": [ - "jannikmaierhoefer" - ], - "/docs/observability/troubleshooting-and-faq": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/docs/prompt-management/data-model": [ - "Lotte-Verheyden", - "marcklingen" - ], - "/docs/prompt-management/features/a-b-testing": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp" - ], - "/docs/prompt-management/features/caching": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/docs/prompt-management/features/composability": [ - "Lotte-Verheyden", - "jannikmaierhoefer", - "marcklingen" - ], - "/docs/prompt-management/features/config": [ - "Lotte-Verheyden", - "marcklingen" - ], - "/docs/prompt-management/features/folders": [ - "marcklingen" - ], - "/docs/prompt-management/features/github-integration": [ - "maxdeichmann", - "mfcabrera" - ], - "/docs/prompt-management/features/guaranteed-availability": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/docs/prompt-management/features/link-to-traces": [ - "Lotte-Verheyden", - "marcklingen", - "jannikmaierhoefer" - ], - "/docs/prompt-management/features/mcp-server": [ - "FroeMic", - "marcklingen" - ], - "/docs/prompt-management/features/message-placeholders": [ - "Lotte-Verheyden", - "marcklingen", - "jannikmaierhoefer", - "hassiebp" - ], - "/docs/prompt-management/features/n8n-node": [ - "marcklingen" - ], - "/docs/prompt-management/features/playground": [ - "marcklingen", - "jannikmaierhoefer", - "hassiebp" - ], - "/docs/prompt-management/features/prompt-version-control": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp" - ], - "/docs/prompt-management/features/variables": [ - "Lotte-Verheyden" - ], - "/docs/prompt-management/features/webhooks-slack-integrations": [ - "marcklingen", - "jannikmaierhoefer", - "maxdeichmann" - ], - "/docs/prompt-management/get-started": [ - "Lotte-Verheyden", - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/docs/prompt-management/overview": [ - "Lotte-Verheyden", - "marcklingen", - "jannikmaierhoefer" - ], - "/docs/prompt-management/troubleshooting-and-faq": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/docs/roadmap": [ - "marcklingen", - "nimarb", - "maxdeichmann", - "jannikmaierhoefer", - "Steffen911", - "clemra", - "hassiebp" - ], - "/docs/security-and-guardrails": [ - "marcklingen", - "skpersonal", - "jannikmaierhoefer" - ], - "/faq/all/ai-research-assistant-monitoring": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/faq/all/ai-transparency-remberg-langfuse": [ - "jannikmaierhoefer", - "clemra" - ], - "/faq/all/api-524-http-errors": [ - "Steffen911" - ], - "/faq/all/api-limits": [ - "sumerman", - "jannikmaierhoefer", - "marcklingen", - "Steffen911", - "maxdeichmann" - ], - "/faq/all/arm-images": [ - "marcklingen" - ], - "/faq/all/aws-lambda-and-serverless-functions": [ - "marcklingen" - ], - "/faq/all/best-braintrustdata-alternatives": [ - "jannikmaierhoefer", - "marcklingen", - "clemra" - ], - "/faq/all/best-galileo-ai-alternatives": [ - "jannikmaierhoefer" - ], - "/faq/all/best-helicone-alternative": [ - "marcklingen", - "marliessophie", - "jannikmaierhoefer", - "felixkrrr", - "clemra" - ], - "/faq/all/best-phoenix-arize-alternatives": [ - "jannikmaierhoefer", - "marcklingen", - "clemra" - ], - "/faq/all/cannot-see-organization": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/faq/all/challenges-of-building-llm-applications": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/faq/all/chatbot-analytics": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/faq/all/compatibility-langfuse-ui-and-python-sdk": [ - "marcklingen" - ], - "/faq/all/conditional-prompt-embedding": [ - "Lotte-Verheyden" - ], - "/faq/all/costs-tokens-langfuse": [ - "jannikmaierhoefer", - "marcklingen", - "clemra" - ], - "/faq/all/custom-langchain-run-names": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/faq/all/cutting-costs": [ - "jannikmaierhoefer", - "Lotte-Verheyden", - "AkioNuernberger", - "FroeMic", - "Steffen911", - "hassiebp", - "marcklingen" - ], - "/faq/all/data-retention-timeouts-and-errors": [ - "Steffen911" - ], - "/faq/all/debug-docker-deployment": [ - "marcklingen" - ], - "/faq/all/delete-account-langfuse": [ - "FroeMic", - "marcklingen", - "jannikmaierhoefer", - "clemra" - ], - "/faq/all/empty-trace-input-and-output": [ - "jannikmaierhoefer", - "Lotte-Verheyden" - ], - "/faq/all/enable-disable-tracing": [ - "marcklingen" - ], - "/faq/all/enforcing-2fa": [ - "marcklingen" - ], - "/faq/all/error-handling-and-timeouts": [ - "jannikmaierhoefer" - ], - "/faq/all/evaluating-sessions-conversations": [ - "Lotte-Verheyden", - "marcklingen" - ], - "/faq/all/fifteen-questions-langfuse-answered": [ - "jannikmaierhoefer", - "marcklingen", - "Steffen911", - "clemra" - ], - "/faq/all/forgot-password": [ - "marcklingen", - "jannikmaierhoefer", - "clemra" - ], - "/faq/all/how-to-measure-prompt-performance": [ - "jannikmaierhoefer" - ], - "/faq/all/huntr-langfuse-case-study": [ - "jannikmaierhoefer" - ], - "/faq/all/inviting-in-langfuse": [ - "marcklingen", - "jannikmaierhoefer", - "clemra" - ], - "/faq/all/langfuse-evaluators-on-dataset-runs": [ - "hassiebp" - ], - "/faq/all/langfuse-support": [ - "jannikmaierhoefer", - "marcklingen", - "clemra" - ], - "/faq/all/langsmith-alternative": [ - "jannikmaierhoefer", - "marcklingen", - "hsm207", - "clemra" - ], - "/faq/all/limit-access-to-internal-users": [ - "marcklingen" - ], - "/faq/all/link-prompt-management-with-tracing": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/faq/all/llm-analytics-101": [ - "marcklingen", - "jannikmaierhoefer", - "clemra" - ], - "/faq/all/llm-observability": [ - "jannikmaierhoefer", - "marcklingen", - "clemra" - ], - "/faq/all/manage-score-configs": [ - "Lotte-Verheyden", - "marcklingen", - "marliessophie", - "jannikmaierhoefer" - ], - "/faq/all/managing-different-environments": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/faq/all/mava-langfuse-case-study": [ - "jannikmaierhoefer", - "clemra" - ], - "/faq/all/missing-traces": [ - "jannikmaierhoefer", - "Lotte-Verheyden", - "marcklingen" - ], - "/faq/all/monitoring-ai-generated-content": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/faq/all/old-prompt-version-caching": [ - "Lotte-Verheyden" - ], - "/faq/all/openai-assistant-api": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/faq/all/packages-depending-on-langfuse": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/faq/all/prompt-management-langfuse": [ - "marcklingen", - "clemra" - ], - "/faq/all/report-feedback-bug": [ - "marcklingen", - "jannikmaierhoefer", - "clemra" - ], - "/faq/all/retrieve-experiment-scores": [ - "Lotte-Verheyden", - "marliessophie" - ], - "/faq/all/self-host-with-load-balancer": [ - "marcklingen" - ], - "/faq/all/self-hosted-telemetry": [ - "marcklingen" - ], - "/faq/all/self-hosting-502-504-network-errors": [ - "marcklingen" - ], - "/faq/all/self-hosting-clickhouse-handling-failed-migrations": [ - "Steffen911", - "marcklingen" - ], - "/faq/all/self-hosting-javascript-heap-out-of-memory": [ - "marcklingen" - ], - "/faq/all/self-hosting-langfuse": [ - "marcklingen", - "jannikmaierhoefer", - "clemra" - ], - "/faq/all/self-hosting-missing-events-after-ingestion": [ - "marcklingen" - ], - "/faq/all/self-hosting-postgresql-table-ownership-migration-failures": [ - "marcklingen" - ], - "/faq/all/self-hosting-queue-management-bullmq-admin-api": [ - "marcklingen" - ], - "/faq/all/self-hosting-socket-usage-at-capacity": [ - "marcklingen" - ], - "/faq/all/self-hosting-timezone-errors": [ - "marcklingen" - ], - "/faq/all/sso-har-file-export": [ - "marcklingen" - ], - "/faq/all/ten-reasons-to-use-langfuse": [ - "marcklingen", - "jannikmaierhoefer", - "clemra" - ], - "/faq/all/tracing-data-updates": [ - "Steffen911", - "marcklingen", - "maxdeichmann" - ], - "/faq/all/upgrade-langfuse": [ - "marcklingen", - "clemra" - ], - "/faq/all/using-external-templating-libraries": [ - "Lotte-Verheyden" - ], - "/faq/all/what-is-LCEL": [ - "marcklingen", - "jannikmaierhoefer", - "clemra" - ], - "/faq/all/what-is-prompt-engineering": [ - "jannikmaierhoefer" - ], - "/faq/all/where-are-langfuse-api-keys": [ - "marcklingen", - "jannikmaierhoefer", - "clemra" - ], - "/faq/all/where-is-my-project": [ - "marcklingen", - "jannikmaierhoefer", - "clemra" - ], - "/faq/index": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/faq/tag/[tag]": [ - "marcklingen" - ], - "/faq/tag/api": [ - "marcklingen" - ], - "/faq/tag/case-studies": [ - "jannikmaierhoefer" - ], - "/faq/tag/cloud": [ - "marcklingen" - ], - "/faq/tag/integration-langchain": [ - "marcklingen" - ], - "/faq/tag/integration-openai": [ - "marcklingen" - ], - "/faq/tag/product": [ - "marcklingen", - "clemra" - ], - "/faq/tag/prompt-management": [ - "marcklingen" - ], - "/faq/tag/security": [ - "marcklingen" - ], - "/faq/tag/self-hosting": [ - "marcklingen" - ], - "/faq/tag/tracing": [ - "marcklingen" - ], - "/guides/cookbook/datasets": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/evaluation_of_rag_with_ragas": [ - "jannikmaierhoefer", - "minorun365", - "RichardKruemmel", - "marcklingen" - ], - "/guides/cookbook/evaluation_with_langchain": [ - "jannikmaierhoefer", - "gyliu513", - "RichardKruemmel", - "marcklingen" - ], - "/guides/cookbook/evaluation_with_uptrain": [ - "jannikmaierhoefer", - "omahs", - "marcklingen" - ], - "/guides/cookbook/example_data_migration": [ - "aabedraba", - "jannikmaierhoefer" - ], - "/guides/cookbook/example_decorator_openai_langchain": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/example_evaluating_multi_turn_conversations": [ - "jannikmaierhoefer", - "aabedraba" - ], - "/guides/cookbook/example_evaluating_openai_agents": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/example_external_evaluation_pipelines": [ - "jannikmaierhoefer", - "marcklingen", - "omahs" - ], - "/guides/cookbook/example_intent_classification_pipeline": [ - "jannikmaierhoefer", - "Lotte-Verheyden", - "marcklingen", - "omahs", - "thompsgj" - ], - "/guides/cookbook/example_langgraph_agents": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/example_llm_security_monitoring": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/example_multi_modal_traces": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/guides/cookbook/example_pydantic_ai_mcp_agent_evaluation": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/example_query_data_via_sdk": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/example_simulated_multi_turn_conversations": [ - "jannikmaierhoefer", - "aabedraba" - ], - "/guides/cookbook/example_synthetic_datasets": [ - "jannikmaierhoefer", - "pawelsierant", - "aabedraba" - ], - "/guides/cookbook/index": [ - "marcklingen" - ], - "/guides/cookbook/integration_amazon_bedrock": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp" - ], - "/guides/cookbook/integration_anthropic": [ - "jannikmaierhoefer" - ], - "/guides/cookbook/integration_azure_openai_langchain": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/integration_databricks": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/integration_langchain": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp", - "RichardKruemmel" - ], - "/guides/cookbook/integration_langgraph": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp", - "jongwoo328" - ], - "/guides/cookbook/integration_langserve": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp" - ], - "/guides/cookbook/integration_litellm_proxy": [ - "jannikmaierhoefer", - "marcklingen", - "bderenzi", - "hassiebp", - "RichardKruemmel" - ], - "/guides/cookbook/integration_llama-index-callback": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/guides/cookbook/integration_llama-index_instrumentation": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp" - ], - "/guides/cookbook/integration_llama-index_milvus-lite": [ - "jannikmaierhoefer", - "marcklingen", - "stephen37" - ], - "/guides/cookbook/integration_llama_index": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/integration_llama_index_posthog_mistral": [ - "jannikmaierhoefer", - "marcklingen", - "kilavvy", - "omahs" - ], - "/guides/cookbook/integration_llamaindex_workflows": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/integration_openai_assistants": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp" - ], - "/guides/cookbook/integration_openai_sdk": [ - "jannikmaierhoefer", - "marcklingen", - "marliessophie", - "hassiebp" - ], - "/guides/cookbook/integration_openai_structured_output": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp" - ], - "/guides/cookbook/js_integration_langchain": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/guides/cookbook/js_integration_litellm_proxy": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/guides/cookbook/js_integration_openai": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp", - "RichardKruemmel" - ], - "/guides/cookbook/js_langfuse_sdk": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/guides/cookbook/js_prompt_management_langchain": [ - "jannikmaierhoefer", - "hassiebp", - "marcklingen" - ], - "/guides/cookbook/langfuse_sdk_performance_test": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/guides/cookbook/otel_integration_arize": [ - "jannikmaierhoefer" - ], - "/guides/cookbook/otel_integration_mlflow": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/otel_integration_openlit": [ - "jannikmaierhoefer", - "Steffen911" - ], - "/guides/cookbook/otel_integration_openllmetry": [ - "jannikmaierhoefer", - "marcklingen", - "Steffen911" - ], - "/guides/cookbook/otel_integration_python_sdk": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/cookbook/prompt_management_langchain": [ - "jannikmaierhoefer", - "marcklingen", - "hassiebp", - "marliessophie" - ], - "/guides/cookbook/prompt_management_openai_functions": [ - "jannikmaierhoefer", - "marcklingen", - "marliessophie", - "hassiebp" - ], - "/guides/cookbook/prompt_management_performance_benchmark": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/guides/index": [ - "nktrk", - "marcklingen", - "aabedraba", - "jannikmaierhoefer" - ], - "/guides/videos/beginners-guide-to-rag-evaluation": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/guides/videos/external-evaluation-pipelines": [ - "marcklingen" - ], - "/guides/videos/index": [ - "marcklingen" - ], - "/guides/videos/introducing-datasets-v2": [ - "marcklingen" - ], - "/guides/videos/introducing-langfuse-2.0": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/guides/videos/introducing-python-decorator": [ - "marcklingen" - ], - "/guides/videos/llm-as-a-judge-eval-on-dataset-experiments": [ - "marcklingen" - ], - "/guides/videos/llm-playground": [ - "marcklingen", - "hassiebp" - ], - "/guides/videos/posthog-integration": [ - "marcklingen", - "hassiebp" - ], - "/guides/videos/run-langfuse-locally": [ - "marcklingen" - ], - "/guides/videos/webinar-observability-llm-systems": [ - "marcklingen" - ], - "/handbook/chapters/customers": [ - "marcklingen", - "felixkrrr" - ], - "/handbook/chapters/mission": [ - "felixkrrr", - "marcklingen" - ], - "/handbook/chapters/monetization": [ - "felixkrrr", - "marcklingen" - ], - "/handbook/chapters/open-source": [ - "Lotte-Verheyden", - "felixkrrr", - "marcklingen" - ], - "/handbook/chapters/story": [ - "marcklingen" - ], - "/handbook/chapters/team": [ - "felixkrrr", - "marcklingen" - ], - "/handbook/chapters/why": [ - "jannikmaierhoefer", - "Lotte-Verheyden", - "marcklingen", - "felixkrrr" - ], - "/handbook/devrel/community-hour": [ - "jannikmaierhoefer" - ], - "/handbook/how-we-hire/engineering-super-day": [ - "Lotte-Verheyden", - "barinali", - "maxdeichmann" - ], - "/handbook/how-we-hire/hiring-process": [ - "maxdeichmann" - ], - "/handbook/how-we-hire/philosophy": [ - "maxdeichmann" - ], - "/handbook/how-we-work/meetings": [ - "felixkrrr", - "maxdeichmann" - ], - "/handbook/how-we-work/ownership": [ - "felixkrrr" - ], - "/handbook/how-we-work/principles": [ - "maxdeichmann", - "marcklingen", - "felixkrrr" - ], - "/handbook/how-we-work/productivity-and-ai": [ - "felixkrrr" - ], - "/handbook/index": [ - "felixkrrr", - "marcklingen" - ], - "/handbook/operations/entity-structure": [ - "marcklingen" - ], - "/handbook/operations/finance": [ - "felixkrrr", - "marcklingen" - ], - "/handbook/perks-and-pay": [ - "felixkrrr" - ], - "/handbook/product-engineering/analytics": [ - "maxdeichmann", - "felixkrrr" - ], - "/handbook/product-engineering/architecture": [ - "marcklingen", - "maxdeichmann" - ], - "/handbook/product-engineering/how-we-work/code-review": [ - "maxdeichmann" - ], - "/handbook/product-engineering/how-we-work/onboarding": [ - "maxdeichmann" - ], - "/handbook/product-engineering/how-we-work/product-ops": [ - "maxdeichmann" - ], - "/handbook/product-engineering/how-we-work/roadmapping": [ - "maxdeichmann" - ], - "/handbook/product-engineering/how-we-work/workflow": [ - "maxdeichmann" - ], - "/handbook/product-engineering/infrastructure/clickhouse": [ - "Steffen911" - ], - "/handbook/product-engineering/infrastructure/ecs": [ - "Steffen911" - ], - "/handbook/product-engineering/playbooks/code-structure": [ - "maxdeichmann" - ], - "/handbook/product-engineering/playbooks/documentation": [ - "maxdeichmann" - ], - "/handbook/product-engineering/playbooks/releases": [ - "maxdeichmann" - ], - "/handbook/product-engineering/playbooks/vulnerability-handling": [ - "maxdeichmann" - ], - "/handbook/product-engineering/principles": [ - "maxdeichmann", - "marcklingen", - "felixkrrr" - ], - "/handbook/product-engineering/tech-stack": [ - "Steffen911", - "maxdeichmann" - ], - "/handbook/sales-and-cs/customer-success": [ - "felixkrrr" - ], - "/handbook/sales-and-cs/overview": [ - "felixkrrr" - ], - "/handbook/sales-and-cs/sales": [ - "felixkrrr" - ], - "/handbook/support/support": [ - "marcklingen", - "maxdeichmann", - "felixkrrr" - ], - "/handbook/support/using-plain": [ - "maxdeichmann", - "felixkrrr" - ], - "/handbook/tools-and-processes/spending-money": [ - "felixkrrr" - ], - "/handbook/tools-and-processes/time-off": [ - "felixkrrr" - ], - "/handbook/tools-and-processes/using-linear": [ - "maxdeichmann", - "felixkrrr" - ], - "/handbook/tools-and-processes/using-slack": [ - "AkioNuernberger", - "marcklingen", - "felixkrrr" - ], - "/integrations/analytics/coval": [ - "marcklingen" - ], - "/integrations/analytics/mixpanel": [ - "marcklingen" - ], - "/integrations/analytics/posthog": [ - "marcklingen", - "maxdeichmann" - ], - "/integrations/analytics/trubrics": [ - "marcklingen" - ], - "/integrations/frameworks/agno-agents": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/amazon-agentcore": [ - "marcklingen" - ], - "/integrations/frameworks/autogen": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/beeai": [ - "jannikmaierhoefer" - ], - "/integrations/frameworks/claude-agent-sdk": [ - "jannikmaierhoefer" - ], - "/integrations/frameworks/crewai": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/dspy": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/google-adk": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/haystack": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/instructor": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/koog": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/langchain": [ - "jannikmaierhoefer", - "juunini", - "marcklingen" - ], - "/integrations/frameworks/langchain-deepagents": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/integrations/frameworks/langserve": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/litellm-sdk": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/livekit": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/llamaindex": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/llamaindex-workflows": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/mastra": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/microsoft-agent-framework": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/mirascope": [ - "marcklingen" - ], - "/integrations/frameworks/openai-agents": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/pipecat": [ - "Lotte-Verheyden", - "jannikmaierhoefer", - "marcklingen", - "aabedraba", - "vipyne", - "cyh0530" - ], - "/integrations/frameworks/pydantic-ai": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/quarkus-langchain4j": [ - "marcklingen" - ], - "/integrations/frameworks/ragas": [ - "marcklingen" - ], - "/integrations/frameworks/semantic-kernel": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/smolagents": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/spring-ai": [ - "marcklingen" - ], - "/integrations/frameworks/strands-agents": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/swiftide": [ - "timonv" - ], - "/integrations/frameworks/temporal": [ - "jannikmaierhoefer" - ], - "/integrations/frameworks/vercel-ai-sdk": [ - "jannikmaierhoefer", - "hassiebp", - "aabedraba", - "marcklingen" - ], - "/integrations/frameworks/voltagent": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/frameworks/watsonx-orchestrate": [ - "jannikmaierhoefer" - ], - "/integrations/gateways/anannas": [ - "jannikmaierhoefer", - "Haleshot" - ], - "/integrations/gateways/helicone": [ - "juliettech13" - ], - "/integrations/gateways/kong-ai-plugin": [ - "Ramtinboreili" - ], - "/integrations/gateways/litellm": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/integrations/gateways/openrouter": [ - "jannikmaierhoefer", - "marcklingen", - "Lotte-Verheyden", - "clemra" - ], - "/integrations/gateways/portkey": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/gateways/truefoundry": [ - "jannikmaierhoefer", - "rishiraj-tf" - ], - "/integrations/gateways/vercel-ai-gateway": [ - "jannikmaierhoefer", - "joshualipman123" - ], - "/integrations/index": [ - "Lotte-Verheyden", - "marcklingen" - ], - "/integrations/model-providers/amazon-bedrock": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/amazon-bedrock-agents": [ - "marcklingen" - ], - "/integrations/model-providers/anthropic": [ - "jannikmaierhoefer" - ], - "/integrations/model-providers/baseten": [ - "jannikmaierhoefer" - ], - "/integrations/model-providers/byteplus": [ - "jannikmaierhoefer" - ], - "/integrations/model-providers/cerebras": [ - "jannikmaierhoefer" - ], - "/integrations/model-providers/cleanlab": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/cohere": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/cometapi": [ - "jannikmaierhoefer", - "TensorNull" - ], - "/integrations/model-providers/databricks": [ - "marcklingen" - ], - "/integrations/model-providers/deepseek": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/fireworks-ai": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/google-gemini": [ - "jannikmaierhoefer" - ], - "/integrations/model-providers/google-vertex-ai": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/groq": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/huggingface": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/mistral-sdk": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/novitaai": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/ollama": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/openai-assistants-api": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/openai-js": [ - "kulakowka", - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/openai-py": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/togetherai": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/model-providers/vllm": [ - "jannikmaierhoefer" - ], - "/integrations/model-providers/xai-grok": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/native/opentelemetry": [ - "Lotte-Verheyden", - "Steffen911", - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/no-code/dify": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/integrations/no-code/flowise": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/integrations/no-code/goose": [ - "marcklingen" - ], - "/integrations/no-code/langdock": [ - "marcklingen" - ], - "/integrations/no-code/langflow": [ - "maxdeichmann", - "marcklingen" - ], - "/integrations/no-code/lobechat": [ - "marcklingen" - ], - "/integrations/no-code/n8n": [ - "marcklingen" - ], - "/integrations/no-code/openwebui": [ - "marcklingen", - "jannikmaierhoefer" - ], - "/integrations/no-code/ragflow": [ - "marcklingen" - ], - "/integrations/no-code/vapi": [ - "marcklingen" - ], - "/integrations/other/claude-code": [ - "jannikmaierhoefer" - ], - "/integrations/other/cognee": [ - "hande-k" - ], - "/integrations/other/cursor": [ - "jannikmaierhoefer" - ], - "/integrations/other/exa": [ - "jannikmaierhoefer" - ], - "/integrations/other/firecrawl": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/other/gradio": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/other/inferable": [ - "marcklingen" - ], - "/integrations/other/mcp-use": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/other/milvus": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/other/parallel-ai": [ - "jannikmaierhoefer" - ], - "/integrations/other/promptfoo": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/integrations/other/testable-minds": [ - "acip" - ], - "/integrations/other/zapier": [ - "marcklingen" - ], - "/security/ai-features": [ - "marcklingen", - "marliessophie", - "nimarb" - ], - "/security/auth": [ - "marcklingen" - ], - "/security/compliance-faq": [ - "AkioNuernberger" - ], - "/security/data-regions": [ - "jannikmaierhoefer", - "AkioNuernberger", - "marcklingen" - ], - "/security/dependencies": [ - "maxdeichmann", - "marcklingen" - ], - "/security/dpa": [ - "clemra", - "marcklingen" - ], - "/security/encryption": [ - "AkioNuernberger", - "marcklingen" - ], - "/security/gdpr": [ - "marcklingen" - ], - "/security/hipaa": [ - "jannikmaierhoefer", - "clemra", - "AkioNuernberger", - "marcklingen" - ], - "/security/incident-and-breach": [ - "AkioNuernberger", - "marcklingen" - ], - "/security/index": [ - "marcklingen", - "AkioNuernberger" - ], - "/security/iso27001": [ - "marcklingen" - ], - "/security/manage-personal-data": [ - "marcklingen" - ], - "/security/nda": [ - "clemra" - ], - "/security/networking": [ - "maxdeichmann" - ], - "/security/penetration-testing": [ - "marcklingen" - ], - "/security/policies": [ - "marcklingen" - ], - "/security/privacy-faq": [ - "AkioNuernberger", - "marcklingen", - "Steffen911" - ], - "/security/responsible-disclosure": [ - "Steffen911", - "maxdeichmann", - "marcklingen", - "marliessophie" - ], - "/security/security-faq": [ - "marcklingen", - "AkioNuernberger", - "clemra" - ], - "/security/soc2": [ - "marcklingen" - ], - "/security/subprocessors": [ - "clemra", - "marcklingen" - ], - "/security/toms": [ - "clemra" - ], - "/security/vulnerability-management": [ - "marcklingen" - ], - "/security/whistleblowing": [ - "marcklingen" - ], - "/self-hosting/administration/automated-access-provisioning": [ - "MEgooneh", - "marcklingen" - ], - "/self-hosting/administration/headless-initialization": [ - "marcklingen" - ], - "/self-hosting/administration/index": [ - "marcklingen" - ], - "/self-hosting/administration/instance-management-api": [ - "marcklingen" - ], - "/self-hosting/administration/organization-creators": [ - "marcklingen" - ], - "/self-hosting/administration/ui-customization": [ - "marcklingen" - ], - "/self-hosting/configuration/backups": [ - "marcklingen" - ], - "/self-hosting/configuration/caching": [ - "marcklingen" - ], - "/self-hosting/configuration/custom-base-path": [ - "Steffen911", - "marcklingen" - ], - "/self-hosting/configuration/encryption": [ - "marcklingen" - ], - "/self-hosting/configuration/health-readiness-endpoints": [ - "marcklingen" - ], - "/self-hosting/configuration/index": [ - "Steffen911", - "marcklingen" - ], - "/self-hosting/configuration/observability": [ - "marcklingen" - ], - "/self-hosting/configuration/scaling": [ - "marcklingen" - ], - "/self-hosting/configuration/transactional-emails": [ - "marcklingen" - ], - "/self-hosting/deployment/aws": [ - "marcklingen" - ], - "/self-hosting/deployment/azure": [ - "marcklingen" - ], - "/self-hosting/deployment/docker-compose": [ - "marcklingen" - ], - "/self-hosting/deployment/gcp": [ - "marcklingen" - ], - "/self-hosting/deployment/infrastructure/blobstorage": [ - "marcklingen" - ], - "/self-hosting/deployment/infrastructure/cache": [ - "Steffen911", - "marcklingen" - ], - "/self-hosting/deployment/infrastructure/clickhouse": [ - "Steffen911", - "marcklingen" - ], - "/self-hosting/deployment/infrastructure/containers": [ - "marcklingen" - ], - "/self-hosting/deployment/infrastructure/llm-api": [ - "marcklingen" - ], - "/self-hosting/deployment/infrastructure/postgres": [ - "marcklingen" - ], - "/self-hosting/deployment/kubernetes-helm": [ - "marcklingen" - ], - "/self-hosting/deployment/railway": [ - "marcklingen" - ], - "/self-hosting/index": [ - "marcklingen", - "clemra", - "jannikmaierhoefer" - ], - "/self-hosting/license-key": [ - "AkioNuernberger", - "marcklingen", - "Steffen911" - ], - "/self-hosting/security/authentication-and-sso": [ - "jannikmaierhoefer", - "marcklingen", - "Steffen911", - "freinold" - ], - "/self-hosting/security/deployment-strategies": [ - "marcklingen" - ], - "/self-hosting/security/networking": [ - "marcklingen" - ], - "/self-hosting/troubleshooting-and-faq": [ - "marcklingen" - ], - "/self-hosting/upgrade/background-migrations": [ - "marcklingen" - ], - "/self-hosting/upgrade/index": [ - "marcklingen" - ], - "/self-hosting/upgrade/upgrade-guides/upgrade-v1-to-v2": [ - "marcklingen" - ], - "/self-hosting/upgrade/upgrade-guides/upgrade-v2-to-v3": [ - "marcklingen" - ], - "/self-hosting/upgrade/versioning": [ - "marcklingen" - ], - "/self-hosting/v2/deployment-guide": [ - "marcklingen", - "omahs", - "jannikmaierhoefer" - ], - "/self-hosting/v2/docker-compose": [ - "jannikmaierhoefer", - "marcklingen" - ], - "/self-hosting/v2/index": [ - "marcklingen" - ] -} \ No newline at end of file +{} \ No newline at end of file diff --git a/global.d.ts b/global.d.ts index d40838e203..9ea5830745 100644 --- a/global.d.ts +++ b/global.d.ts @@ -1,3 +1,115 @@ interface Window { _hsq?: any[]; } + +// --------------------------------------------------------------------------- +// fumadocs-mdx collection module declarations +// TypeScript cannot resolve the `?collection=<name>` query-parameter suffix as +// a file path, so dynamic imports like +// import("@/content/docs/foo.mdx?collection=docs") +// fail type-checking even though the Turbopack/webpack loader handles them at +// build time. Declaring a wildcard ambient module for each collection tells +// TypeScript the shape of the default export without suppressing all type- +// checking in the consuming files. +// --------------------------------------------------------------------------- +type _MDXCollectionModule = { + default: import("react").ComponentType<{ + components?: Record<string, import("react").ComponentType>; + }>; +}; + +declare module "*.mdx?collection=docs" { + const mod: _MDXCollectionModule; + export = mod; +} +declare module "*.mdx?collection=blog" { + const mod: _MDXCollectionModule; + export = mod; +} +declare module "*.mdx?collection=changelog" { + const mod: _MDXCollectionModule; + export = mod; +} +declare module "*.mdx?collection=customers" { + const mod: _MDXCollectionModule; + export = mod; +} +declare module "*.mdx?collection=faq" { + const mod: _MDXCollectionModule; + export = mod; +} +declare module "*.mdx?collection=guides" { + const mod: _MDXCollectionModule; + export = mod; +} +declare module "*.mdx?collection=handbook" { + const mod: _MDXCollectionModule; + export = mod; +} +declare module "*.mdx?collection=integrations" { + const mod: _MDXCollectionModule; + export = mod; +} +declare module "*.mdx?collection=library" { + const mod: _MDXCollectionModule; + export = mod; +} +declare module "*.mdx?collection=marketing" { + const mod: _MDXCollectionModule; + export = mod; +} +declare module "*.mdx?collection=security" { + const mod: _MDXCollectionModule; + export = mod; +} +declare module "*.mdx?collection=selfHosting" { + const mod: _MDXCollectionModule; + export = mod; +} + +// --------------------------------------------------------------------------- +// fumadocs-mdx .md collection modules (same pattern as .mdx above) +// Some guides/integrations use plain .md extension instead of .mdx +// --------------------------------------------------------------------------- +declare module "*.md?collection=docs" { const mod: _MDXCollectionModule; export = mod; } +declare module "*.md?collection=blog" { const mod: _MDXCollectionModule; export = mod; } +declare module "*.md?collection=changelog" { const mod: _MDXCollectionModule; export = mod; } +declare module "*.md?collection=customers" { const mod: _MDXCollectionModule; export = mod; } +declare module "*.md?collection=faq" { const mod: _MDXCollectionModule; export = mod; } +declare module "*.md?collection=guides" { const mod: _MDXCollectionModule; export = mod; } +declare module "*.md?collection=handbook" { const mod: _MDXCollectionModule; export = mod; } +declare module "*.md?collection=integrations" { const mod: _MDXCollectionModule; export = mod; } +declare module "*.md?collection=library" { const mod: _MDXCollectionModule; export = mod; } +declare module "*.md?collection=marketing" { const mod: _MDXCollectionModule; export = mod; } +declare module "*.md?collection=security" { const mod: _MDXCollectionModule; export = mod; } +declare module "*.md?collection=selfHosting" { const mod: _MDXCollectionModule; export = mod; } + +// --------------------------------------------------------------------------- +// @modelcontextprotocol/sdk subpath that TypeScript can't resolve via wildcard +// exports (the package uses "./*" → "./dist/esm/*" but no "types" condition). +// We re-declare only the exports that the project actually uses. +// --------------------------------------------------------------------------- +declare module "@modelcontextprotocol/sdk/client/streamableHttp" { + export class StreamableHTTPError extends Error { + readonly code: number | undefined; + constructor(code: number | undefined, message: string | undefined); + } + export type StreamableHTTPClientTransportOptions = { + authProvider?: unknown; + requestInit?: RequestInit; + sessionId?: string; + }; + export class StreamableHTTPClientTransport { + onclose?: () => void; + onerror?: (error: Error) => void; + onmessage?: (message: unknown) => void; + constructor(url: URL, opts?: StreamableHTTPClientTransportOptions); + start(): Promise<void>; + close(): Promise<void>; + send(message: unknown, options?: unknown): Promise<void>; + terminateSession(): Promise<void>; + setProtocolVersion(version: string): void; + get sessionId(): string | undefined; + get protocolVersion(): string | undefined; + } +} diff --git a/lib/handbook-meta.ts b/lib/handbook-meta.ts new file mode 100644 index 0000000000..6c01428124 --- /dev/null +++ b/lib/handbook-meta.ts @@ -0,0 +1,27 @@ +/** + * Formerly from pages/handbook/chapters/_meta and pages/handbook/_meta. + * CHAPTER_ORDER: order of chapter slugs for display. + * TEAMS: handbook section paths with display name and first page. + */ +export const CHAPTER_ORDER = [ + "mission", + "story", + "why", + "customers", + "open-source", + "monetization", + "team", +]; + +export const TEAMS: Record<string, { name: string; firstPage: string }> = { + "product-engineering": { name: "Product & Engineering", firstPage: "architecture" }, + "sales-and-cs": { name: "Sales & Customer Success", firstPage: "overview" }, + support: { name: "Support", firstPage: "support" }, + devrel: { name: "Developer Relations", firstPage: "community-hour" }, + operations: { name: "Operations", firstPage: "finance" }, + "how-we-work": { name: "How we work", firstPage: "principles" }, + "how-we-hire": { name: "How we hire", firstPage: "philosophy" }, + "perks-and-pay": { name: "Perks & Pay", firstPage: "perks-and-pay" }, + "tools-and-processes": { name: "Tools & Processes", firstPage: "using-linear" }, + chapters: { name: "Chapters", firstPage: "mission" }, +}; diff --git a/pages/api/inkeep-search.ts b/lib/inkeep-search.ts similarity index 100% rename from pages/api/inkeep-search.ts rename to lib/inkeep-search.ts diff --git a/lib/integrations-meta.ts b/lib/integrations-meta.ts new file mode 100644 index 0000000000..18f094d95e --- /dev/null +++ b/lib/integrations-meta.ts @@ -0,0 +1,7 @@ +/** + * Formerly from pages/integrations/native/_meta and data-platform/_meta. + * Used by IntegrationIndex for additional links. Empty = use only filesystem pages. + */ +type MetaEntry = { href?: string; title?: string; logo?: string }; +export const nativeIntegrationsMeta: Record<string, MetaEntry> = {}; +export const dataPlatformIntegrationsMeta: Record<string, MetaEntry> = {}; diff --git a/pages/api/mcp.ts b/lib/mcp-handler.ts similarity index 51% rename from pages/api/mcp.ts rename to lib/mcp-handler.ts index aa6a88aebd..bb6f3f91aa 100644 --- a/pages/api/mcp.ts +++ b/lib/mcp-handler.ts @@ -1,12 +1,9 @@ -// pages/api/mcp.ts import { createMcpHandler } from "@vercel/mcp-adapter"; import * as z from "zod/v3"; -import type { NextApiRequest, NextApiResponse } from "next"; import { PostHog } from "posthog-node"; import { waitUntil } from "@vercel/functions"; -import { searchLangfuseDocsWithInkeep } from "./inkeep-search"; +import { searchLangfuseDocsWithInkeep } from "@/lib/inkeep-search"; -// Initialize PostHog client for server-side tracking const posthog = process.env.NEXT_PUBLIC_POSTHOG_KEY ? new PostHog(process.env.NEXT_PUBLIC_POSTHOG_KEY, { host: process.env.NEXT_PUBLIC_POSTHOG_HOST || "https://eu.posthog.com", @@ -15,11 +12,10 @@ const posthog = process.env.NEXT_PUBLIC_POSTHOG_KEY }) : undefined; -// Helper function for PostHog tracking const trackMcpToolUsage = async ( toolName: string, status: "success" | "error", - properties: Record<string, any> = {} + properties: Record<string, unknown> = {} ) => { return waitUntil( (async () => { @@ -29,13 +25,11 @@ const trackMcpToolUsage = async ( event: "docs_mcp:execute_tool", properties: { tool_name: toolName, - status: status, + status, $process_person_profile: false, ...properties, }, }); - - // Ensure events are flushed before function shutdown await posthog?.flush(); } catch (error) { console.error("Error tracking PostHog event:", error); @@ -44,52 +38,35 @@ const trackMcpToolUsage = async ( ); }; -// Create the MCP handler using Vercel's adapter -const mcpHandler = createMcpHandler( +export const mcpHandler = createMcpHandler( (server) => { - // @ts-ignore - server.tool( + (server as any).tool( "searchLangfuseDocs", "Semantic search (RAG) over the Langfuse documentation. Use this whenever the user asks a broader question that cannot be answered by a specific single page. Returns a concise answer synthesized from relevant docs. The raw provider response is included in _meta. Prefer this before guessing. If a specific page is needed call getLangfuseDocsPage first.", { - query: z.string().describe("The user’s question in natural language. Include helpful context like SDK/language (e.g., Python v3, JS v4), self-hosted vs cloud, and short error messages (trim long stack traces). Keep under ~600 characters."), + query: z.string().describe("The user's question in natural language. Include helpful context like SDK/language (e.g., Python v3, JS v4), self-hosted vs cloud, and short error messages (trim long stack traces). Keep under ~600 characters."), }, async ({ query }) => { try { const inkeepResult = await searchLangfuseDocsWithInkeep(query); - - // Track successful MCP tool event trackMcpToolUsage("searchLangfuseDocs", "success", { - query: query, + query, response_length: inkeepResult.answer.length, }); - - // Return the actual documentation content in MCP format return { - content: [ - { - type: "text", - text: inkeepResult.answer, - }, - ], - // Include the full Inkeep response as structured data for debugging + content: [{ type: "text", text: inkeepResult.answer }], _meta: inkeepResult.metadata, }; } catch (error) { - // Track error MCP tool event trackMcpToolUsage("searchLangfuseDocs", "error", { - query: query, - error_message: - error instanceof Error ? error.message : "Unknown error", + query, + error_message: error instanceof Error ? error.message : "Unknown error", }); - return { content: [ { type: "text", - text: `Error searching documentation: ${ - error instanceof Error ? error.message : "Unknown error" - }`, + text: `Error searching documentation: ${error instanceof Error ? error.message : "Unknown error"}`, }, ], isError: true, @@ -98,19 +75,17 @@ const mcpHandler = createMcpHandler( } ); - // Define the getLangfuseDocsPage tool - // @ts-ignore - server.tool( + (server as any).tool( "getLangfuseDocsPage", "Fetch the raw Markdown for a single Langfuse docs page. Accepts a docs path (e.g., /docs/observability/overview) or a full https://langfuse.com URL. Returns the exact Markdown (may include front matter). Use when you need a specific page content (Integration, Features, API, etc.) or code samples. Prefer searchLangfuseDocs for broader questions where there is not one specific page about it.", { pathOrUrl: z .string() .describe( - "Docs path starting with “/” (e.g., /docs/observability/overview) or a full URL on https://langfuse.com. Do not include anchors (#...) or queries (?foo=bar) — they will be ignored." + "Docs path starting with \"/\" (e.g., /docs/observability/overview) or a full URL on https://langfuse.com. Do not include anchors (#...) or queries (?foo=bar) — they will be ignored." ), }, - async ({ pathOrUrl }) => { + async ({ pathOrUrl }: { pathOrUrl: string }) => { const normalizePath = (input: string): string => { try { if (/^https?:\/\//i.test(input)) { @@ -118,15 +93,12 @@ const mcpHandler = createMcpHandler( return u.pathname || "/"; } } catch {} - // Ensure leading slash return input.startsWith("/") ? input : `/${input}`; }; try { const pathname = normalizePath(pathOrUrl.trim()); - // If already ends with .md, use as-is; else append .md const mdPath = pathname.endsWith(".md") ? pathname : `${pathname}.md`; - // Always fetch from production domain (mirrors static build output) const base = "https://langfuse.com"; const mdUrl = `${base}${mdPath}`; @@ -144,27 +116,19 @@ const mcpHandler = createMcpHandler( }); return { - content: [ - { - type: "text", - text: markdown, - }, - ], + content: [{ type: "text", text: markdown }], _meta: { url: mdUrl }, }; } catch (error) { trackMcpToolUsage("getLangfuseDocsPage", "error", { input: pathOrUrl, - error_message: - error instanceof Error ? error.message : "Unknown error", + error_message: error instanceof Error ? error.message : "Unknown error", }); return { content: [ { type: "text", - text: `Error fetching docs page markdown: ${ - error instanceof Error ? error.message : "Unknown error" - }`, + text: `Error fetching docs page markdown: ${error instanceof Error ? error.message : "Unknown error"}`, }, ], isError: true, @@ -173,53 +137,32 @@ const mcpHandler = createMcpHandler( } ); - // Define the getLangfuseOverview tool - // @ts-ignore - server.tool( + (server as any).tool( "getLangfuseOverview", - "Get a high-level, machine-readable index by downloading https://langfuse.com/llms.txt. Use this at the start of a session when needed to discover key docs endpoints or to seed follow-up calls to searchLangfuseDocs or getLangfuseDocsPage.Returns the plain text contents of llms.txt. Avoid repeated calls within the same session.", - { - // No parameters needed for this tool - }, + "Get a high-level, machine-readable index by downloading https://langfuse.com/llms.txt. Use this at the start of a session when needed to discover key docs endpoints or to seed follow-up calls to searchLangfuseDocs or getLangfuseDocsPage. Returns the plain text contents of llms.txt. Avoid repeated calls within the same session.", + {}, async () => { try { - // Fetch the llms.txt file from langfuse.com const llmsTxtRes = await fetch("https://langfuse.com/llms.txt"); - if (!llmsTxtRes.ok) { throw new Error(`Failed to fetch llms.txt: ${llmsTxtRes.status}`); } - const llmsTxtContent = await llmsTxtRes.text(); - - // Track successful MCP tool event trackMcpToolUsage("getLangfuseOverview", "success", { content_length: llmsTxtContent.length, }); - - // Return the llms.txt content in MCP format return { - content: [ - { - type: "text", - text: llmsTxtContent, - }, - ], + content: [{ type: "text", text: llmsTxtContent }], }; } catch (error) { - // Track error MCP tool event trackMcpToolUsage("getLangfuseOverview", "error", { - error_message: - error instanceof Error ? error.message : "Unknown error", + error_message: error instanceof Error ? error.message : "Unknown error", }); - return { content: [ { type: "text", - text: `Error fetching Langfuse overview: ${ - error instanceof Error ? error.message : "Unknown error" - }`, + text: `Error fetching Langfuse overview: ${error instanceof Error ? error.message : "Unknown error"}`, }, ], isError: true, @@ -228,66 +171,6 @@ const mcpHandler = createMcpHandler( } ); }, - { - // Server options (empty for now) - }, - { - // Adapter config - basePath: "/api", - maxDuration: 60, - verboseLogs: true, - } + {}, + { basePath: "/api", maxDuration: 60, verboseLogs: true } ); - -// Wrapper function to adapt App Router handler to Pages Router -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - // Create a Request object from NextApiRequest - const url = new URL(req.url || "", `http://${req.headers.host}`); - const requestInit: RequestInit = { - method: req.method, - headers: req.headers as HeadersInit, - body: - req.method === "GET" || req.method === "HEAD" - ? null - : JSON.stringify(req.body), - }; - - const request = new Request(url.toString(), requestInit); - - // Call the MCP handler (it handles all methods internally) - let response: Response; - - try { - response = await mcpHandler(request); - } catch (error) { - console.error("MCP Handler Error:", error); - res.status(500).json({ error: "Internal server error" }); - return; - } - - // Convert Response back to NextApiResponse - const body = await response.text(); - - // Set headers - response.headers.forEach((value, key) => { - res.setHeader(key, value); - }); - - // Set status and send response - res.status(response.status); - - if (body) { - // Try to parse as JSON, otherwise send as text - try { - const jsonBody = JSON.parse(body); - res.json(jsonBody); - } catch { - res.send(body); - } - } else { - res.end(); - } -} diff --git a/lib/nav-tree.ts b/lib/nav-tree.ts new file mode 100644 index 0000000000..c22b35b5c6 --- /dev/null +++ b/lib/nav-tree.ts @@ -0,0 +1,74 @@ +export interface NavTreeItem { + type: "page" | "separator" | "folder"; + name: string; + url?: string; + children?: NavTreeItem[]; +} + +export interface SectionNavData { + name: string; + href: string; + children: NavTreeItem[]; +} + +interface TreeNode { + type: string; + name?: unknown; + url?: string; + index?: { url: string }; + children?: TreeNode[]; +} + +/** Find the first navigable page URL in a list of tree nodes. */ +function findFirstPageUrl(nodes: TreeNode[]): string | undefined { + for (const node of nodes) { + if (node.type === "page" && node.url) return node.url; + if (node.type === "folder") { + if (node.index?.url) return node.index.url; + if (node.children) { + const url = findFirstPageUrl(node.children); + if (url) return url; + } + } + } + return undefined; +} + +/** + * Recursively serialize fumadocs page tree nodes into plain objects + * suitable for passing from server components to client components. + */ +export function serializePageTree(root: { + children: TreeNode[]; +}): NavTreeItem[] { + return serializeNodes(root.children); +} + +function serializeNodes(nodes: TreeNode[]): NavTreeItem[] { + return nodes + .map((node): NavTreeItem | null => { + const name = typeof node.name === "string" ? node.name : ""; + + switch (node.type) { + case "separator": + return { type: "separator", name }; + case "page": + return name && node.url + ? { type: "page", name, url: node.url } + : null; + case "folder": { + if (!name) return null; + const url = + node.index?.url ?? + (node.children ? findFirstPageUrl(node.children) : undefined); + const children = node.children + ? serializeNodes(node.children) + : []; + return { type: "folder", name, url, children }; + } + default: + return null; + } + }) + .filter((item): item is NavTreeItem => item !== null); +} diff --git a/lib/nextra-shim/components.tsx b/lib/nextra-shim/components.tsx new file mode 100644 index 0000000000..88b8efad49 --- /dev/null +++ b/lib/nextra-shim/components.tsx @@ -0,0 +1,296 @@ +/** + * Shim for nextra/components (Cards, Tabs, Callout) so existing components render. + * Re-export Fumadocs or simple equivalents where possible. + */ +"use client"; + +import * as React from "react"; +import { cn } from "@/lib/utils"; +import { + Tabs as FumadocsTabs, + TabsList as FumadocsTabsListPrimitive, + TabsContent as FumadocsTabsContent, + TabsTrigger as FumadocsTabsTriggerPrimitive, +} from "fumadocs-ui/components/ui/tabs"; + +const FumadocsTabsList = React.forwardRef< + HTMLDivElement, + React.ComponentProps<typeof FumadocsTabsListPrimitive> +>(({ className, ...props }, ref) => ( + <FumadocsTabsListPrimitive + ref={ref} + className={cn( + "flex gap-3.5 text-fd-secondary-foreground overflow-x-auto px-4 not-prose", + className + )} + {...props} + /> +)); +FumadocsTabsList.displayName = "FumadocsTabsList"; + +const FumadocsTabsTrigger = React.forwardRef< + HTMLButtonElement, + React.ComponentProps<typeof FumadocsTabsTriggerPrimitive> +>(({ className, value, ...props }, ref) => ( + <FumadocsTabsTriggerPrimitive + ref={ref} + value={value} + className={cn( + "inline-flex items-center gap-2 whitespace-nowrap text-fd-muted-foreground border-b border-transparent py-2 text-sm font-medium transition-colors hover:text-fd-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=active]:border-fd-primary data-[state=active]:text-fd-primary", + className + )} + {...props} + /> +)); +FumadocsTabsTrigger.displayName = "FumadocsTabsTrigger"; + +function toValue(s: string): string { + return s.toLowerCase().replace(/\s/g, "-"); +} + +const CardComponent = ({ + children, + title, + href, + icon, + arrow, + ...rest +}: { + children?: React.ReactNode; + title?: string; + href?: string; + icon?: React.ReactNode; + arrow?: boolean; +} & React.AnchorHTMLAttributes<HTMLAnchorElement>) => ( + <a + href={href} + className="block rounded-lg border p-4 hover:border-primary" + {...rest} + > + {icon && <span className="mb-2 block">{icon}</span>} + {title && <h3 className="font-semibold">{title}</h3>} + {children} + </a> +); + +/** Wrapper for card grids; accepts num (columns) and does not forward it to the DOM. */ +export function Cards({ + num, + children, + className, + ...rest +}: { num?: number; children?: React.ReactNode } & React.HTMLAttributes<HTMLDivElement>) { + const colsClass = + num === 1 + ? "grid-cols-1" + : num === 2 + ? "grid-cols-1 sm:grid-cols-2" + : "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3"; + return ( + <div + className={cn("grid gap-4 not-prose my-4", colsClass, className)} + {...rest} + > + {children} + </div> + ); +} + +Cards.Card = CardComponent; + +/** Tab panel: receives value from Tabs by position, or use title/value prop. */ +export const Tab = ({ + value: valueProp, + title, + className, + children, + ...props +}: React.ComponentProps<typeof FumadocsTabsContent> & { title?: string }) => { + const value = valueProp ?? (title != null ? toValue(title) : undefined); + return ( + <FumadocsTabsContent + value={value!} + className={cn("p-4 prose-no-margin", className)} + {...props} + > + {children} + </FumadocsTabsContent> + ); +}; + +/** Tabs root: accepts items (labels) and injects value into each Tab by order. */ +export function Tabs({ + items = [], + id, + persist, + defaultIndex = 0, + selectedIndex, + onChange, + storageKey: _storageKey, + children, +}: { + items?: string[]; + id?: string; + persist?: boolean; + defaultIndex?: number; + /** Controlled mode: externally managed tab index (for LangTabs) */ + selectedIndex?: number; + /** Controlled mode: called when user selects a tab (receives numeric index) */ + onChange?: (index: number) => void; + /** Ignored — provided for API compatibility with older Nextra Tabs */ + storageKey?: string; + children?: React.ReactNode; +}) { + const values = React.useMemo(() => items.map(toValue), [items]); + const [internalValue, setInternalValue] = React.useState( + values[defaultIndex] ?? values[0] + ); + React.useEffect(() => { + if (!id || !persist) return; + const stored = localStorage.getItem(id); + if (stored && values.includes(stored)) setInternalValue(stored); + }, [id, persist, values]); + + // Controlled mode: if selectedIndex provided, use it; otherwise fall back to + // internal state driven by user clicks. + const controlledValue = + selectedIndex !== undefined ? values[selectedIndex] ?? values[0] : undefined; + const value = controlledValue ?? internalValue; + + const onValueChange = React.useCallback( + (v: string) => { + if (id && persist) localStorage.setItem(id, v); + setInternalValue(v); + if (onChange) { + const idx = values.indexOf(v); + if (idx !== -1) onChange(idx); + } + }, + [id, persist, onChange, values] + ); + + const tabChildren = React.Children.map(children, (child, i) => { + if (!React.isValidElement(child) || child.type !== Tab) return child; + const injectedValue = values[i]; + // Always use injectedValue (position-based) unless explicit value prop is set. + // Title-based derivation is NOT used here because the tab label in `items` may + // differ from the Tab's `title` prop (e.g. items="Python SDK" but title="Python SDK (v3)"). + const resolved = child.props.value ?? injectedValue; + if (resolved == null) return child; + return React.cloneElement(child as React.ReactElement<{ value: string }>, { value: resolved }); + }); + + return ( + <FumadocsTabs + value={value} + onValueChange={onValueChange} + className="flex flex-col overflow-hidden rounded-xl border bg-fd-secondary my-4" + > + <FumadocsTabsList> + {items.map((item, i) => ( + <FumadocsTabsTrigger key={i} value={values[i]}> + {item} + </FumadocsTabsTrigger> + ))} + </FumadocsTabsList> + {tabChildren} + </FumadocsTabs> + ); +} + +// Compound component: MDX uses <Tabs.Tab> (e.g. integration-learn-more.mdx), so Tabs.Tab must be defined. +(Tabs as React.FunctionComponent & { Tab: typeof Tab }).Tab = Tab; + +export const Callout = ({ + children, + type = "info", + ...props +}: { children?: React.ReactNode; type?: string; emoji?: string } & React.ComponentProps<"div">) => ( + <div + className={`rounded-lg border p-4 my-4 ${ + type === "info" ? "border-blue-200 bg-blue-50 dark:border-blue-800 dark:bg-blue-950/50" : type === "warning" ? "border-amber-200 bg-amber-50 dark:border-amber-800 dark:bg-amber-950/50" : "border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-900/50" + }`} + {...props} + > + {children} + </div> +); + +/** Renders markdown/code source in a scrollable code block (Nextra Playground-style). */ +export const Playground = ({ source }: { source: string }) => ( + <pre className="p-4 overflow-auto rounded-lg border bg-muted/50 text-sm max-h-[70vh]"> + <code>{source}</code> + </pre> +); + +/** Numbered step list — wraps children in a styled ordered-list container. */ +export function Steps({ children, ...props }: { children?: React.ReactNode } & React.HTMLAttributes<HTMLDivElement>) { + return ( + <div className="steps ml-4 border-l pl-8 [counter-reset:step]" {...props}> + {children} + </div> + ); +} + +const FileTreeFile = ({ + name, + active, +}: { + name: string; + active?: boolean; +}) => ( + <li className="flex items-center gap-1.5 py-0.5 text-sm"> + <svg viewBox="0 0 16 16" className="h-4 w-4 shrink-0 text-muted-foreground" fill="currentColor"> + <path d="M2 2.5A2.5 2.5 0 014.5 0h7A2.5 2.5 0 0114 2.5v11a2.5 2.5 0 01-2.5 2.5h-7A2.5 2.5 0 012 13.5V2.5z" /> + </svg> + <span className={active ? "font-semibold" : ""}>{name}</span> + </li> +); + +const FileTreeFolder = ({ + name, + children, + defaultOpen = false, +}: { + name: string; + children?: React.ReactNode; + defaultOpen?: boolean; +}) => { + const [open, setOpen] = React.useState(defaultOpen); + return ( + <li className="py-0.5"> + <button + className="flex items-center gap-1.5 text-sm hover:text-foreground" + onClick={() => setOpen((v) => !v)} + type="button" + > + <svg + viewBox="0 0 16 16" + className={`h-4 w-4 shrink-0 text-muted-foreground transition-transform ${open ? "rotate-90" : ""}`} + fill="currentColor" + > + <path d="M6 3l5 5-5 5V3z" /> + </svg> + <svg viewBox="0 0 16 16" className="h-4 w-4 shrink-0 text-muted-foreground" fill="currentColor"> + <path d="M1.75 1A1.75 1.75 0 000 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0016 13.25v-8.5A1.75 1.75 0 0014.25 3H7.5L6.25 1h-4.5z" /> + </svg> + <span>{name}</span> + </button> + {open && children && ( + <ul className="ml-5 border-l pl-2 mt-0.5">{children}</ul> + )} + </li> + ); +}; + +/** File-tree component matching Nextra's FileTree API. */ +export function FileTree({ children }: { children?: React.ReactNode }) { + return ( + <ul className="not-prose rounded-lg border p-4 font-mono text-sm my-4 [&_ul]:mt-0.5"> + {children} + </ul> + ); +} + +FileTree.File = FileTreeFile; +FileTree.Folder = FileTreeFolder; diff --git a/lib/nextra-shim/context.tsx b/lib/nextra-shim/context.tsx new file mode 100644 index 0000000000..ef9af9caab --- /dev/null +++ b/lib/nextra-shim/context.tsx @@ -0,0 +1,22 @@ +/** + * Shim for nextra/context. Uses Fumadocs sources so index components get real data + * when routes are served from App Router (content/*). + */ +import type React from "react"; +import { getPagesForRoute } from "@/lib/source"; + +export function getPagesUnderRoute(route: string): Array<{ + name?: string; + route?: string; + title?: string; + frontMatter?: Record<string, unknown>; + children?: React.ReactNode; +}> { + const pages = getPagesForRoute(route); + return pages.map((p) => ({ + name: p.name, + route: p.route, + title: p.title, + frontMatter: p.frontMatter, + })); +} diff --git a/lib/nextra-shim/hooks.ts b/lib/nextra-shim/hooks.ts new file mode 100644 index 0000000000..ddabc42b28 --- /dev/null +++ b/lib/nextra-shim/hooks.ts @@ -0,0 +1,8 @@ +/** + * Shim for nextra/hooks. useData() was used with getStaticProps in Nextra; + * Fumadocs/App Router does not use getStaticProps for MDX, so we return an empty object. + * Pages that need runtime data should use client-side fetch (e.g. a dedicated component). + */ +export function useData(): Record<string, unknown> { + return {}; +} diff --git a/lib/nextra-shim/nextra-types.ts b/lib/nextra-shim/nextra-types.ts new file mode 100644 index 0000000000..dc14d6d15a --- /dev/null +++ b/lib/nextra-shim/nextra-types.ts @@ -0,0 +1,15 @@ +import type React from "react"; + +/** + * Shim for nextra Page type + */ +export type Page = { + name?: string; + // route is always present on real Nextra/fumadocs pages returned by + // getPagesUnderRoute / getPagesForRoute; making it required here prevents + // downstream type errors when callers require a non-optional route. + route: string; + title?: string; + frontMatter?: Record<string, unknown>; + children?: React.ReactNode; +}; diff --git a/lib/nextra-shim/theme-docs.tsx b/lib/nextra-shim/theme-docs.tsx new file mode 100644 index 0000000000..9516fcf5cb --- /dev/null +++ b/lib/nextra-shim/theme-docs.tsx @@ -0,0 +1,15 @@ +/** + * Shim for nextra-theme-docs useConfig + */ +import type React from "react"; + +export function useConfig(): { + frontMatter: Record<string, unknown>; + title?: string; +} { + return { frontMatter: {}, title: undefined }; +} + +export function useTheme(): { resolvedTheme?: string; setTheme?: (t: string) => void } { + return { resolvedTheme: "light" }; +} diff --git a/lib/redirects.js b/lib/redirects.js index 5b5d91a616..0c02ea101b 100644 --- a/lib/redirects.js +++ b/lib/redirects.js @@ -9,6 +9,10 @@ // All redirects that should be non-permanent such as temporary /launch pages const nonPermanentRedirects = [ + // /customers renamed to /users + ["/customers", "/users"], + ["/customers/:path*", "/users/:path*"], + ["/launch", "/blog/2025-10-29-launch-week-4"], [ "/loom-gpt4-PR", diff --git a/lib/remark-to-markdown-extensions.mjs b/lib/remark-to-markdown-extensions.mjs new file mode 100644 index 0000000000..c742274912 --- /dev/null +++ b/lib/remark-to-markdown-extensions.mjs @@ -0,0 +1,18 @@ +/** + * Remark plugin that registers the MDX JSX to-markdown extension. + * This fixes "Cannot handle unknown node 'mdxJsxFlowElement'" when Fumadocs + * serializes ASTs that contain JSX (e.g. pages that import MDX components). + */ +import { mdxJsxToMarkdown } from "mdast-util-mdx-jsx"; + +export function remarkToMarkdownExtensions() { + const self = this; + const data = self.data(); + data.toMarkdownExtensions = [ + ...(data.toMarkdownExtensions ?? []), + mdxJsxToMarkdown(), + ]; + return function () { + /* no-op transformer; we only set processor data */ + }; +} diff --git a/lib/section-loaders.generated.ts b/lib/section-loaders.generated.ts new file mode 100644 index 0000000000..124fc0c568 --- /dev/null +++ b/lib/section-loaders.generated.ts @@ -0,0 +1,721 @@ +"use client"; + +import type { ComponentType } from 'react'; + +/** Generated by scripts/generate-section-loaders.js */ +export const sectionLoaders: Record< + string, + Record<string, () => Promise<{ default: ComponentType<{ components?: Record<string, ComponentType> }> }>> +> = { + "selfHosting": { + "administration/automated-access-provisioning": () => import("@/content/self-hosting/administration/automated-access-provisioning.mdx?collection=selfHosting"), + "administration/headless-initialization": () => import("@/content/self-hosting/administration/headless-initialization.mdx?collection=selfHosting"), + "administration/index": () => import("@/content/self-hosting/administration/index.mdx?collection=selfHosting"), + "administration/instance-management-api": () => import("@/content/self-hosting/administration/instance-management-api.mdx?collection=selfHosting"), + "administration/organization-creators": () => import("@/content/self-hosting/administration/organization-creators.mdx?collection=selfHosting"), + "administration/ui-customization": () => import("@/content/self-hosting/administration/ui-customization.mdx?collection=selfHosting"), + "configuration/backups": () => import("@/content/self-hosting/configuration/backups.mdx?collection=selfHosting"), + "configuration/caching": () => import("@/content/self-hosting/configuration/caching.mdx?collection=selfHosting"), + "configuration/custom-base-path": () => import("@/content/self-hosting/configuration/custom-base-path.mdx?collection=selfHosting"), + "configuration/encryption": () => import("@/content/self-hosting/configuration/encryption.mdx?collection=selfHosting"), + "configuration/health-readiness-endpoints": () => import("@/content/self-hosting/configuration/health-readiness-endpoints.mdx?collection=selfHosting"), + "configuration/index": () => import("@/content/self-hosting/configuration/index.mdx?collection=selfHosting"), + "configuration/observability": () => import("@/content/self-hosting/configuration/observability.mdx?collection=selfHosting"), + "configuration/scaling": () => import("@/content/self-hosting/configuration/scaling.mdx?collection=selfHosting"), + "configuration/transactional-emails": () => import("@/content/self-hosting/configuration/transactional-emails.mdx?collection=selfHosting"), + "deployment/aws": () => import("@/content/self-hosting/deployment/aws.mdx?collection=selfHosting"), + "deployment/azure": () => import("@/content/self-hosting/deployment/azure.mdx?collection=selfHosting"), + "deployment/docker-compose": () => import("@/content/self-hosting/deployment/docker-compose.mdx?collection=selfHosting"), + "deployment/gcp": () => import("@/content/self-hosting/deployment/gcp.mdx?collection=selfHosting"), + "deployment/infrastructure/blobstorage": () => import("@/content/self-hosting/deployment/infrastructure/blobstorage.mdx?collection=selfHosting"), + "deployment/infrastructure/cache": () => import("@/content/self-hosting/deployment/infrastructure/cache.mdx?collection=selfHosting"), + "deployment/infrastructure/clickhouse": () => import("@/content/self-hosting/deployment/infrastructure/clickhouse.mdx?collection=selfHosting"), + "deployment/infrastructure/containers": () => import("@/content/self-hosting/deployment/infrastructure/containers.mdx?collection=selfHosting"), + "deployment/infrastructure/llm-api": () => import("@/content/self-hosting/deployment/infrastructure/llm-api.mdx?collection=selfHosting"), + "deployment/infrastructure/postgres": () => import("@/content/self-hosting/deployment/infrastructure/postgres.mdx?collection=selfHosting"), + "deployment/kubernetes-helm": () => import("@/content/self-hosting/deployment/kubernetes-helm.mdx?collection=selfHosting"), + "deployment/railway": () => import("@/content/self-hosting/deployment/railway.mdx?collection=selfHosting"), + "": () => import("@/content/self-hosting/index.mdx?collection=selfHosting"), + "license-key": () => import("@/content/self-hosting/license-key.mdx?collection=selfHosting"), + "security/authentication-and-sso": () => import("@/content/self-hosting/security/authentication-and-sso.mdx?collection=selfHosting"), + "security/data-masking": () => import("@/content/self-hosting/security/data-masking.mdx?collection=selfHosting"), + "security/deployment-strategies": () => import("@/content/self-hosting/security/deployment-strategies.mdx?collection=selfHosting"), + "security/networking": () => import("@/content/self-hosting/security/networking.mdx?collection=selfHosting"), + "troubleshooting-and-faq": () => import("@/content/self-hosting/troubleshooting-and-faq.mdx?collection=selfHosting"), + "upgrade/background-migrations": () => import("@/content/self-hosting/upgrade/background-migrations.mdx?collection=selfHosting"), + "upgrade/index": () => import("@/content/self-hosting/upgrade/index.mdx?collection=selfHosting"), + "upgrade/upgrade-guides/upgrade-v1-to-v2": () => import("@/content/self-hosting/upgrade/upgrade-guides/upgrade-v1-to-v2.mdx?collection=selfHosting"), + "upgrade/upgrade-guides/upgrade-v2-to-v3": () => import("@/content/self-hosting/upgrade/upgrade-guides/upgrade-v2-to-v3.mdx?collection=selfHosting"), + "upgrade/versioning": () => import("@/content/self-hosting/upgrade/versioning.mdx?collection=selfHosting"), + "v2/deployment-guide": () => import("@/content/self-hosting/v2/deployment-guide.mdx?collection=selfHosting"), + "v2/docker-compose": () => import("@/content/self-hosting/v2/docker-compose.mdx?collection=selfHosting"), + "v2/index": () => import("@/content/self-hosting/v2/index.mdx?collection=selfHosting"), + }, + "blog": { + "2024-04-introducing-langfuse-2.0": () => import("@/content/blog/2024-04-introducing-langfuse-2.0.mdx?collection=blog"), + "2024-04-python-decorator": () => import("@/content/blog/2024-04-python-decorator.mdx?collection=blog"), + "2024-05-haystack-integration": () => import("@/content/blog/2024-05-haystack-integration.mdx?collection=blog"), + "2024-06-monitoring-llm-security": () => import("@/content/blog/2024-06-monitoring-llm-security.mdx?collection=blog"), + "2024-07-ai-agent-observability-with-langfuse": () => import("@/content/blog/2024-07-ai-agent-observability-with-langfuse.mdx?collection=blog"), + "2024-07-dify-langfuse-integration": () => import("@/content/blog/2024-07-dify-langfuse-integration.mdx?collection=blog"), + "2024-08-what-is-langchain": () => import("@/content/blog/2024-08-what-is-langchain.mdx?collection=blog"), + "2024-09-langfuse-proxy": () => import("@/content/blog/2024-09-langfuse-proxy.mdx?collection=blog"), + "2024-10-observability-in-multi-step-llm-systems": () => import("@/content/blog/2024-10-observability-in-multi-step-llm-systems.mdx?collection=blog"), + "2024-10-opentelemetry-for-llm-observability": () => import("@/content/blog/2024-10-opentelemetry-for-llm-observability.mdx?collection=blog"), + "2024-11-17-launch-week-2": () => import("@/content/blog/2024-11-17-launch-week-2.mdx?collection=blog"), + "2024-11-llm-product-management": () => import("@/content/blog/2024-11-llm-product-management.mdx?collection=blog"), + "2024-11-most-used-oss-llmops": () => import("@/content/blog/2024-11-most-used-oss-llmops.mdx?collection=blog"), + "2024-12-langfuse-v3-infrastructure-evolution": () => import("@/content/blog/2024-12-langfuse-v3-infrastructure-evolution.mdx?collection=blog"), + "2025-01-22-evaluating-voice-ai-agents": () => import("@/content/blog/2025-01-22-evaluating-voice-ai-agents.mdx?collection=blog"), + "2025-02-20-the-agent-deep-dive-open-deep-research": () => import("@/content/blog/2025-02-20-the-agent-deep-dive-open-deep-research.mdx?collection=blog"), + "2025-02-28-langfuse-february-update": () => import("@/content/blog/2025-02-28-langfuse-february-update.mdx?collection=blog"), + "2025-03-04-llm-evaluation-101-best-practices-and-challenges": () => import("@/content/blog/2025-03-04-llm-evaluation-101-best-practices-and-challenges.mdx?collection=blog"), + "2025-03-13-use-hugging-face-together-with-langfuse": () => import("@/content/blog/2025-03-13-use-hugging-face-together-with-langfuse.mdx?collection=blog"), + "2025-03-19-ai-agent-comparison": () => import("@/content/blog/2025-03-19-ai-agent-comparison.mdx?collection=blog"), + "2025-03-31-langfuse-march-update": () => import("@/content/blog/2025-03-31-langfuse-march-update.mdx?collection=blog"), + "2025-04-24-how-we-use-llms-to-scale-langfuse": () => import("@/content/blog/2025-04-24-how-we-use-llms-to-scale-langfuse.mdx?collection=blog"), + "2025-04-30-langfuse-april-update": () => import("@/content/blog/2025-04-30-langfuse-april-update.mdx?collection=blog"), + "2025-05-19-launch-week-3": () => import("@/content/blog/2025-05-19-launch-week-3.mdx?collection=blog"), + "2025-05-21-customizable-dashboards": () => import("@/content/blog/2025-05-21-customizable-dashboards.mdx?collection=blog"), + "2025-05-31-langfuse-may-update": () => import("@/content/blog/2025-05-31-langfuse-may-update.mdx?collection=blog"), + "2025-06-04-open-sourcing-langfuse-product": () => import("@/content/blog/2025-06-04-open-sourcing-langfuse-product.mdx?collection=blog"), + "2025-06-30-langfuse-june-update": () => import("@/content/blog/2025-06-30-langfuse-june-update.mdx?collection=blog"), + "2025-07-31-langfuse-july-update": () => import("@/content/blog/2025-07-31-langfuse-july-update.mdx?collection=blog"), + "2025-08-13-evaluating-model-performance-accross-clouds-with-shadeform-and-langfuse": () => import("@/content/blog/2025-08-13-evaluating-model-performance-accross-clouds-with-shadeform-and-langfuse.mdx?collection=blog"), + "2025-08-29-error-analysis-to-evaluate-llm-applications": () => import("@/content/blog/2025-08-29-error-analysis-to-evaluate-llm-applications.mdx?collection=blog"), + "2025-08-31-langfuse-august-update": () => import("@/content/blog/2025-08-31-langfuse-august-update.mdx?collection=blog"), + "2025-09-05-automated-evaluations": () => import("@/content/blog/2025-09-05-automated-evaluations.mdx?collection=blog"), + "2025-09-30-langfuse-september-update": () => import("@/content/blog/2025-09-30-langfuse-september-update.mdx?collection=blog"), + "2025-10-09-evaluating-multi-turn-conversations": () => import("@/content/blog/2025-10-09-evaluating-multi-turn-conversations.mdx?collection=blog"), + "2025-10-13-state-of-llms-september-2025": () => import("@/content/blog/2025-10-13-state-of-llms-september-2025.mdx?collection=blog"), + "2025-10-21-testing-llm-applications": () => import("@/content/blog/2025-10-21-testing-llm-applications.mdx?collection=blog"), + "2025-10-28-rag-observability-and-evals": () => import("@/content/blog/2025-10-28-rag-observability-and-evals.mdx?collection=blog"), + "2025-10-29-launch-week-4": () => import("@/content/blog/2025-10-29-launch-week-4.mdx?collection=blog"), + "2025-11-06-experiment-interpretation": () => import("@/content/blog/2025-11-06-experiment-interpretation.mdx?collection=blog"), + "2025-11-12-evals": () => import("@/content/blog/2025-11-12-evals.mdx?collection=blog"), + "2025-11-20-incident-report": () => import("@/content/blog/2025-11-20-incident-report.mdx?collection=blog"), + "2025-11-25-vibe-coding-custom-annotation-ui": () => import("@/content/blog/2025-11-25-vibe-coding-custom-annotation-ui.mdx?collection=blog"), + "2025-11-30-langfuse-november-update": () => import("@/content/blog/2025-11-30-langfuse-november-update.mdx?collection=blog"), + "2025-12-09-building-langfuse-mcp-server": () => import("@/content/blog/2025-12-09-building-langfuse-mcp-server.mdx?collection=blog"), + "2026-02-13-will-you-be-my-cli": () => import("@/content/blog/2026-02-13-will-you-be-my-cli.mdx?collection=blog"), + "2026-02-16-prompt-improvement-claude-skills": () => import("@/content/blog/2026-02-16-prompt-improvement-claude-skills.mdx?collection=blog"), + "2026-02-26-evaluate-ai-agent-skills": () => import("@/content/blog/2026-02-26-evaluate-ai-agent-skills.mdx?collection=blog"), + "announcing-our-seed-round": () => import("@/content/blog/announcing-our-seed-round.mdx?collection=blog"), + "joining-clickhouse": () => import("@/content/blog/joining-clickhouse.mdx?collection=blog"), + "langflow": () => import("@/content/blog/langflow.mdx?collection=blog"), + "launch-week-1": () => import("@/content/blog/launch-week-1.mdx?collection=blog"), + "llama-index-integration": () => import("@/content/blog/llama-index-integration.mdx?collection=blog"), + "product-analytics-for-LLM-apps": () => import("@/content/blog/product-analytics-for-LLM-apps.mdx?collection=blog"), + "qa-chatbot-for-langfuse-docs": () => import("@/content/blog/qa-chatbot-for-langfuse-docs.mdx?collection=blog"), + "showcase-llm-chatbot": () => import("@/content/blog/showcase-llm-chatbot.mdx?collection=blog"), + "update-2023-07": () => import("@/content/blog/update-2023-07.mdx?collection=blog"), + "update-2023-08": () => import("@/content/blog/update-2023-08.mdx?collection=blog"), + "update-2023-09": () => import("@/content/blog/update-2023-09.mdx?collection=blog"), + "update-2023-10": () => import("@/content/blog/update-2023-10.mdx?collection=blog"), + }, + "changelog": { + "2023-07-19-launch": () => import("@/content/changelog/2023-07-19-launch.mdx?collection=changelog"), + "2023-07-20-analytics-alpha": () => import("@/content/changelog/2023-07-20-analytics-alpha.mdx?collection=changelog"), + "2023-07-20-token-calculation": () => import("@/content/changelog/2023-07-20-token-calculation.mdx?collection=changelog"), + "2023-07-24-nested-trace-ui": () => import("@/content/changelog/2023-07-24-nested-trace-ui.mdx?collection=changelog"), + "2023-07-27-integration-langchain-python": () => import("@/content/changelog/2023-07-27-integration-langchain-python.mdx?collection=changelog"), + "2023-07-27-project-user-management": () => import("@/content/changelog/2023-07-27-project-user-management.mdx?collection=changelog"), + "2023-07-31-human-in-the-loop-evaluation": () => import("@/content/changelog/2023-07-31-human-in-the-loop-evaluation.mdx?collection=changelog"), + "2023-08-07-extended-usage-get-api": () => import("@/content/changelog/2023-08-07-extended-usage-get-api.mdx?collection=changelog"), + "2023-08-14-public-demo-project": () => import("@/content/changelog/2023-08-14-public-demo-project.mdx?collection=changelog"), + "2023-08-16-prebuilt-docker-image": () => import("@/content/changelog/2023-08-16-prebuilt-docker-image.mdx?collection=changelog"), + "2023-08-30-integration-langchain-js": () => import("@/content/changelog/2023-08-30-integration-langchain-js.mdx?collection=changelog"), + "2023-08-31-track-version-and-releases": () => import("@/content/changelog/2023-08-31-track-version-and-releases.mdx?collection=changelog"), + "2023-09-01-token-costs-in-usd": () => import("@/content/changelog/2023-09-01-token-costs-in-usd.mdx?collection=changelog"), + "2023-09-12-analytics-alpha-public-access": () => import("@/content/changelog/2023-09-12-analytics-alpha-public-access.mdx?collection=changelog"), + "2023-09-14-public-link-sharing": () => import("@/content/changelog/2023-09-14-public-link-sharing.mdx?collection=changelog"), + "2023-09-15-model-based-evaluation": () => import("@/content/changelog/2023-09-15-model-based-evaluation.mdx?collection=changelog"), + "2023-09-18-export-generations": () => import("@/content/changelog/2023-09-18-export-generations.mdx?collection=changelog"), + "2023-09-25-datasets": () => import("@/content/changelog/2023-09-25-datasets.mdx?collection=changelog"), + "2023-09-27-JSON-viewer": () => import("@/content/changelog/2023-09-27-JSON-viewer.mdx?collection=changelog"), + "2023-10-03-complex-filters": () => import("@/content/changelog/2023-10-03-complex-filters.mdx?collection=changelog"), + "2023-10-05-faster-navigation": () => import("@/content/changelog/2023-10-05-faster-navigation.mdx?collection=changelog"), + "2023-10-07-improved-support-of-complex-inputs-and-outputs": () => import("@/content/changelog/2023-10-07-improved-support-of-complex-inputs-and-outputs.mdx?collection=changelog"), + "2023-10-09-dashboards": () => import("@/content/changelog/2023-10-09-dashboards.mdx?collection=changelog"), + "2023-10-19-doubled-performance-ingestion-apis": () => import("@/content/changelog/2023-10-19-doubled-performance-ingestion-apis.mdx?collection=changelog"), + "2023-10-25-openai-sdk-integration": () => import("@/content/changelog/2023-10-25-openai-sdk-integration.mdx?collection=changelog"), + "2023-10-25-support-pydantic-v1-and-v2": () => import("@/content/changelog/2023-10-25-support-pydantic-v1-and-v2.mdx?collection=changelog"), + "2023-10-30-ragas-cookbook": () => import("@/content/changelog/2023-10-30-ragas-cookbook.mdx?collection=changelog"), + "2023-10-31-simplified-self-hosting": () => import("@/content/changelog/2023-10-31-simplified-self-hosting.mdx?collection=changelog"), + "2023-11-03-sso-enforcement": () => import("@/content/changelog/2023-11-03-sso-enforcement.mdx?collection=changelog"), + "2023-11-06-support-for-gpt-4-turbo": () => import("@/content/changelog/2023-11-06-support-for-gpt-4-turbo.mdx?collection=changelog"), + "2023-11-13-support-for-langchain-expression-language": () => import("@/content/changelog/2023-11-13-support-for-langchain-expression-language.mdx?collection=changelog"), + "2023-11-15-pretty-generations": () => import("@/content/changelog/2023-11-15-pretty-generations.mdx?collection=changelog"), + "2023-11-15-semantic-releases": () => import("@/content/changelog/2023-11-15-semantic-releases.mdx?collection=changelog"), + "2023-11-16-openai-sdk-version-1": () => import("@/content/changelog/2023-11-16-openai-sdk-version-1.mdx?collection=changelog"), + "2023-11-19-more-robust-docker": () => import("@/content/changelog/2023-11-19-more-robust-docker.mdx?collection=changelog"), + "2023-12-04-column-visbility": () => import("@/content/changelog/2023-12-04-column-visbility.mdx?collection=changelog"), + "2023-12-12-rename-and-transfer-projects": () => import("@/content/changelog/2023-12-12-rename-and-transfer-projects.mdx?collection=changelog"), + "2023-12-13-sessions": () => import("@/content/changelog/2023-12-13-sessions.mdx?collection=changelog"), + "2023-12-28-v2-sdks": () => import("@/content/changelog/2023-12-28-v2-sdks.mdx?collection=changelog"), + "2024-01-02-sort-trace-table": () => import("@/content/changelog/2024-01-02-sort-trace-table.mdx?collection=changelog"), + "2024-01-03-prompt-management": () => import("@/content/changelog/2024-01-03-prompt-management.mdx?collection=changelog"), + "2024-01-16-trace-tagging": () => import("@/content/changelog/2024-01-16-trace-tagging.mdx?collection=changelog"), + "2024-01-29-custom-model-prices": () => import("@/content/changelog/2024-01-29-custom-model-prices.mdx?collection=changelog"), + "2024-02-05-sdk-level-prompt-caching": () => import("@/content/changelog/2024-02-05-sdk-level-prompt-caching.mdx?collection=changelog"), + "2024-02-19-metrics-api-endpoint": () => import("@/content/changelog/2024-02-19-metrics-api-endpoint.mdx?collection=changelog"), + "2024-02-20-prompt-config": () => import("@/content/changelog/2024-02-20-prompt-config.mdx?collection=changelog"), + "2024-02-27-llama-index-integration": () => import("@/content/changelog/2024-02-27-llama-index-integration.mdx?collection=changelog"), + "2024-02-29-performance-improvement-ui": () => import("@/content/changelog/2024-02-29-performance-improvement-ui.mdx?collection=changelog"), + "2024-03-05-uptrain-integration": () => import("@/content/changelog/2024-03-05-uptrain-integration.mdx?collection=changelog"), + "2024-03-07-Claude3": () => import("@/content/changelog/2024-03-07-Claude3.mdx?collection=changelog"), + "2024-03-11-improved-chatml-rendering": () => import("@/content/changelog/2024-03-11-improved-chatml-rendering.mdx?collection=changelog"), + "2024-03-24-python-decorator": () => import("@/content/changelog/2024-03-24-python-decorator.mdx?collection=changelog"), + "2024-04-08-langchain-streaming-and-batch": () => import("@/content/changelog/2024-04-08-langchain-streaming-and-batch.mdx?collection=changelog"), + "2024-04-09-openai-integration-linked-prompt-management": () => import("@/content/changelog/2024-04-09-openai-integration-linked-prompt-management.mdx?collection=changelog"), + "2024-04-09-prompt-management-chatml": () => import("@/content/changelog/2024-04-09-prompt-management-chatml.mdx?collection=changelog"), + "2024-04-10-ISO-27001-certification": () => import("@/content/changelog/2024-04-10-ISO-27001-certification.mdx?collection=changelog"), + "2024-04-13-images-on-docker-hub": () => import("@/content/changelog/2024-04-13-images-on-docker-hub.mdx?collection=changelog"), + "2024-04-21-openai-integration-JS-SDK": () => import("@/content/changelog/2024-04-21-openai-integration-JS-SDK.mdx?collection=changelog"), + "2024-04-22-posthog-integration": () => import("@/content/changelog/2024-04-22-posthog-integration.mdx?collection=changelog"), + "2024-04-23-prompt-playground": () => import("@/content/changelog/2024-04-23-prompt-playground.mdx?collection=changelog"), + "2024-04-24-decorator": () => import("@/content/changelog/2024-04-24-decorator.mdx?collection=changelog"), + "2024-04-25-datasets-v2": () => import("@/content/changelog/2024-04-25-datasets-v2.mdx?collection=changelog"), + "2024-04-26-model-based-evaluation": () => import("@/content/changelog/2024-04-26-model-based-evaluation.mdx?collection=changelog"), + "2024-04-30-SOC-2-Type-2-certification": () => import("@/content/changelog/2024-04-30-SOC-2-Type-2-certification.mdx?collection=changelog"), + "2024-05-07-prompts-api-and-deployment-labels": () => import("@/content/changelog/2024-05-07-prompts-api-and-deployment-labels.mdx?collection=changelog"), + "2024-05-14-openai-gpt-4o-playground-evals": () => import("@/content/changelog/2024-05-14-openai-gpt-4o-playground-evals.mdx?collection=changelog"), + "2024-05-14-openai-gpt-4o": () => import("@/content/changelog/2024-05-14-openai-gpt-4o.mdx?collection=changelog"), + "2024-05-16-mirascope-integration": () => import("@/content/changelog/2024-05-16-mirascope-integration.mdx?collection=changelog"), + "2024-05-16-prompts-version-insights": () => import("@/content/changelog/2024-05-16-prompts-version-insights.mdx?collection=changelog"), + "2024-05-16-sticky-headings": () => import("@/content/changelog/2024-05-16-sticky-headings.mdx?collection=changelog"), + "2024-05-17-haystack-integration": () => import("@/content/changelog/2024-05-17-haystack-integration.mdx?collection=changelog"), + "2024-05-23-dark-mode": () => import("@/content/changelog/2024-05-23-dark-mode.mdx?collection=changelog"), + "2024-05-29-openai-assistants": () => import("@/content/changelog/2024-05-29-openai-assistants.mdx?collection=changelog"), + "2024-06-05-annotation": () => import("@/content/changelog/2024-06-05-annotation.mdx?collection=changelog"), + "2024-06-06-monitoring-llm-security-docs": () => import("@/content/changelog/2024-06-06-monitoring-llm-security-docs.mdx?collection=changelog"), + "2024-06-10-update-indicator": () => import("@/content/changelog/2024-06-10-update-indicator.mdx?collection=changelog"), + "2024-06-12-timeline-view": () => import("@/content/changelog/2024-06-12-timeline-view.mdx?collection=changelog"), + "2024-06-26-dify-integration": () => import("@/content/changelog/2024-06-26-dify-integration.mdx?collection=changelog"), + "2024-07-02-datasets-api-v2": () => import("@/content/changelog/2024-07-02-datasets-api-v2.mdx?collection=changelog"), + "2024-07-03-models-api": () => import("@/content/changelog/2024-07-03-models-api.mdx?collection=changelog"), + "2024-07-04-query-traces-via-sdks": () => import("@/content/changelog/2024-07-04-query-traces-via-sdks.mdx?collection=changelog"), + "2024-07-11-non-numeric-scores-api": () => import("@/content/changelog/2024-07-11-non-numeric-scores-api.mdx?collection=changelog"), + "2024-07-15-render-markdown-trace-preview": () => import("@/content/changelog/2024-07-15-render-markdown-trace-preview.mdx?collection=changelog"), + "2024-07-18-openai-gpt-4o-mini": () => import("@/content/changelog/2024-07-18-openai-gpt-4o-mini.mdx?collection=changelog"), + "2024-07-30-resizable-columns": () => import("@/content/changelog/2024-07-30-resizable-columns.mdx?collection=changelog"), + "2024-08-02-vercel-ai-sdk-integration": () => import("@/content/changelog/2024-08-02-vercel-ai-sdk-integration.mdx?collection=changelog"), + "2024-08-08-openai-structured-outputs": () => import("@/content/changelog/2024-08-08-openai-structured-outputs.mdx?collection=changelog"), + "2024-08-13-organizations": () => import("@/content/changelog/2024-08-13-organizations.mdx?collection=changelog"), + "2024-08-14-ui-customization": () => import("@/content/changelog/2024-08-14-ui-customization.mdx?collection=changelog"), + "2024-08-15-deployment-as-porter-add-on": () => import("@/content/changelog/2024-08-15-deployment-as-porter-add-on.mdx?collection=changelog"), + "2024-08-19-score-analytics": () => import("@/content/changelog/2024-08-19-score-analytics.mdx?collection=changelog"), + "2024-08-20-comments": () => import("@/content/changelog/2024-08-20-comments.mdx?collection=changelog"), + "2024-08-21-openai-multi-modal-traces": () => import("@/content/changelog/2024-08-21-openai-multi-modal-traces.mdx?collection=changelog"), + "2024-09-04-headless-initialization-of-self-hosted-deployments": () => import("@/content/changelog/2024-09-04-headless-initialization-of-self-hosted-deployments.mdx?collection=changelog"), + "2024-09-04-prompt-management-zero-latency": () => import("@/content/changelog/2024-09-04-prompt-management-zero-latency.mdx?collection=changelog"), + "2024-09-13-custom-basepath-for-self-hosted-deployments": () => import("@/content/changelog/2024-09-13-custom-basepath-for-self-hosted-deployments.mdx?collection=changelog"), + "2024-09-13-openai-o1-models": () => import("@/content/changelog/2024-09-13-openai-o1-models.mdx?collection=changelog"), + "2024-09-17-prompt-linking-langchain": () => import("@/content/changelog/2024-09-17-prompt-linking-langchain.mdx?collection=changelog"), + "2024-09-20-aws-marketplace": () => import("@/content/changelog/2024-09-20-aws-marketplace.mdx?collection=changelog"), + "2024-09-20-dspy-integration-example": () => import("@/content/changelog/2024-09-20-dspy-integration-example.mdx?collection=changelog"), + "2024-09-23-github-discussion-across-documentation": () => import("@/content/changelog/2024-09-23-github-discussion-across-documentation.mdx?collection=changelog"), + "2024-10-10-annotation-queues": () => import("@/content/changelog/2024-10-10-annotation-queues.mdx?collection=changelog"), + "2024-10-10-text-color-for-latency-and-costs": () => import("@/content/changelog/2024-10-10-text-color-for-latency-and-costs.mdx?collection=changelog"), + "2024-10-11-bedrock-support-playground-evals": () => import("@/content/changelog/2024-10-11-bedrock-support-playground-evals.mdx?collection=changelog"), + "2024-10-11-extended-eval-models": () => import("@/content/changelog/2024-10-11-extended-eval-models.mdx?collection=changelog"), + "2024-10-25-input-output-masking": () => import("@/content/changelog/2024-10-25-input-output-masking.mdx?collection=changelog"), + "2024-11-01-collapsible-sidebar": () => import("@/content/changelog/2024-11-01-collapsible-sidebar.mdx?collection=changelog"), + "2024-11-17-llms-txt": () => import("@/content/changelog/2024-11-17-llms-txt.mdx?collection=changelog"), + "2024-11-17-vercel-ai-sdk-prompt-mgmt": () => import("@/content/changelog/2024-11-17-vercel-ai-sdk-prompt-mgmt.mdx?collection=changelog"), + "2024-11-18-dataset-runs-comparison-view": () => import("@/content/changelog/2024-11-18-dataset-runs-comparison-view.mdx?collection=changelog"), + "2024-11-19-llm-as-a-judge-for-datasets": () => import("@/content/changelog/2024-11-19-llm-as-a-judge-for-datasets.mdx?collection=changelog"), + "2024-11-20-full-multi-modal-images-audio-attachments": () => import("@/content/changelog/2024-11-20-full-multi-modal-images-audio-attachments.mdx?collection=changelog"), + "2024-11-21-all-new-datasets-and-evals-documentation": () => import("@/content/changelog/2024-11-21-all-new-datasets-and-evals-documentation.mdx?collection=changelog"), + "2024-11-22-prompt-experimentation": () => import("@/content/changelog/2024-11-22-prompt-experimentation.mdx?collection=changelog"), + "2024-11-28-google-vertex-ai-support-playground-evals": () => import("@/content/changelog/2024-11-28-google-vertex-ai-support-playground-evals.mdx?collection=changelog"), + "2024-12-02-tracing-docs-for-google-vertex-ai-and-gemini": () => import("@/content/changelog/2024-12-02-tracing-docs-for-google-vertex-ai-and-gemini.mdx?collection=changelog"), + "2024-12-03-new-sso-providers-github-enterprise-and-keycloak": () => import("@/content/changelog/2024-12-03-new-sso-providers-github-enterprise-and-keycloak.mdx?collection=changelog"), + "2024-12-04-extensive-end-to-end-example-for-js-ts": () => import("@/content/changelog/2024-12-04-extensive-end-to-end-example-for-js-ts.mdx?collection=changelog"), + "2024-12-09-Langfuse-v3-stable-release": () => import("@/content/changelog/2024-12-09-Langfuse-v3-stable-release.mdx?collection=changelog"), + "2024-12-20-improved-cost-tracking": () => import("@/content/changelog/2024-12-20-improved-cost-tracking.mdx?collection=changelog"), + "2024-12-20-posthog-integration-GA": () => import("@/content/changelog/2024-12-20-posthog-integration-GA.mdx?collection=changelog"), + "2025-01-21-audit-logs": () => import("@/content/changelog/2025-01-21-audit-logs.mdx?collection=changelog"), + "2025-01-22-track-changes-between-prompt-versions": () => import("@/content/changelog/2025-01-22-track-changes-between-prompt-versions.mdx?collection=changelog"), + "2025-01-23-LLM-calls-extra-headers": () => import("@/content/changelog/2025-01-23-LLM-calls-extra-headers.mdx?collection=changelog"), + "2025-01-27-Dataset-Items-csv-upload": () => import("@/content/changelog/2025-01-27-Dataset-Items-csv-upload.mdx?collection=changelog"), + "2025-01-28-prompt-commit-messages": () => import("@/content/changelog/2025-01-28-prompt-commit-messages.mdx?collection=changelog"), + "2025-01-30-cmd-k-menu": () => import("@/content/changelog/2025-01-30-cmd-k-menu.mdx?collection=changelog"), + "2025-01-30-data-retention": () => import("@/content/changelog/2025-01-30-data-retention.mdx?collection=changelog"), + "2025-01-30-new-api-reference": () => import("@/content/changelog/2025-01-30-new-api-reference.mdx?collection=changelog"), + "2025-01-30-new-prompt-editor": () => import("@/content/changelog/2025-01-30-new-prompt-editor.mdx?collection=changelog"), + "2025-01-30-sampling-js-ts-sdk": () => import("@/content/changelog/2025-01-30-sampling-js-ts-sdk.mdx?collection=changelog"), + "2025-01-31-o3-mini-support": () => import("@/content/changelog/2025-01-31-o3-mini-support.mdx?collection=changelog"), + "2025-02-05-public-api-wrapper-sdks": () => import("@/content/changelog/2025-02-05-public-api-wrapper-sdks.mdx?collection=changelog"), + "2025-02-06-gemini-2-support": () => import("@/content/changelog/2025-02-06-gemini-2-support.mdx?collection=changelog"), + "2025-02-06-llm-as-a-judge-jsonpath": () => import("@/content/changelog/2025-02-06-llm-as-a-judge-jsonpath.mdx?collection=changelog"), + "2025-02-10-trace-log-level-filter": () => import("@/content/changelog/2025-02-10-trace-log-level-filter.mdx?collection=changelog"), + "2025-02-11-tables-select-all": () => import("@/content/changelog/2025-02-11-tables-select-all.mdx?collection=changelog"), + "2025-02-14-opentelemetry-tracing": () => import("@/content/changelog/2025-02-14-opentelemetry-tracing.mdx?collection=changelog"), + "2025-02-14-oss-llmops-stack": () => import("@/content/changelog/2025-02-14-oss-llmops-stack.mdx?collection=changelog"), + "2025-02-14-trace-graph-view": () => import("@/content/changelog/2025-02-14-trace-graph-view.mdx?collection=changelog"), + "2025-02-16-mcp-server-update": () => import("@/content/changelog/2025-02-16-mcp-server-update.mdx?collection=changelog"), + "2025-02-20-model-based-evals-on-history": () => import("@/content/changelog/2025-02-20-model-based-evals-on-history.mdx?collection=changelog"), + "2025-02-25-claude-3-7-support": () => import("@/content/changelog/2025-02-25-claude-3-7-support.mdx?collection=changelog"), + "2025-02-25-google-ai-studio-support": () => import("@/content/changelog/2025-02-25-google-ai-studio-support.mdx?collection=changelog"), + "2025-02-26-in-product-onboarding-screens": () => import("@/content/changelog/2025-02-26-in-product-onboarding-screens.mdx?collection=changelog"), + "2025-02-27-openai-gpt-4-5-support": () => import("@/content/changelog/2025-02-27-openai-gpt-4-5-support.mdx?collection=changelog"), + "2025-03-03-langfuse-java-client": () => import("@/content/changelog/2025-03-03-langfuse-java-client.mdx?collection=changelog"), + "2025-03-04-dataset-deletion-of-items-and-runs": () => import("@/content/changelog/2025-03-04-dataset-deletion-of-items-and-runs.mdx?collection=changelog"), + "2025-03-04-dataset-items-duplicate-and-add-to-many": () => import("@/content/changelog/2025-03-04-dataset-items-duplicate-and-add-to-many.mdx?collection=changelog"), + "2025-03-05-workos-idp": () => import("@/content/changelog/2025-03-05-workos-idp.mdx?collection=changelog"), + "2025-03-06-native-environments": () => import("@/content/changelog/2025-03-06-native-environments.mdx?collection=changelog"), + "2025-03-12-prompt-composability": () => import("@/content/changelog/2025-03-12-prompt-composability.mdx?collection=changelog"), + "2025-03-13-batch-export-scores-ui": () => import("@/content/changelog/2025-03-13-batch-export-scores-ui.mdx?collection=changelog"), + "2025-03-13-public-api-annotation-queues": () => import("@/content/changelog/2025-03-13-public-api-annotation-queues.mdx?collection=changelog"), + "2025-03-17-openai-response-api-support": () => import("@/content/changelog/2025-03-17-openai-response-api-support.mdx?collection=changelog"), + "2025-03-19-new-prompt-view": () => import("@/content/changelog/2025-03-19-new-prompt-view.mdx?collection=changelog"), + "2025-03-19-new-trace-view": () => import("@/content/changelog/2025-03-19-new-trace-view.mdx?collection=changelog"), + "2025-03-21-table-peek-view": () => import("@/content/changelog/2025-03-21-table-peek-view.mdx?collection=changelog"), + "2025-03-28-tool-calling-structured-output-playground": () => import("@/content/changelog/2025-03-28-tool-calling-structured-output-playground.mdx?collection=changelog"), + "2025-03-31-gemini-2.5-pro-exp-support": () => import("@/content/changelog/2025-03-31-gemini-2.5-pro-exp-support.mdx?collection=changelog"), + "2025-04-02-protected-prompt-labels": () => import("@/content/changelog/2025-04-02-protected-prompt-labels.mdx?collection=changelog"), + "2025-04-15-4.1-support": () => import("@/content/changelog/2025-04-15-4.1-support.mdx?collection=changelog"), + "2025-04-15-admin-apis": () => import("@/content/changelog/2025-04-15-admin-apis.mdx?collection=changelog"), + "2025-04-16-o3-o4-mini-support": () => import("@/content/changelog/2025-04-16-o3-o4-mini-support.mdx?collection=changelog"), + "2025-04-17-copy-as-markdown": () => import("@/content/changelog/2025-04-17-copy-as-markdown.mdx?collection=changelog"), + "2025-04-28-session-level-scores": () => import("@/content/changelog/2025-04-28-session-level-scores.mdx?collection=changelog"), + "2025-05-07-run-level-scores": () => import("@/content/changelog/2025-05-07-run-level-scores.mdx?collection=changelog"), + "2025-05-12-custom-metrics-api": () => import("@/content/changelog/2025-05-12-custom-metrics-api.mdx?collection=changelog"), + "2025-05-15-product-module-visibility": () => import("@/content/changelog/2025-05-15-product-module-visibility.mdx?collection=changelog"), + "2025-05-19-full-text-search": () => import("@/content/changelog/2025-05-19-full-text-search.mdx?collection=changelog"), + "2025-05-20-save-table-views": () => import("@/content/changelog/2025-05-20-save-table-views.mdx?collection=changelog"), + "2025-05-21-custom-dashboards": () => import("@/content/changelog/2025-05-21-custom-dashboards.mdx?collection=changelog"), + "2025-05-22-claude-4-support": () => import("@/content/changelog/2025-05-22-claude-4-support.mdx?collection=changelog"), + "2025-05-22-terraform-modules": () => import("@/content/changelog/2025-05-22-terraform-modules.mdx?collection=changelog"), + "2025-05-23-otel-based-python-sdk": () => import("@/content/changelog/2025-05-23-otel-based-python-sdk.mdx?collection=changelog"), + "2025-05-24-langfuse-evaluator-library": () => import("@/content/changelog/2025-05-24-langfuse-evaluator-library.mdx?collection=changelog"), + "2025-05-29-pipecat-integration": () => import("@/content/changelog/2025-05-29-pipecat-integration.mdx?collection=changelog"), + "2025-06-04-open-sourcing-langfuse": () => import("@/content/changelog/2025-06-04-open-sourcing-langfuse.mdx?collection=changelog"), + "2025-06-05-python-sdk-v3-generally-available": () => import("@/content/changelog/2025-06-05-python-sdk-v3-generally-available.mdx?collection=changelog"), + "2025-06-10-o3-pro-support": () => import("@/content/changelog/2025-06-10-o3-pro-support.mdx?collection=changelog"), + "2025-06-16-prompt-management-folders": () => import("@/content/changelog/2025-06-16-prompt-management-folders.mdx?collection=changelog"), + "2025-06-17-csv-download-dashboard-charts": () => import("@/content/changelog/2025-06-17-csv-download-dashboard-charts.mdx?collection=changelog"), + "2025-06-23-exports-datasets-audit-logs": () => import("@/content/changelog/2025-06-23-exports-datasets-audit-logs.mdx?collection=changelog"), + "2025-06-27-improved-json-handling-langchain-prompts": () => import("@/content/changelog/2025-06-27-improved-json-handling-langchain-prompts.mdx?collection=changelog"), + "2025-06-28-agentic-onboarding-and-docs-mcp": () => import("@/content/changelog/2025-06-28-agentic-onboarding-and-docs-mcp.mdx?collection=changelog"), + "2025-06-30-histogram-charts-custom-dashboards": () => import("@/content/changelog/2025-06-30-histogram-charts-custom-dashboards.mdx?collection=changelog"), + "2025-07-01-pivot-tables-custom-dashboards": () => import("@/content/changelog/2025-07-01-pivot-tables-custom-dashboards.mdx?collection=changelog"), + "2025-07-01-search-for-prompts": () => import("@/content/changelog/2025-07-01-search-for-prompts.mdx?collection=changelog"), + "2025-07-02-prompt-management-placeholders": () => import("@/content/changelog/2025-07-02-prompt-management-placeholders.mdx?collection=changelog"), + "2025-07-03-gemini-2.5-support": () => import("@/content/changelog/2025-07-03-gemini-2.5-support.mdx?collection=changelog"), + "2025-07-06-n8n-node-for-langfuse-prompts": () => import("@/content/changelog/2025-07-06-n8n-node-for-langfuse-prompts.mdx?collection=changelog"), + "2025-07-11-prompt-version-webhooks": () => import("@/content/changelog/2025-07-11-prompt-version-webhooks.mdx?collection=changelog"), + "2025-07-18-aws-sdk-default-credential-provider": () => import("@/content/changelog/2025-07-18-aws-sdk-default-credential-provider.mdx?collection=changelog"), + "2025-07-22-full-text-search-for-prompts": () => import("@/content/changelog/2025-07-22-full-text-search-for-prompts.mdx?collection=changelog"), + "2025-07-24-remote-experiment-triggers": () => import("@/content/changelog/2025-07-24-remote-experiment-triggers.mdx?collection=changelog"), + "2025-07-25-livekit-integration": () => import("@/content/changelog/2025-07-25-livekit-integration.mdx?collection=changelog"), + "2025-07-28-playground-side-by-side": () => import("@/content/changelog/2025-07-28-playground-side-by-side.mdx?collection=changelog"), + "2025-07-28-sessions-in-annotation-queues": () => import("@/content/changelog/2025-07-28-sessions-in-annotation-queues.mdx?collection=changelog"), + "2025-07-30-slack-prompt-notifications": () => import("@/content/changelog/2025-07-30-slack-prompt-notifications.mdx?collection=changelog"), + "2025-08-07-annotation-queue-assignments": () => import("@/content/changelog/2025-08-07-annotation-queue-assignments.mdx?collection=changelog"), + "2025-08-07-markdown-endpoints-and-copy-button": () => import("@/content/changelog/2025-08-07-markdown-endpoints-and-copy-button.mdx?collection=changelog"), + "2025-08-08-openai-pricing-availability": () => import("@/content/changelog/2025-08-08-openai-pricing-availability.mdx?collection=changelog"), + "2025-08-14-llm-calls-provider-options": () => import("@/content/changelog/2025-08-14-llm-calls-provider-options.mdx?collection=changelog"), + "2025-08-25-full-text-search-for-dataset-items": () => import("@/content/changelog/2025-08-25-full-text-search-for-dataset-items.mdx?collection=changelog"), + "2025-08-26-new-end-to-end-walkthrough": () => import("@/content/changelog/2025-08-26-new-end-to-end-walkthrough.mdx?collection=changelog"), + "2025-08-27-enhanced-observation-types": () => import("@/content/changelog/2025-08-27-enhanced-observation-types.mdx?collection=changelog"), + "2025-08-28-typescript-sdk-v4-ga": () => import("@/content/changelog/2025-08-28-typescript-sdk-v4-ga.mdx?collection=changelog"), + "2025-09-17-experiment-runner-sdk": () => import("@/content/changelog/2025-09-17-experiment-runner-sdk.mdx?collection=changelog"), + "2025-09-29-score-config-updates": () => import("@/content/changelog/2025-09-29-score-config-updates.mdx?collection=changelog"), + "2025-09-30-natural-language-filters": () => import("@/content/changelog/2025-09-30-natural-language-filters.mdx?collection=changelog"), + "2025-09-30-structured-output-experiments": () => import("@/content/changelog/2025-09-30-structured-output-experiments.mdx?collection=changelog"), + "2025-10-10-spend-alerts": () => import("@/content/changelog/2025-10-10-spend-alerts.mdx?collection=changelog"), + "2025-10-16-llm-as-a-judge-execution-tracing": () => import("@/content/changelog/2025-10-16-llm-as-a-judge-execution-tracing.mdx?collection=changelog"), + "2025-10-23-annotate-from-compare-view": () => import("@/content/changelog/2025-10-23-annotate-from-compare-view.mdx?collection=changelog"), + "2025-10-26-langchain-v1-support": () => import("@/content/changelog/2025-10-26-langchain-v1-support.mdx?collection=changelog"), + "2025-10-27-dataset-folders": () => import("@/content/changelog/2025-10-27-dataset-folders.mdx?collection=changelog"), + "2025-11-03-advanced-filtering-traces-and-observations-api": () => import("@/content/changelog/2025-11-03-advanced-filtering-traces-and-observations-api.mdx?collection=changelog"), + "2025-11-03-filter-sidebar-for-tables": () => import("@/content/changelog/2025-11-03-filter-sidebar-for-tables.mdx?collection=changelog"), + "2025-11-04-amazon-bedrock-agentcore-integration": () => import("@/content/changelog/2025-11-04-amazon-bedrock-agentcore-integration.mdx?collection=changelog"), + "2025-11-04-comment-mentions-and-reactions": () => import("@/content/changelog/2025-11-04-comment-mentions-and-reactions.mdx?collection=changelog"), + "2025-11-04-idp-initiated-sso": () => import("@/content/changelog/2025-11-04-idp-initiated-sso.mdx?collection=changelog"), + "2025-11-04-mixpanel-integration": () => import("@/content/changelog/2025-11-04-mixpanel-integration.mdx?collection=changelog"), + "2025-11-05-langfuse-for-agents": () => import("@/content/changelog/2025-11-05-langfuse-for-agents.mdx?collection=changelog"), + "2025-11-06-compare-view-baseline-support": () => import("@/content/changelog/2025-11-06-compare-view-baseline-support.mdx?collection=changelog"), + "2025-11-06-dataset-schema-enforcement": () => import("@/content/changelog/2025-11-06-dataset-schema-enforcement.mdx?collection=changelog"), + "2025-11-07-compare-view-filters": () => import("@/content/changelog/2025-11-07-compare-view-filters.mdx?collection=changelog"), + "2025-11-07-score-analytics-multi-score-comparison": () => import("@/content/changelog/2025-11-07-score-analytics-multi-score-comparison.mdx?collection=changelog"), + "2025-11-14-openai-gpt-5-1-support": () => import("@/content/changelog/2025-11-14-openai-gpt-5-1-support.mdx?collection=changelog"), + "2025-11-20-native-mcp-server": () => import("@/content/changelog/2025-11-20-native-mcp-server.mdx?collection=changelog"), + "2025-12-02-model-pricing-tiers": () => import("@/content/changelog/2025-12-02-model-pricing-tiers.mdx?collection=changelog"), + "2025-12-11-batch-add-observations-to-dataset": () => import("@/content/changelog/2025-12-11-batch-add-observations-to-dataset.mdx?collection=changelog"), + "2025-12-12-openai-gpt-5-2-support": () => import("@/content/changelog/2025-12-12-openai-gpt-5-2-support.mdx?collection=changelog"), + "2025-12-15-dataset-versioning": () => import("@/content/changelog/2025-12-15-dataset-versioning.mdx?collection=changelog"), + "2025-12-17-v2-metrics-and-observations-api": () => import("@/content/changelog/2025-12-17-v2-metrics-and-observations-api.mdx?collection=changelog"), + "2025-12-22-tool-calls-filtering-visualization": () => import("@/content/changelog/2025-12-22-tool-calls-filtering-visualization.mdx?collection=changelog"), + "2026-01-07-inline-comments-on-trace-io": () => import("@/content/changelog/2026-01-07-inline-comments-on-trace-io.mdx?collection=changelog"), + "2026-01-14-corrected-outputs": () => import("@/content/changelog/2026-01-14-corrected-outputs.mdx?collection=changelog"), + "2026-02-11-versioned-dataset-experiments": () => import("@/content/changelog/2026-02-11-versioned-dataset-experiments.mdx?collection=changelog"), + "2026-02-13-observation-level-evals": () => import("@/content/changelog/2026-02-13-observation-level-evals.mdx?collection=changelog"), + "2026-02-17-langfuse-cli": () => import("@/content/changelog/2026-02-17-langfuse-cli.mdx?collection=changelog"), + }, + "guides": { + "cookbook/evaluation_of_rag_with_ragas": () => import("@/content/guides/cookbook/evaluation_of_rag_with_ragas.md?collection=guides"), + "cookbook/evaluation_with_langchain": () => import("@/content/guides/cookbook/evaluation_with_langchain.md?collection=guides"), + "cookbook/evaluation_with_uptrain": () => import("@/content/guides/cookbook/evaluation_with_uptrain.md?collection=guides"), + "cookbook/example_data_migration": () => import("@/content/guides/cookbook/example_data_migration.md?collection=guides"), + "cookbook/example_decorator_openai_langchain": () => import("@/content/guides/cookbook/example_decorator_openai_langchain.md?collection=guides"), + "cookbook/example_evaluating_multi_turn_conversations": () => import("@/content/guides/cookbook/example_evaluating_multi_turn_conversations.mdx?collection=guides"), + "cookbook/example_evaluating_openai_agents": () => import("@/content/guides/cookbook/example_evaluating_openai_agents.md?collection=guides"), + "cookbook/example_external_evaluation_pipelines": () => import("@/content/guides/cookbook/example_external_evaluation_pipelines.mdx?collection=guides"), + "cookbook/example_intent_classification_pipeline": () => import("@/content/guides/cookbook/example_intent_classification_pipeline.md?collection=guides"), + "cookbook/example_langgraph_agents": () => import("@/content/guides/cookbook/example_langgraph_agents.mdx?collection=guides"), + "cookbook/example_llm_security_monitoring": () => import("@/content/guides/cookbook/example_llm_security_monitoring.md?collection=guides"), + "cookbook/example_multi_modal_traces": () => import("@/content/guides/cookbook/example_multi_modal_traces.md?collection=guides"), + "cookbook/example_pydantic_ai_mcp_agent_evaluation": () => import("@/content/guides/cookbook/example_pydantic_ai_mcp_agent_evaluation.mdx?collection=guides"), + "cookbook/example_query_data_via_sdk": () => import("@/content/guides/cookbook/example_query_data_via_sdk.md?collection=guides"), + "cookbook/example_simulated_multi_turn_conversations": () => import("@/content/guides/cookbook/example_simulated_multi_turn_conversations.mdx?collection=guides"), + "cookbook/example_synthetic_datasets": () => import("@/content/guides/cookbook/example_synthetic_datasets.mdx?collection=guides"), + "cookbook/index": () => import("@/content/guides/cookbook/index.mdx?collection=guides"), + "cookbook/integration_amazon_bedrock": () => import("@/content/guides/cookbook/integration_amazon_bedrock.md?collection=guides"), + "cookbook/integration_anthropic": () => import("@/content/guides/cookbook/integration_anthropic.mdx?collection=guides"), + "cookbook/integration_azure_openai_langchain": () => import("@/content/guides/cookbook/integration_azure_openai_langchain.md?collection=guides"), + "cookbook/integration_databricks": () => import("@/content/guides/cookbook/integration_databricks.mdx?collection=guides"), + "cookbook/integration_langchain": () => import("@/content/guides/cookbook/integration_langchain.md?collection=guides"), + "cookbook/integration_langgraph": () => import("@/content/guides/cookbook/integration_langgraph.mdx?collection=guides"), + "cookbook/integration_langserve": () => import("@/content/guides/cookbook/integration_langserve.md?collection=guides"), + "cookbook/integration_litellm_proxy": () => import("@/content/guides/cookbook/integration_litellm_proxy.mdx?collection=guides"), + "cookbook/integration_llama-index-callback": () => import("@/content/guides/cookbook/integration_llama-index-callback.md?collection=guides"), + "cookbook/integration_llama-index_instrumentation": () => import("@/content/guides/cookbook/integration_llama-index_instrumentation.md?collection=guides"), + "cookbook/integration_llama-index_milvus-lite": () => import("@/content/guides/cookbook/integration_llama-index_milvus-lite.mdx?collection=guides"), + "cookbook/integration_llama_index": () => import("@/content/guides/cookbook/integration_llama_index.mdx?collection=guides"), + "cookbook/integration_llama_index_posthog_mistral": () => import("@/content/guides/cookbook/integration_llama_index_posthog_mistral.md?collection=guides"), + "cookbook/integration_llamaindex_workflows": () => import("@/content/guides/cookbook/integration_llamaindex_workflows.mdx?collection=guides"), + "cookbook/integration_openai_assistants": () => import("@/content/guides/cookbook/integration_openai_assistants.md?collection=guides"), + "cookbook/integration_openai_sdk": () => import("@/content/guides/cookbook/integration_openai_sdk.mdx?collection=guides"), + "cookbook/integration_openai_structured_output": () => import("@/content/guides/cookbook/integration_openai_structured_output.md?collection=guides"), + "cookbook/js_integration_anthropic": () => import("@/content/guides/cookbook/js_integration_anthropic.mdx?collection=guides"), + "cookbook/js_integration_langchain": () => import("@/content/guides/cookbook/js_integration_langchain.mdx?collection=guides"), + "cookbook/js_integration_litellm_proxy": () => import("@/content/guides/cookbook/js_integration_litellm_proxy.mdx?collection=guides"), + "cookbook/js_integration_openai": () => import("@/content/guides/cookbook/js_integration_openai.mdx?collection=guides"), + "cookbook/js_langfuse_sdk": () => import("@/content/guides/cookbook/js_langfuse_sdk.mdx?collection=guides"), + "cookbook/js_prompt_management_langchain": () => import("@/content/guides/cookbook/js_prompt_management_langchain.mdx?collection=guides"), + "cookbook/langfuse_sdk_performance_test": () => import("@/content/guides/cookbook/langfuse_sdk_performance_test.md?collection=guides"), + "cookbook/otel_integration_arize": () => import("@/content/guides/cookbook/otel_integration_arize.md?collection=guides"), + "cookbook/otel_integration_mlflow": () => import("@/content/guides/cookbook/otel_integration_mlflow.md?collection=guides"), + "cookbook/otel_integration_openlit": () => import("@/content/guides/cookbook/otel_integration_openlit.md?collection=guides"), + "cookbook/otel_integration_openllmetry": () => import("@/content/guides/cookbook/otel_integration_openllmetry.md?collection=guides"), + "cookbook/prompt_management_langchain": () => import("@/content/guides/cookbook/prompt_management_langchain.mdx?collection=guides"), + "cookbook/prompt_management_openai_functions": () => import("@/content/guides/cookbook/prompt_management_openai_functions.md?collection=guides"), + "cookbook/prompt_management_performance_benchmark": () => import("@/content/guides/cookbook/prompt_management_performance_benchmark.md?collection=guides"), + "": () => import("@/content/guides/index.mdx?collection=guides"), + "videos/beginners-guide-to-rag-evaluation": () => import("@/content/guides/videos/beginners-guide-to-rag-evaluation.mdx?collection=guides"), + "videos/external-evaluation-pipelines": () => import("@/content/guides/videos/external-evaluation-pipelines.mdx?collection=guides"), + "videos/index": () => import("@/content/guides/videos/index.mdx?collection=guides"), + "videos/introducing-datasets-v2": () => import("@/content/guides/videos/introducing-datasets-v2.mdx?collection=guides"), + "videos/introducing-langfuse-2.0": () => import("@/content/guides/videos/introducing-langfuse-2.0.mdx?collection=guides"), + "videos/introducing-python-decorator": () => import("@/content/guides/videos/introducing-python-decorator.mdx?collection=guides"), + "videos/llm-as-a-judge-eval-on-dataset-experiments": () => import("@/content/guides/videos/llm-as-a-judge-eval-on-dataset-experiments.mdx?collection=guides"), + "videos/llm-playground": () => import("@/content/guides/videos/llm-playground.mdx?collection=guides"), + "videos/posthog-integration": () => import("@/content/guides/videos/posthog-integration.mdx?collection=guides"), + "videos/run-langfuse-locally": () => import("@/content/guides/videos/run-langfuse-locally.mdx?collection=guides"), + "videos/webinar-observability-llm-systems": () => import("@/content/guides/videos/webinar-observability-llm-systems.mdx?collection=guides"), + }, + "faq": { + "all/ai-research-assistant-monitoring": () => import("@/content/faq/all/ai-research-assistant-monitoring.mdx?collection=faq"), + "all/api-524-http-errors": () => import("@/content/faq/all/api-524-http-errors.mdx?collection=faq"), + "all/api-limits": () => import("@/content/faq/all/api-limits.mdx?collection=faq"), + "all/arm-images": () => import("@/content/faq/all/arm-images.mdx?collection=faq"), + "all/aws-lambda-and-serverless-functions": () => import("@/content/faq/all/aws-lambda-and-serverless-functions.mdx?collection=faq"), + "all/best-braintrustdata-alternatives": () => import("@/content/faq/all/best-braintrustdata-alternatives.mdx?collection=faq"), + "all/best-galileo-ai-alternatives": () => import("@/content/faq/all/best-galileo-ai-alternatives.mdx?collection=faq"), + "all/best-phoenix-arize-alternatives": () => import("@/content/faq/all/best-phoenix-arize-alternatives.mdx?collection=faq"), + "all/cannot-see-organization": () => import("@/content/faq/all/cannot-see-organization.mdx?collection=faq"), + "all/challenges-of-building-llm-applications": () => import("@/content/faq/all/challenges-of-building-llm-applications.mdx?collection=faq"), + "all/chatbot-analytics": () => import("@/content/faq/all/chatbot-analytics.mdx?collection=faq"), + "all/compatibility-langfuse-ui-and-python-sdk": () => import("@/content/faq/all/compatibility-langfuse-ui-and-python-sdk.mdx?collection=faq"), + "all/conditional-prompt-embedding": () => import("@/content/faq/all/conditional-prompt-embedding.mdx?collection=faq"), + "all/costs-tokens-langfuse": () => import("@/content/faq/all/costs-tokens-langfuse.mdx?collection=faq"), + "all/custom-langchain-run-names": () => import("@/content/faq/all/custom-langchain-run-names.mdx?collection=faq"), + "all/cutting-costs": () => import("@/content/faq/all/cutting-costs.mdx?collection=faq"), + "all/data-retention-timeouts-and-errors": () => import("@/content/faq/all/data-retention-timeouts-and-errors.mdx?collection=faq"), + "all/debug-docker-deployment": () => import("@/content/faq/all/debug-docker-deployment.mdx?collection=faq"), + "all/delete-account-langfuse": () => import("@/content/faq/all/delete-account-langfuse.mdx?collection=faq"), + "all/empty-trace-input-and-output": () => import("@/content/faq/all/empty-trace-input-and-output.mdx?collection=faq"), + "all/enable-disable-tracing": () => import("@/content/faq/all/enable-disable-tracing.mdx?collection=faq"), + "all/enforcing-2fa": () => import("@/content/faq/all/enforcing-2fa.mdx?collection=faq"), + "all/error-handling-and-timeouts": () => import("@/content/faq/all/error-handling-and-timeouts.mdx?collection=faq"), + "all/evaluating-sessions-conversations": () => import("@/content/faq/all/evaluating-sessions-conversations.mdx?collection=faq"), + "all/existing-otel-setup": () => import("@/content/faq/all/existing-otel-setup.mdx?collection=faq"), + "all/existing-sentry-setup": () => import("@/content/faq/all/existing-sentry-setup.mdx?collection=faq"), + "all/fifteen-questions-langfuse-answered": () => import("@/content/faq/all/fifteen-questions-langfuse-answered.mdx?collection=faq"), + "all/forgot-password": () => import("@/content/faq/all/forgot-password.mdx?collection=faq"), + "all/how-to-measure-prompt-performance": () => import("@/content/faq/all/how-to-measure-prompt-performance.mdx?collection=faq"), + "all/inviting-in-langfuse": () => import("@/content/faq/all/inviting-in-langfuse.mdx?collection=faq"), + "all/langfuse-evaluators-on-dataset-runs": () => import("@/content/faq/all/langfuse-evaluators-on-dataset-runs.mdx?collection=faq"), + "all/langfuse-support": () => import("@/content/faq/all/langfuse-support.mdx?collection=faq"), + "all/langsmith-alternative": () => import("@/content/faq/all/langsmith-alternative.mdx?collection=faq"), + "all/limit-access-to-internal-users": () => import("@/content/faq/all/limit-access-to-internal-users.mdx?collection=faq"), + "all/link-prompt-management-with-tracing": () => import("@/content/faq/all/link-prompt-management-with-tracing.mdx?collection=faq"), + "all/llm-analytics-101": () => import("@/content/faq/all/llm-analytics-101.mdx?collection=faq"), + "all/llm-as-a-judge-migration": () => import("@/content/faq/all/llm-as-a-judge-migration.mdx?collection=faq"), + "all/llm-observability": () => import("@/content/faq/all/llm-observability.mdx?collection=faq"), + "all/manage-score-configs": () => import("@/content/faq/all/manage-score-configs.mdx?collection=faq"), + "all/managing-different-environments": () => import("@/content/faq/all/managing-different-environments.mdx?collection=faq"), + "all/migrate-from-helicone": () => import("@/content/faq/all/migrate-from-helicone.mdx?collection=faq"), + "all/missing-traces": () => import("@/content/faq/all/missing-traces.mdx?collection=faq"), + "all/monitoring-ai-generated-content": () => import("@/content/faq/all/monitoring-ai-generated-content.mdx?collection=faq"), + "all/old-prompt-version-caching": () => import("@/content/faq/all/old-prompt-version-caching.mdx?collection=faq"), + "all/openai-assistant-api": () => import("@/content/faq/all/openai-assistant-api.mdx?collection=faq"), + "all/packages-depending-on-langfuse": () => import("@/content/faq/all/packages-depending-on-langfuse.mdx?collection=faq"), + "all/prompt-management-langfuse": () => import("@/content/faq/all/prompt-management-langfuse.mdx?collection=faq"), + "all/report-feedback-bug": () => import("@/content/faq/all/report-feedback-bug.mdx?collection=faq"), + "all/retrieve-experiment-scores": () => import("@/content/faq/all/retrieve-experiment-scores.mdx?collection=faq"), + "all/self-host-with-load-balancer": () => import("@/content/faq/all/self-host-with-load-balancer.mdx?collection=faq"), + "all/self-hosted-telemetry": () => import("@/content/faq/all/self-hosted-telemetry.mdx?collection=faq"), + "all/self-hosting-502-504-network-errors": () => import("@/content/faq/all/self-hosting-502-504-network-errors.mdx?collection=faq"), + "all/self-hosting-clickhouse-handling-failed-migrations": () => import("@/content/faq/all/self-hosting-clickhouse-handling-failed-migrations.mdx?collection=faq"), + "all/self-hosting-javascript-heap-out-of-memory": () => import("@/content/faq/all/self-hosting-javascript-heap-out-of-memory.mdx?collection=faq"), + "all/self-hosting-langfuse": () => import("@/content/faq/all/self-hosting-langfuse.mdx?collection=faq"), + "all/self-hosting-missing-events-after-ingestion": () => import("@/content/faq/all/self-hosting-missing-events-after-ingestion.mdx?collection=faq"), + "all/self-hosting-postgresql-table-ownership-migration-failures": () => import("@/content/faq/all/self-hosting-postgresql-table-ownership-migration-failures.mdx?collection=faq"), + "all/self-hosting-queue-management-bullmq-admin-api": () => import("@/content/faq/all/self-hosting-queue-management-bullmq-admin-api.mdx?collection=faq"), + "all/self-hosting-socket-usage-at-capacity": () => import("@/content/faq/all/self-hosting-socket-usage-at-capacity.mdx?collection=faq"), + "all/self-hosting-timezone-errors": () => import("@/content/faq/all/self-hosting-timezone-errors.mdx?collection=faq"), + "all/sso-har-file-export": () => import("@/content/faq/all/sso-har-file-export.mdx?collection=faq"), + "all/ten-reasons-to-use-langfuse": () => import("@/content/faq/all/ten-reasons-to-use-langfuse.mdx?collection=faq"), + "all/tracing-data-updates": () => import("@/content/faq/all/tracing-data-updates.mdx?collection=faq"), + "all/unwanted-http-database-spans": () => import("@/content/faq/all/unwanted-http-database-spans.mdx?collection=faq"), + "all/upgrade-langfuse": () => import("@/content/faq/all/upgrade-langfuse.mdx?collection=faq"), + "all/using-external-templating-libraries": () => import("@/content/faq/all/using-external-templating-libraries.mdx?collection=faq"), + "all/what-are-scores": () => import("@/content/faq/all/what-are-scores.mdx?collection=faq"), + "all/what-is-prompt-engineering": () => import("@/content/faq/all/what-is-prompt-engineering.mdx?collection=faq"), + "all/where-are-langfuse-api-keys": () => import("@/content/faq/all/where-are-langfuse-api-keys.mdx?collection=faq"), + "all/where-is-my-project": () => import("@/content/faq/all/where-is-my-project.mdx?collection=faq"), + "": () => import("@/content/faq/index.mdx?collection=faq"), + "tag/[tag]": () => import("@/content/faq/tag/[tag].mdx?collection=faq"), + "tag/cloud": () => import("@/content/faq/tag/cloud.mdx?collection=faq"), + "tag/product": () => import("@/content/faq/tag/product.mdx?collection=faq"), + "tag/prompt-management": () => import("@/content/faq/tag/prompt-management.mdx?collection=faq"), + "tag/security": () => import("@/content/faq/tag/security.mdx?collection=faq"), + "tag/self-hosting": () => import("@/content/faq/tag/self-hosting.mdx?collection=faq"), + "tag/tracing": () => import("@/content/faq/tag/tracing.mdx?collection=faq"), + }, + "integrations": { + "analytics/coval": () => import("@/content/integrations/analytics/coval.mdx?collection=integrations"), + "analytics/mixpanel": () => import("@/content/integrations/analytics/mixpanel.mdx?collection=integrations"), + "analytics/posthog": () => import("@/content/integrations/analytics/posthog.mdx?collection=integrations"), + "analytics/trubrics": () => import("@/content/integrations/analytics/trubrics.mdx?collection=integrations"), + "frameworks/agno-agents": () => import("@/content/integrations/frameworks/agno-agents.mdx?collection=integrations"), + "frameworks/amazon-agentcore": () => import("@/content/integrations/frameworks/amazon-agentcore.mdx?collection=integrations"), + "frameworks/autogen": () => import("@/content/integrations/frameworks/autogen.mdx?collection=integrations"), + "frameworks/beeai": () => import("@/content/integrations/frameworks/beeai.mdx?collection=integrations"), + "frameworks/claude-agent-sdk": () => import("@/content/integrations/frameworks/claude-agent-sdk.mdx?collection=integrations"), + "frameworks/crewai": () => import("@/content/integrations/frameworks/crewai.mdx?collection=integrations"), + "frameworks/dspy": () => import("@/content/integrations/frameworks/dspy.mdx?collection=integrations"), + "frameworks/embabel": () => import("@/content/integrations/frameworks/embabel.mdx?collection=integrations"), + "frameworks/google-adk": () => import("@/content/integrations/frameworks/google-adk.mdx?collection=integrations"), + "frameworks/haystack": () => import("@/content/integrations/frameworks/haystack.mdx?collection=integrations"), + "frameworks/instructor": () => import("@/content/integrations/frameworks/instructor.mdx?collection=integrations"), + "frameworks/koog": () => import("@/content/integrations/frameworks/koog.mdx?collection=integrations"), + "frameworks/langchain-deepagents": () => import("@/content/integrations/frameworks/langchain-deepagents.mdx?collection=integrations"), + "frameworks/langchain": () => import("@/content/integrations/frameworks/langchain.mdx?collection=integrations"), + "frameworks/langserve": () => import("@/content/integrations/frameworks/langserve.md?collection=integrations"), + "frameworks/litellm-sdk": () => import("@/content/integrations/frameworks/litellm-sdk.mdx?collection=integrations"), + "frameworks/livekit": () => import("@/content/integrations/frameworks/livekit.mdx?collection=integrations"), + "frameworks/llamaindex-workflows": () => import("@/content/integrations/frameworks/llamaindex-workflows.mdx?collection=integrations"), + "frameworks/llamaindex": () => import("@/content/integrations/frameworks/llamaindex.mdx?collection=integrations"), + "frameworks/mastra": () => import("@/content/integrations/frameworks/mastra.mdx?collection=integrations"), + "frameworks/microsoft-agent-framework": () => import("@/content/integrations/frameworks/microsoft-agent-framework.mdx?collection=integrations"), + "frameworks/mirascope": () => import("@/content/integrations/frameworks/mirascope.mdx?collection=integrations"), + "frameworks/openai-agents": () => import("@/content/integrations/frameworks/openai-agents.mdx?collection=integrations"), + "frameworks/pipecat": () => import("@/content/integrations/frameworks/pipecat.mdx?collection=integrations"), + "frameworks/pydantic-ai": () => import("@/content/integrations/frameworks/pydantic-ai.mdx?collection=integrations"), + "frameworks/quarkus-langchain4j": () => import("@/content/integrations/frameworks/quarkus-langchain4j.mdx?collection=integrations"), + "frameworks/ragas": () => import("@/content/integrations/frameworks/ragas.mdx?collection=integrations"), + "frameworks/semantic-kernel": () => import("@/content/integrations/frameworks/semantic-kernel.mdx?collection=integrations"), + "frameworks/smolagents": () => import("@/content/integrations/frameworks/smolagents.mdx?collection=integrations"), + "frameworks/spring-ai": () => import("@/content/integrations/frameworks/spring-ai.mdx?collection=integrations"), + "frameworks/strands-agents": () => import("@/content/integrations/frameworks/strands-agents.mdx?collection=integrations"), + "frameworks/swiftide": () => import("@/content/integrations/frameworks/swiftide.mdx?collection=integrations"), + "frameworks/temporal": () => import("@/content/integrations/frameworks/temporal.mdx?collection=integrations"), + "frameworks/vercel-ai-sdk": () => import("@/content/integrations/frameworks/vercel-ai-sdk.mdx?collection=integrations"), + "frameworks/voltagent": () => import("@/content/integrations/frameworks/voltagent.mdx?collection=integrations"), + "frameworks/watsonx-orchestrate": () => import("@/content/integrations/frameworks/watsonx-orchestrate.mdx?collection=integrations"), + "gateways/anannas": () => import("@/content/integrations/gateways/anannas.mdx?collection=integrations"), + "gateways/helicone": () => import("@/content/integrations/gateways/helicone.mdx?collection=integrations"), + "gateways/kong-ai-plugin": () => import("@/content/integrations/gateways/kong-ai-plugin.mdx?collection=integrations"), + "gateways/litellm": () => import("@/content/integrations/gateways/litellm.mdx?collection=integrations"), + "gateways/openrouter": () => import("@/content/integrations/gateways/openrouter.mdx?collection=integrations"), + "gateways/portkey": () => import("@/content/integrations/gateways/portkey.mdx?collection=integrations"), + "gateways/truefoundry": () => import("@/content/integrations/gateways/truefoundry.mdx?collection=integrations"), + "gateways/vercel-ai-gateway": () => import("@/content/integrations/gateways/vercel-ai-gateway.mdx?collection=integrations"), + "": () => import("@/content/integrations/index.mdx?collection=integrations"), + "model-providers/amazon-bedrock-agents": () => import("@/content/integrations/model-providers/amazon-bedrock-agents.mdx?collection=integrations"), + "model-providers/amazon-bedrock": () => import("@/content/integrations/model-providers/amazon-bedrock.md?collection=integrations"), + "model-providers/anthropic-js": () => import("@/content/integrations/model-providers/anthropic-js.mdx?collection=integrations"), + "model-providers/anthropic": () => import("@/content/integrations/model-providers/anthropic.mdx?collection=integrations"), + "model-providers/baseten": () => import("@/content/integrations/model-providers/baseten.mdx?collection=integrations"), + "model-providers/byteplus": () => import("@/content/integrations/model-providers/byteplus.mdx?collection=integrations"), + "model-providers/cerebras": () => import("@/content/integrations/model-providers/cerebras.mdx?collection=integrations"), + "model-providers/cleanlab": () => import("@/content/integrations/model-providers/cleanlab.md?collection=integrations"), + "model-providers/cohere": () => import("@/content/integrations/model-providers/cohere.md?collection=integrations"), + "model-providers/cometapi": () => import("@/content/integrations/model-providers/cometapi.mdx?collection=integrations"), + "model-providers/databricks": () => import("@/content/integrations/model-providers/databricks.mdx?collection=integrations"), + "model-providers/deepseek": () => import("@/content/integrations/model-providers/deepseek.mdx?collection=integrations"), + "model-providers/fireworks-ai": () => import("@/content/integrations/model-providers/fireworks-ai.mdx?collection=integrations"), + "model-providers/google-gemini": () => import("@/content/integrations/model-providers/google-gemini.mdx?collection=integrations"), + "model-providers/google-vertex-ai": () => import("@/content/integrations/model-providers/google-vertex-ai.mdx?collection=integrations"), + "model-providers/groq": () => import("@/content/integrations/model-providers/groq.mdx?collection=integrations"), + "model-providers/huggingface": () => import("@/content/integrations/model-providers/huggingface.mdx?collection=integrations"), + "model-providers/mistral-sdk": () => import("@/content/integrations/model-providers/mistral-sdk.mdx?collection=integrations"), + "model-providers/novitaai": () => import("@/content/integrations/model-providers/novitaai.mdx?collection=integrations"), + "model-providers/ollama": () => import("@/content/integrations/model-providers/ollama.md?collection=integrations"), + "model-providers/openai-assistants-api": () => import("@/content/integrations/model-providers/openai-assistants-api.md?collection=integrations"), + "model-providers/openai-js": () => import("@/content/integrations/model-providers/openai-js.mdx?collection=integrations"), + "model-providers/openai-py": () => import("@/content/integrations/model-providers/openai-py.mdx?collection=integrations"), + "model-providers/togetherai": () => import("@/content/integrations/model-providers/togetherai.mdx?collection=integrations"), + "model-providers/vllm": () => import("@/content/integrations/model-providers/vllm.mdx?collection=integrations"), + "model-providers/xai-grok": () => import("@/content/integrations/model-providers/xai-grok.mdx?collection=integrations"), + "native/opentelemetry": () => import("@/content/integrations/native/opentelemetry.mdx?collection=integrations"), + "no-code/dify": () => import("@/content/integrations/no-code/dify.mdx?collection=integrations"), + "no-code/flowise": () => import("@/content/integrations/no-code/flowise.mdx?collection=integrations"), + "no-code/goose": () => import("@/content/integrations/no-code/goose.mdx?collection=integrations"), + "no-code/langdock": () => import("@/content/integrations/no-code/langdock.mdx?collection=integrations"), + "no-code/langflow": () => import("@/content/integrations/no-code/langflow.mdx?collection=integrations"), + "no-code/lobechat": () => import("@/content/integrations/no-code/lobechat.mdx?collection=integrations"), + "no-code/n8n": () => import("@/content/integrations/no-code/n8n.mdx?collection=integrations"), + "no-code/openwebui": () => import("@/content/integrations/no-code/openwebui.mdx?collection=integrations"), + "no-code/ragflow": () => import("@/content/integrations/no-code/ragflow.mdx?collection=integrations"), + "no-code/vapi": () => import("@/content/integrations/no-code/vapi.mdx?collection=integrations"), + "other/claude-code": () => import("@/content/integrations/other/claude-code.mdx?collection=integrations"), + "other/cognee": () => import("@/content/integrations/other/cognee.mdx?collection=integrations"), + "other/cursor": () => import("@/content/integrations/other/cursor.mdx?collection=integrations"), + "other/exa": () => import("@/content/integrations/other/exa.mdx?collection=integrations"), + "other/firecrawl": () => import("@/content/integrations/other/firecrawl.mdx?collection=integrations"), + "other/gradio": () => import("@/content/integrations/other/gradio.md?collection=integrations"), + "other/inferable": () => import("@/content/integrations/other/inferable.mdx?collection=integrations"), + "other/librechat": () => import("@/content/integrations/other/librechat.mdx?collection=integrations"), + "other/mcp-use": () => import("@/content/integrations/other/mcp-use.mdx?collection=integrations"), + "other/milvus": () => import("@/content/integrations/other/milvus.mdx?collection=integrations"), + "other/openclaw": () => import("@/content/integrations/other/openclaw.mdx?collection=integrations"), + "other/parallel-ai": () => import("@/content/integrations/other/parallel-ai.mdx?collection=integrations"), + "other/promptfoo": () => import("@/content/integrations/other/promptfoo.mdx?collection=integrations"), + "other/testable-minds": () => import("@/content/integrations/other/testable-minds.mdx?collection=integrations"), + "other/zapier": () => import("@/content/integrations/other/zapier.mdx?collection=integrations"), + }, + "security": { + "ai-features": () => import("@/content/security/ai-features.mdx?collection=security"), + "auth": () => import("@/content/security/auth.mdx?collection=security"), + "compliance-faq": () => import("@/content/security/compliance-faq.mdx?collection=security"), + "data-regions": () => import("@/content/security/data-regions.mdx?collection=security"), + "dependencies": () => import("@/content/security/dependencies.mdx?collection=security"), + "dpa": () => import("@/content/security/dpa.mdx?collection=security"), + "encryption": () => import("@/content/security/encryption.mdx?collection=security"), + "gdpr": () => import("@/content/security/gdpr.mdx?collection=security"), + "hipaa": () => import("@/content/security/hipaa.mdx?collection=security"), + "incident-and-breach": () => import("@/content/security/incident-and-breach.mdx?collection=security"), + "": () => import("@/content/security/index.mdx?collection=security"), + "iso27001": () => import("@/content/security/iso27001.mdx?collection=security"), + "manage-personal-data": () => import("@/content/security/manage-personal-data.mdx?collection=security"), + "nda": () => import("@/content/security/nda.mdx?collection=security"), + "networking": () => import("@/content/security/networking.mdx?collection=security"), + "penetration-testing": () => import("@/content/security/penetration-testing.mdx?collection=security"), + "policies": () => import("@/content/security/policies.mdx?collection=security"), + "privacy-faq": () => import("@/content/security/privacy-faq.mdx?collection=security"), + "responsible-disclosure": () => import("@/content/security/responsible-disclosure.mdx?collection=security"), + "security-faq": () => import("@/content/security/security-faq.mdx?collection=security"), + "soc2": () => import("@/content/security/soc2.mdx?collection=security"), + "subprocessors": () => import("@/content/security/subprocessors.mdx?collection=security"), + "toms": () => import("@/content/security/toms.mdx?collection=security"), + "vulnerability-management": () => import("@/content/security/vulnerability-management.mdx?collection=security"), + "whistleblowing": () => import("@/content/security/whistleblowing.mdx?collection=security"), + }, + "library": { + "": () => import("@/content/library/index.mdx?collection=library"), + }, + "customers": { + "canva": () => import("@/content/customers/canva.mdx?collection=customers"), + "": () => import("@/content/customers/index.mdx?collection=customers"), + "khan-academy": () => import("@/content/customers/khan-academy.mdx?collection=customers"), + "magic-patterns-ai-design-tools": () => import("@/content/customers/magic-patterns-ai-design-tools.mdx?collection=customers"), + "merckgroup": () => import("@/content/customers/merckgroup.mdx?collection=customers"), + "sumup": () => import("@/content/customers/sumup.mdx?collection=customers"), + }, + "handbook": { + "chapters/customers": () => import("@/content/handbook/chapters/customers.mdx?collection=handbook"), + "chapters/mission": () => import("@/content/handbook/chapters/mission.mdx?collection=handbook"), + "chapters/monetization": () => import("@/content/handbook/chapters/monetization.mdx?collection=handbook"), + "chapters/open-source": () => import("@/content/handbook/chapters/open-source.mdx?collection=handbook"), + "chapters/story": () => import("@/content/handbook/chapters/story.mdx?collection=handbook"), + "chapters/team": () => import("@/content/handbook/chapters/team.mdx?collection=handbook"), + "chapters/why": () => import("@/content/handbook/chapters/why.mdx?collection=handbook"), + "devrel/community-hour": () => import("@/content/handbook/devrel/community-hour.mdx?collection=handbook"), + "how-we-hire/cs-fde-super-day": () => import("@/content/handbook/how-we-hire/cs-fde-super-day.mdx?collection=handbook"), + "how-we-hire/engineering-super-day": () => import("@/content/handbook/how-we-hire/engineering-super-day.mdx?collection=handbook"), + "how-we-hire/hiring-process": () => import("@/content/handbook/how-we-hire/hiring-process.mdx?collection=handbook"), + "how-we-hire/philosophy": () => import("@/content/handbook/how-we-hire/philosophy.mdx?collection=handbook"), + "how-we-hire/support-super-day": () => import("@/content/handbook/how-we-hire/support-super-day.mdx?collection=handbook"), + "how-we-work/meetings": () => import("@/content/handbook/how-we-work/meetings.mdx?collection=handbook"), + "how-we-work/ownership": () => import("@/content/handbook/how-we-work/ownership.mdx?collection=handbook"), + "how-we-work/principles": () => import("@/content/handbook/how-we-work/principles.mdx?collection=handbook"), + "how-we-work/productivity-and-ai": () => import("@/content/handbook/how-we-work/productivity-and-ai.mdx?collection=handbook"), + "how-we-work/remote": () => import("@/content/handbook/how-we-work/remote.mdx?collection=handbook"), + "": () => import("@/content/handbook/index.mdx?collection=handbook"), + "operations/entity-structure": () => import("@/content/handbook/operations/entity-structure.mdx?collection=handbook"), + "operations/finance": () => import("@/content/handbook/operations/finance.mdx?collection=handbook"), + "perks-and-pay": () => import("@/content/handbook/perks-and-pay.mdx?collection=handbook"), + "product-engineering/analytics": () => import("@/content/handbook/product-engineering/analytics.mdx?collection=handbook"), + "product-engineering/architecture": () => import("@/content/handbook/product-engineering/architecture.mdx?collection=handbook"), + "product-engineering/how-we-work/code-review": () => import("@/content/handbook/product-engineering/how-we-work/code-review.mdx?collection=handbook"), + "product-engineering/how-we-work/onboarding": () => import("@/content/handbook/product-engineering/how-we-work/onboarding.mdx?collection=handbook"), + "product-engineering/how-we-work/product-ops": () => import("@/content/handbook/product-engineering/how-we-work/product-ops.mdx?collection=handbook"), + "product-engineering/how-we-work/roadmapping": () => import("@/content/handbook/product-engineering/how-we-work/roadmapping.mdx?collection=handbook"), + "product-engineering/how-we-work/workflow": () => import("@/content/handbook/product-engineering/how-we-work/workflow.mdx?collection=handbook"), + "product-engineering/incident-response": () => import("@/content/handbook/product-engineering/incident-response.mdx?collection=handbook"), + "product-engineering/infrastructure/clickhouse": () => import("@/content/handbook/product-engineering/infrastructure/clickhouse.mdx?collection=handbook"), + "product-engineering/infrastructure/ecs": () => import("@/content/handbook/product-engineering/infrastructure/ecs.mdx?collection=handbook"), + "product-engineering/playbooks/code-structure": () => import("@/content/handbook/product-engineering/playbooks/code-structure.mdx?collection=handbook"), + "product-engineering/playbooks/documentation": () => import("@/content/handbook/product-engineering/playbooks/documentation.mdx?collection=handbook"), + "product-engineering/playbooks/releases": () => import("@/content/handbook/product-engineering/playbooks/releases.mdx?collection=handbook"), + "product-engineering/playbooks/vulnerability-handling": () => import("@/content/handbook/product-engineering/playbooks/vulnerability-handling.mdx?collection=handbook"), + "product-engineering/principles": () => import("@/content/handbook/product-engineering/principles.mdx?collection=handbook"), + "product-engineering/tech-stack": () => import("@/content/handbook/product-engineering/tech-stack.mdx?collection=handbook"), + "sales-and-cs/customer-success": () => import("@/content/handbook/sales-and-cs/customer-success.mdx?collection=handbook"), + "sales-and-cs/overview": () => import("@/content/handbook/sales-and-cs/overview.mdx?collection=handbook"), + "sales-and-cs/sales": () => import("@/content/handbook/sales-and-cs/sales.mdx?collection=handbook"), + "support/support": () => import("@/content/handbook/support/support.mdx?collection=handbook"), + "support/using-plain": () => import("@/content/handbook/support/using-plain.mdx?collection=handbook"), + "tools-and-processes/spending-money": () => import("@/content/handbook/tools-and-processes/spending-money.mdx?collection=handbook"), + "tools-and-processes/time-off": () => import("@/content/handbook/tools-and-processes/time-off.mdx?collection=handbook"), + "tools-and-processes/using-linear": () => import("@/content/handbook/tools-and-processes/using-linear.mdx?collection=handbook"), + "tools-and-processes/using-slack": () => import("@/content/handbook/tools-and-processes/using-slack.mdx?collection=handbook"), + }, + "marketing": { + "about": () => import("@/content/marketing/about.mdx?collection=marketing"), + "careers": () => import("@/content/marketing/careers.mdx?collection=marketing"), + "cn": () => import("@/content/marketing/cn.mdx?collection=marketing"), + "community": () => import("@/content/marketing/community.mdx?collection=marketing"), + "cookie-policy": () => import("@/content/marketing/cookie-policy.mdx?collection=marketing"), + "enterprise": () => import("@/content/marketing/enterprise.mdx?collection=marketing"), + "find-us": () => import("@/content/marketing/find-us.mdx?collection=marketing"), + "imprint": () => import("@/content/marketing/imprint.mdx?collection=marketing"), + "jp": () => import("@/content/marketing/jp.mdx?collection=marketing"), + "kr": () => import("@/content/marketing/kr.mdx?collection=marketing"), + "oss-friends": () => import("@/content/marketing/oss-friends.mdx?collection=marketing"), + "press": () => import("@/content/marketing/press.mdx?collection=marketing"), + "pricing-self-host": () => import("@/content/marketing/pricing-self-host.mdx?collection=marketing"), + "pricing": () => import("@/content/marketing/pricing.mdx?collection=marketing"), + "privacy": () => import("@/content/marketing/privacy.mdx?collection=marketing"), + "research": () => import("@/content/marketing/research.mdx?collection=marketing"), + "startups": () => import("@/content/marketing/startups.mdx?collection=marketing"), + "support": () => import("@/content/marketing/support.mdx?collection=marketing"), + "talk-to-us": () => import("@/content/marketing/talk-to-us.mdx?collection=marketing"), + "terms": () => import("@/content/marketing/terms.mdx?collection=marketing"), + "watch-demo": () => import("@/content/marketing/watch-demo.mdx?collection=marketing"), + "wrapped": () => import("@/content/marketing/wrapped.mdx?collection=marketing"), + }, +}; + +export function getSectionDocLoader(collection: string, slug: string[]) { + const loaders = sectionLoaders[collection]; + if (!loaders) return undefined; + const key = slug.length === 0 ? '' : slug.join('/'); + return loaders[key]; +} diff --git a/lib/sections.ts b/lib/sections.ts new file mode 100644 index 0000000000..1e87fc1e20 --- /dev/null +++ b/lib/sections.ts @@ -0,0 +1,104 @@ +import { + selfHostingSource, + blogSource, + changelogSource, + guidesSource, + faqSource, + integrationsSource, + securitySource, + librarySource, + usersSource, + handbookSource, + marketingSource, + MARKETING_SLUGS, +} from "./source"; + +const DOC_SECTIONS = { + "self-hosting": { + source: selfHostingSource, + collection: "selfHosting", + title: "Self-hosting", + }, + blog: { + source: blogSource, + collection: "blog", + title: "Blog", + }, + changelog: { + source: changelogSource, + collection: "changelog", + title: "Changelog", + }, + guides: { + source: guidesSource, + collection: "guides", + title: "Guides", + }, + faq: { + source: faqSource, + collection: "faq", + title: "FAQ", + }, + integrations: { + source: integrationsSource, + collection: "integrations", + title: "Integrations", + }, + security: { + source: securitySource, + collection: "security", + title: "Security", + }, + library: { + source: librarySource, + collection: "library", + title: "Library", + }, + users: { + source: usersSource, + collection: "customers", + title: "Users", + }, + handbook: { + source: handbookSource, + collection: "handbook", + title: "Handbook", + }, +} as const; + +const marketingEntries = Object.fromEntries( + MARKETING_SLUGS.map((s) => [ + s, + { source: marketingSource, collection: "marketing" as const, title: s }, + ]) +); + +export const SECTION_CONFIG = { ...DOC_SECTIONS, ...marketingEntries } as const; +export const SECTION_SLUGS = Object.keys(SECTION_CONFIG) as (keyof typeof SECTION_CONFIG)[]; +export type SectionSlug = (typeof SECTION_SLUGS)[number]; +export const MARKETING_SECTION_SLUGS = new Set(MARKETING_SLUGS); + +/** Sections that have their own app route (app/integrations, app/self-hosting, etc.) like app/docs. Exclude from [section]. */ +export const DOCS_STYLE_APP_SECTIONS = new Set([ + "integrations", + "self-hosting", + "guides", + "library", +]); + +/** Sections that are blog/changelog posts — no left sidebar */ +export const POST_SECTIONS = new Set(["blog", "changelog", "users"]); + +/** Changelog posts — no sidebars at all, centered narrow content (like marketing) */ +export const CHANGELOG_SECTIONS = new Set(["changelog"]); + +/** Sections that have their own route folder under app/(wide)/ and use wide layout without prose */ +export const WIDE_SECTION_SLUGS = [ + "pricing", + "pricing-self-host", + "talk-to-us", + "watch-demo", + "startups", +] as const; +export type WideSectionSlug = (typeof WIDE_SECTION_SLUGS)[number]; +export const WIDE_SECTIONS = new Set<string>(WIDE_SECTION_SLUGS); diff --git a/lib/source.ts b/lib/source.ts new file mode 100644 index 0000000000..bd65517a90 --- /dev/null +++ b/lib/source.ts @@ -0,0 +1,151 @@ +import { loader } from "fumadocs-core/source"; +import { + docs, + selfHosting, + blog, + changelog, + guides, + faq, + integrations, + security, + library, + customers, + handbook, + marketing, +} from "../.source/server"; + +export const source = loader({ + baseUrl: "/docs", + source: docs.toFumadocsSource(), +}); + +export const selfHostingSource = loader({ + baseUrl: "/self-hosting", + source: selfHosting.toFumadocsSource(), +}); + +export const blogSource = loader({ + baseUrl: "/blog", + source: blog.toFumadocsSource(), +}); + +export const changelogSource = loader({ + baseUrl: "/changelog", + source: changelog.toFumadocsSource(), +}); + +export const guidesSource = loader({ + baseUrl: "/guides", + source: guides.toFumadocsSource(), +}); + +export const faqSource = loader({ + baseUrl: "/faq", + source: faq.toFumadocsSource(), +}); + +export const integrationsSource = loader({ + baseUrl: "/integrations", + source: integrations.toFumadocsSource(), +}); + +export const securitySource = loader({ + baseUrl: "/security", + source: security.toFumadocsSource(), +}); + +export const librarySource = loader({ + baseUrl: "/library", + source: library.toFumadocsSource(), +}); + +export const usersSource = loader({ + baseUrl: "/users", + source: customers.toFumadocsSource(), +}); + +export const handbookSource = loader({ + baseUrl: "/handbook", + source: handbook.toFumadocsSource(), +}); + +export const marketingSource = loader({ + baseUrl: "", + source: marketing.toFumadocsSource(), +}); + +/** Slugs that are single marketing pages (content/marketing/*.mdx) */ +export const MARKETING_SLUGS = [ + "about", + "careers", + "cn", + "community", + "cookie-policy", + "enterprise", + "find-us", + "imprint", + "jp", + "kr", + "oss-friends", + "press", + "pricing", + "pricing-self-host", + "privacy", + "research", + "startups", + "support", + "talk-to-us", + "terms", + "watch-demo", + "wrapped", +] as const; + +const routeToSource: Record< + string, + { getPage: (slug: string[]) => unknown; generateParams: () => { slug: string[] }[]; baseUrl: string } +> = { + "/blog": { ...blogSource, baseUrl: "/blog" }, + "/changelog": { ...changelogSource, baseUrl: "/changelog" }, + "/guides": { ...guidesSource, baseUrl: "/guides" }, + "/guides/videos": { ...guidesSource, baseUrl: "/guides" }, + "/guides/cookbook": { ...guidesSource, baseUrl: "/guides" }, + "/faq": { ...faqSource, baseUrl: "/faq" }, + "/faq/all": { ...faqSource, baseUrl: "/faq" }, + "/integrations": { ...integrationsSource, baseUrl: "/integrations" }, + "/security": { ...securitySource, baseUrl: "/security" }, + "/library": { ...librarySource, baseUrl: "/library" }, + "/users": { ...usersSource, baseUrl: "/users" }, + "/handbook": { ...handbookSource, baseUrl: "/handbook" }, + "/handbook/chapters": { ...handbookSource, baseUrl: "/handbook" }, + "/self-hosting": { ...selfHostingSource, baseUrl: "/self-hosting" }, +}; + +export function getPagesForRoute(route: string) { + const src = routeToSource[route]; + if (!src) return []; + try { + const params = src.generateParams(); + return params + .map(({ slug }) => { + const page = src.getPage(slug) as { + data: { title?: string; description?: string; date?: string; tag?: string; [k: string]: unknown }; + } | undefined; + if (!page) return null; + const path = slug.length ? `/${slug.join("/")}` : ""; + return { + route: `${src.baseUrl}${path}`, + name: page.data?.title, + title: page.data?.title, + frontMatter: { ...page.data, date: (page.data as { date?: string })?.date }, + }; + }) + .filter(Boolean) as Array<{ + route: string; + name?: string; + title?: string; + frontMatter?: Record<string, unknown>; + }>; + } catch { + return []; + } +} diff --git a/mdx-components.tsx b/mdx-components.tsx new file mode 100644 index 0000000000..bc2bd9b08c --- /dev/null +++ b/mdx-components.tsx @@ -0,0 +1,88 @@ +import defaultMdxComponents from "fumadocs-ui/mdx"; +import type { MDXComponents } from "mdx/types"; +import React from "react"; +import NextImage from "next/image"; +import { Frame } from "@/components/Frame"; +import { Video } from "@/components/Video"; +import { LangTabs } from "@/components/LangTabs"; +import { FetchReadme } from "@/components/FetchReadme"; +import { Callout, Tabs, Tab, Cards, Steps, FileTree } from "@/lib/nextra-shim/components"; +import { MdxDetails, MdxSummary } from "@/components/MdxDetails"; +import { AvailabilityBanner } from "@/components/availability"; + +const BLOCK_TAGS = new Set([ + "div", "details", "summary", "figure", "pre", "table", + "ul", "ol", "blockquote", "section", "article", +]); + +function MdxParagraph({ children, ...props }: React.HTMLAttributes<HTMLElement>) { + const childrenArray = React.Children.toArray(children); + + // If children contain MdxSummary, render without any wrapping element. + // <summary> MUST be a direct child of <details> for the browser to recognize it + // as the disclosure widget. React does not auto-correct invalid DOM nesting + // the way the HTML parser does, so a <p> or <div> wrapping <summary> keeps it trapped. + const hasSummary = childrenArray.some( + (child) => React.isValidElement(child) && child.type === MdxSummary + ); + if (hasSummary) { + return <>{children}</>; + } + + const hasBlock = childrenArray.some( + (child) => + React.isValidElement(child) && + typeof child.type === "string" && + BLOCK_TAGS.has(child.type) + ); + if (hasBlock) { + return <div {...props}>{children}</div>; + } + return <p {...props}>{children}</p>; +} + +function MdxImage(props: React.ImgHTMLAttributes<HTMLImageElement>) { + const { src, alt, width, height, ...rest } = props; + if (!src) return null; + if (width && height) { + return ( + <NextImage + src={src} + alt={alt ?? ""} + width={Number(width)} + height={Number(height)} + {...(rest as object)} + /> + ); + } + // eslint-disable-next-line @next/next/no-img-element + return <img src={src} alt={alt ?? ""} {...rest} />; +} + +export function getMDXComponents(components?: MDXComponents): MDXComponents { + return { + ...defaultMdxComponents, + img: MdxImage, + p: MdxParagraph, + Frame, + Video, + LangTabs, + Callout, + Tabs, + Tab, + "Tabs.Tab": Tab, + Cards, + Card: Cards.Card, + Steps, + FileTree, + FetchReadme, + details: MdxDetails, + summary: MdxSummary, + AvailabilityBanner, + ...components, + }; +} + +export function useMDXComponents(components?: MDXComponents): MDXComponents { + return getMDXComponents(components); +} diff --git a/next-env.d.ts b/next-env.d.ts index 3cd7048ed9..c4b7818fbb 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,6 @@ /// <reference types="next" /> /// <reference types="next/image-types/global" /> -/// <reference types="next/navigation-types/compat/navigation" /> +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/next.config.mjs b/next.config.mjs index 08aa3cee9a..4bbbc88aa0 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,13 +1,18 @@ -import remarkGfm from "remark-gfm"; -import nextra from "nextra"; +import path from "path"; +import { fileURLToPath } from "url"; +import { createMDX } from "fumadocs-mdx/next"; import NextBundleAnalyzer from "@next/bundle-analyzer"; import * as redirects from "./lib/redirects.js"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + const withBundleAnalyzer = NextBundleAnalyzer({ enabled: process.env.ANALYZE === "true", }); +const withMDX = createMDX(); + /** * CSP headers * img-src https to allow loading images from SSO providers @@ -32,18 +37,8 @@ const cspHeader = ` : ""; -// nextra config -const withNextra = nextra({ - theme: "nextra-theme-docs", - themeConfig: "./theme.config.tsx", - mdxOptions: { - remarkPlugins: [remarkGfm], - }, - defaultShowCopyCode: true, -}); - -// next config -const nextraConfig = withNextra({ +/** @type {import('next').NextConfig} */ +const nextConfig = { // Enable static export when STATIC_EXPORT env var is set ...(process.env.STATIC_EXPORT === "true" && { output: "export", @@ -53,9 +48,54 @@ const nextraConfig = withNextra({ }), experimental: { scrollRestoration: true, + // Reduce peak memory during production build (helps avoid OOM on Vercel) + webpackMemoryOptimizations: true, + serverSourceMaps: false, + }, + // Reduce memory usage during build + productionBrowserSourceMaps: false, + turbopack: { + // Fix Turbopack panic when running from a git worktree with multiple lockfiles. + // Tell Turbopack to use this worktree's directory as the root. + root: __dirname, }, transpilePackages: ["react-tweet", "react-syntax-highlighter", "geist"], + webpack(config, { isServer, webpack }) { + config.resolve = config.resolve ?? {}; + config.resolve.alias = { + ...config.resolve.alias, + "nextra/context": path.resolve(__dirname, "lib/nextra-shim/context.tsx"), + "nextra/hooks": path.resolve(__dirname, "lib/nextra-shim/hooks.ts"), + nextra: path.resolve(__dirname, "lib/nextra-shim/nextra-types.ts"), + "nextra-theme-docs": path.resolve(__dirname, "lib/nextra-shim/theme-docs.tsx"), + "nextra/components": path.resolve(__dirname, "lib/nextra-shim/components.tsx"), + }; + // Prevent client bundle from failing on Node built-ins (e.g. fumadocs-mdx using fs/promises) + if (!isServer) { + config.resolve.fallback = { + ...config.resolve.fallback, + fs: false, + "fs/promises": false, + path: false, + os: false, + url: false, + module: false, + stream: false, + buffer: false, + }; + // Strip the node: URI scheme prefix so webpack can apply the fallback above. + // fumadocs-mdx server code uses `import 'node:fs/promises'` which webpack + // doesn't handle natively in browser bundles. + config.plugins.push( + new webpack.NormalModuleReplacementPlugin(/^node:/, (resource) => { + resource.request = resource.request.replace(/^node:/, ""); + }) + ); + } + return config; + }, + images: { // Disable image optimization for static export ...(process.env.STATIC_EXPORT === "true" && { unoptimized: true }), @@ -175,6 +215,6 @@ const nextraConfig = withNextra({ ], }; }, -}); +}; -export default withBundleAnalyzer(nextraConfig); +export default withBundleAnalyzer(withMDX(nextConfig)); diff --git a/package.json b/package.json index 3bd83177d9..5bb8220624 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "0.0.1", "description": "Langfuse docs", "scripts": { - "dev": "next dev -p 3333", - "prebuild": "node scripts/update-github-stars.js && node scripts/authors/generate-contributors.js && node scripts/copy_md_sources.js", + "dev": "next dev -p 3333 -H localhost", + "prebuild": "node scripts/update-github-stars.js && node scripts/authors/generate-contributors.js && node scripts/generate-section-loaders.js && node scripts/copy_md_sources.js", "build": "next build", "postbuild": "pnpm run postbuild:sitemap && pnpm run postbuild:cleanup && pnpm run postbuild:llms-txt", "build:static": "cross-env STATIC_EXPORT=true pnpm run prebuild && cross-env STATIC_EXPORT=true next build && pnpm run postbuild:static", @@ -12,7 +12,7 @@ "start": "next start -p 3333", "analyze": "cross-env ANALYZE=true next build", "postbuild:sitemap": "next-sitemap", - "postbuild:cleanup": "echo 'Removing .next/cache to resolve Nextra caching bug' && rm -rf .next/cache", + "postbuild:cleanup": "echo 'Removing .next/cache' && rm -rf .next/cache", "postbuild:llms-txt": "node scripts/generate_llms_txt.js", "link-check": "node scripts/check-links.js", "sitemap-check": "node scripts/check-sitemap-links.js", @@ -65,11 +65,14 @@ "@vercel/og": "^0.6.8", "@vidstack/react": "^1.12.13", "ai": "^5.0.8", - "autoprefixer": "^10.4.21", + "@tailwindcss/postcss": "^4.0.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "embla-carousel-react": "^8.6.0", "framer-motion": "^11.15.0", + "fumadocs-core": "^16.6.3", + "fumadocs-mdx": "^14.2.7", + "fumadocs-ui": "^16.6.3", "geist": "^1.3.1", "gpt3-tokenizer": "^1.1.5", "harden-react-markdown": "^1.0.2", @@ -80,11 +83,11 @@ "livekit-server-sdk": "^2.15.0", "lucide-react": "^0.469.0", "marked": "^16.3.0", + "mdast-util-mdx-jsx": "^3.2.0", "nanoid": "^5.1.5", - "next": "15.2.8", + "next": "^16.1.6", "next-sitemap": "^4.2.3", - "nextra": "3.0.15", - "nextra-theme-docs": "3.0.15", + "next-themes": "^0.4.6", "nodemailer": "^7.0.11", "openai": "^6.22.0", "openai-edge": "^1.2.2", @@ -104,14 +107,15 @@ "remark-gfm": "^4.0.1", "remark-math": "^6.0.0", "tailwind-merge": "^2.5.5", - "tailwindcss": "^3.4.17", + "tailwindcss": "^4.0.0", "tailwindcss-animate": "^1.0.7", "three": "^0.172.0", "use-stick-to-bottom": "^1.1.1", "zod": "^4.0.15" }, "devDependencies": { - "@next/bundle-analyzer": "^15.1.4", + "@next/bundle-analyzer": "^16.1.6", + "@types/mdx": "^2.0.13", "@types/node": "22.18.0", "@types/react-syntax-highlighter": "^15.5.13", "cross-env": "^7.0.3", @@ -127,5 +131,11 @@ "skipCommentIfEmpty": true, "showDetails": true }, - "packageManager": "pnpm@9.5.0" + "packageManager": "pnpm@9.5.0", + "pnpm": { + "overrides": { + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.4" + } + } } diff --git a/pages/404.mdx b/pages/404.mdx deleted file mode 100644 index 06a328ac86..0000000000 --- a/pages/404.mdx +++ /dev/null @@ -1,14 +0,0 @@ -import { NotFoundPage } from "nextra-theme-docs"; -import { NotFoundAnimation } from "@/components/not-found-animation"; - -<div className="text-center sm:py-20"> - -<NotFoundAnimation /> - -# 404: Page Not Found - -The page you were looking for does not exist. - -<NotFoundPage /> - -</div> diff --git a/pages/_app.tsx b/pages/_app.tsx deleted file mode 100644 index 7e025dd0d8..0000000000 --- a/pages/_app.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import "../style.css"; -import "@vidstack/react/player/styles/base.css"; -import "../src/overrides.css"; -import Script from "next/script"; -import { useEffect } from "react"; -import { useRouter } from "next/router"; -import posthog from "posthog-js"; -import { PostHogProvider } from "posthog-js/react"; -import { Hubspot, hsPageView } from "@/components/analytics/hubspot"; -import { GeistSans } from "geist/font/sans"; -import { GeistMono } from "geist/font/mono"; - -export default function App({ Component, pageProps }) { - const router = useRouter(); - useEffect(() => { - // Initialize PostHog - if (typeof window !== "undefined") { - posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY, { - api_host: - process.env.NEXT_PUBLIC_POSTHOG_HOST || "https://eu.posthog.com", - ui_host: "https://eu.posthog.com", - persistence: "cookie", - // Enable debug mode in development - loaded: (posthog) => { - if (process.env.NODE_ENV === "development") posthog.debug(); - }, - }); - } - // Track page views - const handleRouteChange = (path) => { - posthog.capture("$pageview"); - hsPageView(path); - }; - router.events.on("routeChangeComplete", handleRouteChange); - return () => { - router.events.off("routeChangeComplete", handleRouteChange); - }; - }, []); - return ( - <div className={`${GeistSans.variable} font-sans ${GeistMono.variable}`}> - <PostHogProvider client={posthog}> - <Component {...pageProps} /> - </PostHogProvider> - {process.env.NODE_ENV === "production" && ( - <> - <Hubspot /> - {/* Cookieyes consent manager */} - <Script - id="cookieyes" - type="text/javascript" - src="https://cdn-cookieyes.com/client_data/40247147630c6589ad01a874/script.js" - strategy="beforeInteractive" - /> - </> - )} - </div> - ); -} diff --git a/pages/_meta.tsx b/pages/_meta.tsx deleted file mode 100644 index f67fe93797..0000000000 --- a/pages/_meta.tsx +++ /dev/null @@ -1,304 +0,0 @@ -export default { - index: { - type: "page", - title: "Langfuse", - display: "hidden", - theme: { - layout: "raw", - }, - }, - wrapped: { - type: "page", - title: "Langfuse Wrapped 2025", - display: "hidden", - theme: { - layout: "raw", - }, - }, - imprint: { - title: "Imprint", - type: "page", - display: "hidden", - }, - "find-us": { - title: "Find Us", - type: "page", - display: "hidden", - }, - cloud: { - type: "page", - title: "Cloud", - display: "hidden", - }, - product: { - title: "Product", - type: "menu", - items: { - overview: { - title: "Overview", - href: "/docs", - }, - observability: { - title: "LLM Observability", - href: "/docs/observability/overview", - }, - prompts: { - title: "Prompt Management", - href: "/docs/prompt-management/overview", - }, - evaluation: { - title: "Evaluation", - href: "/docs/evaluation/overview", - }, - }, - }, - resources: { - title: "Resources", - type: "menu", - items: { - blog: { - title: "Blog", - href: "/blog", - }, - changelog: { - title: "Changelog", - href: "/changelog", - }, - roadmap: { - title: "Roadmap", - href: "/docs/roadmap", - }, - customers: { - title: "Users", - href: "/users", - }, - exampleproject: { - title: "Example Project", - href: "/docs/demo", - }, - walkthroughs: { - title: "Walkthroughs", - href: "/watch-demo", - }, - support: { - title: "Support", - href: "/support", - }, - }, - }, - docs: { - type: "page", - title: "Docs", - }, - "self-hosting": { - type: "page", - title: "Self Hosting", - // hidden from main menu via overrides.css, nextra display:hidden otherwise breaks type:page - }, - guides: { - type: "page", - title: "Guides", - // hidden from main menu via overrides.css, nextra display:hidden otherwise breaks type:page - }, - integrations: { - type: "page", - title: "Integrations", - // hidden from main menu via overrides.css, nextra display:hidden otherwise breaks type:page - }, - faq: { - type: "page", - title: "FAQ", - // hidden from main menu via overrides.css, nextra display:hidden otherwise breaks type:page - }, - handbook: { - type: "page", - title: "Handbook", - // hidden from main menu via overrides.css, nextra display:hidden otherwise breaks type:page - }, - changelog: { - type: "page", - title: "Changelog", - theme: { - layout: "full", - }, - }, - pricing: { - title: "Pricing", - type: "page", - theme: { - layout: "full", - }, - }, - "pricing-self-host": { - title: "Pricing (self-hosted)", - type: "page", - theme: { - layout: "full", - }, - display: "hidden", - }, - blog: { - title: "Blog", - type: "page", - theme: { - layout: "full", - }, - display: "hidden", - }, - users: { - title: "Users", - type: "page", - display: "hidden", - theme: { - layout: "full", - }, - }, - "watch-demo": { - type: "page", - title: "Watch Demo", - display: "hidden", - theme: { - layout: "raw", - }, - }, - "talk-to-us": { - type: "page", - title: "Talk to us", - display: "hidden", - theme: { - layout: "raw", - }, - }, - careers: { - title: "Careers", - type: "page", - display: "hidden", - }, - support: { - title: "Support", - type: "page", - display: "hidden", - }, - enterprise: { - title: "Enterprise", - type: "page", - display: "hidden", - theme: { - typesetting: "article", - timestamp: false, - }, - }, - startups: { - title: "Startups", - type: "page", - display: "hidden", - theme: { - typesetting: "article", - timestamp: false, - }, - }, - research: { - title: "Research", - type: "page", - display: "hidden", - theme: { - typesetting: "article", - timestamp: false, - }, - }, - library: { - title: "Library", - type: "page", - theme: { - typesetting: "article", - breadcrumb: false, - }, - }, - terms: { - title: "Terms and Conditions", - type: "page", - display: "hidden", - }, - privacy: { - title: "Privacy Policy", - type: "page", - display: "hidden", - }, - jp: { - title: "Japanese Overview", - type: "page", - display: "hidden", - }, - kr: { - title: "Korean Overview", - type: "page", - display: "hidden", - }, - cn: { - title: "Chinese Overview", - type: "page", - display: "hidden", - }, - community: { - title: "Community", - type: "page", - display: "hidden", - }, - events: { - title: "Langfuse Events", - type: "page", - display: "hidden", - }, - "cookie-policy": { - title: "Cookie Policy", - type: "page", - display: "hidden", - }, - "oss-friends": { - title: "OSS Friends", - type: "page", - display: "hidden", - theme: { - typesetting: "article", - timestamp: false, - }, - }, - "press": { - title: "Press", - type: "page", - display: "hidden", - theme: { - typesetting: "article", - timestamp: false, - }, - }, - about: { - title: "About us", - type: "page", - display: "hidden", - theme: { - typesetting: "article", - timestamp: false, - }, - }, - "open-source": { - type: "page", - title: "Open Source", - display: "hidden", - theme: { - typesetting: "article", - timestamp: false, - }, - }, - "404": { - type: "page", - theme: { - typesetting: "article", - timestamp: false, - }, - }, - security: { - type: "page", - title: "Security & Compliance", - }, -}; diff --git a/pages/api/feedback.ts b/pages/api/feedback.ts deleted file mode 100644 index 1adb6e850b..0000000000 --- a/pages/api/feedback.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { NextResponse, NextRequest } from "next/server"; - -export const config = { - runtime: "edge", -}; - -export default async function handler(req: NextRequest) { - try { - if (req.method !== "POST") - return NextResponse.json( - {}, - { - status: 400, - statusText: "Bad Request - Only POST requests are allowed", - } - ); - if (!process.env.WEBSITE_FEEDBACK_WEBHOOK) - throw new Error("WEBSITE_FEEDBACK_WEBHOOK is not set"); - - const body = await req.json(); - - const webhookResponse = await fetch(process.env.WEBSITE_FEEDBACK_WEBHOOK, { - method: "POST", - body: JSON.stringify({ - type: "docs-feedback", - ...body, - }), - headers: { - "Content-Type": "application/json", - }, - }); - - if (webhookResponse.status === 200) { - return NextResponse.json({ status: "OK" }); - } else { - console.error(webhookResponse); - return NextResponse.json( - {}, - { - status: 500, - statusText: "Internal Server Error", - } - ); - } - } catch (error) { - console.error(error); - return NextResponse.json( - {}, - { - status: 500, - statusText: "Internal Server Error", - } - ); - } -} diff --git a/pages/api/get-continent-code.ts b/pages/api/get-continent-code.ts deleted file mode 100644 index e83381e8b1..0000000000 --- a/pages/api/get-continent-code.ts +++ /dev/null @@ -1,16 +0,0 @@ -export const runtime = "edge"; - -export default function GET(request: Request) { - const headers = new Headers(request.headers); - const continentCode = headers.get("x-vercel-ip-continent"); - - return new Response( - JSON.stringify({ continentCode: continentCode || undefined }), - { - status: 200, - headers: { - "Content-Type": "application/json", - }, - } - ); -} diff --git a/pages/api/md-to-pdf.ts b/pages/api/md-to-pdf.ts deleted file mode 100644 index 669c1d6649..0000000000 --- a/pages/api/md-to-pdf.ts +++ /dev/null @@ -1,312 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from "next"; -import { marked } from "marked"; - -// Allowed hostnames for markdown sourcing. Only fetch markdown from trusted hosts. -const ALLOWED_HOSTNAMES = [ - "langfuse.com", - "raw.githubusercontent.com", - "github.com", -]; - -/** - * Remove anchor tags from headings (e.g., [#anchor-id]) - * These are useful for web navigation but not needed in PDFs - */ -function removeAnchorTags(content: string): string { - // Match [#anchor-id] at the end of headings - return content.replace(/\s*\[#[\w-]+\]/g, ""); -} - -/** - * Process MDX Callout components and convert them to HTML divs - * Supports types: info, warn, warning, error, danger - */ -function processCallouts(content: string): string { - // Match <Callout type="...">...</Callout> (including self-closing and multiline) - const calloutRegex = - /<Callout\s+type=["'](\w+)["']\s*>([\s\S]*?)<\/Callout>/g; - - return content.replace(calloutRegex, (match, type, innerContent) => { - // The innerContent might contain markdown that will be processed later - // Wrap it in a special div that we'll style - return `<div class="callout callout-${type}">${innerContent}</div>`; - }); -} - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - try { - // Get the markdown URL from query parameters - const { url, disposition } = req.query; - - if (!url || typeof url !== "string") { - return res.status(400).json({ - error: "Missing or invalid 'url' query parameter", - }); - } - - // Validate URL - let markdownUrl: URL; - try { - markdownUrl = new URL(url); - } catch (error) { - return res.status(400).json({ - error: "Invalid URL format", - }); - } - - // Check hostname against allow-list to prevent SSRF in production - // Skip in dev to allow for tests against devserver - if ( - process.env.NODE_ENV !== "development" && - !ALLOWED_HOSTNAMES.includes(markdownUrl.hostname) - ) { - return res.status(400).json({ - error: `Fetching from ${markdownUrl.hostname} is not permitted.`, - allowed: ALLOWED_HOSTNAMES, - }); - } - - // Fetch the markdown content - const response = await fetch(markdownUrl.toString()); - - if (!response.ok) { - return res.status(response.status).json({ - error: `Failed to fetch markdown: ${response.statusText}`, - }); - } - - let markdownContent = await response.text(); - - // Strip frontmatter (YAML between --- delimiters) - markdownContent = markdownContent.replace( - /^---\r?\n[\s\S]*?\r?\n---\r?\n/, - "" - ); - - // Remove anchor tags from headings (not needed in PDF) - markdownContent = removeAnchorTags(markdownContent); - - // Convert markdown to HTML - let htmlContent = await marked.parse(markdownContent); - - // Process Callout components in the HTML - htmlContent = processCallouts(htmlContent); - - // Extract filename for title and later use - const pathname = markdownUrl.pathname; - const filename = pathname.split("/").pop() || "document.md"; - const baseFilename = filename.replace(/\.mdx?$/i, ""); - const documentTitle = `Langfuse - ${baseFilename}`; - - // Create a complete HTML document with styling - const fullHtml = ` - <!DOCTYPE html> - <html> - <head> - <meta charset="UTF-8"> - <title>${documentTitle} - - - -
- Source: ${markdownUrl.toString()}
- PDF created at: ${new Date().toISOString()} -
- ${htmlContent} - - - `; - - // Launch Puppeteer and generate PDF - // Use local Chrome for development, serverless Chromium for production - const isDev = process.env.NODE_ENV === "development"; - - let browser; - if (isDev) { - // Use puppeteer with bundled Chromium for local development - const puppeteer = await import("puppeteer"); - browser = await puppeteer.default.launch({ - headless: true, - args: ["--no-sandbox", "--disable-setuid-sandbox"], - }); - } else { - // Use puppeteer-core with serverless Chromium for production - const puppeteerCore = await import("puppeteer-core"); - const chromium = await import("@sparticuz/chromium"); - browser = await puppeteerCore.default.launch({ - args: chromium.default.args, - executablePath: await chromium.default.executablePath(), - headless: true, - }); - } - - try { - const page = await browser.newPage(); - await page.setContent(fullHtml, { waitUntil: "networkidle0" }); - - const pdf = await page.pdf({ - format: "A4", - printBackground: true, - margin: { - top: "1cm", - right: "1cm", - bottom: "1cm", - left: "1cm", - }, - }); - - // Use the filename extracted earlier - const pdfFilename = `${documentTitle}.pdf`; - - // Determine content disposition (default to inline) - const contentDisposition = - disposition === "download" ? "attachment" : "inline"; - - // Set response headers - res.setHeader("Content-Type", "application/pdf"); - res.setHeader( - "Content-Disposition", - `${contentDisposition}; filename="${pdfFilename}"` - ); - res.setHeader("Content-Length", pdf.length); - // Cache for 60 seconds on CDN, serve stale while revalidating for 24 hours - res.setHeader( - "Cache-Control", - "public, s-maxage=60, stale-while-revalidate=86400" - ); - - // Send the PDF as a buffer - res.status(200).end(pdf); - } finally { - // Ensure browser is always closed, even if an error occurs - await browser.close(); - } - } catch (error) { - console.error("Error generating PDF:", error); - res.status(500).json({ - error: "Internal server error while generating PDF", - message: "An unexpected error occurred.", - }); - } -} diff --git a/pages/api/metabase-embed.ts b/pages/api/metabase-embed.ts deleted file mode 100644 index c90381a484..0000000000 --- a/pages/api/metabase-embed.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from "next"; -import jwt from "jsonwebtoken"; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - try { - // Only allow GET requests for this endpoint - if (req.method !== "GET") { - return res.status(405).json({ message: "Method Not Allowed" }); - } - - const METABASE_SITE_URL = "https://langfuse.metabaseapp.com"; - const METABASE_SECRET_KEY = process.env.METABASE_SECRET_KEY; - - if (!METABASE_SECRET_KEY) { - console.error( - "Missing required environment variables: METABASE_SECRET_KEY" - ); - return res.status(500).json({ message: "Server configuration error" }); - } - - // Get dashboard ID and theme from query params - const dashboardId = req.query.dashboardId - ? parseInt(req.query.dashboardId as string, 10) - : 25; - const theme = req.query.theme === "day" ? "day" : "night"; // default to night - - // Create JWT payload - const payload = { - resource: { dashboard: dashboardId }, - params: {}, - exp: Math.round(Date.now() / 1000) + 10 * 60, // 10 minute expiration - }; - - // Sign the token - const token = jwt.sign(payload, METABASE_SECRET_KEY); - - // Generate the iframe URL with dynamic theme - const iframeUrl = `${METABASE_SITE_URL}/embed/dashboard/${token}#theme=${theme}&bordered=false&titled=false`; - - return ( - res - .status(200) - .setHeader("Content-Type", "application/json") - // Cache for 5 minutes to avoid regenerating tokens too frequently - .setHeader("Cache-Control", "public, s-maxage=300, max-age=0") - .json({ - iframeUrl, - expiresAt: new Date(Date.now() + 10 * 60 * 1000).toISOString(), - }) - ); - } catch (error) { - console.error("Error generating Metabase embed URL:", error); - return res.status(500).json({ message: "Internal Server Error" }); - } -} diff --git a/pages/api/productUpdateSignup.ts b/pages/api/productUpdateSignup.ts deleted file mode 100644 index 0d81b6791c..0000000000 --- a/pages/api/productUpdateSignup.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { NextResponse, NextRequest } from "next/server"; -import * as z from "zod/v3"; - -export const config = { - runtime: "edge", -}; - -const emailSchema = z.string().email(); - -export default async function handler(req: NextRequest) { - if (req.method !== "POST") { - return NextResponse.json( - {}, - { - status: 400, - statusText: "Bad Request", - } - ); - } - - const body = await req.json(); - const { email, source } = body; - - // Validate email using zod - if (!emailSchema.safeParse(email).success) { - return NextResponse.json( - { error: "Invalid email address" }, - { - status: 400, - statusText: "Bad Request", - } - ); - } - - try { - const loopsResponse = await fetch( - "https://app.loops.so/api/v1/contacts/create", - { - method: "POST", - body: JSON.stringify({ - email, - source, - mailingLists: { - cmbzj9z64074z0iyj7jj38ra6: true, //Product Updates Loops List - }, - }), - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${process.env.LOOPS_API_KEY}`, - }, - } - ); - - if (loopsResponse.status === 200 || loopsResponse.status === 409) { - return NextResponse.json({ status: "OK" }); - } else { - console.error("Loops", JSON.stringify(loopsResponse)); - return NextResponse.json( - {}, - { - status: 500, - statusText: "Internal Server Error", - } - ); - } - } catch (error) { - console.error(error); - return NextResponse.json( - {}, - { - status: 500, - statusText: error.message ?? "Internal Server Error", - } - ); - } -} diff --git a/pages/api/search-docs.ts b/pages/api/search-docs.ts deleted file mode 100644 index c30f985273..0000000000 --- a/pages/api/search-docs.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from "next"; -import { searchLangfuseDocsWithInkeep, isNonEmptyString } from "./inkeep-search"; - -// Public, unauthenticated GET endpoint that exposes the Inkeep docs search used by MCP. -// Usage: /api/search-docs?query= -// Returns JSON: { query, answer, metadata } where `metadata` is the raw Inkeep payload. -const setCorsHeaders = (res: NextApiResponse) => { - res.setHeader("Access-Control-Allow-Origin", "*"); - res.setHeader("Access-Control-Allow-Methods", "GET, OPTIONS"); - res.setHeader("Access-Control-Allow-Headers", "Content-Type"); -}; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - setCorsHeaders(res); - - if (req.method === "OPTIONS") { - return res.status(204).end(); - } - - if (req.method !== "GET") { - return res - .status(405) - .setHeader("Allow", "GET, OPTIONS") - .json({ error: "Method Not Allowed" }); - } - - const queryParam = req.query.query; - const query = Array.isArray(queryParam) ? queryParam[0] : queryParam; - - if (!isNonEmptyString(query)) { - return res.status(400).json({ - error: "Missing or invalid 'query' parameter", - }); - } - - try { - const inkeepResult = await searchLangfuseDocsWithInkeep(query); - - return res.status(200).json({ - query, - answer: inkeepResult.answer, - metadata: inkeepResult.metadata, - }); - } catch (error) { - return res.status(500).json({ - error: "Error searching documentation", - message: error instanceof Error ? error.message : "Unknown error", - query, - }); - } -} diff --git a/pages/blog.mdx b/pages/blog.mdx deleted file mode 100644 index a853ffcbb1..0000000000 --- a/pages/blog.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -description: The latest updates and releases from the Langfuse team. ---- - -import { BlogIndex } from "@/components/blog/BlogIndex"; -import { Header } from "@/components/Header"; -import { ProductUpdateSignup } from "@/components/productUpdateSignup"; -import Link from "next/link"; - -
-
-
- The latest updates from Langfuse. See{" "} - - Changelog - {" "} - for more product updates. - - } - className="mb-8" - h="h1" - /> -
- -
-
- -
diff --git a/pages/blog/_meta.tsx b/pages/blog/_meta.tsx deleted file mode 100644 index e117159cd4..0000000000 --- a/pages/blog/_meta.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export default { - "*": { - theme: { - toc: true, - sidebar: false, - pagination: true, - typesetting: "article", - layout: "default", - breadcrumb: false, - }, - }, -}; diff --git a/pages/changelog.mdx b/pages/changelog.mdx deleted file mode 100644 index 76e604aa26..0000000000 --- a/pages/changelog.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -description: The latest release updates from the Langfuse team. ---- - -import { ChangelogIndex } from "@/components/changelog/ChangelogIndex"; -import { Header } from "@/components/Header"; -import { ProductUpdateSignup } from "@/components/productUpdateSignup"; -import Link from "next/link"; - -
-
-
- Latest release updates from the Langfuse team. Check out our{" "} - - Roadmap - {" "} - to see what's next. - - } - className="mb-8" - h="h1" - /> -
- -
-
- -
diff --git a/pages/changelog/_meta.tsx b/pages/changelog/_meta.tsx deleted file mode 100644 index aa1ca6b20b..0000000000 --- a/pages/changelog/_meta.tsx +++ /dev/null @@ -1,8 +0,0 @@ -export default { - "*": { - type: "page", - theme: { - layout: "default", - }, - }, -}; diff --git a/pages/cloud/[[...path]].tsx b/pages/cloud/[[...path]].tsx deleted file mode 100644 index 10ec339047..0000000000 --- a/pages/cloud/[[...path]].tsx +++ /dev/null @@ -1,258 +0,0 @@ -import { useCallback, useMemo, type MouseEvent } from "react"; -import Head from "next/head"; -import Image from "next/image"; -import { useRouter } from "next/router"; -import type { LucideIcon } from "lucide-react"; -import { - ArrowRight, - Globe, - Shield, - ShieldCheck, -} from "lucide-react"; -import { Button } from "@/components/ui/button"; -import { Card, CardContent } from "@/components/ui/card"; -import { - cloudRegionSelectorOrder, - cloudRegions, - type CloudRegionKey, -} from "@/lib/cloud-regions"; -import { useCloudRegionSignIn } from "@/lib/use-cloud-region-sign-in"; - -const regionCards: Record< - CloudRegionKey, - { - title: string; - awsRegion: string; - awsLocation: string; - icon: LucideIcon; - flag?: string; - } -> = { - us: { - title: "US", - awsRegion: "us-west-2", - awsLocation: "Oregon", - icon: Shield, - flag: "🇺🇸", - }, - hipaa: { - title: "US HIPAA", - awsRegion: "us-west-2", - awsLocation: "Oregon", - icon: ShieldCheck, - }, - eu: { - title: "Europe", - awsRegion: "eu-west-1", - awsLocation: "Ireland", - icon: Globe, - flag: "🇪🇺", - }, -}; - -const CLOUD_ROUTE_PREFIX = "/cloud"; - -const stripControlChars = (value: string) => - value.replace(/[\u0000-\u001F\u007F]/g, ""); - -const getCloudRedirectPartsFromAsPath = (asPath: string) => { - const sanitizedAsPath = stripControlChars(asPath || ""); - const hashStart = sanitizedAsPath.indexOf("#"); - const pathAndSearch = - hashStart === -1 ? sanitizedAsPath : sanitizedAsPath.slice(0, hashStart); - const hash = hashStart === -1 ? "" : sanitizedAsPath.slice(hashStart); - - const queryStart = pathAndSearch.indexOf("?"); - const pathname = - queryStart === -1 ? pathAndSearch : pathAndSearch.slice(0, queryStart); - const search = queryStart === -1 ? "" : pathAndSearch.slice(queryStart); - - let cloudSubpath = "/"; - if ( - pathname.startsWith(`${CLOUD_ROUTE_PREFIX}/`) && - pathname.length > CLOUD_ROUTE_PREFIX.length - ) { - cloudSubpath = pathname.slice(CLOUD_ROUTE_PREFIX.length); - } else if (pathname === CLOUD_ROUTE_PREFIX) { - cloudSubpath = "/"; - } - - return { cloudSubpath, search, hash }; -}; - -const buildCloudRedirectUrl = ({ - region, - cloudSubpath, - search, - hash, -}: { - region: CloudRegionKey; - cloudSubpath: string; - search: string; - hash: string; -}) => { - const baseUrl = cloudRegions[region].url.replace(/\/$/, ""); - const targetPath = cloudSubpath.startsWith("/") ? cloudSubpath : `/${cloudSubpath}`; - return `${baseUrl}${targetPath}${search}${hash}`; -}; - -const SignedInHint = () => ( - - - Signed in - -); - -const getCloudHost = (url: string) => new URL(url).host; - -export default function CloudRegionSelectorPage() { - const router = useRouter(); - const signedInRegions = useCloudRegionSignIn(); - - const { - cloudSubpath, - search: fallbackSearch, - hash: fallbackHash, - } = useMemo( - () => getCloudRedirectPartsFromAsPath(router.asPath || ""), - [router.asPath] - ); - - const handleRegionSelect = useCallback( - (region: CloudRegionKey, event: MouseEvent) => { - const isModifiedClick = - event.button !== 0 || - event.metaKey || - event.ctrlKey || - event.shiftKey || - event.altKey; - if (isModifiedClick) { - return; - } - - event.preventDefault(); - - const search = - typeof window === "undefined" - ? fallbackSearch - : window.location.search; - const hash = - typeof window === "undefined" ? fallbackHash : window.location.hash; - const targetUrl = buildCloudRedirectUrl({ - region, - cloudSubpath, - search, - hash, - }); - - if (typeof window !== "undefined") { - window.location.assign(targetUrl); - } - }, - [cloudSubpath, fallbackHash, fallbackSearch] - ); - - return ( - <> - - Select Cloud Region - Langfuse - - -
-
-
- - Langfuse - Langfuse - -

- Select your region -

-
- - - - {cloudRegionSelectorOrder.map((regionKey) => { - const region = cloudRegions[regionKey]; - const card = regionCards[regionKey]; - const Icon = card.icon; - const host = getCloudHost(region.url); - const href = buildCloudRedirectUrl({ - region: regionKey, - cloudSubpath, - search: fallbackSearch, - hash: fallbackHash, - }); - const isSignedIn = signedInRegions[regionKey]; - - return ( -
-
- - {card.flag ? ( - {card.flag} - ) : ( - - )} - -
-

- {card.title} -

-

- AWS {card.awsRegion} • {card.awsLocation} -

- - {host} - -
-
- -
- ); - })} -
-
-
-
- - ); -} diff --git a/pages/docs/_meta.tsx b/pages/docs/_meta.tsx deleted file mode 100644 index 863f40094e..0000000000 --- a/pages/docs/_meta.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { MenuSwitcher } from "@/components/MenuSwitcher"; - -export default { - "-- Switcher": { - type: "separator", - title: , - }, - index: "Overview", - demo: "Example Project", - "ask-ai": "Ask AI", - - "-- Get Started": { - type: "separator", - title: "Get Started", - }, - "observability-quickstart": { - title: "Start Tracing", - href: "/docs/observability/get-started", - }, - "prompt-management-quickstart": { - title: "Use Prompt Management", - href: "/docs/prompt-management/get-started", - }, - "evals-quickstart": { - title: "Set up Evals", - href: "/docs/evaluation/overview", - }, - - "-- Products": { - type: "separator", - title: "Products", - }, - observability: "Observability", - "prompt-management": "Prompt Management", - evaluation: "Evaluation", - - "-- Platform": { - type: "separator", - title: "Platform", - }, - metrics: "Metrics", - "api-and-data-platform": "API & Data Platform", - administration: "Administration", - "security-and-guardrails": "Security & Guardrails", - - "-- More": { - type: "separator", - title: "More", - }, - glossary: "Glossary", - roadmap: "Roadmap", - "docs-mcp": "Docs MCP Server", - references: "SDK & API References", - - "security-compliance": { - title: "Security & Compliance ↗", - href: "/security", - newWindow: true, - }, - support: { - title: "Support ↗", - href: "/support", - newWindow: true, - }, -}; diff --git a/pages/docs/administration/_meta.tsx b/pages/docs/administration/_meta.tsx deleted file mode 100644 index 3606c3a10a..0000000000 --- a/pages/docs/administration/_meta.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { MenuSubSeparator } from "@/components/MenuSubSeparator"; - -export default { - "-- Auth": { - type: "separator", - title: Auth, - }, - "authentication-and-sso": {}, - rbac: {}, - "scim-and-org-api": {}, - - "-- Security": { - type: "separator", - title: Security, - }, - "audit-logs": {}, - "data-deletion": {}, - "data-retention": {}, - "security-docs": { - title: "Security Docs ↗", - href: "/security", - }, - "-- Configuration": { - type: "separator", - title: Configuration, - }, - "llm-connection": {}, - "spend-alerts": {}, - "-- Misc": { - type: "separator", - title: Misc, - }, - "billable-units": "Billable Units", - "troubleshooting-and-faq": { - title: "Troubleshooting & FAQ", - }, -}; diff --git a/pages/docs/api-and-data-platform/_meta.tsx b/pages/docs/api-and-data-platform/_meta.tsx deleted file mode 100644 index 6ee26684d2..0000000000 --- a/pages/docs/api-and-data-platform/_meta.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export default { - overview: "Overview", - features: "Features", - "*": { - layout: "default", - }, -}; diff --git a/pages/docs/api-and-data-platform/features/export-to-blob-storage.mdx b/pages/docs/api-and-data-platform/features/export-to-blob-storage.mdx deleted file mode 100644 index dc658e5650..0000000000 --- a/pages/docs/api-and-data-platform/features/export-to-blob-storage.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Export via Blob Storage Integration -description: Export traces, observations, and scores to a Blob Storage, e.g. S3, GCS, or Azure Blob Storage. -sidebarTitle: Export to Blob Storage ---- - -# Export via Blob Storage Integration - - - -You can create schedule exports to a Blob Storage, e.g. S3, GCS, or Azure Blob Storage, for `traces`, `observations`, and `scores`. - -Those exports can run on an `hourly`, `daily`, or `weekly` schedule. -Navigate to your project settings and select `Integrations > Blob Storage` to set up a new export. -Select whether you want to use S3, a S3 compatible storage, Google Cloud Storage, or Azure Blob Storage. - -## Start exporting via Blob Storage - -To set up the export navigate to `Your Project` > `Settings` > `Integrations` > `Blob Storage`. - -Fill in the settings to authenticate with your vendor, enable the integration, and press save. -Within an hour an initial export should start and continue based on the schedule you have selected. -The export supports CSV, JSON, and JSONL file formats. -Read [our blob storage documentation](/self-hosting/deployment/infrastructure/blobstorage) for more information on how to get credentials for your specific vendor. - - - ![Blob Storage Integration Setup](/images/docs/blob-storage.png) - - -## Alternatives - -You can also export data via: - -- [UI](/docs/api-and-data-platform/features/export-from-ui) - Manual batch-exports from the Langfuse UI -- [SDKs/API](/docs/api-and-data-platform/features/public-api) - Programmatic access using Langfuse SDKs or API diff --git a/pages/docs/evaluation/_meta.tsx b/pages/docs/evaluation/_meta.tsx deleted file mode 100644 index 9716d51da5..0000000000 --- a/pages/docs/evaluation/_meta.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export default { - overview: "Overview", - "core-concepts": "Concepts", - "evaluation-methods": "Evaluation Methods", - - experiments: "Experiments", - tutorials: { - title: "Guides ↗", - href: "/guides#evaluation-tutorials", - }, - "troubleshooting-and-faq": "Troubleshooting & FAQ", -}; diff --git a/pages/docs/evaluation/evaluation-methods/_meta.tsx b/pages/docs/evaluation/evaluation-methods/_meta.tsx deleted file mode 100644 index 2d1ae3bfe1..0000000000 --- a/pages/docs/evaluation/evaluation-methods/_meta.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export default { - "llm-as-a-judge": "LLM-as-a-Judge", - "annotation-queues": "Annotation Queues", - "scores-via-ui": "Scores via UI", - "scores-via-sdk": "Scores via API/SDK", - "score-analytics": "Score Analytics", -}; \ No newline at end of file diff --git a/pages/docs/evaluation/experiments/_meta.tsx b/pages/docs/evaluation/experiments/_meta.tsx deleted file mode 100644 index 3cb9a74c78..0000000000 --- a/pages/docs/evaluation/experiments/_meta.tsx +++ /dev/null @@ -1,6 +0,0 @@ -export default { - "data-model": "Data Model", - datasets: "Datasets", - "experiments-via-sdk": "Experiments via SDK", - "experiments-via-ui": "Experiments via UI", -}; diff --git a/pages/docs/metrics/_meta.tsx b/pages/docs/metrics/_meta.tsx deleted file mode 100644 index b1ae120281..0000000000 --- a/pages/docs/metrics/_meta.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export default { - overview: "Overview", - features: "Features", - "*": { - layout: "default", - }, -}; \ No newline at end of file diff --git a/pages/docs/metrics/features/_meta.tsx b/pages/docs/metrics/features/_meta.tsx deleted file mode 100644 index 221fc83ab1..0000000000 --- a/pages/docs/metrics/features/_meta.tsx +++ /dev/null @@ -1,15 +0,0 @@ -export default { - "custom-dashboards": {}, - "metrics-api": {}, - "export-to-posthog": { - title: "Export to PostHog ↗", - href: "/integrations/analytics/posthog", - }, - "export-to-mixpanel": { - title: "Export to Mixpanel ↗", - href: "/integrations/analytics/mixpanel", - }, - "*": { - layout: "default", - }, -}; diff --git a/pages/docs/observability/_meta.tsx b/pages/docs/observability/_meta.tsx deleted file mode 100644 index b916a07c74..0000000000 --- a/pages/docs/observability/_meta.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export default { - overview: "Overview", - "get-started": "Get Started", - "data-model": "Concepts", - features: "Features", - sdk: "SDKs", - integrations: { - title: "Integrations ↗", - href: "/integrations", - }, - "troubleshooting-and-faq": "Troubleshooting & FAQ", -}; diff --git a/pages/docs/observability/features/_meta.tsx b/pages/docs/observability/features/_meta.tsx deleted file mode 100644 index 19e6cf8595..0000000000 --- a/pages/docs/observability/features/_meta.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { MenuSubSeparator } from "@/components/MenuSubSeparator"; - -export default { - "-- Core": { - type: "separator", - title: Essential, - }, - sessions: {}, - users: {}, - environments: {}, - tags: {}, - metadata: {}, - "trace-ids-and-distributed-tracing": {}, - - "-- Advanced": { - type: "separator", - title: Advanced, - }, - comments: {}, - corrections: {}, - "user-feedback": {}, - "log-levels": {}, - "*": { - layout: "default", - }, - "query-traces": { - title: "Query Data ↗", - href: "/docs/api-and-data-platform/overview", - }, - - "metrics-api": { - title: "Metrics API ↗", - href: "/docs/metrics/features/metrics-api", - }, - - "custom-dashboards": { - title: "Custom Dashboards ↗", - href: "/docs/metrics/features/custom-dashboards", - }, -}; diff --git a/pages/docs/observability/sdk/_meta.tsx b/pages/docs/observability/sdk/_meta.tsx deleted file mode 100644 index b9c7c3fc08..0000000000 --- a/pages/docs/observability/sdk/_meta.tsx +++ /dev/null @@ -1,15 +0,0 @@ -export default { - overview: "Overview", - instrumentation: "Instrumentation", - "advanced-features": "Advanced Features", - "troubleshooting-and-faq": "Troubleshooting & FAQ", - "upgrade-path": "Upgrade Path", - python: { - title: "Python Reference ↗", - href: "https://python.reference.langfuse.com/", - }, - typescript: { - title: "JS/TS Reference ↗", - href: "https://langfuse-js-git-main-langfuse.vercel.app/", - }, -}; diff --git a/pages/docs/prompt-management/_meta.tsx b/pages/docs/prompt-management/_meta.tsx deleted file mode 100644 index fc3ed5907b..0000000000 --- a/pages/docs/prompt-management/_meta.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export default { - overview: "Overview", - "get-started": "Get Started", - "data-model": "Concepts", - features: "Features", - "troubleshooting-and-faq": "Troubleshooting & FAQ", -}; diff --git a/pages/docs/prompt-management/features/_meta.tsx b/pages/docs/prompt-management/features/_meta.tsx deleted file mode 100644 index 0ead3ebf39..0000000000 --- a/pages/docs/prompt-management/features/_meta.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { MenuSubSeparator } from "@/components/MenuSubSeparator"; - -export default { - "-- Core": { - type: "separator", - title: Essential, - }, - "link-to-traces": {}, - "prompt-version-control": {}, - playground: {}, - - "-- Advanced": { - type: "separator", - title: Advanced, - }, - variables: {}, - composability: {}, - "message-placeholders": {}, - config: {}, - "evaluate-prompts": { - title: "Prompt Experiments ↗", - href: "/docs/evaluation/dataset-runs/run-via-ui", - }, - caching: {}, - "mcp-server": {}, - "webhooks-slack-integrations": {}, - "github-integration": {}, - "n8n-node": {}, - "guaranteed-availability": {}, - "a-b-testing": {}, - folders: {}, - "*": { - layout: "default", - }, -}; diff --git a/pages/docs/references/_meta.tsx b/pages/docs/references/_meta.tsx deleted file mode 100644 index 8d4a3fe3ee..0000000000 --- a/pages/docs/references/_meta.tsx +++ /dev/null @@ -1,22 +0,0 @@ -export default { - "api-ref": { - title: "API Reference ↗", - href: "https://api.reference.langfuse.com", - newWindow: true, - }, - "python-ref": { - title: "Python SDK ↗", - href: "https://python.reference.langfuse.com", - newWindow: true, - }, - "js-ref": { - title: "JS SDK ↗", - href: "https://js.reference.langfuse.com", - newWindow: true, - }, - "java-ref": { - title: "Java SDK ↗", - href: "https://github.com/langfuse/langfuse-java", - newWindow: true, - }, -}; diff --git a/pages/events/_meta.tsx b/pages/events/_meta.tsx deleted file mode 100644 index 75a821e51e..0000000000 --- a/pages/events/_meta.tsx +++ /dev/null @@ -1,9 +0,0 @@ -export default { - "*": { - type: "page", - display: "hidden", - theme: { - typesetting: "article", - }, - }, -}; diff --git a/pages/faq/_meta.tsx b/pages/faq/_meta.tsx deleted file mode 100644 index a3f7ca74af..0000000000 --- a/pages/faq/_meta.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { MenuSwitcher } from "@/components/MenuSwitcher"; - -export default { - "-- Switcher": { - type: "separator", - title: , - }, - index: "Overview", - tag: "By Tags", - all: { - type: "children", - display: "hidden", - }, -}; diff --git a/pages/faq/tag/Readme.txt b/pages/faq/tag/Readme.txt deleted file mode 100644 index 93057b4aa5..0000000000 --- a/pages/faq/tag/Readme.txt +++ /dev/null @@ -1 +0,0 @@ -- This folder has both the [tag] and usual pages. [tag] technically works SSR (build time) for all tags that exist in /all, but they do not render in the main menu. Thus we can copy paste the tag page for all tags that should show up in the main menu. \ No newline at end of file diff --git a/pages/faq/tag/_meta.tsx b/pages/faq/tag/_meta.tsx deleted file mode 100644 index 45872c0dec..0000000000 --- a/pages/faq/tag/_meta.tsx +++ /dev/null @@ -1,5 +0,0 @@ -export default { - "*": { - display: "normal", - }, -}; diff --git a/pages/guides/_meta.tsx b/pages/guides/_meta.tsx deleted file mode 100644 index 15f847fa12..0000000000 --- a/pages/guides/_meta.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { MenuSwitcher } from "@/components/MenuSwitcher"; - -export default { - "-- Switcher": { - type: "separator", - title: , - }, - index: "Overview", - cookbook: "Cookbooks", - videos: "Videos", -}; diff --git a/pages/guides/cookbook/_meta.tsx b/pages/guides/cookbook/_meta.tsx deleted file mode 100644 index cf52da9c55..0000000000 --- a/pages/guides/cookbook/_meta.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default { - index: "Overview", -}; diff --git a/pages/guides/videos/_meta.tsx b/pages/guides/videos/_meta.tsx deleted file mode 100644 index cf52da9c55..0000000000 --- a/pages/guides/videos/_meta.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default { - index: "Overview", -}; diff --git a/pages/handbook/_meta.tsx b/pages/handbook/_meta.tsx deleted file mode 100644 index 824a6705af..0000000000 --- a/pages/handbook/_meta.tsx +++ /dev/null @@ -1,46 +0,0 @@ -export const TEAMS = { - "product-engineering": { - name: "Product Engineering", - firstPage: "principles", - }, - "sales-and-cs": { - name: "Sales & CS", - firstPage: "overview", - }, - support: { - name: "Support", - firstPage: "support", - }, - devrel: { - name: "DevRel", - firstPage: "community-hour", - }, - operations: { - name: "Operations", - firstPage: "entity-structure", - }, -}; - -export default { - "-- Handbook": { - type: "separator", - title: "Handbook", - }, - index: "Overview", - chapters: "Chapters", - "-- Working at Langfuse": { - type: "separator", - title: "Working at Langfuse", - }, - "how-we-work": "How we work", - "how-we-hire": "How we hire", - "perks-and-pay": "Perks and Pay", - "tools-and-processes": "Tool & Processes", - "-- Resources": { - type: "separator", - title: "Resources", - }, - ...Object.fromEntries( - Object.entries(TEAMS).map(([key, value]) => [key, value.name]) - ), -}; diff --git a/pages/handbook/chapters/_meta.tsx b/pages/handbook/chapters/_meta.tsx deleted file mode 100644 index 157b1f37d6..0000000000 --- a/pages/handbook/chapters/_meta.tsx +++ /dev/null @@ -1,15 +0,0 @@ -// Define the order of chapters for consistent sorting -export const CHAPTER_ORDER = [ - "mission", - "customers", - "story", - "why", - "open-source", - "monetization", - "team", -]; - -// Generate the default export from the chapter order array -export default Object.fromEntries( - CHAPTER_ORDER.map((chapter) => [chapter, {}]) -); diff --git a/pages/handbook/devrel/_meta.tsx b/pages/handbook/devrel/_meta.tsx deleted file mode 100644 index b02653bcdf..0000000000 --- a/pages/handbook/devrel/_meta.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default { - "community-hour": "Community Hour", -}; diff --git a/pages/handbook/how-we-hire/_meta.tsx b/pages/handbook/how-we-hire/_meta.tsx deleted file mode 100644 index 072178c187..0000000000 --- a/pages/handbook/how-we-hire/_meta.tsx +++ /dev/null @@ -1,10 +0,0 @@ -export default { - "philosophy": "Philosophy", - "hiring-process": "Hiring Process", - "engineering-super-day": "Engineering Super Day", - "cs-fde-super-day": "CS and FDE Super Day", - "*": { - layout: "default", - }, - }; - \ No newline at end of file diff --git a/pages/handbook/how-we-work/_meta.tsx b/pages/handbook/how-we-work/_meta.tsx deleted file mode 100644 index 7946c34de4..0000000000 --- a/pages/handbook/how-we-work/_meta.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export default { - principles: "Principles", - remote: "Working Remotely", - meetings: "Meetings", - ownership: "Ownership", - "productivity-and-ai": "Productivity & AI", -}; diff --git a/pages/handbook/product-engineering/_meta.tsx b/pages/handbook/product-engineering/_meta.tsx deleted file mode 100644 index 12c1e1ddd7..0000000000 --- a/pages/handbook/product-engineering/_meta.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export default { - principles: {}, - architecture: {}, - analytics: {}, - "how-we-work": "How we work", - "playbooks": "Playbooks", - "tech-stack": "Tech stack", - "infrastructure": "Infrastructure", - "*": { - layout: "default", - }, -}; diff --git a/pages/handbook/product-engineering/how-we-work/_meta.tsx b/pages/handbook/product-engineering/how-we-work/_meta.tsx deleted file mode 100644 index 6bc57b5d4d..0000000000 --- a/pages/handbook/product-engineering/how-we-work/_meta.tsx +++ /dev/null @@ -1,8 +0,0 @@ -export default { - "roadmapping": "Roadmapping", - "workflow": "Workflow", - "onboarding": "Onboarding", - "*": { - layout: "default", - }, -}; diff --git a/pages/handbook/product-engineering/infrastructure/_meta.tsx b/pages/handbook/product-engineering/infrastructure/_meta.tsx deleted file mode 100644 index ce7cbfcd55..0000000000 --- a/pages/handbook/product-engineering/infrastructure/_meta.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export default { - "clickhouse": "ClickHouse", - "ecs": "AWS ECS Fargate", - "*": { - layout: "default", - }, -}; diff --git a/pages/handbook/product-engineering/playbooks/_meta.tsx b/pages/handbook/product-engineering/playbooks/_meta.tsx deleted file mode 100644 index 0b6687746d..0000000000 --- a/pages/handbook/product-engineering/playbooks/_meta.tsx +++ /dev/null @@ -1,6 +0,0 @@ -export default { - "*": { - layout: "default", - }, - }; - \ No newline at end of file diff --git a/pages/handbook/sales-and-cs/_meta.tsx b/pages/handbook/sales-and-cs/_meta.tsx deleted file mode 100644 index e7de6542c4..0000000000 --- a/pages/handbook/sales-and-cs/_meta.tsx +++ /dev/null @@ -1,6 +0,0 @@ -export default { - overview: {}, - "*": { - layout: "default", - }, -}; diff --git a/pages/handbook/support/_meta.tsx b/pages/handbook/support/_meta.tsx deleted file mode 100644 index 406a556cea..0000000000 --- a/pages/handbook/support/_meta.tsx +++ /dev/null @@ -1,6 +0,0 @@ -export default { - support: {}, - "*": { - layout: "default", - }, -}; diff --git a/pages/index.mdx b/pages/index.mdx deleted file mode 100644 index 9fa2eccc83..0000000000 --- a/pages/index.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Langfuse - Open Source LLM Engineering Platform" -description: "Traces, evals, prompt management and metrics to debug and improve your LLM application. Integrates with Langchain, OpenAI, LlamaIndex, LiteLLM, and more." ---- - -import { Home } from "../components/home"; - - diff --git a/pages/integrations/_meta.tsx b/pages/integrations/_meta.tsx deleted file mode 100644 index f4f9614d53..0000000000 --- a/pages/integrations/_meta.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { MenuSwitcher } from "@/components/MenuSwitcher"; - -export default { - "-- Switcher": { - type: "separator", - title: , - }, - index: "Overview", - native: "Native", - frameworks: "Frameworks", - "model-providers": "Model Providers", - gateways: "Gateways", - "no-code": "No-Code Agent Builders", - analytics: "Analytics", - "data-platform": "Data Platform", - other: "Other", -}; diff --git a/pages/integrations/data-platform/_meta.tsx b/pages/integrations/data-platform/_meta.tsx deleted file mode 100644 index 72ecab6cde..0000000000 --- a/pages/integrations/data-platform/_meta.tsx +++ /dev/null @@ -1,22 +0,0 @@ -export default { - "public-api": { - title: "Public API", - href: "/docs/api-and-data-platform/features/public-api", - }, - "exports-to-s3": { - title: "Exports to S3", - href: "/docs/query-traces#blob-storage", - }, - "metrics-api": { - title: "Metrics API", - href: "/docs/analytics/metrics-api", - }, - "prompt-webhooks": { - title: "Prompt Webhooks", - href: "/docs/prompts/get-started#webhooks", - }, - "export-blob-storage": { - title: "Export to Blob Storage (e.g., S3)", - href: "/docs/api-and-data-platform/features/export-to-blob-storage", - }, -}; diff --git a/pages/integrations/native/_meta.tsx b/pages/integrations/native/_meta.tsx deleted file mode 100644 index 7289c78ba5..0000000000 --- a/pages/integrations/native/_meta.tsx +++ /dev/null @@ -1,10 +0,0 @@ -export default { - "python-sdk": { - title: "Python SDK", - href: "/docs/sdk/python/sdk-v3", - }, - "js-ts-sdk": { - title: "JS/TS SDK", - href: "/docs/sdk/typescript/guide", - }, -}; diff --git a/pages/library/_meta.tsx b/pages/library/_meta.tsx deleted file mode 100644 index 8fe40a625a..0000000000 --- a/pages/library/_meta.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { MenuSwitcher } from "@/components/MenuSwitcher"; - -export default { - "-- Switcher": { - type: "separator", - title: , - }, - index: "Library", -}; diff --git a/pages/security/_meta.tsx b/pages/security/_meta.tsx deleted file mode 100644 index 8a8b8a4910..0000000000 --- a/pages/security/_meta.tsx +++ /dev/null @@ -1,58 +0,0 @@ -export default { - index: "Overview", - "-- Security": { - type: "separator", - title: "Security", - }, - auth: "Authentication & Authorization", - "audit-logs": { - title: "Audit Logs ↗", - href: "/docs/audit-logs", - newWindow: true, - }, - "ai-features": "AI Features", - encryption: "Encryption", - "data-regions": "Data Regions & Availability", - networking: "Networking & IP Ranges", - dependencies: "Software Dependencies", - "incident-and-breach": "Incident & Breach", - "responsible-disclosure": "Responsible Disclosure", - whistleblowing: "Whistleblowing", - "penetration-testing": "Penetration Testing", - "vulnerability-management": "Vulnerability Management", - "security-faq": "Security FAQ", - toms: {}, - "-- Compliance": { - type: "separator", - title: "Compliance", - }, - policies: "Policies", - soc2: "SOC 2 Type II", - iso27001: "ISO 27001", - hipaa: "HIPAA", - "compliance-faq": "Compliance FAQ", - "-- Privacy": { - type: "separator", - title: "Privacy", - }, - dpa: "DPA", - subprocessors: "Subprocessors", - gdpr: "GDPR", - "manage-personal-data": "Managing Personal Data", - "privacy-faq": "Privacy FAQ", - "-- Legal": { - type: "separator", - title: "Legal", - }, - terms: { - title: "Terms of Service ↗", - href: "/terms", - newWindow: true, - }, - privacy: { - title: "Privacy Policy ↗", - href: "/privacy", - newWindow: true, - }, - nda: "NDA", -}; diff --git a/pages/self-hosting/_meta.tsx b/pages/self-hosting/_meta.tsx deleted file mode 100644 index c05e350cc9..0000000000 --- a/pages/self-hosting/_meta.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { MenuSwitcher } from "@/components/MenuSwitcher"; - -export default { - "-- Switcher": { - type: "separator", - title: , - }, - index: "Overview", - "license-key": "License Key (EE)", - "troubleshooting-and-faq": "Troubleshooting & FAQ", - configuration: "Configuration", - deployment: "Deployment", - security: "Security", - administration: "Administration", - upgrade: "Upgrade", - v2: "Legacy Docs (v2)", -}; diff --git a/pages/self-hosting/administration/_meta.tsx b/pages/self-hosting/administration/_meta.tsx deleted file mode 100644 index a9d413de07..0000000000 --- a/pages/self-hosting/administration/_meta.tsx +++ /dev/null @@ -1,8 +0,0 @@ -export default { - index: {}, - "automated-access-provisioning": {}, - "headless-initialization": {}, - "organization-creators": {}, - "ui-customization": {}, - "instance-management-api": {}, -}; diff --git a/pages/self-hosting/configuration/_meta.tsx b/pages/self-hosting/configuration/_meta.tsx deleted file mode 100644 index 0e27033ec5..0000000000 --- a/pages/self-hosting/configuration/_meta.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { MenuSubSeparator } from "@/components/MenuSubSeparator"; - -export default { - "-- Essential": { - type: "separator", - title: Essential, - }, - index: {}, - scaling: {}, - backups: {}, - - "-- Advanced": { - type: "separator", - title: Advanced, - }, - caching: {}, - "*": { - layout: "default", - }, -}; diff --git a/pages/self-hosting/deployment/_meta.tsx b/pages/self-hosting/deployment/_meta.tsx deleted file mode 100644 index 4bbe914fb8..0000000000 --- a/pages/self-hosting/deployment/_meta.tsx +++ /dev/null @@ -1,9 +0,0 @@ -export default { - "docker-compose": "Local/VM (Docker Compose)", - "kubernetes-helm": "Kubernetes (Helm)", - aws: "AWS (Terraform)", - azure: "Azure (Terraform)", - gcp: "GCP (Terraform)", - railway: "Railway", - infrastructure: "Infrastructure", -}; diff --git a/pages/self-hosting/deployment/infrastructure/_meta.tsx b/pages/self-hosting/deployment/infrastructure/_meta.tsx deleted file mode 100644 index c28a740399..0000000000 --- a/pages/self-hosting/deployment/infrastructure/_meta.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export default { - "architecture-overview": { - title: "Architecture Overview ↗", - href: "/self-hosting#architecture", - }, - containers: "Application Containers", - clickhouse: "Clickhouse", - cache: "Redis / Valkey", - blobstorage: "Blob Storage (S3)", - postgres: "PostgreSQL", - "llm-api": "LLM API / Gateway", -}; diff --git a/pages/self-hosting/security/_meta.tsx b/pages/self-hosting/security/_meta.tsx deleted file mode 100644 index bcf690881c..0000000000 --- a/pages/self-hosting/security/_meta.tsx +++ /dev/null @@ -1,16 +0,0 @@ -export default { - "authentication-and-sso": {}, - "deployment-strategies": {}, - networking: {}, - "data-masking": {}, - rbac: { - title: "RBAC ↗ (main docs)", - href: "/docs/rbac", - newWindow: true, - }, - "data-retention": { - title: "Data Retention ↗ (main docs)", - href: "/docs/data-retention", - newWindow: true, - }, -}; diff --git a/pages/self-hosting/upgrade/_meta.tsx b/pages/self-hosting/upgrade/_meta.tsx deleted file mode 100644 index 0072d9d59a..0000000000 --- a/pages/self-hosting/upgrade/_meta.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export default { - index: "How to Upgrade", - versioning: "Versioning", - "background-migrations": "Background Migrations", - "upgrade-guides": "Upgrade Guides", - "release-notes": "Release Notes", -}; diff --git a/pages/self-hosting/upgrade/release-notes/_meta.tsx b/pages/self-hosting/upgrade/release-notes/_meta.tsx deleted file mode 100644 index 13206c0865..0000000000 --- a/pages/self-hosting/upgrade/release-notes/_meta.tsx +++ /dev/null @@ -1,17 +0,0 @@ -export default { - server: { - title: "Server ↗", - href: "https://github.com/langfuse/langfuse/releases", - newWindow: true, - }, - python: { - title: "Python SDK ↗", - href: "https://github.com/langfuse/langfuse-python/releases", - newWindow: true, - }, - js: { - title: "JS/TS SDK ↗", - href: "https://github.com/langfuse/langfuse-js/releases", - newWindow: true, - }, -}; diff --git a/pages/self-hosting/upgrade/upgrade-guides/_meta.tsx b/pages/self-hosting/upgrade/upgrade-guides/_meta.tsx deleted file mode 100644 index 77cf8b2b4f..0000000000 --- a/pages/self-hosting/upgrade/upgrade-guides/_meta.tsx +++ /dev/null @@ -1,4 +0,0 @@ -export default { - "upgrade-v2-to-v3": "Upgrade v2 to v3", - "upgrade-v1-to-v2": "Upgrade v1 to v2", -}; diff --git a/pages/self-hosting/v2/_meta.tsx b/pages/self-hosting/v2/_meta.tsx deleted file mode 100644 index 370c25118d..0000000000 --- a/pages/self-hosting/v2/_meta.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { MenuSwitcher } from "@/components/MenuSwitcher"; - -export default { - index: "Overview", - "deployment-guide": "Deployment Guide", - "docker-compose": "Local Deployment (docker compose)", -}; diff --git a/pages/users/_meta.tsx b/pages/users/_meta.tsx deleted file mode 100644 index e117159cd4..0000000000 --- a/pages/users/_meta.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export default { - "*": { - theme: { - toc: true, - sidebar: false, - pagination: true, - typesetting: "article", - layout: "default", - breadcrumb: false, - }, - }, -}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 38d33cf37e..17a273ae1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,142 +1,145 @@ -lockfileVersion: '9.0' +lockfileVersion: "9.0" settings: autoInstallPeers: true excludeLinksFromLockfile: false -importers: +overrides: + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 +importers: .: dependencies: - '@ai-sdk/openai': + "@ai-sdk/openai": specifier: ^2.0.14 version: 2.0.14(zod@4.0.15) - '@ai-sdk/react': + "@ai-sdk/react": specifier: ^2.0.8 version: 2.0.8(react@18.3.1)(zod@4.0.15) - '@calcom/embed-react': + "@calcom/embed-react": specifier: ^1.5.2 version: 1.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@headlessui/react': + "@headlessui/react": specifier: ^2.2.0 version: 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@hookform/resolvers': + "@hookform/resolvers": specifier: ^5.2.2 version: 5.2.2(react-hook-form@7.68.0(react@18.3.1)) - '@icons-pack/react-simple-icons': + "@icons-pack/react-simple-icons": specifier: ^13.7.0 version: 13.7.0(react@18.3.1) - '@inkeep/cxkit-react': + "@inkeep/cxkit-react": specifier: ^0.5.98 - version: 0.5.98(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@4.0.15) - '@langfuse/client': + version: 0.5.98(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@4.0.15) + "@langfuse/client": specifier: 4.6.1 version: 4.6.1(@opentelemetry/api@1.9.0) - '@langfuse/core': + "@langfuse/core": specifier: 4.6.1 version: 4.6.1(@opentelemetry/api@1.9.0) - '@langfuse/openai': + "@langfuse/openai": specifier: ^4.6.1 version: 4.6.1(@opentelemetry/api@1.9.0) - '@langfuse/otel': + "@langfuse/otel": specifier: 4.6.1 version: 4.6.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-http@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0)) - '@langfuse/tracing': + "@langfuse/tracing": specifier: 4.6.1 version: 4.6.1(@opentelemetry/api@1.9.0) - '@modelcontextprotocol/sdk': + "@modelcontextprotocol/sdk": specifier: ^1.13.2 version: 1.13.2 - '@opentelemetry/api': + "@opentelemetry/api": specifier: ^1.9.0 version: 1.9.0 - '@opentelemetry/sdk-trace-node': + "@opentelemetry/sdk-trace-node": specifier: ^2.0.1 version: 2.0.1(@opentelemetry/api@1.9.0) - '@radix-ui/react-accordion': + "@radix-ui/react-accordion": specifier: ^1.2.3 - version: 1.2.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-avatar': + version: 1.2.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-avatar": specifier: ^1.1.3 - version: 1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-collapsible': + version: 1.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-collapsible": specifier: ^1.1.11 - version: 1.1.11(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-dialog': + version: 1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-dialog": specifier: ^1.1.6 - version: 1.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-dropdown-menu': + version: 1.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-dropdown-menu": specifier: ^2.1.6 - version: 2.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-hover-card': + version: 2.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-hover-card": specifier: ^1.1.6 - version: 1.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-label': + version: 1.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-label": specifier: ^2.1.2 - version: 2.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-popover': + version: 2.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-popover": specifier: ^1.1.15 - version: 1.1.15(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-scroll-area': + version: 1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-scroll-area": specifier: ^1.2.9 - version: 1.2.9(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-select': + version: 1.2.9(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-select": specifier: ^2.2.5 - version: 2.2.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-separator': + version: 2.2.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-separator": specifier: ^1.1.2 - version: 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': + version: 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": specifier: ^1.1.2 - version: 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-switch': + version: 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-switch": specifier: ^1.2.6 - version: 1.2.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-tabs': + version: 1.2.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-tabs": specifier: ^1.1.3 - version: 1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-tooltip': + version: 1.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-tooltip": specifier: ^1.1.8 - version: 1.1.8(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': + version: 1.1.8(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-controllable-state": specifier: ^1.2.2 - version: 1.2.2(@types/react@18.3.3)(react@18.3.1) - '@react-three/drei': + version: 1.2.2(@types/react@19.2.14)(react@18.3.1) + "@react-three/drei": specifier: ^9.120.4 - version: 9.120.4(@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0))(@types/react@18.3.3)(@types/three@0.170.0)(immer@11.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0)(use-sync-external-store@1.5.0(react@18.3.1)) - '@react-three/fiber': + version: 9.120.4(@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0))(@types/react@19.2.14)(@types/three@0.183.0)(immer@11.1.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0)(use-sync-external-store@1.6.0(react@18.3.1)) + "@react-three/fiber": specifier: ^8.17.10 version: 8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0) - '@sparticuz/chromium': + "@sparticuz/chromium": specifier: ^140.0.0 version: 140.0.0 - '@supabase/supabase-js': + "@supabase/supabase-js": specifier: ^2.47.10 version: 2.47.10 - '@tanstack/react-table': + "@tailwindcss/postcss": + specifier: ^4.0.0 + version: 4.2.0 + "@tanstack/react-table": specifier: ^8.20.6 version: 8.20.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@types/nodemailer': + "@types/nodemailer": specifier: ^7.0.4 version: 7.0.4 - '@vercel/functions': + "@vercel/functions": specifier: ^2.2.2 - version: 2.2.2(@aws-sdk/credential-provider-web-identity@3.948.0) - '@vercel/mcp-adapter': + version: 2.2.2(@aws-sdk/credential-provider-web-identity@3.972.9) + "@vercel/mcp-adapter": specifier: ^0.11.1 - version: 0.11.1(@modelcontextprotocol/sdk@1.13.2)(next@15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@vercel/og': + version: 0.11.1(@modelcontextprotocol/sdk@1.13.2)(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + "@vercel/og": specifier: ^0.6.8 version: 0.6.8 - '@vidstack/react': + "@vidstack/react": specifier: ^1.12.13 - version: 1.12.13(@types/react@18.3.3)(react@18.3.1) + version: 1.12.13(@types/react@19.2.14)(react@18.3.1) ai: specifier: ^5.0.8 version: 5.0.8(zod@4.0.15) - autoprefixer: - specifier: ^10.4.21 - version: 10.4.21(postcss@8.4.49) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -148,16 +151,25 @@ importers: version: 8.6.0(react@18.3.1) framer-motion: specifier: ^11.15.0 - version: 11.15.0(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.15.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + fumadocs-core: + specifier: ^16.6.3 + version: 16.6.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.469.0(react@18.3.1))(next@16.1.6(@opentelemetry/api@1.9.0)(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)(zod@4.0.15) + fumadocs-mdx: + specifier: ^14.2.7 + version: 14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.469.0(react@18.3.1))(next@16.1.6(@opentelemetry/api@1.9.0)(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)(zod@4.0.15))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + fumadocs-ui: + specifier: ^16.6.3 + version: 16.6.3(@emotion/is-prop-valid@1.4.0)(@types/react@19.2.14)(fumadocs-core@16.6.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.469.0(react@18.3.1))(next@16.1.6(@opentelemetry/api@1.9.0)(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)(zod@4.0.15))(next@16.1.6(@opentelemetry/api@1.9.0)(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)(tailwindcss@4.2.0) geist: specifier: ^1.3.1 - version: 1.3.1(next@15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 1.3.1(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) gpt3-tokenizer: specifier: ^1.1.5 version: 1.1.5 harden-react-markdown: specifier: ^1.0.2 - version: 1.0.2(react-markdown@9.0.1(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + version: 1.0.2(react-markdown@9.0.1(@types/react@19.2.14)(react@18.3.1))(react@18.3.1) jsonwebtoken: specifier: ^9.0.2 version: 9.0.2 @@ -179,21 +191,21 @@ importers: marked: specifier: ^16.3.0 version: 16.3.0 + mdast-util-mdx-jsx: + specifier: ^3.2.0 + version: 3.2.0 nanoid: specifier: ^5.1.5 version: 5.1.5 next: - specifier: 15.2.8 - version: 15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^16.1.6 + version: 16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-sitemap: specifier: ^4.2.3 - version: 4.2.3(next@15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - nextra: - specifier: 3.0.15 - version: 3.0.15(@types/react@18.3.3)(next@15.2.8(@opentelemetry/api@1.9.0)(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.6.3) - nextra-theme-docs: - specifier: 3.0.15 - version: 3.0.15(next@15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.0.15(@types/react@18.3.3)(next@15.2.8(@opentelemetry/api@1.9.0)(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.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 4.2.3(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) nodemailer: specifier: ^7.0.11 version: 7.0.11 @@ -229,7 +241,7 @@ importers: version: 7.68.0(react@18.3.1) react-markdown: specifier: ^9.0.1 - version: 9.0.1(@types/react@18.3.3)(react@18.3.1) + version: 9.0.1(@types/react@19.2.14)(react@18.3.1) react-syntax-highlighter: specifier: ^15.6.1 version: 15.6.1(react@18.3.1) @@ -238,7 +250,7 @@ importers: version: 3.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) recharts: specifier: ^3.6.0 - version: 3.6.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react-is@16.13.1)(react@18.3.1)(redux@5.0.1) + version: 3.6.0(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react-is@19.2.4)(react@18.3.1)(redux@5.0.1) rehype-katex: specifier: ^7.0.1 version: 7.0.1 @@ -252,11 +264,11 @@ importers: specifier: ^2.5.5 version: 2.5.5 tailwindcss: - specifier: ^3.4.17 - version: 3.4.17 + specifier: ^4.0.0 + version: 4.2.0 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.17) + version: 1.0.7(tailwindcss@4.2.0) three: specifier: ^0.172.0 version: 0.172.0 @@ -267,13 +279,16 @@ importers: specifier: ^4.0.15 version: 4.0.15 devDependencies: - '@next/bundle-analyzer': - specifier: ^15.1.4 - version: 15.1.4 - '@types/node': + "@next/bundle-analyzer": + specifier: ^16.1.6 + version: 16.1.6 + "@types/mdx": + specifier: ^2.0.13 + version: 2.0.13 + "@types/node": specifier: 22.18.0 version: 22.18.0 - '@types/react-syntax-highlighter': + "@types/react-syntax-highlighter": specifier: ^15.5.13 version: 15.5.13 cross-env: @@ -293,38 +308,55 @@ importers: version: 0.6.2 packages: - - '@ai-sdk/gateway@1.0.4': - resolution: {integrity: sha512-1roLdgMbFU3Nr4MC97/te7w6OqxsWBkDUkpbCcvxF3jz/ku91WVaJldn/PKU8feMKNyI5W9wnqhbjb1BqbExOQ==} - engines: {node: '>=18'} + "@ai-sdk/gateway@1.0.4": + resolution: + { + integrity: sha512-1roLdgMbFU3Nr4MC97/te7w6OqxsWBkDUkpbCcvxF3jz/ku91WVaJldn/PKU8feMKNyI5W9wnqhbjb1BqbExOQ==, + } + engines: { node: ">=18" } peerDependencies: zod: ^3.25.76 || ^4 - '@ai-sdk/openai@2.0.14': - resolution: {integrity: sha512-u/wi1ixcvcg29wAJySjO803HlXpyCl6mkcOHn+Zn7DA+CtjuQNkKikJ4pZBc7I3Qhi90kA4XnOfKikhBXh4c4Q==} - engines: {node: '>=18'} + "@ai-sdk/openai@2.0.14": + resolution: + { + integrity: sha512-u/wi1ixcvcg29wAJySjO803HlXpyCl6mkcOHn+Zn7DA+CtjuQNkKikJ4pZBc7I3Qhi90kA4XnOfKikhBXh4c4Q==, + } + engines: { node: ">=18" } peerDependencies: zod: ^3.25.76 || ^4 - '@ai-sdk/provider-utils@3.0.1': - resolution: {integrity: sha512-/iP1sKc6UdJgGH98OCly7sWJKv+J9G47PnTjIj40IJMUQKwDrUMyf7zOOfRtPwSuNifYhSoJQ4s1WltI65gJ/g==} - engines: {node: '>=18'} + "@ai-sdk/provider-utils@3.0.1": + resolution: + { + integrity: sha512-/iP1sKc6UdJgGH98OCly7sWJKv+J9G47PnTjIj40IJMUQKwDrUMyf7zOOfRtPwSuNifYhSoJQ4s1WltI65gJ/g==, + } + engines: { node: ">=18" } peerDependencies: zod: ^3.25.76 || ^4 - '@ai-sdk/provider-utils@3.0.3': - resolution: {integrity: sha512-kAxIw1nYmFW1g5TvE54ZB3eNtgZna0RnLjPUp1ltz1+t9xkXJIuDT4atrwfau9IbS0BOef38wqrI8CjFfQrxhw==} - engines: {node: '>=18'} + "@ai-sdk/provider-utils@3.0.3": + resolution: + { + integrity: sha512-kAxIw1nYmFW1g5TvE54ZB3eNtgZna0RnLjPUp1ltz1+t9xkXJIuDT4atrwfau9IbS0BOef38wqrI8CjFfQrxhw==, + } + engines: { node: ">=18" } peerDependencies: zod: ^3.25.76 || ^4 - '@ai-sdk/provider@2.0.0': - resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} - engines: {node: '>=18'} - - '@ai-sdk/react@2.0.8': - resolution: {integrity: sha512-I9CI53lncv0nUy3TPW0lrnoHCZx4NUaAuFCgm6U0bId0PQKeYi61Z9XFrgo3mDByH2SSC3OVsPq6d5Db8kF1FQ==} - engines: {node: '>=18'} + "@ai-sdk/provider@2.0.0": + resolution: + { + integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==, + } + engines: { node: ">=18" } + + "@ai-sdk/react@2.0.8": + resolution: + { + integrity: sha512-I9CI53lncv0nUy3TPW0lrnoHCZx4NUaAuFCgm6U0bId0PQKeYi61Z9XFrgo3mDByH2SSC3OVsPq6d5Db8kF1FQ==, + } + engines: { node: ">=18" } peerDependencies: react: ^18 || ^19 || ^19.0.0-rc zod: ^3.25.76 || ^4 @@ -332,1775 +364,2928 @@ packages: zod: optional: true - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - - '@antfu/install-pkg@0.4.1': - resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} - - '@antfu/utils@0.7.10': - resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} - - '@aws-crypto/sha256-browser@5.2.0': - resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} - - '@aws-crypto/sha256-js@5.2.0': - resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/supports-web-crypto@5.2.0': - resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} - - '@aws-crypto/util@5.2.0': - resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - - '@aws-sdk/client-sesv2@3.948.0': - resolution: {integrity: sha512-7Sl8bRFFLAEQdlvTlaSNFlUHjD+B3N+gbhpS+vH/IlETSmn3fMm4b0Bvve8CWs8jUCctx8nDwXh+0lOWgNDQXw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-sso@3.948.0': - resolution: {integrity: sha512-iWjchXy8bIAVBUsKnbfKYXRwhLgRg3EqCQ5FTr3JbR+QR75rZm4ZOYXlvHGztVTmtAZ+PQVA1Y4zO7v7N87C0A==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/core@3.947.0': - resolution: {integrity: sha512-Khq4zHhuAkvCFuFbgcy3GrZTzfSX7ZIjIcW1zRDxXRLZKRtuhnZdonqTUfaWi5K42/4OmxkYNpsO7X7trQOeHw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-env@3.947.0': - resolution: {integrity: sha512-VR2V6dRELmzwAsCpK4GqxUi6UW5WNhAXS9F9AzWi5jvijwJo3nH92YNJUP4quMpgFZxJHEWyXLWgPjh9u0zYOA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-http@3.947.0': - resolution: {integrity: sha512-inF09lh9SlHj63Vmr5d+LmwPXZc2IbK8lAruhOr3KLsZAIHEgHgGPXWDC2ukTEMzg0pkexQ6FOhXXad6klK4RA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-ini@3.948.0': - resolution: {integrity: sha512-Cl//Qh88e8HBL7yYkJNpF5eq76IO6rq8GsatKcfVBm7RFVxCqYEPSSBtkHdbtNwQdRQqAMXc6E/lEB/CZUDxnA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-login@3.948.0': - resolution: {integrity: sha512-gcKO2b6eeTuZGp3Vvgr/9OxajMrD3W+FZ2FCyJox363ZgMoYJsyNid1vuZrEuAGkx0jvveLXfwiVS0UXyPkgtw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-node@3.948.0': - resolution: {integrity: sha512-ep5vRLnrRdcsP17Ef31sNN4g8Nqk/4JBydcUJuFRbGuyQtrZZrVT81UeH2xhz6d0BK6ejafDB9+ZpBjXuWT5/Q==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-process@3.947.0': - resolution: {integrity: sha512-WpanFbHe08SP1hAJNeDdBDVz9SGgMu/gc0XJ9u3uNpW99nKZjDpvPRAdW7WLA4K6essMjxWkguIGNOpij6Do2Q==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-sso@3.948.0': - resolution: {integrity: sha512-gqLhX1L+zb/ZDnnYbILQqJ46j735StfWV5PbDjxRzBKS7GzsiYoaf6MyHseEopmWrez5zl5l6aWzig7UpzSeQQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-web-identity@3.948.0': - resolution: {integrity: sha512-MvYQlXVoJyfF3/SmnNzOVEtANRAiJIObEUYYyjTqKZTmcRIVVky0tPuG26XnB8LmTYgtESwJIZJj/Eyyc9WURQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-host-header@3.936.0': - resolution: {integrity: sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-logger@3.936.0': - resolution: {integrity: sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-recursion-detection@3.948.0': - resolution: {integrity: sha512-Qa8Zj+EAqA0VlAVvxpRnpBpIWJI9KUwaioY1vkeNVwXPlNaz9y9zCKVM9iU9OZ5HXpoUg6TnhATAHXHAE8+QsQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-sdk-s3@3.947.0': - resolution: {integrity: sha512-DS2tm5YBKhPW2PthrRBDr6eufChbwXe0NjtTZcYDfUCXf0OR+W6cIqyKguwHMJ+IyYdey30AfVw9/Lb5KB8U8A==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-user-agent@3.947.0': - resolution: {integrity: sha512-7rpKV8YNgCP2R4F9RjWZFcD2R+SO/0R4VHIbY9iZJdH2MzzJ8ZG7h8dZ2m8QkQd1fjx4wrFJGGPJUTYXPV3baA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/nested-clients@3.948.0': - resolution: {integrity: sha512-zcbJfBsB6h254o3NuoEkf0+UY1GpE9ioiQdENWv7odo69s8iaGBEQ4BDpsIMqcuiiUXw1uKIVNxCB1gUGYz8lw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/region-config-resolver@3.936.0': - resolution: {integrity: sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/signature-v4-multi-region@3.947.0': - resolution: {integrity: sha512-UaYmzoxf9q3mabIA2hc4T6x5YSFUG2BpNjAZ207EA1bnQMiK+d6vZvb83t7dIWL/U1de1sGV19c1C81Jf14rrA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/token-providers@3.948.0': - resolution: {integrity: sha512-V487/kM4Teq5dcr1t5K6eoUKuqlGr9FRWL3MIMukMERJXHZvio6kox60FZ/YtciRHRI75u14YUqm2Dzddcu3+A==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/types@3.936.0': - resolution: {integrity: sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-arn-parser@3.893.0': - resolution: {integrity: sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-endpoints@3.936.0': - resolution: {integrity: sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-locate-window@3.893.0': - resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-user-agent-browser@3.936.0': - resolution: {integrity: sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==} - - '@aws-sdk/util-user-agent-node@3.947.0': - resolution: {integrity: sha512-+vhHoDrdbb+zerV4noQk1DHaUMNzWFWPpPYjVTwW2186k5BEJIecAMChYkghRrBVJ3KPWP1+JnZwOd72F3d4rQ==} - engines: {node: '>=18.0.0'} + "@alloc/quick-lru@5.2.0": + resolution: + { + integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==, + } + engines: { node: ">=10" } + + "@aws-crypto/sha256-browser@5.2.0": + resolution: + { + integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==, + } + + "@aws-crypto/sha256-js@5.2.0": + resolution: + { + integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==, + } + engines: { node: ">=16.0.0" } + + "@aws-crypto/supports-web-crypto@5.2.0": + resolution: + { + integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==, + } + + "@aws-crypto/util@5.2.0": + resolution: + { + integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==, + } + + "@aws-sdk/client-sesv2@3.948.0": + resolution: + { + integrity: sha512-7Sl8bRFFLAEQdlvTlaSNFlUHjD+B3N+gbhpS+vH/IlETSmn3fMm4b0Bvve8CWs8jUCctx8nDwXh+0lOWgNDQXw==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/client-sso@3.948.0": + resolution: + { + integrity: sha512-iWjchXy8bIAVBUsKnbfKYXRwhLgRg3EqCQ5FTr3JbR+QR75rZm4ZOYXlvHGztVTmtAZ+PQVA1Y4zO7v7N87C0A==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/core@3.947.0": + resolution: + { + integrity: sha512-Khq4zHhuAkvCFuFbgcy3GrZTzfSX7ZIjIcW1zRDxXRLZKRtuhnZdonqTUfaWi5K42/4OmxkYNpsO7X7trQOeHw==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/core@3.973.11": + resolution: + { + integrity: sha512-wdQ8vrvHkKIV7yNUKXyjPWKCdYEUrZTHJ8Ojd5uJxXp9vqPCkUR1dpi1NtOLcrDgueJH7MUH5lQZxshjFPSbDA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-env@3.947.0": + resolution: + { + integrity: sha512-VR2V6dRELmzwAsCpK4GqxUi6UW5WNhAXS9F9AzWi5jvijwJo3nH92YNJUP4quMpgFZxJHEWyXLWgPjh9u0zYOA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-http@3.947.0": + resolution: + { + integrity: sha512-inF09lh9SlHj63Vmr5d+LmwPXZc2IbK8lAruhOr3KLsZAIHEgHgGPXWDC2ukTEMzg0pkexQ6FOhXXad6klK4RA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-ini@3.948.0": + resolution: + { + integrity: sha512-Cl//Qh88e8HBL7yYkJNpF5eq76IO6rq8GsatKcfVBm7RFVxCqYEPSSBtkHdbtNwQdRQqAMXc6E/lEB/CZUDxnA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-login@3.948.0": + resolution: + { + integrity: sha512-gcKO2b6eeTuZGp3Vvgr/9OxajMrD3W+FZ2FCyJox363ZgMoYJsyNid1vuZrEuAGkx0jvveLXfwiVS0UXyPkgtw==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-node@3.948.0": + resolution: + { + integrity: sha512-ep5vRLnrRdcsP17Ef31sNN4g8Nqk/4JBydcUJuFRbGuyQtrZZrVT81UeH2xhz6d0BK6ejafDB9+ZpBjXuWT5/Q==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-process@3.947.0": + resolution: + { + integrity: sha512-WpanFbHe08SP1hAJNeDdBDVz9SGgMu/gc0XJ9u3uNpW99nKZjDpvPRAdW7WLA4K6essMjxWkguIGNOpij6Do2Q==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-sso@3.948.0": + resolution: + { + integrity: sha512-gqLhX1L+zb/ZDnnYbILQqJ46j735StfWV5PbDjxRzBKS7GzsiYoaf6MyHseEopmWrez5zl5l6aWzig7UpzSeQQ==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-web-identity@3.948.0": + resolution: + { + integrity: sha512-MvYQlXVoJyfF3/SmnNzOVEtANRAiJIObEUYYyjTqKZTmcRIVVky0tPuG26XnB8LmTYgtESwJIZJj/Eyyc9WURQ==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-web-identity@3.972.9": + resolution: + { + integrity: sha512-8LnfS76nHXoEc9aRRiMMpxZxJeDG0yusdyo3NvPhCgESmBUgpMa4luhGbClW5NoX/qRcGxxM6Z/esqANSNMTow==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-host-header@3.936.0": + resolution: + { + integrity: sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/middleware-host-header@3.972.3": + resolution: + { + integrity: sha512-aknPTb2M+G3s+0qLCx4Li/qGZH8IIYjugHMv15JTYMe6mgZO8VBpYgeGYsNMGCqCZOcWzuf900jFBG5bopfzmA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-logger@3.936.0": + resolution: + { + integrity: sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/middleware-logger@3.972.3": + resolution: + { + integrity: sha512-Ftg09xNNRqaz9QNzlfdQWfpqMCJbsQdnZVJP55jfhbKi1+FTWxGuvfPoBhDHIovqWKjqbuiew3HuhxbJ0+OjgA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-recursion-detection@3.948.0": + resolution: + { + integrity: sha512-Qa8Zj+EAqA0VlAVvxpRnpBpIWJI9KUwaioY1vkeNVwXPlNaz9y9zCKVM9iU9OZ5HXpoUg6TnhATAHXHAE8+QsQ==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/middleware-recursion-detection@3.972.3": + resolution: + { + integrity: sha512-PY57QhzNuXHnwbJgbWYTrqIDHYSeOlhfYERTAuc16LKZpTZRJUjzBFokp9hF7u1fuGeE3D70ERXzdbMBOqQz7Q==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-sdk-s3@3.947.0": + resolution: + { + integrity: sha512-DS2tm5YBKhPW2PthrRBDr6eufChbwXe0NjtTZcYDfUCXf0OR+W6cIqyKguwHMJ+IyYdey30AfVw9/Lb5KB8U8A==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/middleware-user-agent@3.947.0": + resolution: + { + integrity: sha512-7rpKV8YNgCP2R4F9RjWZFcD2R+SO/0R4VHIbY9iZJdH2MzzJ8ZG7h8dZ2m8QkQd1fjx4wrFJGGPJUTYXPV3baA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/middleware-user-agent@3.972.11": + resolution: + { + integrity: sha512-R8CvPsPHXwzIHCAza+bllY6PrctEk4lYq/SkHJz9NLoBHCcKQrbOcsfXxO6xmipSbUNIbNIUhH0lBsJGgsRdiw==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/nested-clients@3.948.0": + resolution: + { + integrity: sha512-zcbJfBsB6h254o3NuoEkf0+UY1GpE9ioiQdENWv7odo69s8iaGBEQ4BDpsIMqcuiiUXw1uKIVNxCB1gUGYz8lw==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/nested-clients@3.993.0": + resolution: + { + integrity: sha512-iOq86f2H67924kQUIPOAvlmMaOAvOLoDOIb66I2YqSUpMYB6ufiuJW3RlREgskxv86S5qKzMnfy/X6CqMjK6XQ==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/region-config-resolver@3.936.0": + resolution: + { + integrity: sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/region-config-resolver@3.972.3": + resolution: + { + integrity: sha512-v4J8qYAWfOMcZ4MJUyatntOicTzEMaU7j3OpkRCGGFSL2NgXQ5VbxauIyORA+pxdKZ0qQG2tCQjQjZDlXEC3Ow==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/signature-v4-multi-region@3.947.0": + resolution: + { + integrity: sha512-UaYmzoxf9q3mabIA2hc4T6x5YSFUG2BpNjAZ207EA1bnQMiK+d6vZvb83t7dIWL/U1de1sGV19c1C81Jf14rrA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/token-providers@3.948.0": + resolution: + { + integrity: sha512-V487/kM4Teq5dcr1t5K6eoUKuqlGr9FRWL3MIMukMERJXHZvio6kox60FZ/YtciRHRI75u14YUqm2Dzddcu3+A==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/types@3.936.0": + resolution: + { + integrity: sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/types@3.973.1": + resolution: + { + integrity: sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/util-arn-parser@3.893.0": + resolution: + { + integrity: sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/util-endpoints@3.936.0": + resolution: + { + integrity: sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/util-endpoints@3.993.0": + resolution: + { + integrity: sha512-j6vioBeRZ4eHX4SWGvGPpwGg/xSOcK7f1GL0VM+rdf3ZFTIsUEhCFmD78B+5r2PgztcECSzEfvHQX01k8dPQPw==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/util-locate-window@3.893.0": + resolution: + { + integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/util-user-agent-browser@3.936.0": + resolution: + { + integrity: sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==, + } + + "@aws-sdk/util-user-agent-browser@3.972.3": + resolution: + { + integrity: sha512-JurOwkRUcXD/5MTDBcqdyQ9eVedtAsZgw5rBwktsPTN7QtPiS2Ld1jkJepNgYoCufz1Wcut9iup7GJDoIHp8Fw==, + } + + "@aws-sdk/util-user-agent-node@3.947.0": + resolution: + { + integrity: sha512-+vhHoDrdbb+zerV4noQk1DHaUMNzWFWPpPYjVTwW2186k5BEJIecAMChYkghRrBVJ3KPWP1+JnZwOd72F3d4rQ==, + } + engines: { node: ">=18.0.0" } peerDependencies: - aws-crt: '>=1.0.0' + aws-crt: ">=1.0.0" peerDependenciesMeta: aws-crt: optional: true - '@aws-sdk/xml-builder@3.930.0': - resolution: {integrity: sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==} - engines: {node: '>=18.0.0'} - - '@aws/lambda-invoke-store@0.2.2': - resolution: {integrity: sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==} - engines: {node: '>=18.0.0'} - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} + "@aws-sdk/util-user-agent-node@3.972.9": + resolution: + { + integrity: sha512-JNswdsLdQemxqaSIBL2HRhsHPUBBziAgoi5RQv6/9avmE5g5RSdt1hWr3mHJ7OxqRYf+KeB11ExWbiqfrnoeaA==, + } + engines: { node: ">=20.0.0" } + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true - '@babel/runtime@7.24.7': - resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} - engines: {node: '>=6.9.0'} + "@aws-sdk/xml-builder@3.930.0": + resolution: + { + integrity: sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/xml-builder@3.972.5": + resolution: + { + integrity: sha512-mCae5Ys6Qm1LDu0qdGwx2UQ63ONUe+FHw908fJzLDqFKTDBK4LDZUqKWm4OkTCNFq19bftjsBSESIGLD/s3/rA==, + } + engines: { node: ">=20.0.0" } + + "@aws/lambda-invoke-store@0.2.2": + resolution: + { + integrity: sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==, + } + engines: { node: ">=18.0.0" } + + "@aws/lambda-invoke-store@0.2.3": + resolution: + { + integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==, + } + engines: { node: ">=18.0.0" } + + "@babel/code-frame@7.27.1": + resolution: + { + integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-identifier@7.27.1": + resolution: + { + integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==, + } + engines: { node: ">=6.9.0" } + + "@babel/runtime@7.24.7": + resolution: + { + integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==, + } + engines: { node: ">=6.9.0" } + + "@babel/runtime@7.26.0": + resolution: + { + integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==, + } + engines: { node: ">=6.9.0" } + + "@babel/runtime@7.27.0": + resolution: + { + integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==, + } + engines: { node: ">=6.9.0" } + + "@braintree/sanitize-url@7.1.0": + resolution: + { + integrity: sha512-o+UlMLt49RvtCASlOMW0AkHnabN9wR9rwCCherxO0yG4Npy34GkvrAqdXQvrhNs+jh+gkK8gB8Lf05qL/O7KWg==, + } + + "@bufbuild/protobuf@1.10.1": + resolution: + { + integrity: sha512-wJ8ReQbHxsAfXhrf9ixl0aYbZorRuOWpBNzm8pL8ftmSxQx/wnJD5Eg861NwJU/czy2VXFIebCeZnZrI9rktIQ==, + } + + "@calcom/embed-core@1.5.2": + resolution: + { + integrity: sha512-y1mpVDfcaVdLJ/CN17c7N2SyJAMiM3u9NYvL5mWFDBe4aa5HLTDc5g/DBbO2oCq859W3bxs11voC/E3KkJH3Iw==, + } + + "@calcom/embed-react@1.5.2": + resolution: + { + integrity: sha512-DgY3RySiXOrbIVX1LiV/ucKilG+TkvqhP4/0nLlKPLOlk642cSO30xSu4nOmVgR60FLqMyp7Vlg/Xd6J5ijETg==, + } + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 - '@babel/runtime@7.26.0': - resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} - engines: {node: '>=6.9.0'} + "@calcom/embed-snippet@1.3.2": + resolution: + { + integrity: sha512-EmW/ZjaQD0HjLI8yFNA5Mtb8zCOQQnj9RhChujuMijUK8EVyE1KtU9t3xIxm1hBMNHr4R1qMaBo2QYaZqQhzsw==, + } + + "@corex/deepmerge@4.0.43": + resolution: + { + integrity: sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==, + } + + "@dimforge/rapier3d-compat@0.12.0": + resolution: + { + integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==, + } + + "@discoveryjs/json-ext@0.5.7": + resolution: + { + integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==, + } + engines: { node: ">=10.0.0" } + + "@emnapi/runtime@1.8.1": + resolution: + { + integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==, + } + + "@emotion/is-prop-valid@1.4.0": + resolution: + { + integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==, + } + + "@emotion/memoize@0.9.0": + resolution: + { + integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==, + } + + "@esbuild/aix-ppc64@0.27.3": + resolution: + { + integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [aix] + + "@esbuild/android-arm64@0.27.3": + resolution: + { + integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [android] - '@babel/runtime@7.27.0': - resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} - engines: {node: '>=6.9.0'} + "@esbuild/android-arm@0.27.3": + resolution: + { + integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [android] - '@braintree/sanitize-url@7.1.0': - resolution: {integrity: sha512-o+UlMLt49RvtCASlOMW0AkHnabN9wR9rwCCherxO0yG4Npy34GkvrAqdXQvrhNs+jh+gkK8gB8Lf05qL/O7KWg==} + "@esbuild/android-x64@0.27.3": + resolution: + { + integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [android] - '@bufbuild/protobuf@1.10.1': - resolution: {integrity: sha512-wJ8ReQbHxsAfXhrf9ixl0aYbZorRuOWpBNzm8pL8ftmSxQx/wnJD5Eg861NwJU/czy2VXFIebCeZnZrI9rktIQ==} + "@esbuild/darwin-arm64@0.27.3": + resolution: + { + integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [darwin] - '@calcom/embed-core@1.5.2': - resolution: {integrity: sha512-y1mpVDfcaVdLJ/CN17c7N2SyJAMiM3u9NYvL5mWFDBe4aa5HLTDc5g/DBbO2oCq859W3bxs11voC/E3KkJH3Iw==} + "@esbuild/darwin-x64@0.27.3": + resolution: + { + integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [darwin] - '@calcom/embed-react@1.5.2': - resolution: {integrity: sha512-DgY3RySiXOrbIVX1LiV/ucKilG+TkvqhP4/0nLlKPLOlk642cSO30xSu4nOmVgR60FLqMyp7Vlg/Xd6J5ijETg==} - peerDependencies: - react: ^18.2.0 - react-dom: ^18.2.0 + "@esbuild/freebsd-arm64@0.27.3": + resolution: + { + integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [freebsd] - '@calcom/embed-snippet@1.3.2': - resolution: {integrity: sha512-EmW/ZjaQD0HjLI8yFNA5Mtb8zCOQQnj9RhChujuMijUK8EVyE1KtU9t3xIxm1hBMNHr4R1qMaBo2QYaZqQhzsw==} + "@esbuild/freebsd-x64@0.27.3": + resolution: + { + integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [freebsd] - '@chevrotain/cst-dts-gen@11.0.3': - resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} + "@esbuild/linux-arm64@0.27.3": + resolution: + { + integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [linux] - '@chevrotain/gast@11.0.3': - resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==} + "@esbuild/linux-arm@0.27.3": + resolution: + { + integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [linux] - '@chevrotain/regexp-to-ast@11.0.3': - resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==} + "@esbuild/linux-ia32@0.27.3": + resolution: + { + integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [linux] - '@chevrotain/types@11.0.3': - resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==} + "@esbuild/linux-loong64@0.27.3": + resolution: + { + integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==, + } + engines: { node: ">=18" } + cpu: [loong64] + os: [linux] - '@chevrotain/utils@11.0.3': - resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} + "@esbuild/linux-mips64el@0.27.3": + resolution: + { + integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==, + } + engines: { node: ">=18" } + cpu: [mips64el] + os: [linux] - '@corex/deepmerge@4.0.43': - resolution: {integrity: sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==} + "@esbuild/linux-ppc64@0.27.3": + resolution: + { + integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [linux] - '@discoveryjs/json-ext@0.5.7': - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} + "@esbuild/linux-riscv64@0.27.3": + resolution: + { + integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==, + } + engines: { node: ">=18" } + cpu: [riscv64] + os: [linux] - '@emnapi/runtime@1.7.1': - resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + "@esbuild/linux-s390x@0.27.3": + resolution: + { + integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==, + } + engines: { node: ">=18" } + cpu: [s390x] + os: [linux] - '@emotion/is-prop-valid@0.8.8': - resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} + "@esbuild/linux-x64@0.27.3": + resolution: + { + integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [linux] - '@emotion/memoize@0.7.4': - resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + "@esbuild/netbsd-arm64@0.27.3": + resolution: + { + integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [netbsd] + + "@esbuild/netbsd-x64@0.27.3": + resolution: + { + integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [netbsd] + + "@esbuild/openbsd-arm64@0.27.3": + resolution: + { + integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openbsd] + + "@esbuild/openbsd-x64@0.27.3": + resolution: + { + integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [openbsd] + + "@esbuild/openharmony-arm64@0.27.3": + resolution: + { + integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openharmony] + + "@esbuild/sunos-x64@0.27.3": + resolution: + { + integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [sunos] + + "@esbuild/win32-arm64@0.27.3": + resolution: + { + integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [win32] - '@floating-ui/core@1.6.8': - resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + "@esbuild/win32-ia32@0.27.3": + resolution: + { + integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [win32] - '@floating-ui/dom@1.6.11': - resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} + "@esbuild/win32-x64@0.27.3": + resolution: + { + integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [win32] - '@floating-ui/react-dom@2.1.2': - resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} + "@floating-ui/core@1.6.8": + resolution: + { + integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==, + } + + "@floating-ui/dom@1.6.11": + resolution: + { + integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==, + } + + "@floating-ui/react-dom@2.1.2": + resolution: + { + integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==, + } peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/react@0.26.24': - resolution: {integrity: sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw==} + react: ">=16.8.0" + react-dom: ">=16.8.0" + + "@floating-ui/react@0.26.24": + resolution: + { + integrity: sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw==, + } peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/utils@0.2.8': - resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} - - '@formatjs/intl-localematcher@0.5.5': - resolution: {integrity: sha512-t5tOGMgZ/i5+ALl2/offNqAQq/lfUnKLEw0mXQI4N4bqpedhrSE+fyKLpwnd22sK0dif6AV+ufQcTsKShB9J1g==} + react: ">=16.8.0" + react-dom: ">=16.8.0" + + "@floating-ui/utils@0.2.8": + resolution: + { + integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==, + } + + "@formatjs/fast-memoize@3.1.0": + resolution: + { + integrity: sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==, + } + + "@formatjs/intl-localematcher@0.8.1": + resolution: + { + integrity: sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==, + } + + "@fumadocs/tailwind@0.0.2": + resolution: + { + integrity: sha512-4JrTJLRDKKdFF3gy07rAsakqGr17/0cJE042B1icCmMRrPA4a38cjR1qd4EqUiDJ+fzM0wgVN9QYiqds3HB2rg==, + } + peerDependencies: + tailwindcss: ^4.0.0 + peerDependenciesMeta: + tailwindcss: + optional: true - '@headlessui/react@2.2.0': - resolution: {integrity: sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==} - engines: {node: '>=10'} + "@headlessui/react@2.2.0": + resolution: + { + integrity: sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==, + } + engines: { node: ">=10" } peerDependencies: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc - '@hookform/resolvers@5.2.2': - resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==} + "@hookform/resolvers@5.2.2": + resolution: + { + integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==, + } peerDependencies: react-hook-form: ^7.55.0 - '@iconify/types@2.0.0': - resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - - '@iconify/utils@2.1.33': - resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} - - '@icons-pack/react-simple-icons@13.7.0': - resolution: {integrity: sha512-Vx5mnIm/3gD/9dpCfw/EdCXwzCswmvWnvMjL6zUJTbpk2PuyCdx5zSfiX8KQKYszD/1Z2mfaiBtqCxlHuDcpuA==} + "@icons-pack/react-simple-icons@13.7.0": + resolution: + { + integrity: sha512-Vx5mnIm/3gD/9dpCfw/EdCXwzCswmvWnvMjL6zUJTbpk2PuyCdx5zSfiX8KQKYszD/1Z2mfaiBtqCxlHuDcpuA==, + } peerDependencies: react: ^16.13 || ^17 || ^18 || ^19 - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/colour@1.0.0": + resolution: + { + integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==, + } + engines: { node: ">=18" } + + "@img/sharp-darwin-arm64@0.34.5": + resolution: + { + integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-darwin-x64@0.34.5": + resolution: + { + integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + "@img/sharp-libvips-darwin-arm64@1.2.4": + resolution: + { + integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, + } cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + "@img/sharp-libvips-darwin-x64@1.2.4": + resolution: + { + integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, + } cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + "@img/sharp-libvips-linux-arm64@1.2.4": + resolution: + { + integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, + } cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + "@img/sharp-libvips-linux-arm@1.2.4": + resolution: + { + integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, + } cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + "@img/sharp-libvips-linux-ppc64@1.2.4": + resolution: + { + integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, + } + cpu: [ppc64] + os: [linux] + + "@img/sharp-libvips-linux-riscv64@1.2.4": + resolution: + { + integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, + } + cpu: [riscv64] + os: [linux] + + "@img/sharp-libvips-linux-s390x@1.2.4": + resolution: + { + integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, + } cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + "@img/sharp-libvips-linux-x64@1.2.4": + resolution: + { + integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, + } cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + "@img/sharp-libvips-linuxmusl-arm64@1.2.4": + resolution: + { + integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, + } cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + "@img/sharp-libvips-linuxmusl-x64@1.2.4": + resolution: + { + integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, + } cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-arm64@0.34.5": + resolution: + { + integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-arm@0.34.5": + resolution: + { + integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-ppc64@0.34.5": + resolution: + { + integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [ppc64] + os: [linux] + + "@img/sharp-linux-riscv64@0.34.5": + resolution: + { + integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [riscv64] + os: [linux] + + "@img/sharp-linux-s390x@0.34.5": + resolution: + { + integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-x64@0.34.5": + resolution: + { + integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linuxmusl-arm64@0.34.5": + resolution: + { + integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linuxmusl-x64@0.34.5": + resolution: + { + integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-wasm32@0.34.5": + resolution: + { + integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [wasm32] - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-win32-arm64@0.34.5": + resolution: + { + integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [win32] + + "@img/sharp-win32-ia32@0.34.5": + resolution: + { + integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-win32-x64@0.34.5": + resolution: + { + integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [win32] - '@inkeep/cxkit-color-mode@0.5.98': - resolution: {integrity: sha512-ddTNq2uX9WRFc/L7wJspUpYWYXWXS6a9Vg5fjj/FNrS9H6ah7MzyBNiuC3hFHpzmSgx+6hIJY+2N6z6OWEfVaA==} - - '@inkeep/cxkit-primitives@0.5.98': - resolution: {integrity: sha512-B2DDbIUsSfvhRvjHpCy4r9k7UOhuXld+OCsv2rxSgUXHvcQ+FK1rZAkR7C6TSSsytfFnGNrDriRmQIELcIzHmA==} + "@inkeep/cxkit-color-mode@0.5.98": + resolution: + { + integrity: sha512-ddTNq2uX9WRFc/L7wJspUpYWYXWXS6a9Vg5fjj/FNrS9H6ah7MzyBNiuC3hFHpzmSgx+6hIJY+2N6z6OWEfVaA==, + } + + "@inkeep/cxkit-primitives@0.5.98": + resolution: + { + integrity: sha512-B2DDbIUsSfvhRvjHpCy4r9k7UOhuXld+OCsv2rxSgUXHvcQ+FK1rZAkR7C6TSSsytfFnGNrDriRmQIELcIzHmA==, + } peerDependencies: - react: '>=17.0.0' - react-dom: '>=17.0.0' - - '@inkeep/cxkit-react@0.5.98': - resolution: {integrity: sha512-vGm8V/zINlxls4G6QO9N0DTUwv6j0Sp9if7HC+4D/0EL6SfkzAu87vszTgtbRssdPyqh/pa2E6OaXpfCSwIzew==} - - '@inkeep/cxkit-styled@0.5.98': - resolution: {integrity: sha512-rTsrFalyCIeQzVhMAqBSiYFI5VxkpY0to0qRpoZ8DhKGfC0FGgMXumZl5YOEgxZFtWjCObEdTvPeBHcjeExvWA==} - - '@inkeep/cxkit-theme@0.5.98': - resolution: {integrity: sha512-JBRi3dlfN8WODEQpxC/C1ZYCUZEf0KIKE10SDHQ8DSI+eBS51SaSSlE3OuHCJetDg3E9yKOiqTOSuvVQ1lp15A==} - - '@inkeep/cxkit-types@0.5.98': - resolution: {integrity: sha512-mSC+0uBGcYYu0UrCpMb7QHlTD66f24LgXYn38nXLyb+/CvCXCAk5N+RjaKiRZ+1yved8DEDYjZhsCgiuKeXhTQ==} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@langfuse/client@4.6.1': - resolution: {integrity: sha512-/jR/a/tJx7gZtrPla56IfG2/B9+QabZzdATXPgdUAph4Nc87Kaj9O5jHvm3y1n7JJTqfAvAvYL9lWq8jjSEAMw==} + react: ">=17.0.0" + react-dom: ">=17.0.0" + + "@inkeep/cxkit-react@0.5.98": + resolution: + { + integrity: sha512-vGm8V/zINlxls4G6QO9N0DTUwv6j0Sp9if7HC+4D/0EL6SfkzAu87vszTgtbRssdPyqh/pa2E6OaXpfCSwIzew==, + } + + "@inkeep/cxkit-styled@0.5.98": + resolution: + { + integrity: sha512-rTsrFalyCIeQzVhMAqBSiYFI5VxkpY0to0qRpoZ8DhKGfC0FGgMXumZl5YOEgxZFtWjCObEdTvPeBHcjeExvWA==, + } + + "@inkeep/cxkit-theme@0.5.98": + resolution: + { + integrity: sha512-JBRi3dlfN8WODEQpxC/C1ZYCUZEf0KIKE10SDHQ8DSI+eBS51SaSSlE3OuHCJetDg3E9yKOiqTOSuvVQ1lp15A==, + } + + "@inkeep/cxkit-types@0.5.98": + resolution: + { + integrity: sha512-mSC+0uBGcYYu0UrCpMb7QHlTD66f24LgXYn38nXLyb+/CvCXCAk5N+RjaKiRZ+1yved8DEDYjZhsCgiuKeXhTQ==, + } + + "@jridgewell/gen-mapping@0.3.8": + resolution: + { + integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==, + } + engines: { node: ">=6.0.0" } + + "@jridgewell/remapping@2.3.5": + resolution: + { + integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, + } + + "@jridgewell/resolve-uri@3.1.2": + resolution: + { + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, + } + engines: { node: ">=6.0.0" } + + "@jridgewell/set-array@1.2.1": + resolution: + { + integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==, + } + engines: { node: ">=6.0.0" } + + "@jridgewell/sourcemap-codec@1.5.0": + resolution: + { + integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==, + } + + "@jridgewell/sourcemap-codec@1.5.5": + resolution: + { + integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, + } + + "@jridgewell/trace-mapping@0.3.25": + resolution: + { + integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==, + } + + "@langfuse/client@4.6.1": + resolution: + { + integrity: sha512-/jR/a/tJx7gZtrPla56IfG2/B9+QabZzdATXPgdUAph4Nc87Kaj9O5jHvm3y1n7JJTqfAvAvYL9lWq8jjSEAMw==, + } peerDependencies: - '@opentelemetry/api': ^1.9.0 + "@opentelemetry/api": ^1.9.0 - '@langfuse/core@4.6.1': - resolution: {integrity: sha512-DtQoKWHQh0I0MsJxcKrBQVKAJ3fea6+raXlISVY3NDMFG/zSKkdkNouQvUXQtSCHBbOFupHMBw8imM30lbhq3g==} + "@langfuse/core@4.6.1": + resolution: + { + integrity: sha512-DtQoKWHQh0I0MsJxcKrBQVKAJ3fea6+raXlISVY3NDMFG/zSKkdkNouQvUXQtSCHBbOFupHMBw8imM30lbhq3g==, + } peerDependencies: - '@opentelemetry/api': ^1.9.0 - - '@langfuse/openai@4.6.1': - resolution: {integrity: sha512-U07zUPkivaKi8S8a3oXDzheUhROI/A6RQLYWqGyvvbOodjPQDFLCeiHneCfaZjBss6n8CCrL8E6NSzqR1UlinQ==} - - '@langfuse/otel@4.6.1': - resolution: {integrity: sha512-ZUa+nV5und6IYK2b5w1vXoNzU/Hfpl1MJ2uu9Woyb74ZBQi36nBwo7SeX+NLvy+n/UzKcJMetOYrA5ywlXvnuA==} - engines: {node: '>=20'} + "@opentelemetry/api": ^1.9.0 + + "@langfuse/openai@4.6.1": + resolution: + { + integrity: sha512-U07zUPkivaKi8S8a3oXDzheUhROI/A6RQLYWqGyvvbOodjPQDFLCeiHneCfaZjBss6n8CCrL8E6NSzqR1UlinQ==, + } + + "@langfuse/otel@4.6.1": + resolution: + { + integrity: sha512-ZUa+nV5und6IYK2b5w1vXoNzU/Hfpl1MJ2uu9Woyb74ZBQi36nBwo7SeX+NLvy+n/UzKcJMetOYrA5ywlXvnuA==, + } + engines: { node: ">=20" } peerDependencies: - '@opentelemetry/api': ^1.9.0 - '@opentelemetry/core': ^2.0.1 - '@opentelemetry/exporter-trace-otlp-http': '>=0.202.0 <1.0.0' - '@opentelemetry/sdk-trace-base': ^2.0.1 - - '@langfuse/tracing@4.6.1': - resolution: {integrity: sha512-Ld1bPU6RxzifgGEDtN70Og8u2eL906jtnnEnt62BEOcML8UUiMgzwAKZDBbIjF2midnfac7Xnho3s546fcCDtQ==} - engines: {node: '>=20'} + "@opentelemetry/api": ^1.9.0 + "@opentelemetry/core": ^2.0.1 + "@opentelemetry/exporter-trace-otlp-http": ">=0.202.0 <1.0.0" + "@opentelemetry/sdk-trace-base": ^2.0.1 + + "@langfuse/tracing@4.6.1": + resolution: + { + integrity: sha512-Ld1bPU6RxzifgGEDtN70Og8u2eL906jtnnEnt62BEOcML8UUiMgzwAKZDBbIjF2midnfac7Xnho3s546fcCDtQ==, + } + engines: { node: ">=20" } peerDependencies: - '@opentelemetry/api': ^1.9.0 - - '@livekit/mutex@1.1.1': - resolution: {integrity: sha512-EsshAucklmpuUAfkABPxJNhzj9v2sG7JuzFDL4ML1oJQSV14sqrpTYnsaOudMAw9yOaW53NU3QQTlUQoRs4czw==} - - '@livekit/protocol@1.44.0': - resolution: {integrity: sha512-/vfhDUGcUKO8Q43r6i+5FrDhl5oZjm/X3U4x2Iciqvgn5C8qbj+57YPcWSJ1kyIZm5Cm6AV2nAPjMm3ETD/iyg==} - - '@mdx-js/mdx@3.0.1': - resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==} - - '@mdx-js/react@3.0.1': - resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} + "@opentelemetry/api": ^1.9.0 + + "@livekit/mutex@1.1.1": + resolution: + { + integrity: sha512-EsshAucklmpuUAfkABPxJNhzj9v2sG7JuzFDL4ML1oJQSV14sqrpTYnsaOudMAw9yOaW53NU3QQTlUQoRs4czw==, + } + + "@livekit/protocol@1.44.0": + resolution: + { + integrity: sha512-/vfhDUGcUKO8Q43r6i+5FrDhl5oZjm/X3U4x2Iciqvgn5C8qbj+57YPcWSJ1kyIZm5Cm6AV2nAPjMm3ETD/iyg==, + } + + "@mdx-js/react@3.0.1": + resolution: + { + integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==, + } peerDependencies: - '@types/react': '>=16' - react: '>=16' - - '@mediapipe/tasks-vision@0.10.17': - resolution: {integrity: sha512-CZWV/q6TTe8ta61cZXjfnnHsfWIdFhms03M9T7Cnd5y2mdpylJM0rF1qRq+wsQVRMLz1OYPVEBU9ph2Bx8cxrg==} - - '@mermaid-js/parser@0.3.0': - resolution: {integrity: sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==} - - '@modelcontextprotocol/sdk@1.13.2': - resolution: {integrity: sha512-Vx7qOcmoKkR3qhaQ9qf3GxiVKCEu+zfJddHv6x3dY/9P6+uIwJnmuAur5aB+4FDXf41rRrDnOEGkviX5oYZ67w==} - engines: {node: '>=18'} - - '@monogrid/gainmap-js@3.0.6': - resolution: {integrity: sha512-ireqJg7cw0tUn/JePDG8rAL7RyXgUKSDbjYdiygkrnye1WuKGLAWDBwF/ICwCwJ9iZBAF5caU8gSu+c34HLGdQ==} + "@types/react": ">=16" + react: ">=16" + "@mdx-js/mdx@3.1.1": + resolution: + { + integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==, + } + + "@mediapipe/tasks-vision@0.10.17": + resolution: + { + integrity: sha512-CZWV/q6TTe8ta61cZXjfnnHsfWIdFhms03M9T7Cnd5y2mdpylJM0rF1qRq+wsQVRMLz1OYPVEBU9ph2Bx8cxrg==, + } + + "@modelcontextprotocol/sdk@1.13.2": + resolution: + { + integrity: sha512-Vx7qOcmoKkR3qhaQ9qf3GxiVKCEu+zfJddHv6x3dY/9P6+uIwJnmuAur5aB+4FDXf41rRrDnOEGkviX5oYZ67w==, + } + engines: { node: ">=18" } + + "@monogrid/gainmap-js@3.0.6": + resolution: + { + integrity: sha512-ireqJg7cw0tUn/JePDG8rAL7RyXgUKSDbjYdiygkrnye1WuKGLAWDBwF/ICwCwJ9iZBAF5caU8gSu+c34HLGdQ==, + } peerDependencies: - three: '>= 0.159.0' - - '@napi-rs/simple-git-android-arm-eabi@0.1.19': - resolution: {integrity: sha512-XryEH/hadZ4Duk/HS/HC/cA1j0RHmqUGey3MsCf65ZS0VrWMqChXM/xlTPWuY5jfCc/rPubHaqI7DZlbexnX/g==} - engines: {node: '>= 10'} - cpu: [arm] - os: [android] - - '@napi-rs/simple-git-android-arm64@0.1.19': - resolution: {integrity: sha512-ZQ0cPvY6nV9p7zrR9ZPo7hQBkDAcY/CHj3BjYNhykeUCiSNCrhvwX+WEeg5on8M1j4d5jcI/cwVG2FslfiByUg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@napi-rs/simple-git-darwin-arm64@0.1.19': - resolution: {integrity: sha512-viZB5TYgjA1vH+QluhxZo0WKro3xBA+1xSzYx8mcxUMO5gnAoUMwXn0ZO/6Zy6pai+aGae+cj6XihGnrBRu3Pg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@napi-rs/simple-git-darwin-x64@0.1.19': - resolution: {integrity: sha512-6dNkzSNUV5X9rsVYQbpZLyJu4Gtkl2vNJ3abBXHX/Etk0ILG5ZasO3ncznIANZQpqcbn/QPHr49J2QYAXGoKJA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@napi-rs/simple-git-freebsd-x64@0.1.19': - resolution: {integrity: sha512-sB9krVIchzd20FjI2ZZ8FDsTSsXLBdnwJ6CpeVyrhXHnoszfcqxt49ocZHujAS9lMpXq7i2Nv1EXJmCy4KdhwA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@napi-rs/simple-git-linux-arm-gnueabihf@0.1.19': - resolution: {integrity: sha512-6HPn09lr9N1n5/XKfP8Np53g4fEXVxOFqNkS6rTH3Rm1lZHdazTRH62RggXLTguZwjcE+MvOLvoTIoR5kAS8+g==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@napi-rs/simple-git-linux-arm64-gnu@0.1.19': - resolution: {integrity: sha512-G0gISckt4cVDp3oh5Z6PV3GHJrJO6Z8bIS+9xA7vTtKdqB1i5y0n3cSFLlzQciLzhr+CajFD27doW4lEyErQ/Q==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@napi-rs/simple-git-linux-arm64-musl@0.1.19': - resolution: {integrity: sha512-OwTRF+H4IZYxmDFRi1IrLMfqbdIpvHeYbJl2X94NVsLVOY+3NUHvEzL3fYaVx5urBaMnIK0DD3wZLbcueWvxbA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@napi-rs/simple-git-linux-powerpc64le-gnu@0.1.19': - resolution: {integrity: sha512-p7zuNNVyzpRvkCt2RIGv9FX/WPcPbZ6/FRUgUTZkA2WU33mrbvNqSi4AOqCCl6mBvEd+EOw5NU4lS9ORRJvAEg==} - engines: {node: '>= 10'} - cpu: [powerpc64le] - os: [linux] - - '@napi-rs/simple-git-linux-s390x-gnu@0.1.19': - resolution: {integrity: sha512-6N2vwJUPLiak8GLrS0a3is0gSb0UwI2CHOOqtvQxPmv+JVI8kn3vKiUscsktdDb0wGEPeZ8PvZs0y8UWix7K4g==} - engines: {node: '>= 10'} - cpu: [s390x] - os: [linux] - - '@napi-rs/simple-git-linux-x64-gnu@0.1.19': - resolution: {integrity: sha512-61YfeO1J13WK7MalLgP3QlV6of2rWnVw1aqxWkAgy/lGxoOFSJ4Wid6ANVCEZk4tJpPX/XNeneqkUz5xpeb2Cw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@napi-rs/simple-git-linux-x64-musl@0.1.19': - resolution: {integrity: sha512-cCTWNpMJnN3PrUBItWcs3dQKCydsIasbrS3laMzq8k7OzF93Zrp2LWDTPlLCO9brbBVpBzy2Qk5Xg9uAfe/Ukw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@napi-rs/simple-git-win32-arm64-msvc@0.1.19': - resolution: {integrity: sha512-sWavb1BjeLKKBA+PbTsRSSzVNfb7V/dOpaJvkgR5d2kWFn/AHmCZHSSj/3nyZdYf0BdDC+DIvqk3daAEZ6QMVw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@napi-rs/simple-git-win32-x64-msvc@0.1.19': - resolution: {integrity: sha512-FmNuPoK4+qwaSCkp8lm3sJlrxk374enW+zCE5ZksXlZzj/9BDJAULJb5QUJ7o9Y8A/G+d8LkdQLPBE2Jaxe5XA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@napi-rs/simple-git@0.1.19': - resolution: {integrity: sha512-jMxvwzkKzd3cXo2EB9GM2ic0eYo2rP/BS6gJt6HnWbsDO1O8GSD4k7o2Cpr2YERtMpGF/MGcDfsfj2EbQPtrXw==} - engines: {node: '>= 10'} - - '@next/bundle-analyzer@15.1.4': - resolution: {integrity: sha512-W8X96jOW0U5VjLVAkFr1P37kH2f/Ma9zzwgX2o3Omft92pI0XHpFG8Xa9YUT3NlhRJCe4ZKznr1VxhSrFNA+BA==} - - '@next/env@13.5.6': - resolution: {integrity: sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==} - - '@next/env@15.2.8': - resolution: {integrity: sha512-TaEsAki14R7BlgywA05t2PFYfwZiNlGUHyIQHVyloXX3y+Dm0HUITe5YwTkjtuOQuDhuuLotNEad4VtnmE11Uw==} - - '@next/swc-darwin-arm64@15.2.5': - resolution: {integrity: sha512-4OimvVlFTbgzPdA0kh8A1ih6FN9pQkL4nPXGqemEYgk+e7eQhsst/p35siNNqA49eQA6bvKZ1ASsDtu9gtXuog==} - engines: {node: '>= 10'} + three: ">= 0.159.0" + + "@next/bundle-analyzer@16.1.6": + resolution: + { + integrity: sha512-ee2kagdTaeEWPlotgdTOqFHYcD3e2m2bbE3I9Rq2i6ABYi5OgopmtEUe8NM23viaYxLV2tDH/2nd5+qKoEr6cw==, + } + + "@next/env@13.5.6": + resolution: + { + integrity: sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==, + } + + "@next/env@16.1.6": + resolution: + { + integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==, + } + + "@next/swc-darwin-arm64@16.1.6": + resolution: + { + integrity: sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==, + } + engines: { node: ">= 10" } cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.2.5': - resolution: {integrity: sha512-ohzRaE9YbGt1ctE0um+UGYIDkkOxHV44kEcHzLqQigoRLaiMtZzGrA11AJh2Lu0lv51XeiY1ZkUvkThjkVNBMA==} - engines: {node: '>= 10'} + "@next/swc-darwin-x64@16.1.6": + resolution: + { + integrity: sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==, + } + engines: { node: ">= 10" } cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.5': - resolution: {integrity: sha512-FMSdxSUt5bVXqqOoZCc/Seg4LQep9w/fXTazr/EkpXW2Eu4IFI9FD7zBDlID8TJIybmvKk7mhd9s+2XWxz4flA==} - engines: {node: '>= 10'} + "@next/swc-linux-arm64-gnu@16.1.6": + resolution: + { + integrity: sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==, + } + engines: { node: ">= 10" } cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.5': - resolution: {integrity: sha512-4ZNKmuEiW5hRKkGp2HWwZ+JrvK4DQLgf8YDaqtZyn7NYdl0cHfatvlnLFSWUayx9yFAUagIgRGRk8pFxS8Qniw==} - engines: {node: '>= 10'} + "@next/swc-linux-arm64-musl@16.1.6": + resolution: + { + integrity: sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==, + } + engines: { node: ">= 10" } cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.5': - resolution: {integrity: sha512-bE6lHQ9GXIf3gCDE53u2pTl99RPZW5V1GLHSRMJ5l/oB/MT+cohu9uwnCK7QUph2xIOu2a6+27kL0REa/kqwZw==} - engines: {node: '>= 10'} + "@next/swc-linux-x64-gnu@16.1.6": + resolution: + { + integrity: sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==, + } + engines: { node: ">= 10" } cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.5': - resolution: {integrity: sha512-y7EeQuSkQbTAkCEQnJXm1asRUuGSWAchGJ3c+Qtxh8LVjXleZast8Mn/rL7tZOm7o35QeIpIcid6ufG7EVTTcA==} - engines: {node: '>= 10'} + "@next/swc-linux-x64-musl@16.1.6": + resolution: + { + integrity: sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==, + } + engines: { node: ">= 10" } cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.2.5': - resolution: {integrity: sha512-gQMz0yA8/dskZM2Xyiq2FRShxSrsJNha40Ob/M2n2+JGRrZ0JwTVjLdvtN6vCxuq4ByhOd4a9qEf60hApNR2gQ==} - engines: {node: '>= 10'} + "@next/swc-win32-arm64-msvc@16.1.6": + resolution: + { + integrity: sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==, + } + engines: { node: ">= 10" } cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.5': - resolution: {integrity: sha512-tBDNVUcI7U03+3oMvJ11zrtVin5p0NctiuKmTGyaTIEAVj9Q77xukLXGXRnWxKRIIdFG4OTA2rUVGZDYOwgmAA==} - engines: {node: '>= 10'} + "@next/swc-win32-x64-msvc@16.1.6": + resolution: + { + integrity: sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==, + } + engines: { node: ">= 10" } cpu: [x64] os: [win32] - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@oozcitak/dom@1.15.10': - resolution: {integrity: sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==} - engines: {node: '>=8.0'} - - '@oozcitak/infra@1.0.8': - resolution: {integrity: sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==} - engines: {node: '>=6.0'} - - '@oozcitak/url@1.0.4': - resolution: {integrity: sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==} - engines: {node: '>=8.0'} - - '@oozcitak/util@8.3.8': - resolution: {integrity: sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==} - engines: {node: '>=8.0'} - - '@opentelemetry/api-logs@0.203.0': - resolution: {integrity: sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/context-async-hooks@2.0.1': - resolution: {integrity: sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw==} - engines: {node: ^18.19.0 || >=20.6.0} + "@nodelib/fs.scandir@2.1.5": + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: ">= 8" } + + "@nodelib/fs.stat@2.0.5": + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: ">= 8" } + + "@nodelib/fs.walk@1.2.8": + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: ">= 8" } + + "@oozcitak/dom@1.15.10": + resolution: + { + integrity: sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==, + } + engines: { node: ">=8.0" } + + "@oozcitak/infra@1.0.8": + resolution: + { + integrity: sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==, + } + engines: { node: ">=6.0" } + + "@oozcitak/url@1.0.4": + resolution: + { + integrity: sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==, + } + engines: { node: ">=8.0" } + + "@oozcitak/util@8.3.8": + resolution: + { + integrity: sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==, + } + engines: { node: ">=8.0" } + + "@opentelemetry/api-logs@0.212.0": + resolution: + { + integrity: sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg==, + } + engines: { node: ">=8.0.0" } + + "@opentelemetry/api@1.9.0": + resolution: + { + integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==, + } + engines: { node: ">=8.0.0" } + + "@opentelemetry/context-async-hooks@2.0.1": + resolution: + { + integrity: sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw==, + } + engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/core@2.0.1': - resolution: {integrity: sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==} - engines: {node: ^18.19.0 || >=20.6.0} + "@opentelemetry/api": ">=1.0.0 <1.10.0" + + "@opentelemetry/core@2.0.1": + resolution: + { + integrity: sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==, + } + engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/exporter-trace-otlp-http@0.203.0': - resolution: {integrity: sha512-ZDiaswNYo0yq/cy1bBLJFe691izEJ6IgNmkjm4C6kE9ub/OMQqDXORx2D2j8fzTBTxONyzusbaZlqtfmyqURPw==} - engines: {node: ^18.19.0 || >=20.6.0} + "@opentelemetry/api": ">=1.0.0 <1.10.0" + + "@opentelemetry/core@2.5.1": + resolution: + { + integrity: sha512-Dwlc+3HAZqpgTYq0MUyZABjFkcrKTePwuiFVLjahGD8cx3enqihmpAmdgNFO1R4m/sIe5afjJrA25Prqy4NXlA==, + } + engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/otlp-exporter-base@0.203.0': - resolution: {integrity: sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==} - engines: {node: ^18.19.0 || >=20.6.0} + "@opentelemetry/api": ">=1.0.0 <1.10.0" + + "@opentelemetry/exporter-trace-otlp-http@0.212.0": + resolution: + { + integrity: sha512-v/0wMozNoiEPRolzC4YoPo4rAT0q8r7aqdnRw3Nu7IDN0CGFzNQazkfAlBJ6N5y0FYJkban7Aw5WnN73//6YlA==, + } + engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/otlp-transformer@0.203.0': - resolution: {integrity: sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==} - engines: {node: ^18.19.0 || >=20.6.0} + "@opentelemetry/api": ^1.3.0 + + "@opentelemetry/otlp-exporter-base@0.212.0": + resolution: + { + integrity: sha512-HoMv5pQlzbuxiMS0hN7oiUtg8RsJR5T7EhZccumIWxYfNo/f4wFc7LPDfFK6oHdG2JF/+qTocfqIHoom+7kLpw==, + } + engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/resources@2.0.1': - resolution: {integrity: sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==} - engines: {node: ^18.19.0 || >=20.6.0} + "@opentelemetry/api": ^1.3.0 + + "@opentelemetry/otlp-transformer@0.212.0": + resolution: + { + integrity: sha512-bj7zYFOg6Db7NUwsRZQ/WoVXpAf41WY2gsd3kShSfdpZQDRKHWJiRZIg7A8HvWsf97wb05rMFzPbmSHyjEl9tw==, + } + engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - - '@opentelemetry/sdk-logs@0.203.0': - resolution: {integrity: sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==} - engines: {node: ^18.19.0 || >=20.6.0} + "@opentelemetry/api": ^1.3.0 + + "@opentelemetry/resources@2.0.1": + resolution: + { + integrity: sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==, + } + engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.10.0' - - '@opentelemetry/sdk-metrics@2.0.1': - resolution: {integrity: sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==} - engines: {node: ^18.19.0 || >=20.6.0} + "@opentelemetry/api": ">=1.3.0 <1.10.0" + + "@opentelemetry/resources@2.5.1": + resolution: + { + integrity: sha512-BViBCdE/GuXRlp9k7nS1w6wJvY5fnFX5XvuEtWsTAOQFIO89Eru7lGW3WbfbxtCuZ/GbrJfAziXG0w0dpxL7eQ==, + } + engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - '@opentelemetry/api': '>=1.9.0 <1.10.0' - - '@opentelemetry/sdk-trace-base@2.0.1': - resolution: {integrity: sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==} - engines: {node: ^18.19.0 || >=20.6.0} + "@opentelemetry/api": ">=1.3.0 <1.10.0" + + "@opentelemetry/sdk-logs@0.212.0": + resolution: + { + integrity: sha512-qglb5cqTf0mOC1sDdZ7nfrPjgmAqs2OxkzOPIf2+Rqx8yKBK0pS7wRtB1xH30rqahBIut9QJDbDePyvtyqvH/Q==, + } + engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - - '@opentelemetry/sdk-trace-node@2.0.1': - resolution: {integrity: sha512-UhdbPF19pMpBtCWYP5lHbTogLWx9N0EBxtdagvkn5YtsAnCBZzL7SjktG+ZmupRgifsHMjwUaCCaVmqGfSADmA==} - engines: {node: ^18.19.0 || >=20.6.0} + "@opentelemetry/api": ">=1.4.0 <1.10.0" + + "@opentelemetry/sdk-metrics@2.5.1": + resolution: + { + integrity: sha512-RKMn3QKi8nE71ULUo0g/MBvq1N4icEBo7cQSKnL3URZT16/YH3nSVgWegOjwx7FRBTrjOIkMJkCUn/ZFIEfn4A==, + } + engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/semantic-conventions@1.36.0': - resolution: {integrity: sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ==} - engines: {node: '>=14'} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@polka/url@1.0.0-next.25': - resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} - - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.4': - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/inquire@1.1.0': - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.0': - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - - '@puppeteer/browsers@2.10.10': - resolution: {integrity: sha512-3ZG500+ZeLql8rE0hjfhkycJjDj0pI/btEh3L9IkWUYcOrgP0xCNRq3HbtbqOPbvDhFaAWD88pDFtlLv8ns8gA==} - engines: {node: '>=18'} + "@opentelemetry/api": ">=1.9.0 <1.10.0" + + "@opentelemetry/sdk-trace-base@2.0.1": + resolution: + { + integrity: sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==, + } + engines: { node: ^18.19.0 || >=20.6.0 } + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + + "@opentelemetry/sdk-trace-base@2.5.1": + resolution: + { + integrity: sha512-iZH3Gw8cxQn0gjpOjJMmKLd9GIaNh/E3v3ST67vyzLSxHBs14HsG4dy7jMYyC5WXGdBVEcM7U/XTF5hCQxjDMw==, + } + engines: { node: ^18.19.0 || >=20.6.0 } + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + + "@opentelemetry/sdk-trace-node@2.0.1": + resolution: + { + integrity: sha512-UhdbPF19pMpBtCWYP5lHbTogLWx9N0EBxtdagvkn5YtsAnCBZzL7SjktG+ZmupRgifsHMjwUaCCaVmqGfSADmA==, + } + engines: { node: ^18.19.0 || >=20.6.0 } + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + + "@opentelemetry/semantic-conventions@1.36.0": + resolution: + { + integrity: sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ==, + } + engines: { node: ">=14" } + + "@opentelemetry/semantic-conventions@1.39.0": + resolution: + { + integrity: sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==, + } + engines: { node: ">=14" } + + "@orama/orama@3.1.18": + resolution: + { + integrity: sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA==, + } + engines: { node: ">= 20.0.0" } + + "@polka/url@1.0.0-next.29": + resolution: + { + integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==, + } + + "@protobufjs/aspromise@1.1.2": + resolution: + { + integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==, + } + + "@protobufjs/base64@1.1.2": + resolution: + { + integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==, + } + + "@protobufjs/codegen@2.0.4": + resolution: + { + integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==, + } + + "@protobufjs/eventemitter@1.1.0": + resolution: + { + integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==, + } + + "@protobufjs/fetch@1.1.0": + resolution: + { + integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==, + } + + "@protobufjs/float@1.0.2": + resolution: + { + integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==, + } + + "@protobufjs/inquire@1.1.0": + resolution: + { + integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==, + } + + "@protobufjs/path@1.1.2": + resolution: + { + integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==, + } + + "@protobufjs/pool@1.1.0": + resolution: + { + integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==, + } + + "@protobufjs/utf8@1.1.0": + resolution: + { + integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==, + } + + "@puppeteer/browsers@2.10.10": + resolution: + { + integrity: sha512-3ZG500+ZeLql8rE0hjfhkycJjDj0pI/btEh3L9IkWUYcOrgP0xCNRq3HbtbqOPbvDhFaAWD88pDFtlLv8ns8gA==, + } + engines: { node: ">=18" } hasBin: true - '@radix-ui/number@1.1.0': - resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} - - '@radix-ui/number@1.1.1': - resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} - - '@radix-ui/primitive@1.1.1': - resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} - - '@radix-ui/primitive@1.1.2': - resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} + "@radix-ui/number@1.1.0": + resolution: + { + integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==, + } + + "@radix-ui/number@1.1.1": + resolution: + { + integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==, + } + + "@radix-ui/primitive@1.1.1": + resolution: + { + integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==, + } + + "@radix-ui/primitive@1.1.2": + resolution: + { + integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==, + } + + "@radix-ui/primitive@1.1.3": + resolution: + { + integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==, + } + + "@radix-ui/react-accordion@1.2.12": + resolution: + { + integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==, + } + peerDependencies: + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true - '@radix-ui/primitive@1.1.3': - resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + "@radix-ui/react-accordion@1.2.3": + resolution: + { + integrity: sha512-RIQ15mrcvqIkDARJeERSuXSry2N8uYnxkdDetpfmalT/+0ntOXLkFOsh9iwlAsCv+qcmhZjbdJogIm6WBa6c4A==, + } + peerDependencies: + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true - '@radix-ui/react-accordion@1.2.3': - resolution: {integrity: sha512-RIQ15mrcvqIkDARJeERSuXSry2N8uYnxkdDetpfmalT/+0ntOXLkFOsh9iwlAsCv+qcmhZjbdJogIm6WBa6c4A==} + "@radix-ui/react-arrow@1.1.1": + resolution: + { + integrity: sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-arrow@1.1.1': - resolution: {integrity: sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==} + "@radix-ui/react-arrow@1.1.2": + resolution: + { + integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-arrow@1.1.2': - resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==} + "@radix-ui/react-arrow@1.1.7": + resolution: + { + integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-arrow@1.1.7': - resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + "@radix-ui/react-avatar@1.1.2": + resolution: + { + integrity: sha512-GaC7bXQZ5VgZvVvsJ5mu/AEbjYLnhhkoidOboC50Z6FFlLA03wG2ianUoH+zgDQ31/9gCF59bE4+2bBgTyMiig==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-avatar@1.1.2': - resolution: {integrity: sha512-GaC7bXQZ5VgZvVvsJ5mu/AEbjYLnhhkoidOboC50Z6FFlLA03wG2ianUoH+zgDQ31/9gCF59bE4+2bBgTyMiig==} + "@radix-ui/react-avatar@1.1.3": + resolution: + { + integrity: sha512-Paen00T4P8L8gd9bNsRMw7Cbaz85oxiv+hzomsRZgFm2byltPFDtfcoqlWJ8GyZlIBWgLssJlzLCnKU0G0302g==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-avatar@1.1.3': - resolution: {integrity: sha512-Paen00T4P8L8gd9bNsRMw7Cbaz85oxiv+hzomsRZgFm2byltPFDtfcoqlWJ8GyZlIBWgLssJlzLCnKU0G0302g==} + "@radix-ui/react-checkbox@1.1.3": + resolution: + { + integrity: sha512-HD7/ocp8f1B3e6OHygH0n7ZKjONkhciy1Nh0yuBgObqThc3oyx+vuMfFHKAknXRHHWVE9XvXStxJFyjUmB8PIw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-checkbox@1.1.3': - resolution: {integrity: sha512-HD7/ocp8f1B3e6OHygH0n7ZKjONkhciy1Nh0yuBgObqThc3oyx+vuMfFHKAknXRHHWVE9XvXStxJFyjUmB8PIw==} + "@radix-ui/react-collapsible@1.1.11": + resolution: + { + integrity: sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-collapsible@1.1.11': - resolution: {integrity: sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==} + "@radix-ui/react-collapsible@1.1.12": + resolution: + { + integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-collapsible@1.1.3': - resolution: {integrity: sha512-jFSerheto1X03MUC0g6R7LedNW9EEGWdg9W1+MlpkMLwGkgkbUXLPBH/KIuWKXUoeYRVY11llqbTBDzuLg7qrw==} + "@radix-ui/react-collapsible@1.1.3": + resolution: + { + integrity: sha512-jFSerheto1X03MUC0g6R7LedNW9EEGWdg9W1+MlpkMLwGkgkbUXLPBH/KIuWKXUoeYRVY11llqbTBDzuLg7qrw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-collection@1.1.2': - resolution: {integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==} + "@radix-ui/react-collection@1.1.2": + resolution: + { + integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-collection@1.1.7': - resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + "@radix-ui/react-collection@1.1.7": + resolution: + { + integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": + optional: true + + "@radix-ui/react-compose-refs@1.1.1": + resolution: + { + integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==, + } + peerDependencies: + "@types/react": ^19.2.14 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": optional: true - '@radix-ui/react-compose-refs@1.1.1': - resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} + "@radix-ui/react-compose-refs@1.1.2": + resolution: + { + integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + "@radix-ui/react-context@1.1.1": + resolution: + { + integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-context@1.1.1': - resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} + "@radix-ui/react-context@1.1.2": + resolution: + { + integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-context@1.1.2': - resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + "@radix-ui/react-dialog@1.1.15": + resolution: + { + integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": + optional: true + "@types/react-dom": optional: true - '@radix-ui/react-dialog@1.1.6': - resolution: {integrity: sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==} + "@radix-ui/react-dialog@1.1.6": + resolution: + { + integrity: sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-direction@1.1.0': - resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} + "@radix-ui/react-direction@1.1.0": + resolution: + { + integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-direction@1.1.1': - resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + "@radix-ui/react-direction@1.1.1": + resolution: + { + integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-dismissable-layer@1.1.10': - resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==} + "@radix-ui/react-dismissable-layer@1.1.10": + resolution: + { + integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-dismissable-layer@1.1.11': - resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + "@radix-ui/react-dismissable-layer@1.1.11": + resolution: + { + integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-dismissable-layer@1.1.3': - resolution: {integrity: sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==} + "@radix-ui/react-dismissable-layer@1.1.3": + resolution: + { + integrity: sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-dismissable-layer@1.1.5': - resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==} + "@radix-ui/react-dismissable-layer@1.1.5": + resolution: + { + integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-dropdown-menu@2.1.6': - resolution: {integrity: sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA==} + "@radix-ui/react-dropdown-menu@2.1.6": + resolution: + { + integrity: sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-focus-guards@1.1.1': - resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} + "@radix-ui/react-focus-guards@1.1.1": + resolution: + { + integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-focus-guards@1.1.2': - resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} + "@radix-ui/react-focus-guards@1.1.2": + resolution: + { + integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-focus-guards@1.1.3': - resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + "@radix-ui/react-focus-guards@1.1.3": + resolution: + { + integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-focus-scope@1.1.2': - resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==} + "@radix-ui/react-focus-scope@1.1.2": + resolution: + { + integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-focus-scope@1.1.7': - resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + "@radix-ui/react-focus-scope@1.1.7": + resolution: + { + integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-hover-card@1.1.6': - resolution: {integrity: sha512-E4ozl35jq0VRlrdc4dhHrNSV0JqBb4Jy73WAhBEK7JoYnQ83ED5r0Rb/XdVKw89ReAJN38N492BAPBZQ57VmqQ==} + "@radix-ui/react-hover-card@1.1.6": + resolution: + { + integrity: sha512-E4ozl35jq0VRlrdc4dhHrNSV0JqBb4Jy73WAhBEK7JoYnQ83ED5r0Rb/XdVKw89ReAJN38N492BAPBZQ57VmqQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-id@1.1.0": + resolution: + { + integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==, + } + peerDependencies: + "@types/react": ^19.2.14 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": optional: true - '@types/react-dom': + + "@radix-ui/react-id@1.1.1": + resolution: + { + integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==, + } + peerDependencies: + "@types/react": ^19.2.14 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": optional: true - '@radix-ui/react-id@1.1.0': - resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + "@radix-ui/react-label@2.1.2": + resolution: + { + integrity: sha512-zo1uGMTaNlHehDyFQcDZXRJhUPDuukcnHz0/jnrup0JA6qL+AFpAnty+7VKa9esuU5xTblAZzTGYJKSKaBxBhw==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": + optional: true + "@types/react-dom": optional: true - '@radix-ui/react-id@1.1.1': - resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + "@radix-ui/react-menu@2.1.6": + resolution: + { + integrity: sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": + optional: true + "@types/react-dom": optional: true - '@radix-ui/react-label@2.1.2': - resolution: {integrity: sha512-zo1uGMTaNlHehDyFQcDZXRJhUPDuukcnHz0/jnrup0JA6qL+AFpAnty+7VKa9esuU5xTblAZzTGYJKSKaBxBhw==} + "@radix-ui/react-navigation-menu@1.2.14": + resolution: + { + integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-menu@2.1.6': - resolution: {integrity: sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==} + "@radix-ui/react-popover@1.1.15": + resolution: + { + integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-popover@1.1.15': - resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} + "@radix-ui/react-popover@1.1.6": + resolution: + { + integrity: sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-popover@1.1.6': - resolution: {integrity: sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==} + "@radix-ui/react-popper@1.2.1": + resolution: + { + integrity: sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-popper@1.2.1': - resolution: {integrity: sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==} + "@radix-ui/react-popper@1.2.2": + resolution: + { + integrity: sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-popper@1.2.2': - resolution: {integrity: sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==} + "@radix-ui/react-popper@1.2.7": + resolution: + { + integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-popper@1.2.7': - resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==} + "@radix-ui/react-popper@1.2.8": + resolution: + { + integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-popper@1.2.8': - resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + "@radix-ui/react-portal@1.1.3": + resolution: + { + integrity: sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-portal@1.1.3': - resolution: {integrity: sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==} + "@radix-ui/react-portal@1.1.4": + resolution: + { + integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-portal@1.1.4': - resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==} + "@radix-ui/react-portal@1.1.9": + resolution: + { + integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-portal@1.1.9': - resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + "@radix-ui/react-presence@1.1.2": + resolution: + { + integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-presence@1.1.2': - resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==} + "@radix-ui/react-presence@1.1.4": + resolution: + { + integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-presence@1.1.4': - resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} + "@radix-ui/react-presence@1.1.5": + resolution: + { + integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-presence@1.1.5': - resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + "@radix-ui/react-primitive@2.0.1": + resolution: + { + integrity: sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-primitive@2.0.1': - resolution: {integrity: sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==} + "@radix-ui/react-primitive@2.0.2": + resolution: + { + integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-primitive@2.0.2': - resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} + "@radix-ui/react-primitive@2.1.3": + resolution: + { + integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + "@radix-ui/react-roving-focus@1.1.11": + resolution: + { + integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-roving-focus@1.1.11': - resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + "@radix-ui/react-roving-focus@1.1.2": + resolution: + { + integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-roving-focus@1.1.2': - resolution: {integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==} + "@radix-ui/react-scroll-area@1.2.10": + resolution: + { + integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-scroll-area@1.2.2': - resolution: {integrity: sha512-EFI1N/S3YxZEW/lJ/H1jY3njlvTd8tBmgKEn4GHi51+aMm94i6NmAJstsm5cu3yJwYqYc93gpCPm21FeAbFk6g==} + "@radix-ui/react-scroll-area@1.2.2": + resolution: + { + integrity: sha512-EFI1N/S3YxZEW/lJ/H1jY3njlvTd8tBmgKEn4GHi51+aMm94i6NmAJstsm5cu3yJwYqYc93gpCPm21FeAbFk6g==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-scroll-area@1.2.9': - resolution: {integrity: sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==} + "@radix-ui/react-scroll-area@1.2.9": + resolution: + { + integrity: sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-select@2.2.5': - resolution: {integrity: sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==} + "@radix-ui/react-select@2.2.5": + resolution: + { + integrity: sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-separator@1.1.2': - resolution: {integrity: sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==} + "@radix-ui/react-separator@1.1.2": + resolution: + { + integrity: sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": + optional: true + "@types/react-dom": optional: true - '@types/react-dom': + + "@radix-ui/react-slot@1.1.1": + resolution: + { + integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==, + } + peerDependencies: + "@types/react": ^19.2.14 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": optional: true - '@radix-ui/react-slot@1.1.1': - resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} + "@radix-ui/react-slot@1.1.2": + resolution: + { + integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-slot@1.1.2': - resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} + "@radix-ui/react-slot@1.2.3": + resolution: + { + integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-slot@1.2.3': - resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + "@radix-ui/react-slot@1.2.4": + resolution: + { + integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-switch@1.2.6': - resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} + "@radix-ui/react-switch@1.2.6": + resolution: + { + integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-tabs@1.1.13': - resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} + "@radix-ui/react-tabs@1.1.13": + resolution: + { + integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-tabs@1.1.3': - resolution: {integrity: sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==} + "@radix-ui/react-tabs@1.1.3": + resolution: + { + integrity: sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-tooltip@1.1.6': - resolution: {integrity: sha512-TLB5D8QLExS1uDn7+wH/bjEmRurNMTzNrtq7IjaS4kjion9NtzsTGkvR5+i7yc9q01Pi2KMM2cN3f8UG4IvvXA==} + "@radix-ui/react-tooltip@1.1.6": + resolution: + { + integrity: sha512-TLB5D8QLExS1uDn7+wH/bjEmRurNMTzNrtq7IjaS4kjion9NtzsTGkvR5+i7yc9q01Pi2KMM2cN3f8UG4IvvXA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-tooltip@1.1.8': - resolution: {integrity: sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==} + "@radix-ui/react-tooltip@1.1.8": + resolution: + { + integrity: sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-use-callback-ref@1.1.0': - resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + "@radix-ui/react-use-callback-ref@1.1.0": + resolution: + { + integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-callback-ref@1.1.1': - resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + "@radix-ui/react-use-callback-ref@1.1.1": + resolution: + { + integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-controllable-state@1.1.0': - resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + "@radix-ui/react-use-controllable-state@1.1.0": + resolution: + { + integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-controllable-state@1.2.2': - resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + "@radix-ui/react-use-controllable-state@1.2.2": + resolution: + { + integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-effect-event@0.0.2': - resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + "@radix-ui/react-use-effect-event@0.0.2": + resolution: + { + integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-escape-keydown@1.1.0': - resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} + "@radix-ui/react-use-escape-keydown@1.1.0": + resolution: + { + integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-escape-keydown@1.1.1': - resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + "@radix-ui/react-use-escape-keydown@1.1.1": + resolution: + { + integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-layout-effect@1.1.0': - resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + "@radix-ui/react-use-layout-effect@1.1.0": + resolution: + { + integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-layout-effect@1.1.1': - resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + "@radix-ui/react-use-layout-effect@1.1.1": + resolution: + { + integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-previous@1.1.0': - resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==} + "@radix-ui/react-use-previous@1.1.0": + resolution: + { + integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-previous@1.1.1': - resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + "@radix-ui/react-use-previous@1.1.1": + resolution: + { + integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-rect@1.1.0': - resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} + "@radix-ui/react-use-rect@1.1.0": + resolution: + { + integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-rect@1.1.1': - resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + "@radix-ui/react-use-rect@1.1.1": + resolution: + { + integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-size@1.1.0': - resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} + "@radix-ui/react-use-size@1.1.0": + resolution: + { + integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-size@1.1.1': - resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + "@radix-ui/react-use-size@1.1.1": + resolution: + { + integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==, + } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-visually-hidden@1.1.1': - resolution: {integrity: sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==} + "@radix-ui/react-visually-hidden@1.1.1": + resolution: + { + integrity: sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-visually-hidden@1.1.2': - resolution: {integrity: sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==} + "@radix-ui/react-visually-hidden@1.1.2": + resolution: + { + integrity: sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-visually-hidden@1.2.3': - resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + "@radix-ui/react-visually-hidden@1.2.3": + resolution: + { + integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.4 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/rect@1.1.0': - resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - - '@radix-ui/rect@1.1.1': - resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - - '@react-aria/focus@3.18.3': - resolution: {integrity: sha512-WKUElg+5zS0D3xlVn8MntNnkzJql2J6MuzAMP8Sv5WTgFDse/XGR842dsxPTIyKKdrWVCRegCuwa4m3n/GzgJw==} + "@radix-ui/rect@1.1.0": + resolution: + { + integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==, + } + + "@radix-ui/rect@1.1.1": + resolution: + { + integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==, + } + + "@react-aria/focus@3.18.3": + resolution: + { + integrity: sha512-WKUElg+5zS0D3xlVn8MntNnkzJql2J6MuzAMP8Sv5WTgFDse/XGR842dsxPTIyKKdrWVCRegCuwa4m3n/GzgJw==, + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/interactions@3.22.3': - resolution: {integrity: sha512-RRUb/aG+P0IKTIWikY/SylB6bIbLZeztnZY2vbe7RAG5MgVaCgn5HQ45SI15GlTmhsFG8CnF6slJsUFJiNHpbQ==} + "@react-aria/interactions@3.22.3": + resolution: + { + integrity: sha512-RRUb/aG+P0IKTIWikY/SylB6bIbLZeztnZY2vbe7RAG5MgVaCgn5HQ45SI15GlTmhsFG8CnF6slJsUFJiNHpbQ==, + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/ssr@3.9.6': - resolution: {integrity: sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA==} - engines: {node: '>= 12'} + "@react-aria/ssr@3.9.6": + resolution: + { + integrity: sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA==, + } + engines: { node: ">= 12" } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/utils@3.25.3': - resolution: {integrity: sha512-PR5H/2vaD8fSq0H/UB9inNbc8KDcVmW6fYAfSWkkn+OAdhTTMVKqXXrZuZBWyFfSD5Ze7VN6acr4hrOQm2bmrA==} + "@react-aria/utils@3.25.3": + resolution: + { + integrity: sha512-PR5H/2vaD8fSq0H/UB9inNbc8KDcVmW6fYAfSWkkn+OAdhTTMVKqXXrZuZBWyFfSD5Ze7VN6acr4hrOQm2bmrA==, + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-spring/animated@9.7.5': - resolution: {integrity: sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==} + "@react-spring/animated@9.7.5": + resolution: + { + integrity: sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==, + } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@react-spring/core@9.7.5': - resolution: {integrity: sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==} + "@react-spring/core@9.7.5": + resolution: + { + integrity: sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==, + } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@react-spring/rafz@9.7.5': - resolution: {integrity: sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==} - - '@react-spring/shared@9.7.5': - resolution: {integrity: sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==} + "@react-spring/rafz@9.7.5": + resolution: + { + integrity: sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==, + } + + "@react-spring/shared@9.7.5": + resolution: + { + integrity: sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==, + } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@react-spring/three@9.7.5': - resolution: {integrity: sha512-RxIsCoQfUqOS3POmhVHa1wdWS0wyHAUway73uRLp3GAL5U2iYVNdnzQsep6M2NZ994BlW8TcKuMtQHUqOsy6WA==} + "@react-spring/three@9.7.5": + resolution: + { + integrity: sha512-RxIsCoQfUqOS3POmhVHa1wdWS0wyHAUway73uRLp3GAL5U2iYVNdnzQsep6M2NZ994BlW8TcKuMtQHUqOsy6WA==, + } peerDependencies: - '@react-three/fiber': '>=6.0' + "@react-three/fiber": ">=6.0" react: ^16.8.0 || ^17.0.0 || ^18.0.0 - three: '>=0.126' - - '@react-spring/types@9.7.5': - resolution: {integrity: sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==} - - '@react-stately/utils@3.10.4': - resolution: {integrity: sha512-gBEQEIMRh5f60KCm7QKQ2WfvhB2gLUr9b72sqUdIZ2EG+xuPgaIlCBeSicvjmjBvYZwOjoOEnmIkcx2GHp/HWw==} + three: ">=0.126" + + "@react-spring/types@9.7.5": + resolution: + { + integrity: sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==, + } + + "@react-stately/utils@3.10.4": + resolution: + { + integrity: sha512-gBEQEIMRh5f60KCm7QKQ2WfvhB2gLUr9b72sqUdIZ2EG+xuPgaIlCBeSicvjmjBvYZwOjoOEnmIkcx2GHp/HWw==, + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-three/drei@9.120.4': - resolution: {integrity: sha512-keO7gHudafooXZxqukzPYIvhkBLL+PsnteuUPcHE3WZ5Hq1tC78AlY0kvm4NkC0w6tfsxpWl1yAYbUcnSPSmGg==} + "@react-three/drei@9.120.4": + resolution: + { + integrity: sha512-keO7gHudafooXZxqukzPYIvhkBLL+PsnteuUPcHE3WZ5Hq1tC78AlY0kvm4NkC0w6tfsxpWl1yAYbUcnSPSmGg==, + } peerDependencies: - '@react-three/fiber': ^8 || ^9.0.0-0 + "@react-three/fiber": ^8 || ^9.0.0-0 react: ^18 react-dom: ^18 - three: '>=0.137' + three: ">=0.137" peerDependenciesMeta: react-dom: optional: true - '@react-three/fiber@8.17.10': - resolution: {integrity: sha512-S6bqa4DqUooEkInYv/W+Jklv2zjSYCXAhm6qKpAQyOXhTEt5gBXnA7W6aoJ0bjmp9pAeaSj/AZUoz1HCSof/uA==} + "@react-three/fiber@8.17.10": + resolution: + { + integrity: sha512-S6bqa4DqUooEkInYv/W+Jklv2zjSYCXAhm6qKpAQyOXhTEt5gBXnA7W6aoJ0bjmp9pAeaSj/AZUoz1HCSof/uA==, + } peerDependencies: - expo: '>=43.0' - expo-asset: '>=8.4' - expo-file-system: '>=11.0' - expo-gl: '>=11.0' - react: '>=18.0' - react-dom: '>=18.0' - react-native: '>=0.64' - three: '>=0.133' + expo: ">=43.0" + expo-asset: ">=8.4" + expo-file-system: ">=11.0" + expo-gl: ">=11.0" + react: ">=18.0" + react-dom: ">=18.0" + react-native: ">=0.64" + three: ">=0.133" peerDependenciesMeta: expo: optional: true @@ -2115,42 +3300,66 @@ packages: react-native: optional: true - '@react-types/shared@3.25.0': - resolution: {integrity: sha512-OZSyhzU6vTdW3eV/mz5i6hQwQUhkRs7xwY2d1aqPvTdMe0+2cY7Fwp45PAiwYLEj73i9ro2FxF9qC4DvHGSCgQ==} + "@react-types/shared@3.25.0": + resolution: + { + integrity: sha512-OZSyhzU6vTdW3eV/mz5i6hQwQUhkRs7xwY2d1aqPvTdMe0+2cY7Fwp45PAiwYLEj73i9ro2FxF9qC4DvHGSCgQ==, + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@redis/bloom@1.2.0': - resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} + "@redis/bloom@1.2.0": + resolution: + { + integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==, + } peerDependencies: - '@redis/client': ^1.0.0 - - '@redis/client@1.6.1': - resolution: {integrity: sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==} - engines: {node: '>=14'} - - '@redis/graph@1.1.1': - resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==} + "@redis/client": ^1.0.0 + + "@redis/client@1.6.1": + resolution: + { + integrity: sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==, + } + engines: { node: ">=14" } + + "@redis/graph@1.1.1": + resolution: + { + integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==, + } peerDependencies: - '@redis/client': ^1.0.0 + "@redis/client": ^1.0.0 - '@redis/json@1.0.7': - resolution: {integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==} + "@redis/json@1.0.7": + resolution: + { + integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==, + } peerDependencies: - '@redis/client': ^1.0.0 + "@redis/client": ^1.0.0 - '@redis/search@1.2.0': - resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==} + "@redis/search@1.2.0": + resolution: + { + integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==, + } peerDependencies: - '@redis/client': ^1.0.0 + "@redis/client": ^1.0.0 - '@redis/time-series@1.1.0': - resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==} + "@redis/time-series@1.1.0": + resolution: + { + integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==, + } peerDependencies: - '@redis/client': ^1.0.0 + "@redis/client": ^1.0.0 - '@reduxjs/toolkit@2.11.2': - resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==} + "@reduxjs/toolkit@2.11.2": + resolution: + { + integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==, + } peerDependencies: react: ^16.9.0 || ^17.0.0 || ^18 || ^19 react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 @@ -2160,653 +3369,1414 @@ packages: react-redux: optional: true - '@resvg/resvg-wasm@2.4.0': - resolution: {integrity: sha512-C7c51Nn4yTxXFKvgh2txJFNweaVcfUPQxwEUFw4aWsCmfiBDJsTSwviIF8EcwjQ6k8bPyMWCl1vw4BdxE569Cg==} - engines: {node: '>= 10'} - - '@shikijs/core@1.22.0': - resolution: {integrity: sha512-S8sMe4q71TJAW+qG93s5VaiihujRK6rqDFqBnxqvga/3LvqHEnxqBIOPkt//IdXVtHkQWKu4nOQNk0uBGicU7Q==} - - '@shikijs/engine-javascript@1.22.0': - resolution: {integrity: sha512-AeEtF4Gcck2dwBqCFUKYfsCq0s+eEbCEbkUuFou53NZ0sTGnJnJ/05KHQFZxpii5HMXbocV9URYVowOP2wH5kw==} - - '@shikijs/engine-oniguruma@1.22.0': - resolution: {integrity: sha512-5iBVjhu/DYs1HB0BKsRRFipRrD7rqjxlWTj4F2Pf+nQSPqc3kcyqFFeZXnBMzDf0HdqaFVvhDRAGiYNvyLP+Mw==} - - '@shikijs/twoslash@1.22.0': - resolution: {integrity: sha512-r5F/x4GTh18XzhAREehgT9lCDFZlISBSIsOFZQQaqjiOLG81PIqJN1I1D6XY58UN9OJt+3mffuKq19K4FOJKJA==} - - '@shikijs/types@1.22.0': - resolution: {integrity: sha512-Fw/Nr7FGFhlQqHfxzZY8Cwtwk5E9nKDUgeLjZgt3UuhcM3yJR9xj3ZGNravZZok8XmEZMiYkSMTPlPkULB8nww==} - - '@shikijs/vscode-textmate@9.3.0': - resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} - - '@shuding/opentype.js@1.4.0-beta.0': - resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==} - engines: {node: '>= 8.0.0'} + "@resvg/resvg-wasm@2.4.0": + resolution: + { + integrity: sha512-C7c51Nn4yTxXFKvgh2txJFNweaVcfUPQxwEUFw4aWsCmfiBDJsTSwviIF8EcwjQ6k8bPyMWCl1vw4BdxE569Cg==, + } + engines: { node: ">= 10" } + + "@shikijs/core@3.22.0": + resolution: + { + integrity: sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==, + } + + "@shikijs/engine-javascript@3.22.0": + resolution: + { + integrity: sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==, + } + + "@shikijs/engine-oniguruma@3.22.0": + resolution: + { + integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==, + } + + "@shikijs/langs@3.22.0": + resolution: + { + integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==, + } + + "@shikijs/rehype@3.22.0": + resolution: + { + integrity: sha512-69b2VPc6XBy/VmAJlpBU5By+bJSBdE2nvgRCZXav7zujbrjXuT0F60DIrjKuutjPqNufuizE+E8tIZr2Yn8Z+g==, + } + + "@shikijs/themes@3.22.0": + resolution: + { + integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==, + } + + "@shikijs/transformers@3.22.0": + resolution: + { + integrity: sha512-E7eRV7mwDBjueLF6852n2oYeJYxBq3NSsDk+uyruYAXONv4U8holGmIrT+mPRJQ1J1SNOH6L8G19KRzmBawrFw==, + } + + "@shikijs/types@3.22.0": + resolution: + { + integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==, + } + + "@shikijs/vscode-textmate@10.0.2": + resolution: + { + integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==, + } + + "@shuding/opentype.js@1.4.0-beta.0": + resolution: + { + integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==, + } + engines: { node: ">= 8.0.0" } hasBin: true - '@smithy/abort-controller@4.2.5': - resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==} - engines: {node: '>=18.0.0'} - - '@smithy/config-resolver@4.4.3': - resolution: {integrity: sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==} - engines: {node: '>=18.0.0'} - - '@smithy/core@3.18.7': - resolution: {integrity: sha512-axG9MvKhMWOhFbvf5y2DuyTxQueO0dkedY9QC3mAfndLosRI/9LJv8WaL0mw7ubNhsO4IuXX9/9dYGPFvHrqlw==} - engines: {node: '>=18.0.0'} - - '@smithy/credential-provider-imds@4.2.5': - resolution: {integrity: sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==} - engines: {node: '>=18.0.0'} - - '@smithy/fetch-http-handler@5.3.6': - resolution: {integrity: sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-node@4.2.5': - resolution: {integrity: sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==} - engines: {node: '>=18.0.0'} - - '@smithy/invalid-dependency@4.2.5': - resolution: {integrity: sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==} - engines: {node: '>=18.0.0'} - - '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} - engines: {node: '>=14.0.0'} - - '@smithy/is-array-buffer@4.2.0': - resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-content-length@4.2.5': - resolution: {integrity: sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-endpoint@4.3.14': - resolution: {integrity: sha512-v0q4uTKgBM8dsqGjqsabZQyH85nFaTnFcgpWU1uydKFsdyyMzfvOkNum9G7VK+dOP01vUnoZxIeRiJ6uD0kjIg==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-retry@4.4.14': - resolution: {integrity: sha512-Z2DG8Ej7FyWG1UA+7HceINtSLzswUgs2np3sZX0YBBxCt+CXG4QUxv88ZDS3+2/1ldW7LqtSY1UO/6VQ1pND8Q==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-serde@4.2.6': - resolution: {integrity: sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-stack@4.2.5': - resolution: {integrity: sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==} - engines: {node: '>=18.0.0'} - - '@smithy/node-config-provider@4.3.5': - resolution: {integrity: sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==} - engines: {node: '>=18.0.0'} - - '@smithy/node-http-handler@4.4.5': - resolution: {integrity: sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==} - engines: {node: '>=18.0.0'} - - '@smithy/property-provider@4.2.5': - resolution: {integrity: sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==} - engines: {node: '>=18.0.0'} - - '@smithy/protocol-http@5.3.5': - resolution: {integrity: sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-builder@4.2.5': - resolution: {integrity: sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-parser@4.2.5': - resolution: {integrity: sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==} - engines: {node: '>=18.0.0'} - - '@smithy/service-error-classification@4.2.5': - resolution: {integrity: sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==} - engines: {node: '>=18.0.0'} - - '@smithy/shared-ini-file-loader@4.4.0': - resolution: {integrity: sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==} - engines: {node: '>=18.0.0'} - - '@smithy/signature-v4@5.3.5': - resolution: {integrity: sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==} - engines: {node: '>=18.0.0'} - - '@smithy/smithy-client@4.9.10': - resolution: {integrity: sha512-Jaoz4Jw1QYHc1EFww/E6gVtNjhoDU+gwRKqXP6C3LKYqqH2UQhP8tMP3+t/ePrhaze7fhLE8vS2q6vVxBANFTQ==} - engines: {node: '>=18.0.0'} - - '@smithy/types@4.9.0': - resolution: {integrity: sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==} - engines: {node: '>=18.0.0'} - - '@smithy/url-parser@4.2.5': - resolution: {integrity: sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-base64@4.3.0': - resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-browser@4.2.0': - resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-node@4.2.1': - resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} - engines: {node: '>=14.0.0'} - - '@smithy/util-buffer-from@4.2.0': - resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} - engines: {node: '>=18.0.0'} - - '@smithy/util-config-provider@4.2.0': - resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-browser@4.3.13': - resolution: {integrity: sha512-hlVLdAGrVfyNei+pKIgqDTxfu/ZI2NSyqj4IDxKd5bIsIqwR/dSlkxlPaYxFiIaDVrBy0he8orsFy+Cz119XvA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-node@4.2.16': - resolution: {integrity: sha512-F1t22IUiJLHrxW9W1CQ6B9PN+skZ9cqSuzB18Eh06HrJPbjsyZ7ZHecAKw80DQtyGTRcVfeukKaCRYebFwclbg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-endpoints@3.2.5': - resolution: {integrity: sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==} - engines: {node: '>=18.0.0'} - - '@smithy/util-hex-encoding@4.2.0': - resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-middleware@4.2.5': - resolution: {integrity: sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-retry@4.2.5': - resolution: {integrity: sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-stream@4.5.6': - resolution: {integrity: sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-uri-escape@4.2.0': - resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} - engines: {node: '>=14.0.0'} - - '@smithy/util-utf8@4.2.0': - resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} - engines: {node: '>=18.0.0'} - - '@smithy/uuid@1.1.0': - resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} - engines: {node: '>=18.0.0'} - - '@sparticuz/chromium@140.0.0': - resolution: {integrity: sha512-pDyHiSp+buakpUq23b74JPC9T5M58665y6ULlh8uSuIDK0vxVGyLzjTTigQL202c6+0+NNp1Po5rgWcT7JSO5g==} - engines: {node: '>=20.11.0'} - - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - - '@standard-schema/utils@0.3.0': - resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + "@smithy/abort-controller@4.2.5": + resolution: + { + integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/abort-controller@4.2.8": + resolution: + { + integrity: sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/config-resolver@4.4.3": + resolution: + { + integrity: sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/config-resolver@4.4.6": + resolution: + { + integrity: sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/core@3.18.7": + resolution: + { + integrity: sha512-axG9MvKhMWOhFbvf5y2DuyTxQueO0dkedY9QC3mAfndLosRI/9LJv8WaL0mw7ubNhsO4IuXX9/9dYGPFvHrqlw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/core@3.23.2": + resolution: + { + integrity: sha512-HaaH4VbGie4t0+9nY3tNBRSxVTr96wzIqexUa6C2qx3MPePAuz7lIxPxYtt1Wc//SPfJLNoZJzfdt0B6ksj2jA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/credential-provider-imds@4.2.5": + resolution: + { + integrity: sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/credential-provider-imds@4.2.8": + resolution: + { + integrity: sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/fetch-http-handler@5.3.6": + resolution: + { + integrity: sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/fetch-http-handler@5.3.9": + resolution: + { + integrity: sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/hash-node@4.2.5": + resolution: + { + integrity: sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/hash-node@4.2.8": + resolution: + { + integrity: sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/invalid-dependency@4.2.5": + resolution: + { + integrity: sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==, + } + engines: { node: ">=18.0.0" } + + "@smithy/invalid-dependency@4.2.8": + resolution: + { + integrity: sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/is-array-buffer@2.2.0": + resolution: + { + integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==, + } + engines: { node: ">=14.0.0" } + + "@smithy/is-array-buffer@4.2.0": + resolution: + { + integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-content-length@4.2.5": + resolution: + { + integrity: sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-content-length@4.2.8": + resolution: + { + integrity: sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-endpoint@4.3.14": + resolution: + { + integrity: sha512-v0q4uTKgBM8dsqGjqsabZQyH85nFaTnFcgpWU1uydKFsdyyMzfvOkNum9G7VK+dOP01vUnoZxIeRiJ6uD0kjIg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-endpoint@4.4.16": + resolution: + { + integrity: sha512-L5GICFCSsNhbJ5JSKeWFGFy16Q2OhoBizb3X2DrxaJwXSEujVvjG9Jt386dpQn2t7jINglQl0b4K/Su69BdbMA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-retry@4.4.14": + resolution: + { + integrity: sha512-Z2DG8Ej7FyWG1UA+7HceINtSLzswUgs2np3sZX0YBBxCt+CXG4QUxv88ZDS3+2/1ldW7LqtSY1UO/6VQ1pND8Q==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-retry@4.4.33": + resolution: + { + integrity: sha512-jLqZOdJhtIL4lnA9hXnAG6GgnJlo1sD3FqsTxm9wSfjviqgWesY/TMBVnT84yr4O0Vfe0jWoXlfFbzsBVph3WA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-serde@4.2.6": + resolution: + { + integrity: sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-serde@4.2.9": + resolution: + { + integrity: sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-stack@4.2.5": + resolution: + { + integrity: sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-stack@4.2.8": + resolution: + { + integrity: sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/node-config-provider@4.3.5": + resolution: + { + integrity: sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/node-config-provider@4.3.8": + resolution: + { + integrity: sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/node-http-handler@4.4.10": + resolution: + { + integrity: sha512-u4YeUwOWRZaHbWaebvrs3UhwQwj+2VNmcVCwXcYTvPIuVyM7Ex1ftAj+fdbG/P4AkBwLq/+SKn+ydOI4ZJE9PA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/node-http-handler@4.4.5": + resolution: + { + integrity: sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/property-provider@4.2.5": + resolution: + { + integrity: sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/property-provider@4.2.8": + resolution: + { + integrity: sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==, + } + engines: { node: ">=18.0.0" } + + "@smithy/protocol-http@5.3.5": + resolution: + { + integrity: sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/protocol-http@5.3.8": + resolution: + { + integrity: sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/querystring-builder@4.2.5": + resolution: + { + integrity: sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/querystring-builder@4.2.8": + resolution: + { + integrity: sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/querystring-parser@4.2.5": + resolution: + { + integrity: sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/querystring-parser@4.2.8": + resolution: + { + integrity: sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/service-error-classification@4.2.5": + resolution: + { + integrity: sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/service-error-classification@4.2.8": + resolution: + { + integrity: sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/shared-ini-file-loader@4.4.0": + resolution: + { + integrity: sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/shared-ini-file-loader@4.4.3": + resolution: + { + integrity: sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/signature-v4@5.3.5": + resolution: + { + integrity: sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==, + } + engines: { node: ">=18.0.0" } + + "@smithy/signature-v4@5.3.8": + resolution: + { + integrity: sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/smithy-client@4.11.5": + resolution: + { + integrity: sha512-xixwBRqoeP2IUgcAl3U9dvJXc+qJum4lzo3maaJxifsZxKUYLfVfCXvhT4/jD01sRrHg5zjd1cw2Zmjr4/SuKQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/smithy-client@4.9.10": + resolution: + { + integrity: sha512-Jaoz4Jw1QYHc1EFww/E6gVtNjhoDU+gwRKqXP6C3LKYqqH2UQhP8tMP3+t/ePrhaze7fhLE8vS2q6vVxBANFTQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/types@4.12.0": + resolution: + { + integrity: sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/types@4.9.0": + resolution: + { + integrity: sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/url-parser@4.2.5": + resolution: + { + integrity: sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/url-parser@4.2.8": + resolution: + { + integrity: sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-base64@4.3.0": + resolution: + { + integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-body-length-browser@4.2.0": + resolution: + { + integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-body-length-node@4.2.1": + resolution: + { + integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-buffer-from@2.2.0": + resolution: + { + integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==, + } + engines: { node: ">=14.0.0" } + + "@smithy/util-buffer-from@4.2.0": + resolution: + { + integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-config-provider@4.2.0": + resolution: + { + integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-defaults-mode-browser@4.3.13": + resolution: + { + integrity: sha512-hlVLdAGrVfyNei+pKIgqDTxfu/ZI2NSyqj4IDxKd5bIsIqwR/dSlkxlPaYxFiIaDVrBy0he8orsFy+Cz119XvA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-defaults-mode-browser@4.3.32": + resolution: + { + integrity: sha512-092sjYfFMQ/iaPH798LY/OJFBcYu0sSK34Oy9vdixhsU36zlZu8OcYjF3TD4e2ARupyK7xaxPXl+T0VIJTEkkg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-defaults-mode-node@4.2.16": + resolution: + { + integrity: sha512-F1t22IUiJLHrxW9W1CQ6B9PN+skZ9cqSuzB18Eh06HrJPbjsyZ7ZHecAKw80DQtyGTRcVfeukKaCRYebFwclbg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-defaults-mode-node@4.2.35": + resolution: + { + integrity: sha512-miz/ggz87M8VuM29y7jJZMYkn7+IErM5p5UgKIf8OtqVs/h2bXr1Bt3uTsREsI/4nK8a0PQERbAPsVPVNIsG7Q==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-endpoints@3.2.5": + resolution: + { + integrity: sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-endpoints@3.2.8": + resolution: + { + integrity: sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-hex-encoding@4.2.0": + resolution: + { + integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-middleware@4.2.5": + resolution: + { + integrity: sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-middleware@4.2.8": + resolution: + { + integrity: sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-retry@4.2.5": + resolution: + { + integrity: sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-retry@4.2.8": + resolution: + { + integrity: sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-stream@4.5.12": + resolution: + { + integrity: sha512-D8tgkrmhAX/UNeCZbqbEO3uqyghUnEmmoO9YEvRuwxjlkKKUE7FOgCJnqpTlQPe9MApdWPky58mNQQHbnCzoNg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-stream@4.5.6": + resolution: + { + integrity: sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-uri-escape@4.2.0": + resolution: + { + integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-utf8@2.3.0": + resolution: + { + integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==, + } + engines: { node: ">=14.0.0" } + + "@smithy/util-utf8@4.2.0": + resolution: + { + integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/uuid@1.1.0": + resolution: + { + integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==, + } + engines: { node: ">=18.0.0" } + + "@sparticuz/chromium@140.0.0": + resolution: + { + integrity: sha512-pDyHiSp+buakpUq23b74JPC9T5M58665y6ULlh8uSuIDK0vxVGyLzjTTigQL202c6+0+NNp1Po5rgWcT7JSO5g==, + } + engines: { node: ">=20.11.0" } + + "@standard-schema/spec@1.0.0": + resolution: + { + integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==, + } + + "@standard-schema/spec@1.1.0": + resolution: + { + integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==, + } + + "@standard-schema/utils@0.3.0": + resolution: + { + integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==, + } + + "@supabase/auth-js@2.67.3": + resolution: + { + integrity: sha512-NJDaW8yXs49xMvWVOkSIr8j46jf+tYHV0wHhrwOaLLMZSFO4g6kKAf+MfzQ2RaD06OCUkUHIzctLAxjTgEVpzw==, + } + + "@supabase/functions-js@2.4.4": + resolution: + { + integrity: sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==, + } + + "@supabase/node-fetch@2.6.15": + resolution: + { + integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==, + } + engines: { node: 4.x || >=6.0.0 } + + "@supabase/postgrest-js@1.17.7": + resolution: + { + integrity: sha512-aOzOYaTADm/dVTNksyqv9KsbhVa1gHz1Hoxb2ZEF2Ed9H7qlWOfptECQWmkEmrrFjtNaiPrgiSaPECvzI/seDA==, + } + + "@supabase/realtime-js@2.11.2": + resolution: + { + integrity: sha512-u/XeuL2Y0QEhXSoIPZZwR6wMXgB+RQbJzG9VErA3VghVt7uRfSVsjeqd7m5GhX3JR6dM/WRmLbVR8URpDWG4+w==, + } + + "@supabase/storage-js@2.7.1": + resolution: + { + integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==, + } + + "@supabase/supabase-js@2.47.10": + resolution: + { + integrity: sha512-vJfPF820Ho5WILYHfKiBykDQ1SB9odTHrRZ0JxHfuLMC8GRvv21YLkUZQK7/rSVCkLvD6/ZwMWaOAfdUd//guw==, + } + + "@swc/helpers@0.5.15": + resolution: + { + integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==, + } + + "@tailwindcss/node@4.2.0": + resolution: + { + integrity: sha512-Yv+fn/o2OmL5fh/Ir62VXItdShnUxfpkMA4Y7jdeC8O81WPB8Kf6TT6GSHvnqgSwDzlB5iT7kDpeXxLsUS0T6Q==, + } + + "@tailwindcss/oxide-android-arm64@4.2.0": + resolution: + { + integrity: sha512-F0QkHAVaW/JNBWl4CEKWdZ9PMb0khw5DCELAOnu+RtjAfx5Zgw+gqCHFvqg3AirU1IAd181fwOtJQ5I8Yx5wtw==, + } + engines: { node: ">= 20" } + cpu: [arm64] + os: [android] - '@supabase/auth-js@2.67.3': - resolution: {integrity: sha512-NJDaW8yXs49xMvWVOkSIr8j46jf+tYHV0wHhrwOaLLMZSFO4g6kKAf+MfzQ2RaD06OCUkUHIzctLAxjTgEVpzw==} + "@tailwindcss/oxide-darwin-arm64@4.2.0": + resolution: + { + integrity: sha512-I0QylkXsBsJMZ4nkUNSR04p6+UptjcwhcVo3Zu828ikiEqHjVmQL9RuQ6uT/cVIiKpvtVA25msu/eRV97JeNSA==, + } + engines: { node: ">= 20" } + cpu: [arm64] + os: [darwin] - '@supabase/functions-js@2.4.4': - resolution: {integrity: sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==} + "@tailwindcss/oxide-darwin-x64@4.2.0": + resolution: + { + integrity: sha512-6TmQIn4p09PBrmnkvbYQ0wbZhLtbaksCDx7Y7R3FYYx0yxNA7xg5KP7dowmQ3d2JVdabIHvs3Hx4K3d5uCf8xg==, + } + engines: { node: ">= 20" } + cpu: [x64] + os: [darwin] - '@supabase/node-fetch@2.6.15': - resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} - engines: {node: 4.x || >=6.0.0} + "@tailwindcss/oxide-freebsd-x64@4.2.0": + resolution: + { + integrity: sha512-qBudxDvAa2QwGlq9y7VIzhTvp2mLJ6nD/G8/tI70DCDoneaUeLWBJaPcbfzqRIWraj+o969aDQKvKW9dvkUizw==, + } + engines: { node: ">= 20" } + cpu: [x64] + os: [freebsd] - '@supabase/postgrest-js@1.17.7': - resolution: {integrity: sha512-aOzOYaTADm/dVTNksyqv9KsbhVa1gHz1Hoxb2ZEF2Ed9H7qlWOfptECQWmkEmrrFjtNaiPrgiSaPECvzI/seDA==} + "@tailwindcss/oxide-linux-arm-gnueabihf@4.2.0": + resolution: + { + integrity: sha512-7XKkitpy5NIjFZNUQPeUyNJNJn1CJeV7rmMR+exHfTuOsg8rxIO9eNV5TSEnqRcaOK77zQpsyUkBWmPy8FgdSg==, + } + engines: { node: ">= 20" } + cpu: [arm] + os: [linux] - '@supabase/realtime-js@2.11.2': - resolution: {integrity: sha512-u/XeuL2Y0QEhXSoIPZZwR6wMXgB+RQbJzG9VErA3VghVt7uRfSVsjeqd7m5GhX3JR6dM/WRmLbVR8URpDWG4+w==} + "@tailwindcss/oxide-linux-arm64-gnu@4.2.0": + resolution: + { + integrity: sha512-Mff5a5Q3WoQR01pGU1gr29hHM1N93xYrKkGXfPw/aRtK4bOc331Ho4Tgfsm5WDGvpevqMpdlkCojT3qlCQbCpA==, + } + engines: { node: ">= 20" } + cpu: [arm64] + os: [linux] - '@supabase/storage-js@2.7.1': - resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==} + "@tailwindcss/oxide-linux-arm64-musl@4.2.0": + resolution: + { + integrity: sha512-XKcSStleEVnbH6W/9DHzZv1YhjE4eSS6zOu2eRtYAIh7aV4o3vIBs+t/B15xlqoxt6ef/0uiqJVB6hkHjWD/0A==, + } + engines: { node: ">= 20" } + cpu: [arm64] + os: [linux] - '@supabase/supabase-js@2.47.10': - resolution: {integrity: sha512-vJfPF820Ho5WILYHfKiBykDQ1SB9odTHrRZ0JxHfuLMC8GRvv21YLkUZQK7/rSVCkLvD6/ZwMWaOAfdUd//guw==} + "@tailwindcss/oxide-linux-x64-gnu@4.2.0": + resolution: + { + integrity: sha512-/hlXCBqn9K6fi7eAM0RsobHwJYa5V/xzWspVTzxnX+Ft9v6n+30Pz8+RxCn7sQL/vRHHLS30iQPrHQunu6/vJA==, + } + engines: { node: ">= 20" } + cpu: [x64] + os: [linux] - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + "@tailwindcss/oxide-linux-x64-musl@4.2.0": + resolution: + { + integrity: sha512-lKUaygq4G7sWkhQbfdRRBkaq4LY39IriqBQ+Gk6l5nKq6Ay2M2ZZb1tlIyRNgZKS8cbErTwuYSor0IIULC0SHw==, + } + engines: { node: ">= 20" } + cpu: [x64] + os: [linux] - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + "@tailwindcss/oxide-wasm32-wasi@4.2.0": + resolution: + { + integrity: sha512-xuDjhAsFdUuFP5W9Ze4k/o4AskUtI8bcAGU4puTYprr89QaYFmhYOPfP+d1pH+k9ets6RoE23BXZM1X1jJqoyw==, + } + engines: { node: ">=14.0.0" } + cpu: [wasm32] + bundledDependencies: + - "@napi-rs/wasm-runtime" + - "@emnapi/core" + - "@emnapi/runtime" + - "@tybys/wasm-util" + - "@emnapi/wasi-threads" + - tslib + + "@tailwindcss/oxide-win32-arm64-msvc@4.2.0": + resolution: + { + integrity: sha512-2UU/15y1sWDEDNJXxEIrfWKC2Yb4YgIW5Xz2fKFqGzFWfoMHWFlfa1EJlGO2Xzjkq/tvSarh9ZTjvbxqWvLLXA==, + } + engines: { node: ">= 20" } + cpu: [arm64] + os: [win32] - '@tanem/svg-injector@10.1.68': - resolution: {integrity: sha512-UkJajeR44u73ujtr5GVSbIlELDWD/mzjqWe54YMK61ljKxFcJoPd9RBSaO7xj02ISCWUqJW99GjrS+sVF0UnrA==} + "@tailwindcss/oxide-win32-x64-msvc@4.2.0": + resolution: + { + integrity: sha512-CrFadmFoc+z76EV6LPG1jx6XceDsaCG3lFhyLNo/bV9ByPrE+FnBPckXQVP4XRkN76h3Fjt/a+5Er/oA/nCBvQ==, + } + engines: { node: ">= 20" } + cpu: [x64] + os: [win32] - '@tanstack/react-table@8.20.6': - resolution: {integrity: sha512-w0jluT718MrOKthRcr2xsjqzx+oEM7B7s/XXyfs19ll++hlId3fjTm+B2zrR3ijpANpkzBAr15j1XGVOMxpggQ==} - engines: {node: '>=12'} + "@tailwindcss/oxide@4.2.0": + resolution: + { + integrity: sha512-AZqQzADaj742oqn2xjl5JbIOzZB/DGCYF/7bpvhA8KvjUj9HJkag6bBuwZvH1ps6dfgxNHyuJVlzSr2VpMgdTQ==, + } + engines: { node: ">= 20" } + + "@tailwindcss/postcss@4.2.0": + resolution: + { + integrity: sha512-u6YBacGpOm/ixPfKqfgrJEjMfrYmPD7gEFRoygS/hnQaRtV0VCBdpkx5Ouw9pnaLRwwlgGCuJw8xLpaR0hOrQg==, + } + + "@tanem/svg-injector@10.1.68": + resolution: + { + integrity: sha512-UkJajeR44u73ujtr5GVSbIlELDWD/mzjqWe54YMK61ljKxFcJoPd9RBSaO7xj02ISCWUqJW99GjrS+sVF0UnrA==, + } + + "@tanstack/react-table@8.20.6": + resolution: + { + integrity: sha512-w0jluT718MrOKthRcr2xsjqzx+oEM7B7s/XXyfs19ll++hlId3fjTm+B2zrR3ijpANpkzBAr15j1XGVOMxpggQ==, + } + engines: { node: ">=12" } peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - - '@tanstack/react-virtual@3.10.8': - resolution: {integrity: sha512-VbzbVGSsZlQktyLrP5nxE+vE1ZR+U0NFAWPbJLoG2+DKPwd2D7dVICTVIIaYlJqX1ZCEnYDbaOpmMwbsyhBoIA==} + react: ">=16.8" + react-dom: ">=16.8" + + "@tanstack/react-virtual@3.10.8": + resolution: + { + integrity: sha512-VbzbVGSsZlQktyLrP5nxE+vE1ZR+U0NFAWPbJLoG2+DKPwd2D7dVICTVIIaYlJqX1ZCEnYDbaOpmMwbsyhBoIA==, + } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@tanstack/table-core@8.20.5': - resolution: {integrity: sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==} - engines: {node: '>=12'} - - '@tanstack/virtual-core@3.10.8': - resolution: {integrity: sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA==} - - '@theguild/remark-mermaid@0.1.3': - resolution: {integrity: sha512-2FjVlaaKXK7Zj7UJAgOVTyaahn/3/EAfqYhyXg0BfDBVUl+lXcoIWRaxzqfnDr2rv8ax6GsC5mNh6hAaT86PDw==} - peerDependencies: - react: ^18.2.0 - - '@theguild/remark-npm2yarn@0.3.2': - resolution: {integrity: sha512-H9T/GOuS/+4H7AY1cfD5DJIIIcGIIw1zMCB8OeTgXk7azJULsnuOurZ/CR54rvuTD+Krx0MVQccaUCvCWfP+vw==} - - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - - '@tweenjs/tween.js@23.1.3': - resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==} - - '@types/acorn@4.0.6': - resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} - - '@types/d3-array@3.2.2': - resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} - - '@types/d3-color@3.1.3': - resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} - - '@types/d3-ease@3.0.2': - resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} - - '@types/d3-interpolate@3.0.4': - resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - - '@types/d3-path@3.1.1': - resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} - - '@types/d3-scale@4.0.9': - resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} - - '@types/d3-shape@3.1.7': - resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==} - - '@types/d3-time@3.0.4': - resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} - - '@types/d3-timer@3.0.2': - resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} - - '@types/debounce@1.2.4': - resolution: {integrity: sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==} - - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - - '@types/dom-mediacapture-record@1.0.22': - resolution: {integrity: sha512-mUMZLK3NvwRLcAAT9qmcK+9p7tpU2FHdDsntR3YI4+GY88XrgG4XiE7u1Q2LAN2/FZOz/tdMDC3GQCR4T8nFuw==} - - '@types/draco3d@1.4.10': - resolution: {integrity: sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw==} - - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - - '@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/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - - '@types/hast@2.3.10': - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/katex@0.16.7': - resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/mdx@2.0.13': - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/nlcst@2.0.3': - resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} - - '@types/node-fetch@2.6.12': - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - - '@types/node@18.19.86': - resolution: {integrity: sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==} - - '@types/node@22.18.0': - resolution: {integrity: sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ==} - - '@types/nodemailer@7.0.4': - resolution: {integrity: sha512-ee8fxWqOchH+Hv6MDDNNy028kwvVnLplrStm4Zf/3uHWw5zzo8FoYYeffpJtGs2wWysEumMH0ZIdMGMY1eMAow==} - - '@types/offscreencanvas@2019.7.3': - resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==} - - '@types/phoenix@1.6.6': - resolution: {integrity: sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==} - - '@types/prismjs@1.26.5': - resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} - - '@types/prop-types@15.7.13': - resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} - - '@types/prop-types@15.7.14': - resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} - - '@types/react-reconciler@0.26.7': - resolution: {integrity: sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==} - - '@types/react-reconciler@0.28.8': - resolution: {integrity: sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==} - - '@types/react-syntax-highlighter@15.5.13': - resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} - - '@types/react@18.3.3': - resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} - - '@types/stats.js@0.17.4': - resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==} - - '@types/three@0.170.0': - resolution: {integrity: sha512-CUm2uckq+zkCY7ZbFpviRttY+6f9fvwm6YqSqPfA5K22s9w7R4VnA3rzJse8kHVvuzLcTx+CjNCs2NYe0QFAyg==} - - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - - '@types/unist@3.0.2': - resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/use-sync-external-store@0.0.6': - resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - - '@types/webxr@0.5.20': - resolution: {integrity: sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==} - - '@types/webxr@0.5.24': - resolution: {integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==} - - '@types/ws@8.5.13': - resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} - - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - - '@typescript/vfs@1.6.0': - resolution: {integrity: sha512-hvJUjNVeBMp77qPINuUvYXj4FyWeeMMKZkxEATEU3hqBAQ7qdTBCUFT7Sp0Zu0faeEtFf+ldXxMEDr/bk73ISg==} - peerDependencies: - typescript: '*' - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - '@use-gesture/core@10.3.1': - resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==} - - '@use-gesture/react@10.3.1': - resolution: {integrity: sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==} + "@tanstack/table-core@8.20.5": + resolution: + { + integrity: sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==, + } + engines: { node: ">=12" } + + "@tanstack/virtual-core@3.10.8": + resolution: + { + integrity: sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA==, + } + + "@tootallnate/quickjs-emscripten@0.23.0": + resolution: + { + integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==, + } + + "@tweenjs/tween.js@23.1.3": + resolution: + { + integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==, + } + + "@types/d3-array@3.2.2": + resolution: + { + integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==, + } + + "@types/d3-color@3.1.3": + resolution: + { + integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==, + } + + "@types/d3-ease@3.0.2": + resolution: + { + integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==, + } + + "@types/d3-interpolate@3.0.4": + resolution: + { + integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==, + } + + "@types/d3-path@3.1.1": + resolution: + { + integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==, + } + + "@types/d3-scale@4.0.9": + resolution: + { + integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==, + } + + "@types/d3-shape@3.1.7": + resolution: + { + integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==, + } + + "@types/d3-time@3.0.4": + resolution: + { + integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==, + } + + "@types/d3-timer@3.0.2": + resolution: + { + integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==, + } + + "@types/debounce@1.2.4": + resolution: + { + integrity: sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==, + } + + "@types/debug@4.1.12": + resolution: + { + integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==, + } + + "@types/dom-mediacapture-record@1.0.22": + resolution: + { + integrity: sha512-mUMZLK3NvwRLcAAT9qmcK+9p7tpU2FHdDsntR3YI4+GY88XrgG4XiE7u1Q2LAN2/FZOz/tdMDC3GQCR4T8nFuw==, + } + + "@types/draco3d@1.4.10": + resolution: + { + integrity: sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw==, + } + + "@types/estree-jsx@1.0.5": + resolution: + { + integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==, + } + + "@types/estree@1.0.8": + resolution: + { + integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, + } + + "@types/hast@2.3.10": + resolution: + { + integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==, + } + + "@types/hast@3.0.4": + resolution: + { + integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==, + } + + "@types/katex@0.16.7": + resolution: + { + integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==, + } + + "@types/mdast@4.0.4": + resolution: + { + integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==, + } + + "@types/mdx@2.0.13": + resolution: + { + integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==, + } + + "@types/ms@2.1.0": + resolution: + { + integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==, + } + + "@types/node-fetch@2.6.12": + resolution: + { + integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==, + } + + "@types/node@18.19.86": + resolution: + { + integrity: sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==, + } + + "@types/node@22.18.0": + resolution: + { + integrity: sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ==, + } + + "@types/nodemailer@7.0.4": + resolution: + { + integrity: sha512-ee8fxWqOchH+Hv6MDDNNy028kwvVnLplrStm4Zf/3uHWw5zzo8FoYYeffpJtGs2wWysEumMH0ZIdMGMY1eMAow==, + } + + "@types/offscreencanvas@2019.7.3": + resolution: + { + integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==, + } + + "@types/phoenix@1.6.6": + resolution: + { + integrity: sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==, + } + + "@types/prismjs@1.26.5": + resolution: + { + integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==, + } + + "@types/prop-types@15.7.14": + resolution: + { + integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==, + } + + "@types/react-reconciler@0.26.7": + resolution: + { + integrity: sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==, + } + + "@types/react-reconciler@0.28.8": + resolution: + { + integrity: sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==, + } + + "@types/react-syntax-highlighter@15.5.13": + resolution: + { + integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==, + } + + "@types/react@19.2.14": + resolution: + { + integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==, + } + + "@types/stats.js@0.17.4": + resolution: + { + integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==, + } + + "@types/three@0.183.0": + resolution: + { + integrity: sha512-AaGkvloQhxdrfMm/HbY8cpOz1K1jkEELn6zjFoY3yhAiC7zhhZE19+gDBybYwKk+GqXmWKxqDCB43NqyW3+QZw==, + } + + "@types/unist@2.0.11": + resolution: + { + integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==, + } + + "@types/unist@3.0.3": + resolution: + { + integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==, + } + + "@types/use-sync-external-store@0.0.6": + resolution: + { + integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==, + } + + "@types/webxr@0.5.20": + resolution: + { + integrity: sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==, + } + + "@types/webxr@0.5.24": + resolution: + { + integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==, + } + + "@types/ws@8.5.13": + resolution: + { + integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==, + } + + "@types/yauzl@2.10.3": + resolution: + { + integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==, + } + + "@ungap/structured-clone@1.3.0": + resolution: + { + integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==, + } + + "@use-gesture/core@10.3.1": + resolution: + { + integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==, + } + + "@use-gesture/react@10.3.1": + resolution: + { + integrity: sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==, + } peerDependencies: - react: '>= 16.8.0' - - '@vercel/functions@2.2.2': - resolution: {integrity: sha512-wgtgFwhYAUzS7UOvw44q14FaoRPONEnyoM0JlrjcDkI+kzSu7M8J5Tk5T3Kvv52//8is+HGxVQtaBSiO3G0wbw==} - engines: {node: '>= 18'} + react: ">= 16.8.0" + + "@vercel/functions@2.2.2": + resolution: + { + integrity: sha512-wgtgFwhYAUzS7UOvw44q14FaoRPONEnyoM0JlrjcDkI+kzSu7M8J5Tk5T3Kvv52//8is+HGxVQtaBSiO3G0wbw==, + } + engines: { node: ">= 18" } peerDependencies: - '@aws-sdk/credential-provider-web-identity': '*' + "@aws-sdk/credential-provider-web-identity": "*" peerDependenciesMeta: - '@aws-sdk/credential-provider-web-identity': + "@aws-sdk/credential-provider-web-identity": optional: true - '@vercel/mcp-adapter@0.11.1': - resolution: {integrity: sha512-6IUuBSrHhc4nn4g/B64LCPDJGAQsChs60HKSzcifkQd7/0bgiIwAQ29ap6FdFHwYvRsXC4UcVPRcBUxhK9PsgQ==} + "@vercel/mcp-adapter@0.11.1": + resolution: + { + integrity: sha512-6IUuBSrHhc4nn4g/B64LCPDJGAQsChs60HKSzcifkQd7/0bgiIwAQ29ap6FdFHwYvRsXC4UcVPRcBUxhK9PsgQ==, + } hasBin: true peerDependencies: - '@modelcontextprotocol/sdk': ^1.12.0 - next: '>=13.0.0' + "@modelcontextprotocol/sdk": ^1.12.0 + next: ">=13.0.0" peerDependenciesMeta: next: optional: true - '@vercel/og@0.6.8': - resolution: {integrity: sha512-e4kQK9mP8ntpo3dACWirGod/hHv4qO5JMj9a/0a2AZto7b4persj5YP7t1Er372gTtYFTYxNhMx34jRvHooglw==} - engines: {node: '>=16'} - - '@vidstack/react@1.12.13': - resolution: {integrity: sha512-zyNydy1+HtoK6cJ8EmqFNkPPGHIFMrr2KH+ef3654EqXx4IcJ8A5LCNMXBuALQE8IMxtk040JMoR9OKyeXjBOQ==} - engines: {node: '>=18'} + "@vercel/og@0.6.8": + resolution: + { + integrity: sha512-e4kQK9mP8ntpo3dACWirGod/hHv4qO5JMj9a/0a2AZto7b4persj5YP7t1Er372gTtYFTYxNhMx34jRvHooglw==, + } + engines: { node: ">=16" } + + "@vidstack/react@1.12.13": + resolution: + { + integrity: sha512-zyNydy1+HtoK6cJ8EmqFNkPPGHIFMrr2KH+ef3654EqXx4IcJ8A5LCNMXBuALQE8IMxtk040JMoR9OKyeXjBOQ==, + } + engines: { node: ">=18" } peerDependencies: - '@types/react': ^18.0.0 || ^19.0.0 + "@types/react": ^19.2.14 react: ^18.0.0 || ^19.0.0 - '@webgpu/types@0.1.69': - resolution: {integrity: sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==} - - '@zag-js/core@1.24.1': - resolution: {integrity: sha512-0e7QdxBaY9PMHQfDY/Xu/7MKyRxNsriNscpkZI7L4MHMGPmxdfedGBpteI3gFfqWsdJ5NvvpqxdLUwkbYk5Q5A==} - - '@zag-js/dom-query@1.24.1': - resolution: {integrity: sha512-ww3tS5hrB2s6ywGtjMjSOajP19CnQOH0IAGgzjE+lbvDD+ZroXWn9O3Z/v2kTfKNwZFQ4TOb8oSymuSRQsFOYg==} - - '@zag-js/focus-trap@1.24.1': - resolution: {integrity: sha512-cpgYWWaiKx9eycm4Mahv6Dng5+CbDiTtyz/gnbZUv6sqcM4b9N+UqdmBdWYPLHV4gZYrzuO+X4P1C/Ew/rA+xg==} - - '@zag-js/presence@1.24.1': - resolution: {integrity: sha512-MMcw4iOsGdSGM3hmvd0gcMuk1X9rE/xE3Ndm113vc+lkhk93COiuJPz1ZpyBb8l1CIJwlZ5nnRpx4Lx8Do6aNQ==} - - '@zag-js/react@1.24.1': - resolution: {integrity: sha512-oiaiuR7FKVHOEJtzoYZ2QBQ5+J/j086eebhLCIWkh2ie6QBJM73LHsMUxfZp2D2G1is8EoyUhrH3v2MPMlYMXg==} + "@webgpu/types@0.1.69": + resolution: + { + integrity: sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==, + } + + "@zag-js/core@1.24.1": + resolution: + { + integrity: sha512-0e7QdxBaY9PMHQfDY/Xu/7MKyRxNsriNscpkZI7L4MHMGPmxdfedGBpteI3gFfqWsdJ5NvvpqxdLUwkbYk5Q5A==, + } + + "@zag-js/dom-query@1.24.1": + resolution: + { + integrity: sha512-ww3tS5hrB2s6ywGtjMjSOajP19CnQOH0IAGgzjE+lbvDD+ZroXWn9O3Z/v2kTfKNwZFQ4TOb8oSymuSRQsFOYg==, + } + + "@zag-js/focus-trap@1.24.1": + resolution: + { + integrity: sha512-cpgYWWaiKx9eycm4Mahv6Dng5+CbDiTtyz/gnbZUv6sqcM4b9N+UqdmBdWYPLHV4gZYrzuO+X4P1C/Ew/rA+xg==, + } + + "@zag-js/presence@1.24.1": + resolution: + { + integrity: sha512-MMcw4iOsGdSGM3hmvd0gcMuk1X9rE/xE3Ndm113vc+lkhk93COiuJPz1ZpyBb8l1CIJwlZ5nnRpx4Lx8Do6aNQ==, + } + + "@zag-js/react@1.24.1": + resolution: + { + integrity: sha512-oiaiuR7FKVHOEJtzoYZ2QBQ5+J/j086eebhLCIWkh2ie6QBJM73LHsMUxfZp2D2G1is8EoyUhrH3v2MPMlYMXg==, + } peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - - '@zag-js/store@1.24.1': - resolution: {integrity: sha512-iVl+NX2CcxEDLL3hrj31mqSqBZYBqHEBqa/Z7FwKVoTImMQ1AabMF5XPreTtB8KFbaVJlNlM6D5qngDPpVj/xw==} - - '@zag-js/types@1.24.1': - resolution: {integrity: sha512-XyINtxe5JK7A+RtTmBdCQElNoElDiTw6NSWpjKZGRAXXGU9HIZ9JIFeaS77uq1aVs0JhAOFwqJiPs2NJzaYHLA==} - - '@zag-js/utils@1.24.1': - resolution: {integrity: sha512-4nU9lfFlLLW/4T+/HaP+HdHYFeWvacxSVcccv0JSf+ZTC110IldV48kZELP+wFg9xDL/jCPPjlRtO1K64EIwgA==} + react: ">=18.0.0" + react-dom: ">=18.0.0" + + "@zag-js/store@1.24.1": + resolution: + { + integrity: sha512-iVl+NX2CcxEDLL3hrj31mqSqBZYBqHEBqa/Z7FwKVoTImMQ1AabMF5XPreTtB8KFbaVJlNlM6D5qngDPpVj/xw==, + } + + "@zag-js/types@1.24.1": + resolution: + { + integrity: sha512-XyINtxe5JK7A+RtTmBdCQElNoElDiTw6NSWpjKZGRAXXGU9HIZ9JIFeaS77uq1aVs0JhAOFwqJiPs2NJzaYHLA==, + } + + "@zag-js/utils@1.24.1": + resolution: + { + integrity: sha512-4nU9lfFlLLW/4T+/HaP+HdHYFeWvacxSVcccv0JSf+ZTC110IldV48kZELP+wFg9xDL/jCPPjlRtO1K64EIwgA==, + } abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} + resolution: + { + integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==, + } + engines: { node: ">=6.5" } accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==, + } + engines: { node: ">= 0.6" } acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, + } peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} + acorn-walk@8.3.4: + resolution: + { + integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==, + } + engines: { node: ">=0.4.0" } + + acorn@8.15.0: + resolution: + { + integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==, + } + engines: { node: ">=0.4.0" } hasBin: true agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==, + } + engines: { node: ">= 14" } agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} + resolution: + { + integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==, + } + engines: { node: ">= 8.0.0" } ai@5.0.8: - resolution: {integrity: sha512-qbnhj046UvG30V1S5WhjBn+RBGEAmi8PSZWqMhRsE3EPxvO5BcePXTZFA23e9MYyWS9zr4Vm8Mv3wQXwLmtIBw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-qbnhj046UvG30V1S5WhjBn+RBGEAmi8PSZWqMhRsE3EPxvO5BcePXTZFA23e9MYyWS9zr4Vm8Mv3wQXwLmtIBw==, + } + engines: { node: ">=18" } peerDependencies: zod: ^3.25.76 || ^4 ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + resolution: + { + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, + } altcha-lib@1.2.0: - resolution: {integrity: sha512-S5WF8QLNRaM1hvK24XPhOLfu9is2EBCvH7+nv50sM5CaIdUCqQCd0WV/qm/ZZFGTdSoKLuDp+IapZxBLvC+SNg==} + resolution: + { + integrity: sha512-S5WF8QLNRaM1hvK24XPhOLfu9is2EBCvH7+nv50sM5CaIdUCqQCd0WV/qm/ZZFGTdSoKLuDp+IapZxBLvC+SNg==, + } ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + } + engines: { node: ">=8" } ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - - arg@1.0.0: - resolution: {integrity: sha512-Wk7TEzl1KqvTGs/uyhmHO/3XLd3t1UeU4IstvPXVzGPM522cTjqjNZ99esCkcL52sjqjo8e8CTBcWhkxvGzoAw==} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + } + engines: { node: ">=8" } argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + resolution: + { + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, + } argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } aria-hidden@1.2.4: - resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} - engines: {node: '>=10'} - - array-iterate@2.0.1: - resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + resolution: + { + integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==, + } + engines: { node: ">=10" } + + aria-hidden@1.2.6: + resolution: + { + integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==, + } + engines: { node: ">=10" } array-keyed-map@2.1.3: - resolution: {integrity: sha512-JIUwuFakO+jHjxyp4YgSiKXSZeC0U+R1jR94bXWBcVlFRBycqXlb+kH9JHxBGcxnVuSqx5bnn0Qz9xtSeKOjiA==} + resolution: + { + integrity: sha512-JIUwuFakO+jHjxyp4YgSiKXSZeC0U+R1jR94bXWBcVlFRBycqXlb+kH9JHxBGcxnVuSqx5bnn0Qz9xtSeKOjiA==, + } ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==, + } + engines: { node: ">=4" } astring@1.9.0: - resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + resolution: + { + integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==, + } hasBin: true async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + resolution: + { + integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==, + } asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - autoprefixer@10.4.21: - resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 + resolution: + { + integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, + } b4a@1.7.3: - resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} + resolution: + { + integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==, + } peerDependencies: - react-native-b4a: '*' + react-native-b4a: "*" peerDependenciesMeta: react-native-b4a: optional: true bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + resolution: + { + integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==, + } bare-events@2.7.0: - resolution: {integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==} + resolution: + { + integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==, + } bare-fs@4.4.5: - resolution: {integrity: sha512-TCtu93KGLu6/aiGWzMr12TmSRS6nKdfhAnzTQRbXoSWxkbb9eRd53jQ51jG7g1gYjjtto3hbBrrhzg6djcgiKg==} - engines: {bare: '>=1.16.0'} + resolution: + { + integrity: sha512-TCtu93KGLu6/aiGWzMr12TmSRS6nKdfhAnzTQRbXoSWxkbb9eRd53jQ51jG7g1gYjjtto3hbBrrhzg6djcgiKg==, + } + engines: { bare: ">=1.16.0" } peerDependencies: - bare-buffer: '*' + bare-buffer: "*" peerDependenciesMeta: bare-buffer: optional: true bare-os@3.6.2: - resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} - engines: {bare: '>=1.14.0'} + resolution: + { + integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==, + } + engines: { bare: ">=1.14.0" } bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + resolution: + { + integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==, + } bare-stream@2.7.0: - resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} + resolution: + { + integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==, + } peerDependencies: - bare-buffer: '*' - bare-events: '*' + bare-buffer: "*" + bare-events: "*" peerDependenciesMeta: bare-buffer: optional: true @@ -2814,906 +4784,1266 @@ packages: optional: true bare-url@2.2.2: - resolution: {integrity: sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==} + resolution: + { + integrity: sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==, + } base64-js@0.0.8: - resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==, + } + engines: { node: ">= 0.4" } base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + resolution: + { + integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, + } + + baseline-browser-mapping@2.9.19: + resolution: + { + integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==, + } + hasBin: true basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} - - better-react-mathjax@2.0.3: - resolution: {integrity: sha512-wfifT8GFOKb1TWm2+E50I6DJpLZ5kLbch283Lu043EJtwSv0XvZDjr4YfR4d2MjAhqP6SH4VjjrKgbX8R00oCQ==} - peerDependencies: - react: '>=16.8' + resolution: + { + integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==, + } + engines: { node: ">=10.0.0" } bidi-js@1.0.3: - resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==, + } body-parser@2.2.0: - resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==, + } + engines: { node: ">=18" } boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + resolution: + { + integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, + } bowser@2.13.1: - resolution: {integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==} + resolution: + { + integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==, + } - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + bowser@2.14.1: + resolution: + { + integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==, + } braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + } + engines: { node: ">=8" } buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + resolution: + { + integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==, + } buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + resolution: + { + integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==, + } buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - - busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + resolution: + { + integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==, + } bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, + } + engines: { node: ">= 0.8" } call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, + } + engines: { node: ">= 0.4" } call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==, + } + engines: { node: ">= 0.4" } callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, + } + engines: { node: ">=6" } camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==, + } + engines: { node: ">= 6" } camelcase-keys@9.1.3: - resolution: {integrity: sha512-Rircqi9ch8AnZscQcsA1C47NFdaO3wukpmIRzYcDOrmvgt78hM/sj5pZhZNec2NM12uk5vTwRHZ4anGcrC4ZTg==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-Rircqi9ch8AnZscQcsA1C47NFdaO3wukpmIRzYcDOrmvgt78hM/sj5pZhZNec2NM12uk5vTwRHZ4anGcrC4ZTg==, + } + engines: { node: ">=16" } camelcase@8.0.0: - resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==, + } + engines: { node: ">=16" } camelize@1.0.1: - resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + resolution: + { + integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==, + } camera-controls@2.9.0: - resolution: {integrity: sha512-TpCujnP0vqPppTXXJRYpvIy0xq9Tro6jQf2iYUxlDpPCNxkvE/XGaTuwIxnhINOkVP/ob2CRYXtY3iVYXeMEzA==} + resolution: + { + integrity: sha512-TpCujnP0vqPppTXXJRYpvIy0xq9Tro6jQf2iYUxlDpPCNxkvE/XGaTuwIxnhINOkVP/ob2CRYXtY3iVYXeMEzA==, + } peerDependencies: - three: '>=0.126.1' + three: ">=0.126.1" - caniuse-lite@1.0.30001707: - resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} - - caniuse-lite@1.0.30001759: - resolution: {integrity: sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==} + caniuse-lite@1.0.30001770: + resolution: + { + integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==, + } ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - - chalk@2.3.0: - resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==, + } chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + resolution: + { + integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==, + } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + resolution: + { + integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==, + } character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + resolution: + { + integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==, + } character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + resolution: + { + integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==, + } character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + resolution: + { + integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==, + } character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + resolution: + { + integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==, + } character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + resolution: + { + integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==, + } character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + resolution: + { + integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==, + } cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + resolution: + { + integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==, + } cheerio@1.0.0: - resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} - engines: {node: '>=18.17'} - - chevrotain-allstar@0.3.1: - resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==} - peerDependencies: - chevrotain: ^11.0.0 - - chevrotain@11.0.3: - resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + resolution: + { + integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==, + } + engines: { node: ">=18.17" } + + chokidar@5.0.0: + resolution: + { + integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==, + } + engines: { node: ">= 20.19.0" } chromium-bidi@9.1.0: - resolution: {integrity: sha512-rlUzQ4WzIAWdIbY/viPShhZU2n21CxDUgazXVbw4Hu1MwaeUSEksSeM6DqPgpRjCLXRk702AVRxJxoOz0dw4OA==} + resolution: + { + integrity: sha512-rlUzQ4WzIAWdIbY/viPShhZU2n21CxDUgazXVbw4Hu1MwaeUSEksSeM6DqPgpRjCLXRk702AVRxJxoOz0dw4OA==, + } peerDependencies: - devtools-protocol: '*' + devtools-protocol: "*" class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + resolution: + { + integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==, + } client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - - clipboardy@1.2.2: - resolution: {integrity: sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, + } cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + } + engines: { node: ">=12" } clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, + } + engines: { node: ">=6" } cluster-key-slot@1.1.2: - resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==, + } + engines: { node: ">=0.10.0" } collapse-white-space@2.1.0: - resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + resolution: + { + integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==, + } color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, + } + engines: { node: ">=7.0.0" } color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, + } colorjs.io@0.5.2: - resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + resolution: + { + integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==, + } combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, + } + engines: { node: ">= 0.8" } comma-separated-tokens@1.0.8: - resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} + resolution: + { + integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==, + } comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + resolution: + { + integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==, + } commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==, + } + engines: { node: ">=16" } commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==, + } + engines: { node: ">=18" } commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, + } + engines: { node: ">= 10" } commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - - commander@9.2.0: - resolution: {integrity: sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==} - engines: {node: ^12.20.0 || >=14} - - compute-scroll-into-view@3.1.0: - resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} - - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + resolution: + { + integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, + } + engines: { node: ">= 12" } + + compute-scroll-into-view@3.1.1: + resolution: + { + integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==, + } content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==, + } + engines: { node: ">= 0.6" } content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==, + } + engines: { node: ">= 0.6" } cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} + resolution: + { + integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==, + } + engines: { node: ">=6.6.0" } cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==, + } + engines: { node: ">= 0.6" } core-js@3.39.0: - resolution: {integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==} + resolution: + { + integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==, + } cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - - cose-base@1.0.3: - resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} - - cose-base@2.2.0: - resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + resolution: + { + integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==, + } + engines: { node: ">= 0.10" } cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==, + } + engines: { node: ">=14" } peerDependencies: - typescript: '>=4.9.5' + typescript: ">=4.9.5" peerDependenciesMeta: typescript: optional: true cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + resolution: + { + integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==, + } + engines: { node: ">=10.14", npm: ">=6", yarn: ">=1" } hasBin: true - cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, + } + engines: { node: ">= 8" } cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, + } + engines: { node: ">= 8" } css-background-parser@0.1.0: - resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==} + resolution: + { + integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==, + } css-box-shadow@1.0.0-3: - resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==} + resolution: + { + integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==, + } css-color-keywords@1.0.0: - resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==, + } + engines: { node: ">=4" } css-gradient-parser@0.0.16: - resolution: {integrity: sha512-3O5QdqgFRUbXvK1x5INf1YkBz1UKSWqrd63vWsum8MNHDBYD5urm3QtxZbKU259OrEXNM26lP/MPY3d1IGkBgA==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-3O5QdqgFRUbXvK1x5INf1YkBz1UKSWqrd63vWsum8MNHDBYD5urm3QtxZbKU259OrEXNM26lP/MPY3d1IGkBgA==, + } + engines: { node: ">=16" } css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + resolution: + { + integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==, + } css-to-react-native@3.2.0: - resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + resolution: + { + integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==, + } css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==, + } + engines: { node: ">= 6" } cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, + } + engines: { node: ">=4" } hasBin: true csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - cytoscape-cose-bilkent@4.1.0: - resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} - peerDependencies: - cytoscape: ^3.2.0 - - cytoscape-fcose@2.2.0: - resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} - peerDependencies: - cytoscape: ^3.2.0 + resolution: + { + integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==, + } - cytoscape@3.30.2: - resolution: {integrity: sha512-oICxQsjW8uSaRmn4UK/jkczKOqTrVqt5/1WL0POiJUT2EKNc9STM4hYFHv917yu55aTBMFNRzymlJhVAiWPCxw==} - engines: {node: '>=0.10'} - - d3-array@2.12.1: - resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + csstype@3.2.3: + resolution: + { + integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, + } d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - - d3-axis@3.0.0: - resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} - engines: {node: '>=12'} - - d3-brush@3.0.0: - resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} - engines: {node: '>=12'} - - d3-chord@3.0.1: - resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==, + } + engines: { node: ">=12" } d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - d3-contour@4.0.2: - resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} - engines: {node: '>=12'} - - d3-delaunay@6.0.4: - resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} - engines: {node: '>=12'} - - d3-dispatch@3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} - engines: {node: '>=12'} - - d3-drag@3.0.0: - resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} - engines: {node: '>=12'} - - d3-dsv@3.0.1: - resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} - engines: {node: '>=12'} - hasBin: true + resolution: + { + integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==, + } + engines: { node: ">=12" } d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - - d3-fetch@3.0.1: - resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} - engines: {node: '>=12'} - - d3-force@3.0.0: - resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==, + } + engines: { node: ">=12" } d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} - - d3-geo@3.1.1: - resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} - engines: {node: '>=12'} - - d3-hierarchy@3.1.2: - resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==, + } + engines: { node: ">=12" } d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-path@1.0.9: - resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + resolution: + { + integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==, + } + engines: { node: ">=12" } d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} - engines: {node: '>=12'} - - d3-polygon@3.0.1: - resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} - engines: {node: '>=12'} - - d3-quadtree@3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} - engines: {node: '>=12'} - - d3-random@3.0.1: - resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} - engines: {node: '>=12'} - - d3-sankey@0.12.3: - resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} - - d3-scale-chromatic@3.1.0: - resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==, + } + engines: { node: ">=12" } d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-selection@3.0.0: - resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} - engines: {node: '>=12'} - - d3-shape@1.3.7: - resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + resolution: + { + integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==, + } + engines: { node: ">=12" } d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==, + } + engines: { node: ">=12" } d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==, + } + engines: { node: ">=12" } d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==, + } + engines: { node: ">=12" } d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - - d3-transition@3.0.1: - resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} - engines: {node: '>=12'} - peerDependencies: - d3-selection: 2 - 3 - - d3-zoom@3.0.0: - resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} - engines: {node: '>=12'} - - d3@7.9.0: - resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} - engines: {node: '>=12'} - - dagre-d3-es@7.0.10: - resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} + resolution: + { + integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==, + } + engines: { node: ">=12" } data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - - dayjs@1.11.13: - resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + resolution: + { + integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==, + } + engines: { node: ">= 14" } debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + resolution: + { + integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==, + } debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==, + } + engines: { node: ">=6.0" } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==, + } + engines: { node: ">=6.0" } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==, + } + engines: { node: ">=6.0" } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, + } + engines: { node: ">=6.0" } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true decimal.js-light@2.5.1: - resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} - - decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + resolution: + { + integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==, + } - decode-named-character-reference@1.1.0: - resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} + decode-named-character-reference@1.3.0: + resolution: + { + integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==, + } degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - - delaunator@5.0.1: - resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + resolution: + { + integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==, + } + engines: { node: ">= 14" } delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, + } + engines: { node: ">=0.4.0" } depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, + } + engines: { node: ">= 0.8" } dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, + } + engines: { node: ">=6" } detect-gpu@5.0.59: - resolution: {integrity: sha512-tBS01N6Lu7D2T6nmoA5or39u12PqtmO4RPCSfgvbgcOUGPhExU8RDiyUiT3iVxCKX9XTxIM1k+mVaeirLv6pwA==} + resolution: + { + integrity: sha512-tBS01N6Lu7D2T6nmoA5or39u12PqtmO4RPCSfgvbgcOUGPhExU8RDiyUiT3iVxCKX9XTxIM1k+mVaeirLv6pwA==, + } detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, + } + engines: { node: ">=8" } detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + resolution: + { + integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==, + } devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + resolution: + { + integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==, + } devtools-protocol@0.0.1508733: - resolution: {integrity: sha512-QJ1R5gtck6nDcdM+nlsaJXcelPEI7ZxSMw1ujHpO1c4+9l+Nue5qlebi9xO1Z2MGr92bFOQTW7/rrheh5hHxDg==} - - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + resolution: + { + integrity: sha512-QJ1R5gtck6nDcdM+nlsaJXcelPEI7ZxSMw1ujHpO1c4+9l+Nue5qlebi9xO1Z2MGr92bFOQTW7/rrheh5hHxDg==, + } dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + resolution: + { + integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==, + } domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + resolution: + { + integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, + } domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - dompurify@3.1.6: - resolution: {integrity: sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==} + resolution: + { + integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==, + } + engines: { node: ">= 4" } domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + resolution: + { + integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==, + } draco3d@1.5.7: - resolution: {integrity: sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==} + resolution: + { + integrity: sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==, + } dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, + } + engines: { node: ">= 0.4" } duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + resolution: + { + integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, + } ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + resolution: + { + integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==, + } ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - electron-to-chromium@1.5.129: - resolution: {integrity: sha512-JlXUemX4s0+9f8mLqib/bHH8gOHf5elKS6KeWG3sk3xozb/JTq/RLXIv8OKUWiK4Ah00Wm88EFj5PYkFr4RUPA==} + resolution: + { + integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, + } embla-carousel-react@8.6.0: - resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} + resolution: + { + integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==, + } peerDependencies: react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc embla-carousel-reactive-utils@8.6.0: - resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} + resolution: + { + integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==, + } peerDependencies: embla-carousel: 8.6.0 embla-carousel@8.6.0: - resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} + resolution: + { + integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==, + } emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + resolution: + { + integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==, + } emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + } encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==, + } + engines: { node: ">= 0.8" } encoding-sniffer@0.2.0: - resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + resolution: + { + integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==, + } end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + resolution: + { + integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==, + } + + enhanced-resolve@5.19.0: + resolution: + { + integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==, + } + engines: { node: ">=10.13.0" } entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} + resolution: + { + integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, + } + engines: { node: ">=0.12" } + + entities@6.0.1: + resolution: + { + integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==, + } + engines: { node: ">=0.12" } env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, + } + engines: { node: ">=6" } error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + resolution: + { + integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==, + } es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, + } + engines: { node: ">= 0.4" } es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, + } + engines: { node: ">= 0.4" } es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==, + } + engines: { node: ">= 0.4" } es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==, + } + engines: { node: ">= 0.4" } es-toolkit@1.43.0: - resolution: {integrity: sha512-SKCT8AsWvYzBBuUqMk4NPwFlSdqLpJwmy6AP322ERn8W2YLIB6JBXnwMI2Qsh2gfphT3q7EKAxKb23cvFHFwKA==} + resolution: + { + integrity: sha512-SKCT8AsWvYzBBuUqMk4NPwFlSdqLpJwmy6AP322ERn8W2YLIB6JBXnwMI2Qsh2gfphT3q7EKAxKb23cvFHFwKA==, + } + + esast-util-from-estree@2.0.0: + resolution: + { + integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==, + } + + esast-util-from-js@2.0.1: + resolution: + { + integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==, + } + + esbuild@0.27.3: + resolution: + { + integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==, + } + engines: { node: ">=18" } + hasBin: true escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: ">=6" } escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + resolution: + { + integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, + } escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, + } + engines: { node: ">=10" } escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, + } + engines: { node: ">=12" } escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==, + } + engines: { node: ">=6.0" } hasBin: true - esm@3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} - engines: {node: '>=6'} - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, + } + engines: { node: ">=4" } hasBin: true estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + } + engines: { node: ">=4.0" } estree-util-attach-comments@3.0.0: - resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + resolution: + { + integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==, + } estree-util-build-jsx@3.0.1: - resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} - - estree-util-is-identifier-name@2.1.0: - resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + resolution: + { + integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==, + } estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + resolution: + { + integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==, + } - estree-util-to-js@2.0.0: - resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + estree-util-scope@1.0.0: + resolution: + { + integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==, + } - estree-util-value-to-estree@1.3.0: - resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==} - engines: {node: '>=12.0.0'} + estree-util-to-js@2.0.0: + resolution: + { + integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==, + } - estree-util-value-to-estree@3.1.2: - resolution: {integrity: sha512-S0gW2+XZkmsx00tU2uJ4L9hUT7IFabbml9pHh2WQqFmAbxit++YGZne0sKJbNwkj9Wvg9E4uqWl4nCIFQMmfag==} + estree-util-value-to-estree@3.5.0: + resolution: + { + integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==, + } estree-util-visit@2.0.0: - resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + resolution: + { + integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==, + } estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + resolution: + { + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, + } esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, + } + engines: { node: ">=0.10.0" } etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, + } + engines: { node: ">= 0.6" } event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==, + } + engines: { node: ">=6" } eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + resolution: + { + integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, + } events-universal@1.0.1: - resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + resolution: + { + integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==, + } events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} + resolution: + { + integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, + } + engines: { node: ">=0.8.x" } eventsource-parser@3.0.3: - resolution: {integrity: sha512-nVpZkTMM9rF6AQ9gPJpFsNAMt48wIzB5TQgiTLdHiuO8XEDhUgZEhqKlZWXbIzo9VmJ/HvysHqEaVeD5v9TPvA==} - engines: {node: '>=20.0.0'} + resolution: + { + integrity: sha512-nVpZkTMM9rF6AQ9gPJpFsNAMt48wIzB5TQgiTLdHiuO8XEDhUgZEhqKlZWXbIzo9VmJ/HvysHqEaVeD5v9TPvA==, + } + engines: { node: ">=20.0.0" } eventsource@3.0.7: - resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} - engines: {node: '>=18.0.0'} - - execa@0.8.0: - resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==, + } + engines: { node: ">=18.0.0" } express-rate-limit@7.5.1: - resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==} - engines: {node: '>= 16'} + resolution: + { + integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==, + } + engines: { node: ">= 16" } peerDependencies: - express: '>= 4.11' + express: ">= 4.11" express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} - engines: {node: '>= 18'} - - extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==, + } + engines: { node: ">= 18" } extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + resolution: + { + integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, + } extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} + resolution: + { + integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==, + } + engines: { node: ">= 10.17.0" } hasBin: true fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + } fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + resolution: + { + integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==, + } fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + resolution: + { + integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, + } + engines: { node: ">=8.6.0" } fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, + } fast-xml-parser@5.2.5: - resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} + resolution: + { + integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==, + } + hasBin: true + + fast-xml-parser@5.3.6: + resolution: + { + integrity: sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==, + } hasBin: true fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + resolution: + { + integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==, + } fault@1.0.4: - resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - - fault@2.0.1: - resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + resolution: + { + integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==, + } fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + resolution: + { + integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==, + } + + fdir@6.5.0: + resolution: + { + integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, + } + engines: { node: ">=12.0.0" } + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true fflate@0.4.8: - resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} + resolution: + { + integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==, + } fflate@0.6.10: - resolution: {integrity: sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==} + resolution: + { + integrity: sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==, + } fflate@0.7.4: - resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + resolution: + { + integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==, + } fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + resolution: + { + integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==, + } fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + } + engines: { node: ">=8" } finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} - - flexsearch@0.7.43: - resolution: {integrity: sha512-c5o/+Um8aqCSOXGcZoqZOm+NqtVwNsvVpWv6lfmSclU954O3wvQKxxK8zj74fPaSJbXpSLTs4PRhh+wnoCXnKg==} + resolution: + { + integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==, + } + engines: { node: ">= 0.8" } follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==, + } + engines: { node: ">=4.0" } peerDependencies: - debug: '*' + debug: "*" peerDependenciesMeta: debug: optional: true - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} - form-data-encoder@1.7.2: - resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + resolution: + { + integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==, + } form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==, + } + engines: { node: ">= 6" } format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} + resolution: + { + integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==, + } + engines: { node: ">=0.4.x" } formdata-node@4.4.1: - resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} - engines: {node: '>= 12.20'} + resolution: + { + integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==, + } + engines: { node: ">= 12.20" } forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + resolution: + { + integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==, + } + engines: { node: ">= 0.6" } framer-motion@11.15.0: - resolution: {integrity: sha512-MLk8IvZntxOMg7lDBLw2qgTHHv664bYoYmnFTmE0Gm/FW67aOJk0WM3ctMcG+Xhcv+vh5uyyXwxvxhSeJzSe+w==} + resolution: + { + integrity: sha512-MLk8IvZntxOMg7lDBLw2qgTHHv664bYoYmnFTmE0Gm/FW67aOJk0WM3ctMcG+Xhcv+vh5uyyXwxvxhSeJzSe+w==, + } peerDependencies: - '@emotion/is-prop-valid': '*' + "@emotion/is-prop-valid": "*" react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@emotion/is-prop-valid': + "@emotion/is-prop-valid": + optional: true + react: + optional: true + react-dom: + optional: true + + framer-motion@12.34.2: + resolution: + { + integrity: sha512-CcnYTzbRybm1/OE8QLXfXI8gR1cx5T4dF3D2kn5IyqsGNeLAKl2iFHb2BzFyXBGqESntDt6rPYl4Jhrb7tdB8g==, + } + peerDependencies: + "@emotion/is-prop-valid": "*" + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@emotion/is-prop-valid": optional: true react: optional: true @@ -3721,1056 +6051,1877 @@ packages: optional: true fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==, + } + engines: { node: ">= 0.8" } + + fumadocs-core@16.6.3: + resolution: + { + integrity: sha512-mBeQg1s6lP/0GcjHj5F/x40GaUYp8oYCSEygbfMBl4hykXQuINZdEsMgTcCU7OG5G5VH3MN7XDbqXRVJXtJylg==, + } + peerDependencies: + "@mdx-js/mdx": "*" + "@mixedbread/sdk": ^0.46.0 + "@orama/core": 1.x.x + "@oramacloud/client": 2.x.x + "@tanstack/react-router": 1.x.x + "@types/estree-jsx": "*" + "@types/hast": "*" + "@types/mdast": "*" + "@types/react": ^19.2.14 + algoliasearch: 5.x.x + lucide-react: "*" + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + react-router: 7.x.x + waku: ^0.26.0 || ^0.27.0 || ^1.0.0 + zod: 4.x.x + peerDependenciesMeta: + "@mdx-js/mdx": + optional: true + "@mixedbread/sdk": + optional: true + "@orama/core": + optional: true + "@oramacloud/client": + optional: true + "@tanstack/react-router": + optional: true + "@types/estree-jsx": + optional: true + "@types/hast": + optional: true + "@types/mdast": + optional: true + "@types/react": + optional: true + algoliasearch: + optional: true + lucide-react: + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + react-router: + optional: true + waku: + optional: true + zod: + optional: true - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + fumadocs-mdx@14.2.7: + resolution: + { + integrity: sha512-Q2W79F7wpwhq4HoYPw9GnMpf5ZmpdU7YzZND7EWwwOiWddfyzPh6EH/z7MFhhdhsTqRh9/kwwsu9XslWDRRPsg==, + } + hasBin: true + peerDependencies: + "@fumadocs/mdx-remote": ^1.4.0 + "@types/mdast": "*" + "@types/mdx": "*" + "@types/react": ^19.2.14 + fumadocs-core: ^15.0.0 || ^16.0.0 + mdast-util-directive: "*" + mdast-util-mdx-jsx: "*" + next: ^15.3.0 || ^16.0.0 + react: "*" + vite: 6.x.x || 7.x.x + peerDependenciesMeta: + "@fumadocs/mdx-remote": + optional: true + "@types/mdast": + optional: true + "@types/mdx": + optional: true + "@types/react": + optional: true + mdast-util-directive: + optional: true + mdast-util-mdx-jsx: + optional: true + next: + optional: true + react: + optional: true + vite: + optional: true + + fumadocs-ui@16.6.3: + resolution: + { + integrity: sha512-QOjXZcdzHmCP1MFIC3tZJYGCFWbOUYFg2vKrcwPOWfvJ69szcjKJ/8laeS82vXZ+DL1tPWAC4gzDTF3Qp9DI8Q==, + } + peerDependencies: + "@types/react": ^19.2.14 + fumadocs-core: 16.6.3 + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + peerDependenciesMeta: + "@types/react": + optional: true + next: + optional: true function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, + } geist@1.3.1: - resolution: {integrity: sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==} + resolution: + { + integrity: sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==, + } peerDependencies: - next: '>=13.2.0' + next: ">=13.2.0" generic-pool@3.9.0: - resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==, + } + engines: { node: ">= 4" } get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, + } + engines: { node: 6.* || 8.* || >= 10.* } get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==, + } + engines: { node: ">= 0.4" } get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==, + } + engines: { node: ">=6" } get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@3.0.0: - resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, + } + engines: { node: ">= 0.4" } get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, + } + engines: { node: ">=8" } get-uri@6.0.4: - resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==, + } + engines: { node: ">= 14" } github-slugger@2.0.0: - resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + resolution: + { + integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==, + } glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + } + engines: { node: ">= 6" } glsl-noise@0.0.0: - resolution: {integrity: sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w==} + resolution: + { + integrity: sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w==, + } gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, + } + engines: { node: ">= 0.4" } gpt3-tokenizer@1.1.5: - resolution: {integrity: sha512-O9iCL8MqGR0Oe9wTh0YftzIbysypNQmS5a5JG3cB3M4LMYjlAVvNnf8LUzVY9MrI7tj+YLY356uHtO2lLX2HpA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-O9iCL8MqGR0Oe9wTh0YftzIbysypNQmS5a5JG3cB3M4LMYjlAVvNnf8LUzVY9MrI7tj+YLY356uHtO2lLX2HpA==, + } + engines: { node: ">=12" } graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - - hachure-fill@0.5.2: - resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + resolution: + { + integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==, + } + engines: { node: ">=10" } harden-react-markdown@1.0.2: - resolution: {integrity: sha512-NqDXUI231bGvnjdYgidlXCIsya4aqy6ee4Jhf+V60IiRU18yFVSATeEHPdylUAw7Ye637HLLOXxRb4yqp+vSuA==} + resolution: + { + integrity: sha512-NqDXUI231bGvnjdYgidlXCIsya4aqy6ee4Jhf+V60IiRU18yFVSATeEHPdylUAw7Ye637HLLOXxRb4yqp+vSuA==, + } peerDependencies: - react: '>=16.8.0' - react-markdown: '>=9.0.0' - - has-flag@2.0.0: - resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} - engines: {node: '>=0.10.0'} + react: ">=16.8.0" + react-markdown: ">=9.0.0" has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, + } + engines: { node: ">= 0.4" } has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, + } + engines: { node: ">= 0.4" } hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, + } + engines: { node: ">= 0.4" } hast-util-from-dom@5.0.0: - resolution: {integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==} + resolution: + { + integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==, + } hast-util-from-html-isomorphic@2.0.0: - resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + resolution: + { + integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==, + } hast-util-from-html@2.0.3: - resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + resolution: + { + integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==, + } - hast-util-from-parse5@8.0.2: - resolution: {integrity: sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A==} + hast-util-from-parse5@8.0.3: + resolution: + { + integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==, + } hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + resolution: + { + integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==, + } hast-util-parse-selector@2.2.5: - resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} + resolution: + { + integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==, + } hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - - hast-util-raw@9.0.4: - resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} - - hast-util-to-estree@3.1.0: - resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} - - hast-util-to-html@9.0.3: - resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + resolution: + { + integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==, + } + + hast-util-raw@9.1.0: + resolution: + { + integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==, + } + + hast-util-to-estree@3.1.3: + resolution: + { + integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==, + } + + hast-util-to-html@9.0.5: + resolution: + { + integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==, + } hast-util-to-jsx-runtime@2.3.0: - resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} - - hast-util-to-jsx-runtime@2.3.2: - resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==} + resolution: + { + integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==, + } hast-util-to-jsx-runtime@2.3.6: - resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + resolution: + { + integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==, + } - hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + hast-util-to-parse5@8.0.1: + resolution: + { + integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==, + } hast-util-to-string@3.0.1: - resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + resolution: + { + integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==, + } hast-util-to-text@4.0.2: - resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + resolution: + { + integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==, + } hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + resolution: + { + integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==, + } hastscript@6.0.0: - resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + resolution: + { + integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==, + } hastscript@8.0.0: - resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + resolution: + { + integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==, + } - hastscript@9.0.0: - resolution: {integrity: sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==} + hastscript@9.0.1: + resolution: + { + integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==, + } hex-rgb@4.3.0: - resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==, + } + engines: { node: ">=6" } highlight.js@10.7.3: - resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + resolution: + { + integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==, + } highlightjs-vue@1.0.0: - resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} + resolution: + { + integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==, + } hls.js@1.5.18: - resolution: {integrity: sha512-znxR+2jecWluu/0KOBqUcvVyAB5tLff10vjMGrpAlz1eFY+ZhF1bY3r82V+Bk7WJdk03iTjtja9KFFz5BrqjSA==} + resolution: + { + integrity: sha512-znxR+2jecWluu/0KOBqUcvVyAB5tLff10vjMGrpAlz1eFY+ZhF1bY3r82V+Bk7WJdk03iTjtja9KFFz5BrqjSA==, + } html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + resolution: + { + integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, + } html-link-extractor@1.0.5: - resolution: {integrity: sha512-ADd49pudM157uWHwHQPUSX4ssMsvR/yHIswOR5CUfBdK9g9ZYGMhVSE6KZVHJ6kCkR0gH4htsfzU6zECDNVwyw==} + resolution: + { + integrity: sha512-ADd49pudM157uWHwHQPUSX4ssMsvR/yHIswOR5CUfBdK9g9ZYGMhVSE6KZVHJ6kCkR0gH4htsfzU6zECDNVwyw==, + } html-url-attributes@3.0.0: - resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==} + resolution: + { + integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==, + } html-url-attributes@3.0.1: - resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} + resolution: + { + integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==, + } html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + resolution: + { + integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==, + } htmlparser2@9.1.0: - resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + resolution: + { + integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==, + } http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==, + } + engines: { node: ">= 0.8" } http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==, + } + engines: { node: ">= 14" } https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==, + } + engines: { node: ">= 14" } humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + resolution: + { + integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==, + } humps@2.0.1: - resolution: {integrity: sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==} + resolution: + { + integrity: sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==, + } iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, + } + engines: { node: ">=0.10.0" } ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + resolution: + { + integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, + } + + image-size@2.0.2: + resolution: + { + integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==, + } + engines: { node: ">=16.x" } + hasBin: true immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + resolution: + { + integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==, + } immer@10.1.3: - resolution: {integrity: sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==} + resolution: + { + integrity: sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==, + } immer@11.1.0: - resolution: {integrity: sha512-dlzb07f5LDY+tzs+iLCSXV2yuhaYfezqyZQc+n6baLECWkOMEWxkECAOnXL0ba7lsA25fM9b2jtzpu/uxo1a7g==} + resolution: + { + integrity: sha512-dlzb07f5LDY+tzs+iLCSXV2yuhaYfezqyZQc+n6baLECWkOMEWxkECAOnXL0ba7lsA25fM9b2jtzpu/uxo1a7g==, + } + + immer@11.1.4: + resolution: + { + integrity: sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==, + } import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, + } + engines: { node: ">=6" } inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + } - inline-style-parser@0.2.3: - resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==} - - inline-style-parser@0.2.4: - resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - - internmap@1.0.1: - resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + inline-style-parser@0.2.7: + resolution: + { + integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==, + } internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==, + } + engines: { node: ">=12" } ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} + resolution: + { + integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==, + } + engines: { node: ">= 12" } ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==, + } + engines: { node: ">= 0.10" } is-absolute-url@4.0.1: - resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + resolution: + { + integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==, + } is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + resolution: + { + integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==, + } is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + resolution: + { + integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==, + } is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + resolution: + { + integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==, + } is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-arrayish@0.3.4: - resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-core-module@2.16.0: - resolution: {integrity: sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, + } is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + resolution: + { + integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==, + } is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - - is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==, + } is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: ">=0.10.0" } is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + } + engines: { node: ">=8" } is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: ">=0.10.0" } is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + resolution: + { + integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==, + } is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + resolution: + { + integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==, + } is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: ">=0.12.0" } is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==, + } + engines: { node: ">=12" } is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==, + } + engines: { node: ">=0.10.0" } is-promise@2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + resolution: + { + integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==, + } is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - - is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + resolution: + { + integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==, + } is-relative-url@4.0.0: - resolution: {integrity: sha512-PkzoL1qKAYXNFct5IKdKRH/iBQou/oCC85QhXj6WKtUQBliZ4Yfd3Zk27RHu9KQG8r6zgvAA2AQKC9p+rqTszg==} - engines: {node: '>=14.16'} - - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-PkzoL1qKAYXNFct5IKdKRH/iBQou/oCC85QhXj6WKtUQBliZ4Yfd3Zk27RHu9KQG8r6zgvAA2AQKC9p+rqTszg==, + } + engines: { node: ">=14.16" } is-what@4.1.16: - resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} - engines: {node: '>=12.13'} + resolution: + { + integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==, + } + engines: { node: ">=12.13" } isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } its-fine@1.2.5: - resolution: {integrity: sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==} + resolution: + { + integrity: sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==, + } peerDependencies: - react: '>=18.0' - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + react: ">=18.0" - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + jiti@2.6.1: + resolution: + { + integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==, + } hasBin: true jose@5.10.0: - resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} + resolution: + { + integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==, + } jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + resolution: + { + integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==, + } js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + resolution: + { + integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, + } hasBin: true js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + resolution: + { + integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, + } + hasBin: true + + js-yaml@4.1.1: + resolution: + { + integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==, + } hasBin: true jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + resolution: + { + integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==, + } json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, + } json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + resolution: + { + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, + } json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + resolution: + { + integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==, + } jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} + resolution: + { + integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==, + } + engines: { node: ">=12", npm: ">=6" } jwa@1.4.2: - resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} + resolution: + { + integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==, + } jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + resolution: + { + integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==, + } katex@0.16.22: - resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} + resolution: + { + integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==, + } hasBin: true - khroma@2.1.0: - resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + langfuse-core@3.38.4: + resolution: + { + integrity: sha512-onTAqcEGhoXuBgqDFXe2t+bt9Vi+5YChRgdz3voM49JKoHwtVZQiUdqTfjSivGR75eSbYoiaIL8IRoio+jaqwg==, + } + engines: { node: ">=18" } - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} + langfuse@3.38.4: + resolution: + { + integrity: sha512-2UqMeHLl3DGNX1Nh/cO4jGhk7TzDJ6gjQLlyS9rwFCKVO81xot6b58yeTsTB5YrWupWsOxQtMNoQYIQGOUlH9Q==, + } + engines: { node: ">=18" } - kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + lie@3.3.0: + resolution: + { + integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==, + } + + lightningcss-android-arm64@1.31.1: + resolution: + { + integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [android] - langfuse-core@3.38.4: - resolution: {integrity: sha512-onTAqcEGhoXuBgqDFXe2t+bt9Vi+5YChRgdz3voM49JKoHwtVZQiUdqTfjSivGR75eSbYoiaIL8IRoio+jaqwg==} - engines: {node: '>=18'} + lightningcss-darwin-arm64@1.31.1: + resolution: + { + integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [darwin] - langfuse@3.38.4: - resolution: {integrity: sha512-2UqMeHLl3DGNX1Nh/cO4jGhk7TzDJ6gjQLlyS9rwFCKVO81xot6b58yeTsTB5YrWupWsOxQtMNoQYIQGOUlH9Q==} - engines: {node: '>=18'} + lightningcss-darwin-x64@1.31.1: + resolution: + { + integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [darwin] - langium@3.0.0: - resolution: {integrity: sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==} - engines: {node: '>=16.0.0'} + lightningcss-freebsd-x64@1.31.1: + resolution: + { + integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [freebsd] - layout-base@1.0.2: - resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + lightningcss-linux-arm-gnueabihf@1.31.1: + resolution: + { + integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm] + os: [linux] - layout-base@2.0.1: - resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + lightningcss-linux-arm64-gnu@1.31.1: + resolution: + { + integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [linux] - lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lightningcss-linux-arm64-musl@1.31.1: + resolution: + { + integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [linux] - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} + lightningcss-linux-x64-gnu@1.31.1: + resolution: + { + integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.31.1: + resolution: + { + integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.31.1: + resolution: + { + integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.31.1: + resolution: + { + integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [win32] + + lightningcss@1.31.1: + resolution: + { + integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==, + } + engines: { node: ">= 12.0.0" } linebreak@1.1.0: - resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==} + resolution: + { + integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==, + } lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + } link-check@5.4.0: - resolution: {integrity: sha512-0Pf4xBVUnwJdbDgpBlhHNmWDtbVjHTpIFs+JaBuIsC9PKRxjv4KMGCO2Gc8lkVnqMf9B/yaNY+9zmMlO5MyToQ==} + resolution: + { + integrity: sha512-0Pf4xBVUnwJdbDgpBlhHNmWDtbVjHTpIFs+JaBuIsC9PKRxjv4KMGCO2Gc8lkVnqMf9B/yaNY+9zmMlO5MyToQ==, + } livekit-client@2.17.1: - resolution: {integrity: sha512-pbJOSRVzZOoe9fL3RWjVxrYjsPo9npIVKGSl2Jhm1x4GxC6uubPWktWPxNLOnrshgxwAKrs2VeLY7LxBOtU1NQ==} + resolution: + { + integrity: sha512-pbJOSRVzZOoe9fL3RWjVxrYjsPo9npIVKGSl2Jhm1x4GxC6uubPWktWPxNLOnrshgxwAKrs2VeLY7LxBOtU1NQ==, + } peerDependencies: - '@types/dom-mediacapture-record': ^1 + "@types/dom-mediacapture-record": ^1 livekit-server-sdk@2.15.0: - resolution: {integrity: sha512-HmzjWnwEwwShu8yUf7VGFXdc+BuMJR5pnIY4qsdlhqI9d9wDgq+4cdTEHg0NEBaiGnc6PCOBiaTYgmIyVJ0S9w==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-HmzjWnwEwwShu8yUf7VGFXdc+BuMJR5pnIY4qsdlhqI9d9wDgq+4cdTEHg0NEBaiGnc6PCOBiaTYgmIyVJ0S9w==, + } + engines: { node: ">=18" } local-pkg@0.5.0: - resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==, + } + engines: { node: ">=14" } lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + resolution: + { + integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, + } lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + resolution: + { + integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==, + } lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + resolution: + { + integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==, + } lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + resolution: + { + integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==, + } lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + resolution: + { + integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==, + } lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + resolution: + { + integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==, + } lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + resolution: + { + integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==, + } lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + resolution: + { + integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==, + } loglevel@1.9.2: - resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} - engines: {node: '>= 0.6.0'} + resolution: + { + integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==, + } + engines: { node: ">= 0.6.0" } long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + resolution: + { + integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==, + } longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + resolution: + { + integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==, + } loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + resolution: + { + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, + } hasBin: true lowlight@1.20.0: - resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + resolution: + { + integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==, + } lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==, + } + engines: { node: ">=12" } lucide-react@0.469.0: - resolution: {integrity: sha512-28vvUnnKQ/dBwiCQtwJw7QauYnE7yd2Cyp4tTTJpvglX4EMpbflcdBgrgToX2j71B3YvugK/NH3BGUk+E/p/Fw==} + resolution: + { + integrity: sha512-28vvUnnKQ/dBwiCQtwJw7QauYnE7yd2Cyp4tTTJpvglX4EMpbflcdBgrgToX2j71B3YvugK/NH3BGUk+E/p/Fw==, + } peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 lucide-react@0.503.0: - resolution: {integrity: sha512-HGGkdlPWQ0vTF8jJ5TdIqhQXZi6uh3LnNgfZ8MHiuxFfX3RZeA79r2MW2tHAZKlAVfoNE8esm3p+O6VkIvpj6w==} + resolution: + { + integrity: sha512-HGGkdlPWQ0vTF8jJ5TdIqhQXZi6uh3LnNgfZ8MHiuxFfX3RZeA79r2MW2tHAZKlAVfoNE8esm3p+O6VkIvpj6w==, + } + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + lucide-react@0.570.0: + resolution: + { + integrity: sha512-qGnQ8bEPJLMseKo7kI6jK6GW6Y2Yl4PpqoWbroNsobZ8+tZR4SUuO4EXK3oWCdZr48SZ7PnaulTkvzkKvG/Iqg==, + } peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 maath@0.10.8: - resolution: {integrity: sha512-tRvbDF0Pgqz+9XUa4jjfgAQ8/aPKmQdWXilFu2tMy4GWj4NOsx99HlULO4IeREfbO3a0sA145DZYyvXPkybm0g==} + resolution: + { + integrity: sha512-tRvbDF0Pgqz+9XUa4jjfgAQ8/aPKmQdWXilFu2tMy4GWj4NOsx99HlULO4IeREfbO3a0sA145DZYyvXPkybm0g==, + } peerDependencies: - '@types/three': '>=0.134.0' - three: '>=0.134.0' + "@types/three": ">=0.134.0" + three: ">=0.134.0" map-obj@5.0.0: - resolution: {integrity: sha512-2L3MIgJynYrZ3TYMriLDLWocz15okFakV6J12HXvMXDHui2x/zgChzg1u9mFFGbbGWE+GsLpQByt4POb9Or+uA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-2L3MIgJynYrZ3TYMriLDLWocz15okFakV6J12HXvMXDHui2x/zgChzg1u9mFFGbbGWE+GsLpQByt4POb9Or+uA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + magic-string@0.30.21: + resolution: + { + integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, + } markdown-extensions@2.0.0: - resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==, + } + engines: { node: ">=16" } markdown-link-check@3.13.7: - resolution: {integrity: sha512-Btn3HU8s2Uyh1ZfzmyZEkp64zp2+RAjwfQt1u4swq2Xa6w37OW0T2inQZrkSNVxDSa2jSN2YYhw/JkAp5jF1PQ==} + resolution: + { + integrity: sha512-Btn3HU8s2Uyh1ZfzmyZEkp64zp2+RAjwfQt1u4swq2Xa6w37OW0T2inQZrkSNVxDSa2jSN2YYhw/JkAp5jF1PQ==, + } hasBin: true markdown-link-extractor@4.0.2: - resolution: {integrity: sha512-5cUOu4Vwx1wenJgxaudsJ8xwLUMN7747yDJX3V/L7+gi3e4MsCm7w5nbrDQQy8nEfnl4r5NV3pDXMAjhGXYXAw==} + resolution: + { + integrity: sha512-5cUOu4Vwx1wenJgxaudsJ8xwLUMN7747yDJX3V/L7+gi3e4MsCm7w5nbrDQQy8nEfnl4r5NV3pDXMAjhGXYXAw==, + } markdown-table@3.0.4: - resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + resolution: + { + integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==, + } marked@12.0.2: - resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} - engines: {node: '>= 18'} - hasBin: true - - marked@13.0.3: - resolution: {integrity: sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==, + } + engines: { node: ">= 18" } hasBin: true marked@15.0.12: - resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==, + } + engines: { node: ">= 18" } hasBin: true marked@16.3.0: - resolution: {integrity: sha512-K3UxuKu6l6bmA5FUwYho8CfJBlsUWAooKtdGgMcERSpF7gcBUrCGsLH7wDaaNOzwq18JzSUDyoEb/YsrqMac3w==} - engines: {node: '>= 20'} + resolution: + { + integrity: sha512-K3UxuKu6l6bmA5FUwYho8CfJBlsUWAooKtdGgMcERSpF7gcBUrCGsLH7wDaaNOzwq18JzSUDyoEb/YsrqMac3w==, + } + engines: { node: ">= 20" } hasBin: true math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mathjax-full@3.2.2: - resolution: {integrity: sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==} + resolution: + { + integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, + } + engines: { node: ">= 0.4" } mdast-util-find-and-replace@3.0.2: - resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + resolution: + { + integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==, + } mdast-util-from-markdown@2.0.1: - resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} + resolution: + { + integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==, + } mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} - - mdast-util-frontmatter@2.0.1: - resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + resolution: + { + integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==, + } mdast-util-gfm-autolink-literal@2.0.1: - resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + resolution: + { + integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==, + } mdast-util-gfm-footnote@2.1.0: - resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + resolution: + { + integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==, + } mdast-util-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + resolution: + { + integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==, + } mdast-util-gfm-table@2.0.0: - resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + resolution: + { + integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==, + } mdast-util-gfm-task-list-item@2.0.0: - resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + resolution: + { + integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==, + } mdast-util-gfm@3.1.0: - resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + resolution: + { + integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==, + } mdast-util-math@3.0.0: - resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} - - mdast-util-mdx-expression@2.0.0: - resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} + resolution: + { + integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==, + } mdast-util-mdx-expression@2.0.1: - resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} - - mdast-util-mdx-jsx@3.1.2: - resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==} - - mdast-util-mdx-jsx@3.1.3: - resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} + resolution: + { + integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==, + } mdast-util-mdx-jsx@3.2.0: - resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + resolution: + { + integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==, + } mdast-util-mdx@3.0.0: - resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + resolution: + { + integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==, + } mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + resolution: + { + integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==, + } mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + resolution: + { + integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==, + } mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + resolution: + { + integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==, + } + + mdast-util-to-hast@13.2.1: + resolution: + { + integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==, + } mdast-util-to-markdown@2.1.0: - resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + resolution: + { + integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==, + } mdast-util-to-markdown@2.1.2: - resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + resolution: + { + integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==, + } mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + resolution: + { + integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==, + } media-captions@1.0.4: - resolution: {integrity: sha512-cyDNmuZvvO4H27rcBq2Eudxo9IZRDCOX/I7VEyqbxsEiD2Ei7UYUhG/Sc5fvMZjmathgz3fEK7iAKqvpY+Ux1w==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-cyDNmuZvvO4H27rcBq2Eudxo9IZRDCOX/I7VEyqbxsEiD2Ei7UYUhG/Sc5fvMZjmathgz3fEK7iAKqvpY+Ux1w==, + } + engines: { node: ">=16" } media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==, + } + engines: { node: ">= 0.8" } merge-anything@5.1.7: - resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} - engines: {node: '>=12.13'} + resolution: + { + integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==, + } + engines: { node: ">=12.13" } merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==, + } + engines: { node: ">=18" } merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - mermaid@11.3.0: - resolution: {integrity: sha512-fFmf2gRXLtlGzug4wpIGN+rQdZ30M8IZEB1D3eZkXNqC7puhqeURBcD/9tbwXsqBO+A6Nzzo3MSSepmnw5xSeg==} + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, + } + engines: { node: ">= 8" } meshline@3.3.1: - resolution: {integrity: sha512-/TQj+JdZkeSUOl5Mk2J7eLcYTLiQm2IDzmlSvYm7ov15anEcDJ92GHqqazxTSreeNgfnYu24kiEvvv0WlbCdFQ==} + resolution: + { + integrity: sha512-/TQj+JdZkeSUOl5Mk2J7eLcYTLiQm2IDzmlSvYm7ov15anEcDJ92GHqqazxTSreeNgfnYu24kiEvvv0WlbCdFQ==, + } peerDependencies: - three: '>=0.137' + three: ">=0.137" - meshoptimizer@0.18.1: - resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==} - - mhchemparser@4.2.1: - resolution: {integrity: sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==} + meshoptimizer@1.0.1: + resolution: + { + integrity: sha512-Vix+QlA1YYT3FwmBBZ+49cE5y/b+pRrcXKqGpS5ouh33d3lSp2PoTpCw19E0cKDFWalembrHnIaZetf27a+W2g==, + } micromark-core-commonmark@2.0.3: - resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} - - micromark-extension-frontmatter@2.0.0: - resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + resolution: + { + integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==, + } micromark-extension-gfm-autolink-literal@2.1.0: - resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + resolution: + { + integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==, + } micromark-extension-gfm-footnote@2.1.0: - resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + resolution: + { + integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==, + } micromark-extension-gfm-strikethrough@2.1.0: - resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + resolution: + { + integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==, + } micromark-extension-gfm-table@2.1.1: - resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + resolution: + { + integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==, + } micromark-extension-gfm-tagfilter@2.0.0: - resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + resolution: + { + integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==, + } micromark-extension-gfm-task-list-item@2.1.0: - resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + resolution: + { + integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==, + } micromark-extension-gfm@3.0.0: - resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + resolution: + { + integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==, + } micromark-extension-math@3.0.0: - resolution: {integrity: sha512-iJ2Q28vBoEovLN5o3GO12CpqorQRYDPT+p4zW50tGwTfJB+iv/VnB6Ini+gqa24K97DwptMBBIvVX6Bjk49oyQ==} - - micromark-extension-mdx-expression@3.0.0: - resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} - - micromark-extension-mdx-jsx@3.0.1: - resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==} + resolution: + { + integrity: sha512-iJ2Q28vBoEovLN5o3GO12CpqorQRYDPT+p4zW50tGwTfJB+iv/VnB6Ini+gqa24K97DwptMBBIvVX6Bjk49oyQ==, + } + + micromark-extension-mdx-expression@3.0.1: + resolution: + { + integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==, + } + + micromark-extension-mdx-jsx@3.0.2: + resolution: + { + integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==, + } micromark-extension-mdx-md@2.0.0: - resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + resolution: + { + integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==, + } micromark-extension-mdxjs-esm@3.0.0: - resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + resolution: + { + integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==, + } micromark-extension-mdxjs@3.0.0: - resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + resolution: + { + integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==, + } micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + resolution: + { + integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==, + } micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + resolution: + { + integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==, + } - micromark-factory-mdx-expression@2.0.2: - resolution: {integrity: sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==} + micromark-factory-mdx-expression@2.0.3: + resolution: + { + integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==, + } micromark-factory-space@2.0.0: - resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + resolution: + { + integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==, + } micromark-factory-space@2.0.1: - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + resolution: + { + integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==, + } micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + resolution: + { + integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==, + } micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + resolution: + { + integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==, + } micromark-util-character@2.1.0: - resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + resolution: + { + integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==, + } micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + resolution: + { + integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==, + } micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + resolution: + { + integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==, + } micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + resolution: + { + integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==, + } micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - - micromark-util-decode-numeric-character-reference@2.0.1: - resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + resolution: + { + integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==, + } micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - - micromark-util-decode-string@2.0.0: - resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + resolution: + { + integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==, + } micromark-util-decode-string@2.0.1: - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + resolution: + { + integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==, + } micromark-util-encode@2.0.0: - resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + resolution: + { + integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==, + } micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + resolution: + { + integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==, + } - micromark-util-events-to-acorn@2.0.2: - resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} + micromark-util-events-to-acorn@2.0.3: + resolution: + { + integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==, + } micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + resolution: + { + integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==, + } micromark-util-normalize-identifier@2.0.0: - resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + resolution: + { + integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==, + } micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + resolution: + { + integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==, + } micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - - micromark-util-sanitize-uri@2.0.0: - resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + resolution: + { + integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==, + } micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + resolution: + { + integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==, + } micromark-util-subtokenize@2.0.1: - resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} + resolution: + { + integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==, + } micromark-util-subtokenize@2.1.0: - resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + resolution: + { + integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==, + } micromark-util-symbol@2.0.0: - resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + resolution: + { + integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==, + } micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + resolution: + { + integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==, + } micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + resolution: + { + integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==, + } micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + resolution: + { + integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==, + } micromark@4.0.0: - resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + resolution: + { + integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==, + } micromark@4.0.2: - resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + resolution: + { + integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==, + } micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + } + engines: { node: ">=8.6" } mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, + } + engines: { node: ">= 0.6" } mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==, + } + engines: { node: ">= 0.6" } mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, + } + engines: { node: ">= 0.6" } mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==, + } + engines: { node: ">= 0.6" } minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, + } mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - - mj-context-menu@0.6.1: - resolution: {integrity: sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==} - - mlly@1.7.2: - resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} + resolution: + { + integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==, + } motion-dom@11.14.3: - resolution: {integrity: sha512-lW+D2wBy5vxLJi6aCP0xyxTxlTfiu+b+zcpVbGVFUxotwThqhdpPRSmX8xztAgtZMPMeU0WGVn/k1w4I+TbPqA==} + resolution: + { + integrity: sha512-lW+D2wBy5vxLJi6aCP0xyxTxlTfiu+b+zcpVbGVFUxotwThqhdpPRSmX8xztAgtZMPMeU0WGVn/k1w4I+TbPqA==, + } + + motion-dom@12.34.2: + resolution: + { + integrity: sha512-n7gknp7gHcW7DUcmet0JVPLVHmE3j9uWwDp5VbE3IkCNnW5qdu0mOhjNYzXMkrQjrgr+h6Db3EDM2QBhW2qNxQ==, + } motion-utils@11.14.3: - resolution: {integrity: sha512-Xg+8xnqIJTpr0L/cidfTTBFkvRw26ZtGGuIhA94J9PQ2p4mEa06Xx7QVYZH0BP+EpMSaDlu+q0I0mmvwADPsaQ==} + resolution: + { + integrity: sha512-Xg+8xnqIJTpr0L/cidfTTBFkvRw26ZtGGuIhA94J9PQ2p4mEa06Xx7QVYZH0BP+EpMSaDlu+q0I0mmvwADPsaQ==, + } + + motion-utils@12.29.2: + resolution: + { + integrity: sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==, + } + + motion@12.34.2: + resolution: + { + integrity: sha512-QAthwCtW6N0TpZ+bBmBMzdwuftoay2yFV2DT44jRcUQhPbFPdAX+pjzmIUNM3sMYDD5OAraJagRGAKE8q5OsmA==, + } + peerDependencies: + "@emotion/is-prop-valid": "*" + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@emotion/is-prop-valid": + optional: true + react: + optional: true + react-dom: + optional: true - mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} - engines: {node: '>=10'} + mrmime@2.0.1: + resolution: + { + integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==, + } + engines: { node: ">=10" } ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + resolution: + { + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, + } ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + resolution: + { + integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==, + } hasBin: true - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + resolution: + { + integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true nanoid@5.1.5: - resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} - engines: {node: ^18 || >=20} + resolution: + { + integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==, + } + engines: { node: ^18 || >=20 } hasBin: true needle@3.3.1: - resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} - engines: {node: '>= 4.4.x'} + resolution: + { + integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==, + } + engines: { node: ">= 4.4.x" } hasBin: true - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==, + } + engines: { node: ">= 0.6" } netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} + resolution: + { + integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==, + } + engines: { node: ">= 0.4.0" } next-sitemap@4.2.3: - resolution: {integrity: sha512-vjdCxeDuWDzldhCnyFCQipw5bfpl4HmZA7uoo3GAaYGjGgfL4Cxb1CiztPuWGmS+auYs7/8OekRS8C2cjdAsjQ==} - engines: {node: '>=14.18'} + resolution: + { + integrity: sha512-vjdCxeDuWDzldhCnyFCQipw5bfpl4HmZA7uoo3GAaYGjGgfL4Cxb1CiztPuWGmS+auYs7/8OekRS8C2cjdAsjQ==, + } + engines: { node: ">=14.18" } hasBin: true peerDependencies: - next: '*' + next: "*" - next-themes@0.3.0: - resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==} + next-themes@0.4.6: + resolution: + { + integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==, + } peerDependencies: - react: ^16.8 || ^17 || ^18 - react-dom: ^16.8 || ^17 || ^18 - - next@15.2.8: - resolution: {integrity: sha512-pe2trLKZTdaCuvNER0S9Wp+SP2APf7SfFmyUP9/w1SFA2UqmW0u+IsxCKkiky3n6um7mryaQIlgiDnKrf1ZwIw==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@16.1.6: + resolution: + { + integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==, + } + engines: { node: ">=20.9.0" } hasBin: true peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - babel-plugin-react-compiler: '*' + "@opentelemetry/api": ^1.1.0 + "@playwright/test": ^1.51.1 + babel-plugin-react-compiler: "*" react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 sass: ^1.3.0 peerDependenciesMeta: - '@opentelemetry/api': + "@opentelemetry/api": optional: true - '@playwright/test': + "@playwright/test": optional: true babel-plugin-react-compiler: optional: true sass: optional: true - nextra-theme-docs@3.0.15: - resolution: {integrity: sha512-AhvmgcjFYi7aT5nRjdozqCt1hW39tqCIRKi4+pIR62ri26miB3VxREBYlCTHezcML2VLunyYIjFiiQGUan09gA==} - peerDependencies: - next: '>=13' - nextra: 3.0.15 - react: '>=18' - react-dom: '>=18' - - nextra@3.0.15: - resolution: {integrity: sha512-iLKFNYwq8sciXPK9RPRmgifELSA2JLgEfL5y54stq7MvXuKn44MZJNzdhkJF4MXvx1HobzYLHl3/e37/Yf2htA==} - engines: {node: '>=18'} - peerDependencies: - next: '>=13' - react: '>=18' - react-dom: '>=18' - - nlcst-to-string@4.0.0: - resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} + resolution: + { + integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==, + } + engines: { node: ">=10.5.0" } deprecated: Use your platform's native DOMException instead node-email-verifier@2.0.0: - resolution: {integrity: sha512-AHcppjOH2KT0mxakrxFMOMjV/gOVMRpYvnJUkNfgF9oJ3INdVmqcMFJ5TlM8elpTPwt6A7bSp1IMnnWcxGom/Q==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-AHcppjOH2KT0mxakrxFMOMjV/gOVMRpYvnJUkNfgF9oJ3INdVmqcMFJ5TlM8elpTPwt6A7bSp1IMnnWcxGom/Q==, + } + engines: { node: ">=16.0.0" } node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} + resolution: + { + integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, + } + engines: { node: 4.x || >=6.0.0 } peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: encoding: optional: true - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - nodemailer@7.0.11: - resolution: {integrity: sha512-gnXhNRE0FNhD7wPSCGhdNh46Hs6nm+uTyg+Kq0cZukNQiYdnCsoQjodNP9BQVG9XrcK/v6/MgpAPBUFyzh9pvw==} - engines: {node: '>=6.0.0'} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} - - npm-to-yarn@3.0.0: - resolution: {integrity: sha512-76YnmsbfrYp0tMsWxM0RNX0Vs+x8JxpJGu6B/jDn4lW8+laiTcKmKi9MeMh4UikO4RkJ1oqURoDy9bXJmMXS6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-gnXhNRE0FNhD7wPSCGhdNh46Hs6nm+uTyg+Kq0cZukNQiYdnCsoQjodNP9BQVG9XrcK/v6/MgpAPBUFyzh9pvw==, + } + engines: { node: ">=6.0.0" } + + npm-to-yarn@3.0.1: + resolution: + { + integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + resolution: + { + integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, + } object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, + } + engines: { node: ">=0.10.0" } object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, + } + engines: { node: ">= 0.4" } on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==, + } + engines: { node: ">= 0.8" } once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - oniguruma-to-js@0.4.3: - resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, + } + + oniguruma-parser@0.12.1: + resolution: + { + integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==, + } + + oniguruma-to-es@4.3.4: + resolution: + { + integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==, + } openai-edge@1.2.2: - resolution: {integrity: sha512-C3/Ao9Hkx5uBPv9YFBpX/x59XMPgPUU4dyGg/0J2sOJ7O9D98kD+lfdOc7v/60oYo5xzMGct80uFkYLH+X2qgw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-C3/Ao9Hkx5uBPv9YFBpX/x59XMPgPUU4dyGg/0J2sOJ7O9D98kD+lfdOc7v/60oYo5xzMGct80uFkYLH+X2qgw==, + } + engines: { node: ">=18" } openai@4.78.1: - resolution: {integrity: sha512-drt0lHZBd2lMyORckOXFPQTmnGLWSLt8VK0W9BhOKWpMFBEoHMoz5gxMPmVq5icp+sOrsbMnsmZTVHUlKvD1Ow==} + resolution: + { + integrity: sha512-drt0lHZBd2lMyORckOXFPQTmnGLWSLt8VK0W9BhOKWpMFBEoHMoz5gxMPmVq5icp+sOrsbMnsmZTVHUlKvD1Ow==, + } hasBin: true peerDependencies: zod: ^3.23.8 @@ -4779,7 +7930,10 @@ packages: optional: true openai@6.22.0: - resolution: {integrity: sha512-7Yvy17F33Bi9RutWbsaYt5hJEEJ/krRPOrwan+f9aCPuMat1WVsb2VNSII5W1EksKT6fF69TG/xj4XzodK3JZw==} + resolution: + { + integrity: sha512-7Yvy17F33Bi9RutWbsaYt5hJEEJ/krRPOrwan+f9aCPuMat1WVsb2VNSII5W1EksKT6fF69TG/xj4XzodK3JZw==, + } hasBin: true peerDependencies: ws: ^8.18.0 @@ -4791,1221 +7945,1772 @@ packages: optional: true opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + resolution: + { + integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==, + } hasBin: true - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - - p-limit@6.1.0: - resolution: {integrity: sha512-H0jc0q1vOzlEk0TqAKXKZxdl7kX3OFUzCnNVUnq5Pc3DGo0kpeaMuPqxQn235HibwBEb0/pm9dgKTjXy66fBkg==} - engines: {node: '>=18'} - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==, + } + engines: { node: ">= 14" } pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - package-manager-detector@0.2.2: - resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} + resolution: + { + integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==, + } + engines: { node: ">= 14" } pako@0.2.9: - resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + resolution: + { + integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==, + } parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, + } + engines: { node: ">=6" } parse-css-color@0.2.1: - resolution: {integrity: sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==} + resolution: + { + integrity: sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==, + } parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - - parse-entities@4.0.1: - resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + resolution: + { + integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==, + } parse-entities@4.0.2: - resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + resolution: + { + integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==, + } parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse-latin@7.0.0: - resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} - - parse-numeric-range@1.3.0: - resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + resolution: + { + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, + } + engines: { node: ">=8" } parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + resolution: + { + integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==, + } parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + resolution: + { + integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==, + } - parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + parse5@7.3.0: + resolution: + { + integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==, + } parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - path-data-parser@0.1.0: - resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} - - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, + } + engines: { node: ">= 0.8" } path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} - - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + } + engines: { node: ">=8" } + + path-to-regexp@8.3.0: + resolution: + { + integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==, + } pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + resolution: + { + integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==, + } picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: ">=8.6" } + + picomatch@4.0.3: + resolution: + { + integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==, + } + engines: { node: ">=12" } pkce-challenge@5.0.0: - resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} - engines: {node: '>=16.20.0'} - - pkg-types@1.2.1: - resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} - - points-on-curve@0.2.0: - resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} - - points-on-path@0.2.1: - resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} - - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==, + } + engines: { node: ">=16.20.0" } + + postcss-selector-parser@7.1.1: + resolution: + { + integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==, + } + engines: { node: ">=4" } postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + resolution: + { + integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, + } postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==, + } + engines: { node: ^10 || ^12 || >=14 } postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==, + } + engines: { node: ^10 || ^12 || >=14 } + + postcss@8.5.6: + resolution: + { + integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==, + } + engines: { node: ^10 || ^12 || >=14 } posthog-js@1.203.1: - resolution: {integrity: sha512-r/WiSyz6VNbIKEV/30+aD5gdrYkFtmZwvqNa6h9frl8hG638v098FrXaq3EYzMcCdkQf3phaZTDIAFKegpiTjw==} + resolution: + { + integrity: sha512-r/WiSyz6VNbIKEV/30+aD5gdrYkFtmZwvqNa6h9frl8hG638v098FrXaq3EYzMcCdkQf3phaZTDIAFKegpiTjw==, + } posthog-node@5.1.1: - resolution: {integrity: sha512-6VISkNdxO24ehXiDA4dugyCSIV7lpGVaEu5kn/dlAj+SJ1lgcDru9PQ8p/+GSXsXVxohd1t7kHL2JKc9NoGb0w==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-6VISkNdxO24ehXiDA4dugyCSIV7lpGVaEu5kn/dlAj+SJ1lgcDru9PQ8p/+GSXsXVxohd1t7kHL2JKc9NoGb0w==, + } + engines: { node: ">=20" } potpack@1.0.2: - resolution: {integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==} + resolution: + { + integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==, + } preact@10.25.3: - resolution: {integrity: sha512-dzQmIFtM970z+fP9ziQ3yG4e3ULIbwZzJ734vaMVUTaKQ2+Ru1Ou/gjshOYVHCcd1rpAelC6ngjvjDXph98unQ==} + resolution: + { + integrity: sha512-dzQmIFtM970z+fP9ziQ3yG4e3ULIbwZzJ734vaMVUTaKQ2+Ru1Ou/gjshOYVHCcd1rpAelC6ngjvjDXph98unQ==, + } prism-react-renderer@2.4.1: - resolution: {integrity: sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==} + resolution: + { + integrity: sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==, + } peerDependencies: - react: '>=16.0.0' + react: ">=16.0.0" prismjs@1.27.0: - resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==, + } + engines: { node: ">=6" } prismjs@1.29.0: - resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==, + } + engines: { node: ">=6" } progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, + } + engines: { node: ">=0.4.0" } promise-worker-transferable@1.0.4: - resolution: {integrity: sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw==} + resolution: + { + integrity: sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw==, + } prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + resolution: + { + integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, + } property-information@5.6.0: - resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} + resolution: + { + integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==, + } property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - - property-information@7.0.0: - resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} - - protobufjs@7.5.4: - resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==, + } + + property-information@7.1.0: + resolution: + { + integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==, + } + + protobufjs@8.0.0: + resolution: + { + integrity: sha512-jx6+sE9h/UryaCZhsJWbJtTEy47yXoGNYI4z8ZaRncM0zBKeRqjO2JEcOUYwrYGb1WLhXM1FfMzW3annvFv0rw==, + } + engines: { node: ">=12.0.0" } proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==, + } + engines: { node: ">= 0.10" } proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==, + } + engines: { node: ">= 14" } proxy-compare@3.0.1: - resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==} + resolution: + { + integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==, + } proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + resolution: + { + integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, + } pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + resolution: + { + integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==, + } punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: ">=6" } puppeteer-core@24.23.0: - resolution: {integrity: sha512-yl25C59gb14sOdIiSnJ08XiPP+O2RjuyZmEG+RjYmCXO7au0jcLf7fRiyii96dXGUBW7Zwei/mVKfxMx/POeFw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-yl25C59gb14sOdIiSnJ08XiPP+O2RjuyZmEG+RjYmCXO7au0jcLf7fRiyii96dXGUBW7Zwei/mVKfxMx/POeFw==, + } + engines: { node: ">=18" } puppeteer@24.23.0: - resolution: {integrity: sha512-BVR1Lg8sJGKXY79JARdIssFWK2F6e1j+RyuJP66w4CUmpaXjENicmA3nNpUXA8lcTdDjAndtP+oNdni3T/qQqA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-BVR1Lg8sJGKXY79JARdIssFWK2F6e1j+RyuJP66w4CUmpaXjENicmA3nNpUXA8lcTdDjAndtP+oNdni3T/qQqA==, + } + engines: { node: ">=18" } hasBin: true qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} + resolution: + { + integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==, + } + engines: { node: ">=0.6" } queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + } quick-lru@6.1.2: - resolution: {integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==, + } + engines: { node: ">=12" } range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, + } + engines: { node: ">= 0.6" } raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==, + } + engines: { node: ">= 0.8" } react-composer@5.0.3: - resolution: {integrity: sha512-1uWd07EME6XZvMfapwZmc7NgCZqDemcvicRi3wMJzXsQLvZ3L7fTHVyPy1bZdnWXM4iPjYuNE+uJ41MLKeTtnA==} + resolution: + { + integrity: sha512-1uWd07EME6XZvMfapwZmc7NgCZqDemcvicRi3wMJzXsQLvZ3L7fTHVyPy1bZdnWXM4iPjYuNE+uJ41MLKeTtnA==, + } peerDependencies: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-country-flag@3.1.0: - resolution: {integrity: sha512-JWQFw1efdv9sTC+TGQvTKXQg1NKbDU2mBiAiRWcKM9F1sK+/zjhP2yGmm8YDddWyZdXVkR8Md47rPMJmo4YO5g==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-JWQFw1efdv9sTC+TGQvTKXQg1NKbDU2mBiAiRWcKM9F1sK+/zjhP2yGmm8YDddWyZdXVkR8Md47rPMJmo4YO5g==, + } + engines: { node: ">=12" } peerDependencies: - react: '>=16' + react: ">=16" react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + resolution: + { + integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==, + } peerDependencies: react: ^18.3.1 react-error-boundary@6.0.0: - resolution: {integrity: sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==} + resolution: + { + integrity: sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==, + } peerDependencies: - react: '>=16.13.1' + react: ">=16.13.1" react-hook-form@7.54.2: - resolution: {integrity: sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==} - engines: {node: '>=18.0.0'} + resolution: + { + integrity: sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==, + } + engines: { node: ">=18.0.0" } peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 react-hook-form@7.68.0: - resolution: {integrity: sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q==} - engines: {node: '>=18.0.0'} + resolution: + { + integrity: sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q==, + } + engines: { node: ">=18.0.0" } peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + resolution: + { + integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, + } + + react-is@19.2.4: + resolution: + { + integrity: sha512-W+EWGn2v0ApPKgKKCy/7s7WHXkboGcsrXE+2joLyVxkbyVQfO3MUEaUQDHoSmb8TFFrSKYa9mw64WZHNHSDzYA==, + } react-markdown@9.0.1: - resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} + resolution: + { + integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==, + } peerDependencies: - '@types/react': '>=18' - react: '>=18' + "@types/react": ^19.2.14 + react: ">=18" react-markdown@9.0.3: - resolution: {integrity: sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==} + resolution: + { + integrity: sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==, + } peerDependencies: - '@types/react': '>=18' - react: '>=18' + "@types/react": ^19.2.14 + react: ">=18" + + react-medium-image-zoom@5.4.0: + resolution: + { + integrity: sha512-BsE+EnFVQzFIlyuuQrZ9iTwyKpKkqdFZV1ImEQN573QPqGrIUuNni7aF+sZwDcxlsuOMayCr6oO/PZR/yJnbRg==, + } + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-reconciler@0.27.0: - resolution: {integrity: sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==, + } + engines: { node: ">=0.10.0" } peerDependencies: react: ^18.0.0 react-redux@9.2.0: - resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} + resolution: + { + integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==, + } peerDependencies: - '@types/react': ^18.2.25 || ^19 + "@types/react": ^19.2.14 react: ^18.0 || ^19 redux: ^5.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true redux: optional: true react-remove-scroll-bar@2.3.8: - resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==, + } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true react-remove-scroll@2.6.3: - resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==, + } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true react-remove-scroll@2.7.1: - resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": ^19.2.14 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + react-remove-scroll@2.7.2: + resolution: + { + integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==, + } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true react-style-singleton@2.2.3: - resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==, + } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true react-svg@16.3.0: - resolution: {integrity: sha512-MvoQbITgkmpPJYwDTNdiUyoncJFfoa0D86WzoZuMQ9c/ORJURPR6rPMnXDsLOWDCAyXuV9nKZhQhGyP0HZ0MVQ==} + resolution: + { + integrity: sha512-MvoQbITgkmpPJYwDTNdiUyoncJFfoa0D86WzoZuMQ9c/ORJURPR6rPMnXDsLOWDCAyXuV9nKZhQhGyP0HZ0MVQ==, + } peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-syntax-highlighter@15.6.1: - resolution: {integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==} + resolution: + { + integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==, + } peerDependencies: - react: '>= 0.14.0' + react: ">= 0.14.0" react-textarea-autosize@8.5.7: - resolution: {integrity: sha512-2MqJ3p0Jh69yt9ktFIaZmORHXw4c4bxSIhCeWiFwmJ9EYKgLmuNII3e9c9b2UO+ijl4StnpZdqpxNIhTdHvqtQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-2MqJ3p0Jh69yt9ktFIaZmORHXw4c4bxSIhCeWiFwmJ9EYKgLmuNII3e9c9b2UO+ijl4StnpZdqpxNIhTdHvqtQ==, + } + engines: { node: ">=10" } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-tweet@3.2.2: - resolution: {integrity: sha512-hIkxAVPpN2RqWoDEbo3TTnN/pDcp9/Jb6pTgiA4EbXa9S+m2vHIvvZKHR+eS0PDIsYqe+zTmANRa5k6+/iwGog==} + resolution: + { + integrity: sha512-hIkxAVPpN2RqWoDEbo3TTnN/pDcp9/Jb6pTgiA4EbXa9S+m2vHIvvZKHR+eS0PDIsYqe+zTmANRa5k6+/iwGog==, + } peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} - - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - reading-time@1.5.0: - resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} + resolution: + { + integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==, + } + engines: { node: ">=0.10.0" } + + readdirp@5.0.0: + resolution: + { + integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==, + } + engines: { node: ">= 20.19.0" } recharts@3.6.0: - resolution: {integrity: sha512-L5bjxvQRAe26RlToBAziKUB7whaGKEwD3znoM6fz3DrTowCIC/FnJYnuq1GEzB8Zv2kdTfaxQfi5GoH0tBinyg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-L5bjxvQRAe26RlToBAziKUB7whaGKEwD3znoM6fz3DrTowCIC/FnJYnuq1GEzB8Zv2kdTfaxQfi5GoH0tBinyg==, + } + engines: { node: ">=18" } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-is: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + recma-build-jsx@1.0.0: + resolution: + { + integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==, + } + + recma-jsx@1.0.1: + resolution: + { + integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==, + } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: + { + integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==, + } + + recma-stringify@1.0.0: + resolution: + { + integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==, + } + redis@4.7.1: - resolution: {integrity: sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ==} + resolution: + { + integrity: sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ==, + } redux-thunk@3.1.0: - resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} + resolution: + { + integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==, + } peerDependencies: redux: ^5.0.0 redux@5.0.1: - resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + resolution: + { + integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==, + } refractor@3.6.0: - resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + resolution: + { + integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==, + } regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - regex@4.3.3: - resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==} + resolution: + { + integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, + } + + regex-recursion@6.0.2: + resolution: + { + integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==, + } + + regex-utilities@2.3.0: + resolution: + { + integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==, + } + + regex@6.1.0: + resolution: + { + integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==, + } rehype-katex@7.0.1: - resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} - - rehype-parse@9.0.1: - resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} - - rehype-pretty-code@0.14.0: - resolution: {integrity: sha512-hBeKF/Wkkf3zyUS8lal9RCUuhypDWLQc+h9UrP9Pav25FUm/AQAVh4m5gdvJxh4Oz+U+xKvdsV01p1LdvsZTiQ==} - engines: {node: '>=18'} - peerDependencies: - shiki: ^1.3.0 + resolution: + { + integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==, + } rehype-raw@7.0.0: - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + resolution: + { + integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==, + } - remark-frontmatter@5.0.0: - resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} + rehype-recma@1.0.0: + resolution: + { + integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==, + } remark-gfm@4.0.1: - resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + resolution: + { + integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==, + } remark-math@6.0.0: - resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + resolution: + { + integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==, + } - remark-mdx@3.0.1: - resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} + remark-mdx@3.1.1: + resolution: + { + integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==, + } remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - - remark-reading-time@2.0.1: - resolution: {integrity: sha512-fy4BKy9SRhtYbEHvp6AItbRTnrhiDGbqLQTSYVbQPGuRCncU1ubSsh9p/W5QZSxtYcUXv8KGL0xBgPLyNJA1xw==} + resolution: + { + integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==, + } remark-rehype@11.1.0: - resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + resolution: + { + integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==, + } - remark-rehype@11.1.1: - resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} - - remark-smartypants@3.0.2: - resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} - engines: {node: '>=16.0.0'} + remark-rehype@11.1.2: + resolution: + { + integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==, + } remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + resolution: + { + integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==, + } + + remark@15.0.1: + resolution: + { + integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==, + } require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + } + engines: { node: ">=0.10.0" } require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, + } + engines: { node: ">=0.10.0" } reselect@5.1.1: - resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + resolution: + { + integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==, + } resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve@1.22.9: - resolution: {integrity: sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==} - hasBin: true - - retext-latin@4.0.0: - resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} - - retext-smartypants@6.2.0: - resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} - - retext-stringify@4.0.0: - resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} - - retext@9.0.0: - resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, + } + engines: { node: ">=4" } reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - robust-predicates@3.0.2: - resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - - roughjs@4.6.6: - resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + resolution: + { + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, + } + engines: { iojs: ">=1.0.0", node: ">=0.10.0" } router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==, + } + engines: { node: ">= 18" } run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } rw@1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + resolution: + { + integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==, + } rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + resolution: + { + integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==, + } safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + resolution: + { + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, + } safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, + } satori@0.12.2: - resolution: {integrity: sha512-3C/laIeE6UUe9A+iQ0A48ywPVCCMKCNSTU5Os101Vhgsjd3AAxGNjyq0uAA8kulMPK5n0csn8JlxPN9riXEjLA==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-3C/laIeE6UUe9A+iQ0A48ywPVCCMKCNSTU5Os101Vhgsjd3AAxGNjyq0uAA8kulMPK5n0csn8JlxPN9riXEjLA==, + } + engines: { node: ">=16" } sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + resolution: + { + integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==, + } scheduler@0.21.0: - resolution: {integrity: sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==} + resolution: + { + integrity: sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==, + } scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + resolution: + { + integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==, + } scroll-into-view-if-needed@3.1.0: - resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + resolution: + { + integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==, + } sdp-transform@2.15.0: - resolution: {integrity: sha512-KrOH82c/W+GYQ0LHqtr3caRpM3ITglq3ljGUIb8LTki7ByacJZ9z+piSGiwZDsRyhQbYBOBJgr2k6X4BZXi3Kw==} + resolution: + { + integrity: sha512-KrOH82c/W+GYQ0LHqtr3caRpM3ITglq3ljGUIb8LTki7ByacJZ9z+piSGiwZDsRyhQbYBOBJgr2k6X4BZXi3Kw==, + } hasBin: true sdp@3.2.1: - resolution: {integrity: sha512-lwsAIzOPlH8/7IIjjz3K0zYBk7aBVVcvjMwt3M4fLxpjMYyy7i3I97SLHebgn4YBjirkzfp3RvRDWSKsh/+WFw==} + resolution: + { + integrity: sha512-lwsAIzOPlH8/7IIjjz3K0zYBk7aBVVcvjMwt3M4fLxpjMYyy7i3I97SLHebgn4YBjirkzfp3RvRDWSKsh/+WFw==, + } section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==, + } + engines: { node: ">=4" } semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==, + } + engines: { node: ">=10" } hasBin: true semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==, + } + engines: { node: ">=10" } hasBin: true - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} + semver@7.7.4: + resolution: + { + integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==, + } + engines: { node: ">=10" } hasBin: true send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==, + } + engines: { node: ">= 18" } serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==, + } + engines: { node: ">= 18" } setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, + } + + sharp@0.34.5: + resolution: + { + integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + } + engines: { node: ">=8" } shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shiki@1.22.0: - resolution: {integrity: sha512-/t5LlhNs+UOKQCYBtl5ZsH/Vclz73GIqT2yQsCBygr8L/ppTdmpL4w3kPLoZJbMKVWtoG77Ue1feOjZfDxvMkw==} + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: ">=8" } + + shiki@3.22.0: + resolution: + { + integrity: sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==, + } side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==, + } + engines: { node: ">= 0.4" } side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, + } + engines: { node: ">= 0.4" } side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, + } + engines: { node: ">= 0.4" } side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - simple-swizzle@0.2.4: - resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} + resolution: + { + integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==, + } + engines: { node: ">= 0.4" } sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} - - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==, + } + engines: { node: ">= 10" } smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + resolution: + { + integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==, + } + engines: { node: ">= 6.0.0", npm: ">= 3.0.0" } socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==, + } + engines: { node: ">= 14" } socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + resolution: + { + integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==, + } + engines: { node: ">= 10.0.0", npm: ">= 3.0.0" } source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, + } + engines: { node: ">=0.10.0" } source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: ">=0.10.0" } + + source-map@0.7.6: + resolution: + { + integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==, + } + engines: { node: ">= 12" } space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + resolution: + { + integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==, + } space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - - speech-rule-engine@4.0.7: - resolution: {integrity: sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g==} - hasBin: true + resolution: + { + integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==, + } sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + resolution: + { + integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, + } sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + resolution: + { + integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==, + } stats-gl@2.4.2: - resolution: {integrity: sha512-g5O9B0hm9CvnM36+v7SFl39T7hmAlv541tU81ME8YeSb3i1CIP5/QdDeSB3A0la0bKNHpxpwxOVRo2wFTYEosQ==} + resolution: + { + integrity: sha512-g5O9B0hm9CvnM36+v7SFl39T7hmAlv541tU81ME8YeSb3i1CIP5/QdDeSB3A0la0bKNHpxpwxOVRo2wFTYEosQ==, + } peerDependencies: - '@types/three': '*' - three: '*' + "@types/three": "*" + three: "*" stats.js@0.17.0: - resolution: {integrity: sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==} + resolution: + { + integrity: sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==, + } statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==, + } + engines: { node: ">= 0.8" } statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} - - streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} + resolution: + { + integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==, + } + engines: { node: ">= 0.8" } streamx@2.23.0: - resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} + resolution: + { + integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==, + } string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, + } + engines: { node: ">=8" } string.prototype.codepointat@0.2.1: - resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + resolution: + { + integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==, + } stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + resolution: + { + integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==, + } strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - - strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} - - strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: ">=8" } strnum@2.1.1: - resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} - - style-to-js@1.1.16: - resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} - - style-to-object@0.4.4: - resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} - - style-to-object@1.0.6: - resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==} - - style-to-object@1.0.8: - resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + resolution: + { + integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==, + } + + strnum@2.1.2: + resolution: + { + integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==, + } + + style-to-js@1.1.21: + resolution: + { + integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==, + } + + style-to-object@1.0.14: + resolution: + { + integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==, + } styled-jsx@5.1.6: - resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==, + } + engines: { node: ">= 12.0.0" } peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + "@babel/core": "*" + babel-plugin-macros: "*" + react: ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" peerDependenciesMeta: - '@babel/core': + "@babel/core": optional: true babel-plugin-macros: optional: true - stylis@4.3.4: - resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} - - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - supports-color@4.5.0: - resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} - engines: {node: '>=4'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - suspend-react@0.1.3: - resolution: {integrity: sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==} + resolution: + { + integrity: sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==, + } peerDependencies: - react: '>=17.0' + react: ">=17.0" swr@2.3.3: - resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==} + resolution: + { + integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==, + } peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + resolution: + { + integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==, + } tailwind-merge@2.5.5: - resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} + resolution: + { + integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==, + } tailwind-merge@2.6.0: - resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + resolution: + { + integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==, + } + + tailwind-merge@3.5.0: + resolution: + { + integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==, + } tailwindcss-animate@1.0.7: - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + resolution: + { + integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==, + } peerDependencies: - tailwindcss: '>=3.0.0 || insiders' + tailwindcss: ">=3.0.0 || insiders" - tailwindcss@3.4.17: - resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} - engines: {node: '>=14.0.0'} - hasBin: true + tailwindcss@4.2.0: + resolution: + { + integrity: sha512-yYzTZ4++b7fNYxFfpnberEEKu43w44aqDMNM9MHMmcKuCH7lL8jJ4yJ7LGHv7rSwiqM0nkiobF9I6cLlpS2P7Q==, + } + + tapable@2.3.0: + resolution: + { + integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==, + } + engines: { node: ">=6" } tar-fs@3.1.1: - resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} + resolution: + { + integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==, + } tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + resolution: + { + integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==, + } text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + resolution: + { + integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==, + } three-mesh-bvh@0.7.8: - resolution: {integrity: sha512-BGEZTOIC14U0XIRw3tO4jY7IjP7n7v24nv9JXS1CyeVRWOCkcOMhRnmENUjuV39gktAw4Ofhr0OvIAiTspQrrw==} + resolution: + { + integrity: sha512-BGEZTOIC14U0XIRw3tO4jY7IjP7n7v24nv9JXS1CyeVRWOCkcOMhRnmENUjuV39gktAw4Ofhr0OvIAiTspQrrw==, + } deprecated: Deprecated due to three.js version incompatibility. Please use v0.8.0, instead. peerDependencies: - three: '>= 0.151.0' + three: ">= 0.151.0" three-stdlib@2.34.0: - resolution: {integrity: sha512-U5qJYWgUKBFJqr1coMSbczA964uvouzBjQbtJlaI9LfMwy7hr+kc1Mfh0gqi/2872KmGu9utgff6lj8Oti8+VQ==} + resolution: + { + integrity: sha512-U5qJYWgUKBFJqr1coMSbczA964uvouzBjQbtJlaI9LfMwy7hr+kc1Mfh0gqi/2872KmGu9utgff6lj8Oti8+VQ==, + } peerDependencies: - three: '>=0.128.0' + three: ">=0.128.0" three@0.172.0: - resolution: {integrity: sha512-6HMgMlzU97MsV7D/tY8Va38b83kz8YJX+BefKjspMNAv0Vx6dxMogHOrnRl/sbMIs3BPUKijPqDqJ/+UwJbIow==} + resolution: + { + integrity: sha512-6HMgMlzU97MsV7D/tY8Va38b83kz8YJX+BefKjspMNAv0Vx6dxMogHOrnRl/sbMIs3BPUKijPqDqJ/+UwJbIow==, + } throttleit@2.1.0: - resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==, + } + engines: { node: ">=18" } tiny-inflate@1.0.3: - resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + resolution: + { + integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==, + } tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - - tinyexec@0.3.1: - resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} - - title@3.5.3: - resolution: {integrity: sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==} - hasBin: true - - titleize@1.0.0: - resolution: {integrity: sha512-TARUb7z1pGvlLxgPk++7wJ6aycXF3GJ0sNSBTAsTuJrQG5QuZlkUQP+zl+nbjAh4gMX9yDw9ZYklMd7vAfJKEw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==, + } + + tinyexec@1.0.2: + resolution: + { + integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==, + } + engines: { node: ">=18" } + + tinyglobby@0.2.15: + resolution: + { + integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==, + } + engines: { node: ">=12.0.0" } to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: ">=8.0" } toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} + resolution: + { + integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, + } + engines: { node: ">=0.6" } totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, + } + engines: { node: ">=6" } tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + resolution: + { + integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, + } trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + resolution: + { + integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==, + } troika-three-text@0.52.2: - resolution: {integrity: sha512-UGYwjKnR8RgmyOIpo0/KiSW0wySQ155BQXNLoSWA1liKzXG+RyHM+dvTIDawHGVQcqjqyunFlVY32xm/HDqjpw==} + resolution: + { + integrity: sha512-UGYwjKnR8RgmyOIpo0/KiSW0wySQ155BQXNLoSWA1liKzXG+RyHM+dvTIDawHGVQcqjqyunFlVY32xm/HDqjpw==, + } peerDependencies: - three: '>=0.125.0' + three: ">=0.125.0" troika-three-utils@0.52.0: - resolution: {integrity: sha512-00oxqIIehtEKInOTQekgyknBuRUj1POfOUE2q1OmL+Xlpp4gIu+S0oA0schTyXsDS4d9DkR04iqCdD40rF5R6w==} + resolution: + { + integrity: sha512-00oxqIIehtEKInOTQekgyknBuRUj1POfOUE2q1OmL+Xlpp4gIu+S0oA0schTyXsDS4d9DkR04iqCdD40rF5R6w==, + } peerDependencies: - three: '>=0.125.0' + three: ">=0.125.0" troika-worker-utils@0.52.0: - resolution: {integrity: sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==} + resolution: + { + integrity: sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==, + } trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + resolution: + { + integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==, + } ts-debounce@4.0.0: - resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==} + resolution: + { + integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==, + } ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} + resolution: + { + integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==, + } + engines: { node: ">=6.10" } ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + resolution: + { + integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==, + } tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + resolution: + { + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, + } tunnel-rat@0.1.2: - resolution: {integrity: sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ==} + resolution: + { + integrity: sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ==, + } twoslash-protocol@0.2.12: - resolution: {integrity: sha512-5qZLXVYfZ9ABdjqbvPc4RWMr7PrpPaaDSeaYY55vl/w1j6H6kzsWK/urAEIXlzYlyrFmyz1UbwIt+AA0ck+wbg==} + resolution: + { + integrity: sha512-5qZLXVYfZ9ABdjqbvPc4RWMr7PrpPaaDSeaYY55vl/w1j6H6kzsWK/urAEIXlzYlyrFmyz1UbwIt+AA0ck+wbg==, + } twoslash@0.2.12: - resolution: {integrity: sha512-tEHPASMqi7kqwfJbkk7hc/4EhlrKCSLcur+TcvYki3vhIfaRMXnXjaYFgXpoZRbT6GdprD4tGuVBEmTpUgLBsw==} + resolution: + { + integrity: sha512-tEHPASMqi7kqwfJbkk7hc/4EhlrKCSLcur+TcvYki3vhIfaRMXnXjaYFgXpoZRbT6GdprD4tGuVBEmTpUgLBsw==, + } peerDependencies: - typescript: '*' + typescript: "*" type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==, + } + engines: { node: ">=16" } type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==, + } + engines: { node: ">= 0.6" } typed-emitter@2.1.0: - resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} + resolution: + { + integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==, + } typed-query-selector@2.12.0: - resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + resolution: + { + integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==, + } typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} + resolution: + { + integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==, + } + engines: { node: ">=14.17" } hasBin: true - ufo@1.5.4: - resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + resolution: + { + integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==, + } undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + resolution: + { + integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==, + } undici@6.21.2: - resolution: {integrity: sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==} - engines: {node: '>=18.17'} + resolution: + { + integrity: sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==, + } + engines: { node: ">=18.17" } unicode-trie@2.0.0: - resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + resolution: + { + integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==, + } unified@11.0.4: - resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} + resolution: + { + integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==, + } unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + resolution: + { + integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==, + } unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - - unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + resolution: + { + integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==, + } - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - - unist-util-modify-children@4.0.0: - resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} + unist-util-is@6.0.1: + resolution: + { + integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==, + } unist-util-position-from-estree@2.0.0: - resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + resolution: + { + integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==, + } unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + resolution: + { + integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==, + } unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - - unist-util-remove@4.0.0: - resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==} + resolution: + { + integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==, + } unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-children@3.0.0: - resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} - - unist-util-visit-parents@4.1.1: - resolution: {integrity: sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==} + resolution: + { + integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==, + } unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + resolution: + { + integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==, + } - unist-util-visit@3.1.0: - resolution: {integrity: sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==} + unist-util-visit-parents@6.0.2: + resolution: + { + integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==, + } unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + resolution: + { + integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==, + } - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} + unist-util-visit@5.1.0: + resolution: + { + integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==, + } - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + unpipe@1.0.0: + resolution: + { + integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, + } + engines: { node: ">= 0.8" } uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, + } use-callback-ref@1.3.3: - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==, + } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true use-composed-ref@1.4.0: - resolution: {integrity: sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==} + resolution: + { + integrity: sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true use-isomorphic-layout-effect@1.2.0: - resolution: {integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==} + resolution: + { + integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true use-latest@1.3.0: - resolution: {integrity: sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==} + resolution: + { + integrity: sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true use-sidecar@1.1.3: - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==, + } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": ^19.2.14 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true use-stick-to-bottom@1.1.1: - resolution: {integrity: sha512-JkDp0b0tSmv7HQOOpL1hT7t7QaoUBXkq045WWWOFDTlLGRzgIIyW7vyzOIJzY7L2XVIG7j1yUxeDj2LHm9Vwng==} + resolution: + { + integrity: sha512-JkDp0b0tSmv7HQOOpL1hT7t7QaoUBXkq045WWWOFDTlLGRzgIIyW7vyzOIJzY7L2XVIG7j1yUxeDj2LHm9Vwng==, + } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 use-sync-external-store@1.2.2: - resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + resolution: + { + integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==, + } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 use-sync-external-store@1.5.0: - resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + resolution: + { + integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==, + } + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + use-sync-external-store@1.6.0: + resolution: + { + integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==, + } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + resolution: + { + integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, + } utility-types@3.11.0: - resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==, + } + engines: { node: ">= 4" } uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + resolution: + { + integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, + } hasBin: true validator@13.12.0: - resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==, + } + engines: { node: ">= 0.10" } vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, + } + engines: { node: ">= 0.8" } vfile-location@5.0.3: - resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + resolution: + { + integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==, + } - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-message@4.0.3: + resolution: + { + integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==, + } vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + resolution: + { + integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==, + } vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + resolution: + { + integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==, + } victory-vendor@37.3.6: - resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} - - vscode-jsonrpc@8.2.0: - resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} - engines: {node: '>=14.0.0'} - - vscode-languageserver-protocol@3.17.5: - resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} - - vscode-languageserver-textdocument@1.0.12: - resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} - - vscode-languageserver-types@3.17.5: - resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} - - vscode-languageserver@9.0.1: - resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} - hasBin: true - - vscode-uri@3.0.8: - resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + resolution: + { + integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==, + } web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + resolution: + { + integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==, + } web-streams-polyfill@4.0.0-beta.3: - resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==, + } + engines: { node: ">= 14" } web-vitals@4.2.4: - resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} + resolution: + { + integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==, + } webdriver-bidi-protocol@0.3.6: - resolution: {integrity: sha512-mlGndEOA9yK9YAbvtxaPTqdi/kaCWYYfwrZvGzcmkr/3lWM+tQj53BxtpVd6qbC6+E5OnHXgCcAhre6AkXzxjA==} + resolution: + { + integrity: sha512-mlGndEOA9yK9YAbvtxaPTqdi/kaCWYYfwrZvGzcmkr/3lWM+tQj53BxtpVd6qbC6+E5OnHXgCcAhre6AkXzxjA==, + } webgl-constants@1.1.1: - resolution: {integrity: sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg==} + resolution: + { + integrity: sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg==, + } webgl-sdf-generator@1.1.1: - resolution: {integrity: sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==} + resolution: + { + integrity: sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==, + } webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + resolution: + { + integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, + } webpack-bundle-analyzer@4.10.1: - resolution: {integrity: sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==} - engines: {node: '>= 10.13.0'} + resolution: + { + integrity: sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==, + } + engines: { node: ">= 10.13.0" } hasBin: true webrtc-adapter@9.0.3: - resolution: {integrity: sha512-5fALBcroIl31OeXAdd1YUntxiZl1eHlZZWzNg3U4Fn+J9/cGL3eT80YlrsWGvj2ojuz1rZr2OXkgCzIxAZ7vRQ==} - engines: {node: '>=6.0.0', npm: '>=3.10.0'} + resolution: + { + integrity: sha512-5fALBcroIl31OeXAdd1YUntxiZl1eHlZZWzNg3U4Fn+J9/cGL3eT80YlrsWGvj2ojuz1rZr2OXkgCzIxAZ7vRQ==, + } + engines: { node: ">=6.0.0", npm: ">=3.10.0" } whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==, + } + engines: { node: ">=18" } whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==, + } + engines: { node: ">=18" } whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + resolution: + { + integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, + } which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + } + engines: { node: ">= 8" } hasBin: true - wicked-good-xpath@1.3.0: - resolution: {integrity: sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==} - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + } + engines: { node: ">=10" } wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + resolution: + { + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, + } ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} + resolution: + { + integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==, + } + engines: { node: ">=8.3.0" } peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -6016,11 +9721,14 @@ packages: optional: true ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} + resolution: + { + integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==, + } + engines: { node: ">=10.0.0" } peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true @@ -6028,11 +9736,14 @@ packages: optional: true ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} - engines: {node: '>=10.0.0'} + resolution: + { + integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==, + } + engines: { node: ">=10.0.0" } peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true @@ -6040,98 +9751,122 @@ packages: optional: true xml2js@0.6.2: - resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} - engines: {node: '>=4.0.0'} + resolution: + { + integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==, + } + engines: { node: ">=4.0.0" } xmlbuilder2@3.1.1: - resolution: {integrity: sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==} - engines: {node: '>=12.0'} + resolution: + { + integrity: sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==, + } + engines: { node: ">=12.0" } xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - - xmldom-sre@0.1.31: - resolution: {integrity: sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==} - engines: {node: '>=0.1'} + resolution: + { + integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==, + } + engines: { node: ">=4.0" } xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} + resolution: + { + integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==, + } + engines: { node: ">=0.4" } y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, + } + engines: { node: ">=10" } yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yaml@2.6.0: - resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} - engines: {node: '>= 14'} - hasBin: true - - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} - engines: {node: '>= 14'} - hasBin: true + resolution: + { + integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, + } yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, + } + engines: { node: ">=12" } yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: ">=12" } yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - - yocto-queue@1.1.1: - resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} - engines: {node: '>=12.20'} + resolution: + { + integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==, + } yoga-wasm-web@0.3.3: - resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} + resolution: + { + integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==, + } zod-to-json-schema@3.24.6: - resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} + resolution: + { + integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==, + } peerDependencies: zod: ^3.24.1 - zod-validation-error@3.4.0: - resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - zod: ^3.18.0 - zod@3.25.67: - resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==} + resolution: + { + integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==, + } zod@4.0.15: - resolution: {integrity: sha512-2IVHb9h4Mt6+UXkyMs0XbfICUh1eUrlJJAOupBHUhLRnKkruawyDddYRCs0Eizt900ntIMk9/4RksYl+FgSpcQ==} + resolution: + { + integrity: sha512-2IVHb9h4Mt6+UXkyMs0XbfICUh1eUrlJJAOupBHUhLRnKkruawyDddYRCs0Eizt900ntIMk9/4RksYl+FgSpcQ==, + } + + zod@4.3.6: + resolution: + { + integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==, + } zustand@3.7.2: - resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==} - engines: {node: '>=12.7.0'} + resolution: + { + integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==, + } + engines: { node: ">=12.7.0" } peerDependencies: - react: '>=16.8' + react: ">=16.8" peerDependenciesMeta: react: optional: true zustand@4.5.5: - resolution: {integrity: sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==} - engines: {node: '>=12.7.0'} + resolution: + { + integrity: sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==, + } + engines: { node: ">=12.7.0" } peerDependencies: - '@types/react': '>=16.8' - immer: '>=9.0.6' - react: '>=16.8' + "@types/react": ^19.2.14 + immer: ">=9.0.6" + react: ">=16.8" peerDependenciesMeta: - '@types/react': + "@types/react": optional: true immer: optional: true @@ -6139,15 +9874,18 @@ packages: optional: true zustand@5.0.1: - resolution: {integrity: sha512-pRET7Lao2z+n5R/HduXMio35TncTlSW68WsYBq2Lg1ASspsNGjpwLAsij3RpouyV6+kHMwwwzP0bZPD70/Jx/w==} - engines: {node: '>=12.20.0'} + resolution: + { + integrity: sha512-pRET7Lao2z+n5R/HduXMio35TncTlSW68WsYBq2Lg1ASspsNGjpwLAsij3RpouyV6+kHMwwwzP0bZPD70/Jx/w==, + } + engines: { node: ">=12.20.0" } peerDependencies: - '@types/react': '>=18.0.0' - immer: '>=9.0.6' - react: '>=18.0.0' - use-sync-external-store: '>=1.2.0' + "@types/react": ^19.2.14 + immer: ">=9.0.6" + react: ">=18.0.0" + use-sync-external-store: ">=1.2.0" peerDependenciesMeta: - '@types/react': + "@types/react": optional: true immer: optional: true @@ -6157,45 +9895,47 @@ packages: optional: true zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + resolution: + { + integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==, + } snapshots: - - '@ai-sdk/gateway@1.0.4(zod@4.0.15)': + "@ai-sdk/gateway@1.0.4(zod@4.0.15)": dependencies: - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.1(zod@4.0.15) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.1(zod@4.0.15) zod: 4.0.15 - '@ai-sdk/openai@2.0.14(zod@4.0.15)': + "@ai-sdk/openai@2.0.14(zod@4.0.15)": dependencies: - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.3(zod@4.0.15) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.3(zod@4.0.15) zod: 4.0.15 - '@ai-sdk/provider-utils@3.0.1(zod@4.0.15)': + "@ai-sdk/provider-utils@3.0.1(zod@4.0.15)": dependencies: - '@ai-sdk/provider': 2.0.0 - '@standard-schema/spec': 1.0.0 + "@ai-sdk/provider": 2.0.0 + "@standard-schema/spec": 1.1.0 eventsource-parser: 3.0.3 zod: 4.0.15 zod-to-json-schema: 3.24.6(zod@4.0.15) - '@ai-sdk/provider-utils@3.0.3(zod@4.0.15)': + "@ai-sdk/provider-utils@3.0.3(zod@4.0.15)": dependencies: - '@ai-sdk/provider': 2.0.0 - '@standard-schema/spec': 1.0.0 + "@ai-sdk/provider": 2.0.0 + "@standard-schema/spec": 1.1.0 eventsource-parser: 3.0.3 zod: 4.0.15 zod-to-json-schema: 3.24.6(zod@4.0.15) - '@ai-sdk/provider@2.0.0': + "@ai-sdk/provider@2.0.0": dependencies: json-schema: 0.4.0 - '@ai-sdk/react@2.0.8(react@18.3.1)(zod@4.0.15)': + "@ai-sdk/react@2.0.8(react@18.3.1)(zod@4.0.15)": dependencies: - '@ai-sdk/provider-utils': 3.0.1(zod@4.0.15) + "@ai-sdk/provider-utils": 3.0.1(zod@4.0.15) ai: 5.0.8(zod@4.0.15) react: 18.3.1 swr: 2.3.3(react@18.3.1) @@ -6203,655 +9943,890 @@ snapshots: optionalDependencies: zod: 4.0.15 - '@alloc/quick-lru@5.2.0': {} + "@alloc/quick-lru@5.2.0": {} - '@antfu/install-pkg@0.4.1': + "@aws-crypto/sha256-browser@5.2.0": dependencies: - package-manager-detector: 0.2.2 - tinyexec: 0.3.1 - - '@antfu/utils@0.7.10': {} + "@aws-crypto/sha256-js": 5.2.0 + "@aws-crypto/supports-web-crypto": 5.2.0 + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.936.0 + "@aws-sdk/util-locate-window": 3.893.0 + "@smithy/util-utf8": 2.3.0 + tslib: 2.8.1 - '@aws-crypto/sha256-browser@5.2.0': + "@aws-crypto/sha256-js@5.2.0": dependencies: - '@aws-crypto/sha256-js': 5.2.0 - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.936.0 - '@aws-sdk/util-locate-window': 3.893.0 - '@smithy/util-utf8': 2.3.0 + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.936.0 tslib: 2.8.1 - '@aws-crypto/sha256-js@5.2.0': + "@aws-crypto/supports-web-crypto@5.2.0": dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.936.0 tslib: 2.8.1 - '@aws-crypto/supports-web-crypto@5.2.0': + "@aws-crypto/util@5.2.0": dependencies: + "@aws-sdk/types": 3.936.0 + "@smithy/util-utf8": 2.3.0 + tslib: 2.8.1 + + "@aws-sdk/client-sesv2@3.948.0": + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.947.0 + "@aws-sdk/credential-provider-node": 3.948.0 + "@aws-sdk/middleware-host-header": 3.936.0 + "@aws-sdk/middleware-logger": 3.936.0 + "@aws-sdk/middleware-recursion-detection": 3.948.0 + "@aws-sdk/middleware-user-agent": 3.947.0 + "@aws-sdk/region-config-resolver": 3.936.0 + "@aws-sdk/signature-v4-multi-region": 3.947.0 + "@aws-sdk/types": 3.936.0 + "@aws-sdk/util-endpoints": 3.936.0 + "@aws-sdk/util-user-agent-browser": 3.936.0 + "@aws-sdk/util-user-agent-node": 3.947.0 + "@smithy/config-resolver": 4.4.3 + "@smithy/core": 3.18.7 + "@smithy/fetch-http-handler": 5.3.6 + "@smithy/hash-node": 4.2.5 + "@smithy/invalid-dependency": 4.2.5 + "@smithy/middleware-content-length": 4.2.5 + "@smithy/middleware-endpoint": 4.3.14 + "@smithy/middleware-retry": 4.4.14 + "@smithy/middleware-serde": 4.2.6 + "@smithy/middleware-stack": 4.2.5 + "@smithy/node-config-provider": 4.3.5 + "@smithy/node-http-handler": 4.4.5 + "@smithy/protocol-http": 5.3.5 + "@smithy/smithy-client": 4.9.10 + "@smithy/types": 4.9.0 + "@smithy/url-parser": 4.2.5 + "@smithy/util-base64": 4.3.0 + "@smithy/util-body-length-browser": 4.2.0 + "@smithy/util-body-length-node": 4.2.1 + "@smithy/util-defaults-mode-browser": 4.3.13 + "@smithy/util-defaults-mode-node": 4.2.16 + "@smithy/util-endpoints": 3.2.5 + "@smithy/util-middleware": 4.2.5 + "@smithy/util-retry": 4.2.5 + "@smithy/util-utf8": 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/client-sso@3.948.0": + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.947.0 + "@aws-sdk/middleware-host-header": 3.936.0 + "@aws-sdk/middleware-logger": 3.936.0 + "@aws-sdk/middleware-recursion-detection": 3.948.0 + "@aws-sdk/middleware-user-agent": 3.947.0 + "@aws-sdk/region-config-resolver": 3.936.0 + "@aws-sdk/types": 3.936.0 + "@aws-sdk/util-endpoints": 3.936.0 + "@aws-sdk/util-user-agent-browser": 3.936.0 + "@aws-sdk/util-user-agent-node": 3.947.0 + "@smithy/config-resolver": 4.4.3 + "@smithy/core": 3.18.7 + "@smithy/fetch-http-handler": 5.3.6 + "@smithy/hash-node": 4.2.5 + "@smithy/invalid-dependency": 4.2.5 + "@smithy/middleware-content-length": 4.2.5 + "@smithy/middleware-endpoint": 4.3.14 + "@smithy/middleware-retry": 4.4.14 + "@smithy/middleware-serde": 4.2.6 + "@smithy/middleware-stack": 4.2.5 + "@smithy/node-config-provider": 4.3.5 + "@smithy/node-http-handler": 4.4.5 + "@smithy/protocol-http": 5.3.5 + "@smithy/smithy-client": 4.9.10 + "@smithy/types": 4.9.0 + "@smithy/url-parser": 4.2.5 + "@smithy/util-base64": 4.3.0 + "@smithy/util-body-length-browser": 4.2.0 + "@smithy/util-body-length-node": 4.2.1 + "@smithy/util-defaults-mode-browser": 4.3.13 + "@smithy/util-defaults-mode-node": 4.2.16 + "@smithy/util-endpoints": 3.2.5 + "@smithy/util-middleware": 4.2.5 + "@smithy/util-retry": 4.2.5 + "@smithy/util-utf8": 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/core@3.947.0": + dependencies: + "@aws-sdk/types": 3.936.0 + "@aws-sdk/xml-builder": 3.930.0 + "@smithy/core": 3.18.7 + "@smithy/node-config-provider": 4.3.5 + "@smithy/property-provider": 4.2.5 + "@smithy/protocol-http": 5.3.5 + "@smithy/signature-v4": 5.3.5 + "@smithy/smithy-client": 4.9.10 + "@smithy/types": 4.9.0 + "@smithy/util-base64": 4.3.0 + "@smithy/util-middleware": 4.2.5 + "@smithy/util-utf8": 4.2.0 + tslib: 2.8.1 + + "@aws-sdk/core@3.973.11": + dependencies: + "@aws-sdk/types": 3.973.1 + "@aws-sdk/xml-builder": 3.972.5 + "@smithy/core": 3.23.2 + "@smithy/node-config-provider": 4.3.8 + "@smithy/property-provider": 4.2.8 + "@smithy/protocol-http": 5.3.8 + "@smithy/signature-v4": 5.3.8 + "@smithy/smithy-client": 4.11.5 + "@smithy/types": 4.12.0 + "@smithy/util-base64": 4.3.0 + "@smithy/util-middleware": 4.2.8 + "@smithy/util-utf8": 4.2.0 tslib: 2.8.1 + optional: true - '@aws-crypto/util@5.2.0': + "@aws-sdk/credential-provider-env@3.947.0": dependencies: - '@aws-sdk/types': 3.936.0 - '@smithy/util-utf8': 2.3.0 + "@aws-sdk/core": 3.947.0 + "@aws-sdk/types": 3.936.0 + "@smithy/property-provider": 4.2.5 + "@smithy/types": 4.9.0 + tslib: 2.8.1 + + "@aws-sdk/credential-provider-http@3.947.0": + dependencies: + "@aws-sdk/core": 3.947.0 + "@aws-sdk/types": 3.936.0 + "@smithy/fetch-http-handler": 5.3.6 + "@smithy/node-http-handler": 4.4.5 + "@smithy/property-provider": 4.2.5 + "@smithy/protocol-http": 5.3.5 + "@smithy/smithy-client": 4.9.10 + "@smithy/types": 4.9.0 + "@smithy/util-stream": 4.5.6 + tslib: 2.8.1 + + "@aws-sdk/credential-provider-ini@3.948.0": + dependencies: + "@aws-sdk/core": 3.947.0 + "@aws-sdk/credential-provider-env": 3.947.0 + "@aws-sdk/credential-provider-http": 3.947.0 + "@aws-sdk/credential-provider-login": 3.948.0 + "@aws-sdk/credential-provider-process": 3.947.0 + "@aws-sdk/credential-provider-sso": 3.948.0 + "@aws-sdk/credential-provider-web-identity": 3.948.0 + "@aws-sdk/nested-clients": 3.948.0 + "@aws-sdk/types": 3.936.0 + "@smithy/credential-provider-imds": 4.2.5 + "@smithy/property-provider": 4.2.5 + "@smithy/shared-ini-file-loader": 4.4.0 + "@smithy/types": 4.9.0 tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt - '@aws-sdk/client-sesv2@3.948.0': + "@aws-sdk/credential-provider-login@3.948.0": dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.947.0 - '@aws-sdk/credential-provider-node': 3.948.0 - '@aws-sdk/middleware-host-header': 3.936.0 - '@aws-sdk/middleware-logger': 3.936.0 - '@aws-sdk/middleware-recursion-detection': 3.948.0 - '@aws-sdk/middleware-user-agent': 3.947.0 - '@aws-sdk/region-config-resolver': 3.936.0 - '@aws-sdk/signature-v4-multi-region': 3.947.0 - '@aws-sdk/types': 3.936.0 - '@aws-sdk/util-endpoints': 3.936.0 - '@aws-sdk/util-user-agent-browser': 3.936.0 - '@aws-sdk/util-user-agent-node': 3.947.0 - '@smithy/config-resolver': 4.4.3 - '@smithy/core': 3.18.7 - '@smithy/fetch-http-handler': 5.3.6 - '@smithy/hash-node': 4.2.5 - '@smithy/invalid-dependency': 4.2.5 - '@smithy/middleware-content-length': 4.2.5 - '@smithy/middleware-endpoint': 4.3.14 - '@smithy/middleware-retry': 4.4.14 - '@smithy/middleware-serde': 4.2.6 - '@smithy/middleware-stack': 4.2.5 - '@smithy/node-config-provider': 4.3.5 - '@smithy/node-http-handler': 4.4.5 - '@smithy/protocol-http': 5.3.5 - '@smithy/smithy-client': 4.9.10 - '@smithy/types': 4.9.0 - '@smithy/url-parser': 4.2.5 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.13 - '@smithy/util-defaults-mode-node': 4.2.16 - '@smithy/util-endpoints': 3.2.5 - '@smithy/util-middleware': 4.2.5 - '@smithy/util-retry': 4.2.5 - '@smithy/util-utf8': 4.2.0 + "@aws-sdk/core": 3.947.0 + "@aws-sdk/nested-clients": 3.948.0 + "@aws-sdk/types": 3.936.0 + "@smithy/property-provider": 4.2.5 + "@smithy/protocol-http": 5.3.5 + "@smithy/shared-ini-file-loader": 4.4.0 + "@smithy/types": 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.948.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.947.0 - '@aws-sdk/middleware-host-header': 3.936.0 - '@aws-sdk/middleware-logger': 3.936.0 - '@aws-sdk/middleware-recursion-detection': 3.948.0 - '@aws-sdk/middleware-user-agent': 3.947.0 - '@aws-sdk/region-config-resolver': 3.936.0 - '@aws-sdk/types': 3.936.0 - '@aws-sdk/util-endpoints': 3.936.0 - '@aws-sdk/util-user-agent-browser': 3.936.0 - '@aws-sdk/util-user-agent-node': 3.947.0 - '@smithy/config-resolver': 4.4.3 - '@smithy/core': 3.18.7 - '@smithy/fetch-http-handler': 5.3.6 - '@smithy/hash-node': 4.2.5 - '@smithy/invalid-dependency': 4.2.5 - '@smithy/middleware-content-length': 4.2.5 - '@smithy/middleware-endpoint': 4.3.14 - '@smithy/middleware-retry': 4.4.14 - '@smithy/middleware-serde': 4.2.6 - '@smithy/middleware-stack': 4.2.5 - '@smithy/node-config-provider': 4.3.5 - '@smithy/node-http-handler': 4.4.5 - '@smithy/protocol-http': 5.3.5 - '@smithy/smithy-client': 4.9.10 - '@smithy/types': 4.9.0 - '@smithy/url-parser': 4.2.5 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.13 - '@smithy/util-defaults-mode-node': 4.2.16 - '@smithy/util-endpoints': 3.2.5 - '@smithy/util-middleware': 4.2.5 - '@smithy/util-retry': 4.2.5 - '@smithy/util-utf8': 4.2.0 + "@aws-sdk/credential-provider-node@3.948.0": + dependencies: + "@aws-sdk/credential-provider-env": 3.947.0 + "@aws-sdk/credential-provider-http": 3.947.0 + "@aws-sdk/credential-provider-ini": 3.948.0 + "@aws-sdk/credential-provider-process": 3.947.0 + "@aws-sdk/credential-provider-sso": 3.948.0 + "@aws-sdk/credential-provider-web-identity": 3.948.0 + "@aws-sdk/types": 3.936.0 + "@smithy/credential-provider-imds": 4.2.5 + "@smithy/property-provider": 4.2.5 + "@smithy/shared-ini-file-loader": 4.4.0 + "@smithy/types": 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.947.0': - dependencies: - '@aws-sdk/types': 3.936.0 - '@aws-sdk/xml-builder': 3.930.0 - '@smithy/core': 3.18.7 - '@smithy/node-config-provider': 4.3.5 - '@smithy/property-provider': 4.2.5 - '@smithy/protocol-http': 5.3.5 - '@smithy/signature-v4': 5.3.5 - '@smithy/smithy-client': 4.9.10 - '@smithy/types': 4.9.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-middleware': 4.2.5 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-env@3.947.0': - dependencies: - '@aws-sdk/core': 3.947.0 - '@aws-sdk/types': 3.936.0 - '@smithy/property-provider': 4.2.5 - '@smithy/types': 4.9.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-http@3.947.0': - dependencies: - '@aws-sdk/core': 3.947.0 - '@aws-sdk/types': 3.936.0 - '@smithy/fetch-http-handler': 5.3.6 - '@smithy/node-http-handler': 4.4.5 - '@smithy/property-provider': 4.2.5 - '@smithy/protocol-http': 5.3.5 - '@smithy/smithy-client': 4.9.10 - '@smithy/types': 4.9.0 - '@smithy/util-stream': 4.5.6 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-ini@3.948.0': - dependencies: - '@aws-sdk/core': 3.947.0 - '@aws-sdk/credential-provider-env': 3.947.0 - '@aws-sdk/credential-provider-http': 3.947.0 - '@aws-sdk/credential-provider-login': 3.948.0 - '@aws-sdk/credential-provider-process': 3.947.0 - '@aws-sdk/credential-provider-sso': 3.948.0 - '@aws-sdk/credential-provider-web-identity': 3.948.0 - '@aws-sdk/nested-clients': 3.948.0 - '@aws-sdk/types': 3.936.0 - '@smithy/credential-provider-imds': 4.2.5 - '@smithy/property-provider': 4.2.5 - '@smithy/shared-ini-file-loader': 4.4.0 - '@smithy/types': 4.9.0 + "@aws-sdk/credential-provider-process@3.947.0": + dependencies: + "@aws-sdk/core": 3.947.0 + "@aws-sdk/types": 3.936.0 + "@smithy/property-provider": 4.2.5 + "@smithy/shared-ini-file-loader": 4.4.0 + "@smithy/types": 4.9.0 + tslib: 2.8.1 + + "@aws-sdk/credential-provider-sso@3.948.0": + dependencies: + "@aws-sdk/client-sso": 3.948.0 + "@aws-sdk/core": 3.947.0 + "@aws-sdk/token-providers": 3.948.0 + "@aws-sdk/types": 3.936.0 + "@smithy/property-provider": 4.2.5 + "@smithy/shared-ini-file-loader": 4.4.0 + "@smithy/types": 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-login@3.948.0': + "@aws-sdk/credential-provider-web-identity@3.948.0": dependencies: - '@aws-sdk/core': 3.947.0 - '@aws-sdk/nested-clients': 3.948.0 - '@aws-sdk/types': 3.936.0 - '@smithy/property-provider': 4.2.5 - '@smithy/protocol-http': 5.3.5 - '@smithy/shared-ini-file-loader': 4.4.0 - '@smithy/types': 4.9.0 + "@aws-sdk/core": 3.947.0 + "@aws-sdk/nested-clients": 3.948.0 + "@aws-sdk/types": 3.936.0 + "@smithy/property-provider": 4.2.5 + "@smithy/shared-ini-file-loader": 4.4.0 + "@smithy/types": 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.948.0': + "@aws-sdk/credential-provider-web-identity@3.972.9": dependencies: - '@aws-sdk/credential-provider-env': 3.947.0 - '@aws-sdk/credential-provider-http': 3.947.0 - '@aws-sdk/credential-provider-ini': 3.948.0 - '@aws-sdk/credential-provider-process': 3.947.0 - '@aws-sdk/credential-provider-sso': 3.948.0 - '@aws-sdk/credential-provider-web-identity': 3.948.0 - '@aws-sdk/types': 3.936.0 - '@smithy/credential-provider-imds': 4.2.5 - '@smithy/property-provider': 4.2.5 - '@smithy/shared-ini-file-loader': 4.4.0 - '@smithy/types': 4.9.0 + "@aws-sdk/core": 3.973.11 + "@aws-sdk/nested-clients": 3.993.0 + "@aws-sdk/types": 3.973.1 + "@smithy/property-provider": 4.2.8 + "@smithy/shared-ini-file-loader": 4.4.3 + "@smithy/types": 4.12.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt + optional: true - '@aws-sdk/credential-provider-process@3.947.0': + "@aws-sdk/middleware-host-header@3.936.0": dependencies: - '@aws-sdk/core': 3.947.0 - '@aws-sdk/types': 3.936.0 - '@smithy/property-provider': 4.2.5 - '@smithy/shared-ini-file-loader': 4.4.0 - '@smithy/types': 4.9.0 + "@aws-sdk/types": 3.936.0 + "@smithy/protocol-http": 5.3.5 + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.948.0': + "@aws-sdk/middleware-host-header@3.972.3": dependencies: - '@aws-sdk/client-sso': 3.948.0 - '@aws-sdk/core': 3.947.0 - '@aws-sdk/token-providers': 3.948.0 - '@aws-sdk/types': 3.936.0 - '@smithy/property-provider': 4.2.5 - '@smithy/shared-ini-file-loader': 4.4.0 - '@smithy/types': 4.9.0 + "@aws-sdk/types": 3.973.1 + "@smithy/protocol-http": 5.3.8 + "@smithy/types": 4.12.0 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt + optional: true + + "@aws-sdk/middleware-logger@3.936.0": + dependencies: + "@aws-sdk/types": 3.936.0 + "@smithy/types": 4.9.0 + tslib: 2.8.1 + + "@aws-sdk/middleware-logger@3.972.3": + dependencies: + "@aws-sdk/types": 3.973.1 + "@smithy/types": 4.12.0 + tslib: 2.8.1 + optional: true + + "@aws-sdk/middleware-recursion-detection@3.948.0": + dependencies: + "@aws-sdk/types": 3.936.0 + "@aws/lambda-invoke-store": 0.2.2 + "@smithy/protocol-http": 5.3.5 + "@smithy/types": 4.9.0 + tslib: 2.8.1 + + "@aws-sdk/middleware-recursion-detection@3.972.3": + dependencies: + "@aws-sdk/types": 3.973.1 + "@aws/lambda-invoke-store": 0.2.3 + "@smithy/protocol-http": 5.3.8 + "@smithy/types": 4.12.0 + tslib: 2.8.1 + optional: true - '@aws-sdk/credential-provider-web-identity@3.948.0': + "@aws-sdk/middleware-sdk-s3@3.947.0": + dependencies: + "@aws-sdk/core": 3.947.0 + "@aws-sdk/types": 3.936.0 + "@aws-sdk/util-arn-parser": 3.893.0 + "@smithy/core": 3.18.7 + "@smithy/node-config-provider": 4.3.5 + "@smithy/protocol-http": 5.3.5 + "@smithy/signature-v4": 5.3.5 + "@smithy/smithy-client": 4.9.10 + "@smithy/types": 4.9.0 + "@smithy/util-config-provider": 4.2.0 + "@smithy/util-middleware": 4.2.5 + "@smithy/util-stream": 4.5.6 + "@smithy/util-utf8": 4.2.0 + tslib: 2.8.1 + + "@aws-sdk/middleware-user-agent@3.947.0": + dependencies: + "@aws-sdk/core": 3.947.0 + "@aws-sdk/types": 3.936.0 + "@aws-sdk/util-endpoints": 3.936.0 + "@smithy/core": 3.18.7 + "@smithy/protocol-http": 5.3.5 + "@smithy/types": 4.9.0 + tslib: 2.8.1 + + "@aws-sdk/middleware-user-agent@3.972.11": dependencies: - '@aws-sdk/core': 3.947.0 - '@aws-sdk/nested-clients': 3.948.0 - '@aws-sdk/types': 3.936.0 - '@smithy/property-provider': 4.2.5 - '@smithy/shared-ini-file-loader': 4.4.0 - '@smithy/types': 4.9.0 + "@aws-sdk/core": 3.973.11 + "@aws-sdk/types": 3.973.1 + "@aws-sdk/util-endpoints": 3.993.0 + "@smithy/core": 3.23.2 + "@smithy/protocol-http": 5.3.8 + "@smithy/types": 4.12.0 + tslib: 2.8.1 + optional: true + + "@aws-sdk/nested-clients@3.948.0": + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.947.0 + "@aws-sdk/middleware-host-header": 3.936.0 + "@aws-sdk/middleware-logger": 3.936.0 + "@aws-sdk/middleware-recursion-detection": 3.948.0 + "@aws-sdk/middleware-user-agent": 3.947.0 + "@aws-sdk/region-config-resolver": 3.936.0 + "@aws-sdk/types": 3.936.0 + "@aws-sdk/util-endpoints": 3.936.0 + "@aws-sdk/util-user-agent-browser": 3.936.0 + "@aws-sdk/util-user-agent-node": 3.947.0 + "@smithy/config-resolver": 4.4.3 + "@smithy/core": 3.18.7 + "@smithy/fetch-http-handler": 5.3.6 + "@smithy/hash-node": 4.2.5 + "@smithy/invalid-dependency": 4.2.5 + "@smithy/middleware-content-length": 4.2.5 + "@smithy/middleware-endpoint": 4.3.14 + "@smithy/middleware-retry": 4.4.14 + "@smithy/middleware-serde": 4.2.6 + "@smithy/middleware-stack": 4.2.5 + "@smithy/node-config-provider": 4.3.5 + "@smithy/node-http-handler": 4.4.5 + "@smithy/protocol-http": 5.3.5 + "@smithy/smithy-client": 4.9.10 + "@smithy/types": 4.9.0 + "@smithy/url-parser": 4.2.5 + "@smithy/util-base64": 4.3.0 + "@smithy/util-body-length-browser": 4.2.0 + "@smithy/util-body-length-node": 4.2.1 + "@smithy/util-defaults-mode-browser": 4.3.13 + "@smithy/util-defaults-mode-node": 4.2.16 + "@smithy/util-endpoints": 3.2.5 + "@smithy/util-middleware": 4.2.5 + "@smithy/util-retry": 4.2.5 + "@smithy/util-utf8": 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/middleware-host-header@3.936.0': - dependencies: - '@aws-sdk/types': 3.936.0 - '@smithy/protocol-http': 5.3.5 - '@smithy/types': 4.9.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-logger@3.936.0': - dependencies: - '@aws-sdk/types': 3.936.0 - '@smithy/types': 4.9.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-recursion-detection@3.948.0': - dependencies: - '@aws-sdk/types': 3.936.0 - '@aws/lambda-invoke-store': 0.2.2 - '@smithy/protocol-http': 5.3.5 - '@smithy/types': 4.9.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-sdk-s3@3.947.0': - dependencies: - '@aws-sdk/core': 3.947.0 - '@aws-sdk/types': 3.936.0 - '@aws-sdk/util-arn-parser': 3.893.0 - '@smithy/core': 3.18.7 - '@smithy/node-config-provider': 4.3.5 - '@smithy/protocol-http': 5.3.5 - '@smithy/signature-v4': 5.3.5 - '@smithy/smithy-client': 4.9.10 - '@smithy/types': 4.9.0 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.5 - '@smithy/util-stream': 4.5.6 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-user-agent@3.947.0': - dependencies: - '@aws-sdk/core': 3.947.0 - '@aws-sdk/types': 3.936.0 - '@aws-sdk/util-endpoints': 3.936.0 - '@smithy/core': 3.18.7 - '@smithy/protocol-http': 5.3.5 - '@smithy/types': 4.9.0 - tslib: 2.8.1 - - '@aws-sdk/nested-clients@3.948.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.947.0 - '@aws-sdk/middleware-host-header': 3.936.0 - '@aws-sdk/middleware-logger': 3.936.0 - '@aws-sdk/middleware-recursion-detection': 3.948.0 - '@aws-sdk/middleware-user-agent': 3.947.0 - '@aws-sdk/region-config-resolver': 3.936.0 - '@aws-sdk/types': 3.936.0 - '@aws-sdk/util-endpoints': 3.936.0 - '@aws-sdk/util-user-agent-browser': 3.936.0 - '@aws-sdk/util-user-agent-node': 3.947.0 - '@smithy/config-resolver': 4.4.3 - '@smithy/core': 3.18.7 - '@smithy/fetch-http-handler': 5.3.6 - '@smithy/hash-node': 4.2.5 - '@smithy/invalid-dependency': 4.2.5 - '@smithy/middleware-content-length': 4.2.5 - '@smithy/middleware-endpoint': 4.3.14 - '@smithy/middleware-retry': 4.4.14 - '@smithy/middleware-serde': 4.2.6 - '@smithy/middleware-stack': 4.2.5 - '@smithy/node-config-provider': 4.3.5 - '@smithy/node-http-handler': 4.4.5 - '@smithy/protocol-http': 5.3.5 - '@smithy/smithy-client': 4.9.10 - '@smithy/types': 4.9.0 - '@smithy/url-parser': 4.2.5 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.13 - '@smithy/util-defaults-mode-node': 4.2.16 - '@smithy/util-endpoints': 3.2.5 - '@smithy/util-middleware': 4.2.5 - '@smithy/util-retry': 4.2.5 - '@smithy/util-utf8': 4.2.0 + "@aws-sdk/nested-clients@3.993.0": + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.973.11 + "@aws-sdk/middleware-host-header": 3.972.3 + "@aws-sdk/middleware-logger": 3.972.3 + "@aws-sdk/middleware-recursion-detection": 3.972.3 + "@aws-sdk/middleware-user-agent": 3.972.11 + "@aws-sdk/region-config-resolver": 3.972.3 + "@aws-sdk/types": 3.973.1 + "@aws-sdk/util-endpoints": 3.993.0 + "@aws-sdk/util-user-agent-browser": 3.972.3 + "@aws-sdk/util-user-agent-node": 3.972.9 + "@smithy/config-resolver": 4.4.6 + "@smithy/core": 3.23.2 + "@smithy/fetch-http-handler": 5.3.9 + "@smithy/hash-node": 4.2.8 + "@smithy/invalid-dependency": 4.2.8 + "@smithy/middleware-content-length": 4.2.8 + "@smithy/middleware-endpoint": 4.4.16 + "@smithy/middleware-retry": 4.4.33 + "@smithy/middleware-serde": 4.2.9 + "@smithy/middleware-stack": 4.2.8 + "@smithy/node-config-provider": 4.3.8 + "@smithy/node-http-handler": 4.4.10 + "@smithy/protocol-http": 5.3.8 + "@smithy/smithy-client": 4.11.5 + "@smithy/types": 4.12.0 + "@smithy/url-parser": 4.2.8 + "@smithy/util-base64": 4.3.0 + "@smithy/util-body-length-browser": 4.2.0 + "@smithy/util-body-length-node": 4.2.1 + "@smithy/util-defaults-mode-browser": 4.3.32 + "@smithy/util-defaults-mode-node": 4.2.35 + "@smithy/util-endpoints": 3.2.8 + "@smithy/util-middleware": 4.2.8 + "@smithy/util-retry": 4.2.8 + "@smithy/util-utf8": 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt + optional: true + + "@aws-sdk/region-config-resolver@3.936.0": + dependencies: + "@aws-sdk/types": 3.936.0 + "@smithy/config-resolver": 4.4.3 + "@smithy/node-config-provider": 4.3.5 + "@smithy/types": 4.9.0 + tslib: 2.8.1 - '@aws-sdk/region-config-resolver@3.936.0': + "@aws-sdk/region-config-resolver@3.972.3": dependencies: - '@aws-sdk/types': 3.936.0 - '@smithy/config-resolver': 4.4.3 - '@smithy/node-config-provider': 4.3.5 - '@smithy/types': 4.9.0 + "@aws-sdk/types": 3.973.1 + "@smithy/config-resolver": 4.4.6 + "@smithy/node-config-provider": 4.3.8 + "@smithy/types": 4.12.0 tslib: 2.8.1 + optional: true - '@aws-sdk/signature-v4-multi-region@3.947.0': + "@aws-sdk/signature-v4-multi-region@3.947.0": dependencies: - '@aws-sdk/middleware-sdk-s3': 3.947.0 - '@aws-sdk/types': 3.936.0 - '@smithy/protocol-http': 5.3.5 - '@smithy/signature-v4': 5.3.5 - '@smithy/types': 4.9.0 + "@aws-sdk/middleware-sdk-s3": 3.947.0 + "@aws-sdk/types": 3.936.0 + "@smithy/protocol-http": 5.3.5 + "@smithy/signature-v4": 5.3.5 + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.948.0': + "@aws-sdk/token-providers@3.948.0": dependencies: - '@aws-sdk/core': 3.947.0 - '@aws-sdk/nested-clients': 3.948.0 - '@aws-sdk/types': 3.936.0 - '@smithy/property-provider': 4.2.5 - '@smithy/shared-ini-file-loader': 4.4.0 - '@smithy/types': 4.9.0 + "@aws-sdk/core": 3.947.0 + "@aws-sdk/nested-clients": 3.948.0 + "@aws-sdk/types": 3.936.0 + "@smithy/property-provider": 4.2.5 + "@smithy/shared-ini-file-loader": 4.4.0 + "@smithy/types": 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/types@3.936.0': + "@aws-sdk/types@3.936.0": + dependencies: + "@smithy/types": 4.9.0 + tslib: 2.8.1 + + "@aws-sdk/types@3.973.1": + dependencies: + "@smithy/types": 4.12.0 + tslib: 2.8.1 + optional: true + + "@aws-sdk/util-arn-parser@3.893.0": dependencies: - '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/util-arn-parser@3.893.0': + "@aws-sdk/util-endpoints@3.936.0": dependencies: + "@aws-sdk/types": 3.936.0 + "@smithy/types": 4.9.0 + "@smithy/url-parser": 4.2.5 + "@smithy/util-endpoints": 3.2.5 tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.936.0': + "@aws-sdk/util-endpoints@3.993.0": dependencies: - '@aws-sdk/types': 3.936.0 - '@smithy/types': 4.9.0 - '@smithy/url-parser': 4.2.5 - '@smithy/util-endpoints': 3.2.5 + "@aws-sdk/types": 3.973.1 + "@smithy/types": 4.12.0 + "@smithy/url-parser": 4.2.8 + "@smithy/util-endpoints": 3.2.8 tslib: 2.8.1 + optional: true - '@aws-sdk/util-locate-window@3.893.0': + "@aws-sdk/util-locate-window@3.893.0": dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.936.0': + "@aws-sdk/util-user-agent-browser@3.936.0": dependencies: - '@aws-sdk/types': 3.936.0 - '@smithy/types': 4.9.0 + "@aws-sdk/types": 3.936.0 + "@smithy/types": 4.9.0 bowser: 2.13.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.947.0': + "@aws-sdk/util-user-agent-browser@3.972.3": + dependencies: + "@aws-sdk/types": 3.973.1 + "@smithy/types": 4.12.0 + bowser: 2.14.1 + tslib: 2.8.1 + optional: true + + "@aws-sdk/util-user-agent-node@3.947.0": + dependencies: + "@aws-sdk/middleware-user-agent": 3.947.0 + "@aws-sdk/types": 3.936.0 + "@smithy/node-config-provider": 4.3.5 + "@smithy/types": 4.9.0 + tslib: 2.8.1 + + "@aws-sdk/util-user-agent-node@3.972.9": dependencies: - '@aws-sdk/middleware-user-agent': 3.947.0 - '@aws-sdk/types': 3.936.0 - '@smithy/node-config-provider': 4.3.5 - '@smithy/types': 4.9.0 + "@aws-sdk/middleware-user-agent": 3.972.11 + "@aws-sdk/types": 3.973.1 + "@smithy/node-config-provider": 4.3.8 + "@smithy/types": 4.12.0 tslib: 2.8.1 + optional: true - '@aws-sdk/xml-builder@3.930.0': + "@aws-sdk/xml-builder@3.930.0": dependencies: - '@smithy/types': 4.9.0 + "@smithy/types": 4.9.0 fast-xml-parser: 5.2.5 tslib: 2.8.1 - '@aws/lambda-invoke-store@0.2.2': {} + "@aws-sdk/xml-builder@3.972.5": + dependencies: + "@smithy/types": 4.12.0 + fast-xml-parser: 5.3.6 + tslib: 2.8.1 + optional: true + + "@aws/lambda-invoke-store@0.2.2": {} + + "@aws/lambda-invoke-store@0.2.3": + optional: true - '@babel/code-frame@7.27.1': + "@babel/code-frame@7.27.1": dependencies: - '@babel/helper-validator-identifier': 7.27.1 + "@babel/helper-validator-identifier": 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/helper-validator-identifier@7.27.1': {} + "@babel/helper-validator-identifier@7.27.1": {} - '@babel/runtime@7.24.7': + "@babel/runtime@7.24.7": dependencies: regenerator-runtime: 0.14.1 - '@babel/runtime@7.26.0': + "@babel/runtime@7.26.0": dependencies: regenerator-runtime: 0.14.1 - '@babel/runtime@7.27.0': + "@babel/runtime@7.27.0": dependencies: regenerator-runtime: 0.14.1 - '@braintree/sanitize-url@7.1.0': {} + "@braintree/sanitize-url@7.1.0": {} + + "@bufbuild/protobuf@1.10.1": {} + + "@calcom/embed-core@1.5.2": {} + + "@calcom/embed-react@1.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@calcom/embed-core": 1.5.2 + "@calcom/embed-snippet": 1.3.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + "@calcom/embed-snippet@1.3.2": + dependencies: + "@calcom/embed-core": 1.5.2 + + "@corex/deepmerge@4.0.43": {} + + "@dimforge/rapier3d-compat@0.12.0": {} + + "@discoveryjs/json-ext@0.5.7": {} + + "@emnapi/runtime@1.8.1": + dependencies: + tslib: 2.8.1 + optional: true + + "@emotion/is-prop-valid@1.4.0": + dependencies: + "@emotion/memoize": 0.9.0 + optional: true + + "@emotion/memoize@0.9.0": + optional: true + + "@esbuild/aix-ppc64@0.27.3": + optional: true + + "@esbuild/android-arm64@0.27.3": + optional: true + + "@esbuild/android-arm@0.27.3": + optional: true + + "@esbuild/android-x64@0.27.3": + optional: true + + "@esbuild/darwin-arm64@0.27.3": + optional: true + + "@esbuild/darwin-x64@0.27.3": + optional: true + + "@esbuild/freebsd-arm64@0.27.3": + optional: true + + "@esbuild/freebsd-x64@0.27.3": + optional: true + + "@esbuild/linux-arm64@0.27.3": + optional: true + + "@esbuild/linux-arm@0.27.3": + optional: true + + "@esbuild/linux-ia32@0.27.3": + optional: true + + "@esbuild/linux-loong64@0.27.3": + optional: true - '@bufbuild/protobuf@1.10.1': {} + "@esbuild/linux-mips64el@0.27.3": + optional: true - '@calcom/embed-core@1.5.2': {} + "@esbuild/linux-ppc64@0.27.3": + optional: true - '@calcom/embed-react@1.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@calcom/embed-core': 1.5.2 - '@calcom/embed-snippet': 1.3.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@esbuild/linux-riscv64@0.27.3": + optional: true - '@calcom/embed-snippet@1.3.2': - dependencies: - '@calcom/embed-core': 1.5.2 + "@esbuild/linux-s390x@0.27.3": + optional: true - '@chevrotain/cst-dts-gen@11.0.3': - dependencies: - '@chevrotain/gast': 11.0.3 - '@chevrotain/types': 11.0.3 - lodash-es: 4.17.21 + "@esbuild/linux-x64@0.27.3": + optional: true - '@chevrotain/gast@11.0.3': - dependencies: - '@chevrotain/types': 11.0.3 - lodash-es: 4.17.21 + "@esbuild/netbsd-arm64@0.27.3": + optional: true - '@chevrotain/regexp-to-ast@11.0.3': {} + "@esbuild/netbsd-x64@0.27.3": + optional: true - '@chevrotain/types@11.0.3': {} + "@esbuild/openbsd-arm64@0.27.3": + optional: true - '@chevrotain/utils@11.0.3': {} + "@esbuild/openbsd-x64@0.27.3": + optional: true - '@corex/deepmerge@4.0.43': {} + "@esbuild/openharmony-arm64@0.27.3": + optional: true - '@discoveryjs/json-ext@0.5.7': {} + "@esbuild/sunos-x64@0.27.3": + optional: true - '@emnapi/runtime@1.7.1': - dependencies: - tslib: 2.8.1 + "@esbuild/win32-arm64@0.27.3": optional: true - '@emotion/is-prop-valid@0.8.8': - dependencies: - '@emotion/memoize': 0.7.4 + "@esbuild/win32-ia32@0.27.3": optional: true - '@emotion/memoize@0.7.4': + "@esbuild/win32-x64@0.27.3": optional: true - '@floating-ui/core@1.6.8': + "@floating-ui/core@1.6.8": dependencies: - '@floating-ui/utils': 0.2.8 + "@floating-ui/utils": 0.2.8 - '@floating-ui/dom@1.6.11': + "@floating-ui/dom@1.6.11": dependencies: - '@floating-ui/core': 1.6.8 - '@floating-ui/utils': 0.2.8 + "@floating-ui/core": 1.6.8 + "@floating-ui/utils": 0.2.8 - '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@floating-ui/dom': 1.6.11 + "@floating-ui/dom": 1.6.11 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/react@0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@floating-ui/react@0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@floating-ui/utils': 0.2.8 + "@floating-ui/react-dom": 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@floating-ui/utils": 0.2.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tabbable: 6.2.0 - '@floating-ui/utils@0.2.8': {} + "@floating-ui/utils@0.2.8": {} - '@formatjs/intl-localematcher@0.5.5': + "@formatjs/fast-memoize@3.1.0": dependencies: tslib: 2.8.1 - '@headlessui/react@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@formatjs/intl-localematcher@0.8.1": dependencies: - '@floating-ui/react': 0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.18.3(react@18.3.1) - '@react-aria/interactions': 3.22.3(react@18.3.1) - '@tanstack/react-virtual': 3.10.8(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) + "@formatjs/fast-memoize": 3.1.0 + tslib: 2.8.1 - '@hookform/resolvers@5.2.2(react-hook-form@7.68.0(react@18.3.1))': + "@fumadocs/tailwind@0.0.2(tailwindcss@4.2.0)": dependencies: - '@standard-schema/utils': 0.3.0 - react-hook-form: 7.68.0(react@18.3.1) + postcss-selector-parser: 7.1.1 + optionalDependencies: + tailwindcss: 4.2.0 - '@iconify/types@2.0.0': {} + "@headlessui/react@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@floating-ui/react": 0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@react-aria/focus": 3.18.3(react@18.3.1) + "@react-aria/interactions": 3.22.3(react@18.3.1) + "@tanstack/react-virtual": 3.10.8(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) - '@iconify/utils@2.1.33': + "@hookform/resolvers@5.2.2(react-hook-form@7.68.0(react@18.3.1))": dependencies: - '@antfu/install-pkg': 0.4.1 - '@antfu/utils': 0.7.10 - '@iconify/types': 2.0.0 - debug: 4.3.7 - kolorist: 1.8.0 - local-pkg: 0.5.0 - mlly: 1.7.2 - transitivePeerDependencies: - - supports-color + "@standard-schema/utils": 0.3.0 + react-hook-form: 7.68.0(react@18.3.1) - '@icons-pack/react-simple-icons@13.7.0(react@18.3.1)': + "@icons-pack/react-simple-icons@13.7.0(react@18.3.1)": dependencies: react: 18.3.1 - '@img/sharp-darwin-arm64@0.33.5': + "@img/colour@1.0.0": + optional: true + + "@img/sharp-darwin-arm64@0.34.5": optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 + "@img/sharp-libvips-darwin-arm64": 1.2.4 optional: true - '@img/sharp-darwin-x64@0.33.5': + "@img/sharp-darwin-x64@0.34.5": optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 + "@img/sharp-libvips-darwin-x64": 1.2.4 + optional: true + + "@img/sharp-libvips-darwin-arm64@1.2.4": + optional: true + + "@img/sharp-libvips-darwin-x64@1.2.4": + optional: true + + "@img/sharp-libvips-linux-arm64@1.2.4": optional: true - '@img/sharp-libvips-darwin-arm64@1.0.4': + "@img/sharp-libvips-linux-arm@1.2.4": optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': + "@img/sharp-libvips-linux-ppc64@1.2.4": optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': + "@img/sharp-libvips-linux-riscv64@1.2.4": optional: true - '@img/sharp-libvips-linux-arm@1.0.5': + "@img/sharp-libvips-linux-s390x@1.2.4": optional: true - '@img/sharp-libvips-linux-s390x@1.0.4': + "@img/sharp-libvips-linux-x64@1.2.4": optional: true - '@img/sharp-libvips-linux-x64@1.0.4': + "@img/sharp-libvips-linuxmusl-arm64@1.2.4": optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + "@img/sharp-libvips-linuxmusl-x64@1.2.4": optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': + "@img/sharp-linux-arm64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-arm64": 1.2.4 + optional: true + + "@img/sharp-linux-arm@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-arm": 1.2.4 optional: true - '@img/sharp-linux-arm64@0.33.5': + "@img/sharp-linux-ppc64@0.34.5": optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 + "@img/sharp-libvips-linux-ppc64": 1.2.4 optional: true - '@img/sharp-linux-arm@0.33.5': + "@img/sharp-linux-riscv64@0.34.5": optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 + "@img/sharp-libvips-linux-riscv64": 1.2.4 optional: true - '@img/sharp-linux-s390x@0.33.5': + "@img/sharp-linux-s390x@0.34.5": optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 + "@img/sharp-libvips-linux-s390x": 1.2.4 optional: true - '@img/sharp-linux-x64@0.33.5': + "@img/sharp-linux-x64@0.34.5": optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 + "@img/sharp-libvips-linux-x64": 1.2.4 optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': + "@img/sharp-linuxmusl-arm64@0.34.5": optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 optional: true - '@img/sharp-linuxmusl-x64@0.33.5': + "@img/sharp-linuxmusl-x64@0.34.5": optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + "@img/sharp-libvips-linuxmusl-x64": 1.2.4 optional: true - '@img/sharp-wasm32@0.33.5': + "@img/sharp-wasm32@0.34.5": dependencies: - '@emnapi/runtime': 1.7.1 + "@emnapi/runtime": 1.8.1 optional: true - '@img/sharp-win32-ia32@0.33.5': + "@img/sharp-win32-arm64@0.34.5": optional: true - '@img/sharp-win32-x64@0.33.5': + "@img/sharp-win32-ia32@0.34.5": optional: true - '@inkeep/cxkit-color-mode@0.5.98': {} + "@img/sharp-win32-x64@0.34.5": + optional: true - '@inkeep/cxkit-primitives@0.5.98(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@4.0.15)': - dependencies: - '@inkeep/cxkit-color-mode': 0.5.98 - '@inkeep/cxkit-theme': 0.5.98 - '@inkeep/cxkit-types': 0.5.98 - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-avatar': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-checkbox': 1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-collection': 1.1.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-hover-card': 1.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popover': 1.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-popper': 1.2.8(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.9(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-scroll-area': 1.2.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-tabs': 1.1.13(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-tooltip': 1.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@zag-js/focus-trap': 1.24.1 - '@zag-js/presence': 1.24.1 - '@zag-js/react': 1.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@inkeep/cxkit-color-mode@0.5.98": {} + + "@inkeep/cxkit-primitives@0.5.98(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@4.0.15)": + dependencies: + "@inkeep/cxkit-color-mode": 0.5.98 + "@inkeep/cxkit-theme": 0.5.98 + "@inkeep/cxkit-types": 0.5.98 + "@radix-ui/number": 1.1.1 + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-avatar": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-checkbox": 1.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-collection": 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-dismissable-layer": 1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-focus-scope": 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-hover-card": 1.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-popover": 1.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-popper": 1.2.8(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-portal": 1.1.9(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-presence": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-scroll-area": 1.2.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-tabs": 1.1.13(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-tooltip": 1.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@zag-js/focus-trap": 1.24.1 + "@zag-js/presence": 1.24.1 + "@zag-js/react": 1.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) altcha-lib: 1.2.0 aria-hidden: 1.2.4 dequal: 2.0.3 @@ -6865,161 +10840,151 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-error-boundary: 6.0.0(react@18.3.1) react-hook-form: 7.54.2(react@18.3.1) - react-markdown: 9.0.3(@types/react@18.3.3)(react@18.3.1) - react-remove-scroll: 2.7.1(@types/react@18.3.3)(react@18.3.1) + react-markdown: 9.0.3(@types/react@19.2.14)(react@18.3.1) + react-remove-scroll: 2.7.1(@types/react@19.2.14)(react@18.3.1) react-svg: 16.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-textarea-autosize: 8.5.7(@types/react@18.3.3)(react@18.3.1) + react-textarea-autosize: 8.5.7(@types/react@19.2.14)(react@18.3.1) rehype-raw: 7.0.0 remark-gfm: 4.0.1 unist-util-visit: 5.0.0 use-sync-external-store: 1.5.0(react@18.3.1) transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' + - "@types/react" + - "@types/react-dom" - encoding - supports-color - zod - '@inkeep/cxkit-react@0.5.98(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@4.0.15)': + "@inkeep/cxkit-react@0.5.98(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@4.0.15)": dependencies: - '@inkeep/cxkit-styled': 0.5.98(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@4.0.15) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.3)(react@18.3.1) + "@inkeep/cxkit-styled": 0.5.98(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@4.0.15) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@18.3.1) lucide-react: 0.503.0(react@18.3.1) transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' + - "@types/react" + - "@types/react-dom" - encoding - react - react-dom - supports-color - zod - '@inkeep/cxkit-styled@0.5.98(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@4.0.15)': + "@inkeep/cxkit-styled@0.5.98(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@4.0.15)": dependencies: - '@inkeep/cxkit-primitives': 0.5.98(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@4.0.15) + "@inkeep/cxkit-primitives": 0.5.98(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@4.0.15) class-variance-authority: 0.7.1 clsx: 2.1.1 merge-anything: 5.1.7 tailwind-merge: 2.6.0 transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' + - "@types/react" + - "@types/react-dom" - encoding - react - react-dom - supports-color - zod - '@inkeep/cxkit-theme@0.5.98': + "@inkeep/cxkit-theme@0.5.98": dependencies: colorjs.io: 0.5.2 - '@inkeep/cxkit-types@0.5.98': {} + "@inkeep/cxkit-types@0.5.98": {} - '@isaacs/cliui@8.0.2': + "@jridgewell/gen-mapping@0.3.8": dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 + "@jridgewell/set-array": 1.2.1 + "@jridgewell/sourcemap-codec": 1.5.0 + "@jridgewell/trace-mapping": 0.3.25 - '@jridgewell/gen-mapping@0.3.8': + "@jridgewell/remapping@2.3.5": dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + "@jridgewell/gen-mapping": 0.3.8 + "@jridgewell/trace-mapping": 0.3.25 - '@jridgewell/resolve-uri@3.1.2': {} + "@jridgewell/resolve-uri@3.1.2": {} - '@jridgewell/set-array@1.2.1': {} + "@jridgewell/set-array@1.2.1": {} - '@jridgewell/sourcemap-codec@1.5.0': {} + "@jridgewell/sourcemap-codec@1.5.0": {} - '@jridgewell/trace-mapping@0.3.25': + "@jridgewell/sourcemap-codec@1.5.5": {} + + "@jridgewell/trace-mapping@0.3.25": dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.5.0 - '@langfuse/client@4.6.1(@opentelemetry/api@1.9.0)': + "@langfuse/client@4.6.1(@opentelemetry/api@1.9.0)": dependencies: - '@langfuse/core': 4.6.1(@opentelemetry/api@1.9.0) - '@langfuse/tracing': 4.6.1(@opentelemetry/api@1.9.0) - '@opentelemetry/api': 1.9.0 + "@langfuse/core": 4.6.1(@opentelemetry/api@1.9.0) + "@langfuse/tracing": 4.6.1(@opentelemetry/api@1.9.0) + "@opentelemetry/api": 1.9.0 mustache: 4.2.0 - '@langfuse/core@4.6.1(@opentelemetry/api@1.9.0)': + "@langfuse/core@4.6.1(@opentelemetry/api@1.9.0)": dependencies: - '@opentelemetry/api': 1.9.0 + "@opentelemetry/api": 1.9.0 - '@langfuse/openai@4.6.1(@opentelemetry/api@1.9.0)': + "@langfuse/openai@4.6.1(@opentelemetry/api@1.9.0)": dependencies: - '@langfuse/core': 4.6.1(@opentelemetry/api@1.9.0) - '@langfuse/tracing': 4.6.1(@opentelemetry/api@1.9.0) + "@langfuse/core": 4.6.1(@opentelemetry/api@1.9.0) + "@langfuse/tracing": 4.6.1(@opentelemetry/api@1.9.0) transitivePeerDependencies: - - '@opentelemetry/api' + - "@opentelemetry/api" - '@langfuse/otel@4.6.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-http@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0))': + "@langfuse/otel@4.6.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-http@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0))": dependencies: - '@langfuse/core': 4.6.1(@opentelemetry/api@1.9.0) - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + "@langfuse/core": 4.6.1(@opentelemetry/api@1.9.0) + "@opentelemetry/api": 1.9.0 + "@opentelemetry/core": 2.5.1(@opentelemetry/api@1.9.0) + "@opentelemetry/exporter-trace-otlp-http": 0.212.0(@opentelemetry/api@1.9.0) + "@opentelemetry/sdk-trace-base": 2.5.1(@opentelemetry/api@1.9.0) - '@langfuse/tracing@4.6.1(@opentelemetry/api@1.9.0)': + "@langfuse/tracing@4.6.1(@opentelemetry/api@1.9.0)": dependencies: - '@langfuse/core': 4.6.1(@opentelemetry/api@1.9.0) - '@opentelemetry/api': 1.9.0 + "@langfuse/core": 4.6.1(@opentelemetry/api@1.9.0) + "@opentelemetry/api": 1.9.0 - '@livekit/mutex@1.1.1': {} + "@livekit/mutex@1.1.1": {} - '@livekit/protocol@1.44.0': + "@livekit/protocol@1.44.0": dependencies: - '@bufbuild/protobuf': 1.10.1 + "@bufbuild/protobuf": 1.10.1 - '@mdx-js/mdx@3.0.1': + "@mdx-js/mdx@3.1.1": dependencies: - '@types/estree': 1.0.6 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdx': 2.0.13 + "@types/estree": 1.0.8 + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdx": 2.0.13 + acorn: 8.15.0 collapse-white-space: 2.1.0 devlop: 1.1.0 - estree-util-build-jsx: 3.0.1 estree-util-is-identifier-name: 3.0.0 - estree-util-to-js: 2.0.0 + estree-util-scope: 1.0.0 estree-walker: 3.0.3 - hast-util-to-estree: 3.1.0 - hast-util-to-jsx-runtime: 2.3.2 + hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 - periscopic: 3.1.0 - remark-mdx: 3.0.1 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.15.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 remark-parse: 11.0.0 - remark-rehype: 11.1.1 - source-map: 0.7.4 + remark-rehype: 11.1.2 + source-map: 0.7.6 unified: 11.0.5 unist-util-position-from-estree: 2.0.0 unist-util-stringify-position: 4.0.0 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 vfile: 6.0.3 transitivePeerDependencies: - supports-color - '@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1)': - dependencies: - '@types/mdx': 2.0.13 - '@types/react': 18.3.3 - react: 18.3.1 - - '@mediapipe/tasks-vision@0.10.17': {} - - '@mermaid-js/parser@0.3.0': - dependencies: - langium: 3.0.0 + "@mediapipe/tasks-vision@0.10.17": {} - '@modelcontextprotocol/sdk@1.13.2': + "@modelcontextprotocol/sdk@1.13.2": dependencies: ajv: 6.12.6 content-type: 1.0.5 @@ -7035,239 +11000,199 @@ snapshots: transitivePeerDependencies: - supports-color - '@monogrid/gainmap-js@3.0.6(three@0.172.0)': + "@monogrid/gainmap-js@3.0.6(three@0.172.0)": dependencies: promise-worker-transferable: 1.0.4 three: 0.172.0 - '@napi-rs/simple-git-android-arm-eabi@0.1.19': - optional: true - - '@napi-rs/simple-git-android-arm64@0.1.19': - optional: true - - '@napi-rs/simple-git-darwin-arm64@0.1.19': - optional: true - - '@napi-rs/simple-git-darwin-x64@0.1.19': - optional: true - - '@napi-rs/simple-git-freebsd-x64@0.1.19': - optional: true - - '@napi-rs/simple-git-linux-arm-gnueabihf@0.1.19': - optional: true - - '@napi-rs/simple-git-linux-arm64-gnu@0.1.19': - optional: true - - '@napi-rs/simple-git-linux-arm64-musl@0.1.19': - optional: true - - '@napi-rs/simple-git-linux-powerpc64le-gnu@0.1.19': - optional: true - - '@napi-rs/simple-git-linux-s390x-gnu@0.1.19': - optional: true - - '@napi-rs/simple-git-linux-x64-gnu@0.1.19': - optional: true - - '@napi-rs/simple-git-linux-x64-musl@0.1.19': - optional: true - - '@napi-rs/simple-git-win32-arm64-msvc@0.1.19': - optional: true - - '@napi-rs/simple-git-win32-x64-msvc@0.1.19': - optional: true - - '@napi-rs/simple-git@0.1.19': - optionalDependencies: - '@napi-rs/simple-git-android-arm-eabi': 0.1.19 - '@napi-rs/simple-git-android-arm64': 0.1.19 - '@napi-rs/simple-git-darwin-arm64': 0.1.19 - '@napi-rs/simple-git-darwin-x64': 0.1.19 - '@napi-rs/simple-git-freebsd-x64': 0.1.19 - '@napi-rs/simple-git-linux-arm-gnueabihf': 0.1.19 - '@napi-rs/simple-git-linux-arm64-gnu': 0.1.19 - '@napi-rs/simple-git-linux-arm64-musl': 0.1.19 - '@napi-rs/simple-git-linux-powerpc64le-gnu': 0.1.19 - '@napi-rs/simple-git-linux-s390x-gnu': 0.1.19 - '@napi-rs/simple-git-linux-x64-gnu': 0.1.19 - '@napi-rs/simple-git-linux-x64-musl': 0.1.19 - '@napi-rs/simple-git-win32-arm64-msvc': 0.1.19 - '@napi-rs/simple-git-win32-x64-msvc': 0.1.19 - - '@next/bundle-analyzer@15.1.4': + "@next/bundle-analyzer@16.1.6": dependencies: webpack-bundle-analyzer: 4.10.1 transitivePeerDependencies: - bufferutil - utf-8-validate - '@next/env@13.5.6': {} + "@next/env@13.5.6": {} - '@next/env@15.2.8': {} + "@next/env@16.1.6": {} - '@next/swc-darwin-arm64@15.2.5': + "@next/swc-darwin-arm64@16.1.6": optional: true - '@next/swc-darwin-x64@15.2.5': + "@next/swc-darwin-x64@16.1.6": optional: true - '@next/swc-linux-arm64-gnu@15.2.5': + "@next/swc-linux-arm64-gnu@16.1.6": optional: true - '@next/swc-linux-arm64-musl@15.2.5': + "@next/swc-linux-arm64-musl@16.1.6": optional: true - '@next/swc-linux-x64-gnu@15.2.5': + "@next/swc-linux-x64-gnu@16.1.6": optional: true - '@next/swc-linux-x64-musl@15.2.5': + "@next/swc-linux-x64-musl@16.1.6": optional: true - '@next/swc-win32-arm64-msvc@15.2.5': + "@next/swc-win32-arm64-msvc@16.1.6": optional: true - '@next/swc-win32-x64-msvc@15.2.5': + "@next/swc-win32-x64-msvc@16.1.6": optional: true - '@nodelib/fs.scandir@2.1.5': + "@nodelib/fs.scandir@2.1.5": dependencies: - '@nodelib/fs.stat': 2.0.5 + "@nodelib/fs.stat": 2.0.5 run-parallel: 1.2.0 - '@nodelib/fs.stat@2.0.5': {} + "@nodelib/fs.stat@2.0.5": {} - '@nodelib/fs.walk@1.2.8': + "@nodelib/fs.walk@1.2.8": dependencies: - '@nodelib/fs.scandir': 2.1.5 + "@nodelib/fs.scandir": 2.1.5 fastq: 1.17.1 - '@oozcitak/dom@1.15.10': + "@oozcitak/dom@1.15.10": dependencies: - '@oozcitak/infra': 1.0.8 - '@oozcitak/url': 1.0.4 - '@oozcitak/util': 8.3.8 + "@oozcitak/infra": 1.0.8 + "@oozcitak/url": 1.0.4 + "@oozcitak/util": 8.3.8 - '@oozcitak/infra@1.0.8': + "@oozcitak/infra@1.0.8": dependencies: - '@oozcitak/util': 8.3.8 + "@oozcitak/util": 8.3.8 - '@oozcitak/url@1.0.4': + "@oozcitak/url@1.0.4": dependencies: - '@oozcitak/infra': 1.0.8 - '@oozcitak/util': 8.3.8 + "@oozcitak/infra": 1.0.8 + "@oozcitak/util": 8.3.8 - '@oozcitak/util@8.3.8': {} + "@oozcitak/util@8.3.8": {} - '@opentelemetry/api-logs@0.203.0': + "@opentelemetry/api-logs@0.212.0": dependencies: - '@opentelemetry/api': 1.9.0 + "@opentelemetry/api": 1.9.0 - '@opentelemetry/api@1.9.0': {} + "@opentelemetry/api@1.9.0": {} - '@opentelemetry/context-async-hooks@2.0.1(@opentelemetry/api@1.9.0)': + "@opentelemetry/context-async-hooks@2.0.1(@opentelemetry/api@1.9.0)": dependencies: - '@opentelemetry/api': 1.9.0 + "@opentelemetry/api": 1.9.0 - '@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0)': + "@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0)": dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.36.0 + "@opentelemetry/api": 1.9.0 + "@opentelemetry/semantic-conventions": 1.36.0 - '@opentelemetry/exporter-trace-otlp-http@0.203.0(@opentelemetry/api@1.9.0)': + "@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0)": dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + "@opentelemetry/api": 1.9.0 + "@opentelemetry/semantic-conventions": 1.39.0 - '@opentelemetry/otlp-exporter-base@0.203.0(@opentelemetry/api@1.9.0)': + "@opentelemetry/exporter-trace-otlp-http@0.212.0(@opentelemetry/api@1.9.0)": dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) + "@opentelemetry/api": 1.9.0 + "@opentelemetry/core": 2.5.1(@opentelemetry/api@1.9.0) + "@opentelemetry/otlp-exporter-base": 0.212.0(@opentelemetry/api@1.9.0) + "@opentelemetry/otlp-transformer": 0.212.0(@opentelemetry/api@1.9.0) + "@opentelemetry/resources": 2.5.1(@opentelemetry/api@1.9.0) + "@opentelemetry/sdk-trace-base": 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer@0.203.0(@opentelemetry/api@1.9.0)': + "@opentelemetry/otlp-exporter-base@0.212.0(@opentelemetry/api@1.9.0)": dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - protobufjs: 7.5.4 + "@opentelemetry/api": 1.9.0 + "@opentelemetry/core": 2.5.1(@opentelemetry/api@1.9.0) + "@opentelemetry/otlp-transformer": 0.212.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources@2.0.1(@opentelemetry/api@1.9.0)': + "@opentelemetry/otlp-transformer@0.212.0(@opentelemetry/api@1.9.0)": dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.36.0 + "@opentelemetry/api": 1.9.0 + "@opentelemetry/api-logs": 0.212.0 + "@opentelemetry/core": 2.5.1(@opentelemetry/api@1.9.0) + "@opentelemetry/resources": 2.5.1(@opentelemetry/api@1.9.0) + "@opentelemetry/sdk-logs": 0.212.0(@opentelemetry/api@1.9.0) + "@opentelemetry/sdk-metrics": 2.5.1(@opentelemetry/api@1.9.0) + "@opentelemetry/sdk-trace-base": 2.5.1(@opentelemetry/api@1.9.0) + protobufjs: 8.0.0 - '@opentelemetry/sdk-logs@0.203.0(@opentelemetry/api@1.9.0)': + "@opentelemetry/resources@2.0.1(@opentelemetry/api@1.9.0)": dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + "@opentelemetry/api": 1.9.0 + "@opentelemetry/core": 2.0.1(@opentelemetry/api@1.9.0) + "@opentelemetry/semantic-conventions": 1.36.0 - '@opentelemetry/sdk-metrics@2.0.1(@opentelemetry/api@1.9.0)': + "@opentelemetry/resources@2.5.1(@opentelemetry/api@1.9.0)": dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + "@opentelemetry/api": 1.9.0 + "@opentelemetry/core": 2.5.1(@opentelemetry/api@1.9.0) + "@opentelemetry/semantic-conventions": 1.39.0 - '@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0)': + "@opentelemetry/sdk-logs@0.212.0(@opentelemetry/api@1.9.0)": dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.36.0 + "@opentelemetry/api": 1.9.0 + "@opentelemetry/api-logs": 0.212.0 + "@opentelemetry/core": 2.5.1(@opentelemetry/api@1.9.0) + "@opentelemetry/resources": 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node@2.0.1(@opentelemetry/api@1.9.0)': + "@opentelemetry/sdk-metrics@2.5.1(@opentelemetry/api@1.9.0)": dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + "@opentelemetry/api": 1.9.0 + "@opentelemetry/core": 2.5.1(@opentelemetry/api@1.9.0) + "@opentelemetry/resources": 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions@1.36.0': {} + "@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0)": + dependencies: + "@opentelemetry/api": 1.9.0 + "@opentelemetry/core": 2.0.1(@opentelemetry/api@1.9.0) + "@opentelemetry/resources": 2.0.1(@opentelemetry/api@1.9.0) + "@opentelemetry/semantic-conventions": 1.36.0 - '@pkgjs/parseargs@0.11.0': - optional: true + "@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0)": + dependencies: + "@opentelemetry/api": 1.9.0 + "@opentelemetry/core": 2.5.1(@opentelemetry/api@1.9.0) + "@opentelemetry/resources": 2.5.1(@opentelemetry/api@1.9.0) + "@opentelemetry/semantic-conventions": 1.39.0 + + "@opentelemetry/sdk-trace-node@2.0.1(@opentelemetry/api@1.9.0)": + dependencies: + "@opentelemetry/api": 1.9.0 + "@opentelemetry/context-async-hooks": 2.0.1(@opentelemetry/api@1.9.0) + "@opentelemetry/core": 2.0.1(@opentelemetry/api@1.9.0) + "@opentelemetry/sdk-trace-base": 2.0.1(@opentelemetry/api@1.9.0) + + "@opentelemetry/semantic-conventions@1.36.0": {} - '@polka/url@1.0.0-next.25': {} + "@opentelemetry/semantic-conventions@1.39.0": {} - '@protobufjs/aspromise@1.1.2': {} + "@orama/orama@3.1.18": {} - '@protobufjs/base64@1.1.2': {} + "@polka/url@1.0.0-next.29": {} - '@protobufjs/codegen@2.0.4': {} + "@protobufjs/aspromise@1.1.2": {} - '@protobufjs/eventemitter@1.1.0': {} + "@protobufjs/base64@1.1.2": {} - '@protobufjs/fetch@1.1.0': + "@protobufjs/codegen@2.0.4": {} + + "@protobufjs/eventemitter@1.1.0": {} + + "@protobufjs/fetch@1.1.0": dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 + "@protobufjs/aspromise": 1.1.2 + "@protobufjs/inquire": 1.1.0 - '@protobufjs/float@1.0.2': {} + "@protobufjs/float@1.0.2": {} - '@protobufjs/inquire@1.1.0': {} + "@protobufjs/inquire@1.1.0": {} - '@protobufjs/path@1.1.2': {} + "@protobufjs/path@1.1.2": {} - '@protobufjs/pool@1.1.0': {} + "@protobufjs/pool@1.1.0": {} - '@protobufjs/utf8@1.1.0': {} + "@protobufjs/utf8@1.1.0": {} - '@puppeteer/browsers@2.10.10': + "@puppeteer/browsers@2.10.10": dependencies: debug: 4.4.3 extract-zip: 2.0.1 @@ -7281,997 +11206,1093 @@ snapshots: - react-native-b4a - supports-color - '@radix-ui/number@1.1.0': {} + "@radix-ui/number@1.1.0": {} - '@radix-ui/number@1.1.1': {} + "@radix-ui/number@1.1.1": {} - '@radix-ui/primitive@1.1.1': {} + "@radix-ui/primitive@1.1.1": {} - '@radix-ui/primitive@1.1.2': {} + "@radix-ui/primitive@1.1.2": {} - '@radix-ui/primitive@1.1.3': {} + "@radix-ui/primitive@1.1.3": {} - '@radix-ui/react-accordion@1.2.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-accordion@1.2.12(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collapsible': 1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-collection': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-collapsible": 1.1.12(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-collection": 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-arrow@1.1.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-accordion@1.2.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-collapsible": 1.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-collection": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-id": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-arrow@1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-arrow@1.1.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.1(@types/react@19.2.14)(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.3 + "@types/react": 19.2.14 - '@radix-ui/react-arrow@1.1.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-arrow@1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(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.3 + "@types/react": 19.2.14 - '@radix-ui/react-avatar@1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-arrow@1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(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.3 + "@types/react": 19.2.14 - '@radix-ui/react-avatar@1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-avatar@1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.0.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-checkbox@1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-avatar@1.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-collapsible@1.1.11(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-presence': 1.1.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-checkbox@1.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-presence": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-previous": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-size": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-collapsible@1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-collapsible@1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-presence": 1.1.4(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-collection@1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.3)(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-collapsible@1.1.12(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-presence": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + "@types/react": 19.2.14 + + "@radix-ui/react-collapsible@1.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-id": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-presence": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-collection@1.1.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-collection@1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": 1.1.2(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-collection@1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-compose-refs@1.1.1(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-context@1.1.1(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-context@1.1.2(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-context@1.1.1(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-dialog@1.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + "@types/react": 19.2.14 + + "@radix-ui/react-dialog@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-dismissable-layer": 1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-focus-scope": 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-portal": 1.1.9(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-presence": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@18.3.1) + optionalDependencies: + "@types/react": 19.2.14 + + "@radix-ui/react-dialog@1.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-dismissable-layer": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-focus-guards": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-focus-scope": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-id": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-portal": 1.1.4(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-presence": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.1.0(@types/react@19.2.14)(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.6.3(@types/react@18.3.3)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@19.2.14)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-direction@1.1.0(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-direction@1.1.0(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-direction@1.1.1(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-dismissable-layer@1.1.10(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-dismissable-layer@1.1.10(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-escape-keydown": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-dismissable-layer@1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-escape-keydown": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-dismissable-layer@1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-dismissable-layer@1.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.0.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-escape-keydown": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-dismissable-layer@1.1.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-dismissable-layer@1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-escape-keydown": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-dropdown-menu@2.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-dropdown-menu@2.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-menu': 2.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-id": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-menu": 2.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-focus-guards@1.1.1(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-focus-guards@1.1.2(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-focus-guards@1.1.2(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-focus-scope@1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-focus-scope@1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-focus-scope@1.1.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-focus-scope@1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-hover-card@1.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-hover-card@1.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-dismissable-layer": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-popper": 1.2.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-portal": 1.1.4(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-presence": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-id@1.1.0(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-id@1.1.0(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-id@1.1.1(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-label@2.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-label@2.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(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.3 - - '@radix-ui/react-menu@2.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-menu@2.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-collection": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-dismissable-layer": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-focus-guards": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-focus-scope": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-id": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-popper": 1.2.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-portal": 1.1.4(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-presence": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-roving-focus": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.0(@types/react@19.2.14)(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.6.3(@types/react@18.3.3)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-popover@1.1.15(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popper': 1.2.8(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.9(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.3)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@19.2.14)(react@18.3.1) + optionalDependencies: + "@types/react": 19.2.14 + + "@radix-ui/react-navigation-menu@1.2.14(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-collection": 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-dismissable-layer": 1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-presence": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-visually-hidden": 1.2.3(@types/react@19.2.14)(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": 19.2.14 + + "@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-dismissable-layer": 1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-focus-scope": 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-popper": 1.2.8(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-portal": 1.1.9(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-presence": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(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.6.3(@types/react@18.3.3)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-popover@1.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@19.2.14)(react@18.3.1) + optionalDependencies: + "@types/react": 19.2.14 + + "@radix-ui/react-popover@1.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-dismissable-layer": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-focus-guards": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-focus-scope": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-id": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-popper": 1.2.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-portal": 1.1.4(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-presence": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.1.0(@types/react@19.2.14)(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.7.1(@types/react@18.3.3)(react@18.3.1) + react-remove-scroll: 2.7.1(@types/react@19.2.14)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-popper@1.2.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.1.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/rect': 1.1.0 + "@types/react": 19.2.14 + + "@radix-ui/react-popper@1.2.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@floating-ui/react-dom": 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-arrow": 1.1.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.0.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-rect": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-size": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/rect": 1.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-popper@1.2.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/rect': 1.1.0 + "@types/react": 19.2.14 + + "@radix-ui/react-popper@1.2.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@floating-ui/react-dom": 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-arrow": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-rect": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-size": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/rect": 1.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-popper@1.2.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.1.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/rect': 1.1.1 + "@types/react": 19.2.14 + + "@radix-ui/react-popper@1.2.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@floating-ui/react-dom": 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-arrow": 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-rect": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/rect": 1.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-popper@1.2.8(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.1.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/rect': 1.1.1 + "@types/react": 19.2.14 + + "@radix-ui/react-popper@1.2.8(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@floating-ui/react-dom": 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-arrow": 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-rect": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/rect": 1.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-portal@1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-portal@1.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-primitive": 2.0.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-portal@1.1.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-portal@1.1.4(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-portal@1.1.9(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-portal@1.1.9(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-presence@1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-presence@1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-presence@1.1.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-presence@1.1.4(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-presence@1.1.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-presence@1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-primitive@2.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-primitive@2.0.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-slot': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-slot": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-primitive@2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-primitive@2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-slot": 1.1.2(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-primitive@2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-primitive@2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-roving-focus@1.1.11(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.3)(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-roving-focus@1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-collection": 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-roving-focus@1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-roving-focus@1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-collection": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-id": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-scroll-area@1.2.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/number': 1.1.0 - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-scroll-area@1.2.10(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/number": 1.1.1 + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-presence": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-scroll-area@1.2.9(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-presence': 1.1.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-scroll-area@1.2.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/number": 1.1.0 + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-presence": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.0(@types/react@19.2.14)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + "@types/react": 19.2.14 + + "@radix-ui/react-scroll-area@1.2.9(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/number": 1.1.1 + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-presence": 1.1.4(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-select@2.2.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popper': 1.2.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.9(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-select@2.2.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/number": 1.1.1 + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-collection": 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-dismissable-layer": 1.1.10(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-focus-guards": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-focus-scope": 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-popper": 1.2.7(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-portal": 1.1.9(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-visually-hidden": 1.2.3(@types/react@19.2.14)(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.6.3(@types/react@18.3.3)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@19.2.14)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-separator@1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-separator@1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(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.3 + "@types/react": 19.2.14 - '@radix-ui/react-slot@1.1.1(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-slot@1.1.1(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-slot@1.1.2(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-slot@1.1.2(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-slot@1.2.3(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-switch@1.2.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-tabs@1.1.13(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-switch@1.2.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-presence': 1.1.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-tabs@1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-tabs@1.1.13(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-presence": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-roving-focus": 1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-tooltip@1.1.6(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popper': 1.2.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-tabs@1.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-direction": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-id": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-presence": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-roving-focus": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - - '@radix-ui/react-tooltip@1.1.8(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@types/react": 19.2.14 + + "@radix-ui/react-tooltip@1.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-dismissable-layer": 1.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-id": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-popper": 1.2.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-portal": 1.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-presence": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-visually-hidden": 1.1.1(@types/react@19.2.14)(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.3 + "@types/react": 19.2.14 + + "@radix-ui/react-tooltip@1.1.8(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-context": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-dismissable-layer": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-id": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-popper": 1.2.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-portal": 1.1.4(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-presence": 1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": 1.1.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-controllable-state": 1.1.0(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-visually-hidden": 1.1.2(@types/react@19.2.14)(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": 19.2.14 - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-use-effect-event": 0.0.2(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-previous@1.1.0(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-previous@1.1.1(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@18.3.1)": dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-rect@1.1.0(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/rect': 1.1.0 + "@radix-ui/rect": 1.1.0 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-rect@1.1.1(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/rect': 1.1.1 + "@radix-ui/rect": 1.1.1 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-size@1.1.0(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-size@1.1.0(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.0(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-use-size@1.1.1(@types/react@18.3.3)(react@18.3.1)': + "@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.3)(react@18.3.1) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@radix-ui/react-visually-hidden@1.1.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-visually-hidden@1.1.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.1(@types/react@19.2.14)(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.3 + "@types/react": 19.2.14 - '@radix-ui/react-visually-hidden@1.1.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-visually-hidden@1.1.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.0.2(@types/react@19.2.14)(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.3 + "@types/react": 19.2.14 - '@radix-ui/react-visually-hidden@1.2.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@radix-ui/react-visually-hidden@1.2.3(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react@19.2.14)(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.3 + "@types/react": 19.2.14 - '@radix-ui/rect@1.1.0': {} + "@radix-ui/rect@1.1.0": {} - '@radix-ui/rect@1.1.1': {} + "@radix-ui/rect@1.1.1": {} - '@react-aria/focus@3.18.3(react@18.3.1)': + "@react-aria/focus@3.18.3(react@18.3.1)": dependencies: - '@react-aria/interactions': 3.22.3(react@18.3.1) - '@react-aria/utils': 3.25.3(react@18.3.1) - '@react-types/shared': 3.25.0(react@18.3.1) - '@swc/helpers': 0.5.15 + "@react-aria/interactions": 3.22.3(react@18.3.1) + "@react-aria/utils": 3.25.3(react@18.3.1) + "@react-types/shared": 3.25.0(react@18.3.1) + "@swc/helpers": 0.5.15 clsx: 2.1.1 react: 18.3.1 - '@react-aria/interactions@3.22.3(react@18.3.1)': + "@react-aria/interactions@3.22.3(react@18.3.1)": dependencies: - '@react-aria/ssr': 3.9.6(react@18.3.1) - '@react-aria/utils': 3.25.3(react@18.3.1) - '@react-types/shared': 3.25.0(react@18.3.1) - '@swc/helpers': 0.5.15 + "@react-aria/ssr": 3.9.6(react@18.3.1) + "@react-aria/utils": 3.25.3(react@18.3.1) + "@react-types/shared": 3.25.0(react@18.3.1) + "@swc/helpers": 0.5.15 react: 18.3.1 - '@react-aria/ssr@3.9.6(react@18.3.1)': + "@react-aria/ssr@3.9.6(react@18.3.1)": dependencies: - '@swc/helpers': 0.5.15 + "@swc/helpers": 0.5.15 react: 18.3.1 - '@react-aria/utils@3.25.3(react@18.3.1)': + "@react-aria/utils@3.25.3(react@18.3.1)": dependencies: - '@react-aria/ssr': 3.9.6(react@18.3.1) - '@react-stately/utils': 3.10.4(react@18.3.1) - '@react-types/shared': 3.25.0(react@18.3.1) - '@swc/helpers': 0.5.15 + "@react-aria/ssr": 3.9.6(react@18.3.1) + "@react-stately/utils": 3.10.4(react@18.3.1) + "@react-types/shared": 3.25.0(react@18.3.1) + "@swc/helpers": 0.5.15 clsx: 2.1.1 react: 18.3.1 - '@react-spring/animated@9.7.5(react@18.3.1)': + "@react-spring/animated@9.7.5(react@18.3.1)": dependencies: - '@react-spring/shared': 9.7.5(react@18.3.1) - '@react-spring/types': 9.7.5 + "@react-spring/shared": 9.7.5(react@18.3.1) + "@react-spring/types": 9.7.5 react: 18.3.1 - '@react-spring/core@9.7.5(react@18.3.1)': + "@react-spring/core@9.7.5(react@18.3.1)": dependencies: - '@react-spring/animated': 9.7.5(react@18.3.1) - '@react-spring/shared': 9.7.5(react@18.3.1) - '@react-spring/types': 9.7.5 + "@react-spring/animated": 9.7.5(react@18.3.1) + "@react-spring/shared": 9.7.5(react@18.3.1) + "@react-spring/types": 9.7.5 react: 18.3.1 - '@react-spring/rafz@9.7.5': {} + "@react-spring/rafz@9.7.5": {} - '@react-spring/shared@9.7.5(react@18.3.1)': + "@react-spring/shared@9.7.5(react@18.3.1)": dependencies: - '@react-spring/rafz': 9.7.5 - '@react-spring/types': 9.7.5 + "@react-spring/rafz": 9.7.5 + "@react-spring/types": 9.7.5 react: 18.3.1 - '@react-spring/three@9.7.5(@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0))(react@18.3.1)(three@0.172.0)': + "@react-spring/three@9.7.5(@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0))(react@18.3.1)(three@0.172.0)": dependencies: - '@react-spring/animated': 9.7.5(react@18.3.1) - '@react-spring/core': 9.7.5(react@18.3.1) - '@react-spring/shared': 9.7.5(react@18.3.1) - '@react-spring/types': 9.7.5 - '@react-three/fiber': 8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0) + "@react-spring/animated": 9.7.5(react@18.3.1) + "@react-spring/core": 9.7.5(react@18.3.1) + "@react-spring/shared": 9.7.5(react@18.3.1) + "@react-spring/types": 9.7.5 + "@react-three/fiber": 8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0) react: 18.3.1 three: 0.172.0 - '@react-spring/types@9.7.5': {} + "@react-spring/types@9.7.5": {} - '@react-stately/utils@3.10.4(react@18.3.1)': + "@react-stately/utils@3.10.4(react@18.3.1)": dependencies: - '@swc/helpers': 0.5.15 + "@swc/helpers": 0.5.15 react: 18.3.1 - '@react-three/drei@9.120.4(@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0))(@types/react@18.3.3)(@types/three@0.170.0)(immer@11.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0)(use-sync-external-store@1.5.0(react@18.3.1))': + "@react-three/drei@9.120.4(@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0))(@types/react@19.2.14)(@types/three@0.183.0)(immer@11.1.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0)(use-sync-external-store@1.6.0(react@18.3.1))": dependencies: - '@babel/runtime': 7.26.0 - '@mediapipe/tasks-vision': 0.10.17 - '@monogrid/gainmap-js': 3.0.6(three@0.172.0) - '@react-spring/three': 9.7.5(@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0))(react@18.3.1)(three@0.172.0) - '@react-three/fiber': 8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0) - '@use-gesture/react': 10.3.1(react@18.3.1) + "@babel/runtime": 7.26.0 + "@mediapipe/tasks-vision": 0.10.17 + "@monogrid/gainmap-js": 3.0.6(three@0.172.0) + "@react-spring/three": 9.7.5(@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0))(react@18.3.1)(three@0.172.0) + "@react-three/fiber": 8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0) + "@use-gesture/react": 10.3.1(react@18.3.1) camera-controls: 2.9.0(three@0.172.0) cross-env: 7.0.3 detect-gpu: 5.0.59 glsl-noise: 0.0.0 hls.js: 1.5.18 - maath: 0.10.8(@types/three@0.170.0)(three@0.172.0) + maath: 0.10.8(@types/three@0.183.0)(three@0.172.0) meshline: 3.3.1(three@0.172.0) react: 18.3.1 react-composer: 5.0.3(react@18.3.1) - stats-gl: 2.4.2(@types/three@0.170.0)(three@0.172.0) + stats-gl: 2.4.2(@types/three@0.183.0)(three@0.172.0) stats.js: 0.17.0 suspend-react: 0.1.3(react@18.3.1) three: 0.172.0 three-mesh-bvh: 0.7.8(three@0.172.0) three-stdlib: 2.34.0(three@0.172.0) troika-three-text: 0.52.2(three@0.172.0) - tunnel-rat: 0.1.2(@types/react@18.3.3)(immer@11.1.0)(react@18.3.1) + tunnel-rat: 0.1.2(@types/react@19.2.14)(immer@11.1.4)(react@18.3.1) utility-types: 3.11.0 uuid: 9.0.1 - zustand: 5.0.1(@types/react@18.3.3)(immer@11.1.0)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) + zustand: 5.0.1(@types/react@19.2.14)(immer@11.1.4)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)) optionalDependencies: react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - - '@types/react' - - '@types/three' + - "@types/react" + - "@types/three" - immer - use-sync-external-store - '@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0)': + "@react-three/fiber@8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.172.0)": dependencies: - '@babel/runtime': 7.26.0 - '@types/debounce': 1.2.4 - '@types/react-reconciler': 0.26.7 - '@types/webxr': 0.5.20 + "@babel/runtime": 7.26.0 + "@types/debounce": 1.2.4 + "@types/react-reconciler": 0.26.7 + "@types/webxr": 0.5.20 base64-js: 1.5.1 buffer: 6.0.3 debounce: 1.2.1 @@ -8285,366 +12306,623 @@ snapshots: optionalDependencies: react-dom: 18.3.1(react@18.3.1) - '@react-types/shared@3.25.0(react@18.3.1)': + "@react-types/shared@3.25.0(react@18.3.1)": dependencies: react: 18.3.1 - '@redis/bloom@1.2.0(@redis/client@1.6.1)': + "@redis/bloom@1.2.0(@redis/client@1.6.1)": dependencies: - '@redis/client': 1.6.1 + "@redis/client": 1.6.1 - '@redis/client@1.6.1': + "@redis/client@1.6.1": dependencies: cluster-key-slot: 1.1.2 generic-pool: 3.9.0 yallist: 4.0.0 - '@redis/graph@1.1.1(@redis/client@1.6.1)': + "@redis/graph@1.1.1(@redis/client@1.6.1)": dependencies: - '@redis/client': 1.6.1 + "@redis/client": 1.6.1 - '@redis/json@1.0.7(@redis/client@1.6.1)': + "@redis/json@1.0.7(@redis/client@1.6.1)": dependencies: - '@redis/client': 1.6.1 + "@redis/client": 1.6.1 - '@redis/search@1.2.0(@redis/client@1.6.1)': + "@redis/search@1.2.0(@redis/client@1.6.1)": dependencies: - '@redis/client': 1.6.1 + "@redis/client": 1.6.1 - '@redis/time-series@1.1.0(@redis/client@1.6.1)': + "@redis/time-series@1.1.0(@redis/client@1.6.1)": dependencies: - '@redis/client': 1.6.1 + "@redis/client": 1.6.1 - '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@18.3.3)(react@18.3.1)(redux@5.0.1))(react@18.3.1)': + "@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@18.3.1)(redux@5.0.1))(react@18.3.1)": dependencies: - '@standard-schema/spec': 1.0.0 - '@standard-schema/utils': 0.3.0 + "@standard-schema/spec": 1.0.0 + "@standard-schema/utils": 0.3.0 immer: 11.1.0 redux: 5.0.1 redux-thunk: 3.1.0(redux@5.0.1) reselect: 5.1.1 optionalDependencies: react: 18.3.1 - react-redux: 9.2.0(@types/react@18.3.3)(react@18.3.1)(redux@5.0.1) + react-redux: 9.2.0(@types/react@19.2.14)(react@18.3.1)(redux@5.0.1) - '@resvg/resvg-wasm@2.4.0': {} + "@resvg/resvg-wasm@2.4.0": {} - '@shikijs/core@1.22.0': + "@shikijs/core@3.22.0": dependencies: - '@shikijs/engine-javascript': 1.22.0 - '@shikijs/engine-oniguruma': 1.22.0 - '@shikijs/types': 1.22.0 - '@shikijs/vscode-textmate': 9.3.0 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.3 + "@shikijs/types": 3.22.0 + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@1.22.0': + "@shikijs/engine-javascript@3.22.0": dependencies: - '@shikijs/types': 1.22.0 - '@shikijs/vscode-textmate': 9.3.0 - oniguruma-to-js: 0.4.3 + "@shikijs/types": 3.22.0 + "@shikijs/vscode-textmate": 10.0.2 + oniguruma-to-es: 4.3.4 - '@shikijs/engine-oniguruma@1.22.0': + "@shikijs/engine-oniguruma@3.22.0": dependencies: - '@shikijs/types': 1.22.0 - '@shikijs/vscode-textmate': 9.3.0 + "@shikijs/types": 3.22.0 + "@shikijs/vscode-textmate": 10.0.2 - '@shikijs/twoslash@1.22.0(typescript@5.6.3)': + "@shikijs/langs@3.22.0": dependencies: - '@shikijs/core': 1.22.0 - '@shikijs/types': 1.22.0 - twoslash: 0.2.12(typescript@5.6.3) - transitivePeerDependencies: - - supports-color - - typescript + "@shikijs/types": 3.22.0 + + "@shikijs/rehype@3.22.0": + dependencies: + "@shikijs/types": 3.22.0 + "@types/hast": 3.0.4 + hast-util-to-string: 3.0.1 + shiki: 3.22.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 + + "@shikijs/themes@3.22.0": + dependencies: + "@shikijs/types": 3.22.0 + + "@shikijs/transformers@3.22.0": + dependencies: + "@shikijs/core": 3.22.0 + "@shikijs/types": 3.22.0 + + "@shikijs/types@3.22.0": + dependencies: + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + + "@shikijs/vscode-textmate@10.0.2": {} + + "@shuding/opentype.js@1.4.0-beta.0": + dependencies: + fflate: 0.7.4 + string.prototype.codepointat: 0.2.1 + + "@smithy/abort-controller@4.2.5": + dependencies: + "@smithy/types": 4.9.0 + tslib: 2.8.1 + + "@smithy/abort-controller@4.2.8": + dependencies: + "@smithy/types": 4.12.0 + tslib: 2.8.1 + optional: true + + "@smithy/config-resolver@4.4.3": + dependencies: + "@smithy/node-config-provider": 4.3.5 + "@smithy/types": 4.9.0 + "@smithy/util-config-provider": 4.2.0 + "@smithy/util-endpoints": 3.2.5 + "@smithy/util-middleware": 4.2.5 + tslib: 2.8.1 + + "@smithy/config-resolver@4.4.6": + dependencies: + "@smithy/node-config-provider": 4.3.8 + "@smithy/types": 4.12.0 + "@smithy/util-config-provider": 4.2.0 + "@smithy/util-endpoints": 3.2.8 + "@smithy/util-middleware": 4.2.8 + tslib: 2.8.1 + optional: true + + "@smithy/core@3.18.7": + dependencies: + "@smithy/middleware-serde": 4.2.6 + "@smithy/protocol-http": 5.3.5 + "@smithy/types": 4.9.0 + "@smithy/util-base64": 4.3.0 + "@smithy/util-body-length-browser": 4.2.0 + "@smithy/util-middleware": 4.2.5 + "@smithy/util-stream": 4.5.6 + "@smithy/util-utf8": 4.2.0 + "@smithy/uuid": 1.1.0 + tslib: 2.8.1 + + "@smithy/core@3.23.2": + dependencies: + "@smithy/middleware-serde": 4.2.9 + "@smithy/protocol-http": 5.3.8 + "@smithy/types": 4.12.0 + "@smithy/util-base64": 4.3.0 + "@smithy/util-body-length-browser": 4.2.0 + "@smithy/util-middleware": 4.2.8 + "@smithy/util-stream": 4.5.12 + "@smithy/util-utf8": 4.2.0 + "@smithy/uuid": 1.1.0 + tslib: 2.8.1 + optional: true + + "@smithy/credential-provider-imds@4.2.5": + dependencies: + "@smithy/node-config-provider": 4.3.5 + "@smithy/property-provider": 4.2.5 + "@smithy/types": 4.9.0 + "@smithy/url-parser": 4.2.5 + tslib: 2.8.1 + + "@smithy/credential-provider-imds@4.2.8": + dependencies: + "@smithy/node-config-provider": 4.3.8 + "@smithy/property-provider": 4.2.8 + "@smithy/types": 4.12.0 + "@smithy/url-parser": 4.2.8 + tslib: 2.8.1 + optional: true + + "@smithy/fetch-http-handler@5.3.6": + dependencies: + "@smithy/protocol-http": 5.3.5 + "@smithy/querystring-builder": 4.2.5 + "@smithy/types": 4.9.0 + "@smithy/util-base64": 4.3.0 + tslib: 2.8.1 + + "@smithy/fetch-http-handler@5.3.9": + dependencies: + "@smithy/protocol-http": 5.3.8 + "@smithy/querystring-builder": 4.2.8 + "@smithy/types": 4.12.0 + "@smithy/util-base64": 4.3.0 + tslib: 2.8.1 + optional: true + + "@smithy/hash-node@4.2.5": + dependencies: + "@smithy/types": 4.9.0 + "@smithy/util-buffer-from": 4.2.0 + "@smithy/util-utf8": 4.2.0 + tslib: 2.8.1 + + "@smithy/hash-node@4.2.8": + dependencies: + "@smithy/types": 4.12.0 + "@smithy/util-buffer-from": 4.2.0 + "@smithy/util-utf8": 4.2.0 + tslib: 2.8.1 + optional: true + + "@smithy/invalid-dependency@4.2.5": + dependencies: + "@smithy/types": 4.9.0 + tslib: 2.8.1 + + "@smithy/invalid-dependency@4.2.8": + dependencies: + "@smithy/types": 4.12.0 + tslib: 2.8.1 + optional: true + + "@smithy/is-array-buffer@2.2.0": + dependencies: + tslib: 2.8.1 + + "@smithy/is-array-buffer@4.2.0": + dependencies: + tslib: 2.8.1 + + "@smithy/middleware-content-length@4.2.5": + dependencies: + "@smithy/protocol-http": 5.3.5 + "@smithy/types": 4.9.0 + tslib: 2.8.1 + + "@smithy/middleware-content-length@4.2.8": + dependencies: + "@smithy/protocol-http": 5.3.8 + "@smithy/types": 4.12.0 + tslib: 2.8.1 + optional: true + + "@smithy/middleware-endpoint@4.3.14": + dependencies: + "@smithy/core": 3.18.7 + "@smithy/middleware-serde": 4.2.6 + "@smithy/node-config-provider": 4.3.5 + "@smithy/shared-ini-file-loader": 4.4.0 + "@smithy/types": 4.9.0 + "@smithy/url-parser": 4.2.5 + "@smithy/util-middleware": 4.2.5 + tslib: 2.8.1 + + "@smithy/middleware-endpoint@4.4.16": + dependencies: + "@smithy/core": 3.23.2 + "@smithy/middleware-serde": 4.2.9 + "@smithy/node-config-provider": 4.3.8 + "@smithy/shared-ini-file-loader": 4.4.3 + "@smithy/types": 4.12.0 + "@smithy/url-parser": 4.2.8 + "@smithy/util-middleware": 4.2.8 + tslib: 2.8.1 + optional: true + + "@smithy/middleware-retry@4.4.14": + dependencies: + "@smithy/node-config-provider": 4.3.5 + "@smithy/protocol-http": 5.3.5 + "@smithy/service-error-classification": 4.2.5 + "@smithy/smithy-client": 4.9.10 + "@smithy/types": 4.9.0 + "@smithy/util-middleware": 4.2.5 + "@smithy/util-retry": 4.2.5 + "@smithy/uuid": 1.1.0 + tslib: 2.8.1 + + "@smithy/middleware-retry@4.4.33": + dependencies: + "@smithy/node-config-provider": 4.3.8 + "@smithy/protocol-http": 5.3.8 + "@smithy/service-error-classification": 4.2.8 + "@smithy/smithy-client": 4.11.5 + "@smithy/types": 4.12.0 + "@smithy/util-middleware": 4.2.8 + "@smithy/util-retry": 4.2.8 + "@smithy/uuid": 1.1.0 + tslib: 2.8.1 + optional: true + + "@smithy/middleware-serde@4.2.6": + dependencies: + "@smithy/protocol-http": 5.3.5 + "@smithy/types": 4.9.0 + tslib: 2.8.1 + + "@smithy/middleware-serde@4.2.9": + dependencies: + "@smithy/protocol-http": 5.3.8 + "@smithy/types": 4.12.0 + tslib: 2.8.1 + optional: true + + "@smithy/middleware-stack@4.2.5": + dependencies: + "@smithy/types": 4.9.0 + tslib: 2.8.1 + + "@smithy/middleware-stack@4.2.8": + dependencies: + "@smithy/types": 4.12.0 + tslib: 2.8.1 + optional: true + + "@smithy/node-config-provider@4.3.5": + dependencies: + "@smithy/property-provider": 4.2.5 + "@smithy/shared-ini-file-loader": 4.4.0 + "@smithy/types": 4.9.0 + tslib: 2.8.1 - '@shikijs/types@1.22.0': + "@smithy/node-config-provider@4.3.8": dependencies: - '@shikijs/vscode-textmate': 9.3.0 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@9.3.0': {} + "@smithy/property-provider": 4.2.8 + "@smithy/shared-ini-file-loader": 4.4.3 + "@smithy/types": 4.12.0 + tslib: 2.8.1 + optional: true - '@shuding/opentype.js@1.4.0-beta.0': + "@smithy/node-http-handler@4.4.10": dependencies: - fflate: 0.7.4 - string.prototype.codepointat: 0.2.1 + "@smithy/abort-controller": 4.2.8 + "@smithy/protocol-http": 5.3.8 + "@smithy/querystring-builder": 4.2.8 + "@smithy/types": 4.12.0 + tslib: 2.8.1 + optional: true - '@smithy/abort-controller@4.2.5': + "@smithy/node-http-handler@4.4.5": dependencies: - '@smithy/types': 4.9.0 + "@smithy/abort-controller": 4.2.5 + "@smithy/protocol-http": 5.3.5 + "@smithy/querystring-builder": 4.2.5 + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@smithy/config-resolver@4.4.3': + "@smithy/property-provider@4.2.5": dependencies: - '@smithy/node-config-provider': 4.3.5 - '@smithy/types': 4.9.0 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-endpoints': 3.2.5 - '@smithy/util-middleware': 4.2.5 + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@smithy/core@3.18.7': + "@smithy/property-provider@4.2.8": dependencies: - '@smithy/middleware-serde': 4.2.6 - '@smithy/protocol-http': 5.3.5 - '@smithy/types': 4.9.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.5 - '@smithy/util-stream': 4.5.6 - '@smithy/util-utf8': 4.2.0 - '@smithy/uuid': 1.1.0 + "@smithy/types": 4.12.0 tslib: 2.8.1 + optional: true - '@smithy/credential-provider-imds@4.2.5': + "@smithy/protocol-http@5.3.5": dependencies: - '@smithy/node-config-provider': 4.3.5 - '@smithy/property-provider': 4.2.5 - '@smithy/types': 4.9.0 - '@smithy/url-parser': 4.2.5 + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.3.6': + "@smithy/protocol-http@5.3.8": dependencies: - '@smithy/protocol-http': 5.3.5 - '@smithy/querystring-builder': 4.2.5 - '@smithy/types': 4.9.0 - '@smithy/util-base64': 4.3.0 + "@smithy/types": 4.12.0 tslib: 2.8.1 + optional: true - '@smithy/hash-node@4.2.5': + "@smithy/querystring-builder@4.2.5": dependencies: - '@smithy/types': 4.9.0 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-utf8': 4.2.0 + "@smithy/types": 4.9.0 + "@smithy/util-uri-escape": 4.2.0 tslib: 2.8.1 - '@smithy/invalid-dependency@4.2.5': + "@smithy/querystring-builder@4.2.8": dependencies: - '@smithy/types': 4.9.0 + "@smithy/types": 4.12.0 + "@smithy/util-uri-escape": 4.2.0 tslib: 2.8.1 + optional: true - '@smithy/is-array-buffer@2.2.0': + "@smithy/querystring-parser@4.2.5": dependencies: + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@smithy/is-array-buffer@4.2.0': + "@smithy/querystring-parser@4.2.8": dependencies: + "@smithy/types": 4.12.0 tslib: 2.8.1 + optional: true - '@smithy/middleware-content-length@4.2.5': + "@smithy/service-error-classification@4.2.5": dependencies: - '@smithy/protocol-http': 5.3.5 - '@smithy/types': 4.9.0 - tslib: 2.8.1 + "@smithy/types": 4.9.0 - '@smithy/middleware-endpoint@4.3.14': + "@smithy/service-error-classification@4.2.8": dependencies: - '@smithy/core': 3.18.7 - '@smithy/middleware-serde': 4.2.6 - '@smithy/node-config-provider': 4.3.5 - '@smithy/shared-ini-file-loader': 4.4.0 - '@smithy/types': 4.9.0 - '@smithy/url-parser': 4.2.5 - '@smithy/util-middleware': 4.2.5 + "@smithy/types": 4.12.0 + optional: true + + "@smithy/shared-ini-file-loader@4.4.0": + dependencies: + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.14': + "@smithy/shared-ini-file-loader@4.4.3": dependencies: - '@smithy/node-config-provider': 4.3.5 - '@smithy/protocol-http': 5.3.5 - '@smithy/service-error-classification': 4.2.5 - '@smithy/smithy-client': 4.9.10 - '@smithy/types': 4.9.0 - '@smithy/util-middleware': 4.2.5 - '@smithy/util-retry': 4.2.5 - '@smithy/uuid': 1.1.0 + "@smithy/types": 4.12.0 tslib: 2.8.1 + optional: true - '@smithy/middleware-serde@4.2.6': + "@smithy/signature-v4@5.3.5": dependencies: - '@smithy/protocol-http': 5.3.5 - '@smithy/types': 4.9.0 + "@smithy/is-array-buffer": 4.2.0 + "@smithy/protocol-http": 5.3.5 + "@smithy/types": 4.9.0 + "@smithy/util-hex-encoding": 4.2.0 + "@smithy/util-middleware": 4.2.5 + "@smithy/util-uri-escape": 4.2.0 + "@smithy/util-utf8": 4.2.0 tslib: 2.8.1 - '@smithy/middleware-stack@4.2.5': + "@smithy/signature-v4@5.3.8": dependencies: - '@smithy/types': 4.9.0 + "@smithy/is-array-buffer": 4.2.0 + "@smithy/protocol-http": 5.3.8 + "@smithy/types": 4.12.0 + "@smithy/util-hex-encoding": 4.2.0 + "@smithy/util-middleware": 4.2.8 + "@smithy/util-uri-escape": 4.2.0 + "@smithy/util-utf8": 4.2.0 tslib: 2.8.1 + optional: true - '@smithy/node-config-provider@4.3.5': + "@smithy/smithy-client@4.11.5": dependencies: - '@smithy/property-provider': 4.2.5 - '@smithy/shared-ini-file-loader': 4.4.0 - '@smithy/types': 4.9.0 + "@smithy/core": 3.23.2 + "@smithy/middleware-endpoint": 4.4.16 + "@smithy/middleware-stack": 4.2.8 + "@smithy/protocol-http": 5.3.8 + "@smithy/types": 4.12.0 + "@smithy/util-stream": 4.5.12 tslib: 2.8.1 + optional: true - '@smithy/node-http-handler@4.4.5': + "@smithy/smithy-client@4.9.10": dependencies: - '@smithy/abort-controller': 4.2.5 - '@smithy/protocol-http': 5.3.5 - '@smithy/querystring-builder': 4.2.5 - '@smithy/types': 4.9.0 + "@smithy/core": 3.18.7 + "@smithy/middleware-endpoint": 4.3.14 + "@smithy/middleware-stack": 4.2.5 + "@smithy/protocol-http": 5.3.5 + "@smithy/types": 4.9.0 + "@smithy/util-stream": 4.5.6 tslib: 2.8.1 - '@smithy/property-provider@4.2.5': + "@smithy/types@4.12.0": dependencies: - '@smithy/types': 4.9.0 tslib: 2.8.1 + optional: true - '@smithy/protocol-http@5.3.5': + "@smithy/types@4.9.0": dependencies: - '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/querystring-builder@4.2.5': + "@smithy/url-parser@4.2.5": dependencies: - '@smithy/types': 4.9.0 - '@smithy/util-uri-escape': 4.2.0 + "@smithy/querystring-parser": 4.2.5 + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@smithy/querystring-parser@4.2.5': + "@smithy/url-parser@4.2.8": dependencies: - '@smithy/types': 4.9.0 + "@smithy/querystring-parser": 4.2.8 + "@smithy/types": 4.12.0 tslib: 2.8.1 + optional: true - '@smithy/service-error-classification@4.2.5': + "@smithy/util-base64@4.3.0": dependencies: - '@smithy/types': 4.9.0 + "@smithy/util-buffer-from": 4.2.0 + "@smithy/util-utf8": 4.2.0 + tslib: 2.8.1 - '@smithy/shared-ini-file-loader@4.4.0': + "@smithy/util-body-length-browser@4.2.0": dependencies: - '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/signature-v4@5.3.5': + "@smithy/util-body-length-node@4.2.1": dependencies: - '@smithy/is-array-buffer': 4.2.0 - '@smithy/protocol-http': 5.3.5 - '@smithy/types': 4.9.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-middleware': 4.2.5 - '@smithy/util-uri-escape': 4.2.0 - '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.9.10': + "@smithy/util-buffer-from@2.2.0": dependencies: - '@smithy/core': 3.18.7 - '@smithy/middleware-endpoint': 4.3.14 - '@smithy/middleware-stack': 4.2.5 - '@smithy/protocol-http': 5.3.5 - '@smithy/types': 4.9.0 - '@smithy/util-stream': 4.5.6 + "@smithy/is-array-buffer": 2.2.0 tslib: 2.8.1 - '@smithy/types@4.9.0': + "@smithy/util-buffer-from@4.2.0": dependencies: + "@smithy/is-array-buffer": 4.2.0 tslib: 2.8.1 - '@smithy/url-parser@4.2.5': + "@smithy/util-config-provider@4.2.0": dependencies: - '@smithy/querystring-parser': 4.2.5 - '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-base64@4.3.0': + "@smithy/util-defaults-mode-browser@4.3.13": dependencies: - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-utf8': 4.2.0 + "@smithy/property-provider": 4.2.5 + "@smithy/smithy-client": 4.9.10 + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@smithy/util-body-length-browser@4.2.0': + "@smithy/util-defaults-mode-browser@4.3.32": dependencies: + "@smithy/property-provider": 4.2.8 + "@smithy/smithy-client": 4.11.5 + "@smithy/types": 4.12.0 tslib: 2.8.1 + optional: true - '@smithy/util-body-length-node@4.2.1': + "@smithy/util-defaults-mode-node@4.2.16": dependencies: + "@smithy/config-resolver": 4.4.3 + "@smithy/credential-provider-imds": 4.2.5 + "@smithy/node-config-provider": 4.3.5 + "@smithy/property-provider": 4.2.5 + "@smithy/smithy-client": 4.9.10 + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@smithy/util-buffer-from@2.2.0': + "@smithy/util-defaults-mode-node@4.2.35": dependencies: - '@smithy/is-array-buffer': 2.2.0 + "@smithy/config-resolver": 4.4.6 + "@smithy/credential-provider-imds": 4.2.8 + "@smithy/node-config-provider": 4.3.8 + "@smithy/property-provider": 4.2.8 + "@smithy/smithy-client": 4.11.5 + "@smithy/types": 4.12.0 tslib: 2.8.1 + optional: true - '@smithy/util-buffer-from@4.2.0': + "@smithy/util-endpoints@3.2.5": dependencies: - '@smithy/is-array-buffer': 4.2.0 + "@smithy/node-config-provider": 4.3.5 + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@smithy/util-config-provider@4.2.0': + "@smithy/util-endpoints@3.2.8": dependencies: + "@smithy/node-config-provider": 4.3.8 + "@smithy/types": 4.12.0 tslib: 2.8.1 + optional: true - '@smithy/util-defaults-mode-browser@4.3.13': + "@smithy/util-hex-encoding@4.2.0": dependencies: - '@smithy/property-provider': 4.2.5 - '@smithy/smithy-client': 4.9.10 - '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.16': + "@smithy/util-middleware@4.2.5": dependencies: - '@smithy/config-resolver': 4.4.3 - '@smithy/credential-provider-imds': 4.2.5 - '@smithy/node-config-provider': 4.3.5 - '@smithy/property-provider': 4.2.5 - '@smithy/smithy-client': 4.9.10 - '@smithy/types': 4.9.0 + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@smithy/util-endpoints@3.2.5': + "@smithy/util-middleware@4.2.8": dependencies: - '@smithy/node-config-provider': 4.3.5 - '@smithy/types': 4.9.0 + "@smithy/types": 4.12.0 tslib: 2.8.1 + optional: true - '@smithy/util-hex-encoding@4.2.0': + "@smithy/util-retry@4.2.5": dependencies: + "@smithy/service-error-classification": 4.2.5 + "@smithy/types": 4.9.0 tslib: 2.8.1 - '@smithy/util-middleware@4.2.5': + "@smithy/util-retry@4.2.8": dependencies: - '@smithy/types': 4.9.0 + "@smithy/service-error-classification": 4.2.8 + "@smithy/types": 4.12.0 tslib: 2.8.1 + optional: true - '@smithy/util-retry@4.2.5': + "@smithy/util-stream@4.5.12": dependencies: - '@smithy/service-error-classification': 4.2.5 - '@smithy/types': 4.9.0 + "@smithy/fetch-http-handler": 5.3.9 + "@smithy/node-http-handler": 4.4.10 + "@smithy/types": 4.12.0 + "@smithy/util-base64": 4.3.0 + "@smithy/util-buffer-from": 4.2.0 + "@smithy/util-hex-encoding": 4.2.0 + "@smithy/util-utf8": 4.2.0 tslib: 2.8.1 + optional: true - '@smithy/util-stream@4.5.6': + "@smithy/util-stream@4.5.6": dependencies: - '@smithy/fetch-http-handler': 5.3.6 - '@smithy/node-http-handler': 4.4.5 - '@smithy/types': 4.9.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-utf8': 4.2.0 + "@smithy/fetch-http-handler": 5.3.6 + "@smithy/node-http-handler": 4.4.5 + "@smithy/types": 4.9.0 + "@smithy/util-base64": 4.3.0 + "@smithy/util-buffer-from": 4.2.0 + "@smithy/util-hex-encoding": 4.2.0 + "@smithy/util-utf8": 4.2.0 tslib: 2.8.1 - '@smithy/util-uri-escape@4.2.0': + "@smithy/util-uri-escape@4.2.0": dependencies: tslib: 2.8.1 - '@smithy/util-utf8@2.3.0': + "@smithy/util-utf8@2.3.0": dependencies: - '@smithy/util-buffer-from': 2.2.0 + "@smithy/util-buffer-from": 2.2.0 tslib: 2.8.1 - '@smithy/util-utf8@4.2.0': + "@smithy/util-utf8@4.2.0": dependencies: - '@smithy/util-buffer-from': 4.2.0 + "@smithy/util-buffer-from": 4.2.0 tslib: 2.8.1 - '@smithy/uuid@1.1.0': + "@smithy/uuid@1.1.0": dependencies: tslib: 2.8.1 - '@sparticuz/chromium@140.0.0': + "@sparticuz/chromium@140.0.0": dependencies: follow-redirects: 1.15.11 tar-fs: 3.1.1 @@ -8653,327 +12931,360 @@ snapshots: - debug - react-native-b4a - '@standard-schema/spec@1.0.0': {} + "@standard-schema/spec@1.0.0": {} + + "@standard-schema/spec@1.1.0": {} - '@standard-schema/utils@0.3.0': {} + "@standard-schema/utils@0.3.0": {} - '@supabase/auth-js@2.67.3': + "@supabase/auth-js@2.67.3": dependencies: - '@supabase/node-fetch': 2.6.15 + "@supabase/node-fetch": 2.6.15 - '@supabase/functions-js@2.4.4': + "@supabase/functions-js@2.4.4": dependencies: - '@supabase/node-fetch': 2.6.15 + "@supabase/node-fetch": 2.6.15 - '@supabase/node-fetch@2.6.15': + "@supabase/node-fetch@2.6.15": dependencies: whatwg-url: 5.0.0 - '@supabase/postgrest-js@1.17.7': + "@supabase/postgrest-js@1.17.7": dependencies: - '@supabase/node-fetch': 2.6.15 + "@supabase/node-fetch": 2.6.15 - '@supabase/realtime-js@2.11.2': + "@supabase/realtime-js@2.11.2": dependencies: - '@supabase/node-fetch': 2.6.15 - '@types/phoenix': 1.6.6 - '@types/ws': 8.5.13 + "@supabase/node-fetch": 2.6.15 + "@types/phoenix": 1.6.6 + "@types/ws": 8.5.13 ws: 8.18.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@supabase/storage-js@2.7.1': + "@supabase/storage-js@2.7.1": dependencies: - '@supabase/node-fetch': 2.6.15 + "@supabase/node-fetch": 2.6.15 - '@supabase/supabase-js@2.47.10': + "@supabase/supabase-js@2.47.10": dependencies: - '@supabase/auth-js': 2.67.3 - '@supabase/functions-js': 2.4.4 - '@supabase/node-fetch': 2.6.15 - '@supabase/postgrest-js': 1.17.7 - '@supabase/realtime-js': 2.11.2 - '@supabase/storage-js': 2.7.1 + "@supabase/auth-js": 2.67.3 + "@supabase/functions-js": 2.4.4 + "@supabase/node-fetch": 2.6.15 + "@supabase/postgrest-js": 1.17.7 + "@supabase/realtime-js": 2.11.2 + "@supabase/storage-js": 2.7.1 transitivePeerDependencies: - bufferutil - utf-8-validate - '@swc/counter@0.1.3': {} - - '@swc/helpers@0.5.15': + "@swc/helpers@0.5.15": dependencies: tslib: 2.8.1 - '@tanem/svg-injector@10.1.68': + "@tailwindcss/node@4.2.0": dependencies: - '@babel/runtime': 7.27.0 + "@jridgewell/remapping": 2.3.5 + enhanced-resolve: 5.19.0 + jiti: 2.6.1 + lightningcss: 1.31.1 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.2.0 + + "@tailwindcss/oxide-android-arm64@4.2.0": + optional: true + + "@tailwindcss/oxide-darwin-arm64@4.2.0": + optional: true + + "@tailwindcss/oxide-darwin-x64@4.2.0": + optional: true + + "@tailwindcss/oxide-freebsd-x64@4.2.0": + optional: true + + "@tailwindcss/oxide-linux-arm-gnueabihf@4.2.0": + optional: true + + "@tailwindcss/oxide-linux-arm64-gnu@4.2.0": + optional: true + + "@tailwindcss/oxide-linux-arm64-musl@4.2.0": + optional: true + + "@tailwindcss/oxide-linux-x64-gnu@4.2.0": + optional: true + + "@tailwindcss/oxide-linux-x64-musl@4.2.0": + optional: true + + "@tailwindcss/oxide-wasm32-wasi@4.2.0": + optional: true + + "@tailwindcss/oxide-win32-arm64-msvc@4.2.0": + optional: true + + "@tailwindcss/oxide-win32-x64-msvc@4.2.0": + optional: true + + "@tailwindcss/oxide@4.2.0": + optionalDependencies: + "@tailwindcss/oxide-android-arm64": 4.2.0 + "@tailwindcss/oxide-darwin-arm64": 4.2.0 + "@tailwindcss/oxide-darwin-x64": 4.2.0 + "@tailwindcss/oxide-freebsd-x64": 4.2.0 + "@tailwindcss/oxide-linux-arm-gnueabihf": 4.2.0 + "@tailwindcss/oxide-linux-arm64-gnu": 4.2.0 + "@tailwindcss/oxide-linux-arm64-musl": 4.2.0 + "@tailwindcss/oxide-linux-x64-gnu": 4.2.0 + "@tailwindcss/oxide-linux-x64-musl": 4.2.0 + "@tailwindcss/oxide-wasm32-wasi": 4.2.0 + "@tailwindcss/oxide-win32-arm64-msvc": 4.2.0 + "@tailwindcss/oxide-win32-x64-msvc": 4.2.0 + + "@tailwindcss/postcss@4.2.0": + dependencies: + "@alloc/quick-lru": 5.2.0 + "@tailwindcss/node": 4.2.0 + "@tailwindcss/oxide": 4.2.0 + postcss: 8.5.6 + tailwindcss: 4.2.0 + + "@tanem/svg-injector@10.1.68": + dependencies: + "@babel/runtime": 7.27.0 content-type: 1.0.5 tslib: 2.8.1 - '@tanstack/react-table@8.20.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@tanstack/react-table@8.20.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@tanstack/table-core': 8.20.5 + "@tanstack/table-core": 8.20.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/react-virtual@3.10.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@tanstack/react-virtual@3.10.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@tanstack/virtual-core': 3.10.8 + "@tanstack/virtual-core": 3.10.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/table-core@8.20.5': {} - - '@tanstack/virtual-core@3.10.8': {} - - '@theguild/remark-mermaid@0.1.3(react@18.3.1)': - dependencies: - mermaid: 11.3.0 - react: 18.3.1 - unist-util-visit: 5.0.0 - transitivePeerDependencies: - - supports-color - - '@theguild/remark-npm2yarn@0.3.2': - dependencies: - npm-to-yarn: 3.0.0 - unist-util-visit: 5.0.0 + "@tanstack/table-core@8.20.5": {} - '@tootallnate/quickjs-emscripten@0.23.0': {} + "@tanstack/virtual-core@3.10.8": {} - '@tweenjs/tween.js@23.1.3': {} + "@tootallnate/quickjs-emscripten@0.23.0": {} - '@types/acorn@4.0.6': - dependencies: - '@types/estree': 1.0.6 + "@tweenjs/tween.js@23.1.3": {} - '@types/d3-array@3.2.2': {} + "@types/d3-array@3.2.2": {} - '@types/d3-color@3.1.3': {} + "@types/d3-color@3.1.3": {} - '@types/d3-ease@3.0.2': {} + "@types/d3-ease@3.0.2": {} - '@types/d3-interpolate@3.0.4': + "@types/d3-interpolate@3.0.4": dependencies: - '@types/d3-color': 3.1.3 + "@types/d3-color": 3.1.3 - '@types/d3-path@3.1.1': {} + "@types/d3-path@3.1.1": {} - '@types/d3-scale@4.0.9': + "@types/d3-scale@4.0.9": dependencies: - '@types/d3-time': 3.0.4 + "@types/d3-time": 3.0.4 - '@types/d3-shape@3.1.7': + "@types/d3-shape@3.1.7": dependencies: - '@types/d3-path': 3.1.1 + "@types/d3-path": 3.1.1 - '@types/d3-time@3.0.4': {} + "@types/d3-time@3.0.4": {} - '@types/d3-timer@3.0.2': {} + "@types/d3-timer@3.0.2": {} - '@types/debounce@1.2.4': {} + "@types/debounce@1.2.4": {} - '@types/debug@4.1.12': + "@types/debug@4.1.12": dependencies: - '@types/ms': 2.1.0 + "@types/ms": 2.1.0 - '@types/dom-mediacapture-record@1.0.22': {} + "@types/dom-mediacapture-record@1.0.22": {} - '@types/draco3d@1.4.10': {} + "@types/draco3d@1.4.10": {} - '@types/estree-jsx@1.0.5': + "@types/estree-jsx@1.0.5": dependencies: - '@types/estree': 1.0.6 - - '@types/estree@1.0.5': {} + "@types/estree": 1.0.8 - '@types/estree@1.0.6': {} + "@types/estree@1.0.8": {} - '@types/estree@1.0.7': {} - - '@types/hast@2.3.10': + "@types/hast@2.3.10": dependencies: - '@types/unist': 2.0.11 + "@types/unist": 2.0.11 - '@types/hast@3.0.4': + "@types/hast@3.0.4": dependencies: - '@types/unist': 3.0.2 + "@types/unist": 3.0.3 - '@types/katex@0.16.7': {} + "@types/katex@0.16.7": {} - '@types/mdast@4.0.4': + "@types/mdast@4.0.4": dependencies: - '@types/unist': 3.0.3 - - '@types/mdx@2.0.13': {} + "@types/unist": 3.0.3 - '@types/ms@2.1.0': {} + "@types/mdx@2.0.13": {} - '@types/nlcst@2.0.3': - dependencies: - '@types/unist': 3.0.3 + "@types/ms@2.1.0": {} - '@types/node-fetch@2.6.12': + "@types/node-fetch@2.6.12": dependencies: - '@types/node': 22.18.0 + "@types/node": 22.18.0 form-data: 4.0.2 - '@types/node@18.19.86': + "@types/node@18.19.86": dependencies: undici-types: 5.26.5 - '@types/node@22.18.0': + "@types/node@22.18.0": dependencies: undici-types: 6.21.0 - '@types/nodemailer@7.0.4': + "@types/nodemailer@7.0.4": dependencies: - '@aws-sdk/client-sesv2': 3.948.0 - '@types/node': 22.18.0 + "@aws-sdk/client-sesv2": 3.948.0 + "@types/node": 22.18.0 transitivePeerDependencies: - aws-crt - '@types/offscreencanvas@2019.7.3': {} - - '@types/phoenix@1.6.6': {} + "@types/offscreencanvas@2019.7.3": {} - '@types/prismjs@1.26.5': {} + "@types/phoenix@1.6.6": {} - '@types/prop-types@15.7.13': {} + "@types/prismjs@1.26.5": {} - '@types/prop-types@15.7.14': {} + "@types/prop-types@15.7.14": {} - '@types/react-reconciler@0.26.7': + "@types/react-reconciler@0.26.7": dependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@types/react-reconciler@0.28.8': + "@types/react-reconciler@0.28.8": dependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@types/react-syntax-highlighter@15.5.13': + "@types/react-syntax-highlighter@15.5.13": dependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - '@types/react@18.3.3': + "@types/react@19.2.14": dependencies: - '@types/prop-types': 15.7.13 - csstype: 3.1.3 + csstype: 3.2.3 - '@types/stats.js@0.17.4': {} + "@types/stats.js@0.17.4": {} - '@types/three@0.170.0': + "@types/three@0.183.0": dependencies: - '@tweenjs/tween.js': 23.1.3 - '@types/stats.js': 0.17.4 - '@types/webxr': 0.5.24 - '@webgpu/types': 0.1.69 + "@dimforge/rapier3d-compat": 0.12.0 + "@tweenjs/tween.js": 23.1.3 + "@types/stats.js": 0.17.4 + "@types/webxr": 0.5.24 + "@webgpu/types": 0.1.69 fflate: 0.8.2 - meshoptimizer: 0.18.1 - - '@types/unist@2.0.11': {} + meshoptimizer: 1.0.1 - '@types/unist@3.0.2': {} + "@types/unist@2.0.11": {} - '@types/unist@3.0.3': {} + "@types/unist@3.0.3": {} - '@types/use-sync-external-store@0.0.6': {} + "@types/use-sync-external-store@0.0.6": {} - '@types/webxr@0.5.20': {} + "@types/webxr@0.5.20": {} - '@types/webxr@0.5.24': {} + "@types/webxr@0.5.24": {} - '@types/ws@8.5.13': + "@types/ws@8.5.13": dependencies: - '@types/node': 22.18.0 + "@types/node": 22.18.0 - '@types/yauzl@2.10.3': + "@types/yauzl@2.10.3": dependencies: - '@types/node': 22.18.0 + "@types/node": 22.18.0 optional: true - '@typescript/vfs@1.6.0(typescript@5.6.3)': - dependencies: - debug: 4.3.7 - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@ungap/structured-clone@1.2.0': {} + "@ungap/structured-clone@1.3.0": {} - '@use-gesture/core@10.3.1': {} + "@use-gesture/core@10.3.1": {} - '@use-gesture/react@10.3.1(react@18.3.1)': + "@use-gesture/react@10.3.1(react@18.3.1)": dependencies: - '@use-gesture/core': 10.3.1 + "@use-gesture/core": 10.3.1 react: 18.3.1 - '@vercel/functions@2.2.2(@aws-sdk/credential-provider-web-identity@3.948.0)': + "@vercel/functions@2.2.2(@aws-sdk/credential-provider-web-identity@3.972.9)": optionalDependencies: - '@aws-sdk/credential-provider-web-identity': 3.948.0 + "@aws-sdk/credential-provider-web-identity": 3.972.9 - '@vercel/mcp-adapter@0.11.1(@modelcontextprotocol/sdk@1.13.2)(next@15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + "@vercel/mcp-adapter@0.11.1(@modelcontextprotocol/sdk@1.13.2)(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))": dependencies: - '@modelcontextprotocol/sdk': 1.13.2 + "@modelcontextprotocol/sdk": 1.13.2 chalk: 5.3.0 commander: 11.1.0 redis: 4.7.1 optionalDependencies: - next: 15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@vercel/og@0.6.8': + "@vercel/og@0.6.8": dependencies: - '@resvg/resvg-wasm': 2.4.0 + "@resvg/resvg-wasm": 2.4.0 satori: 0.12.2 yoga-wasm-web: 0.3.3 - '@vidstack/react@1.12.13(@types/react@18.3.3)(react@18.3.1)': + "@vidstack/react@1.12.13(@types/react@19.2.14)(react@18.3.1)": dependencies: - '@floating-ui/dom': 1.6.11 - '@types/react': 18.3.3 + "@floating-ui/dom": 1.6.11 + "@types/react": 19.2.14 media-captions: 1.0.4 react: 18.3.1 - '@webgpu/types@0.1.69': {} + "@webgpu/types@0.1.69": {} - '@zag-js/core@1.24.1': + "@zag-js/core@1.24.1": dependencies: - '@zag-js/dom-query': 1.24.1 - '@zag-js/utils': 1.24.1 + "@zag-js/dom-query": 1.24.1 + "@zag-js/utils": 1.24.1 - '@zag-js/dom-query@1.24.1': + "@zag-js/dom-query@1.24.1": dependencies: - '@zag-js/types': 1.24.1 + "@zag-js/types": 1.24.1 - '@zag-js/focus-trap@1.24.1': + "@zag-js/focus-trap@1.24.1": dependencies: - '@zag-js/dom-query': 1.24.1 + "@zag-js/dom-query": 1.24.1 - '@zag-js/presence@1.24.1': + "@zag-js/presence@1.24.1": dependencies: - '@zag-js/core': 1.24.1 - '@zag-js/dom-query': 1.24.1 - '@zag-js/types': 1.24.1 + "@zag-js/core": 1.24.1 + "@zag-js/dom-query": 1.24.1 + "@zag-js/types": 1.24.1 - '@zag-js/react@1.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@zag-js/react@1.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": dependencies: - '@zag-js/core': 1.24.1 - '@zag-js/store': 1.24.1 - '@zag-js/types': 1.24.1 - '@zag-js/utils': 1.24.1 + "@zag-js/core": 1.24.1 + "@zag-js/store": 1.24.1 + "@zag-js/types": 1.24.1 + "@zag-js/utils": 1.24.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@zag-js/store@1.24.1': + "@zag-js/store@1.24.1": dependencies: proxy-compare: 3.0.1 - '@zag-js/types@1.24.1': + "@zag-js/types@1.24.1": dependencies: csstype: 3.1.3 - '@zag-js/utils@1.24.1': {} + "@zag-js/utils@1.24.1": {} abort-controller@3.0.0: dependencies: @@ -8984,13 +13295,15 @@ snapshots: mime-types: 3.0.1 negotiator: 1.0.0 - acorn-jsx@5.3.2(acorn@8.14.0): + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: - acorn: 8.14.0 + acorn: 8.15.0 - acorn-walk@8.3.2: {} + acorn-walk@8.3.4: + dependencies: + acorn: 8.15.0 - acorn@8.14.0: {} + acorn@8.15.0: {} agent-base@7.1.3: {} @@ -9000,10 +13313,10 @@ snapshots: ai@5.0.8(zod@4.0.15): dependencies: - '@ai-sdk/gateway': 1.0.4(zod@4.0.15) - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.1(zod@4.0.15) - '@opentelemetry/api': 1.9.0 + "@ai-sdk/gateway": 1.0.4(zod@4.0.15) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.1(zod@4.0.15) + "@opentelemetry/api": 1.9.0 zod: 4.0.15 ajv@6.12.6: @@ -9017,31 +13330,10 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - ansi-styles@6.2.1: {} - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arch@2.2.0: {} - - arg@1.0.0: {} - - arg@5.0.2: {} - argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -9052,7 +13344,9 @@ snapshots: dependencies: tslib: 2.8.1 - array-iterate@2.0.1: {} + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 array-keyed-map@2.1.3: {} @@ -9066,22 +13360,10 @@ snapshots: asynckit@0.4.0: {} - autoprefixer@10.4.21(postcss@8.4.49): - dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001707 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.1.1 - postcss: 8.4.49 - postcss-value-parser: 4.2.0 - b4a@1.7.3: {} bail@2.0.2: {} - balanced-match@1.0.2: {} - bare-events@2.7.0: {} bare-fs@4.4.5: @@ -9121,19 +13403,14 @@ snapshots: base64-js@1.5.1: {} - basic-ftp@5.0.5: {} + baseline-browser-mapping@2.9.19: {} - better-react-mathjax@2.0.3(react@18.3.1): - dependencies: - mathjax-full: 3.2.2 - react: 18.3.1 + basic-ftp@5.0.5: {} bidi-js@1.0.3: dependencies: require-from-string: 2.0.2 - binary-extensions@2.3.0: {} - body-parser@2.2.0: dependencies: bytes: 3.1.2 @@ -9152,21 +13429,13 @@ snapshots: bowser@2.13.1: {} - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 + bowser@2.14.1: + optional: true braces@3.0.3: dependencies: fill-range: 7.1.1 - browserslist@4.24.4: - dependencies: - caniuse-lite: 1.0.30001707 - electron-to-chromium: 1.5.129 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.4) - buffer-crc32@0.2.13: {} buffer-equal-constant-time@1.0.1: {} @@ -9176,10 +13445,6 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - busboy@1.6.0: - dependencies: - streamsearch: 1.1.0 - bytes@3.1.2: {} call-bind-apply-helpers@1.0.2: @@ -9211,18 +13476,10 @@ snapshots: dependencies: three: 0.172.0 - caniuse-lite@1.0.30001707: {} - - caniuse-lite@1.0.30001759: {} + caniuse-lite@1.0.30001770: {} ccount@2.0.1: {} - chalk@2.3.0: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 4.5.0 - chalk@5.3.0: {} character-entities-html4@2.1.0: {} @@ -9256,37 +13513,15 @@ snapshots: domutils: 3.2.2 encoding-sniffer: 0.2.0 htmlparser2: 9.1.0 - parse5: 7.2.1 + parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 undici: 6.21.2 whatwg-mimetype: 4.0.0 - chevrotain-allstar@0.3.1(chevrotain@11.0.3): - dependencies: - chevrotain: 11.0.3 - lodash-es: 4.17.21 - - chevrotain@11.0.3: - dependencies: - '@chevrotain/cst-dts-gen': 11.0.3 - '@chevrotain/gast': 11.0.3 - '@chevrotain/regexp-to-ast': 11.0.3 - '@chevrotain/types': 11.0.3 - '@chevrotain/utils': 11.0.3 - lodash-es: 4.17.21 - - chokidar@3.6.0: + chokidar@5.0.0: dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 + readdirp: 5.0.0 chromium-bidi@9.1.0(devtools-protocol@0.0.1508733): dependencies: @@ -9300,11 +13535,6 @@ snapshots: client-only@0.0.1: {} - clipboardy@1.2.2: - dependencies: - arch: 2.2.0 - execa: 0.8.0 - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -9317,30 +13547,12 @@ snapshots: collapse-white-space@2.1.0: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.4 - optional: true - - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - optional: true - colorjs.io@0.5.2: {} combined-stream@1.0.8: @@ -9355,17 +13567,11 @@ snapshots: commander@13.1.0: {} - commander@4.1.1: {} - commander@7.2.0: {} commander@8.3.0: {} - commander@9.2.0: {} - - compute-scroll-into-view@3.1.0: {} - - confbox@0.1.8: {} + compute-scroll-into-view@3.1.1: {} content-disposition@1.0.0: dependencies: @@ -9384,14 +13590,6 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cose-base@1.0.3: - dependencies: - layout-base: 1.0.2 - - cose-base@2.2.0: - dependencies: - layout-base: 2.0.1 - cosmiconfig@9.0.0(typescript@5.6.3): dependencies: env-paths: 2.2.1 @@ -9405,12 +13603,6 @@ snapshots: dependencies: cross-spawn: 7.0.3 - cross-spawn@5.1.0: - dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 - cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -9451,107 +13643,24 @@ snapshots: csstype@3.1.3: {} - cytoscape-cose-bilkent@4.1.0(cytoscape@3.30.2): - dependencies: - cose-base: 1.0.3 - cytoscape: 3.30.2 - - cytoscape-fcose@2.2.0(cytoscape@3.30.2): - dependencies: - cose-base: 2.2.0 - cytoscape: 3.30.2 - - cytoscape@3.30.2: {} - - d3-array@2.12.1: - dependencies: - internmap: 1.0.1 + csstype@3.2.3: {} d3-array@3.2.4: dependencies: internmap: 2.0.3 - d3-axis@3.0.0: {} - - d3-brush@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - d3-chord@3.0.1: - dependencies: - d3-path: 3.1.0 - d3-color@3.1.0: {} - d3-contour@4.0.2: - dependencies: - d3-array: 3.2.4 - - d3-delaunay@6.0.4: - dependencies: - delaunator: 5.0.1 - - d3-dispatch@3.0.1: {} - - d3-drag@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-selection: 3.0.0 - - d3-dsv@3.0.1: - dependencies: - commander: 7.2.0 - iconv-lite: 0.6.3 - rw: 1.3.3 - d3-ease@3.0.1: {} - d3-fetch@3.0.1: - dependencies: - d3-dsv: 3.0.1 - - d3-force@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-quadtree: 3.0.1 - d3-timer: 3.0.1 - d3-format@3.1.0: {} - d3-geo@3.1.1: - dependencies: - d3-array: 3.2.4 - - d3-hierarchy@3.1.2: {} - d3-interpolate@3.0.1: dependencies: d3-color: 3.1.0 - d3-path@1.0.9: {} - d3-path@3.1.0: {} - d3-polygon@3.0.1: {} - - d3-quadtree@3.0.1: {} - - d3-random@3.0.1: {} - - d3-sankey@0.12.3: - dependencies: - d3-array: 2.12.1 - d3-shape: 1.3.7 - - d3-scale-chromatic@3.1.0: - dependencies: - d3-color: 3.1.0 - d3-interpolate: 3.0.1 - d3-scale@4.0.2: dependencies: d3-array: 3.2.4 @@ -9560,12 +13669,6 @@ snapshots: d3-time: 3.1.0 d3-time-format: 4.1.0 - d3-selection@3.0.0: {} - - d3-shape@1.3.7: - dependencies: - d3-path: 1.0.9 - d3-shape@3.2.0: dependencies: d3-path: 3.1.0 @@ -9580,65 +13683,8 @@ snapshots: d3-timer@3.0.1: {} - d3-transition@3.0.1(d3-selection@3.0.0): - dependencies: - d3-color: 3.1.0 - d3-dispatch: 3.0.1 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-timer: 3.0.1 - - d3-zoom@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - d3@7.9.0: - dependencies: - d3-array: 3.2.4 - d3-axis: 3.0.0 - d3-brush: 3.0.0 - d3-chord: 3.0.1 - d3-color: 3.1.0 - d3-contour: 4.0.2 - d3-delaunay: 6.0.4 - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-dsv: 3.0.1 - d3-ease: 3.0.1 - d3-fetch: 3.0.1 - d3-force: 3.0.0 - d3-format: 3.1.0 - d3-geo: 3.1.1 - d3-hierarchy: 3.1.2 - d3-interpolate: 3.0.1 - d3-path: 3.1.0 - d3-polygon: 3.0.1 - d3-quadtree: 3.0.1 - d3-random: 3.0.1 - d3-scale: 4.0.2 - d3-scale-chromatic: 3.1.0 - d3-selection: 3.0.0 - d3-shape: 3.2.0 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - d3-timer: 3.0.1 - d3-transition: 3.0.1(d3-selection@3.0.0) - d3-zoom: 3.0.0 - - dagre-d3-es@7.0.10: - dependencies: - d3: 7.9.0 - lodash-es: 4.17.21 - data-uri-to-buffer@6.0.2: {} - dayjs@1.11.13: {} - debounce@1.2.1: {} debug@4.3.5: @@ -9659,11 +13705,7 @@ snapshots: decimal.js-light@2.5.1: {} - decode-named-character-reference@1.0.2: - dependencies: - character-entities: 2.0.2 - - decode-named-character-reference@1.1.0: + decode-named-character-reference@1.3.0: dependencies: character-entities: 2.0.2 @@ -9673,10 +13715,6 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 - delaunator@5.0.1: - dependencies: - robust-predicates: 3.0.2 - delayed-stream@1.0.0: {} depd@2.0.0: {} @@ -9687,8 +13725,7 @@ snapshots: dependencies: webgl-constants: 1.1.1 - detect-libc@2.1.2: - optional: true + detect-libc@2.1.2: {} detect-node-es@1.1.0: {} @@ -9698,10 +13735,6 @@ snapshots: devtools-protocol@0.0.1508733: {} - didyoumean@1.2.2: {} - - dlv@1.1.3: {} - dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -9714,8 +13747,6 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.1.6: {} - domutils@3.2.2: dependencies: dom-serializer: 2.0.0 @@ -9732,16 +13763,12 @@ snapshots: duplexer@0.1.2: {} - eastasianwidth@0.2.0: {} - ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer: 5.2.1 ee-first@1.1.1: {} - electron-to-chromium@1.5.129: {} - embla-carousel-react@8.6.0(react@18.3.1): dependencies: embla-carousel: 8.6.0 @@ -9758,8 +13785,6 @@ snapshots: emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} - encodeurl@2.0.0: {} encoding-sniffer@0.2.0: @@ -9771,8 +13796,15 @@ snapshots: dependencies: once: 1.4.0 + enhanced-resolve@5.19.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + entities@4.5.0: {} + entities@6.0.1: {} + env-paths@2.2.1: {} error-ex@1.3.4: @@ -9796,12 +13828,53 @@ snapshots: es-toolkit@1.43.0: {} + esast-util-from-estree@2.0.0: + dependencies: + "@types/estree-jsx": 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + "@types/estree-jsx": 1.0.5 + acorn: 8.15.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + + esbuild@0.27.3: + optionalDependencies: + "@esbuild/aix-ppc64": 0.27.3 + "@esbuild/android-arm": 0.27.3 + "@esbuild/android-arm64": 0.27.3 + "@esbuild/android-x64": 0.27.3 + "@esbuild/darwin-arm64": 0.27.3 + "@esbuild/darwin-x64": 0.27.3 + "@esbuild/freebsd-arm64": 0.27.3 + "@esbuild/freebsd-x64": 0.27.3 + "@esbuild/linux-arm": 0.27.3 + "@esbuild/linux-arm64": 0.27.3 + "@esbuild/linux-ia32": 0.27.3 + "@esbuild/linux-loong64": 0.27.3 + "@esbuild/linux-mips64el": 0.27.3 + "@esbuild/linux-ppc64": 0.27.3 + "@esbuild/linux-riscv64": 0.27.3 + "@esbuild/linux-s390x": 0.27.3 + "@esbuild/linux-x64": 0.27.3 + "@esbuild/netbsd-arm64": 0.27.3 + "@esbuild/netbsd-x64": 0.27.3 + "@esbuild/openbsd-arm64": 0.27.3 + "@esbuild/openbsd-x64": 0.27.3 + "@esbuild/openharmony-arm64": 0.27.3 + "@esbuild/sunos-x64": 0.27.3 + "@esbuild/win32-arm64": 0.27.3 + "@esbuild/win32-ia32": 0.27.3 + "@esbuild/win32-x64": 0.27.3 + escalade@3.2.0: {} escape-html@1.0.3: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} @@ -9814,49 +13887,46 @@ snapshots: optionalDependencies: source-map: 0.6.1 - esm@3.2.25: {} - esprima@4.0.1: {} estraverse@5.3.0: {} estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.6 + "@types/estree": 1.0.8 estree-util-build-jsx@3.0.1: dependencies: - '@types/estree-jsx': 1.0.5 + "@types/estree-jsx": 1.0.5 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 estree-walker: 3.0.3 - estree-util-is-identifier-name@2.1.0: {} - estree-util-is-identifier-name@3.0.0: {} - estree-util-to-js@2.0.0: + estree-util-scope@1.0.0: dependencies: - '@types/estree-jsx': 1.0.5 - astring: 1.9.0 - source-map: 0.7.4 + "@types/estree": 1.0.8 + devlop: 1.1.0 - estree-util-value-to-estree@1.3.0: + estree-util-to-js@2.0.0: dependencies: - is-plain-obj: 3.0.0 + "@types/estree-jsx": 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 - estree-util-value-to-estree@3.1.2: + estree-util-value-to-estree@3.5.0: dependencies: - '@types/estree': 1.0.6 + "@types/estree": 1.0.8 estree-util-visit@2.0.0: dependencies: - '@types/estree-jsx': 1.0.5 - '@types/unist': 3.0.3 + "@types/estree-jsx": 1.0.5 + "@types/unist": 3.0.3 estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.6 + "@types/estree": 1.0.8 esutils@2.0.3: {} @@ -9878,16 +13948,6 @@ snapshots: dependencies: eventsource-parser: 3.0.3 - execa@0.8.0: - dependencies: - cross-spawn: 5.1.0 - get-stream: 3.0.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - express-rate-limit@7.5.1(express@5.1.0): dependencies: express: 5.1.0 @@ -9924,10 +13984,6 @@ snapshots: transitivePeerDependencies: - supports-color - extend-shallow@2.0.1: - dependencies: - is-extendable: 0.1.1 - extend@3.0.2: {} extract-zip@2.0.1: @@ -9936,7 +13992,7 @@ snapshots: get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: - '@types/yauzl': 2.10.3 + "@types/yauzl": 2.10.3 transitivePeerDependencies: - supports-color @@ -9946,8 +14002,8 @@ snapshots: fast-glob@3.3.2: dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 @@ -9958,6 +14014,11 @@ snapshots: dependencies: strnum: 2.1.1 + fast-xml-parser@5.3.6: + dependencies: + strnum: 2.1.2 + optional: true + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -9966,14 +14027,14 @@ snapshots: dependencies: format: 0.2.2 - fault@2.0.1: - dependencies: - format: 0.2.2 - fd-slicer@1.1.0: dependencies: pend: 1.2.0 + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + fflate@0.4.8: {} fflate@0.6.10: {} @@ -9997,15 +14058,8 @@ snapshots: transitivePeerDependencies: - supports-color - flexsearch@0.7.43: {} - follow-redirects@1.15.11: {} - foreground-child@3.3.0: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - form-data-encoder@1.7.2: {} form-data@4.0.2: @@ -10024,28 +14078,136 @@ snapshots: forwarded@0.2.0: {} - fraction.js@4.3.7: {} - - framer-motion@11.15.0(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@11.15.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: motion-dom: 11.14.3 motion-utils: 11.14.3 tslib: 2.8.1 optionalDependencies: - '@emotion/is-prop-valid': 0.8.8 + "@emotion/is-prop-valid": 1.4.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + framer-motion@12.34.2(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + motion-dom: 12.34.2 + motion-utils: 12.29.2 + tslib: 2.8.1 + optionalDependencies: + "@emotion/is-prop-valid": 1.4.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) fresh@2.0.0: {} - fsevents@2.3.3: - optional: true + fumadocs-core@16.6.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.469.0(react@18.3.1))(next@16.1.6(@opentelemetry/api@1.9.0)(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)(zod@4.0.15): + dependencies: + "@formatjs/intl-localematcher": 0.8.1 + "@orama/orama": 3.1.18 + "@shikijs/rehype": 3.22.0 + "@shikijs/transformers": 3.22.0 + estree-util-value-to-estree: 3.5.0 + github-slugger: 2.0.0 + hast-util-to-estree: 3.1.3 + hast-util-to-jsx-runtime: 2.3.6 + image-size: 2.0.2 + mdast-util-mdx: 3.0.0 + mdast-util-to-markdown: 2.1.2 + negotiator: 1.0.0 + npm-to-yarn: 3.0.1 + path-to-regexp: 8.3.0 + remark: 15.0.1 + remark-gfm: 4.0.1 + remark-rehype: 11.1.2 + scroll-into-view-if-needed: 3.1.0 + shiki: 3.22.0 + tinyglobby: 0.2.15 + unified: 11.0.5 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + optionalDependencies: + "@mdx-js/mdx": 3.1.1 + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + "@types/react": 19.2.14 + lucide-react: 0.469.0(react@18.3.1) + next: 16.1.6(@opentelemetry/api@1.9.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) + zod: 4.0.15 + transitivePeerDependencies: + - supports-color + + fumadocs-mdx@14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.469.0(react@18.3.1))(next@16.1.6(@opentelemetry/api@1.9.0)(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)(zod@4.0.15))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): + dependencies: + "@mdx-js/mdx": 3.1.1 + "@standard-schema/spec": 1.1.0 + chokidar: 5.0.0 + esbuild: 0.27.3 + estree-util-value-to-estree: 3.5.0 + fumadocs-core: 16.6.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.469.0(react@18.3.1))(next@16.1.6(@opentelemetry/api@1.9.0)(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)(zod@4.0.15) + js-yaml: 4.1.1 + mdast-util-to-markdown: 2.1.2 + picocolors: 1.1.1 + picomatch: 4.0.3 + remark-mdx: 3.1.1 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + zod: 4.3.6 + optionalDependencies: + "@types/mdast": 4.0.4 + "@types/mdx": 2.0.13 + "@types/react": 19.2.14 + mdast-util-mdx-jsx: 3.2.0 + next: 16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + transitivePeerDependencies: + - supports-color + + fumadocs-ui@16.6.3(@emotion/is-prop-valid@1.4.0)(@types/react@19.2.14)(fumadocs-core@16.6.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.469.0(react@18.3.1))(next@16.1.6(@opentelemetry/api@1.9.0)(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)(zod@4.0.15))(next@16.1.6(@opentelemetry/api@1.9.0)(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)(tailwindcss@4.2.0): + dependencies: + "@fumadocs/tailwind": 0.0.2(tailwindcss@4.2.0) + "@radix-ui/react-accordion": 1.2.12(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-collapsible": 1.1.12(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-dialog": 1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-navigation-menu": 1.2.14(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-popover": 1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-presence": 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-scroll-area": 1.2.10(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@radix-ui/react-slot": 1.2.4(@types/react@19.2.14)(react@18.3.1) + "@radix-ui/react-tabs": 1.1.13(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + class-variance-authority: 0.7.1 + fumadocs-core: 16.6.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.469.0(react@18.3.1))(next@16.1.6(@opentelemetry/api@1.9.0)(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)(zod@4.0.15) + lucide-react: 0.570.0(react@18.3.1) + motion: 12.34.2(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-themes: 0.4.6(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) + react-medium-image-zoom: 5.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@18.3.1) + rehype-raw: 7.0.0 + scroll-into-view-if-needed: 3.1.0 + tailwind-merge: 3.5.0 + unist-util-visit: 5.1.0 + optionalDependencies: + "@types/react": 19.2.14 + next: 16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - "@emotion/is-prop-valid" + - "@types/react-dom" + - tailwindcss function-bind@1.1.2: {} - geist@1.3.1(next@15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + geist@1.3.1(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: - next: 15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) generic-pool@3.9.0: {} @@ -10071,8 +14233,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stream@3.0.0: {} - get-stream@5.2.0: dependencies: pump: 3.0.3 @@ -10091,19 +14251,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@10.4.5: - dependencies: - foreground-child: 3.3.0 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - glsl-noise@0.0.0: {} gopd@1.2.0: {} @@ -10114,25 +14261,14 @@ snapshots: graceful-fs@4.2.11: {} - gray-matter@4.0.3: - dependencies: - js-yaml: 3.14.1 - kind-of: 6.0.3 - section-matter: 1.0.0 - strip-bom-string: 1.0.0 - gzip-size@6.0.0: dependencies: duplexer: 0.1.2 - hachure-fill@0.5.2: {} - - harden-react-markdown@1.0.2(react-markdown@9.0.1(@types/react@18.3.3)(react@18.3.1))(react@18.3.1): + harden-react-markdown@1.0.2(react-markdown@9.0.1(@types/react@19.2.14)(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 - react-markdown: 9.0.1(@types/react@18.3.3)(react@18.3.1) - - has-flag@2.0.0: {} + react-markdown: 9.0.1(@types/react@19.2.14)(react@18.3.1) has-symbols@1.1.0: {} @@ -10146,143 +14282,123 @@ snapshots: hast-util-from-dom@5.0.0: dependencies: - '@types/hast': 3.0.4 + "@types/hast": 3.0.4 hastscript: 8.0.0 web-namespaces: 2.0.1 hast-util-from-html-isomorphic@2.0.0: dependencies: - '@types/hast': 3.0.4 + "@types/hast": 3.0.4 hast-util-from-dom: 5.0.0 hast-util-from-html: 2.0.3 unist-util-remove-position: 5.0.0 hast-util-from-html@2.0.3: dependencies: - '@types/hast': 3.0.4 + "@types/hast": 3.0.4 devlop: 1.1.0 - hast-util-from-parse5: 8.0.2 - parse5: 7.2.1 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 vfile: 6.0.3 - vfile-message: 4.0.2 + vfile-message: 4.0.3 - hast-util-from-parse5@8.0.2: + hast-util-from-parse5@8.0.3: dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 devlop: 1.1.0 - hastscript: 9.0.0 - property-information: 6.5.0 + hastscript: 9.0.1 + property-information: 7.1.0 vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 hast-util-is-element@3.0.0: dependencies: - '@types/hast': 3.0.4 + "@types/hast": 3.0.4 hast-util-parse-selector@2.2.5: {} hast-util-parse-selector@4.0.0: dependencies: - '@types/hast': 3.0.4 + "@types/hast": 3.0.4 - hast-util-raw@9.0.4: + hast-util-raw@9.1.0: dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - '@ungap/structured-clone': 1.2.0 - hast-util-from-parse5: 8.0.2 - hast-util-to-parse5: 8.0.0 + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 + "@ungap/structured-clone": 1.3.0 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.1 html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - parse5: 7.2.1 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 vfile: 6.0.3 web-namespaces: 2.0.1 zwitch: 2.0.4 - hast-util-to-estree@3.1.0: + hast-util-to-estree@3.1.3: dependencies: - '@types/estree': 1.0.6 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + "@types/estree": 1.0.8 + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 comma-separated-tokens: 2.0.3 devlop: 1.1.0 estree-util-attach-comments: 3.0.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.1.3 + mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 6.5.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-object: 0.4.4 + style-to-js: 1.1.21 unist-util-position: 5.0.0 zwitch: 2.0.4 transitivePeerDependencies: - supports-color - hast-util-to-html@9.0.3: + hast-util-to-html@9.0.5: dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 ccount: 2.0.1 comma-separated-tokens: 2.0.3 hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - property-information: 6.5.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.1.0 space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 hast-util-to-jsx-runtime@2.3.0: dependencies: - '@types/estree': 1.0.5 - '@types/hast': 3.0.4 - '@types/unist': 3.0.2 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.1.2 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - style-to-object: 1.0.6 - unist-util-position: 5.0.0 - vfile-message: 4.0.2 - transitivePeerDependencies: - - supports-color - - hast-util-to-jsx-runtime@2.3.2: - dependencies: - '@types/estree': 1.0.6 - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 + "@types/estree": 1.0.8 + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 comma-separated-tokens: 2.0.3 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.1.3 + mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 property-information: 6.5.0 space-separated-tokens: 2.0.2 - style-to-object: 1.0.8 + style-to-object: 1.0.14 unist-util-position: 5.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color hast-util-to-jsx-runtime@2.3.6: dependencies: - '@types/estree': 1.0.7 - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 + "@types/estree": 1.0.8 + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 comma-separated-tokens: 2.0.3 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 @@ -10290,42 +14406,42 @@ snapshots: mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.16 + style-to-js: 1.1.21 unist-util-position: 5.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color - hast-util-to-parse5@8.0.0: + hast-util-to-parse5@8.0.1: dependencies: - '@types/hast': 3.0.4 + "@types/hast": 3.0.4 comma-separated-tokens: 2.0.3 devlop: 1.1.0 - property-information: 6.5.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 hast-util-to-string@3.0.1: dependencies: - '@types/hast': 3.0.4 + "@types/hast": 3.0.4 hast-util-to-text@4.0.2: dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 hast-util-is-element: 3.0.0 unist-util-find-after: 5.0.0 hast-util-whitespace@3.0.0: dependencies: - '@types/hast': 3.0.4 + "@types/hast": 3.0.4 hastscript@6.0.0: dependencies: - '@types/hast': 2.3.10 + "@types/hast": 2.3.10 comma-separated-tokens: 1.0.8 hast-util-parse-selector: 2.2.5 property-information: 5.6.0 @@ -10333,18 +14449,18 @@ snapshots: hastscript@8.0.0: dependencies: - '@types/hast': 3.0.4 + "@types/hast": 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 property-information: 6.5.0 space-separated-tokens: 2.0.2 - hastscript@9.0.0: + hastscript@9.0.1: dependencies: - '@types/hast': 3.0.4 + "@types/hast": 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 - property-information: 6.5.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 hex-rgb@4.3.0: {} @@ -10408,12 +14524,17 @@ snapshots: ieee754@1.2.1: {} + image-size@2.0.2: {} + immediate@3.0.6: {} immer@10.1.3: {} immer@11.1.0: {} + immer@11.1.4: + optional: true + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -10421,13 +14542,7 @@ snapshots: inherits@2.0.4: {} - inline-style-parser@0.1.1: {} - - inline-style-parser@0.2.3: {} - - inline-style-parser@0.2.4: {} - - internmap@1.0.1: {} + inline-style-parser@0.2.7: {} internmap@2.0.3: {} @@ -10456,23 +14571,10 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.4: - optional: true - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-core-module@2.16.0: - dependencies: - hasown: 2.0.2 - is-decimal@1.0.4: {} is-decimal@2.0.1: {} - is-extendable@0.1.1: {} - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -10487,8 +14589,6 @@ snapshots: is-number@7.0.0: {} - is-plain-obj@3.0.0: {} - is-plain-obj@4.1.0: {} is-plain-object@5.0.0: {} @@ -10497,32 +14597,20 @@ snapshots: is-promise@4.0.0: {} - is-reference@3.0.2: - dependencies: - '@types/estree': 1.0.6 - is-relative-url@4.0.0: dependencies: is-absolute-url: 4.0.1 - is-stream@1.1.0: {} - is-what@4.1.16: {} isexe@2.0.0: {} its-fine@1.2.5(react@18.3.1): dependencies: - '@types/react-reconciler': 0.28.8 + "@types/react-reconciler": 0.28.8 react: 18.3.1 - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jiti@1.21.7: {} + jiti@2.6.1: {} jose@5.10.0: {} @@ -10539,6 +14627,10 @@ snapshots: dependencies: argparse: 2.0.1 + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + jsbn@1.1.0: {} json-parse-even-better-errors@2.3.1: {} @@ -10575,12 +14667,6 @@ snapshots: dependencies: commander: 8.3.0 - khroma@2.1.0: {} - - kind-of@6.0.3: {} - - kolorist@1.8.0: {} - langfuse-core@3.38.4: dependencies: mustache: 4.2.0 @@ -10589,23 +14675,58 @@ snapshots: dependencies: langfuse-core: 3.38.4 - langium@3.0.0: + lie@3.3.0: dependencies: - chevrotain: 11.0.3 - chevrotain-allstar: 0.3.1(chevrotain@11.0.3) - vscode-languageserver: 9.0.1 - vscode-languageserver-textdocument: 1.0.12 - vscode-uri: 3.0.8 + immediate: 3.0.6 - layout-base@1.0.2: {} + lightningcss-android-arm64@1.31.1: + optional: true - layout-base@2.0.1: {} + lightningcss-darwin-arm64@1.31.1: + optional: true - lie@3.3.0: - dependencies: - immediate: 3.0.6 + lightningcss-darwin-x64@1.31.1: + optional: true + + lightningcss-freebsd-x64@1.31.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.31.1: + optional: true + + lightningcss-linux-arm64-gnu@1.31.1: + optional: true - lilconfig@3.1.3: {} + lightningcss-linux-arm64-musl@1.31.1: + optional: true + + lightningcss-linux-x64-gnu@1.31.1: + optional: true + + lightningcss-linux-x64-musl@1.31.1: + optional: true + + lightningcss-win32-arm64-msvc@1.31.1: + optional: true + + lightningcss-win32-x64-msvc@1.31.1: + optional: true + + lightningcss@1.31.1: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.31.1 + lightningcss-darwin-arm64: 1.31.1 + lightningcss-darwin-x64: 1.31.1 + lightningcss-freebsd-x64: 1.31.1 + lightningcss-linux-arm-gnueabihf: 1.31.1 + lightningcss-linux-arm64-gnu: 1.31.1 + lightningcss-linux-arm64-musl: 1.31.1 + lightningcss-linux-x64-gnu: 1.31.1 + lightningcss-linux-x64-musl: 1.31.1 + lightningcss-win32-arm64-msvc: 1.31.1 + lightningcss-win32-x64-msvc: 1.31.1 linebreak@1.1.0: dependencies: @@ -10626,9 +14747,9 @@ snapshots: livekit-client@2.17.1(@types/dom-mediacapture-record@1.0.22): dependencies: - '@livekit/mutex': 1.1.1 - '@livekit/protocol': 1.44.0 - '@types/dom-mediacapture-record': 1.0.22 + "@livekit/mutex": 1.1.1 + "@livekit/protocol": 1.44.0 + "@types/dom-mediacapture-record": 1.0.22 events: 3.3.0 jose: 6.1.3 loglevel: 1.9.2 @@ -10640,8 +14761,8 @@ snapshots: livekit-server-sdk@2.15.0: dependencies: - '@bufbuild/protobuf': 1.10.1 - '@livekit/protocol': 1.44.0 + "@bufbuild/protobuf": 1.10.1 + "@livekit/protocol": 1.44.0 camelcase-keys: 9.1.3 jose: 5.10.0 @@ -10681,13 +14802,6 @@ snapshots: fault: 1.0.4 highlight.js: 10.7.3 - lru-cache@10.4.3: {} - - lru-cache@4.1.5: - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - lru-cache@7.18.3: {} lucide-react@0.469.0(react@18.3.1): @@ -10698,12 +14812,19 @@ snapshots: dependencies: react: 18.3.1 - maath@0.10.8(@types/three@0.170.0)(three@0.172.0): + lucide-react@0.570.0(react@18.3.1): dependencies: - '@types/three': 0.170.0 + react: 18.3.1 + + maath@0.10.8(@types/three@0.183.0)(three@0.172.0): + dependencies: + "@types/three": 0.183.0 three: 0.172.0 map-obj@5.0.0: {} + magic-string@0.30.21: + dependencies: + "@jridgewell/sourcemap-codec": 1.5.5 markdown-extensions@2.0.0: {} @@ -10730,40 +14851,31 @@ snapshots: marked@12.0.2: {} - marked@13.0.3: {} - marked@15.0.12: {} marked@16.3.0: {} math-intrinsics@1.1.0: {} - mathjax-full@3.2.2: - dependencies: - esm: 3.2.25 - mhchemparser: 4.2.1 - mj-context-menu: 0.6.1 - speech-rule-engine: 4.0.7 - mdast-util-find-and-replace@3.0.2: dependencies: - '@types/mdast': 4.0.4 + "@types/mdast": 4.0.4 escape-string-regexp: 5.0.0 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 mdast-util-from-markdown@2.0.1: dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - decode-named-character-reference: 1.0.2 + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 micromark: 4.0.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-decode-string: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.0 - micromark-util-symbol: 2.0.0 + micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-stringify-position: 4.0.0 transitivePeerDependencies: @@ -10771,9 +14883,9 @@ snapshots: mdast-util-from-markdown@2.0.2: dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - decode-named-character-reference: 1.1.0 + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 micromark: 4.0.2 @@ -10786,20 +14898,9 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-frontmatter@2.0.1: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - micromark-extension-frontmatter: 2.0.0 - transitivePeerDependencies: - - supports-color - mdast-util-gfm-autolink-literal@2.0.1: dependencies: - '@types/mdast': 4.0.4 + "@types/mdast": 4.0.4 ccount: 2.0.1 devlop: 1.1.0 mdast-util-find-and-replace: 3.0.2 @@ -10807,7 +14908,7 @@ snapshots: mdast-util-gfm-footnote@2.1.0: dependencies: - '@types/mdast': 4.0.4 + "@types/mdast": 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.2 @@ -10817,7 +14918,7 @@ snapshots: mdast-util-gfm-strikethrough@2.0.0: dependencies: - '@types/mdast': 4.0.4 + "@types/mdast": 4.0.4 mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: @@ -10825,7 +14926,7 @@ snapshots: mdast-util-gfm-table@2.0.0: dependencies: - '@types/mdast': 4.0.4 + "@types/mdast": 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 mdast-util-from-markdown: 2.0.2 @@ -10835,7 +14936,7 @@ snapshots: mdast-util-gfm-task-list-item@2.0.0: dependencies: - '@types/mdast': 4.0.4 + "@types/mdast": 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.2 @@ -10856,8 +14957,8 @@ snapshots: mdast-util-math@3.0.0: dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 devlop: 1.1.0 longest-streak: 3.1.0 mdast-util-from-markdown: 2.0.1 @@ -10866,69 +14967,23 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx-expression@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - mdast-util-mdx-expression@2.0.1: dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-jsx@3.1.2: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.2 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.1 - stringify-entities: 4.0.4 - unist-util-remove-position: 5.0.0 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-jsx@3.1.3: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.1 - stringify-entities: 4.0.4 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 transitivePeerDependencies: - supports-color mdast-util-mdx-jsx@3.2.0: dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 ccount: 2.0.1 devlop: 1.1.0 mdast-util-from-markdown: 2.0.2 @@ -10936,7 +14991,7 @@ snapshots: parse-entities: 4.0.2 stringify-entities: 4.0.4 unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color @@ -10944,7 +14999,7 @@ snapshots: dependencies: mdast-util-from-markdown: 2.0.2 mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.1.3 + mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: @@ -10952,9 +15007,9 @@ snapshots: mdast-util-mdxjs-esm@2.0.1: dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.2 @@ -10963,47 +15018,59 @@ snapshots: mdast-util-phrasing@4.1.0: dependencies: - '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 + "@types/mdast": 4.0.4 + unist-util-is: 6.0.1 mdast-util-to-hast@13.2.0: dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.2.0 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + "@ungap/structured-clone": 1.3.0 devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.0 + micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 vfile: 6.0.1 + mdast-util-to-hast@13.2.1: + dependencies: + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + "@ungap/structured-clone": 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + mdast-util-to-markdown@2.1.0: dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 longest-streak: 3.1.0 mdast-util-phrasing: 4.1.0 mdast-util-to-string: 4.0.0 - micromark-util-decode-string: 2.0.0 - unist-util-visit: 5.0.0 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 zwitch: 2.0.4 mdast-util-to-markdown@2.1.2: dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 longest-streak: 3.1.0 mdast-util-phrasing: 4.1.0 mdast-util-to-string: 4.0.0 micromark-util-classify-character: 2.0.1 micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 zwitch: 2.0.4 mdast-util-to-string@4.0.0: dependencies: - '@types/mdast': 4.0.4 + "@types/mdast": 4.0.4 media-captions@1.0.4: {} @@ -11017,41 +15084,15 @@ snapshots: merge2@1.4.1: {} - mermaid@11.3.0: - dependencies: - '@braintree/sanitize-url': 7.1.0 - '@iconify/utils': 2.1.33 - '@mermaid-js/parser': 0.3.0 - cytoscape: 3.30.2 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.30.2) - cytoscape-fcose: 2.2.0(cytoscape@3.30.2) - d3: 7.9.0 - d3-sankey: 0.12.3 - dagre-d3-es: 7.0.10 - dayjs: 1.11.13 - dompurify: 3.1.6 - katex: 0.16.22 - khroma: 2.1.0 - lodash-es: 4.17.21 - marked: 13.0.3 - roughjs: 4.6.6 - stylis: 4.3.4 - ts-dedent: 2.2.0 - uuid: 9.0.1 - transitivePeerDependencies: - - supports-color - meshline@3.3.1(three@0.172.0): dependencies: three: 0.172.0 - meshoptimizer@0.18.1: {} - - mhchemparser@4.2.1: {} + meshoptimizer@1.0.1: {} micromark-core-commonmark@2.0.3: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-factory-destination: 2.0.1 micromark-factory-label: 2.0.1 @@ -11068,13 +15109,6 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - micromark-extension-frontmatter@2.0.0: - dependencies: - fault: 2.0.1 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.2 - micromark-extension-gfm-autolink-literal@2.1.0: dependencies: micromark-util-character: 2.1.1 @@ -11135,7 +15169,7 @@ snapshots: micromark-extension-math@3.0.0: dependencies: - '@types/katex': 0.16.7 + "@types/katex": 0.16.7 devlop: 1.1.0 katex: 0.16.22 micromark-factory-space: 2.0.0 @@ -11143,30 +15177,29 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-extension-mdx-expression@3.0.0: + micromark-extension-mdx-expression@3.0.1: dependencies: - '@types/estree': 1.0.6 + "@types/estree": 1.0.8 devlop: 1.1.0 - micromark-factory-mdx-expression: 2.0.2 + micromark-factory-mdx-expression: 2.0.3 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.2 + micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - micromark-extension-mdx-jsx@3.0.1: + micromark-extension-mdx-jsx@3.0.2: dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 1.0.6 + "@types/estree": 1.0.8 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.2 + micromark-factory-mdx-expression: 2.0.3 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.2 + micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-extension-mdx-md@2.0.0: dependencies: @@ -11174,22 +15207,22 @@ snapshots: micromark-extension-mdxjs-esm@3.0.0: dependencies: - '@types/estree': 1.0.6 + "@types/estree": 1.0.8 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.2 + micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) - micromark-extension-mdx-expression: 3.0.0 - micromark-extension-mdx-jsx: 3.0.1 + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 micromark-extension-mdxjs-esm: 3.0.0 micromark-util-combine-extensions: 2.0.1 @@ -11208,17 +15241,17 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - micromark-factory-mdx-expression@2.0.2: + micromark-factory-mdx-expression@2.0.3: dependencies: - '@types/estree': 1.0.6 + "@types/estree": 1.0.8 devlop: 1.1.0 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.2 + micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-factory-space@2.0.0: dependencies: @@ -11269,24 +15302,13 @@ snapshots: micromark-util-chunked: 2.0.1 micromark-util-types: 2.0.2 - micromark-util-decode-numeric-character-reference@2.0.1: - dependencies: - micromark-util-symbol: 2.0.0 - micromark-util-decode-numeric-character-reference@2.0.2: dependencies: micromark-util-symbol: 2.0.1 - micromark-util-decode-string@2.0.0: - dependencies: - decode-named-character-reference: 1.0.2 - micromark-util-character: 2.1.1 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-symbol: 2.0.0 - micromark-util-decode-string@2.0.1: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.3.0 micromark-util-character: 2.1.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 @@ -11295,22 +15317,21 @@ snapshots: micromark-util-encode@2.0.1: {} - micromark-util-events-to-acorn@2.0.2: + micromark-util-events-to-acorn@2.0.3: dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 1.0.6 - '@types/unist': 3.0.3 + "@types/estree": 1.0.8 + "@types/unist": 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-util-html-tag-name@2.0.1: {} micromark-util-normalize-identifier@2.0.0: dependencies: - micromark-util-symbol: 2.0.0 + micromark-util-symbol: 2.0.1 micromark-util-normalize-identifier@2.0.1: dependencies: @@ -11320,12 +15341,6 @@ snapshots: dependencies: micromark-util-types: 2.0.2 - micromark-util-sanitize-uri@2.0.0: - dependencies: - micromark-util-character: 2.1.0 - micromark-util-encode: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-sanitize-uri@2.0.1: dependencies: micromark-util-character: 2.1.1 @@ -11336,7 +15351,7 @@ snapshots: dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.1 - micromark-util-symbol: 2.0.0 + micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 micromark-util-subtokenize@2.1.0: @@ -11356,31 +15371,31 @@ snapshots: micromark@4.0.0: dependencies: - '@types/debug': 4.1.12 + "@types/debug": 4.1.12 debug: 4.3.5 - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-chunked: 2.0.1 micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-encode: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 + micromark-util-normalize-identifier: 2.0.1 micromark-util-resolve-all: 2.0.1 micromark-util-sanitize-uri: 2.0.1 micromark-util-subtokenize: 2.0.1 - micromark-util-symbol: 2.0.0 + micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 transitivePeerDependencies: - supports-color micromark@4.0.2: dependencies: - '@types/debug': 4.1.12 - debug: 4.4.0 - decode-named-character-reference: 1.1.0 + "@types/debug": 4.1.12 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.1 @@ -11415,42 +15430,36 @@ snapshots: dependencies: mime-db: 1.54.0 - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 - minimist@1.2.8: {} - minipass@7.1.2: {} - mitt@3.0.1: {} - mj-context-menu@0.6.1: {} + motion-dom@11.14.3: {} - mlly@1.7.2: + motion-dom@12.34.2: dependencies: - acorn: 8.14.0 - pathe: 1.1.2 - pkg-types: 1.2.1 - ufo: 1.5.4 - - motion-dom@11.14.3: {} + motion-utils: 12.29.2 motion-utils@11.14.3: {} - mrmime@2.0.0: {} + motion-utils@12.29.2: {} + + motion@12.34.2(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + framer-motion: 12.34.2(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tslib: 2.8.1 + optionalDependencies: + "@emotion/is-prop-valid": 1.4.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + mrmime@2.0.1: {} ms@2.1.2: {} ms@2.1.3: {} - mustache@4.2.0: {} - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 + mustache@4.2.0: {} nanoid@3.3.11: {} @@ -11461,114 +15470,48 @@ snapshots: iconv-lite: 0.6.3 sax: 1.4.1 - negotiator@0.6.4: {} - negotiator@1.0.0: {} netmask@2.0.2: {} - next-sitemap@4.2.3(next@15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + next-sitemap@4.2.3(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: - '@corex/deepmerge': 4.0.43 - '@next/env': 13.5.6 + "@corex/deepmerge": 4.0.43 + "@next/env": 13.5.6 fast-glob: 3.3.2 minimist: 1.2.8 - next: 15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-themes@0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 15.2.8 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.15 - busboy: 1.6.0 - caniuse-lite: 1.0.30001759 + "@next/env": 16.1.6 + "@swc/helpers": 0.5.15 + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001770 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.6(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.2.5 - '@next/swc-darwin-x64': 15.2.5 - '@next/swc-linux-arm64-gnu': 15.2.5 - '@next/swc-linux-arm64-musl': 15.2.5 - '@next/swc-linux-x64-gnu': 15.2.5 - '@next/swc-linux-x64-musl': 15.2.5 - '@next/swc-win32-arm64-msvc': 15.2.5 - '@next/swc-win32-x64-msvc': 15.2.5 - '@opentelemetry/api': 1.9.0 - sharp: 0.33.5 + "@next/swc-darwin-arm64": 16.1.6 + "@next/swc-darwin-x64": 16.1.6 + "@next/swc-linux-arm64-gnu": 16.1.6 + "@next/swc-linux-arm64-musl": 16.1.6 + "@next/swc-linux-x64-gnu": 16.1.6 + "@next/swc-linux-x64-musl": 16.1.6 + "@next/swc-win32-arm64-msvc": 16.1.6 + "@next/swc-win32-x64-msvc": 16.1.6 + "@opentelemetry/api": 1.9.0 + sharp: 0.34.5 transitivePeerDependencies: - - '@babel/core' + - "@babel/core" - babel-plugin-macros - nextra-theme-docs@3.0.15(next@15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.0.15(@types/react@18.3.3)(next@15.2.8(@opentelemetry/api@1.9.0)(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.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@headlessui/react': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - clsx: 2.1.1 - escape-string-regexp: 5.0.0 - flexsearch: 0.7.43 - next: 15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next-themes: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - nextra: 3.0.15(@types/react@18.3.3)(next@15.2.8(@opentelemetry/api@1.9.0)(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.6.3) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - scroll-into-view-if-needed: 3.1.0 - zod: 3.25.67 - - nextra@3.0.15(@types/react@18.3.3)(next@15.2.8(@opentelemetry/api@1.9.0)(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.6.3): - dependencies: - '@formatjs/intl-localematcher': 0.5.5 - '@headlessui/react': 2.2.0(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.3)(react@18.3.1) - '@napi-rs/simple-git': 0.1.19 - '@shikijs/twoslash': 1.22.0(typescript@5.6.3) - '@theguild/remark-mermaid': 0.1.3(react@18.3.1) - '@theguild/remark-npm2yarn': 0.3.2 - better-react-mathjax: 2.0.3(react@18.3.1) - clsx: 2.1.1 - estree-util-to-js: 2.0.0 - estree-util-value-to-estree: 3.1.2 - github-slugger: 2.0.0 - graceful-fs: 4.2.11 - gray-matter: 4.0.3 - hast-util-to-estree: 3.1.0 - katex: 0.16.22 - negotiator: 0.6.4 - next: 15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - p-limit: 6.1.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - rehype-katex: 7.0.1 - rehype-pretty-code: 0.14.0(shiki@1.22.0) - rehype-raw: 7.0.0 - remark-frontmatter: 5.0.0 - remark-gfm: 4.0.1 - remark-math: 6.0.0 - remark-reading-time: 2.0.1 - remark-smartypants: 3.0.2 - shiki: 1.22.0 - slash: 5.1.0 - title: 3.5.3 - unist-util-remove: 4.0.0 - unist-util-visit: 5.0.0 - yaml: 2.6.0 - zod: 3.25.67 - zod-validation-error: 3.4.0(zod@3.25.67) - transitivePeerDependencies: - - '@types/react' - - supports-color - - typescript - - nlcst-to-string@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - node-domexception@1.0.0: {} node-email-verifier@2.0.0: @@ -11580,19 +15523,9 @@ snapshots: dependencies: whatwg-url: 5.0.0 - node-releases@2.0.19: {} - nodemailer@7.0.11: {} - normalize-path@3.0.0: {} - - normalize-range@0.1.2: {} - - npm-run-path@2.0.2: - dependencies: - path-key: 2.0.1 - - npm-to-yarn@3.0.0: {} + npm-to-yarn@3.0.1: {} nth-check@2.1.1: dependencies: @@ -11600,8 +15533,6 @@ snapshots: object-assign@4.1.1: {} - object-hash@3.0.0: {} - object-inspect@1.13.4: {} on-finished@2.4.1: @@ -11612,16 +15543,20 @@ snapshots: dependencies: wrappy: 1.0.2 - oniguruma-to-js@0.4.3: + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.4: dependencies: - regex: 4.3.3 + oniguruma-parser: 0.12.1 + regex: 6.1.0 + regex-recursion: 6.0.2 openai-edge@1.2.2: {} openai@4.78.1(zod@4.0.15): dependencies: - '@types/node': 18.19.86 - '@types/node-fetch': 2.6.12 + "@types/node": 18.19.86 + "@types/node-fetch": 2.6.12 abort-controller: 3.0.0 agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 @@ -11639,15 +15574,9 @@ snapshots: opener@1.5.2: {} - p-finally@1.0.0: {} - - p-limit@6.1.0: - dependencies: - yocto-queue: 1.1.1 - pac-proxy-agent@7.2.0: dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 + "@tootallnate/quickjs-emscripten": 0.23.0 agent-base: 7.1.3 debug: 4.3.7 get-uri: 6.0.4 @@ -11663,10 +15592,6 @@ snapshots: degenerator: 5.0.1 netmask: 2.0.2 - package-json-from-dist@1.0.1: {} - - package-manager-detector@0.2.2: {} - pako@0.2.9: {} parent-module@1.0.1: @@ -11687,133 +15612,53 @@ snapshots: is-decimal: 1.0.4 is-hexadecimal: 1.0.4 - parse-entities@4.0.1: - dependencies: - '@types/unist': 2.0.11 - character-entities: 2.0.2 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.1.0 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 - parse-entities@4.0.2: dependencies: - '@types/unist': 2.0.11 + "@types/unist": 2.0.11 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.3.0 is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.27.1 + "@babel/code-frame": 7.27.1 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse-latin@7.0.0: - dependencies: - '@types/nlcst': 2.0.3 - '@types/unist': 3.0.3 - nlcst-to-string: 4.0.0 - unist-util-modify-children: 4.0.0 - unist-util-visit-children: 3.0.0 - vfile: 6.0.3 - - parse-numeric-range@1.3.0: {} - parse5-htmlparser2-tree-adapter@7.1.0: dependencies: domhandler: 5.0.3 - parse5: 7.2.1 + parse5: 7.3.0 parse5-parser-stream@7.1.2: dependencies: - parse5: 7.2.1 + parse5: 7.3.0 - parse5@7.2.1: + parse5@7.3.0: dependencies: - entities: 4.5.0 + entities: 6.0.1 parseurl@1.3.3: {} - path-data-parser@0.1.0: {} - - path-key@2.0.1: {} - path-key@3.1.1: {} - path-parse@1.0.7: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-to-regexp@8.2.0: {} - - pathe@1.1.2: {} + path-to-regexp@8.3.0: {} pend@1.2.0: {} - periscopic@3.1.0: - dependencies: - '@types/estree': 1.0.6 - estree-walker: 3.0.3 - is-reference: 3.0.2 - picocolors@1.1.1: {} picomatch@2.3.1: {} - pify@2.3.0: {} - - pirates@4.0.6: {} + picomatch@4.0.3: {} pkce-challenge@5.0.0: {} - pkg-types@1.2.1: - dependencies: - confbox: 0.1.8 - mlly: 1.7.2 - pathe: 1.1.2 - - points-on-curve@0.2.0: {} - - points-on-path@0.2.1: - dependencies: - path-data-parser: 0.1.0 - points-on-curve: 0.2.0 - - postcss-import@15.1.0(postcss@8.4.49): - dependencies: - postcss: 8.4.49 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.9 - - postcss-js@4.0.1(postcss@8.4.49): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.49 - - postcss-load-config@4.0.2(postcss@8.4.49): - dependencies: - lilconfig: 3.1.3 - yaml: 2.6.1 - optionalDependencies: - postcss: 8.4.49 - - postcss-nested@6.2.0(postcss@8.4.49): - dependencies: - postcss: 8.4.49 - postcss-selector-parser: 6.1.2 - - postcss-selector-parser@6.1.2: + postcss-selector-parser@7.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 @@ -11832,6 +15677,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + posthog-js@1.203.1: dependencies: core-js: 3.39.0 @@ -11847,7 +15698,7 @@ snapshots: prism-react-renderer@2.4.1(react@18.3.1): dependencies: - '@types/prismjs': 1.26.5 + "@types/prismjs": 1.26.5 clsx: 2.1.1 react: 18.3.1 @@ -11874,21 +15725,21 @@ snapshots: property-information@6.5.0: {} - property-information@7.0.0: {} - - protobufjs@7.5.4: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/node': 22.18.0 + property-information@7.1.0: {} + + protobufjs@8.0.0: + dependencies: + "@protobufjs/aspromise": 1.1.2 + "@protobufjs/base64": 1.1.2 + "@protobufjs/codegen": 2.0.4 + "@protobufjs/eventemitter": 1.1.0 + "@protobufjs/fetch": 1.1.0 + "@protobufjs/float": 1.0.2 + "@protobufjs/inquire": 1.1.0 + "@protobufjs/path": 1.1.2 + "@protobufjs/pool": 1.1.0 + "@protobufjs/utf8": 1.1.0 + "@types/node": 22.18.0 long: 5.3.2 proxy-addr@2.0.7: @@ -11913,8 +15764,6 @@ snapshots: proxy-from-env@1.1.0: {} - pseudomap@1.0.2: {} - pump@3.0.3: dependencies: end-of-stream: 1.4.5 @@ -11924,7 +15773,7 @@ snapshots: puppeteer-core@24.23.0: dependencies: - '@puppeteer/browsers': 2.10.10 + "@puppeteer/browsers": 2.10.10 chromium-bidi: 9.1.0(devtools-protocol@0.0.1508733) debug: 4.4.3 devtools-protocol: 0.0.1508733 @@ -11940,7 +15789,7 @@ snapshots: puppeteer@24.23.0(typescript@5.6.3): dependencies: - '@puppeteer/browsers': 2.10.10 + "@puppeteer/browsers": 2.10.10 chromium-bidi: 9.1.0(devtools-protocol@0.0.1508733) cosmiconfig: 9.0.0(typescript@5.6.3) devtools-protocol: 0.0.1508733 @@ -11988,7 +15837,7 @@ snapshots: react-error-boundary@6.0.0(react@18.3.1): dependencies: - '@babel/runtime': 7.27.0 + "@babel/runtime": 7.27.0 react: 18.3.1 react-hook-form@7.54.2(react@18.3.1): @@ -12001,10 +15850,12 @@ snapshots: react-is@16.13.1: {} - react-markdown@9.0.1(@types/react@18.3.3)(react@18.3.1): + react-is@19.2.4: {} + + react-markdown@9.0.1(@types/react@19.2.14)(react@18.3.1): dependencies: - '@types/hast': 3.0.4 - '@types/react': 18.3.3 + "@types/hast": 3.0.4 + "@types/react": 19.2.14 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.0 html-url-attributes: 3.0.0 @@ -12018,88 +15869,104 @@ snapshots: transitivePeerDependencies: - supports-color - react-markdown@9.0.3(@types/react@18.3.3)(react@18.3.1): + react-markdown@9.0.3(@types/react@19.2.14)(react@18.3.1): dependencies: - '@types/hast': 3.0.4 - '@types/react': 18.3.3 + "@types/hast": 3.0.4 + "@types/react": 19.2.14 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 react: 18.3.1 remark-parse: 11.0.0 - remark-rehype: 11.1.1 + remark-rehype: 11.1.2 unified: 11.0.5 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 vfile: 6.0.3 transitivePeerDependencies: - supports-color + react-medium-image-zoom@5.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-reconciler@0.27.0(react@18.3.1): dependencies: loose-envify: 1.4.0 react: 18.3.1 scheduler: 0.21.0 - react-redux@9.2.0(@types/react@18.3.3)(react@18.3.1)(redux@5.0.1): + react-redux@9.2.0(@types/react@19.2.14)(react@18.3.1)(redux@5.0.1): dependencies: - '@types/use-sync-external-store': 0.0.6 + "@types/use-sync-external-store": 0.0.6 react: 18.3.1 use-sync-external-store: 1.5.0(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 redux: 5.0.1 - react-remove-scroll-bar@2.3.8(@types/react@18.3.3)(react@18.3.1): + react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@18.3.1): + dependencies: + react: 18.3.1 + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@18.3.1) + tslib: 2.8.1 + optionalDependencies: + "@types/react": 19.2.14 + + react-remove-scroll@2.6.3(@types/react@19.2.14)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.3(@types/react@18.3.3)(react@18.3.1) + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@18.3.1) tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - react-remove-scroll@2.6.3(@types/react@18.3.3)(react@18.3.1): + react-remove-scroll@2.7.1(@types/react@19.2.14)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.8(@types/react@18.3.3)(react@18.3.1) - react-style-singleton: 2.2.3(@types/react@18.3.3)(react@18.3.1) + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@18.3.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@18.3.3)(react@18.3.1) - use-sidecar: 1.1.3(@types/react@18.3.3)(react@18.3.1) + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - react-remove-scroll@2.7.1(@types/react@18.3.3)(react@18.3.1): + react-remove-scroll@2.7.2(@types/react@19.2.14)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.8(@types/react@18.3.3)(react@18.3.1) - react-style-singleton: 2.2.3(@types/react@18.3.3)(react@18.3.1) + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@18.3.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@18.3.3)(react@18.3.1) - use-sidecar: 1.1.3(@types/react@18.3.3)(react@18.3.1) + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - react-style-singleton@2.2.3(@types/react@18.3.3)(react@18.3.1): + react-style-singleton@2.2.3(@types/react@19.2.14)(react@18.3.1): dependencies: get-nonce: 1.0.1 react: 18.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 react-svg@16.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.27.0 - '@tanem/svg-injector': 10.1.68 - '@types/prop-types': 15.7.14 + "@babel/runtime": 7.27.0 + "@tanem/svg-injector": 10.1.68 + "@types/prop-types": 15.7.14 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-syntax-highlighter@15.6.1(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + "@babel/runtime": 7.24.7 highlight.js: 10.7.3 highlightjs-vue: 1.0.0 lowlight: 1.20.0 @@ -12107,18 +15974,18 @@ snapshots: react: 18.3.1 refractor: 3.6.0 - react-textarea-autosize@8.5.7(@types/react@18.3.3)(react@18.3.1): + react-textarea-autosize@8.5.7(@types/react@19.2.14)(react@18.3.1): dependencies: - '@babel/runtime': 7.27.0 + "@babel/runtime": 7.27.0 react: 18.3.1 - use-composed-ref: 1.4.0(@types/react@18.3.3)(react@18.3.1) - use-latest: 1.3.0(@types/react@18.3.3)(react@18.3.1) + use-composed-ref: 1.4.0(@types/react@19.2.14)(react@18.3.1) + use-latest: 1.3.0(@types/react@19.2.14)(react@18.3.1) transitivePeerDependencies: - - '@types/react' + - "@types/react" react-tweet@3.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@swc/helpers': 0.5.15 + "@swc/helpers": 0.5.15 clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -12128,19 +15995,11 @@ snapshots: dependencies: loose-envify: 1.4.0 - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 + readdirp@5.0.0: {} - reading-time@1.5.0: {} - - recharts@3.6.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react-is@16.13.1)(react@18.3.1)(redux@5.0.1): + recharts@3.6.0(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react-is@19.2.4)(react@18.3.1)(redux@5.0.1): dependencies: - '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@18.3.3)(react@18.3.1)(redux@5.0.1))(react@18.3.1) + "@reduxjs/toolkit": 2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@18.3.1)(redux@5.0.1))(react@18.3.1) clsx: 2.1.1 decimal.js-light: 2.5.1 es-toolkit: 1.43.0 @@ -12148,24 +16007,53 @@ snapshots: immer: 10.1.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-is: 16.13.1 - react-redux: 9.2.0(@types/react@18.3.3)(react@18.3.1)(redux@5.0.1) + react-is: 19.2.4 + react-redux: 9.2.0(@types/react@19.2.14)(react@18.3.1)(redux@5.0.1) reselect: 5.1.1 tiny-invariant: 1.3.3 use-sync-external-store: 1.5.0(react@18.3.1) victory-vendor: 37.3.6 transitivePeerDependencies: - - '@types/react' + - "@types/react" - redux + recma-build-jsx@1.0.0: + dependencies: + "@types/estree": 1.0.8 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + "@types/estree": 1.0.8 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + "@types/estree": 1.0.8 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + redis@4.7.1: dependencies: - '@redis/bloom': 1.2.0(@redis/client@1.6.1) - '@redis/client': 1.6.1 - '@redis/graph': 1.1.1(@redis/client@1.6.1) - '@redis/json': 1.0.7(@redis/client@1.6.1) - '@redis/search': 1.2.0(@redis/client@1.6.1) - '@redis/time-series': 1.1.0(@redis/client@1.6.1) + "@redis/bloom": 1.2.0(@redis/client@1.6.1) + "@redis/client": 1.6.1 + "@redis/graph": 1.1.1(@redis/client@1.6.1) + "@redis/json": 1.0.7(@redis/client@1.6.1) + "@redis/search": 1.2.0(@redis/client@1.6.1) + "@redis/time-series": 1.1.0(@redis/client@1.6.1) redux-thunk@3.1.0(redux@5.0.1): dependencies: @@ -12181,52 +16069,43 @@ snapshots: regenerator-runtime@0.14.1: {} - regex@4.3.3: {} + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 rehype-katex@7.0.1: dependencies: - '@types/hast': 3.0.4 - '@types/katex': 0.16.7 + "@types/hast": 3.0.4 + "@types/katex": 0.16.7 hast-util-from-html-isomorphic: 2.0.0 hast-util-to-text: 4.0.2 katex: 0.16.22 unist-util-visit-parents: 6.0.1 vfile: 6.0.3 - rehype-parse@9.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-from-html: 2.0.3 - unified: 11.0.5 - - rehype-pretty-code@0.14.0(shiki@1.22.0): - dependencies: - '@types/hast': 3.0.4 - hast-util-to-string: 3.0.1 - parse-numeric-range: 1.3.0 - rehype-parse: 9.0.1 - shiki: 1.22.0 - unified: 11.0.5 - unist-util-visit: 5.0.0 - rehype-raw@7.0.0: dependencies: - '@types/hast': 3.0.4 - hast-util-raw: 9.0.4 + "@types/hast": 3.0.4 + hast-util-raw: 9.1.0 vfile: 6.0.3 - remark-frontmatter@5.0.0: + rehype-recma@1.0.0: dependencies: - '@types/mdast': 4.0.4 - mdast-util-frontmatter: 2.0.1 - micromark-extension-frontmatter: 2.0.0 - unified: 11.0.5 + "@types/estree": 1.0.8 + "@types/hast": 3.0.4 + hast-util-to-estree: 3.1.3 transitivePeerDependencies: - supports-color remark-gfm@4.0.1: dependencies: - '@types/mdast': 4.0.4 + "@types/mdast": 4.0.4 mdast-util-gfm: 3.1.0 micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0 @@ -12237,14 +16116,14 @@ snapshots: remark-math@6.0.0: dependencies: - '@types/mdast': 4.0.4 + "@types/mdast": 4.0.4 mdast-util-math: 3.0.0 micromark-extension-math: 3.0.0 unified: 11.0.4 transitivePeerDependencies: - supports-color - remark-mdx@3.0.1: + remark-mdx@3.1.1: dependencies: mdast-util-mdx: 3.0.0 micromark-extension-mdxjs: 3.0.0 @@ -12253,48 +16132,43 @@ snapshots: remark-parse@11.0.0: dependencies: - '@types/mdast': 4.0.4 + "@types/mdast": 4.0.4 mdast-util-from-markdown: 2.0.2 micromark-util-types: 2.0.2 - unified: 11.0.5 + unified: 11.0.4 transitivePeerDependencies: - supports-color - remark-reading-time@2.0.1: - dependencies: - estree-util-is-identifier-name: 2.1.0 - estree-util-value-to-estree: 1.3.0 - reading-time: 1.5.0 - unist-util-visit: 3.1.0 - remark-rehype@11.1.0: dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 mdast-util-to-hast: 13.2.0 unified: 11.0.4 vfile: 6.0.1 - remark-rehype@11.1.1: + remark-rehype@11.1.2: dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.0 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + mdast-util-to-hast: 13.2.1 unified: 11.0.5 vfile: 6.0.3 - remark-smartypants@3.0.2: + remark-stringify@11.0.0: dependencies: - retext: 9.0.0 - retext-smartypants: 6.2.0 + "@types/mdast": 4.0.4 + mdast-util-to-markdown: 2.1.2 unified: 11.0.5 - unist-util-visit: 5.0.0 - remark-stringify@11.0.0: + remark@15.0.1: dependencies: - '@types/mdast': 4.0.4 - mdast-util-to-markdown: 2.1.2 + "@types/mdast": 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 unified: 11.0.5 + transitivePeerDependencies: + - supports-color require-directory@2.1.1: {} @@ -12304,55 +16178,15 @@ snapshots: resolve-from@4.0.0: {} - resolve@1.22.9: - dependencies: - is-core-module: 2.16.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - retext-latin@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - parse-latin: 7.0.0 - unified: 11.0.5 - - retext-smartypants@6.2.0: - dependencies: - '@types/nlcst': 2.0.3 - nlcst-to-string: 4.0.0 - unist-util-visit: 5.0.0 - - retext-stringify@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - nlcst-to-string: 4.0.0 - unified: 11.0.5 - - retext@9.0.0: - dependencies: - '@types/nlcst': 2.0.3 - retext-latin: 4.0.0 - retext-stringify: 4.0.0 - unified: 11.0.5 - reusify@1.0.4: {} - robust-predicates@3.0.2: {} - - roughjs@4.6.6: - dependencies: - hachure-fill: 0.5.2 - path-data-parser: 0.1.0 - points-on-curve: 0.2.0 - points-on-path: 0.2.1 - router@2.2.0: dependencies: debug: 4.4.0 depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 - path-to-regexp: 8.2.0 + path-to-regexp: 8.3.0 transitivePeerDependencies: - supports-color @@ -12373,7 +16207,7 @@ snapshots: satori@0.12.2: dependencies: - '@shuding/opentype.js': 1.4.0-beta.0 + "@shuding/opentype.js": 1.4.0-beta.0 css-background-parser: 0.1.0 css-box-shadow: 1.0.0-3 css-gradient-parser: 0.0.16 @@ -12397,7 +16231,7 @@ snapshots: scroll-into-view-if-needed@3.1.0: dependencies: - compute-scroll-into-view: 3.1.0 + compute-scroll-into-view: 3.1.1 sdp-transform@2.15.0: {} @@ -12412,7 +16246,7 @@ snapshots: semver@7.7.2: {} - semver@7.7.3: + semver@7.7.4: optional: true send@1.2.0: @@ -12442,53 +16276,54 @@ snapshots: setprototypeof@1.2.0: {} - sharp@0.33.5: + sharp@0.34.5: dependencies: - color: 4.2.3 + "@img/colour": 1.0.0 detect-libc: 2.1.2 - semver: 7.7.3 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - optional: true - - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 + semver: 7.7.4 + optionalDependencies: + "@img/sharp-darwin-arm64": 0.34.5 + "@img/sharp-darwin-x64": 0.34.5 + "@img/sharp-libvips-darwin-arm64": 1.2.4 + "@img/sharp-libvips-darwin-x64": 1.2.4 + "@img/sharp-libvips-linux-arm": 1.2.4 + "@img/sharp-libvips-linux-arm64": 1.2.4 + "@img/sharp-libvips-linux-ppc64": 1.2.4 + "@img/sharp-libvips-linux-riscv64": 1.2.4 + "@img/sharp-libvips-linux-s390x": 1.2.4 + "@img/sharp-libvips-linux-x64": 1.2.4 + "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 + "@img/sharp-libvips-linuxmusl-x64": 1.2.4 + "@img/sharp-linux-arm": 0.34.5 + "@img/sharp-linux-arm64": 0.34.5 + "@img/sharp-linux-ppc64": 0.34.5 + "@img/sharp-linux-riscv64": 0.34.5 + "@img/sharp-linux-s390x": 0.34.5 + "@img/sharp-linux-x64": 0.34.5 + "@img/sharp-linuxmusl-arm64": 0.34.5 + "@img/sharp-linuxmusl-x64": 0.34.5 + "@img/sharp-wasm32": 0.34.5 + "@img/sharp-win32-arm64": 0.34.5 + "@img/sharp-win32-ia32": 0.34.5 + "@img/sharp-win32-x64": 0.34.5 + optional: true shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - shebang-regex@1.0.0: {} - shebang-regex@3.0.0: {} - shiki@1.22.0: + shiki@3.22.0: dependencies: - '@shikijs/core': 1.22.0 - '@shikijs/engine-javascript': 1.22.0 - '@shikijs/engine-oniguruma': 1.22.0 - '@shikijs/types': 1.22.0 - '@shikijs/vscode-textmate': 9.3.0 - '@types/hast': 3.0.4 + "@shikijs/core": 3.22.0 + "@shikijs/engine-javascript": 3.22.0 + "@shikijs/engine-oniguruma": 3.22.0 + "@shikijs/langs": 3.22.0 + "@shikijs/themes": 3.22.0 + "@shikijs/types": 3.22.0 + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 side-channel-list@1.0.0: dependencies: @@ -12518,23 +16353,12 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-swizzle@0.2.4: - dependencies: - is-arrayish: 0.3.4 - optional: true - sirv@2.0.4: dependencies: - '@polka/url': 1.0.0-next.25 - mrmime: 2.0.0 + "@polka/url": 1.0.0-next.29 + mrmime: 2.0.1 totalist: 3.0.1 - slash@5.1.0: {} - smart-buffer@4.2.0: {} socks-proxy-agent@8.0.5: @@ -12555,25 +16379,19 @@ snapshots: source-map@0.6.1: optional: true - source-map@0.7.4: {} + source-map@0.7.6: {} space-separated-tokens@1.1.5: {} space-separated-tokens@2.0.2: {} - speech-rule-engine@4.0.7: - dependencies: - commander: 9.2.0 - wicked-good-xpath: 1.3.0 - xmldom-sre: 0.1.31 - sprintf-js@1.0.3: {} sprintf-js@1.1.3: {} - stats-gl@2.4.2(@types/three@0.170.0)(three@0.172.0): + stats-gl@2.4.2(@types/three@0.183.0)(three@0.172.0): dependencies: - '@types/three': 0.170.0 + "@types/three": 0.183.0 three: 0.172.0 stats.js@0.17.0: {} @@ -12582,8 +16400,6 @@ snapshots: statuses@2.0.2: {} - streamsearch@1.1.0: {} - streamx@2.23.0: dependencies: events-universal: 1.0.1 @@ -12598,12 +16414,6 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - string.prototype.codepointat@0.2.1: {} stringify-entities@4.0.4: @@ -12615,55 +16425,24 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.1.0 - - strip-bom-string@1.0.0: {} - - strip-eof@1.0.0: {} - strnum@2.1.1: {} - style-to-js@1.1.16: - dependencies: - style-to-object: 1.0.8 - - style-to-object@0.4.4: - dependencies: - inline-style-parser: 0.1.1 + strnum@2.1.2: + optional: true - style-to-object@1.0.6: + style-to-js@1.1.21: dependencies: - inline-style-parser: 0.2.3 + style-to-object: 1.0.14 - style-to-object@1.0.8: + style-to-object@1.0.14: dependencies: - inline-style-parser: 0.2.4 + inline-style-parser: 0.2.7 styled-jsx@5.1.6(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 - stylis@4.3.4: {} - - sucrase@3.35.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - - supports-color@4.5.0: - dependencies: - has-flag: 2.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - suspend-react@0.1.3(react@18.3.1): dependencies: react: 18.3.1 @@ -12680,36 +16459,15 @@ snapshots: tailwind-merge@2.6.0: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.17): - dependencies: - tailwindcss: 3.4.17 + tailwind-merge@3.5.0: {} - tailwindcss@3.4.17: + tailwindcss-animate@1.0.7(tailwindcss@4.2.0): dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.7 - lilconfig: 3.1.3 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.4.49 - postcss-import: 15.1.0(postcss@8.4.49) - postcss-js: 4.0.1(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49) - postcss-nested: 6.2.0(postcss@8.4.49) - postcss-selector-parser: 6.1.2 - resolve: 1.22.9 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node + tailwindcss: 4.2.0 + + tailwindcss@4.2.0: {} + + tapable@2.3.0: {} tar-fs@3.1.1: dependencies: @@ -12736,23 +16494,15 @@ snapshots: transitivePeerDependencies: - react-native-b4a - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - three-mesh-bvh@0.7.8(three@0.172.0): dependencies: three: 0.172.0 three-stdlib@2.34.0(three@0.172.0): dependencies: - '@types/draco3d': 1.4.10 - '@types/offscreencanvas': 2019.7.3 - '@types/webxr': 0.5.20 + "@types/draco3d": 1.4.10 + "@types/offscreencanvas": 2019.7.3 + "@types/webxr": 0.5.20 draco3d: 1.5.7 fflate: 0.6.10 potpack: 1.0.2 @@ -12766,16 +16516,12 @@ snapshots: tiny-invariant@1.3.3: {} - tinyexec@0.3.1: {} + tinyexec@1.0.2: {} - title@3.5.3: + tinyglobby@0.2.15: dependencies: - arg: 1.0.0 - chalk: 2.3.0 - clipboardy: 1.2.2 - titleize: 1.0.0 - - titleize@1.0.0: {} + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 to-regex-range@5.0.1: dependencies: @@ -12813,11 +16559,11 @@ snapshots: tslib@2.8.1: {} - tunnel-rat@0.1.2(@types/react@18.3.3)(immer@11.1.0)(react@18.3.1): + tunnel-rat@0.1.2(@types/react@19.2.14)(immer@11.1.4)(react@18.3.1): dependencies: - zustand: 4.5.5(@types/react@18.3.3)(immer@11.1.0)(react@18.3.1) + zustand: 4.5.5(@types/react@19.2.14)(immer@11.1.4)(react@18.3.1) transitivePeerDependencies: - - '@types/react' + - "@types/react" - immer - react @@ -12825,7 +16571,7 @@ snapshots: twoslash@0.2.12(typescript@5.6.3): dependencies: - '@typescript/vfs': 1.6.0(typescript@5.6.3) + "@typescript/vfs": 1.6.0(typescript@5.6.3) twoslash-protocol: 0.2.12 typescript: 5.6.3 transitivePeerDependencies: @@ -12847,8 +16593,6 @@ snapshots: typescript@5.6.3: {} - ufo@1.5.4: {} - undici-types@5.26.5: {} undici-types@6.21.0: {} @@ -12862,7 +16606,7 @@ snapshots: unified@11.0.4: dependencies: - '@types/unist': 3.0.2 + "@types/unist": 3.0.3 bail: 2.0.2 devlop: 1.1.0 extend: 3.0.2 @@ -12872,7 +16616,7 @@ snapshots: unified@11.0.5: dependencies: - '@types/unist': 3.0.3 + "@types/unist": 3.0.3 bail: 2.0.2 devlop: 1.1.0 extend: 3.0.2 @@ -12882,116 +16626,91 @@ snapshots: unist-util-find-after@5.0.0: dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-is@5.2.1: - dependencies: - '@types/unist': 2.0.11 - - unist-util-is@6.0.0: - dependencies: - '@types/unist': 3.0.3 + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 - unist-util-modify-children@4.0.0: + unist-util-is@6.0.1: dependencies: - '@types/unist': 3.0.3 - array-iterate: 2.0.1 + "@types/unist": 3.0.3 unist-util-position-from-estree@2.0.0: dependencies: - '@types/unist': 3.0.3 + "@types/unist": 3.0.3 unist-util-position@5.0.0: dependencies: - '@types/unist': 3.0.3 + "@types/unist": 3.0.3 unist-util-remove-position@5.0.0: dependencies: - '@types/unist': 3.0.3 - unist-util-visit: 5.0.0 - - unist-util-remove@4.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + "@types/unist": 3.0.3 + unist-util-visit: 5.1.0 unist-util-stringify-position@4.0.0: dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-children@3.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@4.1.1: - dependencies: - '@types/unist': 2.0.11 - unist-util-is: 5.2.1 + "@types/unist": 3.0.3 unist-util-visit-parents@6.0.1: dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 - unist-util-visit@3.1.0: + unist-util-visit-parents@6.0.2: dependencies: - '@types/unist': 2.0.11 - unist-util-is: 5.2.1 - unist-util-visit-parents: 4.1.1 + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 unist-util-visit@5.0.0: dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 - unpipe@1.0.0: {} - - update-browserslist-db@1.1.3(browserslist@4.24.4): + unist-util-visit@5.1.0: dependencies: - browserslist: 4.24.4 - escalade: 3.2.0 - picocolors: 1.1.1 + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + unpipe@1.0.0: {} uri-js@4.4.1: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.3(@types/react@18.3.3)(react@18.3.1): + use-callback-ref@1.3.3(@types/react@19.2.14)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - use-composed-ref@1.4.0(@types/react@18.3.3)(react@18.3.1): + use-composed-ref@1.4.0(@types/react@19.2.14)(react@18.3.1): dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - use-isomorphic-layout-effect@1.2.0(@types/react@18.3.3)(react@18.3.1): + use-isomorphic-layout-effect@1.2.0(@types/react@19.2.14)(react@18.3.1): dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - use-latest@1.3.0(@types/react@18.3.3)(react@18.3.1): + use-latest@1.3.0(@types/react@19.2.14)(react@18.3.1): dependencies: react: 18.3.1 - use-isomorphic-layout-effect: 1.2.0(@types/react@18.3.3)(react@18.3.1) + use-isomorphic-layout-effect: 1.2.0(@types/react@19.2.14)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 - use-sidecar@1.1.3(@types/react@18.3.3)(react@18.3.1): + use-sidecar@1.1.3(@types/react@19.2.14)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.2.14 use-stick-to-bottom@1.1.1(react@18.3.1): dependencies: @@ -13005,6 +16724,11 @@ snapshots: dependencies: react: 18.3.1 + use-sync-external-store@1.6.0(react@18.3.1): + dependencies: + react: 18.3.1 + optional: true + util-deprecate@1.0.2: {} utility-types@3.11.0: {} @@ -13017,34 +16741,34 @@ snapshots: vfile-location@5.0.3: dependencies: - '@types/unist': 3.0.3 + "@types/unist": 3.0.3 vfile: 6.0.3 - vfile-message@4.0.2: + vfile-message@4.0.3: dependencies: - '@types/unist': 3.0.2 + "@types/unist": 3.0.3 unist-util-stringify-position: 4.0.0 vfile@6.0.1: dependencies: - '@types/unist': 3.0.2 + "@types/unist": 3.0.3 unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 vfile@6.0.3: dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.2 + "@types/unist": 3.0.3 + vfile-message: 4.0.3 victory-vendor@37.3.6: dependencies: - '@types/d3-array': 3.2.2 - '@types/d3-ease': 3.0.2 - '@types/d3-interpolate': 3.0.4 - '@types/d3-scale': 4.0.9 - '@types/d3-shape': 3.1.7 - '@types/d3-time': 3.0.4 - '@types/d3-timer': 3.0.2 + "@types/d3-array": 3.2.2 + "@types/d3-ease": 3.0.2 + "@types/d3-interpolate": 3.0.4 + "@types/d3-scale": 4.0.9 + "@types/d3-shape": 3.1.7 + "@types/d3-time": 3.0.4 + "@types/d3-timer": 3.0.2 d3-array: 3.2.4 d3-ease: 3.0.1 d3-interpolate: 3.0.1 @@ -13053,23 +16777,6 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vscode-jsonrpc@8.2.0: {} - - vscode-languageserver-protocol@3.17.5: - dependencies: - vscode-jsonrpc: 8.2.0 - vscode-languageserver-types: 3.17.5 - - vscode-languageserver-textdocument@1.0.12: {} - - vscode-languageserver-types@3.17.5: {} - - vscode-languageserver@9.0.1: - dependencies: - vscode-languageserver-protocol: 3.17.5 - - vscode-uri@3.0.8: {} - web-namespaces@2.0.1: {} web-streams-polyfill@4.0.0-beta.3: {} @@ -13086,9 +16793,9 @@ snapshots: webpack-bundle-analyzer@4.10.1: dependencies: - '@discoveryjs/json-ext': 0.5.7 - acorn: 8.14.0 - acorn-walk: 8.3.2 + "@discoveryjs/json-ext": 0.5.7 + acorn: 8.15.0 + acorn-walk: 8.3.4 commander: 7.2.0 debounce: 1.2.1 escape-string-regexp: 4.0.0 @@ -13118,28 +16825,16 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - which@1.3.1: - dependencies: - isexe: 2.0.0 - which@2.0.2: dependencies: isexe: 2.0.0 - wicked-good-xpath@1.3.0: {} - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - wrappy@1.0.2: {} ws@7.5.10: {} @@ -13155,27 +16850,19 @@ snapshots: xmlbuilder2@3.1.1: dependencies: - '@oozcitak/dom': 1.15.10 - '@oozcitak/infra': 1.0.8 - '@oozcitak/util': 8.3.8 + "@oozcitak/dom": 1.15.10 + "@oozcitak/infra": 1.0.8 + "@oozcitak/util": 8.3.8 js-yaml: 3.14.1 xmlbuilder@11.0.1: {} - xmldom-sre@0.1.31: {} - xtend@4.0.2: {} y18n@5.0.8: {} - yallist@2.1.2: {} - yallist@4.0.0: {} - yaml@2.6.0: {} - - yaml@2.6.1: {} - yargs-parser@21.1.1: {} yargs@17.7.2: @@ -13193,8 +16880,6 @@ snapshots: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - yocto-queue@1.1.1: {} - yoga-wasm-web@0.3.3: {} zod-to-json-schema@3.24.6(zod@3.25.67): @@ -13205,31 +16890,29 @@ snapshots: dependencies: zod: 4.0.15 - zod-validation-error@3.4.0(zod@3.25.67): - dependencies: - zod: 3.25.67 - zod@3.25.67: {} zod@4.0.15: {} + zod@4.3.6: {} + zustand@3.7.2(react@18.3.1): optionalDependencies: react: 18.3.1 - zustand@4.5.5(@types/react@18.3.3)(immer@11.1.0)(react@18.3.1): + zustand@4.5.5(@types/react@19.2.14)(immer@11.1.4)(react@18.3.1): dependencies: use-sync-external-store: 1.2.2(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 - immer: 11.1.0 + "@types/react": 19.2.14 + immer: 11.1.4 react: 18.3.1 - zustand@5.0.1(@types/react@18.3.3)(immer@11.1.0)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)): + zustand@5.0.1(@types/react@19.2.14)(immer@11.1.4)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)): optionalDependencies: - '@types/react': 18.3.3 - immer: 11.1.0 + "@types/react": 19.2.14 + immer: 11.1.4 react: 18.3.1 - use-sync-external-store: 1.5.0(react@18.3.1) + use-sync-external-store: 1.6.0(react@18.3.1) zwitch@2.0.4: {} diff --git a/postcss.config.js b/postcss.config.js index 33ad091d26..a7d1379bea 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,5 @@ module.exports = { plugins: { - tailwindcss: {}, - autoprefixer: {}, + "@tailwindcss/postcss": {}, }, } diff --git a/scripts/copy_md_sources.js b/scripts/copy_md_sources.js index 3ca2a26b88..94c95d50f2 100644 --- a/scripts/copy_md_sources.js +++ b/scripts/copy_md_sources.js @@ -1,12 +1,13 @@ /* - Copy all Markdown sources from pages/** (md, mdx) into public/md-src/** as .md files. + Copy all Markdown sources from content/** (md, mdx) into public/md-src/** as .md files. This runs at build time so the static files can be served directly in production. + (Previously copied from pages/; site now uses App Router with content/ only.) */ const fs = require('fs'); const path = require('path'); -const SOURCE_DIR = path.join(process.cwd(), 'pages'); +const SOURCE_DIR = path.join(process.cwd(), 'content'); const OUTPUT_DIR = path.join(process.cwd(), 'public', 'md-src'); /** @@ -36,36 +37,35 @@ function ensureDir(dirPath) { } /** - * Determine if path within pages/ should be copied and where. + * Determine if path within content/ should be copied and where. * - Accept .md and .mdx files only - * - Exclude next special files and api routes (e.g., pages/api/**, _app, _document, _meta, 404) - * - Map pages/foo/bar.mdx -> public/md-src/foo/bar.md - * - Map pages/foo/index.mdx -> public/md-src/foo.md + * - Exclude meta.json and non-markdown + * - Map content/foo/bar.mdx -> public/md-src/foo/bar.md + * - Map content/foo/index.mdx -> public/md-src/foo.md */ function mapDestination(sourceFile) { const rel = path.relative(SOURCE_DIR, sourceFile); - // Exclude special folders/files - if (rel.startsWith('api/')) return null; const base = path.basename(rel); - if (base.startsWith('_') || base === '404.mdx' || base === '404.md') return null; + if (base === 'meta.json' || base.startsWith('_')) return null; const ext = path.extname(rel).toLowerCase(); if (ext !== '.md' && ext !== '.mdx') return null; - // Remove extension const withoutExt = rel.slice(0, -ext.length); - - // Handle index files (e.g., docs/index.mdx -> docs.md) const parts = withoutExt.split(path.sep); let outParts = parts.slice(); if (parts[parts.length - 1] === 'index') { - outParts = parts.slice(0, -1); // drop 'index' + outParts = parts.slice(0, -1); } const outRel = outParts.length ? outParts.join('/') + '.md' : 'index.md'; return path.join(OUTPUT_DIR, outRel); } function copyAll() { + if (!fs.existsSync(SOURCE_DIR)) { + console.log('copy_md_sources: content/ not found, skipping'); + return; + } const allFiles = walkDir(SOURCE_DIR); let copied = 0; for (const file of allFiles) { diff --git a/scripts/generate-section-loaders.js b/scripts/generate-section-loaders.js new file mode 100644 index 0000000000..31e09c8d05 --- /dev/null +++ b/scripts/generate-section-loaders.js @@ -0,0 +1,83 @@ +/** + * Generates lib/section-loaders.generated.ts with dynamic imports for all content sections + * (except docs which has its own doc-loaders.client.ts). + * Run: node scripts/generate-section-loaders.js + */ +const fs = require("fs"); +const path = require("path"); + +const CONTENT_DIR = path.join(__dirname, "..", "content"); +const SECTIONS = [ + { dir: "self-hosting", collection: "selfHosting" }, + { dir: "blog", collection: "blog" }, + { dir: "changelog", collection: "changelog" }, + { dir: "guides", collection: "guides" }, + { dir: "faq", collection: "faq" }, + { dir: "integrations", collection: "integrations" }, + { dir: "security", collection: "security" }, + { dir: "library", collection: "library" }, + { dir: "customers", collection: "customers" }, + { dir: "handbook", collection: "handbook" }, + { dir: "marketing", collection: "marketing" }, +]; + +function collectFiles(dir, baseDir, list = []) { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + for (const e of entries) { + const full = path.join(dir, e.name); + const rel = path.relative(baseDir, full); + if (e.isDirectory()) { + if (e.name.startsWith(".")) continue; + collectFiles(full, baseDir, list); + } else if (e.name.endsWith(".mdx") || e.name.endsWith(".md")) { + const slug = rel.replace(/\.(mdx|md)$/, "").replace(/\\/g, "/"); + const ext = path.extname(e.name); + list.push({ slug, path: rel.replace(/\\/g, "/"), ext }); + } + } + return list; +} + +const lines = [ + '"use client";', + "", + "import type { ComponentType } from 'react';", + "", + "/** Generated by scripts/generate-section-loaders.js */", + "export const sectionLoaders: Record<", + " string,", + " Record Promise<{ default: ComponentType<{ components?: Record }> }>>", + "> = {", +]; + +for (const { dir, collection } of SECTIONS) { + const sectionPath = path.join(CONTENT_DIR, dir); + if (!fs.existsSync(sectionPath)) continue; + const files = collectFiles(sectionPath, sectionPath); + if (files.length === 0) continue; + lines.push(` ${JSON.stringify(collection)}: {`); + for (const { slug, path: filePath } of files) { + const slugKey = slug === "index" ? "" : slug; + const importPath = `@/content/${dir}/${filePath}?collection=${collection}`; + lines.push(` ${JSON.stringify(slugKey)}: () => import(${JSON.stringify(importPath)}),`); + } + lines.push(" },"); +} + +lines.push("};"); +lines.push(""); +lines.push( + "export function getSectionDocLoader(collection: string, slug: string[]) {" +); +lines.push(" const loaders = sectionLoaders[collection];"); +lines.push(" if (!loaders) return undefined;"); +lines.push(" const key = slug.length === 0 ? '' : slug.join('/');"); +lines.push(" return loaders[key];"); +lines.push("}"); + +const outPath = path.join(__dirname, "..", "lib", "section-loaders.generated.ts"); +fs.writeFileSync(outPath, lines.join("\n") + "\n"); +console.log("Wrote", outPath); +console.log("Collections:", Object.keys(SECTIONS).length); +console.log("Run again after adding new content."); +console.log("Note: faq has dynamic [tag] routes - add manually if needed."); \ No newline at end of file diff --git a/scripts/update_package_usage.sh b/scripts/update_package_usage.sh index 8016d7981e..fd134d8317 100644 --- a/scripts/update_package_usage.sh +++ b/scripts/update_package_usage.sh @@ -1,5 +1,9 @@ uv run --with github-dependents-info github-dependents-info --repo langfuse/langfuse-python --markdownfile ./components-mdx/dependents/python.md --sort stars --mergepackages --verbose --minstars 10 sed -i '' 's/# Dependents/### Dependents/' ./components-mdx/dependents/python.md +sed -i '' 's//)/g' ./components-mdx/dependents/python.md uv run --with github-dependents-info github-dependents-info --repo langfuse/langfuse-js --markdownfile ./components-mdx/dependents/js.md --sort stars --mergepackages --verbose --minstars 10 -sed -i '' 's/# Dependents/### Dependents/' ./components-mdx/dependents/js.md \ No newline at end of file +sed -i '' 's/# Dependents/### Dependents/' ./components-mdx/dependents/js.md +sed -i '' 's//)/g' ./components-mdx/dependents/js.md \ No newline at end of file diff --git a/source.config.ts b/source.config.ts new file mode 100644 index 0000000000..b31dc6efd6 --- /dev/null +++ b/source.config.ts @@ -0,0 +1,140 @@ +import { defineDocs, defineConfig, frontmatterSchema } from "fumadocs-mdx/config"; +import remarkGfm from "remark-gfm"; +import { mdxJsxToMarkdown } from "mdast-util-mdx-jsx"; +import { z } from "zod"; + +// YAML parses unquoted dates (e.g. `date: 2023-07-19`) as JS Date objects. +// Use this helper so both string dates and Date objects are accepted and +// normalised to an ISO date string (YYYY-MM-DD). +const yamlDateField = z + .union([ + z.string(), + z.date().transform((d) => d.toISOString().split("T")[0]), + ]) + .nullish(); + +// Extended schema for blog pages — adds date, tag, author, ogImage fields +// used by BlogIndex for thumbnails and filtering. +const blogFrontmatterSchema = frontmatterSchema.extend({ + date: yamlDateField, + tag: z.string().nullish(), + author: z.string().nullish(), + ogImage: z.string().nullish(), + showInBlogIndex: z.boolean().nullish(), +}); + +// Extended schema for changelog pages — adds date, author, ogImage fields +// that the Changelog widget reads from frontMatter. +const changelogFrontmatterSchema = frontmatterSchema.extend({ + date: yamlDateField, + author: z.string().nullish(), + ogImage: z.string().nullish(), +}); + +// Extended schema for customer story pages — preserves all default fields and +// adds the custom frontmatter fields used by CustomerCarousel / CustomerIndex. +const customerFrontmatterSchema = frontmatterSchema.extend({ + // Use .nullish() so empty YAML values (parsed as null) are accepted too + date: yamlDateField, + ogImage: z.string().nullish(), + tag: z.string().nullish(), + author: z.string().nullish(), + customerLogo: z.string().nullish(), + customerLogoDark: z.string().nullish(), + customerQuote: z.string().nullish(), + quoteAuthor: z.string().nullish(), + quoteRole: z.string().nullish(), + quoteCompany: z.string().nullish(), + quoteAuthorImage: z.string().nullish(), + showInCustomerIndex: z.boolean().nullish(), +}); + +// remarkPlugins is applied globally in defineConfig; per-collection mdxOptions +// are only needed for schema customization. + +export const docs = defineDocs({ + dir: "content/docs", +}); + +export const selfHosting = defineDocs({ + dir: "content/self-hosting", +}); + +export const blog = defineDocs({ + dir: "content/blog", + docs: { + schema: blogFrontmatterSchema, + }, +}); + +export const changelog = defineDocs({ + dir: "content/changelog", + docs: { + schema: changelogFrontmatterSchema, + }, +}); + +const guidesFrontmatterSchema = frontmatterSchema.extend({ + ogImage: z.string().nullish(), + category: z.string().nullish(), +}); + +export const guides = defineDocs({ + dir: "content/guides", + docs: { + schema: guidesFrontmatterSchema, + }, +}); + +export const faq = defineDocs({ + dir: "content/faq", +}); + +export const integrations = defineDocs({ + dir: "content/integrations", +}); + +export const security = defineDocs({ + dir: "content/security", +}); + +export const library = defineDocs({ + dir: "content/library", +}); + +export const customers = defineDocs({ + dir: "content/customers", + docs: { + schema: customerFrontmatterSchema, + }, +}); + +export const handbook = defineDocs({ + dir: "content/handbook", +}); + +export const marketing = defineDocs({ + dir: "content/marketing", +}); + +export default defineConfig({ + mdxOptions: { + remarkPlugins: [remarkGfm], + providerImportSource: "@/mdx-components", + // Disable remark-image: many content files reference remote images via https:// + // and the plugin tries to fetch dimensions at compile time, causing build failures + remarkImageOptions: false, + // Teach remark-structure's mdast-util-to-markdown serializer how to handle + // MDX JSX nodes (mdxJsxFlowElement / mdxJsxTextElement). Without this, it + // throws "Cannot handle unknown node `mdxJsxFlowElement`" when pages contain + // JSX components like , , etc. + remarkStructureOptions: { + // @ts-ignore — extensions is valid in mdast-util-to-markdown but the + // StructureOptions type doesn't expose it directly + stringify: { extensions: [mdxJsxToMarkdown()] }, + }, + // @ts-ignore — { lazy: false } is valid at runtime; RehypeCodeOptions + // requires themes in its full type but fumadocs applies safe defaults + rehypeCodeOptions: { lazy: false }, + }, +}); diff --git a/src/github-stars.ts b/src/github-stars.ts index 43d948d3be..e5778938e3 100644 --- a/src/github-stars.ts +++ b/src/github-stars.ts @@ -1 +1 @@ -export const GITHUB_STARS = 20176; \ No newline at end of file +export const GITHUB_STARS = 22676; \ No newline at end of file diff --git a/src/overrides.css b/src/overrides.css index c332d28259..09ca3a6b27 100644 --- a/src/overrides.css +++ b/src/overrides.css @@ -1,99 +1,50 @@ -/* toc items should not be bold */ -.nextra-toc li a { - font-weight: normal; -} - -/* Hide guides and faq from main menu */ -.nextra-nav-container>nav>div>a[href="/guides"] { - display: none !important; -} - -.nextra-nav-container>nav>div>a[href="/faq"] { - display: none !important; -} - -.nextra-nav-container>nav>div>a[href="/self-hosting"] { - display: none !important; -} - -.nextra-nav-container>nav>div>a[href="/library"] { - display: none !important; -} - -.nextra-nav-container>nav>div>a[href="/security"] { - display: none !important; -} - -.nextra-nav-container>nav>div>a[href="/integrations"] { - display: none !important; -} - -.nextra-nav-container>nav>div>a[href="/handbook"] { - display: none !important; +/* Custom docs nav height (used when nav.component is set in DocsLayout) */ +:root { + --fd-nav-height: 4rem; } -.nextra-nav-container>nav>div>a[href="/cloud"] { - display: none !important; +/* Mobile sidebar drawer: push below sticky navbar + optional banner. */ +#nd-sidebar-mobile { + top: calc( + var(--fd-nav-height, 4rem) + var(--fd-banner-height, 0px) + ) !important; + height: calc( + 100dvh - var(--fd-nav-height, 4rem) - var(--fd-banner-height, 0px) + ) !important; } -@media (max-width: 1024px) { - .nextra-nav-container>nav>div>a[href="/changelog"] { - display: none !important; - } +/* Sidebar/collapsed-trigger sticky top: custom navbar (4rem) + optional banner. + Overrides fumadocs' inline --fd-docs-row-1: var(--fd-banner-height, 0px) + which only accounts for the banner, not our external custom navbar. */ +#nd-docs-layout { + --fd-docs-row-1: calc( + var(--fd-nav-height, 4rem) + var(--fd-banner-height, 0px) + ) !important; } -/* Less gap in desktop menu */ -.nextra-menu-desktop { - gap: 0.1rem; - - /* make menu items more compact */ - a.nextra-focus, - button { - padding: 0.225rem 0.5rem !important; - } - - /* Make first-level folder names bold */ - /* >li>button:first-child { - font-weight: 600; - } */ +/* Docs left sidebar: max width 360px (Fumadocs default is 268px) */ +#nd-docs-layout [grid-area="sidebar"] { + --fd-sidebar-width: 360px; } -.nextra-menu-desktop>li:not(:has(*)) { - /* only those that have no children */ - margin-bottom: 0.1rem; +.layout-wrapper { + max-width: 1440px; + margin: 0 auto; + position: relative; } - -.nextra-nav-container>nav { - gap: 0.5rem; - - @media (min-width: 768px) { - gap: 1rem; - } +#nd-docs-layout #nd-sidebar[data-hovered="false"] { + background-color: transparent; } -/* smaller search bar */ -/* .nextra-nav-container input[type="search"] { - width: 8rem; - - @media (min-width: 1024px) { - width: 10rem; - } - - @media (min-width: 1280px) { - width: 16rem; +@media (min-width: 1440px) { + #nd-docs-layout [data-sidebar-panel] { + left: calc((100vw - 1440px) / 2); } - - border-radius: 0.25rem; -} */ - -/* Fix logo overflowing */ -.nextra-nav-container>nav>a:first-child { - flex-shrink: 0; } /* Fix nested lists */ -li>ol, -li>ul { +li > ol, +li > ul { margin-top: 0 !important; } @@ -102,56 +53,77 @@ media-outlet { background-color: transparent !important; } -/* More gap between h2 across docs and articles */ -article.nextra-content h2._border-b { - /* h2 with border-bottom as this is how h2 is on default docs mode, we do not want to target custom/raw h2 on landingpage, changelog, blog etc. */ - margin-top: 4rem; -} - -article.nextra-body-typesetting-article h2 { - margin-top: 6rem; -} - svg .nodeLabel, svg .edgeLabel { font-family: monospace; } -/* Fix callout list */ -.nextra-callout ul { - margin-top: 0; -} - -/* Overflowing nextra tabs should wrap */ +/* Overflowing tabs should wrap */ [role="tablist"] { flex-wrap: wrap; row-gap: 0.2rem; } /* Subsequent details should have less of a gap */ -details+details { +details + details { margin-top: 0.5rem !important; } +/* Docs footer pagination: strip card styling, hide description */ +#nd-page > div:last-child > a { + border: none !important; + background: none !important; + padding: 0.25rem 0 !important; + border-radius: 0 !important; + gap: 0.125rem !important; +} +#nd-page > div:last-child > a:hover { + background: none !important; + color: inherit !important; +} +#nd-page > div:last-child > a > p:last-child { + display: none !important; +} + /* Fix detail padding */ -details>div { +details > div { padding: 0.25rem; } /* Details header should be bold */ -details>summary { +details > summary { font-weight: 700; } -/* Add muted color variants for icons */ -:root { - --muted-green: 84 81% 44%; - --muted-magenta: 330 90% 70%; - --muted-blue: 239 84% 67%; -} - /* Remove margin from subseparator parent */ li:has(> .subseparator) { margin: 0 !important; padding: 0 !important; -} \ No newline at end of file +} + +/* Steps component: increment counter and render numbered circles centered on the left border line. + .steps has pl-8 (2rem) padding from its left border, so the circle (1.75rem wide) + needs left: -(2rem + 0.875rem) = -2.875rem to sit centered on that border. */ +.steps > h2, +.steps > h3 { + counter-increment: step; + position: relative; +} +.steps > h2::before, +.steps > h3::before { + content: counter(step); + position: absolute; + left: -2.875rem; + top: 50%; + transform: translateY(-50%); + display: inline-flex; + align-items: center; + justify-content: center; + width: 1.75rem; + height: 1.75rem; + border-radius: 9999px; + background-color: hsl(var(--primary)); + color: hsl(var(--primary-foreground)); + font-size: 0.875rem; + font-weight: 600; +} diff --git a/style.css b/style.css index 2cf1d5ddce..bcae5a26d7 100644 --- a/style.css +++ b/style.css @@ -1,7 +1,180 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +/* Tailwind CSS v4 entry point */ +@import "tailwindcss"; +/* fumadocs-ui: neutral theme colors (defines --color-fd-* variables in @theme) */ +@import "fumadocs-ui/css/neutral.css"; +/* fumadocs-ui: component styles and utilities (depends on neutral.css colors) */ +@import "fumadocs-ui/css/preset.css"; + +/* Dark mode via class on element */ +@variant dark (&:is(.dark *)); + +/* Custom theme tokens */ +@theme { + --font-sans: + var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-mono: + var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, + Consolas, "Liberation Mono", "Courier New", monospace; + + /* Semantic color tokens (resolved from CSS custom properties at runtime) */ + --color-border: hsl(var(--border)); + --color-input: hsl(var(--input)); + --color-ring: hsl(var(--ring)); + --color-background: hsl(var(--background)); + --color-foreground: hsl(var(--foreground)); + + --color-primary: hsl(var(--primary)); + --color-primary-foreground: hsl(var(--primary-foreground)); + + --color-secondary: hsl(var(--secondary)); + --color-secondary-foreground: hsl(var(--secondary-foreground)); + + --color-destructive: hsl(var(--destructive)); + --color-destructive-foreground: hsl(var(--destructive-foreground)); + + --color-muted: hsl(var(--muted)); + --color-muted-foreground: hsl(var(--muted-foreground)); + + --color-accent: hsl(var(--accent)); + --color-accent-foreground: hsl(var(--accent-foreground)); + + --color-popover: hsl(var(--popover)); + --color-popover-foreground: hsl(var(--popover-foreground)); + + --color-card: hsl(var(--card)); + --color-card-foreground: hsl(var(--card-foreground)); + + --color-muted-green: hsl(var(--muted-green)); + --color-muted-blue: hsl(var(--muted-blue)); + --color-muted-magenta: hsl(var(--muted-magenta)); + + /* Border radius */ + --radius-lg: var(--radius); + --radius-md: calc(var(--radius) - 2px); + --radius-sm: calc(var(--radius) - 4px); + + /* Container: use Tailwind default so max-w-2xl stays 42rem (672px). Use max-w-[1400px] or a custom var for wide layout. */ + --container-2xl: 42rem; + + /* Large display headings: line-height 1 (restore pre-upgrade behavior) */ + --text-5xl--line-height: 1; + --text-6xl--line-height: 1; + --text-7xl--line-height: 1; + --text-8xl--line-height: 1; + --text-9xl--line-height: 1; + + /* Animations */ + --animate-accordion-down: accordion-down 0.2s ease-out; + --animate-accordion-up: accordion-up 0.2s ease-out; + --animate-border-beam: border-beam calc(var(--duration) * 1s) infinite linear; + --animate-meteor: meteor 5s linear infinite; + --animate-spin-custom: spin-custom calc(var(--speed) * 2) infinite linear; + --animate-slide: slide var(--speed) ease-in-out infinite alternate; + --animate-gradient: gradient 6s linear infinite; + --animate-marquee: marquee var(--duration) linear infinite; + --animate-grid: grid 20s linear infinite; + --animate-marquee-vertical: marquee-vertical var(--duration) linear infinite; + --animate-fall: fall 1.5s linear forwards; + + @keyframes accordion-down { + from { + height: 0; + } + to { + height: var(--radix-accordion-content-height); + } + } + @keyframes accordion-up { + from { + height: var(--radix-accordion-content-height); + } + to { + height: 0; + } + } + @keyframes border-beam { + 100% { + offset-distance: 100%; + } + } + @keyframes grid { + 0% { + transform: translateY(-50%); + } + 100% { + transform: translateY(0); + } + } + @keyframes meteor { + 0% { + transform: rotate(215deg) translateX(0); + opacity: 1; + } + 70% { + opacity: 1; + } + 100% { + transform: rotate(215deg) translateX(-500px); + opacity: 0; + } + } + @keyframes marquee { + from { + transform: translateX(0); + } + to { + transform: translateX(calc(-100% - var(--gap))); + } + } + @keyframes marquee-vertical { + from { + transform: translateY(0); + } + to { + transform: translateY(calc(-100% - var(--gap))); + } + } + @keyframes gradient { + to { + background-position: 200% center; + } + } + @keyframes spin-custom { + 0% { + rotate: 0deg; + } + 15%, + 35% { + rotate: 90deg; + } + 65%, + 85% { + rotate: 270deg; + } + 100% { + rotate: 360deg; + } + } + @keyframes slide { + to { + transform: translate(calc(100cqw - 100%), 0); + } + } + @keyframes fall { + 0% { + transform: translateY(0px) rotate(0deg); + opacity: 1; + } + 100% { + transform: translateY(250px) rotate(360deg); + opacity: 0; + } + } +} + +/* CSS custom properties for shadcn/ui color system */ @layer base { :root { --background: 0 0% 99%; @@ -33,6 +206,10 @@ --destructive-foreground: 210 40% 98%; --radius: 0.5rem; + + --muted-green: 84 81% 44%; + --muted-magenta: 330 90% 70%; + --muted-blue: 239 84% 67%; } :root[class~="dark"] { @@ -42,7 +219,7 @@ --muted: 0 0% 18%; --muted-foreground: 215 20.2% 65.1%; - --popover: 222.2 84% 4.9%; + --popover: 222.2 14% 4.9%; --popover-foreground: 210 40% 98%; --card: 0 0% 0%; @@ -64,34 +241,69 @@ --destructive: 0 62.8% 30.6%; --destructive-foreground: 0 85.7% 97.3%; } -} - -@layer base { * { @apply border-border; } body { - @apply bg-background text-foreground !important; - font-feature-settings: "rlig" 1, "calt" 1; + @apply bg-background! text-foreground!; + font-feature-settings: + "rlig" 1, + "calt" 1; } footer { - @apply bg-background text-foreground !important; + @apply bg-background! text-foreground!; } h1 { - @apply tracking-tight font-mono leading-tight; + @apply tracking-tight font-mono; } h2 { @apply tracking-tight; } - /* Style Headers in Markdown tables */ - + /* Style headers in Markdown tables */ th { @apply bg-muted text-left p-4 font-mono; } -} \ No newline at end of file +} + +/* Body content area inside
— adds horizontal padding so text + doesn't run flush against the border. */ +@layer base { + details > *:not(summary) { + padding-left: 1rem; + padding-right: 1rem; + } + details > *:last-child:not(summary) { + padding-bottom: 0.75rem; + } +} + +/* Override the Tailwind v4 auto-generated animation utilities that use + animation: var(--animate-*). The nested var() chain (--animate-foo + contains var(--speed) / var(--duration)) can be silently invalid in + some browsers. Explicit shorthand values are unambiguous and reliable. */ +@layer utilities { + .animate-slide { + animation: slide var(--speed) ease-in-out infinite alternate; + } + .animate-spin-custom { + animation: spin-custom calc(var(--speed) * 2) infinite linear; + } + .animate-marquee { + animation: marquee var(--duration) linear infinite; + } + .animate-marquee-vertical { + animation: marquee-vertical var(--duration) linear infinite; + } + .animate-border-beam { + animation: border-beam calc(var(--duration) * 1s) infinite linear; + } + .animate-grid { + animation: grid 20s linear infinite; + } +} diff --git a/tailwind.config.js b/tailwind.config.js index 68e645391a..3c784c3927 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -7,21 +7,17 @@ module.exports = { "./pages/**/*.{js,jsx,ts,tsx,mdx}", "./app/**/*.{js,ts,jsx,tsx,mdx}", "./src/**/*.{js,jsx,ts,tsx,mdx}", - "./theme.config.tsx", - "./lib/**/*.{js,jsx,ts,tsx,mdx}" + "./lib/**/*.{js,jsx,ts,tsx,mdx}", ], theme: { container: { center: true, padding: "2rem", - screens: { - "2xl": "1400px", - }, }, extend: { fontFamily: { - sans: ['var(--font-geist-sans)'], - mono: ['var(--font-geist-mono)'], + sans: ["var(--font-geist-sans)"], + mono: ["var(--font-geist-mono)"], }, colors: { border: "hsl(var(--border))", @@ -73,7 +69,7 @@ module.exports = { meteor: "meteor 5s linear infinite", spin: "spin calc(var(--speed) * 2) infinite linear", slide: "slide var(--speed) ease-in-out infinite alternate", - "gradient": 'gradient 6s linear infinite', + gradient: "gradient 6s linear infinite", marquee: "marquee var(--duration) linear infinite", grid: "grid 20s linear infinite", "marquee-vertical": "marquee-vertical var(--duration) linear infinite", @@ -113,8 +109,8 @@ module.exports = { from: { transform: "translateY(0)" }, to: { transform: "translateY(calc(-100% - var(--gap)))" }, }, - "gradient": { - to: { 'background-position': '200% center' }, + gradient: { + to: { "background-position": "200% center" }, }, spin: { "0%": { @@ -147,9 +143,9 @@ module.exports = { }, }, perspective: { - '1000': '1000px', + 1000: "1000px", }, }, - plugins: [require("tailwindcss-animate")], - } -} \ No newline at end of file + }, + plugins: [require("tailwindcss-animate")], +}; diff --git a/theme.config.tsx b/theme.config.tsx deleted file mode 100644 index 1fffc6cadc..0000000000 --- a/theme.config.tsx +++ /dev/null @@ -1,240 +0,0 @@ -import React from "react"; -import { DocsThemeConfig, useConfig } from "nextra-theme-docs"; -import { Logo } from "@/components/logo"; -import { Cards, Steps, Tabs, Callout } from "nextra/components"; -import { useRouter } from "next/router"; -import { MainContentWrapper } from "./components/MainContentWrapper"; -import { Frame } from "./components/Frame"; -import { GithubMenuBadge } from "./components/GitHubBadge"; -import { ToAppButton } from "./components/ToAppButton"; -import { DocsContributors } from "./components/DocsContributors"; -import { Button } from "./components/ui/button"; -import { COOKBOOK_ROUTE_MAPPING } from "./lib/cookbook_route_mapping"; -import { GeistSans } from "geist/font/sans"; -import FooterMenu from "./components/FooterMenu"; -import Link from "next/link"; -import { AvailabilityBanner } from "./components/availability"; -import InkeepSearchBar from "./components/inkeep/InkeepSearchBar"; -import { LangTabs } from "./components/LangTabs"; -import { Video } from "./components/Video"; -import { HiringBadge } from "@/components/HiringBadge"; -// import IconYoutube from "./components/icons/youtube"; - -const config: DocsThemeConfig = { - logo: ( -
- - -
- ), - logoLink: false, - main: MainContentWrapper, - search: { - // placeholder: "Search...", - component: , - }, - navbar: { - extraContent: ( - <> - {/* - - */} - - - - - - - - - - - - - ), - }, - sidebar: { - defaultMenuCollapseLevel: 1, - toggleButton: true, - }, - editLink: { - content: "Edit this page on GitHub", - }, - toc: { - backToTop: true, - extraContent: , - }, - docsRepositoryBase: "https://github.com/langfuse/langfuse-docs/tree/main", - footer: { - content: , - }, - head: () => { - const { asPath, defaultLocale, locale } = useRouter(); - const { frontMatter, title: pageTitle } = useConfig(); - const url = - "https://langfuse.com" + - (defaultLocale === locale ? asPath : `/${locale}${asPath}`); - - const description = frontMatter.description ?? ""; - - const title = frontMatter.seoTitle ?? frontMatter.title ?? pageTitle; - - const section = asPath.startsWith("/docs") - ? "Docs" - : asPath.startsWith("/changelog/") - ? "Changelog" - : asPath.startsWith("/cookbook/") - ? "Cookbook" - : asPath.startsWith("/faq/") - ? "FAQ" - : ""; - - const image = frontMatter.ogImage - ? "https://langfuse.com" + frontMatter.ogImage - : `https://langfuse.com/api/og?title=${encodeURIComponent( - title - )}&description=${encodeURIComponent( - description - )}§ion=${encodeURIComponent(section)}`; - - const video = frontMatter.ogVideo - ? "https://langfuse.com" + frontMatter.ogVideo - : null; - - const cookbook = COOKBOOK_ROUTE_MAPPING.find( - (cookbook) => cookbook.path === asPath - ); - const canonical: string | undefined = frontMatter.canonical - ? frontMatter.canonical.startsWith("http") - ? frontMatter.canonical - : "https://langfuse.com" + frontMatter.canonical - : cookbook?.canonicalPath - ? "https://langfuse.com" + cookbook.canonicalPath - : undefined; - - const noindex = frontMatter.noindex === true; - - const titleTemplate = - asPath === "/" - ? "Langfuse" - : asPath.startsWith("/blog/") - ? "%s - Langfuse Blog" - : asPath.startsWith("/docs/guides/") - ? "%s - Langfuse Guides" - : asPath.startsWith("/handbook/") - ? "%s - Langfuse Handbook" - : "%s - Langfuse"; - - const isDev = - typeof process !== "undefined" && process.env.NODE_ENV === "development"; - - return ( - <> - - - - - - - - {video && } - - - - - - - - -