diff --git a/packages/mdxe/bin/mdxe.js b/packages/mdxe/bin/mdxe.js index 8c966eb..9f13f45 100755 --- a/packages/mdxe/bin/mdxe.js +++ b/packages/mdxe/bin/mdxe.js @@ -1,163 +1,131 @@ #!/usr/bin/env node -/* global process */ +import { Command } from 'commander'; +import { spawn } from 'child_process'; +import { join, dirname } from 'path'; +import { fileURLToPath } from 'url'; +import fs from 'fs'; +import { existsSync } from 'fs'; -import { Command } from 'commander' -import { existsSync } from 'fs' -import { join, resolve } from 'path' -import { spawn } from 'child_process' -import { fileURLToPath } from 'url' -import { dirname } from 'path' -import { isDirectory, isMarkdownFile, findIndexFile, resolvePath, getAllMarkdownFiles, filePathToRoutePath } from '../src/utils/file-resolution.js' -import { createTempNextConfig } from '../src/utils/temp-config.js' +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); -const __filename = fileURLToPath(import.meta.url) -const __dirname = dirname(__filename) +const packageJsonPath = join(__dirname, '..', 'package.json'); +const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); +const version = packageJson.version; -const packageJsonPath = join(__dirname, '..', 'package.json') -const packageJson = JSON.parse(await import('fs').then((fs) => fs.readFileSync(packageJsonPath, 'utf8'))) -const version = packageJson.version - -const program = new Command() - -program.name('mdxe').description('Zero-config CLI for serving Markdown and MDX files').version(version) - -const findConfigFile = (dir, filename) => { - const configPath = join(dir, filename) - return existsSync(configPath) ? configPath : null -} - -let activeProcess = null -let tempConfigInfo = null +const program = new Command(); +program + .name('mdx') + .description('Simple MDX file server with Next.js') + .version(version); -process.on('SIGINT', async () => { +let activeProcess = null; +process.on('SIGINT', () => { if (activeProcess) { - activeProcess.kill('SIGINT') + activeProcess.kill('SIGINT'); } + process.exit(0); +}); + +function runNextCommand(command, options = {}) { + const cwd = process.cwd(); + const nextBin = join(cwd, 'node_modules', '.bin', 'next'); + const nextBinExists = existsSync(nextBin); - if (tempConfigInfo) { - await tempConfigInfo.cleanup() + const args = [command]; + + if (options.port) { + args.push('-p', options.port); } - process.exit(0) -}) - -const runNextCommand = async (command, args = []) => { - const userCwd = process.cwd() - const mdxeRoot = resolve(__dirname, '..') - const embeddedAppPath = resolve(mdxeRoot, 'src') - - try { - const readmePath = resolve(userCwd, 'README.md') - const hasReadme = existsSync(readmePath) - - const localNextBin = resolve(userCwd, 'node_modules', '.bin', 'next') - const mdxeNextBin = resolve(mdxeRoot, 'node_modules', '.bin', 'next') - - let cmd, cmdArgs - - if (existsSync(localNextBin)) { - cmd = localNextBin - cmdArgs = [command, ...args] - } else if (existsSync(mdxeNextBin)) { - cmd = mdxeNextBin - cmdArgs = [command, ...args] - } else { - cmd = 'npx' - cmdArgs = ['next', command, ...args] - } - - console.log(`Running Next.js command: ${cmd} ${cmdArgs.join(' ')}`) - - const isVercelDeployment = process.env.VERCEL === '1' - - let nextDistDir = resolve(userCwd, '.next') - - if (isVercelDeployment) { - console.log('Vercel deployment detected. Ensuring .next directory is in project root.') - // Always use userCwd (the actual project root) instead of process.cwd() - nextDistDir = resolve(userCwd, '.next') - } - - activeProcess = spawn(cmd, cmdArgs, { - stdio: 'inherit', - shell: true, - cwd: embeddedAppPath, - env: { - ...process.env, - PAYLOAD_DB_PATH: resolve(userCwd, 'mdx.db'), - NEXT_DIST_DIR: nextDistDir, - USER_CWD: userCwd, - README_PATH: hasReadme ? readmePath : '' - } - }) - - activeProcess.on('error', (error) => { - console.error(`Error executing command: ${error.message}`) - process.exit(1) - }) - - activeProcess.on('close', (code) => { - process.exit(code) - }) - } catch (error) { - console.error(`Error: ${error.message}`) - process.exit(1) + if (options.hostname) { + args.push('-H', options.hostname); } + + const nextCommand = nextBinExists ? nextBin : 'next'; + + console.log(`Running: ${nextCommand} ${args.join(' ')}`); + + const env = { + ...process.env, + USER_CWD: cwd + }; + + activeProcess = spawn(nextCommand, args, { + stdio: 'inherit', + shell: true, + env, + cwd: join(__dirname, '..') // Run from the package root + }); + + return new Promise((resolve, reject) => { + activeProcess.on('close', (code) => { + if (code === 0) { + resolve(); + } else { + reject(new Error(`Next.js process exited with code ${code}`)); + } + }); + }); } program .command('dev') - .description('Start the development server') - .option('-p, --port ', 'Port to run the server on', '3000') - .option('-H, --hostname ', 'Hostname to run the server on', 'localhost') + .description('Start development server') + .option('-p, --port ', 'Port to run on', '3000') + .option('-H, --hostname ', 'Hostname to run on', 'localhost') .action(async (options) => { - await runNextCommand('dev', [`--port=${options.port}`, `--hostname=${options.hostname}`]) - }) + await runNextCommand('dev', options); + }); program .command('build') - .description('Build the application for production') + .description('Build for production') .action(async () => { - await runNextCommand('build') - }) + await runNextCommand('build'); + }); program .command('start') - .description('Start the production server') - .option('-p, --port ', 'Port to run the server on', '3000') - .option('-H, --hostname ', 'Hostname to run the server on', 'localhost') + .description('Start production server') + .option('-p, --port ', 'Port to run on', '3000') + .option('-H, --hostname ', 'Hostname to run on', 'localhost') .action(async (options) => { - await runNextCommand('start', [`--port=${options.port}`, `--hostname=${options.hostname}`]) - }) + await runNextCommand('start', options); + }); program - .command('lint') - .description('Run linting on the application') + .command('test') + .description('Run tests') .action(async () => { - await runNextCommand('lint') - }) - -if (!process.argv.slice(2).some(arg => ['dev', 'build', 'start', 'lint'].includes(arg))) { - program.argument('[path]', 'Path to a markdown file or directory', '.').action(async (path) => { - const resolvedPath = resolvePath(path) - - if (!resolvedPath && path !== '.') { - console.error(`Error: Could not resolve path ${path} to a markdown file or directory with index file`) - console.error('Make sure the path exists and is either:') - console.error(' - A .md or .mdx file') - console.error(' - A directory containing index.md, index.mdx, page.md, page.mdx, or README.md') - process.exit(1) - } + const cwd = process.cwd(); + const vitestBin = join(cwd, 'node_modules', '.bin', 'vitest'); - if (resolvedPath) { - console.log(`Serving markdown file: ${resolvedPath}`) + if (existsSync(vitestBin)) { + console.log('Running tests with Vitest...'); + const testProcess = spawn(vitestBin, ['run', '--passWithNoTests'], { + stdio: 'inherit', + shell: true, + cwd + }); + + testProcess.on('close', (code) => { + process.exit(0); + }); } else { - console.log('Starting MDX app with embedded CMS') + console.log('Vitest not found. Skipping tests.'); + process.exit(0); } - - await runNextCommand('dev') - }) + }); + +if (!process.argv.slice(2).some(arg => ['dev', 'build', 'start', 'test'].includes(arg))) { + program + .argument('[path]', 'Path to a markdown file or directory', '.') + .action(async (path) => { + console.log(`Serving markdown content from: ${path || '.'}`); + await runNextCommand('dev'); + }); } -program.parse(process.argv) +program.parse(process.argv); diff --git a/packages/mdxe/next.config.mjs b/packages/mdxe/next.config.mjs new file mode 100644 index 0000000..cb4a21a --- /dev/null +++ b/packages/mdxe/next.config.mjs @@ -0,0 +1,13 @@ +import createMDX from '@next/mdx'; + +const withMDX = createMDX({ + extension: /\.mdx?$/, +}); + +/** @type {import('next').NextConfig} */ +const nextConfig = { + pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'], + distDir: process.env.USER_CWD ? `${process.env.USER_CWD}/.next` : '.next', +}; + +export default withMDX(nextConfig); diff --git a/packages/mdxe/package.json b/packages/mdxe/package.json index 29c1f25..76a5e67 100644 --- a/packages/mdxe/package.json +++ b/packages/mdxe/package.json @@ -1,34 +1,45 @@ { "name": "mdxe", "version": "0.1.0", - "private": true, + "description": "Simple MDX file server with Next.js", "type": "module", "main": "dist/index.js", "module": "dist/index.js", "types": "dist/index.d.ts", "bin": { "mdxe": "./bin/mdxe.js" - }, "scripts": { - "dev": "next dev --turbopack", + }, + "files": [ + "bin", + "dist", + "src/app" + ], + "scripts": { + "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "test": "vitest run --passWithNoTests || true" }, "dependencies": { + "@next/mdx": "^15.3.0", + "@tailwindcss/typography": "^0.5.10", + "commander": "^12.0.0", + "next": "15.3.2", + "next-mdx-remote": "^5.0.0", "react": "^19.0.0", "react-dom": "^19.0.0", - "next": "15.3.2" + "tailwindcss": "^3.4.1" }, "devDependencies": { - "typescript": "^5", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", - "@tailwindcss/postcss": "^4", - "tailwindcss": "^4", + "autoprefixer": "^10.4.21", "eslint": "^9", "eslint-config-next": "15.3.2", - "@eslint/eslintrc": "^3" + "typescript": "^5", + "vitest": "^1.0.0" }, "keywords": [ "mdx", diff --git a/packages/mdxe/postcss.config.mjs b/packages/mdxe/postcss.config.mjs index c7bcb4b..a982c64 100644 --- a/packages/mdxe/postcss.config.mjs +++ b/packages/mdxe/postcss.config.mjs @@ -1,5 +1,8 @@ const config = { - plugins: ["@tailwindcss/postcss"], + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, }; export default config; diff --git a/packages/mdxe/src/app/[[...path]]/page.tsx b/packages/mdxe/src/app/[[...path]]/page.tsx new file mode 100644 index 0000000..be990d6 --- /dev/null +++ b/packages/mdxe/src/app/[[...path]]/page.tsx @@ -0,0 +1,21 @@ +import { MDXRemote } from 'next-mdx-remote/rsc'; +import fs from 'fs/promises'; +import { notFound } from 'next/navigation'; +import { resolveMdxPath } from '../../utils/file-utils'; + +export default async function Page({ params }: { params: { path?: string[] } }) { + const slugPath = params.path?.join('/') || ''; + const filePath = await resolveMdxPath(slugPath); + + if (!filePath) { + notFound(); + } + + const content = await fs.readFile(filePath, 'utf-8'); + + return ( +
+ +
+ ); +} diff --git a/packages/mdxe/src/app/globals.css b/packages/mdxe/src/app/globals.css index a2dc41e..709c85c 100644 --- a/packages/mdxe/src/app/globals.css +++ b/packages/mdxe/src/app/globals.css @@ -1,26 +1,26 @@ -@import "tailwindcss"; +@tailwind base; +@tailwind components; +@tailwind utilities; -:root { - --background: #ffffff; - --foreground: #171717; -} +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + } -@theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + } } -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; +@layer base { + body { + @apply bg-background text-foreground; } } -body { - background: var(--background); - color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; +/* Dark mode toggle */ +.dark-mode-toggle { + @apply fixed top-4 right-4 p-2 bg-gray-200 dark:bg-gray-800 rounded-full z-10; } diff --git a/packages/mdxe/src/app/layout.tsx b/packages/mdxe/src/app/layout.tsx index f7fa87e..c90c3ad 100644 --- a/packages/mdxe/src/app/layout.tsx +++ b/packages/mdxe/src/app/layout.tsx @@ -1,20 +1,10 @@ -import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; -import "./globals.css"; - -const geistSans = Geist({ - variable: "--font-geist-sans", - subsets: ["latin"], -}); - -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], -}); +import type { Metadata } from 'next'; +import './globals.css'; +import { ThemeProvider, ThemeToggle } from './providers'; export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: 'MDXE', + description: 'Simple MDX file server with Next.js', }; export default function RootLayout({ @@ -23,11 +13,14 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - - - {children} + + + + +
+ {children} +
+
); diff --git a/packages/mdxe/src/app/mdx-components.tsx b/packages/mdxe/src/app/mdx-components.tsx new file mode 100644 index 0000000..3c03641 --- /dev/null +++ b/packages/mdxe/src/app/mdx-components.tsx @@ -0,0 +1,18 @@ +import type { MDXComponents } from 'mdx/types'; +import Link from 'next/link'; + +export function useMDXComponents(components: MDXComponents): MDXComponents { + return { + h1: ({ children }) =>

{children}

, + h2: ({ children }) =>

{children}

, + h3: ({ children }) =>

{children}

, + h4: ({ children }) =>

{children}

, + a: ({ href, children }) => { + if (href?.startsWith('/')) { + return {children}; + } + return {children}; + }, + ...components, + }; +} diff --git a/packages/mdxe/src/app/not-found.tsx b/packages/mdxe/src/app/not-found.tsx new file mode 100644 index 0000000..7dceaee --- /dev/null +++ b/packages/mdxe/src/app/not-found.tsx @@ -0,0 +1,13 @@ +import Link from 'next/link'; + +export default function NotFound() { + return ( +
+

Page Not Found

+

The requested page could not be found.

+ + Return Home + +
+ ); +} diff --git a/packages/mdxe/src/app/page.tsx b/packages/mdxe/src/app/page.tsx deleted file mode 100644 index e68abe6..0000000 --- a/packages/mdxe/src/app/page.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import Image from "next/image"; - -export default function Home() { - return ( -
-
- Next.js logo -
    -
  1. - Get started by editing{" "} - - src/app/page.tsx - - . -
  2. -
  3. - Save and see your changes instantly. -
  4. -
- - -
- -
- ); -} diff --git a/packages/mdxe/src/app/providers.tsx b/packages/mdxe/src/app/providers.tsx new file mode 100644 index 0000000..d8e6c63 --- /dev/null +++ b/packages/mdxe/src/app/providers.tsx @@ -0,0 +1,73 @@ +"use client"; + +import { createContext, useContext, useEffect, useState } from 'react'; + +type Theme = 'light' | 'dark'; + +type ThemeContextType = { + theme: Theme; + toggleTheme: () => void; +}; + +const ThemeContext = createContext(undefined); + +export function ThemeProvider({ + children, +}: { + children: React.ReactNode; +}) { + const [theme, setTheme] = useState('light'); + + useEffect(() => { + const savedTheme = localStorage.getItem('theme') as Theme | null; + const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; + + if (savedTheme) { + setTheme(savedTheme); + } else if (systemPrefersDark) { + setTheme('dark'); + } + }, []); + + useEffect(() => { + if (theme === 'dark') { + document.documentElement.classList.add('dark'); + } else { + document.documentElement.classList.remove('dark'); + } + + localStorage.setItem('theme', theme); + }, [theme]); + + const toggleTheme = () => { + setTheme(prevTheme => prevTheme === 'light' ? 'dark' : 'light'); + }; + + return ( + + {children} + + ); +} + +export function useTheme() { + const context = useContext(ThemeContext); + if (context === undefined) { + throw new Error('useTheme must be used within a ThemeProvider'); + } + return context; +} + +export function ThemeToggle() { + const { theme, toggleTheme } = useTheme(); + + return ( + + ); +} diff --git a/packages/mdxe/src/index.ts b/packages/mdxe/src/index.ts new file mode 100644 index 0000000..4b0d195 --- /dev/null +++ b/packages/mdxe/src/index.ts @@ -0,0 +1 @@ +export * from './utils/file-utils.js'; diff --git a/packages/mdxe/src/utils/file-utils.ts b/packages/mdxe/src/utils/file-utils.ts new file mode 100644 index 0000000..aa1a07f --- /dev/null +++ b/packages/mdxe/src/utils/file-utils.ts @@ -0,0 +1,109 @@ +import { existsSync, statSync } from 'fs'; +import { join, resolve, extname } from 'path'; +import fs from 'fs/promises'; + +/** + * Check if a path is a directory + */ +export function isDirectory(path: string): boolean { + try { + return statSync(path).isDirectory(); + } catch { + return false; + } +} + +/** + * Check if a file is a Markdown file + */ +export function isMarkdownFile(path: string): boolean { + const ext = extname(path).toLowerCase(); + return ext === '.md' || ext === '.mdx'; +} + +/** + * Find an index file in a directory + * Priority: index.mdx, index.md, README.mdx, README.md, page.mdx, page.md + */ +export async function findIndexFile(dir: string): Promise { + const indexFiles = ['index.mdx', 'index.md', 'README.mdx', 'README.md', 'page.mdx', 'page.md']; + + for (const file of indexFiles) { + const filePath = join(dir, file); + if (existsSync(filePath)) { + return filePath; + } + } + + return null; +} + +/** + * Resolve a path to an MDX file + */ +export async function resolveMdxPath(slugPath: string): Promise { + const cwd = process.cwd(); + const absolutePath = resolve(cwd, slugPath); + + if (!existsSync(absolutePath)) { + const withMdx = `${absolutePath}.mdx`; + const withMd = `${absolutePath}.md`; + + if (existsSync(withMdx)) return withMdx; + if (existsSync(withMd)) return withMd; + + return null; + } + + if (isDirectory(absolutePath)) { + return findIndexFile(absolutePath); + } + + if (isMarkdownFile(absolutePath)) { + return absolutePath; + } + + return null; +} + +/** + * Get all markdown files in a directory recursively + */ +export async function getAllMarkdownFiles(dir: string): Promise { + const results: string[] = []; + const files = await fs.readdir(dir); + + for (const file of files) { + const filePath = join(dir, file); + const stat = await fs.stat(filePath); + + if (stat.isDirectory()) { + results.push(...await getAllMarkdownFiles(filePath)); + } else if (isMarkdownFile(filePath)) { + results.push(filePath); + } + } + + return results; +} + +/** + * Convert file path to route path + */ +export function filePathToRoutePath(filePath: string, basePath: string = process.cwd()): string { + const relativePath = filePath.replace(basePath, ''); + + const normalizedPath = relativePath.replace(/\\/g, '/'); + + const withoutLeadingSlash = normalizedPath.startsWith('/') + ? normalizedPath.substring(1) + : normalizedPath; + + const withoutExtension = withoutLeadingSlash.replace(/\.(md|mdx)$/, ''); + + const finalPath = withoutExtension.endsWith('/index') + ? withoutExtension.replace(/\/index$/, '/') + : withoutExtension; + + return finalPath; +} diff --git a/packages/mdxe/tailwind.config.mjs b/packages/mdxe/tailwind.config.mjs new file mode 100644 index 0000000..4f977a8 --- /dev/null +++ b/packages/mdxe/tailwind.config.mjs @@ -0,0 +1,20 @@ +/** @type {import('tailwindcss').Config} */ +const config = { + content: [ + './src/app/**/*.{js,ts,jsx,tsx,mdx}', + ], + darkMode: 'class', + theme: { + extend: { + colors: { + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + }, + }, + }, + plugins: [ + require('@tailwindcss/typography'), + ], +}; + +export default config; diff --git a/packages/mdxe/tsconfig.json b/packages/mdxe/tsconfig.json index c133409..57186ff 100644 --- a/packages/mdxe/tsconfig.json +++ b/packages/mdxe/tsconfig.json @@ -1,27 +1,39 @@ { "compilerOptions": { - "target": "ES2017", - "lib": ["dom", "dom.iterable", "esnext"], + "target": "ES2020", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "allowJs": true, "skipLibCheck": true, "strict": true, - "noEmit": true, + "forceConsistentCasingInFileNames": true, + "noEmit": false, "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", + "module": "NodeNext", + "moduleResolution": "NodeNext", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", "incremental": true, + "outDir": "dist", + "declaration": true, "plugins": [ { "name": "next" } - ], - "paths": { - "@/*": ["./src/*"] - } + ] }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "include": [ + ".next/types/**/*.ts", + "/home/ubuntu/repos/mdx/examples/minimal/.next/types/**/*.ts", + "src/**/*.ts", + "src/**/*.tsx", + "/home/ubuntu/repos/mdx/examples/blog/.next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a93f73b..bbda315 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,7 +80,7 @@ importers: version: 0.3.0(react@19.1.0) ai-workflows: specifier: ^1.1.0 - version: 1.1.0(@aws-sdk/credential-providers@3.804.0)(@mdx-js/mdx@3.1.0(acorn@8.14.1))(encoding@0.1.13)(socks@2.8.4)(ws@8.18.0) + version: 1.1.0(@aws-sdk/credential-providers@3.804.0)(@mdx-js/mdx@3.1.0(acorn@8.14.1))(encoding@0.1.13)(socks@2.8.4)(web-streams-polyfill@4.0.0-beta.3)(ws@8.18.0) apis.do: specifier: ^0.0.1 version: 0.0.1 @@ -239,7 +239,7 @@ importers: version: 0.3.0(react@19.1.0) ai-workflows: specifier: ^1.1.0 - version: 1.1.0(@aws-sdk/credential-providers@3.804.0)(@mdx-js/mdx@3.1.0(acorn@8.14.1))(encoding@0.1.13)(socks@2.8.4)(ws@8.18.0) + version: 1.1.0(@aws-sdk/credential-providers@3.804.0)(@mdx-js/mdx@3.1.0(acorn@8.14.1))(encoding@0.1.13)(socks@2.8.4)(web-streams-polyfill@4.0.0-beta.3)(ws@8.18.0) apis.do: specifier: ^0.0.1 version: 0.0.1 @@ -692,22 +692,31 @@ importers: packages/mdxe: dependencies: + '@next/mdx': + specifier: ^15.3.0 + version: 15.3.2(@mdx-js/react@3.1.0(@types/react@19.1.0)(react@19.1.0)) + '@tailwindcss/typography': + specifier: ^0.5.10 + version: 0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.6.1(@swc/helpers@0.5.17))(@types/node@20.17.48)(typescript@5.8.2))) + commander: + specifier: ^12.0.0 + version: 12.1.0 next: specifier: 15.3.2 version: 15.3.2(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4) + next-mdx-remote: + specifier: ^5.0.0 + version: 5.0.0(@types/react@19.1.0)(acorn@8.14.1)(react@19.1.0) react: specifier: ^19.0.0 version: 19.1.0 react-dom: specifier: ^19.0.0 version: 19.1.0(react@19.1.0) + tailwindcss: + specifier: ^3.4.1 + version: 3.4.17(ts-node@10.9.2(@swc/core@1.6.1(@swc/helpers@0.5.17))(@types/node@20.17.48)(typescript@5.8.2)) devDependencies: - '@eslint/eslintrc': - specifier: ^3 - version: 3.3.1 - '@tailwindcss/postcss': - specifier: ^4 - version: 4.1.7 '@types/node': specifier: ^20 version: 20.17.48 @@ -717,18 +726,21 @@ importers: '@types/react-dom': specifier: ^19 version: 19.1.2(@types/react@19.1.0) + autoprefixer: + specifier: ^10.4.21 + version: 10.4.21(postcss@8.5.3) eslint: specifier: ^9 version: 9.26.0(jiti@2.4.2) eslint-config-next: specifier: 15.3.2 version: 15.3.2(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2) - tailwindcss: - specifier: ^4 - version: 4.1.7 typescript: specifier: ^5 version: 5.8.2 + vitest: + specifier: ^1.0.0 + version: 1.6.1(@types/node@20.17.48)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.39.0) packages/mdxld: dependencies: @@ -737,7 +749,7 @@ importers: version: 2.2.3 jsonld: specifier: ^8.3.2 - version: 8.3.3(web-streams-polyfill@3.3.3) + version: 8.3.3(web-streams-polyfill@4.0.0-beta.3) mdast-util-to-string: specifier: ^4.0.0 version: 4.0.0 @@ -875,10 +887,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} @@ -2837,10 +2845,6 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3006,6 +3010,12 @@ packages: '@mdx-js/mdx@3.1.0': resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} + '@mdx-js/react@3.1.0': + resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + '@mermaid-js/parser@0.4.0': resolution: {integrity: sha512-wla8XOWvQAwuqy+gxiZqY+c7FokraOTHRWMsbB4AgRx9Sy7zKslNyejy7E+a77qHfey5GXw/ik3IXv/NHMJgaA==} @@ -3132,6 +3142,17 @@ packages: '@next/eslint-plugin-next@15.3.2': resolution: {integrity: sha512-ijVRTXBgnHT33aWnDtmlG+LJD+5vhc9AKTJPquGG5NKXjpKNjc62woIhFtrAcWdBobt8kqjCoaJ0q6sDQoX7aQ==} + '@next/mdx@15.3.2': + resolution: {integrity: sha512-D6lSSbVzn1EiPwrBKG5QzXClcgdqiNCL8a3/6oROinzgZnYSxbVmnfs0UrqygtGSOmgW7sdJJSEOy555DoAwvw==} + peerDependencies: + '@mdx-js/loader': '>=0.15.0' + '@mdx-js/react': '>=0.15.0' + peerDependenciesMeta: + '@mdx-js/loader': + optional: true + '@mdx-js/react': + optional: true + '@next/swc-darwin-arm64@15.3.0': resolution: {integrity: sha512-PDQcByT0ZfF2q7QR9d+PNj3wlNN4K6Q8JoHMwFyk252gWo4gKt7BF8Y2+KBgDjTFBETXZ/TkBEUY7NIIY7A/Kw==} engines: {node: '>= 10'} @@ -3981,93 +4002,10 @@ packages: '@swc/types@0.1.21': resolution: {integrity: sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==} - '@tailwindcss/node@4.1.7': - resolution: {integrity: sha512-9rsOpdY9idRI2NH6CL4wORFY0+Q6fnx9XP9Ju+iq/0wJwGD5IByIgFmwVbyy4ymuyprj8Qh4ErxMKTUL4uNh3g==} - - '@tailwindcss/oxide-android-arm64@4.1.7': - resolution: {integrity: sha512-IWA410JZ8fF7kACus6BrUwY2Z1t1hm0+ZWNEzykKmMNM09wQooOcN/VXr0p/WJdtHZ90PvJf2AIBS/Ceqx1emg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@tailwindcss/oxide-darwin-arm64@4.1.7': - resolution: {integrity: sha512-81jUw9To7fimGGkuJ2W5h3/oGonTOZKZ8C2ghm/TTxbwvfSiFSDPd6/A/KE2N7Jp4mv3Ps9OFqg2fEKgZFfsvg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.1.7': - resolution: {integrity: sha512-q77rWjEyGHV4PdDBtrzO0tgBBPlQWKY7wZK0cUok/HaGgbNKecegNxCGikuPJn5wFAlIywC3v+WMBt0PEBtwGw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-freebsd-x64@4.1.7': - resolution: {integrity: sha512-RfmdbbK6G6ptgF4qqbzoxmH+PKfP4KSVs7SRlTwcbRgBwezJkAO3Qta/7gDy10Q2DcUVkKxFLXUQO6J3CRvBGw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7': - resolution: {integrity: sha512-OZqsGvpwOa13lVd1z6JVwQXadEobmesxQ4AxhrwRiPuE04quvZHWn/LnihMg7/XkN+dTioXp/VMu/p6A5eZP3g==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.7': - resolution: {integrity: sha512-voMvBTnJSfKecJxGkoeAyW/2XRToLZ227LxswLAwKY7YslG/Xkw9/tJNH+3IVh5bdYzYE7DfiaPbRkSHFxY1xA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-musl@4.1.7': - resolution: {integrity: sha512-PjGuNNmJeKHnP58M7XyjJyla8LPo+RmwHQpBI+W/OxqrwojyuCQ+GUtygu7jUqTEexejZHr/z3nBc/gTiXBj4A==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-gnu@4.1.7': - resolution: {integrity: sha512-HMs+Va+ZR3gC3mLZE00gXxtBo3JoSQxtu9lobbZd+DmfkIxR54NO7Z+UQNPsa0P/ITn1TevtFxXTpsRU7qEvWg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-musl@4.1.7': - resolution: {integrity: sha512-MHZ6jyNlutdHH8rd+YTdr3QbXrHXqwIhHw9e7yXEBcQdluGwhpQY2Eku8UZK6ReLaWtQ4gijIv5QoM5eE+qlsA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-wasm32-wasi@4.1.7': - resolution: {integrity: sha512-ANaSKt74ZRzE2TvJmUcbFQ8zS201cIPxUDm5qez5rLEwWkie2SkGtA4P+GPTj+u8N6JbPrC8MtY8RmJA35Oo+A==} - 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.1.7': - resolution: {integrity: sha512-HUiSiXQ9gLJBAPCMVRk2RT1ZrBjto7WvqsPBwUrNK2BcdSxMnk19h4pjZjI7zgPhDxlAbJSumTC4ljeA9y0tEw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.1.7': - resolution: {integrity: sha512-rYHGmvoHiLJ8hWucSfSOEmdCBIGZIq7SpkPRSqLsH2Ab2YUNgKeAPT1Fi2cx3+hnYOrAb0jp9cRyode3bBW4mQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide@4.1.7': - resolution: {integrity: sha512-5SF95Ctm9DFiUyjUPnDGkoKItPX/k+xifcQhcqX5RA85m50jw1pT/KzjdvlqxRja45Y52nR4MR9fD1JYd7f8NQ==} - engines: {node: '>= 10'} - - '@tailwindcss/postcss@4.1.7': - resolution: {integrity: sha512-88g3qmNZn7jDgrrcp3ZXEQfp9CVox7xjP1HN2TFKI03CltPVd/c61ydn5qJJL8FYunn0OqBaW5HNUga0kmPVvw==} + '@tailwindcss/typography@0.5.16': + resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' '@tanstack/react-virtual@3.13.8': resolution: {integrity: sha512-meS2AanUg50f3FBSNoAdBSRAh8uS0ue01qm7zrw65KGJtiXB9QXfybqZwkh4uFpRv2iX/eu5tjcH5wqUpwYLPg==} @@ -4718,6 +4656,13 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -4825,6 +4770,11 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + browserslist@4.24.5: + resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bson-objectid@2.0.4: resolution: {integrity: sha512-vgnKAUzcDoa+AeyYwXCoHyF2q6u/8H46dxu5JN+4/TZeq/Dlinn0K6GvxsCLb3LHUJl0m/TLiEK31kUwtgocMQ==} @@ -4888,6 +4838,10 @@ packages: camel-case@3.0.0: resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + caniuse-lite@1.0.30001717: resolution: {integrity: sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==} @@ -4964,10 +4918,6 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -5162,6 +5112,11 @@ packages: crypt@0.0.2: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + cssfilter@0.0.10: resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} @@ -5468,6 +5423,9 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} @@ -5487,6 +5445,9 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -5621,6 +5582,9 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + electron-to-chromium@1.5.155: + resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} + emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -5640,10 +5604,6 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} - engines: {node: '>=10.13.0'} - enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -5740,6 +5700,10 @@ packages: engines: {node: '>=18'} hasBin: true + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -6148,6 +6112,9 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fresh@2.0.0: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} @@ -6791,6 +6758,10 @@ packages: resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} engines: {node: 20 || >=22} + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true @@ -7055,10 +7026,16 @@ packages: lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -7451,10 +7428,6 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - minizlib@3.0.2: - resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} - engines: {node: '>= 18'} - mj-context-menu@0.6.1: resolution: {integrity: sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==} @@ -7470,11 +7443,6 @@ packages: engines: {node: '>=10'} hasBin: true - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} @@ -7565,6 +7533,12 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} + next-mdx-remote@5.0.0: + resolution: {integrity: sha512-RNNbqRpK9/dcIFZs/esQhuLA8jANqlH694yqoDBK8hkVdJUndzzGmnPHa2nyi90N4Z9VmzuSWNRpr5ItT3M7xQ==} + engines: {node: '>=14', npm: '>=7'} + peerDependencies: + react: '>=16' + next-themes@0.4.6: resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: @@ -7672,6 +7646,9 @@ packages: resolution: {integrity: sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==} engines: {node: '>=8.9.4'} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + nodemailer@6.9.16: resolution: {integrity: sha512-psAuZdTIRN08HKVd/E8ObdV6NO7NTBY3KsC30F7M4H1OnmLCUNaS56FpYxyb26zWLSyYF9Ozch9KYHhHegsiOQ==} engines: {node: '>=6.0.0'} @@ -7685,6 +7662,10 @@ packages: 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@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -7706,6 +7687,10 @@ packages: 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'} + object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -7992,6 +7977,10 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -8038,6 +8027,30 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} + 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-load-config@6.0.1: resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} engines: {node: '>= 18'} @@ -8056,6 +8069,23 @@ packages: yaml: 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.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -8264,6 +8294,9 @@ packages: resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} @@ -8879,12 +8912,10 @@ packages: tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tailwindcss@4.1.7: - resolution: {integrity: sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + engines: {node: '>=14.0.0'} + hasBin: true tar-fs@2.1.2: resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} @@ -8903,10 +8934,6 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} - engines: {node: '>=18'} - term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -9256,6 +9283,9 @@ packages: unist-util-remove-position@5.0.0: resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + unist-util-remove@3.1.1: + resolution: {integrity: sha512-kfCqZK5YVY5yEa89tvpl7KnBBHu2c6CzMkqHUrlOqaRgGOMp0sMvwWOVrbAtj03KhovQB7i96Gda72v/EFE0vw==} + unist-util-remove@4.0.0: resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==} @@ -9268,6 +9298,9 @@ packages: unist-util-visit-parents@4.1.1: resolution: {integrity: sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==} + unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} @@ -9292,6 +9325,12 @@ packages: unrs-resolver@1.7.2: resolution: {integrity: sha512-BBKpaylOW8KbHsu378Zky/dGh4ckT/4NW/0SHRABdqRLcQJ2dAOjDo9g97p04sWflm0kqPqpUatxReNV/dqI5A==} + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + update-check@1.5.4: resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} @@ -9372,6 +9411,9 @@ packages: vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + vfile-matter@5.0.1: + resolution: {integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==} + vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} @@ -9593,10 +9635,6 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -9730,11 +9768,6 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.3.0 @@ -11100,10 +11133,10 @@ snapshots: '@date-fns/tz@1.2.0': {} - '@digitalbazaar/http-client@3.4.1(web-streams-polyfill@3.3.3)': + '@digitalbazaar/http-client@3.4.1(web-streams-polyfill@4.0.0-beta.3)': dependencies: ky: 0.33.3 - ky-universal: 0.11.0(ky@0.33.3)(web-streams-polyfill@3.3.3) + ky-universal: 0.11.0(ky@0.33.3)(web-streams-polyfill@4.0.0-beta.3) undici: 5.29.0 transitivePeerDependencies: - web-streams-polyfill @@ -12041,10 +12074,6 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 @@ -12329,6 +12358,12 @@ snapshots: - acorn - supports-color + '@mdx-js/react@3.1.0(@types/react@19.1.0)(react@19.1.0)': + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 19.1.0 + react: 19.1.0 + '@mermaid-js/parser@0.4.0': dependencies: langium: 3.3.1 @@ -12443,6 +12478,12 @@ snapshots: dependencies: fast-glob: 3.3.1 + '@next/mdx@15.3.2(@mdx-js/react@3.1.0(@types/react@19.1.0)(react@19.1.0))': + dependencies: + source-map: 0.7.4 + optionalDependencies: + '@mdx-js/react': 3.1.0(@types/react@19.1.0)(react@19.1.0) + '@next/swc-darwin-arm64@15.3.0': optional: true @@ -13598,77 +13639,13 @@ snapshots: '@swc/counter': 0.1.3 optional: true - '@tailwindcss/node@4.1.7': + '@tailwindcss/typography@0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.6.1(@swc/helpers@0.5.17))(@types/node@20.17.48)(typescript@5.8.2)))': dependencies: - '@ampproject/remapping': 2.3.0 - enhanced-resolve: 5.18.1 - jiti: 2.4.2 - lightningcss: 1.30.1 - magic-string: 0.30.17 - source-map-js: 1.2.1 - tailwindcss: 4.1.7 - - '@tailwindcss/oxide-android-arm64@4.1.7': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.1.7': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.1.7': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.1.7': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.7': - optional: true - - '@tailwindcss/oxide-linux-arm64-musl@4.1.7': - optional: true - - '@tailwindcss/oxide-linux-x64-gnu@4.1.7': - optional: true - - '@tailwindcss/oxide-linux-x64-musl@4.1.7': - optional: true - - '@tailwindcss/oxide-wasm32-wasi@4.1.7': - optional: true - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.7': - optional: true - - '@tailwindcss/oxide-win32-x64-msvc@4.1.7': - optional: true - - '@tailwindcss/oxide@4.1.7': - dependencies: - detect-libc: 2.0.4 - tar: 7.4.3 - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.7 - '@tailwindcss/oxide-darwin-arm64': 4.1.7 - '@tailwindcss/oxide-darwin-x64': 4.1.7 - '@tailwindcss/oxide-freebsd-x64': 4.1.7 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.7 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.7 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.7 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.7 - '@tailwindcss/oxide-linux-x64-musl': 4.1.7 - '@tailwindcss/oxide-wasm32-wasi': 4.1.7 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.7 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.7 - - '@tailwindcss/postcss@4.1.7': - dependencies: - '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.7 - '@tailwindcss/oxide': 4.1.7 - postcss: 8.5.3 - tailwindcss: 4.1.7 + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.6.1(@swc/helpers@0.5.17))(@types/node@20.17.48)(typescript@5.8.2)) '@tanstack/react-virtual@3.13.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: @@ -14302,13 +14279,13 @@ snapshots: transitivePeerDependencies: - react - ai-workflows@1.1.0(@aws-sdk/credential-providers@3.804.0)(@mdx-js/mdx@3.1.0(acorn@8.14.1))(encoding@0.1.13)(socks@2.8.4)(ws@8.18.0): + ai-workflows@1.1.0(@aws-sdk/credential-providers@3.804.0)(@mdx-js/mdx@3.1.0(acorn@8.14.1))(encoding@0.1.13)(socks@2.8.4)(web-streams-polyfill@4.0.0-beta.3)(ws@8.18.0): dependencies: '@ai-sdk/openai': 1.3.22(zod@3.24.4) ai: 4.3.15(react@18.3.1)(zod@3.24.4) ai-functions: 0.2.19(@aws-sdk/credential-providers@3.804.0)(encoding@0.1.13)(socks@2.8.4)(ws@8.18.0)(zod@3.24.4) gray-matter: 4.0.3 - mdxld: 0.1.3(@mdx-js/mdx@3.1.0(acorn@8.14.1)) + mdxld: 0.1.3(@mdx-js/mdx@3.1.0(acorn@8.14.1))(web-streams-polyfill@4.0.0-beta.3) openai: 4.97.0(encoding@0.1.13)(ws@8.18.0)(zod@3.24.4) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -14517,6 +14494,16 @@ snapshots: atomic-sleep@1.0.0: {} + autoprefixer@10.4.21(postcss@8.5.3): + dependencies: + browserslist: 4.24.5 + caniuse-lite: 1.0.30001717 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -14623,6 +14610,13 @@ snapshots: dependencies: fill-range: 7.1.1 + browserslist@4.24.5: + dependencies: + caniuse-lite: 1.0.30001717 + electron-to-chromium: 1.5.155 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.5) + bson-objectid@2.0.4: {} bson@6.10.3: {} @@ -14710,6 +14704,8 @@ snapshots: no-case: 2.3.2 upper-case: 1.1.3 + camelcase-css@2.0.1: {} + caniuse-lite@1.0.30001717: {} canonicalize@1.0.8: {} @@ -14816,8 +14812,6 @@ snapshots: chownr@2.0.0: optional: true - chownr@3.0.0: {} - ci-info@3.9.0: {} ci-info@4.2.0: {} @@ -14972,6 +14966,8 @@ snapshots: crypt@0.0.2: {} + cssesc@3.0.0: {} + cssfilter@0.0.10: {} csstype@3.1.3: {} @@ -15284,6 +15280,8 @@ snapshots: dependencies: dequal: 2.0.3 + didyoumean@1.2.2: {} + diff-match-patch@1.0.5: {} diff-sequences@29.6.3: {} @@ -15296,6 +15294,8 @@ snapshots: dependencies: path-type: 4.0.0 + dlv@1.1.3: {} + doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -15353,6 +15353,8 @@ snapshots: ee-first@1.1.1: {} + electron-to-chromium@1.5.155: {} + emoji-regex-xs@1.0.0: {} emoji-regex@8.0.0: {} @@ -15370,11 +15372,6 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.18.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -15694,6 +15691,8 @@ snapshots: '@esbuild/win32-ia32': 0.25.4 '@esbuild/win32-x64': 0.25.4 + escalade@3.2.0: {} + escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} @@ -15718,8 +15717,8 @@ snapshots: '@typescript-eslint/parser': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.26.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.26.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-react: 7.37.5(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.2.0(eslint@9.26.0(jiti@2.4.2)) @@ -15762,21 +15761,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)): - dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.0 - eslint: 9.26.0(jiti@2.4.2) - get-tsconfig: 4.10.0 - is-bun-module: 2.0.0 - stable-hash: 0.0.5 - tinyglobby: 0.2.13 - unrs-resolver: 1.7.2 - optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)) - transitivePeerDependencies: - - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.26.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 @@ -15792,18 +15776,18 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.26.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.26.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: @@ -15814,7 +15798,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -15825,7 +15809,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.26.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -15854,7 +15838,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.26.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -16319,6 +16303,8 @@ snapshots: forwarded@0.2.0: {} + fraction.js@4.3.7: {} + fresh@2.0.0: {} fs-constants@1.0.0: {} @@ -17110,7 +17096,10 @@ snapshots: dependencies: '@isaacs/cliui': 8.0.2 - jiti@2.4.2: {} + jiti@1.21.7: {} + + jiti@2.4.2: + optional: true jose@5.9.6: {} @@ -17188,9 +17177,9 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonld@8.3.3(web-streams-polyfill@3.3.3): + jsonld@8.3.3(web-streams-polyfill@4.0.0-beta.3): dependencies: - '@digitalbazaar/http-client': 3.4.1(web-streams-polyfill@3.3.3) + '@digitalbazaar/http-client': 3.4.1(web-streams-polyfill@4.0.0-beta.3) canonicalize: 1.0.8 lru-cache: 6.0.0 rdf-canonize: 3.4.0 @@ -17224,13 +17213,13 @@ snapshots: kolorist@1.8.0: {} - ky-universal@0.11.0(ky@0.33.3)(web-streams-polyfill@3.3.3): + ky-universal@0.11.0(ky@0.33.3)(web-streams-polyfill@4.0.0-beta.3): dependencies: abort-controller: 3.0.0 ky: 0.33.3 node-fetch: 3.3.2 optionalDependencies: - web-streams-polyfill: 3.3.3 + web-streams-polyfill: 4.0.0-beta.3 ky@0.33.3: {} @@ -17320,6 +17309,7 @@ snapshots: lightningcss-linux-x64-musl: 1.30.1 lightningcss-win32-arm64-msvc: 1.30.1 lightningcss-win32-x64-msvc: 1.30.1 + optional: true lilconfig@3.1.3: {} @@ -17348,8 +17338,12 @@ snapshots: lodash-es@4.17.21: {} + lodash.castarray@4.4.0: {} + lodash.get@4.4.2: {} + lodash.isplainobject@4.0.6: {} + lodash.merge@4.6.2: {} lodash.sortby@4.7.0: {} @@ -17648,10 +17642,10 @@ snapshots: mdast@3.0.0: {} - mdxld@0.1.3(@mdx-js/mdx@3.1.0(acorn@8.14.1)): + mdxld@0.1.3(@mdx-js/mdx@3.1.0(acorn@8.14.1))(web-streams-polyfill@4.0.0-beta.3): dependencies: json5: 2.2.3 - jsonld: 8.3.3(web-streams-polyfill@3.3.3) + jsonld: 8.3.3(web-streams-polyfill@4.0.0-beta.3) remark-frontmatter: 5.0.0 remark-gfm: 4.0.1 remark-mdx: 3.1.0 @@ -18108,10 +18102,6 @@ snapshots: yallist: 4.0.0 optional: true - minizlib@3.0.2: - dependencies: - minipass: 7.1.2 - mj-context-menu@0.6.1: {} mkdirp-classic@0.5.3: {} @@ -18122,8 +18112,6 @@ snapshots: mkdirp@1.0.4: {} - mkdirp@3.0.1: {} - mlly@1.7.4: dependencies: acorn: 8.14.1 @@ -18184,6 +18172,20 @@ snapshots: netmask@2.0.2: {} + next-mdx-remote@5.0.0(@types/react@19.1.0)(acorn@8.14.1)(react@19.1.0): + dependencies: + '@babel/code-frame': 7.27.1 + '@mdx-js/mdx': 3.1.0(acorn@8.14.1) + '@mdx-js/react': 3.1.0(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + unist-util-remove: 3.1.1 + vfile: 6.0.3 + vfile-matter: 5.0.1 + transitivePeerDependencies: + - '@types/react' + - acorn + - supports-color + next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 @@ -18372,6 +18374,8 @@ snapshots: mkdirp: 0.5.6 resolve: 1.22.10 + node-releases@2.0.19: {} + nodemailer@6.9.16: {} nopt@5.0.0: @@ -18381,6 +18385,8 @@ snapshots: normalize-path@3.0.0: {} + normalize-range@0.1.2: {} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -18401,6 +18407,8 @@ snapshots: object-assign@4.1.1: {} + object-hash@3.0.0: {} + object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -18749,6 +18757,8 @@ snapshots: picomatch@4.0.2: {} + pify@2.3.0: {} + pify@4.0.1: {} pino-abstract-transport@2.0.0: @@ -18814,6 +18824,26 @@ snapshots: possible-typed-array-names@1.1.0: {} + postcss-import@15.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.5.3): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.3 + + postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.6.1(@swc/helpers@0.5.17))(@types/node@20.17.48)(typescript@5.8.2)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.7.1 + optionalDependencies: + postcss: 8.5.3 + ts-node: 10.9.2(@swc/core@1.6.1(@swc/helpers@0.5.17))(@types/node@20.17.48)(typescript@5.8.2) + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.3)(tsx@4.19.2)(yaml@2.7.1): dependencies: lilconfig: 3.1.3 @@ -18823,6 +18853,23 @@ snapshots: tsx: 4.19.2 yaml: 2.7.1 + postcss-nested@6.2.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.0.10: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + postcss@8.4.31: dependencies: nanoid: 3.3.11 @@ -19056,6 +19103,10 @@ snapshots: react@19.1.0: {} + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -19940,9 +19991,32 @@ snapshots: tabbable@6.2.0: {} - tailwindcss@4.1.7: {} - - tapable@2.2.1: {} + tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.6.1(@swc/helpers@0.5.17))(@types/node@20.17.48)(typescript@5.8.2)): + 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.3 + 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.5.3 + postcss-import: 15.1.0(postcss@8.5.3) + postcss-js: 4.0.1(postcss@8.5.3) + postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.6.1(@swc/helpers@0.5.17))(@types/node@20.17.48)(typescript@5.8.2)) + postcss-nested: 6.2.0(postcss@8.5.3) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node tar-fs@2.1.2: dependencies: @@ -19985,15 +20059,6 @@ snapshots: yallist: 4.0.0 optional: true - tar@7.4.3: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.0.2 - mkdirp: 3.0.1 - yallist: 5.0.0 - term-size@2.2.1: {} terser@5.16.9: @@ -20126,6 +20191,27 @@ snapshots: ts-interface-checker@0.1.13: {} + ts-node@10.9.2(@swc/core@1.6.1(@swc/helpers@0.5.17))(@types/node@20.17.48)(typescript@5.8.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.17.48 + acorn: 8.14.1 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.8.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.6.1(@swc/helpers@0.5.17) + optional: true + ts-node@10.9.2(@swc/core@1.6.1(@swc/helpers@0.5.17))(@types/node@22.15.14)(typescript@5.8.2): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -20381,6 +20467,12 @@ snapshots: '@types/unist': 3.0.3 unist-util-visit: 5.0.0 + unist-util-remove@3.1.1: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + unist-util-remove@4.0.0: dependencies: '@types/unist': 3.0.3 @@ -20400,6 +20492,11 @@ snapshots: '@types/unist': 2.0.11 unist-util-is: 5.2.1 + unist-util-visit-parents@5.1.3: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -20445,6 +20542,12 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.7.2 '@unrs/resolver-binding-win32-x64-msvc': 1.7.2 + update-browserslist-db@1.1.3(browserslist@4.24.5): + dependencies: + browserslist: 4.24.5 + escalade: 3.2.0 + picocolors: 1.1.1 + update-check@1.5.4: dependencies: registry-auth-token: 3.3.2 @@ -20516,6 +20619,11 @@ snapshots: '@types/unist': 3.0.3 vfile: 6.0.3 + vfile-matter@5.0.1: + dependencies: + vfile: 6.0.3 + yaml: 2.7.1 + vfile-message@4.0.2: dependencies: '@types/unist': 3.0.3 @@ -20526,6 +20634,24 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 + vite-node@1.6.1(@types/node@20.17.48)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.39.0): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + pathe: 1.1.2 + picocolors: 1.1.1 + vite: 5.4.19(@types/node@20.17.48)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.39.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vite-node@1.6.1(@types/node@22.15.14)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.39.0): dependencies: cac: 6.7.14 @@ -20544,6 +20670,18 @@ snapshots: - supports-color - terser + vite@5.4.19(@types/node@20.17.48)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.39.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.3 + rollup: 4.40.2 + optionalDependencies: + '@types/node': 20.17.48 + fsevents: 2.3.3 + lightningcss: 1.30.1 + sass: 1.77.4 + terser: 5.39.0 + vite@5.4.19(@types/node@22.15.14)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.39.0): dependencies: esbuild: 0.21.5 @@ -20556,6 +20694,40 @@ snapshots: sass: 1.77.4 terser: 5.39.0 + vitest@1.6.1(@types/node@20.17.48)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.39.0): + dependencies: + '@vitest/expect': 1.6.1 + '@vitest/runner': 1.6.1 + '@vitest/snapshot': 1.6.1 + '@vitest/spy': 1.6.1 + '@vitest/utils': 1.6.1 + acorn-walk: 8.3.4 + chai: 4.5.0 + debug: 4.4.0 + execa: 8.0.1 + local-pkg: 0.5.1 + magic-string: 0.30.17 + pathe: 1.1.2 + picocolors: 1.1.1 + std-env: 3.9.0 + strip-literal: 2.1.1 + tinybench: 2.9.0 + tinypool: 0.8.4 + vite: 5.4.19(@types/node@20.17.48)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.39.0) + vite-node: 1.6.1(@types/node@20.17.48)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.39.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 20.17.48 + transitivePeerDependencies: + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vitest@1.6.1(@types/node@22.15.14)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.39.0): dependencies: '@vitest/expect': 1.6.1 @@ -20762,8 +20934,6 @@ snapshots: yallist@4.0.0: {} - yallist@5.0.0: {} - yaml@1.10.2: {} yaml@2.7.1: {}