diff --git a/apps/www/app/api/revalidate/route.ts b/apps/www/app/api/revalidate/route.ts new file mode 100644 index 00000000..5ae0f76e --- /dev/null +++ b/apps/www/app/api/revalidate/route.ts @@ -0,0 +1,14 @@ +import { revalidatePath } from "next/cache"; +import { type NextRequest, NextResponse } from "next/server"; + +export async function POST(request: NextRequest) { + const token = request.headers.get("authorization")?.replace("Bearer ", ""); + + if (token !== process.env.REVALIDATION_TOKEN) { + return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); + } + + revalidatePath("/changelog"); + + return NextResponse.json({ revalidated: true }); +} diff --git a/apps/www/app/changelog/data.ts b/apps/www/app/changelog/data.ts new file mode 100644 index 00000000..a91639d1 --- /dev/null +++ b/apps/www/app/changelog/data.ts @@ -0,0 +1,94 @@ +import { allChangelogs } from "content-collections"; + +const GITHUB_REPO = "unkeyed/unkey"; +const CHANGELOG_PATH = "docs/product/changelog"; + +function parseFrontmatter(source: string): { + title: string; + description?: string; + tags: string[]; +} { + const match = source.match(/^---\n([\s\S]*?)\n---/); + if (!match) { + return { title: "", tags: ["product"] }; + } + + const fm = match[1]; + + const get = (key: string) => { + const m = fm.match(new RegExp(`^${key}:\\s*(.+)$`, "m")); + return m ? m[1].replace(/^["']|["']$/g, "").trim() : undefined; + }; + + const tags = ["product"]; + + return { title: get("title") ?? "", description: get("description"), tags }; +} + +async function fetchProductChangelogs() { + try { + const headers: HeadersInit = { Accept: "application/vnd.github.v3+json" }; + if (process.env.GITHUB_TOKEN) { + headers.Authorization = `Bearer ${process.env.GITHUB_TOKEN}`; + } + + const res = await fetch( + `https://api.github.com/repos/${GITHUB_REPO}/contents/${CHANGELOG_PATH}`, + { headers, next: { revalidate: 86400 } }, + ); + if (!res.ok) { + return []; + } + + const entries = (await res.json()) as Array<{ + type: string; + name: string; + download_url: string; + }>; + + const mdxFiles = entries.filter((f) => f.type === "file" && f.name.endsWith(".mdx")); + + const results = await Promise.all( + mdxFiles.map(async (file) => { + try { + const raw = await fetch(file.download_url, { + next: { revalidate: 86400 }, + }); + if (!raw.ok) { + console.error(`Failed to fetch changelog file ${file.name}: ${raw.status}`); + return null; + } + const source = (await raw.text()).replace(/^noindex:\s*.+$/m, ""); + const date = file.name.slice(0, -4); // YYYY-MM-DD from filename + const { title, description, tags } = parseFrontmatter(source); + return { slug: date, date, title, description, tags, source }; + } catch (err) { + console.error(`Failed to process changelog file ${file.name}:`, err); + return null; + } + }), + ); + + return results.filter((entry) => entry !== null); + } catch (err) { + console.error("Failed to fetch product changelogs:", err); + return []; + } +} + +export async function getAllChangelogs() { + const productEntries = await fetchProductChangelogs(); + + const collectionEntries = allChangelogs.map((e) => ({ + ...e, + _kind: "collection" as const, + })); + const githubEntries = productEntries.map((e) => ({ + ...e, + _kind: "github" as const, + })); + + return [...collectionEntries, ...githubEntries].sort( + (a, b) => new Date(b.date).getTime() - new Date(a.date).getTime(), + ); +} diff --git a/apps/www/app/changelog/page.tsx b/apps/www/app/changelog/page.tsx index 807ea47c..7e00dff2 100644 --- a/apps/www/app/changelog/page.tsx +++ b/apps/www/app/changelog/page.tsx @@ -1,17 +1,17 @@ import { RainbowDarkButton } from "@/components/button"; -import { CTA } from "@/components/cta"; - import { ChangelogGridItem } from "@/components/changelog/changelog-grid-item"; +import { changelogMdxComponents } from "@/components/changelog/changelog-mdx-components"; import { SideList } from "@/components/changelog/side-list"; +import { CTA } from "@/components/cta"; +import { MDX } from "@/components/mdx-content"; import { ChangelogLight } from "@/components/svg/changelog"; -import { allChangelogs } from "content-collections"; import { formatDate } from "date-fns"; import { ArrowRight } from "lucide-react"; +import { MDXRemote } from "next-mdx-remote/rsc"; +import { getAllChangelogs } from "./data"; export default async function Changelogs() { - const changelogs = allChangelogs.sort((a, b) => { - return new Date(b.date).getTime() - new Date(a.date).getTime(); - }); + const changelogs = await getAllChangelogs(); return ( <> @@ -48,8 +48,18 @@ export default async function Changelogs() {
- {changelogs?.map((changelog) => ( - + {changelogs.map((entry) => ( + + {entry._kind === "collection" ? ( + + ) : ( + + )} + ))}
diff --git a/apps/www/app/sitemap.ts b/apps/www/app/sitemap.ts index a4e625e1..6fdbbdc9 100644 --- a/apps/www/app/sitemap.ts +++ b/apps/www/app/sitemap.ts @@ -1,5 +1,6 @@ -import { allChangelogs, allGlossaries, allPolicies, allPosts } from "content-collections"; -import type { Changelog, Glossary, Policy, Post } from "content-collections"; +import { getAllChangelogs } from "@/app/changelog/data"; +import { allGlossaries, allPolicies, allPosts } from "content-collections"; +import type { Glossary, Policy, Post } from "content-collections"; import type { MetadataRoute } from "next"; export default async function sitemap(): Promise { const baseUrl = "https://www.unkey.com"; @@ -13,7 +14,8 @@ export default async function sitemap(): Promise { url: `${baseUrl}/policies/${policy.slug}`, })); - const changelogs: MetadataRoute.Sitemap = allChangelogs.map((changelog: Changelog) => ({ + const allChangelogEntries = await getAllChangelogs(); + const changelogs: MetadataRoute.Sitemap = allChangelogEntries.map((changelog) => ({ url: `${baseUrl}/changelog#${changelog.slug}`, lastModified: changelog.date, })); diff --git a/apps/www/app/templates/client.tsx b/apps/www/app/templates/client.tsx index e4385efd..8998770e 100644 --- a/apps/www/app/templates/client.tsx +++ b/apps/www/app/templates/client.tsx @@ -34,12 +34,12 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { ArrowRight, SearchX, VenetianMask } from "lucide-react"; import Link from "next/link"; import { useEffect, useMemo } from "react"; -import { useForm } from "react-hook-form"; +import { type Resolver, useForm } from "react-hook-form"; import { type Framework, type Language, templates } from "./data"; export function TemplatesClient() { const form = useForm({ - resolver: zodResolver(schema), + resolver: zodResolver(schema) as Resolver, defaultValues: getDefaulTemplatesFormValues(), reValidateMode: "onChange", }); diff --git a/apps/www/components/changelog/callouts.tsx b/apps/www/components/changelog/callouts.tsx new file mode 100644 index 00000000..af4141a9 --- /dev/null +++ b/apps/www/components/changelog/callouts.tsx @@ -0,0 +1,193 @@ +import type { ReactNode } from "react"; + +type CalloutProps = { + children: ReactNode; + title?: string; +}; + +const variants = { + info: { + border: "border-l-[#3DC5FA]", + bg: "bg-[#3DC5FA]/10", + titleColor: "text-[#3DC5FA]", + icon: ( + + + + + + ), + }, + success: { + border: "border-l-[#3CEEAE]", + bg: "bg-[#3CEEAE]/10", + titleColor: "text-[#3CEEAE]", + icon: ( + + + + + ), + }, + warning: { + border: "border-l-[#FFD55D]", + bg: "bg-[#FFD55D]/10", + titleColor: "text-[#FFD55D]", + icon: ( + + + + + + ), + }, + error: { + border: "border-l-[#FB1048]", + bg: "bg-[#FB1048]/10", + titleColor: "text-[#FB1048]", + icon: ( + + + + + + ), + }, +} as const; + +type VariantKey = keyof typeof variants; + +function Callout({ children, title, variant }: CalloutProps & { variant: VariantKey }) { + const v = variants[variant]; + return ( +
+ {v.icon} +
+ {title &&

{title}

} + {children} +
+
+ ); +} + +export const Note = ({ children, title }: CalloutProps) => ( + + {children} + +); + +export const Info = ({ children, title }: CalloutProps) => ( + + {children} + +); + +export const Tip = ({ children, title }: CalloutProps) => ( + + {children} + +); + +export const Check = ({ children, title }: CalloutProps) => ( + + {children} + +); + +export const Warning = ({ children, title }: CalloutProps) => ( + + {children} + +); + +export const Danger = ({ children, title }: CalloutProps) => ( + + {children} + +); diff --git a/apps/www/components/changelog/changelog-grid-item.tsx b/apps/www/components/changelog/changelog-grid-item.tsx index ebc2c7db..8177c306 100644 --- a/apps/www/components/changelog/changelog-grid-item.tsx +++ b/apps/www/components/changelog/changelog-grid-item.tsx @@ -1,17 +1,27 @@ -import { MDX } from "@/components/mdx-content"; import { Separator } from "@/components/ui/separator"; import { cn } from "@/lib/utils"; -import type { Changelog } from "content-collections"; import Link from "next/link"; +import type { ReactNode } from "react"; import { Frame } from "../../components/frame"; import { ImageWithBlur } from "../image-with-blur"; import { XShareButton } from "../x-share-button"; + +type ChangelogMeta = { + slug: string; + title: string; + description?: string | null; + date: string; + tags?: string[]; + image?: string | null; +}; + type Props = { - changelog: Changelog; + changelog: ChangelogMeta; + children: ReactNode; className?: string; }; -export async function ChangelogGridItem({ className, changelog }: Props) { +export function ChangelogGridItem({ className, changelog, children }: Props) { const baseUrl = process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : "http://localhost:3000"; @@ -41,7 +51,9 @@ export async function ChangelogGridItem({ className, changelog }: Props) { {changelog.title} -

{changelog.description}

+ {changelog.description && ( +

{changelog.description}

+ )} {changelog.image && ( @@ -59,7 +71,7 @@ export async function ChangelogGridItem({ className, changelog }: Props) { "prose-sm md:prose-md prose-strong:text-white/90 prose-code:text-white/80 prose-code:bg-white/10 prose-code:px-2 prose-code:py-1 prose-code:border-white/20 prose-code:rounded-md prose-pre:p-0 prose-pre:m-0 prose-pre:leading-6", )} > - + {children} = { + 1: "grid-cols-1", + 2: "grid-cols-2", + 3: "grid-cols-3", + 4: "grid-cols-4", + }; + return
{children}
; +} + +// Rewrite relative links (e.g. /platform/instances/overview) to absolute docs URLs +function ChangelogAnchor({ href, ...props }: AnchorHTMLAttributes) { + const resolvedHref = href?.startsWith("/") ? `https://unkey.com/docs${href}` : href; + return ( + + ); +} + +// Use the marketing site's Frame with a default size, since it requires the size prop +function ChangelogFrame({ + children, + className, +}: { + children: ReactNode; + className?: string; +}) { + return ( + + {children} + + ); +} + +// Mintlify MDX uses and as children of and +const Tab = (Tabs as any).Item; +const Step = (Steps as any).Item; + +export const changelogMdxComponents = { + // Base HTML element overrides from the marketing site + ...MdxComponents, + + // Override the default anchor to rewrite relative paths to absolute docs URLs + a: ChangelogAnchor, + + Mermaid, + Frame: ChangelogFrame, + + // Callout variants — built on the marketing site's Alert component + Note, + Info, + Tip, + Check, + Warning, + Danger, + + // Mintlify layout & content components + Card, + CardGroup, + Accordion, + Tabs, + Tab, + Steps, + Step, + Badge, + CodeGroup, + Columns, +} as Record; diff --git a/apps/www/components/changelog/mintlify-wrappers.tsx b/apps/www/components/changelog/mintlify-wrappers.tsx new file mode 100644 index 00000000..3f5f76cd --- /dev/null +++ b/apps/www/components/changelog/mintlify-wrappers.tsx @@ -0,0 +1,19 @@ +"use client"; + +// Re-export Mintlify components as client components so they can be safely +// imported into a server module and passed to MDXRemote as component references. +export { + Accordion, + Badge, + Card, + Check, + CodeGroup, + Columns, + Danger, + Info, + Note, + Steps, + Tabs, + Tip, + Warning, +} from "@mintlify/components"; diff --git a/apps/www/components/frame.tsx b/apps/www/components/frame.tsx index 74c1b936..75354c5b 100644 --- a/apps/www/components/frame.tsx +++ b/apps/www/components/frame.tsx @@ -1,4 +1,5 @@ import { cn } from "@/lib/utils"; +import type { ReactNode } from "react"; export function Frame({ as: Component = "div", @@ -9,7 +10,7 @@ export function Frame({ as?: any; size: "sm" | "md" | "lg"; className?: string; - children: React.ReactNode; + children: ReactNode; }) { return ( diff --git a/apps/www/components/mdx-components.tsx b/apps/www/components/mdx-components.tsx new file mode 100644 index 00000000..94487261 --- /dev/null +++ b/apps/www/components/mdx-components.tsx @@ -0,0 +1,81 @@ +import { ImageZoom } from "fumadocs-ui/components/image-zoom"; +import type { ImageProps } from "next/image"; +import Image from "next/image"; +import type { DetailedHTMLProps, ImgHTMLAttributes, JSX } from "react"; +import { BlogCodeBlock, BlogCodeBlockSingle } from "./blog/blog-code-block"; +import { BlogList, BlogListItem, BlogListNumbered, type BlogListProps } from "./blog/blog-list"; +import { BlogQuote, type BlogQuoteProps } from "./blog/blog-quote"; +import { Alert } from "./ui/alert/alert"; + +export const MdxComponents = { + Image: (props: ImageProps) => + props.width || props.fill ? ( + + ) : ( + + ), + ImageZoom: (props: ImageProps) => , + img: (props: DetailedHTMLProps, HTMLImageElement>) => ( + {props.alt + ), + Callout: Alert, + th: (props: JSX.IntrinsicAttributes) => ( + + ), + tr: (props: JSX.IntrinsicAttributes) => ( + + ), + td: (props: JSX.IntrinsicAttributes) => ( + + ), + a: (props: JSX.IntrinsicAttributes) => ( + + ), + blockquote: (props: BlogQuoteProps) => BlogQuote(props), + BlogQuote: (props: BlogQuoteProps) => BlogQuote(props), + ol: (props: BlogListProps) => BlogListNumbered(props), + ul: (props: BlogListProps) => BlogList(props), + li: (props: BlogListProps) => BlogListItem(props), + h1: (props: any) => ( +

+ ), + h2: (props: JSX.IntrinsicAttributes) => ( +

+ ), + h3: (props: JSX.IntrinsicAttributes) => ( +

+ ), + h4: (props: JSX.IntrinsicAttributes) => ( +

+ ), + p: (props: JSX.IntrinsicAttributes) => ( +

+ ), + code: (props: JSX.IntrinsicAttributes) => ( + + ), + pre: (props: JSX.IntrinsicAttributes) => , + BlogCodeBlock, +}; diff --git a/apps/www/components/mdx-content.tsx b/apps/www/components/mdx-content.tsx index 90ab5c89..0f35b510 100644 --- a/apps/www/components/mdx-content.tsx +++ b/apps/www/components/mdx-content.tsx @@ -1,90 +1,7 @@ import { Mermaid } from "@/components/mermaid"; import { useMDXComponent } from "@content-collections/mdx/react"; -import { ImageZoom } from "fumadocs-ui/components/image-zoom"; -import type { ImageProps } from "next/image"; -import Image from "next/image"; -import type { DetailedHTMLProps, ImgHTMLAttributes, JSX } from "react"; -import { BlogCodeBlock, BlogCodeBlockSingle } from "./blog/blog-code-block"; -import { BlogList, BlogListItem, BlogListNumbered, type BlogListProps } from "./blog/blog-list"; -import { BlogQuote, type BlogQuoteProps } from "./blog/blog-quote"; -import { Alert } from "./ui/alert/alert"; - -export const MdxComponents = { - Image: (props: ImageProps) => - props.width || props.fill ? ( - - ) : ( - - ), - ImageZoom: (props: ImageProps) => , - img: (props: DetailedHTMLProps, HTMLImageElement>) => ( - {props.src} - ), - Callout: Alert, - th: (props: JSX.IntrinsicAttributes) => ( - - ), - tr: (props: JSX.IntrinsicAttributes) => ( - - ), - td: (props: JSX.IntrinsicAttributes) => ( - - ), - a: (props: JSX.IntrinsicAttributes) => ( - - ), - blockquote: (props: BlogQuoteProps) => BlogQuote(props), - BlogQuote: (props: BlogQuoteProps) => BlogQuote(props), - ol: (props: BlogListProps) => BlogListNumbered(props), - ul: (props: BlogListProps) => BlogList(props), - li: (props: BlogListProps) => BlogListItem(props), - h1: (props: any) => ( -

- ), - h2: (props: JSX.IntrinsicAttributes) => ( -

- ), - h3: (props: JSX.IntrinsicAttributes) => ( -

- ), - h4: (props: JSX.IntrinsicAttributes) => ( -

- ), - p: (props: JSX.IntrinsicAttributes) => ( -

- ), - code: (props: JSX.IntrinsicAttributes) => ( - - ), - pre: (props: JSX.IntrinsicAttributes) => , - BlogCodeBlock, -}; +import { MdxComponents } from "./mdx-components"; +export { MdxComponents } from "./mdx-components"; interface MDXProps { code: string; diff --git a/apps/www/content-collections.ts b/apps/www/content-collections.ts index bf1f3e41..8d22da7f 100644 --- a/apps/www/content-collections.ts +++ b/apps/www/content-collections.ts @@ -2,9 +2,7 @@ import { defineCollection, defineConfig } from "@content-collections/core"; import { compileMDX } from "@content-collections/mdx"; import { remarkGfm, remarkHeading, remarkStructure } from "fumadocs-core/mdx-plugins"; import GithubSlugger from "github-slugger"; -import { categoryEnum } from "./app/glossary/data"; -import { faqSchema } from "./lib/schemas/faq-schema"; -import { takeawaysSchema } from "./lib/schemas/takeaways-schema"; +import { categories } from "./app/glossary/data"; const posts = defineCollection({ name: "posts", @@ -24,9 +22,9 @@ const posts = defineCollection({ }); const slugger = new GithubSlugger(); const regXHeader = /\n(?#+)\s+(?.+)/g; - const tableOfContents = Array.from(document.content.matchAll(regXHeader)).map(({ groups }) => { - const flag = groups?.flag; - const content = groups?.content; + const tableOfContents = Array.from(document.content.matchAll(regXHeader)).map((match) => { + const flag = match.groups?.flag; + const content = match.groups?.content; return { level: flag?.length, text: content, @@ -51,7 +49,7 @@ const changelog = defineCollection({ title: z.string(), description: z.string().optional(), date: z.string(), - tags: z.array(z.string()), + tags: z.array(z.string()).default(["product"]), image: z.string().optional(), }), transform: async (document, context) => { @@ -116,9 +114,20 @@ const glossary = defineCollection({ description: z.string(), h1: z.string(), term: z.string(), - categories: z.array(categoryEnum), - takeaways: takeawaysSchema, - faq: faqSchema, + categories: z.array(z.enum(categories.map((c) => c.slug) as [string, ...string[]])), + takeaways: z.object({ + tldr: z.string(), + definitionAndStructure: z.array(z.object({ key: z.string(), value: z.string() })), + historicalContext: z.array(z.object({ key: z.string(), value: z.string() })), + usageInAPIs: z.object({ + tags: z.array(z.string()), + description: z.string(), + }), + bestPractices: z.array(z.string()), + recommendedReading: z.array(z.object({ title: z.string(), url: z.string() })), + didYouKnow: z.string(), + }), + faq: z.array(z.object({ question: z.string(), answer: z.string() })), updatedAt: z.string(), slug: z.string(), }), @@ -131,9 +140,9 @@ const glossary = defineCollection({ const regXHeader = /(?:^|\n)(?#+)\s+(?.+)/g; const tableOfContents = Array.from(document.content.matchAll(regXHeader)) - .map(({ groups }) => { - const flag = groups?.flag; - const content = groups?.content; + .map((match) => { + const flag = match.groups?.flag; + const content = match.groups?.content; // Only include headers that are not the main title (h1) if (flag && flag.length > 1) { return { @@ -144,7 +153,7 @@ const glossary = defineCollection({ } return null; }) - .filter(Boolean); // Remove null entries + .filter((item): item is NonNullable => item !== null); return { ...document, mdx, diff --git a/apps/www/next.config.js b/apps/www/next.config.js index 092f2f7b..319bc751 100644 --- a/apps/www/next.config.js +++ b/apps/www/next.config.js @@ -12,6 +12,7 @@ const withBundleAnalyzer = require("@next/bundle-analyzer")({ /** @type {import('next').NextConfig} */ const nextConfig = { + transpilePackages: ["@mintlify/components"], pageExtensions: ["tsx", "mdx", "ts", "js"], reactStrictMode: true, cacheComponents: true, diff --git a/apps/www/package.json b/apps/www/package.json index 95a0b808..c26bff09 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -13,6 +13,7 @@ "@c15t/nextjs": "^1.7.0", "@faker-js/faker": "^8.4.1", "@hookform/resolvers": "^3.3.4", + "@mintlify/components": "^1.0.14", "@next/bundle-analyzer": "16.0.0", "@planetscale/database": "^1.11.0", "@radix-ui/react-accordion": "^1.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7c94c62d..7e6572be 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -308,6 +308,9 @@ importers: '@hookform/resolvers': specifier: ^3.3.4 version: 3.10.0(react-hook-form@7.55.0(react@19.2.0)) + '@mintlify/components': + specifier: ^1.0.14 + version: 1.0.14(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@next/bundle-analyzer': specifier: 16.0.0 version: 16.0.0 @@ -688,9 +691,34 @@ packages: resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + '@bany/curl-to-json@1.2.8': resolution: {integrity: sha512-hPt9KUM2sGZ5Ojx3O9utjzUgjRZI3CZPAlLf+cRY9EUzVs7tWt1OpA0bhEUTX2PEEkOeyZ6sC0tAQMOHh9ld+Q==} + '@base-ui/react@1.1.0': + resolution: {integrity: sha512-ikcJRNj1mOiF2HZ5jQHrXoVoHcNHdBU5ejJljcBl+VTLoYXR6FidjTN86GjO6hyshi6TZFuNvv0dEOgaOFv6Lw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + + '@base-ui/utils@0.2.4': + resolution: {integrity: sha512-smZwpMhjO29v+jrZusBSc5T+IJ3vBb9cjIiBjtKcvWmRj9Z4DWGVR3efr1eHR56/bqY5a4qyY9ElkOY5ljo3ng==} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + '@biomejs/biome@1.9.4': resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} engines: {node: '>=14.21.3'} @@ -1419,15 +1447,36 @@ packages: '@floating-ui/core@1.6.9': resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + '@floating-ui/dom@1.6.13': resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + '@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-dom@2.1.8': + resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/react@0.26.28': + resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} @@ -1448,6 +1497,13 @@ packages: engines: {node: '>=6'} hasBin: true + '@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 + '@hono/node-server@1.19.11': resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} engines: {node: '>=18.14.1'} @@ -1465,6 +1521,9 @@ packages: '@iconify/utils@2.3.0': resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} + '@iconify/utils@3.1.0': + resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==} + '@img/colour@1.0.0': resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} engines: {node: '>=18'} @@ -1652,6 +1711,16 @@ packages: '@mermaid-js/parser@0.4.0': resolution: {integrity: sha512-wla8XOWvQAwuqy+gxiZqY+c7FokraOTHRWMsbB4AgRx9Sy7zKslNyejy7E+a77qHfey5GXw/ik3IXv/NHMJgaA==} + '@mermaid-js/parser@0.6.3': + resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==} + + '@mintlify/components@1.0.14': + resolution: {integrity: sha512-UC7TWWafE9yiidrTv9g8Zm37YbkblxIiBCgalkpC/JoBEWKu4m7xZy/Ir95tzM/M5Nm5j/6o9eykAwNBfQ2v/Q==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + '@modelcontextprotocol/sdk@1.9.0': resolution: {integrity: sha512-Jq2EUCQpe0iyO5FGpzVYDNFR6oR53AIrwph9yWl7uSc7IWUMsrmpmSaTGra5hQNunXpM+9oit85p924jWuHzUA==} engines: {node: '>=18'} @@ -2751,6 +2820,43 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@react-aria/focus@3.21.5': + resolution: {integrity: sha512-V18fwCyf8zqgJdpLQeDU5ZRNd9TeOfBbhLgmX77Zr5ae9XwaoJ1R3SFJG1wCJX60t34AW+aLZSEEK+saQElf3Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/interactions@3.27.1': + resolution: {integrity: sha512-M3wLpTTmDflI0QGNK0PJNUaBXXfeBXue8ZxLMngfc1piHNiH4G5lUvWd9W14XVbqrSCVY8i8DfGrNYpyyZu0tw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/ssr@3.9.10': + resolution: {integrity: sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==} + engines: {node: '>= 12'} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/utils@3.33.1': + resolution: {integrity: sha512-kIx1Sj6bbAT0pdqCegHuPanR9zrLn5zMRiM7LN12rgRf55S19ptd9g3ncahArifYTRkfEU9VIn+q0HjfMqS9/w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/flags@3.1.2': + resolution: {integrity: sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==} + + '@react-stately/utils@3.11.0': + resolution: {integrity: sha512-8LZpYowJ9eZmmYLpudbo/eclIRnbhWIJZ994ncmlKlouNzKohtM8qTC6B1w1pwUbiwGdUoyzLuQbeaIor5Dvcw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/shared@3.33.1': + resolution: {integrity: sha512-oJHtjvLG43VjwemQDadlR5g/8VepK56B/xKO2XORPHt9zlW6IZs3tZrYlvH29BMvoqC7RtE7E5UjgbnbFtDGag==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@reduxjs/toolkit@2.8.2': resolution: {integrity: sha512-MYlOhQ0sLdw4ud48FoC5w0dH9VfWQjtCjreKwYTT3l+r427qYC5Y8PihNutepr8XrNaBUDQo9khWUwQxZaqt5A==} peerDependencies: @@ -2823,24 +2929,36 @@ packages: '@shikijs/core@2.5.0': resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} + '@shikijs/core@3.21.0': + resolution: {integrity: sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA==} + '@shikijs/engine-javascript@1.29.2': resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} '@shikijs/engine-javascript@2.5.0': resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} + '@shikijs/engine-javascript@3.21.0': + resolution: {integrity: sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ==} + '@shikijs/engine-oniguruma@1.29.2': resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} '@shikijs/engine-oniguruma@2.5.0': resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} + '@shikijs/engine-oniguruma@3.21.0': + resolution: {integrity: sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==} + '@shikijs/langs@1.29.2': resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} '@shikijs/langs@2.5.0': resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} + '@shikijs/langs@3.21.0': + resolution: {integrity: sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==} + '@shikijs/rehype@1.29.2': resolution: {integrity: sha512-sxi53HZe5XDz0s2UqF+BVN/kgHPMS9l6dcacM4Ra3ZDzCJa5rDGJ+Ukpk4LxdD1+MITBM6hoLbPfGv9StV8a5Q==} @@ -2853,15 +2971,24 @@ packages: '@shikijs/themes@2.5.0': resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} + '@shikijs/themes@3.21.0': + resolution: {integrity: sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==} + '@shikijs/transformers@2.5.0': resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} + '@shikijs/transformers@3.21.0': + resolution: {integrity: sha512-CZwvCWWIiRRiFk9/JKzdEooakAP8mQDtBOQ1TKiCaS2E1bYtyBCOkUzS8akO34/7ufICQ29oeSfkb3tT5KtrhA==} + '@shikijs/types@1.29.2': resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} '@shikijs/types@2.5.0': resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} + '@shikijs/types@3.21.0': + resolution: {integrity: sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==} + '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -2870,6 +2997,14 @@ packages: engines: {node: '>= 8.0.0'} hasBin: true + '@sindresorhus/slugify@2.2.1': + resolution: {integrity: sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==} + engines: {node: '>=12'} + + '@sindresorhus/transliterate@1.6.0': + resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==} + engines: {node: '>=12'} + '@sqltools/formatter@1.2.5': resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} @@ -3007,9 +3142,18 @@ packages: 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 + '@tanstack/react-virtual@3.13.23': + resolution: {integrity: sha512-XnMRnHQ23piOVj2bzJqHrRrLg4r+F86fuBcwteKfbIjJrtGxb4z7tIvPVAe4B+4UVwo9G4Giuz5fmapcrnZ0OQ==} + 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 + '@tanstack/store@0.7.0': resolution: {integrity: sha512-CNIhdoUsmD2NolYuaIs8VfWM467RK6oIBAW4nPEKZhg1smZ+/CwtCdpURgp7nxSqOaV9oKkzdWD80+bC66F/Jg==} + '@tanstack/virtual-core@3.13.23': + resolution: {integrity: sha512-zSz2Z2HNyLjCplANTDyl3BcdQJc2k1+yyFoKhNRmCr7V7dY8o8q5m8uFTI1/Pg1kL+Hgrz6u3Xo6eFUB7l66cg==} + '@team-plain/typescript-sdk@2.19.0': resolution: {integrity: sha512-BloaZrzHLS2jfgdM9Q/wvpmkHw8ZoVCNaq3z5YsR8NOgbDuVNdzmAUzGqMDmdCRiZ5xbD8CUILHxap1AAJrY5A==} @@ -3309,6 +3453,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + ai@4.3.9: resolution: {integrity: sha512-P2RpV65sWIPdUlA4f1pcJ11pB0N1YmqPVLEmC4j8WuBwKY0L3q9vGhYPh0Iv+spKHKyn0wUbMfas+7Z6nTfS0g==} engines: {node: '>=18'} @@ -3552,10 +3701,17 @@ packages: 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'} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comlink@4.4.2: + resolution: {integrity: sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==} + comma-separated-tokens@1.0.8: resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} @@ -3827,6 +3983,9 @@ packages: dagre-d3-es@7.0.11: resolution: {integrity: sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==} + dagre-d3-es@7.0.13: + resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==} + data-uri-to-buffer@3.0.1: resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} engines: {node: '>= 6'} @@ -4636,6 +4795,10 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hast@1.0.0: + resolution: {integrity: sha512-vFUqlRV5C+xqP76Wwq2SrM0kipnmpxJm7OfvVXpB35Fp+Fn4MV+ozr+JZr5qFvyR1q/U+Foim2x+3P+x9S1PLA==} + deprecated: Renamed to rehype + hastscript@6.0.0: resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} @@ -4994,6 +5157,9 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.17.23: + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} @@ -5015,6 +5181,11 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 + lucide-react@0.453.0: + resolution: {integrity: sha512-kL+RGZCcJi9BvJtzg2kshO192Ddy9hv3ij+cPrVPWSRzgCWCVazoQJxOjAwgK53NomL07HB7GPHW120FimjNhQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + lucide-react@0.456.0: resolution: {integrity: sha512-DIIGJqTT5X05sbAsQ+OhA8OtJYyD4NsEMCA/HQW/Y6ToPQ7gwbtujIoeAaup4HpHzV35SQOarKAWH8LYglB6eA==} peerDependencies: @@ -5035,6 +5206,11 @@ packages: engines: {node: '>= 18'} hasBin: true + marked@16.4.2: + resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} + engines: {node: '>= 20'} + hasBin: true + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -5147,6 +5323,9 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + mermaid@11.12.2: + resolution: {integrity: sha512-n34QPDPEKmaeCG4WDMGy0OT6PSyxKCfy2pJgShP+Qow2KLrvWjclwbc3yXfSIf4BanqWEhQEpngWwNp/XhZt6w==} + mermaid@11.6.0: resolution: {integrity: sha512-PE8hGUy1LDlWIHWBP05SFdqUHGmRcCcK4IzpOKPE35eOw+G9zZgcnMpyunJVUEOgb//KBORPjysKndw8bFLuRg==} @@ -5404,6 +5583,9 @@ packages: mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + module-details-from-path@1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} @@ -5589,12 +5771,18 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + oniguruma-to-es@2.3.0: resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} oniguruma-to-es@3.1.1: resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} + oniguruma-to-es@4.3.5: + resolution: {integrity: sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==} + openai-zod-to-json-schema@1.0.3: resolution: {integrity: sha512-CFU+KtOmX1dk2nPCZcGYgbrI3YLJJgMSehx1mLbH1A2fsRmZevHzMau6vFIhtkCpHWkGQ3ossA4a0OzVHlGrkw==} engines: {node: '>=18'} @@ -5987,6 +6175,11 @@ packages: react: '>= 15.0.0' react-dom: '>= 15.0.0' + react-use-rect@2.0.6: + resolution: {integrity: sha512-as/VEIPY9SrS4E7T/rXQ59aqQ+XKvl/5E6fI5ODmrQv6WJup2CFNA9ja3BMq13ge1dhgBFOHicZC1ZKXLUQtTA==} + peerDependencies: + react: ^16.8.0 || ^17.0.2 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -6058,6 +6251,9 @@ packages: regex@6.0.1: resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} @@ -6235,6 +6431,9 @@ packages: shiki@2.5.0: resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} + shiki@3.21.0: + resolution: {integrity: sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w==} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -6409,6 +6608,9 @@ packages: peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + tagged-tag@1.0.0: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} @@ -6646,6 +6848,9 @@ packages: ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -6745,6 +6950,11 @@ packages: 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 + usehooks-ts@3.1.1: resolution: {integrity: sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==} engines: {node: '>=16.15.0'} @@ -7328,10 +7538,37 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@babel/runtime@7.29.2': {} + '@bany/curl-to-json@1.2.8': dependencies: minimist: 1.2.8 + '@base-ui/react@1.1.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@babel/runtime': 7.29.2 + '@base-ui/utils': 0.2.4(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@floating-ui/utils': 0.2.11 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + reselect: 5.1.1 + tabbable: 6.4.0 + use-sync-external-store: 1.6.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + + '@base-ui/utils@0.2.4(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@babel/runtime': 7.29.2 + '@floating-ui/utils': 0.2.11 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + reselect: 5.1.1 + use-sync-external-store: 1.6.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@biomejs/biome@1.9.4': optionalDependencies: '@biomejs/cli-darwin-arm64': 1.9.4 @@ -8019,11 +8256,20 @@ snapshots: dependencies: '@floating-ui/utils': 0.2.9 + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + '@floating-ui/dom@1.6.13': dependencies: '@floating-ui/core': 1.6.9 '@floating-ui/utils': 0.2.9 + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + '@floating-ui/react-dom@2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@floating-ui/dom': 1.6.13 @@ -8036,6 +8282,22 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) + '@floating-ui/react-dom@2.1.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@floating-ui/dom': 1.7.6 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@floating-ui/react@0.26.28(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@floating-ui/utils': 0.2.9 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + tabbable: 6.4.0 + + '@floating-ui/utils@0.2.11': {} + '@floating-ui/utils@0.2.9': {} '@formatjs/intl-localematcher@0.5.10': @@ -8058,6 +8320,15 @@ snapshots: protobufjs: 7.5.4 yargs: 17.7.2 + '@headlessui/react@2.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@floating-ui/react': 0.26.28(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@react-aria/focus': 3.21.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@react-aria/interactions': 3.27.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-virtual': 3.13.23(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + '@hono/node-server@1.19.11(hono@4.12.9)': dependencies: hono: 4.12.9 @@ -8085,6 +8356,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@iconify/utils@3.1.0': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/types': 2.0.0 + mlly: 1.8.2 + '@img/colour@1.0.0': optional: true @@ -8275,6 +8552,31 @@ snapshots: dependencies: langium: 3.3.1 + '@mermaid-js/parser@0.6.3': + dependencies: + langium: 3.3.1 + + '@mintlify/components@1.0.14(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@base-ui/react': 1.1.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@headlessui/react': 2.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@shikijs/transformers': 3.21.0 + '@sindresorhus/slugify': 2.2.1 + clsx: 2.1.1 + color: 4.2.3 + comlink: 4.4.2 + hast: 1.0.0 + lodash: 4.17.23 + lucide-react: 0.453.0(react@19.2.0) + mermaid: 11.12.2 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-use-rect: 2.0.6(react@19.2.0) + shiki: 3.21.0 + tailwind-merge: 2.6.0 + transitivePeerDependencies: + - '@types/react' + '@modelcontextprotocol/sdk@1.9.0': dependencies: content-type: 1.0.5 @@ -9881,6 +10183,55 @@ snapshots: '@radix-ui/rect@1.1.1': {} + '@react-aria/focus@3.21.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@react-aria/interactions': 3.27.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@react-aria/utils': 3.33.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@react-types/shared': 3.33.1(react@19.2.0) + '@swc/helpers': 0.5.15 + clsx: 2.1.1 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@react-aria/interactions@3.27.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@react-aria/ssr': 3.9.10(react@19.2.0) + '@react-aria/utils': 3.33.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@react-stately/flags': 3.1.2 + '@react-types/shared': 3.33.1(react@19.2.0) + '@swc/helpers': 0.5.15 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@react-aria/ssr@3.9.10(react@19.2.0)': + dependencies: + '@swc/helpers': 0.5.15 + react: 19.2.0 + + '@react-aria/utils@3.33.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@react-aria/ssr': 3.9.10(react@19.2.0) + '@react-stately/flags': 3.1.2 + '@react-stately/utils': 3.11.0(react@19.2.0) + '@react-types/shared': 3.33.1(react@19.2.0) + '@swc/helpers': 0.5.15 + clsx: 2.1.1 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@react-stately/flags@3.1.2': + dependencies: + '@swc/helpers': 0.5.15 + + '@react-stately/utils@3.11.0(react@19.2.0)': + dependencies: + '@swc/helpers': 0.5.15 + react: 19.2.0 + + '@react-types/shared@3.33.1(react@19.2.0)': + dependencies: + react: 19.2.0 + '@reduxjs/toolkit@2.8.2(react-redux@9.2.0(@types/react@19.1.8)(react@19.1.0)(redux@5.0.1))(react@19.1.0)': dependencies: '@standard-schema/spec': 1.0.0 @@ -9977,6 +10328,13 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 + '@shikijs/core@3.21.0': + dependencies: + '@shikijs/types': 3.21.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + '@shikijs/engine-javascript@1.29.2': dependencies: '@shikijs/types': 1.29.2 @@ -9989,6 +10347,12 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 3.1.1 + '@shikijs/engine-javascript@3.21.0': + dependencies: + '@shikijs/types': 3.21.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.5 + '@shikijs/engine-oniguruma@1.29.2': dependencies: '@shikijs/types': 1.29.2 @@ -9999,6 +10363,11 @@ snapshots: '@shikijs/types': 2.5.0 '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/engine-oniguruma@3.21.0': + dependencies: + '@shikijs/types': 3.21.0 + '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/langs@1.29.2': dependencies: '@shikijs/types': 1.29.2 @@ -10007,6 +10376,10 @@ snapshots: dependencies: '@shikijs/types': 2.5.0 + '@shikijs/langs@3.21.0': + dependencies: + '@shikijs/types': 3.21.0 + '@shikijs/rehype@1.29.2': dependencies: '@shikijs/types': 1.29.2 @@ -10033,11 +10406,20 @@ snapshots: dependencies: '@shikijs/types': 2.5.0 + '@shikijs/themes@3.21.0': + dependencies: + '@shikijs/types': 3.21.0 + '@shikijs/transformers@2.5.0': dependencies: '@shikijs/core': 2.5.0 '@shikijs/types': 2.5.0 + '@shikijs/transformers@3.21.0': + dependencies: + '@shikijs/core': 3.21.0 + '@shikijs/types': 3.21.0 + '@shikijs/types@1.29.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 @@ -10048,6 +10430,11 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + '@shikijs/types@3.21.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': @@ -10055,6 +10442,15 @@ snapshots: fflate: 0.7.4 string.prototype.codepointat: 0.2.1 + '@sindresorhus/slugify@2.2.1': + dependencies: + '@sindresorhus/transliterate': 1.6.0 + escape-string-regexp: 5.0.0 + + '@sindresorhus/transliterate@1.6.0': + dependencies: + escape-string-regexp: 5.0.0 + '@sqltools/formatter@1.2.5': {} '@standard-schema/spec@1.0.0': {} @@ -10178,8 +10574,16 @@ snapshots: react-dom: 19.2.0(react@19.2.0) use-sync-external-store: 1.5.0(react@19.2.0) + '@tanstack/react-virtual@3.13.23(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@tanstack/virtual-core': 3.13.23 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + '@tanstack/store@0.7.0': {} + '@tanstack/virtual-core@3.13.23': {} + '@team-plain/typescript-sdk@2.19.0': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) @@ -10494,6 +10898,8 @@ snapshots: acorn@8.15.0: {} + acorn@8.16.0: {} + ai@4.3.9(react@19.2.0)(zod@3.24.2): dependencies: '@ai-sdk/provider': 1.1.3 @@ -10833,10 +11239,17 @@ snapshots: color-name: 1.1.4 simple-swizzle: 0.2.2 + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 + comlink@4.4.2: {} + comma-separated-tokens@1.0.8: {} comma-separated-tokens@2.0.3: {} @@ -11116,6 +11529,11 @@ snapshots: d3: 7.9.0 lodash-es: 4.17.21 + dagre-d3-es@7.0.13: + dependencies: + d3: 7.9.0 + lodash-es: 4.17.21 + data-uri-to-buffer@3.0.1: {} date-fns@3.6.0: {} @@ -11928,6 +12346,8 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hast@1.0.0: {} + hastscript@6.0.0: dependencies: '@types/hast': 2.3.10 @@ -12226,6 +12646,8 @@ snapshots: lodash@4.17.21: {} + lodash@4.17.23: {} + long@5.3.2: {} longest-streak@3.1.0: {} @@ -12253,6 +12675,10 @@ snapshots: dependencies: react: 19.2.0 + lucide-react@0.453.0(react@19.2.0): + dependencies: + react: 19.2.0 + lucide-react@0.456.0(react@19.2.0): dependencies: react: 19.2.0 @@ -12267,6 +12693,8 @@ snapshots: marked@15.0.11: {} + marked@16.4.2: {} + math-intrinsics@1.1.0: {} mdast-util-definitions@5.1.2: @@ -12570,6 +12998,29 @@ snapshots: merge2@1.4.1: {} + mermaid@11.12.2: + dependencies: + '@braintree/sanitize-url': 7.1.1 + '@iconify/utils': 3.1.0 + '@mermaid-js/parser': 0.6.3 + '@types/d3': 7.4.3 + cytoscape: 3.32.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.32.0) + cytoscape-fcose: 2.2.0(cytoscape@3.32.0) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.13 + dayjs: 1.11.19 + dompurify: 3.2.5 + katex: 0.16.22 + khroma: 2.1.0 + lodash-es: 4.17.21 + marked: 16.4.2 + roughjs: 4.6.6 + stylis: 4.3.6 + ts-dedent: 2.2.0 + uuid: 11.1.0 + mermaid@11.6.0: dependencies: '@braintree/sanitize-url': 7.1.1 @@ -13109,6 +13560,13 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 + mlly@1.8.2: + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 + module-details-from-path@1.0.3: {} module-details-from-path@1.0.4: {} @@ -13276,6 +13734,8 @@ snapshots: dependencies: wrappy: 1.0.2 + oniguruma-parser@0.12.1: {} + oniguruma-to-es@2.3.0: dependencies: emoji-regex-xs: 1.0.0 @@ -13288,6 +13748,12 @@ snapshots: regex: 6.0.1 regex-recursion: 6.0.2 + oniguruma-to-es@4.3.5: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.1.0 + regex-recursion: 6.0.2 + openai-zod-to-json-schema@1.0.3(zod@3.24.2): dependencies: zod: 3.24.2 @@ -13405,7 +13871,7 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.7.4 + mlly: 1.8.2 pathe: 2.0.3 pkg-types@2.1.0: @@ -13738,6 +14204,10 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + react-use-rect@2.0.6(react@19.2.0): + dependencies: + react: 19.2.0 + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -13839,6 +14309,10 @@ snapshots: dependencies: regex-utilities: 2.3.0 + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + rehype-raw@7.0.0: dependencies: '@types/hast': 3.0.4 @@ -14160,6 +14634,17 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + shiki@3.21.0: + dependencies: + '@shikijs/core': 3.21.0 + '@shikijs/engine-javascript': 3.21.0 + '@shikijs/engine-oniguruma': 3.21.0 + '@shikijs/langs': 3.21.0 + '@shikijs/themes': 3.21.0 + '@shikijs/types': 3.21.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -14332,6 +14817,8 @@ snapshots: react: 19.2.0 use-sync-external-store: 1.5.0(react@19.2.0) + tabbable@6.4.0: {} + tagged-tag@1.0.0: {} tailwind-merge@2.6.0: {} @@ -14534,6 +15021,8 @@ snapshots: ufo@1.6.1: {} + ufo@1.6.3: {} + uncrypto@0.1.3: {} undici-types@6.19.8: {} @@ -14682,6 +15171,10 @@ snapshots: dependencies: react: 19.2.0 + use-sync-external-store@1.6.0(react@19.2.0): + dependencies: + react: 19.2.0 + usehooks-ts@3.1.1(react@19.1.0): dependencies: lodash.debounce: 4.0.8